« get me outta code hell

linkPathFromMedia.js « dependencies « content « src - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/content/dependencies/linkPathFromMedia.js
blob: d71c69f896b64a30cbd031a593ee3a46e1ef739c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import {empty} from '#sugar';

export default {
  contentDependencies: ['linkTemplate'],

  extraDependencies: [
    'checkIfImagePathHasCachedThumbnails',
    'getDimensionsOfImagePath',
    'getSizeOfMediaFile',
    'getThumbnailsAvailableForDimensions',
    'html',
    'to',
  ],

  relations: (relation) =>
    ({link: relation('linkTemplate')}),

  data: (path) =>
    ({path}),

  generate(data, relations, {
    checkIfImagePathHasCachedThumbnails,
    getDimensionsOfImagePath,
    getSizeOfMediaFile,
    getThumbnailsAvailableForDimensions,
    html,
    to,
  }) {
    const attributes = html.attributes();

    if (checkIfImagePathHasCachedThumbnails(data.path)) {
      const dimensions = getDimensionsOfImagePath(data.path);
      const availableThumbs = getThumbnailsAvailableForDimensions(dimensions);
      const fileSize = getSizeOfMediaFile(data.path);

      const embedSrc =
        to('thumb.path', data.path.replace(/\.(png|jpg)$/, '.tack.jpg'));

      attributes.add([
        {class: 'image-media-link'},

        {'data-embed-src': embedSrc},

        fileSize &&
          {'data-original-size': fileSize},

        {'data-dimensions': dimensions.join('x')},

        !empty(availableThumbs) &&
          {'data-thumbs':
              availableThumbs
                .map(([name, size]) => `${name}:${size}`)
                .join(' ')},
      ]);
    }

    relations.link.setSlots({
      attributes,
      path: ['media.path', data.path],
    });

    return relations.link;
  },
};