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