UNPKG

gojs

Version:

Interactive diagrams, charts, and graphs, such as trees, flowcharts, orgcharts, UML, BPMN, or business diagrams

183 lines (182 loc) 9.78 kB
(function (factory) { if (typeof module === "object" && typeof module.exports === "object") { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === "function" && define.amd) { define(["require", "exports", "../../../release/go", "./DataInspectorOverrides", "./EditorHelper", "./Floorplan", "./FloorplanPalette"], factory); } })(function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.init = void 0; var go = require("../../../release/go"); var DataInspectorOverrides_1 = require("./DataInspectorOverrides"); var EditorHelper_1 = require("./EditorHelper"); var Floorplan_1 = require("./Floorplan"); var FloorplanPalette_1 = require("./FloorplanPalette"); /** * Script to set up the Floorplanner editor * @param JQUERY jQuery passed to this script in floorplannerTS/index.html via requireJS * @hidden @internal */ function init(JQUERY) { var editorHelper = new EditorHelper_1.EditorHelper(1, 2, '../../projects/storage', Floorplan_1.Floorplan, JQUERY); window.editorHelper = editorHelper; // replace generic palettes with FloorplanPalettes var myFloorplan = editorHelper.diagrams[0]; editorHelper.palettes[0].div = null; editorHelper.palettes[1].div = null; var furniturePalette = new FloorplanPalette_1.FloorplanPalette('ge-palette-0', myFloorplan); furniturePalette.model = new go.GraphLinksModel(myFloorplan.makeDefaultFurniturePaletteNodeData()); editorHelper.palettes[0] = furniturePalette; var wallPartsPalette = new FloorplanPalette_1.FloorplanPalette('ge-palette-1', myFloorplan); wallPartsPalette.model = new go.GraphLinksModel(myFloorplan.makeDefaultWallpartsPaletteNodeData()); editorHelper.palettes[1] = wallPartsPalette; // set default model for all Cloud Storage subclasses for (var i in editorHelper.storages) { var storage = editorHelper.storages[i]; var dm = JSON.stringify({ 'class': 'GraphLinksModel', 'copiesKey': false, 'modelData': { 'units': 'meters', 'unitsAbbreviation': 'm', 'unitsConversionFactor': 0.02, 'gridSize': 10, 'wallThickness': 10, 'preferences': { 'showWallGuidelines': true, 'showWallLengths': true, 'showWallAngles': true, 'showOnlySmallWallAngles': true, 'showGrid': true, 'gridSnap': true } }, 'nodeDataArray': [], 'linkDataArray': [] }); storage.defaultModel = dm; } // listen if the model of the Floorplan changes completely -- if so, there has been a load event, and we must update walls / rooms myFloorplan.addDiagramListener('InitialLayoutCompleted', function (e) { // update units, grid size, units / px, showGrid, and preferences from the loading model's modelData var unitsForm = document.getElementById('unitsForm'); var gridSizeInput = document.getElementById('gridSizeInput'); var showGridCheckbox = document.getElementById('showGridCheckbox'); var gridSnapCheckbox = document.getElementById('gridSnapCheckbox'); var showWallGuidelinesCheckbox = document.getElementById('wallGuidelinesCheckbox'); var showWallLengthsCheckbox = document.getElementById('wallLengthsCheckbox'); var showWallAnglesCheckbox = document.getElementById('wallAnglesCheckbox'); var showOnlySmallWallAnglesCheckbox = document.getElementById('onlySmallWallAnglesCheckbox'); var unitsConversionFactorInput = document.getElementById('unitsConversionFactorInput'); var fp = e.diagram; var md = fp.model.modelData; var units = md.units; var unitsRadioChecked = document.getElementById(units); unitsRadioChecked.checked = true; var gridSize = md.gridSize; gridSize = fp.convertPixelsToUnits(gridSize); gridSizeInput.value = gridSize; fp.changeGridSize(gridSizeInput); var unitsConversionFactor = md.unitsConversionFactor; unitsConversionFactorInput.value = unitsConversionFactor; fp.changeUnitsConversionFactor(unitsConversionFactorInput, gridSizeInput); fp.changeUnits(unitsForm); var showGrid = md.preferences.showGrid; var gridSnap = md.preferences.gridSnap; var showWallGuidelines = md.preferences.showWallGuidelines; var showWallLengths = md.preferences.showWallLengths; var showWallAngles = md.preferences.showWallAngles; var showOnlySmallWallAngles = md.preferences.showOnlySmallWallAngles; showGridCheckbox.checked = showGrid; gridSnapCheckbox.checked = gridSnap; showWallGuidelinesCheckbox.checked = showWallGuidelines; showWallLengthsCheckbox.checked = showWallLengths; showWallAnglesCheckbox.checked = showWallAngles; showOnlySmallWallAnglesCheckbox.checked = showOnlySmallWallAngles; fp.checkboxChanged('showGridCheckbox'); fp.checkboxChanged('gridSnapCheckbox'); fp.checkboxChanged('wallGuidelinesCheckbox'); fp.checkboxChanged('wallLengthsCheckbox'); fp.checkboxChanged('wallAnglesCheckbox'); fp.checkboxChanged('onlySmallWallAnglesCheckbox'); // update walls and rooms geometries fp.nodes.iterator.each(function (n) { if (n.category === 'WallGroup') { fp.updateWall(n); } if (n.category === 'RoomNode') { fp.updateRoom(n); } }); }); /** * Update the tools buttons so the tool in use is highlighted */ window.updateButtons = function (func, el) { func.call(myFloorplan); var toolButtons = document.getElementsByClassName('toolButtons'); for (var i = 0; i < toolButtons.length; i++) { var tb = toolButtons[i]; if (tb === el) { tb.style.background = '#4b545f'; tb.style.color = 'white'; } else { tb.style.background = 'rgb(221, 221, 221)'; tb.style.color = 'black'; } } }; JQUERY(function () { JQUERY('#ge-palettes-container').accordion({ heightStyle: 'content', activate: function () { for (var i = 0; i < editorHelper.palettes.length; i++) { var palette = editorHelper.palettes[i]; palette.requestUpdate(); } } }); // JQUERY("#ge-overviews-container").accordion(); var draggables = document.getElementsByClassName('ge-draggable'); for (var i = 0; i < draggables.length; i++) { var draggable = draggables[i]; var id = '#' + draggable.id; var hid = id + '-handle'; // When a window is dragged, its height is set. this is bad. unset height / maybe width after dragging JQUERY(id).draggable({ handle: hid, stack: '.ge-draggable', containment: 'parent', scroll: false, stop: function (event) { this.style.height = 'unset'; var did = event.target.id; // only unset width for inspector and options menu, whose widths are dependent on contents if (did === 'ge-inspector-window' || did === 'optionsWindow') { this.style.width = 'unset'; } } }); } }); // end jQuery // add options window hotkey (other hotkeys are defined in goeditor-setup.js) document.body.addEventListener('keydown', function (e) { var keynum = e.which; if (e.ctrlKey) { e.preventDefault(); switch (keynum) { case 66: editorHelper.geHideShowWindow('optionsWindow'); break; // ctrl + b } } }); // function to tweak inspector for app-specific stuff is in floorplanner-datainspector-overrides.js DataInspectorOverrides_1.tweakInspectorForFloorplanner(editorHelper.inspector, myFloorplan, editorHelper); var defaultModelTextarea = document.getElementById('defaultModelTextarea'); var defaultModelString = defaultModelTextarea.value; var defaultModelJson = JSON.parse(defaultModelString); myFloorplan.model = go.Model.fromJson(defaultModelJson); // Some global function required to be on the window object for click handling window.handlePromise = function (action) { EditorHelper_1.EditorHelper.prototype.handlePromise.call(editorHelper, action); }; window.myFloorplan = myFloorplan; window.furniturePalette = furniturePalette; window.wallPartsPalette = wallPartsPalette; } exports.init = init; });