Skip to content
Snippets Groups Projects
Select Git revision
  • a8eb93bd6f21e6f23c3669c351a1ac281fa59d32
  • master default protected
  • hughns/rust-send-to-device
  • hughns/rtc-to-device-key-distribution
  • develop
  • rav/token_encryption_improvements
  • actions/playwright-image-updates
  • staging
  • hs/timezone-publish-to-profile
  • renovate/all-minor-patch
  • florianduros/pinned-messages/unpin-timeline-event
  • florianduros/pinned-messages/link-timeline-fix
  • renovate/major-testing-library-monorepo
  • langleyd/new_memberlist_ux
  • dbkr/token_incorrect
  • renovate/lock-file-maintenance
  • florianduros/fix/spotlight-click
  • backport-12906-to-staging
  • rav/remove_dead_package_json_stuff
  • florianduros/pinned-messages/timeline-separator
  • dbkr/threepid_medium_unsupported
  • v3.109.0
  • v3.109.0-rc.0
  • v3.108.0
  • v3.108.0-rc.0
  • v3.107.0
  • v3.106.0
  • v3.106.0-rc.1
  • v3.106.0-rc.0
  • v3.105.1
  • v3.105.0
  • v3.104.0
  • v3.104.0-rc.1
  • v3.104.0-rc.0
  • v3.103.0
  • v3.103.0-rc.1
  • v3.103.0-rc.0
  • v3.102.0
  • v3.102.0-rc.1
  • v3.102.0-rc.0
  • v3.101.0
41 results

reskindex.js

Blame
  • user avatar
    David Baker authored
    6eb18f02
    History
    reskindex.js 2.92 KiB
    #!/usr/bin/env node
    
    var fs = require('fs');
    var path = require('path');
    var glob = require('glob');
    
    var args = require('optimist').argv;
    
    var header = args.h || args.header;
    
    if (args._.length == 0) {
        console.log("No skin given");
        process.exit(1);
    }
    
    var skin = args._[0];
    
    try {
        fs.accessSync(path.join('src', 'skins', skin), fs.F_OK);
    } catch (e) {
        console.log("Skin "+skin+" not found");
        process.exit(1);
    }
    
    var skinfoFile = path.join('src', 'skins', skin, 'skinfo.json');
    
    try {
        fs.accessSync(skinfoFile, fs.F_OK);
    } catch (e) {
        console.log("Skin "+skin+" has no skinfo.json");
        process.exit(1);
    }
    
    try {
        fs.accessSync(path.join('src', 'skins', skin, 'views'), fs.F_OK);
    } catch (e) {
        console.log("Skin "+skin+" has no views directory");
        process.exit(1);
    }
    
    var skindex = path.join('src', 'skins', skin, 'skindex.js');
    var viewsDir = path.join('src', 'skins', skin, 'views');
    
    var strm = fs.createWriteStream(skindex);
    
    if (header) {
       strm.write(fs.readFileSync(header));
       strm.write('\n');
    }
    
    strm.write("/*\n");
    strm.write(" * THIS FILE IS AUTO-GENERATED\n");
    strm.write(" * You can edit it you like, but your changes will be overwritten,\n");
    strm.write(" * so you'd just be trying to swim upstream like a salmon.\n");
    strm.write(" * You are not a salmon.\n");
    strm.write(" */\n\n");
    
    var mySkinfo = JSON.parse(fs.readFileSync(skinfoFile, "utf8"));
    
    strm.write("var skin = {\n");
    strm.write("    atoms: {},\n");
    strm.write("    molecules: {},\n");
    strm.write("    organisms: {},\n");
    strm.write("    templates: {},\n");
    strm.write("    pages: {}\n");
    strm.write("};\n");
    strm.write('\n');
    
    var tree = {
        atoms: {},
        molecules: {},
        organisms: {},
        templates: {},
        pages: {}
    };
    
    var files = glob.sync('**/*.js', {cwd: viewsDir});
    for (var i = 0; i < files.length; ++i) {
        var file = files[i].replace('.js', '');
        var module = (file.replace(/\//g, '.'));
    
        // create objects for submodules
        // NB. that we do not support creating additional
        // top level modules. Perhaps we should?
        var subtree = tree[module.split('.')[0]];
        var restOfPath = module.split('.').slice(0, -1);
        var currentPath = restOfPath[0];
        restOfPath = restOfPath.slice(1);
        while (restOfPath.length) {
            currentPath += '.'+restOfPath[0];
            if (subtree[restOfPath[0]] == undefined) {
                strm.write('skin.'+currentPath+' = {};\n');
                strm.uncork();
                subtree[restOfPath[0]] = {};
            }
            subtree = subtree[restOfPath[0]];
            restOfPath = restOfPath.slice(1);
        }
    
        strm.write('skin.'+module+" = require('./views/"+file+"');\n");
        strm.uncork();
    }
    
    strm.write("\n");
    
    if (mySkinfo.baseSkin) {
        strm.write("module.exports = require('"+mySkinfo.baseSkin+"');");
        strm.write("var extend = require('matrix-react-sdk/lib/extend');\n");
        strm.write("extend(module.exports, skin);\n");
    } else {
        strm.write("module.exports = skin;");
    }
    
    strm.end();