diff options
-rw-r--r-- | README.md | 1 | ||||
-rw-r--r-- | src/listing-spec.js | 2 | ||||
-rw-r--r-- | src/misc-templates.js | 122 | ||||
-rwxr-xr-x | src/upd8.js | 1 | ||||
-rw-r--r-- | src/util/link.js | 253 | ||||
-rw-r--r-- | src/util/magic-constants.js | 9 | ||||
-rw-r--r-- | src/util/urls.js | 4 |
7 files changed, 0 insertions, 392 deletions
diff --git a/README.md b/README.md index ee787c04..62dd64d7 100644 --- a/README.md +++ b/README.md @@ -153,7 +153,6 @@ The source code for HSMusic is divided across a number of source files, loosely - `gen-thumbs.js`: Standalone utility also called every time HSMusic is run (unless `--skip-thumbs` is provided) which keeps a persistent cache of media MD5s and (re)generates thumbnails for new or updated image files - `repl.js`: Standalone utility for loading all wiki data and providing a convenient REPL to run filters and transformations on data objects right from the Node.js command line - `listing-spec.js`: Descriptors for computations and HTML templates used for the Listings part of the site - - `misc-templates.js`: General collection of HTML patterns used across page generation - `url-spec.js`: Index of output paths where generated HTML ends up; also controls where `<a>`, `<img>`, etc tags link - `file-size-preloader.js`: Simple utility for calculating size of files in media directory - `strings-default.json`: Template for localization strings and index of default (English) strings used all across the site layout diff --git a/src/listing-spec.js b/src/listing-spec.js index 402cb6fd..1e21baa1 100644 --- a/src/listing-spec.js +++ b/src/listing-spec.js @@ -1,5 +1,3 @@ -import {OFFICIAL_GROUP_DIRECTORY} from './util/magic-constants.js'; - import { accumulateSum, empty, diff --git a/src/misc-templates.js b/src/misc-templates.js deleted file mode 100644 index ba1a60f1..00000000 --- a/src/misc-templates.js +++ /dev/null @@ -1,122 +0,0 @@ -// Miscellaneous utility functions which are useful across page specifications. -// These are made available right on a page spec's ({wikiData, language, ...}) -// args object! - -import T from './data/things/index.js'; - -import { - empty, - repeat, - unique, -} from './util/sugar.js'; - -import {thumb} from './util/urls.js'; - -import { - getTotalDuration, - sortAlbumsTracksChronologically, - sortChronologically, -} from './util/wiki-data.js'; - -// Grids - -function unbound_getGridHTML({ - img, - html, - language, - - getRevealStringFromArtTags, - - entries, - srcFn, - linkFn, - noSrcTextFn = () => '', - altFn = () => '', - detailsFn = null, - lazy = true, -}) { - return entries - .map(({large, item}, i) => - linkFn(item, { - class: ['grid-item', 'box', large && 'large-grid-item'], - text: html.fragment([ - img({ - src: srcFn(item), - alt: altFn(item), - thumb: 'medium', - lazy: typeof lazy === 'number' ? i >= lazy : lazy, - square: true, - reveal: getRevealStringFromArtTags(item.artTags, {language}), - noSrcText: noSrcTextFn(item), - }), - html.tag('span', item.name), - detailsFn && - html.tag('span', detailsFn(item)), - ]), - })) - .join('\n'); -} - -function unbound_getAlbumGridHTML({ - getAlbumCover, - getGridHTML, - link, - language, - details = false, - ...props -}) { - return getGridHTML({ - srcFn: getAlbumCover, - linkFn: link.album, - detailsFn: - details && - ((album) => - language.$('misc.albumGrid.details', { - tracks: language.countTracks(album.tracks.length, {unit: true}), - time: language.formatDuration(getTotalDuration(album.tracks)), - })), - noSrcTextFn: (album) => - language.$('misc.albumGrid.noCoverArt', { - album: album.name, - }), - ...props, - }); -} - -function unbound_getFlashGridHTML({ - link, - - getFlashCover, - getGridHTML, - ...props -}) { - return getGridHTML({ - srcFn: getFlashCover, - linkFn: link.flash, - ...props, - }); -} - -// Carousel reels - -function unbound_getCarouselHTML({ - html, - img, - - items, - lazy = false, - - altFn = () => '', - linkFn = (x, {text}) => text, - srcFn, -}) { -} - -// Exports - -export { - unbound_getGridHTML as getGridHTML, - unbound_getAlbumGridHTML as getAlbumGridHTML, - unbound_getFlashGridHTML as getFlashGridHTML, - unbound_getCarouselHTML as getCarouselHTML, -} diff --git a/src/upd8.js b/src/upd8.js index 1e52c555..f5781272 100755 --- a/src/upd8.js +++ b/src/upd8.js @@ -60,7 +60,6 @@ import { WIKI_INFO_FILE, } from './data/yaml.js'; -import link from './util/link.js'; import {isMain, traverse} from './util/node-utils.js'; import {empty, showAggregate, withEntries} from './util/sugar.js'; import {generateURLs} from './util/urls.js'; diff --git a/src/util/link.js b/src/util/link.js deleted file mode 100644 index a9f79c8b..00000000 --- a/src/util/link.js +++ /dev/null @@ -1,253 +0,0 @@ -// This file is essentially one level of a8straction a8ove urls.js (and the -// urlSpec it gets its paths from). It's a 8unch of utility functions which -// take certain types of wiki data o8jects (colloquially known as "things") -// and return actual <a href> HTML link tags. -// -// The functions we're cre8ting here (all factory-style) take a "to" argument, -// which is roughly a function which takes a urlSpec key and spits out a path -// to 8e stuck in an href or src or suchever. There are also a few other -// options availa8le in all the functions, making a common interface for -// gener8ting just a8out any link on the site. - -import * as html from './html.js'; - -import T from '../data/things/index.js'; - -export function unbound_getLinkThemeString(color, { - getColors, -}) { - if (!color) return ''; - - const {primary, dim} = getColors(color); - return `--primary-color: ${primary}; --dim-color: ${dim}`; -} - -const appendIndexHTMLRegex = /^(?!https?:\/\/).+\/$/; - -function linkHelper({ - path: pathOption, - - expectThing = true, - color: colorOption = true, - - attr: attrOption = null, - data: dataOption = null, - text: textOption = null, -}) { - const generateLink = (data, { - getLinkThemeString, - to, - - text = '', - attributes = null, - class: className = '', - color = true, - hash = '', - preferShortName = false, - }) => { - const path = (expectThing ? pathOption(data) : pathOption()); - let href = to(...path); - - if (link.globalOptions.appendIndexHTML) { - if (appendIndexHTMLRegex.test(href)) { - href += 'index.html'; - } - } - - if (hash) { - href += (hash.startsWith('#') ? '' : '#') + hash; - } - - return html.tag('a', - { - ...(attrOption ? attrOption(data) : {}), - ...(attributes ? attributes : {}), - href, - style: - typeof color === 'string' - ? getLinkThemeString(color) - : color && colorOption - ? getLinkThemeString(data.color) - : '', - class: className, - }, - - (text || - (textOption - ? textOption(data) - : (preferShortName - ? data.nameShort ?? data.name - : data.name)))); - }; - - generateLink.data = thing => { - if (!expectThing) { - throw new Error(`This kind of link doesn't need any data serialized`); - } - - const data = (dataOption ? dataOption(thing) : {}); - - if (colorOption) { - data.color = thing.color; - } - - if (!textOption) { - data.name = thing.name; - data.nameShort = thing.nameShort ?? thing.name; - } - - return data; - }; - - return generateLink; -} - -function linkDirectory(key, { - exposeDirectory = null, - prependLocalized = true, - - data = null, - attr = null, - ...conf -} = {}) { - return linkHelper({ - data: thing => ({ - ...(data ? data(thing) : {}), - directory: thing.directory, - }), - - path: data => - (prependLocalized - ? ['localized.' + key, data.directory] - : [key, data.directory]), - - attr: (data) => ({ - ...(attr ? attr(data) : {}), - ...(exposeDirectory ? {[exposeDirectory]: data.directory} : {}), - }), - - ...conf, - }); -} - -function linkIndex(key, conf) { - return linkHelper({ - path: () => [key], - - expectThing: false, - ...conf, - }); -} - -function linkAdditionalFile(key, conf) { - return linkHelper({ - data: ({file, album}) => ({ - directory: album.directory, - file, - }), - - path: data => ['media.albumAdditionalFile', data.directory, data.file], - - color: false, - ...conf, - }); -} - -// Mapping of Thing constructor classes to the key for a link.x() function. -// These represent a sensible "default" link, i.e. to the primary page for -// the given thing based on what it's an instance of. This is used for the -// link.anything() function. -const linkAnythingMapping = [ - [T.Album, 'album'], - [T.Artist, 'artist'], - [T.ArtTag, 'tag'], - [T.Flash, 'flash'], - [T.Group, 'groupInfo'], - [T.NewsEntry, 'newsEntry'], - [T.StaticPage, 'staticPage'], - [T.Track, 'track'], -]; - -const link = { - globalOptions: { - // This should usually only 8e used during development! It'll take any - // href that ends with `/` and append `index.html` to the returned - // value (for to.thing() functions). This is handy when developing - // without a local server (i.e. using file:// protocol URLs in your - // we8 8rowser), 8ut isn't guaranteed to 8e 100% 8ug-free. - appendIndexHTML: false, - }, - - album: linkDirectory('album'), - albumAdditionalFile: linkAdditionalFile('albumAdditionalFile'), - albumGallery: linkDirectory('albumGallery'), - albumCommentary: linkDirectory('albumCommentary'), - artist: linkDirectory('artist', {color: false}), - artistGallery: linkDirectory('artistGallery', {color: false}), - commentaryIndex: linkIndex('commentaryIndex', {color: false}), - flashIndex: linkIndex('flashIndex', {color: false}), - flash: linkDirectory('flash'), - groupInfo: linkDirectory('groupInfo'), - groupGallery: linkDirectory('groupGallery'), - home: linkIndex('home', {color: false}), - listingIndex: linkIndex('listingIndex'), - listing: linkDirectory('listing'), - newsIndex: linkIndex('newsIndex', {color: false}), - newsEntry: linkDirectory('newsEntry', {color: false}), - staticPage: linkDirectory('staticPage', {color: false}), - tag: linkDirectory('tag'), - track: linkDirectory('track', {exposeDirectory: 'data-track'}), - - media: linkDirectory('media.path', { - prependLocalized: false, - color: false, - }), - - root: linkDirectory('shared.path', { - prependLocalized: false, - color: false, - }), - data: linkDirectory('data.path', { - prependLocalized: false, - color: false, - }), - - site: linkDirectory('localized.path', { - prependLocalized: false, - color: false, - }), - - // This is NOT an arrow functions because it should be callable for other - // "this" objects - i.e, if we bind arguments in other functions on the same - // link object, link.anything() should use those bound functions, not the - // original ones we're exporting here. - // - // This function has been through a lot of names: - // - getHrefOfAnythingMan (2020-05-25) - // - toAnythingMan (2021-03-02) - // - linkAnythingMan (2021-05-14) - // - link.anything (2022-09-15) - // ...And it'll probably end up being renamed yet again one day! - // - anything(...args) { - if (!this) { - throw new Error(`Missing value for \`this\` - investigate JS call stack`); - } - - const [thing] = args; - - for (const [constructor, fnKey] of linkAnythingMapping) { - if (thing instanceof constructor) { - return Reflect.apply(this[fnKey], this, args); - } - } - - throw new Error(`Unrecognized type of thing for linking: ${thing}`); - }, -}; - -export { - unbound_getLinkThemeString as getLinkThemeString, -}; - -export default link; diff --git a/src/util/magic-constants.js b/src/util/magic-constants.js deleted file mode 100644 index 83dd7db5..00000000 --- a/src/util/magic-constants.js +++ /dev/null @@ -1,9 +0,0 @@ -// Magic constants only! These are hard-coded, and any use of them should be -// considered a flaw in the codebase - areas where we use hard-coded behavior -// to support one use of the wiki software (i.e. HSMusic, usually), rather than -// implementing the feature more generally/customizably. -// -// All such uses should eventually be replaced with better code in due time -// (TM). - -export const OFFICIAL_GROUP_DIRECTORY = 'official'; diff --git a/src/util/urls.js b/src/util/urls.js index bd3a349a..02961743 100644 --- a/src/util/urls.js +++ b/src/util/urls.js @@ -3,10 +3,6 @@ // is in charge of pre-gener8ting a complete network of template strings // which can really quickly take su8stitute parameters to link from any one // place to another; 8ut there are also a few other utilities, too. -// -// Nota8ly, everything here is string-8ased, for gener8ting and transforming -// actual path strings. More a8stract operations using wiki data o8jects is -// the domain of link.js. import * as path from 'path'; |