diff --git a/.eleventy.js b/.eleventy.js deleted file mode 100644 index 2d1bbd6..0000000 --- a/.eleventy.js +++ /dev/null @@ -1,192 +0,0 @@ -/** - * - * Eleventy command line debugging codes - * - * - * Eleventy:Config - * Eleventy:UserConfig - * Eleventy:TemplateConfig - * - * Eleventy:CommandCheck - * - * Eleventy:EleventyFiles - * Eleventy:TemplateWriter - * Eleventy:TemplatePassthroughManager - * Eleventy:TemplatePassthrough - * Eleventy:TemplateData - * Eleventy:Template - * - * Eleventy:ComputedData - * - * Eleventy:Benchmark - * - * EleventyAssets - */ - - -import fs from 'fs-extra' -import replace_css_url from 'replace-css-url' -import dotenv from 'dotenv' -import { InlineCodeManager } from '@11ty/eleventy-assets' -import { transformSync } from 'esbuild' - - -import nuxtConfig from './nuxt.config' - -// Setup dotenv -dotenv.config() - - -function getAssetFilePath(componentName) { - return `./${componentName}` -} - -const inlineAssetCache = new Map() - -const appBundles = new Map() - -module.exports = function ( eleventyConfig ) { - // console.log('eleventyConfig', eleventyConfig) - - // Global Nuxt data - eleventyConfig.addJavaScriptFunction('getNuxt', function () { - return nuxtConfig - }) - // eleventyConfig.addGlobalData('nuxt', () => nuxtConfig) - - const cssManager = new InlineCodeManager() - const jsManager = new InlineCodeManager() - - eleventyConfig.addJavaScriptFunction('getAppVersions', async function ( bundleIdentifier ) { - if (appBundles.size === 0) { - const appBundlesFromJson = await fs.readJson('./static/app-bundles.json') - appBundlesFromJson.forEach(([ jsonAppBundleIdentifier, versions ]) => { - appBundles.set( jsonAppBundleIdentifier, versions ) - }) - } - - if ( appBundles.has( bundleIdentifier ) ) { - return appBundles.get( bundleIdentifier ) - } - - // Bundle not found - return null - }) - - eleventyConfig.addJavaScriptFunction('usingComponent', async function ( componentName ) { - // console.log('Getting component', componentName) - - const assetFileName = getAssetFilePath( componentName ) - - // console.log('Cache size', inlineAssetCache) - - if ( componentName.includes('.js') ) { - - // If a never before seen component, add the JS code - if( !inlineAssetCache.has( assetFileName ) ) { - - let contents = '' - - // if ( inlineAssetCache.has( assetFileName ) ) { - // console.log('Reading component from cache', componentName) - // console.log('Cache size', inlineAssetCache.size) - - // contents = inlineAssetCache.get( assetFileName ) - - // } else { - - // } - - console.log('Reading component file', componentName) - const javascriptCode = fs.readFileSync( assetFileName, { encoding: "UTF-8" }) - - console.log('Minifying code', componentName) - const minified = await transformSync(javascriptCode, { - // loader: 'ts', - // bundle: true, - minify: true, - // format: 'iife', - })//minify( javascriptCode ) - - // console.log('minified', minified) - - contents = minified.code - - inlineAssetCache.set( assetFileName, contents ) - - // console.log('Got component', componentName, componentCss) - - jsManager.addComponentCode(componentName, contents) - } - - // Log usage for this url - // this.page.url is supported on Eleventy 0.11.0 and newer - jsManager.addComponentForUrl(componentName, this.page.url) - } else if ( componentName.includes('.css') ) { - // If a never before seen component, add the CSS code - if(!cssManager.hasComponentCode(componentName)) { - const fileContents = fs.readFileSync( assetFileName, { encoding: "UTF-8" }) - - // Replace urls in css with relative urls for dist folder - const parsedCss = replace_css_url( - fileContents, - function( path ) { - const fileName = path.split('/').pop().split('#')[0].split('?')[0] - - return '/fonts/' + fileName - } - ) - - cssManager.addComponentCode(componentName, parsedCss) - } - - // Log usage for this url - // this.page.url is supported on Eleventy 0.11.0 and newer - cssManager.addComponentForUrl(componentName, this.page.url) - } - - return - }) - - - // Copy Inter font files - eleventyConfig.addPassthroughCopy({ - "node_modules/@fontsource/inter/**/*.woff2": "fonts" - }) - - // This needs to be called in a Layout template. - eleventyConfig.addJavaScriptFunction('getJs', function ( url = this.page.url ) { - // console.log( 'jsManager.getCodeForUrl(url)', url ) - - return jsManager.getCodeForUrl(url) - }) - - // This needs to be called in a Layout template. - eleventyConfig.addJavaScriptFunction('getCss', function ( url = this.page.url ) { - // console.log( 'jsManager.getCodeForUrl(url)', url ) - - return cssManager.getCodeForUrl(url) - }) - - eleventyConfig.addJavaScriptFunction('boundComponent', function ( Component ) { - return Component.bind(this) - }) - - - - return { - // https://www.11ty.dev/docs/config/#template-formats - // Default: html,liquid,ejs,md,hbs,mustache,haml,pug,njk,11ty.js - templateFormats: [ '11ty.js' ], - - dir: { - input: 'pages-eleventy', - output: 'dist', - jsDataFileSuffix: '.json', - - // Relative to input directory. - data: '../static', - layouts: '../layouts-eleventy' - } - } -} diff --git a/components-eleventy/video/card.js b/components-eleventy/video/card.js deleted file mode 100644 index ba5501a..0000000 --- a/components-eleventy/video/card.js +++ /dev/null @@ -1,66 +0,0 @@ -import renderPoster from './poster.js' - -function pill ( text ) { - return /* html */` -
- ${ text } -
- ` -} - -export default async function ( video, options = {} ) { - const { - width = '325px', - classes = 'w-full flex-shrink-0 flex-grow-0 border-2 border-transparent rounded-2xl overflow-hidden' - } = options - - // Setup inline lazysizes - // await this.usingComponent( 'node_modules/lazysizes/lazysizes.min.js' ) - - // console.log('video', video) - - const posterHtml = renderPoster( video ) - - return /* html */` -
- -
-
-
- ${ posterHtml } -
-
-
-
- - - -
- - ${ (video.tags.includes('benchmark')) ? pill('Benchmark') : '' } - -
- - -
-
${ video.name }
-
-
-
-
-` -} diff --git a/components-eleventy/video/player.js b/components-eleventy/video/player.js deleted file mode 100644 index 4bb2e2c..0000000 --- a/components-eleventy/video/player.js +++ /dev/null @@ -1,86 +0,0 @@ -import renderPoster from './poster.js' - -function renderTimestamps ( video ) { - - if ( video.timestamps.length === 0 ) return '' - - const timestampsForRender = video.timestamps.map( timestamp => { - const [ minutes, seconds ] = timestamp.time.split(':') - - return { - ...timestamp, - inSeconds: (minutes * 60) + Number(seconds) - } - }) - - const timestampButtonsHtml = timestampsForRender.map( timestamp => (/* html */` - - `) ).join('') - - return /* html */` -
-
- ${ timestampButtonsHtml } -
-
- ` -} - -export default async function ( video, options = {} ) { - const { - coverBottomHtml = '' - // classes = 'w-full flex-shrink-0 flex-grow-0 border-2 border-transparent rounded-2xl overflow-hidden' - } = options - - // Setup inline player script - await this.usingComponent( 'node_modules/can-autoplay/build/can-autoplay.min.js' ) - - await this.usingComponent( 'helpers/lite-youtube.js' ) - - // Setup inline lazysizes - await this.usingComponent( 'node_modules/lazysizes/lazysizes.min.js' ) - - // console.log('video', video) - - const posterHtml = renderPoster( video ) - - const timestampsHtml = renderTimestamps( video ) - - return /* html */` - - - -
-
-
- - ${ posterHtml } - -
-
-
- - - -
-
${ coverBottomHtml }
-
-
-
-
- - ${ timestampsHtml } - -
- ` -} diff --git a/components-eleventy/video/poster.js b/components-eleventy/video/poster.js deleted file mode 100644 index da88120..0000000 --- a/components-eleventy/video/poster.js +++ /dev/null @@ -1,32 +0,0 @@ - - -export default function ( video ) { - const webpSource = { - ...video.thumbnail, - srcset: video.thumbnail.srcset.replaceAll('ytimg.com/vi/', 'ytimg.com/vi_webp/').replace(/.png|.jpg|.jpeg/g, '.webp') - } - - const mergedSources = { - webp: webpSource, - jpeg: video.thumbnail - } - - return /* html */` - - - ${ Object.entries( mergedSources ).map( ([ key, source ]) => (/* html */` - - `) ).join('') } - - ${ video.name } - - ` -} diff --git a/components-eleventy/video/row.js b/components-eleventy/video/row.js deleted file mode 100644 index b2cd950..0000000 --- a/components-eleventy/video/row.js +++ /dev/null @@ -1,87 +0,0 @@ - -import VideoCard from './card.js' -import SubmitCard from './submit-card.js' - -function getCardType ( video ) { - const isSubmitCard = video.endpoint.includes('https://docs.google.com/forms') - - if ( isSubmitCard ) return SubmitCard - - return VideoCard -} - -export default async function ( videos, options = {} ) { - - const { - cardWidth = '325', - classes = '' - } = options - - // Math.random should be unique because of its seeding algorithm. - // Convert it to base 36 (numbers + letters), and grab the first 9 characters - // after the decimal. - const uid = Math.random().toString(36).substr(2, 9) - const rowId = `row-${ uid }` - - // Setup inline scroll script - await this.usingComponent( 'helpers/scroll.js' ) - - // Setup inline lazysizes - await this.usingComponent( 'node_modules/lazysizes/lazysizes.min.js' ) - - // console.log('video', video) - - const renderedCards = await Promise.all(videos.map( async video => { - const Card = getCardType( video ) - - // console.log('Card', this.boundComponent(Card)( video ) ) - - return await this.boundComponent(Card)( video ) - } )) - - const cardsHtml = renderedCards.join('') - - // console.log( 'cardsHtml', cardsHtml ) - - return /* html */` - -
- -
- - ${ cardsHtml } - -
- - - -
- - ` -} diff --git a/components-eleventy/video/submit-card.js b/components-eleventy/video/submit-card.js deleted file mode 100644 index 717bc4b..0000000 --- a/components-eleventy/video/submit-card.js +++ /dev/null @@ -1,81 +0,0 @@ - -export default function ( video, { - width = '325px', - classes = 'w-full flex-shrink-0 flex-grow-0 border-2 border-transparent rounded-2xl overflow-hidden' -} ) { - - // Setup inline lazysizes - // this.usingComponent( 'node_modules/lazysizes/lazysizes.min.js' ) - - // console.log('video', video) - - return /* html */` -
- -
-
-
-
-
-
- - - -
-
-
-
Submit Video
-
-
-
-
- -
- -
-
-
- - - ${video.name} - -
-
-
-
- - - -
- -
- - -
-
${ video.name }
-
-
-
-
-` -} diff --git a/layouts-eleventy/default.11ty.js b/layouts-eleventy/default.11ty.js deleted file mode 100644 index b09c746..0000000 --- a/layouts-eleventy/default.11ty.js +++ /dev/null @@ -1,261 +0,0 @@ -import fs from 'fs' -import { JSDOM } from 'jsdom' - -import config from '../nuxt.config.js' - - -console.log('Running Default Layout file') - - -const year = new Date().getFullYear() - -const makeTag = ( tag, tagName = 'meta') => { - - const attributes = Object.entries(tag).map( ([ name, value ]) => `${name}="${value}"` ).join(' ') - - return `<${tagName} ${attributes}>` -} - -const mapMetaTag = ( tag ) => { - - if ( tag.hasOwnProperty('property') ) { - return [ - `property-${tag.property}`, - makeTag(tag) - ] - } - - if ( tag.hasOwnProperty('name') ) { - return [ - `name-${tag.name}`, - makeTag(tag) - ] - } - - if ( tag.hasOwnProperty('charset') ) { - return [ - 'charset', - makeTag(tag) - ] - } -} - -const mapLinkTag = ( tag ) => { - return [ - `type-${tag.type}`, - makeTag(tag, 'link') - ] -} - - -const getNuxtDefaultLayoutHtml = () => { - const fileContents = fs.readFileSync('./dist/layout-template/index.html', { encoding: "UTF-8" }) - - return fileContents -} - -const templateVar = string => `--- template-var ${string} ---` - -const cleanNuxtLayout = ( layout ) => { - - const document = layout.window.document - - // Strip out existing meta - Array.from(document.querySelectorAll('head > meta')).forEach( domNode => { - domNode.remove() - }) - - // Strip out existing preloads - Array.from(document.querySelectorAll('link[rel="preload"]')).forEach( domNode => { - domNode.remove() - }) - - // Strip out existing scripts - const scriptSelector = 'script[src*=".js"]:not(.include-on-static)' - - Array.from(document.querySelectorAll( scriptSelector )).forEach( domNode => { - domNode.remove() - }) - - // Convert subscribe to iframe embed - Array.from(document.querySelectorAll('form.all-updates-subscribe')).forEach( domNode => { - const subscribeEmbed = document.createElement('iframe') - subscribeEmbed.setAttribute('data-src', '/embed-subscribe') - // https://web.dev/iframe-lazy-loading/ - subscribeEmbed.setAttribute('loading', 'lazy') - subscribeEmbed.setAttribute('title', 'Get email updates') - subscribeEmbed.classList.add('lazyload') - subscribeEmbed.style.width = '350px' - subscribeEmbed.style.height = '150px' - - domNode.parentNode.replaceChild(subscribeEmbed, domNode) - }) - - - // Set page title - document.title = templateVar('title') - - // Set link tags - document.querySelector('title').insertAdjacentHTML('afterend', templateVar('link-tags') ) - - // Add meta tags after title node - document.querySelector('title').insertAdjacentHTML('afterend', templateVar('structured-data') ) - - // Add meta tags after title node - document.querySelector('title').insertAdjacentHTML('afterend', templateVar('meta-tags') ) - - // Set page css - // document.querySelector('head').insertAdjacentHTML('beforeend', this.getCss() ) - - // Set page content - document.querySelector('.app-main').innerHTML = templateVar('main-content')//content - - // Set js before end of body - // `` - document.querySelector('body').insertAdjacentHTML('beforeend', templateVar('scripts') ) - - return layout -} - -let nuxtLayoutHtml = null -const parseDefaultLayoutDom = () => { - if ( nuxtLayoutHtml === null ) { - nuxtLayoutHtml = getNuxtDefaultLayoutHtml() - } - // const html = getNuxtDefaultLayoutHtml() - - // Build initial dom from the Layout - const dom = new JSDOM( nuxtLayoutHtml ) - - const cleanedLayout = cleanNuxtLayout( dom ) - - return cleanedLayout -} - -// Buld data that only needs to run once -const defaultMeta = Object.fromEntries(config.head.meta.map( mapMetaTag )) - -const defaultLinkTags = Object.fromEntries(config.head.link.map( mapLinkTag )) - -const masterLayoutDomString = parseDefaultLayoutDom().serialize() - -class DefaultLayout { - - generateMetaTags = function ( renderData ) { - - const { - title = null, - description = null, - meta: pageMeta = [] - } = renderData - - // console.log('renderData', Object.keys(renderData)) - - const meta = { - ...defaultMeta, - 'property-twitter:url': ``, - ...Object.fromEntries( pageMeta.map(mapMetaTag) ) - } - - // console.log('renderData.description', renderData.description) - - // if set - // get description from data - if ( description ) { - // Set meta description - meta['name-description'] = `` - // Set twitter description - meta['property-twitter:description'] = `` - } - - // if set - // get title from data - if ( title ) { - // Set twitter title - meta['property-twitter:title'] = `` - } - - - return Object.values(meta).join('') - } - - generateStructuredData = function ( renderData ) { - - const { - structuredData = null - } = renderData - - // console.log('renderData', Object.keys(renderData)) - - if ( structuredData === null ) return '' - - const structuredDataJson = JSON.stringify( structuredData ) - - return `` - } - - generateLinkTags = ( renderData ) => { - - const { - headLinkTags = [] - } = renderData - - const linkTags = { - ...defaultLinkTags, - ...Object.fromEntries( headLinkTags.map( mapLinkTag ) ) - } - - return Object.values( linkTags ).join('') - } - - - async render( data ) { - - // return nuxtLayoutHtml - - // console.log('Running DefaultLayout render') - - const { - content, - title = null, - // description = null - } = data - - const pageTitle = title || this.getNuxt().head.title - - let workingLayoutString = masterLayoutDomString - - // Set page title - // pageTitle - workingLayoutString = workingLayoutString.replace( templateVar('title'), pageTitle ) - - // Set link tags - // this.generateLinkTags() - workingLayoutString = workingLayoutString.replace( templateVar('link-tags'), this.generateLinkTags( data ) ) - - // Add meta tags after title node - // this.generateMetaTags( data ) - workingLayoutString = workingLayoutString.replace( templateVar('meta-tags'), this.generateMetaTags( data ) ) - - // Add structured data - workingLayoutString = workingLayoutString.replace( templateVar('structured-data'), this.generateStructuredData( data ) ) - - // Set page css - // document.querySelector('head').insertAdjacentHTML('beforeend', this.getCss() ) - - // Set page content - // content - workingLayoutString = workingLayoutString.replace( templateVar('main-content'), content ) - - // Set js before end of body - // `` - workingLayoutString = workingLayoutString.replace( templateVar('scripts'), `` ) - - - // Return stringified html for page - return workingLayoutString - - } -} - -module.exports = DefaultLayout diff --git a/middleware/README.md b/middleware/README.md deleted file mode 100644 index 009e48c..0000000 --- a/middleware/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# MIDDLEWARE - -**This directory is not required, you can delete it if you don't want to use it.** - -This directory contains your application middleware. -The middleware lets you define custom function to be ran before rendering a page or a group of pages (layouts). - -More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/routing#middleware). diff --git a/nuxt.config.js b/nuxt.config.js deleted file mode 100644 index ee04190..0000000 --- a/nuxt.config.js +++ /dev/null @@ -1,138 +0,0 @@ -import { promises as fs } from 'fs' - -import pkg from './package.json' -import { getSiteUrl } from '~/helpers/url.js' -import { publicRuntimeConfig } from '~/helpers/public-runtime-config.mjs' - - - -const siteUrl = getSiteUrl() - - -export default { - target: 'static', - - publicRuntimeConfig, - - /* - ** Hooks - * https://nuxtjs.org/api/configuration-hooks/ - */ - hooks: { - // build: { - // before: storeAppLists - // }, - // generate: { - // before: storeAppLists - // } - }, - - generate: { - crawler: false, - - // https://nuxtjs.org/docs/2.x/configuration-glossary/configuration-generate#cache - cache: false, - routes() { - return fs.readFile('./static/nuxt-endpoints.json', 'utf-8') - .then( endpointsJson => { - return JSON.parse(endpointsJson) - }) - } - }, - - /* - ** Headers of the page - */ - head: , - - /* - ** Customize the progress-bar color - */ - loading: { color: '#fff' }, - - /* - ** Global CSS - */ - // css: ['~/assets/css/tailwind.css'], - - /* - ** Plugins to load before mounting the App - */ - plugins: [ - '@/plugins/gtag' - ], - - /* - ** Nuxt.js modules - */ - - modules: [ - '@nuxtjs/sitemap' - ], - - sitemap: { - hostname: 'https://doesitarm.com', - routes: async () => { - // Get routes from previous build - const sitemapEndpoints = await fs.readFile('./static/sitemap-endpoints.json', 'utf-8') - .then( endpointsJson => { - return JSON.parse(endpointsJson) - }) - - // console.log('Total Sitemap Endpoints', sitemapEndpoints.length) - - return sitemapEndpoints.map( endpoint => endpoint.route ) - } - }, - - buildModules: [ - '@nuxt/postcss8', - '@nuxtjs/tailwindcss' - ], - - /* - ** Build configuration - */ - build: { - // parallel: true, - // hardSource: true, - cache: false, - html: { - minify: { - minifyCSS: false, - minifyJS: false, - collapseWhitespace: true - } - }, - /* - ** You can extend webpack config here - */ - extend(config, ctx) { - - // Client - if (ctx.isClient) { - // Push meta import rule for zip.js - config.module.rules.push({ - test: /\.js$/, - loader: require.resolve('@open-wc/webpack-import-meta-loader') - }) - } - - // Run ESLint on save - if (ctx.isDev && ctx.isClient) { - - config.module.rules.push({ - enforce: 'pre', - test: /\.(js|vue)$/, - loader: 'eslint-loader', - exclude: /(node_modules)/ - }) - - config.node = { - fs: "empty" - } - - } - } - } -} diff --git a/pages-eleventy/app.11ty.js b/pages-eleventy/app.11ty.js deleted file mode 100644 index f7cf122..0000000 --- a/pages-eleventy/app.11ty.js +++ /dev/null @@ -1,357 +0,0 @@ -import dotenv from 'dotenv' - -import config from '../nuxt.config.js' - -import { getAppType, getRouteType } from '../helpers/app-derived.js' -import { deviceSupportsApp } from '../helpers/devices.js' -import { makeLastUpdatedFriendly } from '../helpers/parse-date.js' -import { getStatusOfScan } from '../helpers/statuses.js' -import { isString } from '../helpers/check-types.js' - - -import VideoRow from '../components-eleventy/video/row.js' - -// import VideoRow from '../components-eleventy/video/row.js' -// import { isVideo } from '../helpers/app-derived' - -// Setup dotenv -dotenv.config() - -export const makeTitle = function ( app ) { - return `Does ${app.name} work on Apple Silicon? - ${ config.head.title }` -} - -export const makeDescription = function ( app ) { - return `Latest reported support status of ${ app.name } on Apple Silicon and ${ process.env.npm_package_config_verbiage_processors } Processors.` -} - -// https://stackoverflow.com/a/15069646/1397641 -function makeEnglishList ( array, conjunction = 'and' ) { - const total = array.length - - if ( total < 3 ) return array.join(` ${conjunction} `) - - array = array.slice() - - // Prepend conjunction to final part - array[ total-1 ] = `${ conjunction } ${ array[ total-1 ] }` - - return array.join(', ') -} - -export function renderPageLinksHtml ( links ) { - return links.map( (link, i) => { - - const notAppTestLink = !link.label.includes('๐Ÿงช') - - const isMainLink = (i === 0) && notAppTestLink - - return /* html */` - ${ isMainLink ? 'View' : link.label } - ` - } ).join('') -} - -export function supportedArchitectures ( appScan ) { - // if ( Array.isArray(appScan['Macho Meta']) ) { - // return appScan['Macho Meta'].map( architecture => architecture.processorType) - // } - - // console.log('meta', appScan['Macho Meta']) - - if ( appScan['Macho Meta'].architectures === undefined ) return [] - - return appScan['Macho Meta'].architectures - .map( architecture => architecture.processorType) - .filter(processorType => Number(processorType) !== 0) -} - -function renderBundleDataLevel ( bundleLevelData, depth = 0 ) { - - const levelContainerClassses = 'border rounded-lg bg-black bg-opacity-10 space-y-4 p-4 mt-4' - const maxDepth = 2 - - if ( isString(bundleLevelData) ) { - return bundleLevelData - } - - if ( depth >= maxDepth ) { - return /* html */`
${ JSON.stringify(bundleLevelData, undefined, 2) }
` - } - - if ( Array.isArray( bundleLevelData ) ) { - const htmlList = bundleLevelData.map( ( bundleLevel ) => { - return /* html */`
  • ${ renderBundleDataLevel( bundleLevel, depth + 1 ) }
  • ` - } ).join('') - - return /* html */`` - } - - if ( Object(bundleLevelData) === bundleLevelData ) { - const htmlList = Object.entries(bundleLevelData).map( ( [key, bundleLevel] ) => { - return /* html */`
  • ${key} : ${ renderBundleDataLevel( bundleLevel, depth + 1 ) }
  • ` - } ).join('') - - return /* html */` -
    - Details - -
    - ` - } - - return /* html */`${ JSON.stringify(bundleLevelData) }` -} - -export class AppTemplate { - // or `async data() {` - // or `get data() {` - data () { - return { - layout: 'default.11ty.js', - - pagination: { - data: 'eleventy-endpoints', - size: 1, - alias: 'app', - - before: function( data ) { - return data.filter( entry => { - // const [ _, routeType ] = entry.route.split('/') - const routeType = getRouteType( entry.route ) - - return routeType === 'app' - }) - } - }, - - eleventyComputed: { - title: ({ app: { payload: { app } } }) => { - // console.log('data', data) - return makeTitle( app ) - }, - description: ({ app: { payload: { app } } }) => { - return makeDescription( app ) - }, - mainHeading: ({ app: { payload: { app } } }) => { - return `Does ${ app.name } work on Apple Silicon?` - }, - }, - - permalink: ({ app }) => { - // console.log('payload', app.payload) - return app.route.substring(1) + '/' - } - } - } - - async render( data ) { - - const { - app: { payload: { app, relatedVideos = [] } }, - 'device-list': deviceList, - // 'app-bundles': appBundlesFromFile - } = data - - - // console.log('appBundlesFromFile', appBundlesFromFile) - - const hasRelatedVideos = relatedVideos.length > 0 - - // console.log('deviceList', deviceList) - - // console.log('video.payload', Object.keys(video.payload)) - - const hasMultipleAliases = !!app.aliases && app.aliases.length > 1 - - const hasBundleIdentifiers = !!app.bundleIds && app.bundleIds.length > 0 - - const appDeviceSupport = deviceList.map( device => { - const supportsApp = deviceSupportsApp( device, app ) - return { - ...device, - emoji: supportsApp ? 'โœ…' : '๐Ÿšซ', - ariaLabel: `${app.name} has ${ supportsApp ? '' : 'not' } been reported to work on ${device.name}` - } - }) - - const lastUpdatedFriendly = makeLastUpdatedFriendly( app.lastUpdated ) - - const relatedLinksHtml = renderPageLinksHtml( app.relatedLinks ) - - - const relatedVideosRowHtml = hasRelatedVideos ? await this.boundComponent(VideoRow)( relatedVideos ) : null - - const appBundles = [] //hasBundleIdentifiers ? app.bundleIds.map( bundleId => this.getAppBundles() ) : null - - if ( hasBundleIdentifiers ) { - for ( const bundleIdentifier of app.bundleIds ) { - const versions = await this.getAppVersions( bundleIdentifier ) - appBundles.push( [bundleIdentifier, versions] ) - } - } - - - return /* html */` -
    - -
    -

    - ${ data.mainHeading } -

    -

    - ${ app.text } -

    - - ${ hasMultipleAliases ? /* html */` - May also be known as ${ makeEnglishList( app.aliases, 'or' ) } - ` : '' } - - - - - -
    -

    - Device Support -

    -
    - - ${ appDeviceSupport.map( device => /* html */` - - `).join('') } - -
    -
    -
    - - ${ hasRelatedVideos ? /* html */` - - ` : '' } - - - ${ hasBundleIdentifiers ? /* html */` -
    - -

    - App Bundles -

    - -
    - -
    - - ${ appBundles.map( ( [bundleIdentifier, versions] ) => /* html */` - - `).join('') } - -
    - - -
    - ${ appBundles.map( ( [bundleIdentifier, versions] ) => /* html */` -
    -

    ${ bundleIdentifier }

    - -
    - -
    - - ${ Object.entries(versions).sort((a, b) => new Date(b[1]['Date']) - new Date(a[1]['Date'])).map( ( [ version, report ] ) => /* html */` -
    -
    v${ version }
    -
    -
    - ${ getStatusOfScan( report, false ) } -
    -
    - ๐Ÿ–ฅ Supported Architectures ${ supportedArchitectures( report ).join(', ') } -
    -
    -
    - Full Info Plist -
    ${ JSON.stringify(report['Info Plist'], undefined, 2) }
    -
    -
    - Full Meta Details -
    ${ JSON.stringify(report['Macho Meta'], undefined, 2) }
    -
    -
    - `).join('') } - -
    - -
    -
    - `).join('') } -
    - -
    - - -
    - ` : '' } - -
    - ${ lastUpdatedFriendly !== null ? /* html */` -
    - -
    - ` : '' } - - Report Update -
    - -
    - ` - } -} - -module.exports = AppTemplate diff --git a/pages-eleventy/formula.11ty.js b/pages-eleventy/formula.11ty.js deleted file mode 100644 index 8423bc5..0000000 --- a/pages-eleventy/formula.11ty.js +++ /dev/null @@ -1,65 +0,0 @@ -import dotenv from 'dotenv' - -import config from '../nuxt.config.js' - -import { getAppType, getRouteType } from '../helpers/app-derived.js' - -import { AppTemplate } from './app.11ty.js' - -// import VideoRow from '../components-eleventy/video/row.js' -// import { isVideo } from '../helpers/app-derived' - -// Setup dotenv -dotenv.config() - -export const makeTitle = function ( app ) { - return `Does ${app.name} work on Apple Silicon? - ${ config.head.title }` -} - -export const makeDescription = function ( app ) { - return `Latest reported support status of ${ app.name } on Apple Silicon and ${ process.env.npm_package_config_verbiage_processors } Processors when installed via Homebrew. ` -} - -class FormulaTemplate extends AppTemplate { - // or `async data() {` - // or `get data() {` - data () { - return { - layout: 'default.11ty.js', - - pagination: { - data: 'eleventy-endpoints', - size: 1, - alias: 'app', - before: function( data ) { - return data.filter( entry => { - const routeType = getRouteType( entry.route ) - - return routeType === 'formula' - }) - } - }, - - eleventyComputed: { - title: ({ app: { payload: { app } } }) => { - // console.log('data', data) - return makeTitle( app ) - }, - description: ({ app: { payload: { app } } }) => { - return makeDescription( app ) - }, - mainHeading: ({ app: { payload: { app } } }) => { - return `Does ${ app.name } work on Apple Silicon when installed via Homebrew?` - } - }, - - permalink: ({ app }) => { - // console.log('payload', app.payload) - return app.route.substring(1) + '/' - } - } - } - -} - -module.exports = FormulaTemplate diff --git a/pages-eleventy/tv.11ty.js b/pages-eleventy/tv.11ty.js deleted file mode 100644 index c316d85..0000000 --- a/pages-eleventy/tv.11ty.js +++ /dev/null @@ -1,202 +0,0 @@ -import dotenv from 'dotenv' - -import config from '../nuxt.config.js' - -import VideoPlayer from '../components-eleventy/video/player.js' -import VideoRow from '../components-eleventy/video/row.js' - -import { getRouteType } from '../helpers/app-derived.js' -import { buildVideoStructuredData } from '../helpers/structured-data.js' - -// Setup dotenv -dotenv.config() - -export const myChannelId = 'UCB3jOb5QVjX7lYecvyCoTqQ' - -export const makeTitle = function ( name ) { - // console.log('tvEntry', tvEntry) - - return `${ name } - ${ config.head.title }` -} - -export const makeDescription = function ( tvEntry ) { - if ( tvEntry.payload.featuredApps.length === 0 ) return 'Apple Silicon performance and support videos' - - const featuredAppsString = tvEntry.payload.featuredApps.slice(0, 5).map(app => app.name).join(', ') - - // console.log('tvEntry.payload.featuredApps', tvEntry.payload.featuredApps) - - return `Apple Silicon performance and support videos for ${ featuredAppsString }` -} - - -function renderFeaturedApps ( featuredApps ) { - return /* html */` - - ` -} - -class TV { - // or `async data() {` - // or `get data() {` - data () { - return { - layout: 'default.11ty.js', - - pagination: { - data: 'eleventy-endpoints', - size: 1, - alias: 'tvEntry', - before: function( endpoint ) { - // console.log('Before runs') - - return endpoint.filter( entry => { - const routeType = getRouteType( entry.route ) - - return routeType === 'tv' - }) - }, - }, - - // tags: [ 'tv' ], - - eleventyComputed: { - title: data => { - // Declare dependencies for Eleventy - // https://www.11ty.dev/docs/data-computed/#declaring-your-dependencies - data.tvEntry - - return makeTitle( data.tvEntry.payload.video.name ) - }, - description: ( data ) => { - // Declare dependencies for Eleventy - // https://www.11ty.dev/docs/data-computed/#declaring-your-dependencies - data.tvEntry - - return makeDescription( data.tvEntry ) - }, - - headLinkTags: data => { - // Declare dependencies for Eleventy - // https://www.11ty.dev/docs/data-computed/#declaring-your-dependencies - data.tvEntry - - return [ - // Preload video thumbnail - // - { - 'rel': 'preload', - 'as': 'image', - 'href': `https://i.ytimg.com/vi_webp/${ data.tvEntry.payload.video.id }/sddefault.webp` - }, - ] - }, - - structuredData: data => { - // Declare dependencies for Eleventy - // https://www.11ty.dev/docs/data-computed/#declaring-your-dependencies - data.tvEntry - - return buildVideoStructuredData( data.tvEntry.payload.video, data.tvEntry.payload.featuredApps, { - siteUrl: process.env.URL - } ) - } - }, - - permalink: ( data ) => { - - return data.tvEntry.route.substring(1) + '/' - } - } - } - - async render( data ) { - - const { - tvEntry: { - // route, - payload: { - video, - relatedVideos = [], - featuredApps = [] - } - }, - // 'device-list': deviceList - } = data - - - // console.log('video.payload', Object.keys(video.payload)) - - const coverBottomHtml = /* html */` -
    -

    ${ video.name }

    -
    - ` - - const playerHtml = await this.boundComponent(VideoPlayer)( video, { - coverBottomHtml - } ) - - const hasFeaturedApps = featuredApps.length > 0 - const featuredAppsHtml = hasFeaturedApps ? renderFeaturedApps( featuredApps ) : '' - - const rowHtml = await this.boundComponent(VideoRow)( relatedVideos ) - - // const rowHtml = renderedRow.join('') - - return /* html */` -
    -
    - - ${ playerHtml } - -
    - - ${ video.channel.id !== myChannelId ? /* html */` - - ` : '' } -
    - -
    - - ${ featuredAppsHtml } - - - -
    -
    - ` - } -} - -module.exports = TV diff --git a/pages/README.md b/pages/README.md deleted file mode 100644 index 7a6cffa..0000000 --- a/pages/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# PAGES - -This directory contains your Application Views and Routes. -The framework reads all the `*.vue` files inside this directory and create the router of your application. - -More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/routing). diff --git a/pages/app/_slug/benchmarks.vue b/pages/app/_slug/benchmarks.vue deleted file mode 100644 index 52801ca..0000000 --- a/pages/app/_slug/benchmarks.vue +++ /dev/null @@ -1,268 +0,0 @@ - - - diff --git a/pages/app/_slug/index.vue b/pages/app/_slug/index.vue deleted file mode 100644 index 9b5197a..0000000 --- a/pages/app/_slug/index.vue +++ /dev/null @@ -1,141 +0,0 @@ - - - diff --git a/pages/benchmarks.vue b/pages/benchmarks.vue deleted file mode 100644 index bfb2f71..0000000 --- a/pages/benchmarks.vue +++ /dev/null @@ -1,253 +0,0 @@ - - - diff --git a/pages/categories.vue b/pages/categories.vue deleted file mode 100644 index 0dcbee5..0000000 --- a/pages/categories.vue +++ /dev/null @@ -1,126 +0,0 @@ - - - diff --git a/pages/device/_slug.vue b/pages/device/_slug.vue deleted file mode 100644 index 76353a7..0000000 --- a/pages/device/_slug.vue +++ /dev/null @@ -1,204 +0,0 @@ - - - diff --git a/pages/devices.vue b/pages/devices.vue deleted file mode 100644 index 84a490f..0000000 --- a/pages/devices.vue +++ /dev/null @@ -1,76 +0,0 @@ - - - diff --git a/pages/embed-subscribe.vue b/pages/embed-subscribe.vue deleted file mode 100644 index 27d1e7c..0000000 --- a/pages/embed-subscribe.vue +++ /dev/null @@ -1,36 +0,0 @@ - - - diff --git a/pages/embed/rich-results-player.vue b/pages/embed/rich-results-player.vue deleted file mode 100644 index d8d96eb..0000000 --- a/pages/embed/rich-results-player.vue +++ /dev/null @@ -1,80 +0,0 @@ - - - diff --git a/pages/formula/_slug.vue b/pages/formula/_slug.vue deleted file mode 100644 index ce4192a..0000000 --- a/pages/formula/_slug.vue +++ /dev/null @@ -1,84 +0,0 @@ - - - diff --git a/pages/game/_slug/benchmarks.vue b/pages/game/_slug/benchmarks.vue deleted file mode 100644 index 9621109..0000000 --- a/pages/game/_slug/benchmarks.vue +++ /dev/null @@ -1,226 +0,0 @@ - - - diff --git a/pages/game/_slug/index.vue b/pages/game/_slug/index.vue deleted file mode 100644 index c85b488..0000000 --- a/pages/game/_slug/index.vue +++ /dev/null @@ -1,178 +0,0 @@ - - - diff --git a/pages/games.vue b/pages/games.vue deleted file mode 100644 index 887ad78..0000000 --- a/pages/games.vue +++ /dev/null @@ -1,103 +0,0 @@ - - - diff --git a/pages/index.vue b/pages/index.vue deleted file mode 100644 index fd8e9c2..0000000 --- a/pages/index.vue +++ /dev/null @@ -1,246 +0,0 @@ - - - diff --git a/pages/kind/_slug.vue b/pages/kind/_slug.vue deleted file mode 100644 index 8002fca..0000000 --- a/pages/kind/_slug.vue +++ /dev/null @@ -1,185 +0,0 @@ - - - diff --git a/pages/layout-template.vue b/pages/layout-template.vue deleted file mode 100644 index 9a44683..0000000 --- a/pages/layout-template.vue +++ /dev/null @@ -1,32 +0,0 @@ - - - diff --git a/pages/tv/_slug.vue b/pages/tv/_slug.vue deleted file mode 100644 index c21e8e3..0000000 --- a/pages/tv/_slug.vue +++ /dev/null @@ -1,189 +0,0 @@ - - - diff --git a/plugins/README.md b/plugins/README.md deleted file mode 100644 index 0d227f3..0000000 --- a/plugins/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# PLUGINS - -**This directory is not required, you can delete it if you don't want to use it.** - -This directory contains your Javascript plugins that you want to run before mounting the root Vue.js application. - -More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/plugins). diff --git a/plugins/gtag.js b/plugins/gtag.js deleted file mode 100644 index 806f363..0000000 --- a/plugins/gtag.js +++ /dev/null @@ -1,6 +0,0 @@ -import Vue from 'vue' -import VueGtag from 'vue-gtag' - -Vue.use(VueGtag, { - config: { id: 'G-0WLH5YTTB0' } -}) diff --git a/store/README.md b/store/README.md deleted file mode 100644 index 111fea1..0000000 --- a/store/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# STORE - -**This directory is not required, you can delete it if you don't want to use it.** - -This directory contains your Vuex Store files. -Vuex Store option is implemented in the Nuxt.js framework. - -Creating a file in this directory activate the option in the framework automatically. - -More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/vuex-store). diff --git a/tailwind.config.js b/tailwind.config.js index 086e37d..d8c857e 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -4,7 +4,6 @@ module.exports = { 'helpers/**/*.js', // Nuxt - 'nuxt.config.js', 'components/**/*.vue', 'layouts/**/*.vue', 'pages/**/*.vue',