//- common routines for all views everywhere include button-icon include labeled-icon include section-title - function formatCount(value) { value = value || 0; return (value < 1000) ? numeral(value).format('0,0') : numeral(value).format('0,0.0a'); } function formatBitRate (value) { if ((value !== 0) && !value) { return '---'; } return numeral(value).format('0,0.0ib').slice(0, -2) + 'bps'; } function formatDataSize (value) { if ((value !== 0) && !value) { return '---'; } return numeral(value).format('0,0.0b'); } function formatTimestamp (value, withFractional = false) { if (value !== 0 && !value) { return withFractional ? '-:--:--.---' : '-:--:--'; } return numeral(value).format(withFractional ? 'h:mm:ss.sss' : 'h:mm:ss'); } function formatDuration (value) { let duration = formatTimestamp(value); if (duration.startsWith('0:')) { duration = duration.slice(2); } if (duration.startsWith('0')) { duration = duration.slice(1); } return duration; } function displayIntegerValue (value) { return numeral(value).format(value > 1000 ? '0,0.0a' : '0,0'); } function getUserProfileUrl (user) { if (user.core) { return `/user/core/${user.username}`; } return `/user/${user.username}`; } mixin renderCell (label, value, className) div(title=`${label}: ${numeral(value).format('0,0')}`).no-select div(class=className)!= value .uk-text-muted.uk-text-small= label mixin renderBackButton (options) - options = Object.assign({ includeLabel: true, label: 'Back' }, options) button(type="button", onclick="window.history.back();").uk-button.uk-button-default span i.fas.fa-chevron-left if options.includeLabel span(class="uk-visible@s").uk-margin-small-left= options.label mixin renderUserLink (user) if user.coreUserId a(href=`/user/core/${user.username}`)= `${user.username}@${user.core.meta.domainKey}` else a(href=`/user/${user.username}`)= user.displayName || user.username