Web content https://monkeysatkeyboards.com/index.php/ en Optimizing images with CSS icon sprites https://monkeysatkeyboards.com/index.php/blog/optimizing-images-css-icon-sprites <!-- THEME DEBUG --> <!-- THEME HOOK: 'field' --> <!-- FILE NAME SUGGESTIONS: * field--node--title--blog-entry.html.twig x field--node--title.html.twig * field--node--blog-entry.html.twig * field--title.html.twig * field--string.html.twig * field.html.twig --> <!-- BEGIN OUTPUT from 'core/themes/classy/templates/field/field--node--title.html.twig' --> <span class="field field--name-title field--type-string field--label-hidden">Optimizing images with CSS icon sprites</span> <!-- END OUTPUT from 'core/themes/classy/templates/field/field--node--title.html.twig' --> <!-- THEME DEBUG --> <!-- THEME HOOK: 'field' --> <!-- FILE NAME SUGGESTIONS: * field--node--body--blog-entry.html.twig * field--node--body.html.twig * field--node--blog-entry.html.twig * field--body.html.twig x field--text-with-summary.html.twig * field.html.twig --> <!-- BEGIN OUTPUT from 'core/themes/classy/templates/field/field--text-with-summary.html.twig' --> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"> <!-- THEME DEBUG --> <!-- THEME HOOK: 'entity_embed_container' --> <!-- BEGIN OUTPUT from 'modules/contrib/entity_embed/templates/entity-embed-container.html.twig' --> <div data-embed-button="paragraphs" data-entity-label="Paragraphs" data-paragraph-id="8768ac79-e33a-407e-bb51-8c2a4900aa16" data-langcode="en" data-view-mode="embed" data-entity-embed-display="entity_reference:entity_reference_entity_view" data-entity-embed-display-settings="{&quot;view_mode&quot;:&quot;embed&quot;}" data-entity-type="embedded_paragraphs" data-entity-uuid="8768ac79-e33a-407e-bb51-8c2a4900aa16" class="embedded-entity"> <!-- THEME DEBUG --> <!-- THEME HOOK: 'field' --> <!-- FILE NAME SUGGESTIONS: * field--embedded-paragraphs--paragraph--embedded-paragraphs.html.twig * field--embedded-paragraphs--paragraph.html.twig * field--embedded-paragraphs--embedded-paragraphs.html.twig * field--paragraph.html.twig * field--entity-reference-revisions.html.twig x field.html.twig --> <!-- BEGIN OUTPUT from 'core/themes/classy/templates/field/field.html.twig' --> <div class="field field--name-paragraph field--type-entity-reference-revisions field--label-hidden field__item"> <!-- THEME DEBUG --> <!-- THEME HOOK: 'paragraph' --> <!-- FILE NAME SUGGESTIONS: * paragraph--paragraph-embed--embed.html.twig * paragraph--paragraph-embed.html.twig * paragraph--embed.html.twig x paragraph.html.twig --> <!-- BEGIN OUTPUT from 'themes/custom/makv3/templates/paragraph.html.twig' --> <div class="parallax-wrapper"> <div class="parallax-base" style="background-image:url(/sites/default/files/2020-06/CSS-sprite-monkeys-at-keyboards-blackbg.png);field_parallax_extra_styles"> <div class="parallax-content-wrapper" style="min-height:375px;"> </div> </div> <figcaption></figcaption></div> <div class="paragraph paragraph--type--paragraph-embed paragraph--view-mode--embed" style="background-color:#e8f0f5;opacity:1;field_parallax_extra_styles"> </div> <!-- END OUTPUT from 'themes/custom/makv3/templates/paragraph.html.twig' --> </div> <!-- END OUTPUT from 'core/themes/classy/templates/field/field.html.twig' --> </div> <!-- END OUTPUT from 'modules/contrib/entity_embed/templates/entity-embed-container.html.twig' --> <figcaption> </figcaption><h2>Choosing the right icons</h2> <p>There are many choices for icons available in 2020. We can easily incorporate icons from <a href="https://fontawesome.com/">FontAwesome</a>, <a href="https://material.io/resources/icons/?style=baseline">Material UI</a> and other <a href="https://reactjs.org/">React</a> based user interfaces. We should always reach for these first when it is an option. Often, however, we want to customize things for our clients. For these cases we use CSS icon "sprites".</p> <p>We want to take advantage of the idea of loading multiple resources while minimizing network traffic to do it, similar to how there are multiple graphics in one FontAwesome font file. Fortunately, modern CSS makes this very easy, if perhaps a little bit verbose. We borrow a term from game development here, and we'll call the resulting <span class="wpseo-score-text">CSS icon</span> a "sprite". Our sprites will have multiple states for hovering and clicking or touching, and we will include all images and states in one file.</p> <h2><img alt="CSS icon grid" data-entity-type="file" data-entity-uuid="57a876df-4fb8-4154-8504-84d5e15ed72e" height="212" src="/sites/default/files/inline-images/CSS-sprite-grid-lines-monkeys-at-keyboards.png" width="281" class="align-left" loading="lazy" />Preparation</h2> <p>What we need to do first is very straightforward. Make a regular shaped grid in a graphics file and pack multiple icon images into each square of the grid. The resulting file can be loaded in one request by the browser, and then cached for subsequent page visits. We chose SVG format for our client <a href="https://monacaron.com/">Mona Caron</a>, since the resulting file size came out smallest when compared against PNG or JPEG. The Adobe Illustrator template attached to this post is arranged for square 50x50 graphics, but there is no requirement here that the icons be square. A tall or wide shape is fine, as long as it is consistent for the entire grid.</p> <h2>CSS code</h2> <p>Once we have the graphics grid, the following CSS ties everything together.</p> <p><code>.icon {<br />   display: inline-block;<br />   overflow: hidden;<br />   background-image: url(</code><code>/path/to/sprites.svg);<br />   background-repeat: none;<br />   text-indent: 10000px;</code><br /><code>  width: 50px;<br />   height: 50px;<br /> }<br /><br /> .icon.facebook { background-position: -100px 0; }<br /> .icon.facebook:hover { background-position: -100px -50px; }<br /> .icon.facebook:active { background-position: -100px -100px; }<br /> /* ... repeated for each sprite ... */</code></p> <p>The positions in the grid are encoded into the <code>background-position </code>CSS property. The values are negative because we are shifting the image up and left from the (0, 0) origin. A <code>background-position</code> value of 0 0 would show the icon in the upper left corner of the grid image.</p> <h2>HTML code</h2> <p>Now to include this in our HTML we can write.</p> <p>&lt;i class="icon facebook"&gt;&lt;/i&gt;</p> <p>This will add a 50x50 Facebook icon to our page with hover and click states.</p> <h2>CSS icon results in practice</h2> <p>We have reduced the number of server connections here from twelve to one, a 91.6% reduction of traffic.</p> <p>This can translate to a significant significant time savings for people with limited bandwidth or on mobile devices.</p> <div class="callout icon comment">Let's discuss:  <a href="https://join.slack.com/t/monkeysatkeyboards/shared_invite/zt-f2gedl1y-3yWEJgUH939nhvoEgveOZA">Slack</a>,  <a href="https://www.facebook.com/MonkeysAtKeyboards">Facebook</a>, or  <a href="https://twitter.com/Monkey_Keyboard">Twitter</a>.</div> <div> </div> </div> <!-- END OUTPUT from 'core/themes/classy/templates/field/field--text-with-summary.html.twig' --> <!-- THEME DEBUG --> <!-- THEME HOOK: 'field' --> <!-- FILE NAME SUGGESTIONS: * field--node--uid--blog-entry.html.twig x field--node--uid.html.twig * field--node--blog-entry.html.twig * field--uid.html.twig * field--entity-reference.html.twig * field.html.twig --> <!-- BEGIN OUTPUT from 'core/themes/classy/templates/field/field--node--uid.html.twig' --> <span class="field field--name-uid field--type-entity-reference field--label-hidden"> <!-- THEME DEBUG --> <!-- THEME HOOK: 'username' --> <!-- BEGIN OUTPUT from 'core/themes/classy/templates/user/username.html.twig' --> <a title="View user profile." href="/index.php/users/fletch" lang="" about="/index.php/users/fletch" typeof="schema:Person" property="schema:name" datatype="" class="username">Fletch</a> <!-- END OUTPUT from 'core/themes/classy/templates/user/username.html.twig' --> </span> <!-- END OUTPUT from 'core/themes/classy/templates/field/field--node--uid.html.twig' --> <!-- THEME DEBUG --> <!-- THEME HOOK: 'field' --> <!-- FILE NAME SUGGESTIONS: * field--node--created--blog-entry.html.twig x field--node--created.html.twig * field--node--blog-entry.html.twig * field--created.html.twig * field--created.html.twig * field.html.twig --> <!-- BEGIN OUTPUT from 'core/themes/classy/templates/field/field--node--created.html.twig' --> <span class="field field--name-created field--type-created field--label-hidden">Tue, 06/23/2020 - 12:27</span> <!-- END OUTPUT from 'core/themes/classy/templates/field/field--node--created.html.twig' --> <!-- THEME DEBUG --> <!-- THEME HOOK: 'field' --> <!-- FILE NAME SUGGESTIONS: * field--node--field-attach--blog-entry.html.twig * field--node--field-attach.html.twig * field--node--blog-entry.html.twig * field--field-attach.html.twig * field--file.html.twig x field.html.twig --> <!-- BEGIN OUTPUT from 'core/themes/classy/templates/field/field.html.twig' --> <div class="field field--name-field-attach field--type-file field--label-above"> <div class="field__label">Attached files</div> <div class="field__items"> <div class="field__item"> <!-- THEME DEBUG --> <!-- THEME HOOK: 'file_link' --> <!-- BEGIN OUTPUT from 'core/themes/classy/templates/field/file-link.html.twig' --> <span class="file file--mime-application-octet-stream file--general"> <a href="/index.php/sites/default/files/CSS-sprite-grid-50-pixels-square-monkeys-at-keyboards.ait" type="application/octet-stream">CSS-sprite-grid-50-pixels-square-monkeys-at-keyboards.ait</a></span> <!-- END OUTPUT from 'core/themes/classy/templates/field/file-link.html.twig' --> </div> </div> </div> <!-- END OUTPUT from 'core/themes/classy/templates/field/field.html.twig' --> <!-- THEME DEBUG --> <!-- THEME HOOK: 'field' --> <!-- FILE NAME SUGGESTIONS: * field--node--field-tags--blog-entry.html.twig * field--node--field-tags.html.twig * field--node--blog-entry.html.twig * field--field-tags.html.twig * field--entity-reference.html.twig x field.html.twig --> <!-- BEGIN OUTPUT from 'core/themes/classy/templates/field/field.html.twig' --> <div class="field field--name-field-tags field--type-entity-reference field--label-hidden field__items"> <div class="field__item"><a href="/index.php/taxonomy/term/96" hreflang="en">CSS</a></div> <div class="field__item"><a href="/index.php/taxonomy/term/97" hreflang="en">CSS icon</a></div> <div class="field__item"><a href="/index.php/taxonomy/term/98" hreflang="en">HTML</a></div> <div class="field__item"><a href="/index.php/taxonomy/term/95" hreflang="en">Web content</a></div> </div> <!-- END OUTPUT from 'core/themes/classy/templates/field/field.html.twig' --> <!-- THEME DEBUG --> <!-- THEME HOOK: 'links__node' --> <!-- FILE NAME SUGGESTIONS: x links--node.html.twig x links--node.html.twig * links.html.twig --> <!-- BEGIN OUTPUT from 'core/themes/classy/templates/content/links--node.html.twig' --> <!-- END OUTPUT from 'core/themes/classy/templates/content/links--node.html.twig' --> Tue, 23 Jun 2020 19:27:20 +0000 Fletch 397 at https://monkeysatkeyboards.com How to process photos for the web https://monkeysatkeyboards.com/index.php/blog/how-process-photos-web <!-- THEME DEBUG --> <!-- THEME HOOK: 'field' --> <!-- FILE NAME SUGGESTIONS: * field--node--title--blog-entry.html.twig x field--node--title.html.twig * field--node--blog-entry.html.twig * field--title.html.twig * field--string.html.twig * field.html.twig --> <!-- BEGIN OUTPUT from 'core/themes/classy/templates/field/field--node--title.html.twig' --> <span class="field field--name-title field--type-string field--label-hidden">How to process photos for the web</span> <!-- END OUTPUT from 'core/themes/classy/templates/field/field--node--title.html.twig' --> <!-- THEME DEBUG --> <!-- THEME HOOK: 'field' --> <!-- FILE NAME SUGGESTIONS: * field--node--body--blog-entry.html.twig * field--node--body.html.twig * field--node--blog-entry.html.twig * field--body.html.twig x field--text-with-summary.html.twig * field.html.twig --> <!-- BEGIN OUTPUT from 'core/themes/classy/templates/field/field--text-with-summary.html.twig' --> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><h2>How to process photos</h2> <!-- THEME DEBUG --> <!-- THEME HOOK: 'entity_embed_container' --> <!-- BEGIN OUTPUT from 'modules/contrib/entity_embed/templates/entity-embed-container.html.twig' --> <div data-embed-button="paragraphs" data-entity-label="Paragraphs" data-paragraph-id="2b87a152-1822-4017-b877-75945e02351c" data-langcode="en" data-view-mode="embed" data-entity-embed-display="entity_reference:entity_reference_entity_view" data-entity-embed-display-settings="{&quot;view_mode&quot;:&quot;embed&quot;}" data-entity-type="embedded_paragraphs" data-entity-uuid="2b87a152-1822-4017-b877-75945e02351c" class="embedded-entity"> <!-- THEME DEBUG --> <!-- THEME HOOK: 'field' --> <!-- FILE NAME SUGGESTIONS: * field--embedded-paragraphs--paragraph--embedded-paragraphs.html.twig * field--embedded-paragraphs--paragraph.html.twig * field--embedded-paragraphs--embedded-paragraphs.html.twig * field--paragraph.html.twig * field--entity-reference-revisions.html.twig x field.html.twig --> <!-- BEGIN OUTPUT from 'core/themes/classy/templates/field/field.html.twig' --> <div class="field field--name-paragraph field--type-entity-reference-revisions field--label-hidden field__item"> <!-- THEME DEBUG --> <!-- THEME HOOK: 'paragraph' --> <!-- FILE NAME SUGGESTIONS: * paragraph--paragraph-embed--embed.html.twig * paragraph--paragraph-embed.html.twig * paragraph--embed.html.twig x paragraph.html.twig --> <!-- BEGIN OUTPUT from 'themes/custom/makv3/templates/paragraph.html.twig' --> <div class="parallax-wrapper"> <div class="parallax-base" style="background-image:url(/sites/default/files/2020-06/processing-photos-web-monkeys-at-keyboards-01.png);field_parallax_extra_styles"> <div class="parallax-content-wrapper" style="min-height:320px;"> </div> </div> <figcaption><!-- THEME DEBUG --><!-- THEME HOOK: 'field' --><!-- FILE NAME SUGGESTIONS: * field--paragraph--field-parallax-caption--paragraph-embed.html.twig * field--paragraph--field-parallax-caption.html.twig * field--paragraph--paragraph-embed.html.twig * field--field-parallax-caption.html.twig x field--text.html.twig * field.html.twig --><!-- BEGIN OUTPUT from 'core/themes/classy/templates/field/field--text.html.twig' --><div class="clearfix text-formatted field field--name-field-parallax-caption field--type-text field--label-hidden field__item">Photographs of blank books by Laurel Tree Bindery</div> <!-- END OUTPUT from 'core/themes/classy/templates/field/field--text.html.twig' --> </figcaption></div> <div class="paragraph paragraph--type--paragraph-embed paragraph--view-mode--embed" style="background-color:#e8f0f5;opacity:1;field_parallax_extra_styles"> </div> <!-- END OUTPUT from 'themes/custom/makv3/templates/paragraph.html.twig' --> </div> <!-- END OUTPUT from 'core/themes/classy/templates/field/field.html.twig' --> </div> <!-- END OUTPUT from 'modules/contrib/entity_embed/templates/entity-embed-container.html.twig' --> <p>This guide on how to process photos is just the tip of the iceberg for photo editing and post-processing, but I hope it will give you a great foundation for processing your photos for posting online. We'll start with photographic file types and the critical difference between lossy and lossless. We'll examine best naming conventions and tips for organizing files. Finally we'll look at processing raw files and bulk processing files in Photoshop.</p> <p>When you process photos for the web, it's good to keep multiple versions of your files. The highest resolution and best quality of your images is the original file. I like to think of that file like a negative and keep it safe and backed up. If your camera or phone shoots raw files, that’s always going to be the best option.</p> <p>Handling and processing those original files can be challenging. Making files look good and load quickly is a critical balance to achieve. When uploading files to your website, the goal is high quality and fast speeds for users.</p> <h2>Lossy vs. Lossless</h2> <p>Images in GIF and JPEG formats are lossy, while TIFF, PNG, BMP and raw are lossless. What this means is that GIF and JPEG images are compressed by averaging the information. They become even more compressed each time you open and save them. </p> <p>GIF and JPEG should only be final versions. When you need new files sizes or output, go back to your lossless original. If your original photos are in GIF or JPEG your first step should be to copy those files somewhere safe and never open the originals.</p> <h2>Naming conventions</h2> <p>Before we get into the steps to process photos, let’s talk about naming image files.</p> <p>I'm picky, picky, picky about my naming conventions and you should be too for multiple reasons. First, the name stays with your file if it’s downloaded or shared. It’s also a claim of ownership. Finally, it is a ranking factor in SEO.</p> <blockquote> <p>Google extracts information about the subject matter of the image from the content of the page, including captions and image titles. Wherever possible, make sure images are placed near relevant text and on pages that are relevant to the image subject matter. </p> <p>Likewise, the filename can give Google clues about the subject matter of the image. </p> </blockquote> <p>From: <a href="https://support.google.com/webmasters/answer/114016?hl=en">Google Images Best Practices</a> </p> <p>Because of this blog post, I’ve revisited my own naming conventions. Up until today, I named my files using a combination of snake and Pascal cases. Kebab case is the new best practice for the web. </p> <div class="callout icon takenote"><strong>EXAMPLE</strong>: I’ve gone from MessageInABottle_LaurelTreeBindery01.png to message-in-a-bottle-laurel-tree-bindery-01.png.</div> <h2>TLDR </h2> <ul><li>camelCase</li> <li>PascalCase</li> <li>snake_case</li> <li>kebab-case</li> </ul><p><a href="https://medium.com/better-programming/string-case-styles-camel-pascal-snake-and-kebab-case-981407998841">Source</a></p> <div class="callout icon pencil"><strong>TIP</strong>: If you want to really optimize your SEO, consider having your keyword phrase in your image title and alt tags as well.</div> <h2>Process photos in bulk with Photoshop</h2> <p>Process RAW images into TIFF</p> <p>Open your raw photos in Photoshop. The raw image file type is camera maker dependent. <a href="https://en.wikipedia.org/wiki/Raw_image_format">Here’s a list over on Wikipedia</a>. I have a Nikon, so you’ll see that my files are nef. Personally, the Photoshop raw processor is the main place I edit.</p> <img alt="Step one of how to process photos. Screen shot of photoshop raw processing screen." data-entity-type="file" data-entity-uuid="19fa2dff-ec69-47e3-a19e-8fb072a853b5" src="/sites/default/files/inline-images/1-process-photos-open%20raw.png" class="align-center" width="768" height="719" loading="lazy" /><p>This is the time to look at and adjust how your photo looks.</p> <ul><li>White balance</li> <li>Exposure</li> <li>Levels</li> <li>Crop </li> <li>Basic rotation or /horizon correction</li> </ul><p><a href="https://helpx.adobe.com/camera-raw/using/make-color-tonal-adjustments-camera.html">Here's a guide to processing raw files from Adobe.</a> If my file needs additional touch up, I open it and do non-destructive editing in Photoshop. Alternatively, GIMP has a raw plugin that makes it a good, open source, free substitute. </p> <p>You can adjust each photo individually, or select multiple to make adjustments to an entire group. </p> <img alt="Step two of how to process photos. Screen shot showing bulk exposure on multiple photos." data-entity-type="file" data-entity-uuid="fa274925-60ad-4bb0-ba8d-13614e249408" src="/sites/default/files/inline-images/2-process-photos-Exposure.png" class="align-center" width="768" height="721" loading="lazy" /><p>When saving each raw photo, you get the option to change the name. Utilizing my new naming convention, I’ve set up the first part of the to be changed if needed, the second to be my company name, and let Photoshop add automatic numbering. I’m saving these as full sized, lossless TIFF files which will become my new working originals.  </p> <img alt="Step three of how to process photos. Screen shot of photoshop showing naming conventions and automatic numbering." data-entity-type="file" data-entity-uuid="b5eaef8b-de77-40d5-964b-8f3afaca1c5f" src="/sites/default/files/inline-images/3-process-photos-naming.png" class="align-center" width="768" height="889" loading="lazy" /><h2>Organize folders for bulk processing</h2> <p>I move my TIFF files into their own folder.</p> <img alt="Step four of how to process photos. Screen shot of folder re-organization with TIFF files in their own folder." data-entity-type="file" data-entity-uuid="6f311a93-926b-45ac-b523-d97639fc002f" src="/sites/default/files/inline-images/4-process-photos-Processing.png" class="align-center" width="492" height="264" loading="lazy" /><h2>Steps to bulk process photos.</h2> <p>I predominantly use bulk processing to save different sizes of my images and to add copyright information int he metadata. </p> <p>Go to file menu -&gt; Scripts - Image Processor </p> <img alt="Step five of how to process photos. Screen shot selecting image processor in Photoshop menus." data-entity-type="file" data-entity-uuid="39bbdab2-7ecd-4720-ae36-38177149c39f" src="/sites/default/files/inline-images/5-process-photos-scripts.png" class="align-center" width="768" height="888" loading="lazy" /><h3>Choose size and file options</h3> <p>1. Navigate to the  folder with the TIFF images. </p> <img alt="Step six of how to process photos. Screenshot choosing the TIFF folder in Photoshop." data-entity-type="file" data-entity-uuid="a15a0e64-4923-44ce-9ad0-fb6ea76f3839" src="/sites/default/files/inline-images/6-process-photos-navigate-tiff.png" class="align-center" width="719" height="509" loading="lazy" /><p>2. In the second step I use "save in same location” and move them later.</p> <img alt="Step seven of how to process photos. Screen shot of the image processing options in Photoshop." data-entity-type="file" data-entity-uuid="3877482f-0eab-4179-aca9-4445db6b3112" src="/sites/default/files/inline-images/7-process-photos-size-file-options.png" class="align-center" width="637" height="615" loading="lazy" /><p>3. In the third step choose your final file type and size: </p> <p>The options I’ve chosen here: JPEG, Quality 12, Resize to 1080px wide. Height is large enough to be irrelevant. This will not stretch your photos.<br /> TIFF is lossless and a good idea if this is still an interim stage.<br /> Native PSD is really not recommended unless just for your own use.</p> <p>4. This is where I add copyright information.</p> <p>After you process your JPEGs will be in their own folder.</p> <img alt="Step 8 of how to process photos. Screen shot of folder organization showing location of bulk processed JPEGs." data-entity-type="file" data-entity-uuid="78d60b68-a84f-40d1-939f-9350314db375" src="/sites/default/files/inline-images/8-process-photos-After-bulk.png" class="align-center" width="768" height="264" loading="lazy" /><h2>Photo processing results</h2> <p>Your final image size is really dependent on where the file is being uploaded. For example, for <a href="https://laureltreebindery.com/">Laurel Tree Bindery</a> I actually use a 1080 x 1080 square format. The website then creates and serves up smaller versions for different screen sizes.  </p> <img alt="Step nine of how to process photos. Screen shot of folder organization with JPEG folder moved out of the TIFF folder." data-entity-type="file" data-entity-uuid="59231204-df08-4781-beff-33aa7d96f433" src="/sites/default/files/inline-images/9-process-photos-results.png" class="align-center" width="492" height="264" loading="lazy" /><p>I often do end up creating a couple different JPEG end sizes. I will always go back to the TIFFs to create new sizes to submit to shows or to upload to different platforms. I never, ever open and re-save a JPEG. A JPEG is always a final image. </p> <h2>Final thoughts</h2> <p>This is just a basic guide on processing and bulk re-sizing images with Photoshop. Let me know what questions you have or if there are any tips you would like to share. </p> <div class="callout icon comment"><strong>Let's discuss</strong>: <a href="https://join.slack.com/t/monkeysatkeyboards/shared_invite/zt-f2gedl1y-3yWEJgUH939nhvoEgveOZA"> Slack</a>,  <a href="https://www.facebook.com/MonkeysAtKeyboards/posts/4000840389987968">Facebook</a>, or  <a href="https://twitter.com/Monkey_Keyboard/status/1276586448565743616">Twitter.</a></div> </div> <!-- END OUTPUT from 'core/themes/classy/templates/field/field--text-with-summary.html.twig' --> <!-- THEME DEBUG --> <!-- THEME HOOK: 'field' --> <!-- FILE NAME SUGGESTIONS: * field--node--uid--blog-entry.html.twig x field--node--uid.html.twig * field--node--blog-entry.html.twig * field--uid.html.twig * field--entity-reference.html.twig * field.html.twig --> <!-- BEGIN OUTPUT from 'core/themes/classy/templates/field/field--node--uid.html.twig' --> <span class="field field--name-uid field--type-entity-reference field--label-hidden"> <!-- THEME DEBUG --> <!-- THEME HOOK: 'username' --> <!-- BEGIN OUTPUT from 'core/themes/classy/templates/user/username.html.twig' --> <a title="View user profile." href="/index.php/users/laura" lang="" about="/index.php/users/laura" typeof="schema:Person" property="schema:name" datatype="" class="username">Laura</a> <!-- END OUTPUT from 'core/themes/classy/templates/user/username.html.twig' --> </span> <!-- END OUTPUT from 'core/themes/classy/templates/field/field--node--uid.html.twig' --> <!-- THEME DEBUG --> <!-- THEME HOOK: 'field' --> <!-- FILE NAME SUGGESTIONS: * field--node--created--blog-entry.html.twig x field--node--created.html.twig * field--node--blog-entry.html.twig * field--created.html.twig * field--created.html.twig * field.html.twig --> <!-- BEGIN OUTPUT from 'core/themes/classy/templates/field/field--node--created.html.twig' --> <span class="field field--name-created field--type-created field--label-hidden">Tue, 06/16/2020 - 11:22</span> <!-- END OUTPUT from 'core/themes/classy/templates/field/field--node--created.html.twig' --> <!-- THEME DEBUG --> <!-- THEME HOOK: 'field' --> <!-- FILE NAME SUGGESTIONS: * field--node--field-tags--blog-entry.html.twig * field--node--field-tags.html.twig * field--node--blog-entry.html.twig * field--field-tags.html.twig * field--entity-reference.html.twig x field.html.twig --> <!-- BEGIN OUTPUT from 'core/themes/classy/templates/field/field.html.twig' --> <div class="field field--name-field-tags field--type-entity-reference field--label-hidden field__items"> <div class="field__item"><a href="/index.php/tags/photography" hreflang="en">Photography</a></div> <div class="field__item"><a href="/index.php/tags/blogging" hreflang="en">Blogging</a></div> <div class="field__item"><a href="/index.php/taxonomy/term/93" hreflang="en">Photoshop</a></div> <div class="field__item"><a href="/index.php/taxonomy/term/94" hreflang="en">Adobe</a></div> <div class="field__item"><a href="/index.php/taxonomy/term/95" hreflang="en">Web content</a></div> </div> <!-- END OUTPUT from 'core/themes/classy/templates/field/field.html.twig' --> <!-- THEME DEBUG --> <!-- THEME HOOK: 'links__node' --> <!-- FILE NAME SUGGESTIONS: x links--node.html.twig x links--node.html.twig * links.html.twig --> <!-- BEGIN OUTPUT from 'core/themes/classy/templates/content/links--node.html.twig' --> <!-- END OUTPUT from 'core/themes/classy/templates/content/links--node.html.twig' --> Tue, 16 Jun 2020 18:22:59 +0000 Laura 393 at https://monkeysatkeyboards.com