194 lines
		
	
	
		
			No EOL
		
	
	
		
			5.2 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			No EOL
		
	
	
		
			5.2 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<div class="status-details">
 | 
						|
  <ExternalLink className="status-absolute-date"
 | 
						|
                href={originalStatus.url}
 | 
						|
                showIcon={true}
 | 
						|
                ariaLabel="{formattedDate} (opens in new window)"
 | 
						|
  >
 | 
						|
    <time datetime={createdAtDate} title={formattedDate}>{formattedDate}</time>
 | 
						|
  </ExternalLink>
 | 
						|
  {#if applicationName}
 | 
						|
    {#if applicationWebsite}
 | 
						|
      <ExternalLink className="status-application"
 | 
						|
                    href={applicationWebsite}
 | 
						|
                    showIcon={false}
 | 
						|
                    ariaLabel="{applicationName} (opens in new window)">
 | 
						|
        <span class="status-application-span">
 | 
						|
          {applicationName}
 | 
						|
        </span>
 | 
						|
      </ExternalLink>
 | 
						|
    {:else}
 | 
						|
      <span class="status-application status-application-span">
 | 
						|
        {applicationName}
 | 
						|
      </span>
 | 
						|
    {/if}
 | 
						|
  {/if}
 | 
						|
  <a class="status-favs-reblogs status-reblogs"
 | 
						|
     href="/statuses/{originalStatusId}/reblogs"
 | 
						|
     aria-label={reblogsLabel}>
 | 
						|
    <svg class="status-favs-reblogs-svg">
 | 
						|
      <use xlink:href="#fa-retweet"/>
 | 
						|
    </svg>
 | 
						|
    <span>{numReblogs}</span>
 | 
						|
  </a>
 | 
						|
  <a class="status-favs-reblogs status-favs"
 | 
						|
     href="/statuses/{originalStatusId}/favorites"
 | 
						|
     aria-label={favoritesLabel}>
 | 
						|
    <svg class="status-favs-reblogs-svg">
 | 
						|
      <use xlink:href="#fa-star" />
 | 
						|
    </svg>
 | 
						|
    <span>{numFavs}</span>
 | 
						|
  </a>
 | 
						|
</div>
 | 
						|
<style>
 | 
						|
  .status-details {
 | 
						|
    grid-area: details;
 | 
						|
    display: grid;
 | 
						|
    grid-template-columns: minmax(0, max-content) repeat(3, max-content);
 | 
						|
    grid-gap: 20px;
 | 
						|
    align-items: center;
 | 
						|
    justify-content: left;
 | 
						|
    margin: 0 5px 10px;
 | 
						|
  }
 | 
						|
  :global(.status-absolute-date) {
 | 
						|
    font-size: 1.1em;
 | 
						|
    min-width: 0;
 | 
						|
  }
 | 
						|
 | 
						|
  :global(.status-absolute-date time) {
 | 
						|
    word-wrap: break-word;
 | 
						|
    overflow: hidden;
 | 
						|
    white-space: nowrap;
 | 
						|
    text-overflow: ellipsis;
 | 
						|
  }
 | 
						|
 | 
						|
  :global(.status-application) {
 | 
						|
    word-wrap: break-word;
 | 
						|
    overflow: hidden;
 | 
						|
    white-space: pre-wrap;
 | 
						|
    font-size: 1.1em;
 | 
						|
  }
 | 
						|
 | 
						|
  :global(.status-application, a.status-application, a.status-application:hover) {
 | 
						|
    color: var(--deemphasized-text-color);
 | 
						|
  }
 | 
						|
 | 
						|
  :global(a.status-application) {
 | 
						|
    display: inline-flex;
 | 
						|
    align-items: center;
 | 
						|
  }
 | 
						|
 | 
						|
  .status-application-span {
 | 
						|
    word-wrap: break-word;
 | 
						|
    overflow: hidden;
 | 
						|
    white-space: nowrap;
 | 
						|
    text-overflow: ellipsis;
 | 
						|
  }
 | 
						|
 | 
						|
  .status-favs-reblogs {
 | 
						|
    font-size: 1.1em;
 | 
						|
    display: flex;
 | 
						|
    flex-direction: row;
 | 
						|
    align-items: center;
 | 
						|
  }
 | 
						|
 | 
						|
  .status-favs-reblogs span {
 | 
						|
    margin-left: 5px;
 | 
						|
  }
 | 
						|
 | 
						|
  .status-favs-reblogs,
 | 
						|
  .status-favs-reblogs:hover,
 | 
						|
  .status-favs-reblogs:visited {
 | 
						|
    color: var(--deemphasized-text-color);
 | 
						|
  }
 | 
						|
 | 
						|
  .status-favs-reblogs-svg {
 | 
						|
    fill: var(--deemphasized-text-color);
 | 
						|
    width: 18px;
 | 
						|
    height: 18px;
 | 
						|
  }
 | 
						|
 | 
						|
  :global(.status-absolute-date, .status-absolute-date:hover, .status-absolute-date:visited) {
 | 
						|
    color: var(--deemphasized-text-color);
 | 
						|
  }
 | 
						|
 | 
						|
  @media (max-width: 479px) {
 | 
						|
    :global(.status-absolute-date) {
 | 
						|
      font-size: 1em;
 | 
						|
    }
 | 
						|
    .status-favs-reblogs {
 | 
						|
      font-size: 1em;
 | 
						|
    }
 | 
						|
    :global(.status-application) {
 | 
						|
      font-size: 1em;
 | 
						|
    }
 | 
						|
    .status-details {
 | 
						|
      grid-gap: 5px;
 | 
						|
      justify-content: space-between;
 | 
						|
    }
 | 
						|
 | 
						|
  }
 | 
						|
 | 
						|
</style>
 | 
						|
<script>
 | 
						|
  import ExternalLink from '../ExternalLink.html'
 | 
						|
  import { store } from '../../_store/store'
 | 
						|
  import { getDateFormatter, getShortDateFormatter } from '../../_utils/formatters'
 | 
						|
  import { on } from '../../_utils/eventBus'
 | 
						|
 | 
						|
  export default {
 | 
						|
    oncreate () {
 | 
						|
      let { originalStatusId } = this.get()
 | 
						|
      on('statusUpdated', this, status => {
 | 
						|
        if (status.id === originalStatusId) {
 | 
						|
          this.set({
 | 
						|
            overrideNumReblogs: status.reblogs_count || 0,
 | 
						|
            overrideNumFavs: status.favourites_count || 0
 | 
						|
          })
 | 
						|
        }
 | 
						|
      })
 | 
						|
    },
 | 
						|
    store: () => store,
 | 
						|
    data: () => ({
 | 
						|
      overrideNumReblogs: void 0,
 | 
						|
      overrideNumFavs: void 0
 | 
						|
    }),
 | 
						|
    computed: {
 | 
						|
      originalStatusId: ({ originalStatus }) => originalStatus.id,
 | 
						|
      application: ({ originalStatus }) => originalStatus.application,
 | 
						|
      applicationName: ({ application }) => (application && application.name),
 | 
						|
      applicationWebsite: ({ application }) => (application && application.website),
 | 
						|
      createdAtDate: ({ originalStatus }) => originalStatus.created_at,
 | 
						|
      numReblogs: ({ overrideNumReblogs, originalStatus }) => {
 | 
						|
        if (typeof overrideNumReblogs === 'number') {
 | 
						|
          return overrideNumReblogs
 | 
						|
        }
 | 
						|
        return originalStatus.reblogs_count || 0
 | 
						|
      },
 | 
						|
      numFavs: ({ overrideNumFavs, originalStatus }) => {
 | 
						|
        if (typeof overrideNumFavs === 'number') {
 | 
						|
          return overrideNumFavs
 | 
						|
        }
 | 
						|
        return originalStatus.favourites_count || 0
 | 
						|
      },
 | 
						|
      formattedDate: ({ createdAtDate, $isMobileSize }) => {
 | 
						|
        let formatter = $isMobileSize ? getShortDateFormatter() : getDateFormatter()
 | 
						|
        return formatter.format(new Date(createdAtDate))
 | 
						|
      },
 | 
						|
      reblogsLabel: ({ numReblogs }) => {
 | 
						|
        // TODO: intl
 | 
						|
        return numReblogs === 1
 | 
						|
          ? `Boosted ${numReblogs} time`
 | 
						|
          : `Boosted ${numReblogs} times`
 | 
						|
      },
 | 
						|
      favoritesLabel: ({ numFavs }) => {
 | 
						|
        // TODO: intl
 | 
						|
        return numFavs === 1
 | 
						|
          ? `Favorited ${numFavs} time`
 | 
						|
          : `Favorited ${numFavs} times`
 | 
						|
      }
 | 
						|
    },
 | 
						|
    components: {
 | 
						|
      ExternalLink
 | 
						|
    }
 | 
						|
  }
 | 
						|
</script> |