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;
							 | 
						||
| 
								 | 
							
								};
							 |