forked from GNUsocial/gnu-social
		
	[CARDS][Note] Note factory template macro created, allows Notes to be represented with completely different macros/blocks, possible to extend types through additional events. Compact Notes have a max height, content can be scrolled by [CSS] Avatars, and Embed attachments now have a max-block-size which acts independently of image orientation
This commit is contained in:
		| @@ -1,5 +1,5 @@ | ||||
| {% extends 'stdgrid.html.twig' %} | ||||
| {% import '/cards/macros/note.html.twig' as noteView %} | ||||
| {% import '/cards/macros/note/factory.html.twig' as NoteFactory %} | ||||
|  | ||||
| {% block title %}{% if page_title is defined %}{{ page_title | trans }}{% endif %}{% endblock %} | ||||
|  | ||||
| @@ -39,9 +39,11 @@ | ||||
|                 {% for conversation in notes %} | ||||
|                     {% block current_note %} | ||||
|                         {% if conversation is instanceof('array') %} | ||||
|                             {{ noteView.note_vanilla(conversation['note'], conversation['replies'], {'depth': 0}) }} | ||||
|                         {% else %} | ||||
|                             {{ noteView.note_vanilla(conversation) }} | ||||
|                             {% set args = { 'type': 'vanilla_full', 'note': conversation['note'], 'replies': conversation['replies'] | default, 'extra': { 'depth': 0 } } %} | ||||
|                             {{ NoteFactory.constructor(args) }} | ||||
| {#                        {% else %} | ||||
|                             {% set args = { 'type': 'vanilla_full', 'note': conversation, 'extra': { 'depth': 0 } } %} | ||||
|                             {{ NoteFactory.constructor(args) }}#} | ||||
|                         {% endif %} | ||||
|                         <hr class="hr-replies-end" role="separator" aria-label="{{ 'Marks the end of previous conversation\'s initial note' | trans }}"> | ||||
|                     {% endblock current_note %} | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| {% import '/cards/macros/note.html.twig' as noteView %} | ||||
| {% import '/cards/macros/note/factory.html.twig' as NoteFactory %} | ||||
|  | ||||
| <section class="frame-section frame-section-padding"> | ||||
|     <div class="section-title"> | ||||
| @@ -8,6 +8,7 @@ | ||||
|     </div> | ||||
|  | ||||
|     {% for note in related_notes %} | ||||
|         {{ noteView.note_compact(note) }} | ||||
|         {% set args = { 'type': 'vanilla_compact', 'note': note } %} | ||||
|         {{ NoteFactory.constructor(args) }} | ||||
|     {% endfor %} | ||||
| </section> | ||||
| @@ -73,15 +73,10 @@ | ||||
| } | ||||
|  | ||||
| .embed img { | ||||
|     height: auto; | ||||
|     margin-right: var(--s); | ||||
|     width: 25%; | ||||
| } | ||||
|  | ||||
| .embed img { | ||||
|     max-height: min-content; | ||||
|     max-width: min-content; | ||||
|     padding: unset; | ||||
|     margin-right: var(--s); | ||||
|     max-block-size: 128px; | ||||
|     width: auto; | ||||
| } | ||||
|  | ||||
| .feed-header>h1,.feed-header>h2,.feed-header>h3,.feed-header>h4,.feed-header>h5,.feed-header>h6 { | ||||
| @@ -238,7 +233,6 @@ | ||||
|     border-radius: 0 var(--s) 0 0; | ||||
|     display: flex; | ||||
|     line-height: initial; | ||||
|     padding: 4px var(--s) 0 0; | ||||
| } | ||||
|  | ||||
| .note-info { | ||||
| @@ -338,11 +332,6 @@ | ||||
|     opacity: .5; | ||||
| } | ||||
|  | ||||
| .hr-replies-end { | ||||
|     margin-top: var(--xl); | ||||
|     margin-bottom: var(--xl); | ||||
| } | ||||
|  | ||||
| .hr-replies-end:last-of-type { | ||||
|     display: none; | ||||
| } | ||||
| @@ -350,19 +339,11 @@ | ||||
| .note-sidebar { | ||||
|     display: flex; | ||||
|     flex-direction: column; | ||||
|     padding: var(--s); | ||||
|     padding: var(--s) 4px 4px var(--s); | ||||
| } | ||||
|  | ||||
| .note-sidebar>* { | ||||
|     border-radius: 2px; | ||||
|     height: auto; | ||||
|     max-height: 3rem; | ||||
|     max-width: 3rem; | ||||
|     width: 100%; | ||||
| } | ||||
|  | ||||
| .note-sidebar img { | ||||
|     background: unset !important; | ||||
| .note-text { | ||||
|     word-break: break-all; | ||||
| } | ||||
|  | ||||
| .note-text a { | ||||
| @@ -389,35 +370,44 @@ | ||||
| .note-wrapper { | ||||
|     height: inherit; | ||||
|     flex: 1; | ||||
|     padding: 4px; | ||||
| } | ||||
|  | ||||
| .posting-extra .h-entry { | ||||
|     padding: var(--s); | ||||
| .posting-extra [id|="note-compact"] { | ||||
|     border: unset; | ||||
|     border-bottom: 1px solid var(--border); | ||||
| } | ||||
|  | ||||
| .posting-extra .note-sidebar { | ||||
|     all: unset; | ||||
| [id|="note-compact"] .note-wrapper { | ||||
|     padding: var(--s); | ||||
| } | ||||
|  | ||||
| .posting-extra .note-sidebar .avatar { | ||||
| [id|="note-compact"] .note-sidebar { | ||||
|     all: unset; | ||||
|     max-width: 1em; | ||||
|     max-height: 1em; | ||||
|     min-width: 1em; | ||||
|     display: inline-flex; | ||||
|     margin-right: 4px; | ||||
| } | ||||
|  | ||||
| [id|="note-compact"] .note-sidebar img, | ||||
| .note-sidebar img { | ||||
|     background: unset !important; | ||||
| } | ||||
|  | ||||
| [id|="note-compact"] hr { | ||||
|     margin-bottom: 4px; | ||||
|     margin-top: 4px; | ||||
| } | ||||
|  | ||||
| [id|="note-compact"] { | ||||
|     display: block; | ||||
|     width: 100%; | ||||
|     max-height: 16vh; | ||||
|     word-break: break-all; | ||||
|     overflow: auto; | ||||
|     touch-action: manipulation; | ||||
| } | ||||
|  | ||||
| @media only screen and (max-width:1280px) { | ||||
|     .note-sidebar { | ||||
|         max-width: min-content !important; | ||||
|     } | ||||
|  | ||||
|     .note-sidebar .avatar { | ||||
|         min-width: var(--xl) !important; | ||||
|     } | ||||
|  | ||||
|     .note-replies .note-replies { | ||||
|         margin-left: .33em; | ||||
|     } | ||||
|   | ||||
| @@ -96,8 +96,8 @@ body { | ||||
| } | ||||
|  | ||||
| p { | ||||
|     margin-top: 4px; | ||||
|     margin-bottom: 4px; | ||||
|     margin-top: 0; | ||||
|     margin-bottom: var(--s); | ||||
| } | ||||
|  | ||||
| h1,h2,h3,h4,h5 { | ||||
|   | ||||
| @@ -18,16 +18,6 @@ | ||||
|     padding: 2px 6px; | ||||
| } | ||||
|  | ||||
| .avatar { | ||||
|     border-radius: 2px; | ||||
|     height: auto; | ||||
|     margin-right: 5px; | ||||
|     max-height: 4rem; | ||||
|     max-width: 4rem; | ||||
|     min-width: var(--xxl); | ||||
|     width: 100%; | ||||
| } | ||||
|  | ||||
| .button-container { | ||||
|     background-color: var(--foreground); | ||||
|     border: none !important; | ||||
| @@ -227,7 +217,17 @@ | ||||
| } | ||||
|  | ||||
| .profile-info .avatar { | ||||
|     flex: .5; | ||||
|     border-radius: 2px; | ||||
|     height: auto; | ||||
|  | ||||
|     max-block-size: 3em; | ||||
|     width: auto; | ||||
|     margin-right: var(--s); | ||||
| } | ||||
|  | ||||
| .avatar { | ||||
|     max-block-size: 2em; | ||||
|     width: auto; | ||||
| } | ||||
|  | ||||
| .profile-info section { | ||||
| @@ -281,10 +281,6 @@ | ||||
|     mask-image: url(../icons/remove-actor.svg); | ||||
| } | ||||
|  | ||||
| section { | ||||
|     margin-bottom: var(--s); | ||||
| } | ||||
|  | ||||
| .section-details-subtitle .section-details-subtitle:not(:last-of-type) { | ||||
|     margin-bottom: var(--s); | ||||
| } | ||||
|   | ||||
| @@ -23,7 +23,7 @@ | ||||
| {% endblock note_actions %} | ||||
|  | ||||
| {% block note_replies %} | ||||
|     {% import '/cards/macros/note.html.twig' as noteView %} | ||||
|     {% import '/cards/macros/note/factory.html.twig' as NoteFactory %} | ||||
|  | ||||
|     {% if replies is defined and replies is not empty %} | ||||
|         <section class="note-replies" title="{{ 'Replies to ' | trans }}{{ nickname }}{{ '\'s note' | trans }}"> | ||||
| @@ -37,7 +37,8 @@ | ||||
|                         {% set extra = extra|merge(parent) %} | ||||
|                     {% endif %} | ||||
|                     <span class="note-replies-indicator" role="presentation"></span> | ||||
|                     {{ noteView.note_vanilla(conversation['note'], conversation['replies'], extra) }} | ||||
|                     {% set args = { 'type': 'vanilla_full', 'note': conversation['note'], 'replies': conversation['replies'] | default, 'extra': extra } %} | ||||
|                     {{ NoteFactory.constructor(args) }} | ||||
|                 {% endfor %} | ||||
|             </div> | ||||
|         </section> | ||||
|   | ||||
| @@ -1,2 +1,2 @@ | ||||
| {% from 'cards/macros/note.html.twig' import note_compact %} | ||||
| {{ note_compact(note) }} | ||||
| {% from 'cards/macros/note/types.html.twig' import vanilla_compact %} | ||||
| {{ vanilla_compact({'note': note}) }} | ||||
| @@ -1,76 +0,0 @@ | ||||
| {% macro note_vanilla(note, replies, extra) %} | ||||
|     {% set actor = note.getActor() %} | ||||
|     {% set nickname = actor.getNickname() %} | ||||
|     {% set fullname = actor.getFullname() %} | ||||
|     {% set actor_uri = actor.getUri() %} | ||||
|     {% set actor_url = actor.getUrl() %} | ||||
|     {% set mention = mention(actor) %} | ||||
|     {% set note_language = note.getNoteLanguageShortDisplay() %} | ||||
|  | ||||
|     <article | ||||
|             tabindex="0" | ||||
|             title="{{'A note by actor' | trans}} {{ nickname }}" | ||||
|             id="{{ 'note-anchor-' ~ note.getId() }}" | ||||
|             class="h-entry hentry note" | ||||
|             lang="{{ note.getLanguageLocale() }}"> | ||||
|         {{ block('note_sidebar', 'cards/blocks/note.html.twig') }} | ||||
|  | ||||
|         <div class="note-wrapper"> | ||||
|             {{ block('note_info', 'cards/blocks/note.html.twig') }} | ||||
|  | ||||
|             <section class="e-content entry-content note-content" title="{{ 'Note\'s main content' | trans }}"> | ||||
|                 {% if extra.parent is defined  %} | ||||
|                     <em | ||||
|                             tabindex="0" | ||||
|                             class="note-replies-parent" | ||||
|                             title="{{'This is a reply with depth: ' | trans}} {{ extra.depth }}" | ||||
|                             aria-flowto="note-anchor-"> | ||||
|                         {{'in reply to' | trans}} {{ extra.parent | raw }} | ||||
|                     </em> | ||||
|                 {% endif %} | ||||
|                 {{ block('note_text', 'cards/blocks/note.html.twig') }} | ||||
|                 {{ block('note_attachments', 'cards/blocks/note.html.twig') }} | ||||
|                 {{ block('note_links', 'cards/blocks/note.html.twig') }} | ||||
|             </section> | ||||
|         </div> | ||||
|         {{ block('note_complementary', 'cards/blocks/note.html.twig') }} | ||||
|     </article> | ||||
|  | ||||
|     {% if replies is defined %} | ||||
|         {{ block('note_replies', 'cards/blocks/note.html.twig') }} | ||||
|     {% endif %} | ||||
| {% endmacro note_vanilla %} | ||||
|  | ||||
| {% macro note_compact(note) %} | ||||
|     {% set actor = note.getActor() %} | ||||
|     {% set nickname = actor.getNickname() %} | ||||
|     {% set fullname = actor.getFullname() %} | ||||
|     {% set actor_uri = actor.getUri() %} | ||||
|     {% set actor_url = actor.getUrl() %} | ||||
|     {% set mention = mention(actor) %} | ||||
|  | ||||
|     <article | ||||
|             tabindex="0" | ||||
|             title="{{'A note by actor' | trans}} {{ nickname }}" | ||||
|             id="{{ 'note-compact-anchor-' ~ note.getId() }}" | ||||
|             class="h-entry hentry note" | ||||
|             lang="{{ note.getLanguageLocale() }}"> | ||||
|         <div class="note-wrapper"> | ||||
|             <header class="note-info"> | ||||
|                 {{ block('note_sidebar', 'cards/blocks/note.html.twig') }} | ||||
|                 {{ block('note_author', 'cards/blocks/note.html.twig') }} | ||||
|             </header> | ||||
|  | ||||
|             <section class="e-content entry-content note-content" title="{{ 'Note\'s main content' | trans }}"> | ||||
|                 <small class="note-conversation-info"> | ||||
|                     <a href="{{ note.getConversationUrl() }}" | ||||
|                        class="note-conversation-url">{{ 'in conversation' | trans }}</a> | ||||
|                     <a href="{{ note.getUrl() }}" | ||||
|                        class="note-url">{{ note.getModified() | ago }}</a> | ||||
|                 </small> | ||||
|                 <hr> | ||||
|                 {{ block('note_text', 'cards/blocks/note.html.twig') }} | ||||
|             </section> | ||||
|         </div> | ||||
|     </article> | ||||
| {% endmacro note_compact %} | ||||
							
								
								
									
										40
									
								
								templates/cards/macros/note/factory.html.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								templates/cards/macros/note/factory.html.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| {# | ||||
| Note factory constructor | ||||
|  | ||||
|     There are various Note types: | ||||
|         - Vanilla (common type); | ||||
|             + Full; | ||||
|             + Compact; | ||||
|         - Page; | ||||
|             + Full; | ||||
|             + Compact; | ||||
|  | ||||
|     This constructor accepts an array of args, this array may or not contain some elements, depending on the Note | ||||
|     type in question. | ||||
|     However, there's 1 GUARANTEE: | ||||
|         - First element identifies note type via a string; | ||||
|     This string will be compared, when there's a match the contructor delegates its respective macro. | ||||
|  | ||||
|     The array of args passed should have the following structure for the default types: | ||||
|     - Vanilla (common type); | ||||
|         + Full: { 'type': { 'vanilla_full' }, 'note': note, ?'replies': { note, ?replies }, ?'extra': { 'foo': bar }; | ||||
|         + Compact: { 'type': { 'vanilla_compact' }, 'note': note, ?'extra': { 'foo': bar } }; | ||||
|     - Page; | ||||
|         + Full { 'type': { 'page_full' }, 'note': note, ?'replies': { note, ?replies }, ?'extra': { 'foo': bar }; | ||||
|         + Compact { 'type': { 'page_compact' }, 'note': note, ?'extra': { 'foo': bar } }; | ||||
| #} | ||||
| {% macro constructor(args) %} | ||||
|     {% import '/cards/macros/note/types.html.twig' as NoteTypes %} | ||||
|  | ||||
|     {% if args.type is same as 'vanilla_full' %} | ||||
|         {{ NoteTypes.vanilla_full(args) }} | ||||
|     {% elseif args.type is same as 'vanilla_compact' %} | ||||
|         {{ NoteTypes.vanilla_compact(args) }} | ||||
|     {% elseif args.type is same as 'page_full' %} | ||||
|         {{ NoteTypes.page_full(args) }} | ||||
|     {% elseif args.type is same as 'page_compact' %} | ||||
|         {{ NoteTypes.page_compact(args) }} | ||||
|     {% else %} | ||||
|         {{ NoteTypes.vanilla_full(args) }} | ||||
|     {% endif %} | ||||
| {% endmacro constructor %} | ||||
							
								
								
									
										175
									
								
								templates/cards/macros/note/types.html.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										175
									
								
								templates/cards/macros/note/types.html.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,175 @@ | ||||
|  | ||||
| {# args: { 'type': { 'vanilla_full' }, 'note': note, ?'replies': { note, ?replies }, ?'extra': { 'foo': bar } #} | ||||
| {% macro vanilla_full(args) %} | ||||
|     {% set note = args.note %} | ||||
|     {% if args.replies is defined %}{% set replies = args.replies %}{% else %}{% set replies = null %}{% endif %} | ||||
|     {% if args.extra is defined %}{% set extra = args.extra %}{% else %}{% set extra = null %}{% endif %} | ||||
|  | ||||
|     {% set actor = note.getActor() %} | ||||
|     {% set nickname = actor.getNickname() %} | ||||
|     {% set fullname = actor.getFullname() %} | ||||
|     {% set actor_uri = actor.getUri() %} | ||||
|     {% set actor_url = actor.getUrl() %} | ||||
|     {% set mention = mention(actor) %} | ||||
|     {% set note_language = note.getNoteLanguageShortDisplay() %} | ||||
|  | ||||
|     <article | ||||
|             tabindex="0" | ||||
|             title="{{'A note by actor' | trans}} {{ nickname }}" | ||||
|             id="{{ 'note-anchor-' ~ note.getId() }}" | ||||
|             class="h-entry hentry note" | ||||
|             lang="{{ note.getLanguageLocale() }}"> | ||||
|         {{ block('note_sidebar', 'cards/blocks/note.html.twig') }} | ||||
|  | ||||
|         <div class="note-wrapper"> | ||||
|             {{ block('note_info', 'cards/blocks/note.html.twig') }} | ||||
|  | ||||
|             <section class="e-content entry-content note-content" title="{{ 'Note\'s main content' | trans }}"> | ||||
|                 {% if extra.parent is defined  %} | ||||
|                     <em | ||||
|                             tabindex="0" | ||||
|                             class="note-replies-parent" | ||||
|                             title="{{'This is a reply with depth: ' | trans}} {{ extra.depth }}" | ||||
|                             aria-flowto="note-anchor-"> | ||||
|                         {{'in reply to' | trans}} {{ extra.parent | raw }} | ||||
|                     </em> | ||||
|                 {% endif %} | ||||
|                 {{ block('note_text', 'cards/blocks/note.html.twig') }} | ||||
|                 {{ block('note_attachments', 'cards/blocks/note.html.twig') }} | ||||
|                 {{ block('note_links', 'cards/blocks/note.html.twig') }} | ||||
|             </section> | ||||
|         </div> | ||||
|         {{ block('note_complementary', 'cards/blocks/note.html.twig') }} | ||||
|     </article> | ||||
|  | ||||
|     {% if replies is defined %} | ||||
|         {{ block('note_replies', 'cards/blocks/note.html.twig') }} | ||||
|     {% endif %} | ||||
| {% endmacro vanilla_full %} | ||||
|  | ||||
|  | ||||
| {# args: { 'type': { 'vanilla_compact' }, 'note': note, ?'extra': { 'foo': bar } } #} | ||||
| {% macro vanilla_compact(args) %} | ||||
|     {% set note = args.note %} | ||||
|     {% if args.extra is defined %}{% set extra = args.extra %}{% else %}{% set extra = null %}{% endif %} | ||||
|  | ||||
|     {% set actor = note.getActor() %} | ||||
|     {% set nickname = actor.getNickname() %} | ||||
|     {% set fullname = actor.getFullname() %} | ||||
|     {% set actor_uri = actor.getUri() %} | ||||
|     {% set actor_url = actor.getUrl() %} | ||||
|     {% set mention = mention(actor) %} | ||||
|  | ||||
|     <article | ||||
|             tabindex="0" | ||||
|             title="{{'A note by actor' | trans}} {{ nickname }}" | ||||
|             id="{{ 'note-compact-anchor-' ~ note.getId() }}" | ||||
|             class="h-entry hentry note" | ||||
|             lang="{{ note.getLanguageLocale() }}"> | ||||
|         <div class="note-wrapper"> | ||||
|             <header class="note-info"> | ||||
|                 {{ block('note_sidebar', 'cards/blocks/note.html.twig') }} | ||||
|                 {{ block('note_author', 'cards/blocks/note.html.twig') }} | ||||
|             </header> | ||||
|  | ||||
|             <section class="e-content entry-content note-content-compact" title="{{ 'Note\'s main content' | trans }}"> | ||||
|                 <small class="note-conversation-info"> | ||||
|                     <a href="{{ note.getConversationUrl() }}" | ||||
|                        class="note-conversation-url">{{ 'in conversation' | trans }}</a> | ||||
|                     <a href="{{ note.getUrl() }}" | ||||
|                        class="note-url">{{ note.getModified() | ago }}</a> | ||||
|                 </small> | ||||
|                 <hr> | ||||
|                 {{ block('note_text', 'cards/blocks/note.html.twig') }} | ||||
|             </section> | ||||
|         </div> | ||||
|     </article> | ||||
| {% endmacro vanilla_compact %} | ||||
|  | ||||
|  | ||||
| {# args: { 'type': { 'page_full' }, 'note': note, ?'replies': { note, ?replies }, ?'extra': { 'foo': bar } #} | ||||
| {% macro page_full(args) %} | ||||
|     {% set note = args.note %} | ||||
|     {% if args.replies is defined %}{% set replies = args.replies %}{% else %}{% set replies = null %}{% endif %} | ||||
|     {% if args.extra is defined %}{% set extra = args.extra %}{% else %}{% set extra = null %}{% endif %} | ||||
|  | ||||
|     {% set actor = note.getActor() %} | ||||
|     {% set nickname = actor.getNickname() %} | ||||
|     {% set fullname = actor.getFullname() %} | ||||
|     {% set actor_uri = actor.getUri() %} | ||||
|     {% set actor_url = actor.getUrl() %} | ||||
|     {% set mention = mention(actor) %} | ||||
|     {% set note_language = note.getNoteLanguageShortDisplay() %} | ||||
|  | ||||
|     <article | ||||
|             tabindex="0" | ||||
|             title="{{'A note by actor' | trans}} {{ nickname }}" | ||||
|             id="{{ 'note-anchor-' ~ note.getId() }}" | ||||
|             class="h-entry hentry note" | ||||
|             lang="{{ note.getLanguageLocale() }}"> | ||||
|         {{ block('note_sidebar', 'cards/blocks/note.html.twig') }} | ||||
|  | ||||
|         <div class="note-wrapper"> | ||||
|             {{ block('note_info', 'cards/blocks/note.html.twig') }} | ||||
|  | ||||
|             <section class="e-content entry-content note-content" title="{{ 'Note\'s main content' | trans }}"> | ||||
|                 {% if extra.parent is defined  %} | ||||
|                     <em | ||||
|                             tabindex="0" | ||||
|                             class="note-replies-parent" | ||||
|                             title="{{'This is a reply with depth: ' | trans}} {{ extra.depth }}" | ||||
|                             aria-flowto="note-anchor-"> | ||||
|                         {{'in reply to' | trans}} {{ extra.parent | raw }} | ||||
|                     </em> | ||||
|                 {% endif %} | ||||
|                 {{ block('note_text', 'cards/blocks/note.html.twig') }} | ||||
|                 {{ block('note_attachments', 'cards/blocks/note.html.twig') }} | ||||
|                 {{ block('note_links', 'cards/blocks/note.html.twig') }} | ||||
|             </section> | ||||
|         </div> | ||||
|         {{ block('note_complementary', 'cards/blocks/note.html.twig') }} | ||||
|     </article> | ||||
|  | ||||
|     {% if replies is defined %} | ||||
|         {{ block('note_replies', 'cards/blocks/note.html.twig') }} | ||||
|     {% endif %} | ||||
| {% endmacro page_full %} | ||||
|  | ||||
|  | ||||
| {# args: { 'type': { 'page_compact' }, 'note': note, ?'extra': { 'foo': bar } } #} | ||||
| {% macro page_compact(args) %} | ||||
|     {% set note = args.note %} | ||||
|     {% if args.extra is defined %}{% set extra = args.extra %}{% else %}{% set extra = null %}{% endif %} | ||||
|  | ||||
|     {% set actor = note.getActor() %} | ||||
|     {% set nickname = actor.getNickname() %} | ||||
|     {% set fullname = actor.getFullname() %} | ||||
|     {% set actor_uri = actor.getUri() %} | ||||
|     {% set actor_url = actor.getUrl() %} | ||||
|     {% set mention = mention(actor) %} | ||||
|  | ||||
|     <article | ||||
|             tabindex="0" | ||||
|             title="{{'A note by actor' | trans}} {{ nickname }}" | ||||
|             id="{{ 'note-compact-anchor-' ~ note.getId() }}" | ||||
|             class="h-entry hentry note" | ||||
|             lang="{{ note.getLanguageLocale() }}"> | ||||
|         <div class="note-wrapper"> | ||||
|             <header class="note-info"> | ||||
|                 {{ block('note_sidebar', 'cards/blocks/note.html.twig') }} | ||||
|                 {{ block('note_author', 'cards/blocks/note.html.twig') }} | ||||
|             </header> | ||||
|  | ||||
|             <section class="e-content entry-content note-content" title="{{ 'Note\'s main content' | trans }}"> | ||||
|                 <small class="note-conversation-info"> | ||||
|                     <a href="{{ note.getConversationUrl() }}" | ||||
|                        class="note-conversation-url">{{ 'in conversation' | trans }}</a> | ||||
|                     <a href="{{ note.getUrl() }}" | ||||
|                        class="note-url">{{ note.getModified() | ago }}</a> | ||||
|                 </small> | ||||
|                 <hr> | ||||
|                 {{ block('note_text', 'cards/blocks/note.html.twig') }} | ||||
|             </section> | ||||
|         </div> | ||||
|     </article> | ||||
| {% endmacro page_compact %} | ||||
		Reference in New Issue
	
	Block a user