Skip to content

Instantly share code, notes, and snippets.

@balkhaev
Created October 9, 2018 11:24

Revisions

  1. balkhaev created this gist Oct 9, 2018.
    109 changes: 109 additions & 0 deletions es6-module.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,109 @@
    // Abstract

    const privateSingletonVariable = {};

    export const publicSingletonVariable = [];

    export function publicPureFunction(arg1, arg2) {
    return arg1 - arg2;
    }

    export default function constructorModule(key, settings = {}) {
    const privateOption1 = settings.option1 || 'default option 1';
    const privateOption2 = settings.option2 || 2;

    function privateMethod(additionalOption) {
    return privateOption1 + additionalOption;
    }

    publicSingletonVariable.push(key);
    privateSingletonVariable[key] = {};

    return {
    publicApiMethod(arg1, arg2) {
    console.log(arg1, arg2);
    },
    publicApiMethodUsePrivate(arg1) {
    return privateMethod(arg1);
    },
    publicApiMethodUsePure(arg1) {
    return publicPureFunction(privateOption2, arg1);
    }
    }
    }

    // Real World - Preloader

    const nodePreloaders = [];

    export const addNode = (node, type) => nodePreloaders.push({ node, type });
    export const findNodeIndex = node => nodePreloaders.findIndex(nodeLoader => nodeLoader.node === node);
    export const existNode = node => findNodeIndex(node) > -1;
    export const removeNode = node => {
    const nodeIndex = findNodeIndex(node);
    if (nodeIndex > -1) {
    nodePreloaders.splice(nodeIndex, 1);
    }
    };
    export const getNodes = () => nodePreloaders;

    const preloaderTypes = {
    mini(node) {
    // code for mini preloader
    },
    midi(node) {
    // code for mini preloader
    },
    large(node) {
    // code for mini preloader
    },
    }

    export function preloader(node, type) {
    // Check for null and undefined
    if (preloaderTypes[type] == null) {
    throw Error('Loader type is undefined!');
    }
    if (existNode(node)) {
    return;
    }

    addNode(node, type);
    preloaderTypes[type](node);

    return {
    unBlock() {
    unblock(node);
    },
    isBlocked() {
    return existNode(node);
    }
    }
    }

    export function unblock(node) {
    if (!existNode(node)) {
    return;
    }

    removeNode(node);
    }

    export default {
    unblock: unblock,
    block(node, opts) {
    return preloader(node, 'midi', opts);
    },
    blockMini(node, opts) {
    return preloader(node, 'mini', opts);
    },
    blockMidi(node, opts) {
    return preloader(node, 'midi', opts);
    },
    blockLarge(node, opts) {
    return preloader(node, 'large', opts);
    },
    isBlocked(node) {
    return existNode(node);
    },
    }
    13 changes: 13 additions & 0 deletions global-module.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,13 @@
    window.moduleName = ((win, doc, $) => {
    const privateVariable = doc.innerHeight;

    function privateMethod() {
    return privateVariable;
    }

    return {
    publicMethod() {
    return typeof $ !== 'undefined';
    }
    }
    })(window, document, jQuery)