mirror of
				https://github.com/fooflington/selfdefined.git
				synced 2025-11-04 07:39:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			101 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
var Immutable = require("immutable");
 | 
						|
var fs        = require("fs");
 | 
						|
var path      = require("path");
 | 
						|
var baseHorizontal = fs.readFileSync(path.resolve(__dirname, "css/grid-overlay-horizontal.css"), "utf8");
 | 
						|
var baseVertical   = fs.readFileSync(path.resolve(__dirname, "css/grid-overlay-vertical.css"), "utf8");
 | 
						|
 | 
						|
function template (string, obj) {
 | 
						|
    obj = obj || {};
 | 
						|
    return string.replace(/\{\{(.+?)\}\}/g, function () {
 | 
						|
        if (obj[arguments[1]]) {
 | 
						|
           return obj[arguments[1]];
 | 
						|
        }
 | 
						|
        return "";
 | 
						|
    });
 | 
						|
}
 | 
						|
 | 
						|
function getCss(opts) {
 | 
						|
 | 
						|
    var base = opts.selector + " {position:relative;}";
 | 
						|
 | 
						|
    if (opts.horizontal) {
 | 
						|
        base += baseHorizontal;
 | 
						|
    }
 | 
						|
 | 
						|
    if (opts.vertical) {
 | 
						|
        base += baseVertical;
 | 
						|
    }
 | 
						|
 | 
						|
    return template(base, opts);
 | 
						|
}
 | 
						|
 | 
						|
module.exports.init = function (ui) {
 | 
						|
 | 
						|
    const TRANSMIT_EVENT = "ui:remote-debug:css-overlay-grid";
 | 
						|
    const READY_EVENT    = "ui:remote-debug:css-overlay-grid:ready";
 | 
						|
    const OPT_PATH       = ["remote-debug", "overlay-grid"];
 | 
						|
 | 
						|
    var defaults = {
 | 
						|
        offsetY:  "0",
 | 
						|
        offsetX:  "0",
 | 
						|
        size:     "16px",
 | 
						|
        selector: "body",
 | 
						|
        color:    "rgba(0, 0, 0, .2)",
 | 
						|
        horizontal: true,
 | 
						|
        vertical: true
 | 
						|
    };
 | 
						|
 | 
						|
    ui.clients.on("connection", function (client) {
 | 
						|
        client.on(READY_EVENT, function () {
 | 
						|
            client.emit(TRANSMIT_EVENT, {
 | 
						|
                innerHTML: getCss(ui.options.getIn(OPT_PATH).toJS())
 | 
						|
            });
 | 
						|
        });
 | 
						|
    });
 | 
						|
 | 
						|
    ui.setOptionIn(OPT_PATH, Immutable.Map({
 | 
						|
        name: "overlay-grid",
 | 
						|
        title: "Overlay CSS Grid",
 | 
						|
        active: false,
 | 
						|
        tagline: "Add an adjustable CSS overlay grid to your webpage",
 | 
						|
        innerHTML: ""
 | 
						|
    }).merge(defaults));
 | 
						|
 | 
						|
 | 
						|
    var methods = {
 | 
						|
        toggle: function (value) {
 | 
						|
            if (value !== true) {
 | 
						|
                value = false;
 | 
						|
            }
 | 
						|
            if (value) {
 | 
						|
                ui.setOptionIn(OPT_PATH.concat("active"), true);
 | 
						|
                ui.enableElement({name: "overlay-grid-js"});
 | 
						|
            } else {
 | 
						|
                ui.setOptionIn(OPT_PATH.concat("active"), false);
 | 
						|
                ui.disableElement({name: "overlay-grid-js"});
 | 
						|
                ui.clients.emit("ui:element:remove", {id: "__bs_overlay-grid-styles__"});
 | 
						|
            }
 | 
						|
        },
 | 
						|
        adjust: function (data) {
 | 
						|
 | 
						|
            ui.setOptionIn(OPT_PATH, ui.getOptionIn(OPT_PATH).merge(data));
 | 
						|
 | 
						|
            ui.clients.emit(TRANSMIT_EVENT, {
 | 
						|
                innerHTML: getCss(ui.options.getIn(OPT_PATH).toJS())
 | 
						|
            });
 | 
						|
        },
 | 
						|
        "toggle:axis": function (item) {
 | 
						|
 | 
						|
            ui.setOptionIn(OPT_PATH.concat([item.axis]), item.value);
 | 
						|
 | 
						|
            ui.clients.emit(TRANSMIT_EVENT, {
 | 
						|
                innerHTML: getCss(ui.options.getIn(OPT_PATH).toJS())
 | 
						|
            });
 | 
						|
        },
 | 
						|
        event: function (event) {
 | 
						|
            methods[event.event](event.data);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    return methods;
 | 
						|
}; |