mirror of
https://github.com/liabru/matter-js.git
synced 2024-11-23 09:26:51 -05:00
1641 lines
218 KiB
JavaScript
1641 lines
218 KiB
JavaScript
|
/*!
|
||
|
* matter-tools 0.7.0 by Liam Brummitt 2016-11-18
|
||
|
* https://github.com/liabru/matter-tools
|
||
|
* License MIT
|
||
|
*/
|
||
|
(function webpackUniversalModuleDefinition(root, factory) {
|
||
|
if(typeof exports === 'object' && typeof module === 'object')
|
||
|
module.exports = factory(require("MatterTools"), require("Matter"), require("jQuery"));
|
||
|
else if(typeof define === 'function' && define.amd)
|
||
|
define(["MatterTools", "Matter", "jQuery"], factory);
|
||
|
else if(typeof exports === 'object')
|
||
|
exports["Inspector"] = factory(require("MatterTools"), require("Matter"), require("jQuery"));
|
||
|
else
|
||
|
root["MatterTools"] = root["MatterTools"] || {}, root["MatterTools"]["Inspector"] = factory(root["MatterTools"], root["Matter"], root["jQuery"]);
|
||
|
})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_5__, __WEBPACK_EXTERNAL_MODULE_7__) {
|
||
|
return /******/ (function(modules) { // webpackBootstrap
|
||
|
/******/ // The module cache
|
||
|
/******/ var installedModules = {};
|
||
|
|
||
|
/******/ // The require function
|
||
|
/******/ function __webpack_require__(moduleId) {
|
||
|
|
||
|
/******/ // Check if module is in cache
|
||
|
/******/ if(installedModules[moduleId])
|
||
|
/******/ return installedModules[moduleId].exports;
|
||
|
|
||
|
/******/ // Create a new module (and put it into the cache)
|
||
|
/******/ var module = installedModules[moduleId] = {
|
||
|
/******/ exports: {},
|
||
|
/******/ id: moduleId,
|
||
|
/******/ loaded: false
|
||
|
/******/ };
|
||
|
|
||
|
/******/ // Execute the module function
|
||
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
||
|
|
||
|
/******/ // Flag the module as loaded
|
||
|
/******/ module.loaded = true;
|
||
|
|
||
|
/******/ // Return the exports of the module
|
||
|
/******/ return module.exports;
|
||
|
/******/ }
|
||
|
|
||
|
|
||
|
/******/ // expose the modules object (__webpack_modules__)
|
||
|
/******/ __webpack_require__.m = modules;
|
||
|
|
||
|
/******/ // expose the module cache
|
||
|
/******/ __webpack_require__.c = installedModules;
|
||
|
|
||
|
/******/ // __webpack_public_path__
|
||
|
/******/ __webpack_require__.p = "/demo/lib";
|
||
|
|
||
|
/******/ // Load entry module and return exports
|
||
|
/******/ return __webpack_require__(0);
|
||
|
/******/ })
|
||
|
/************************************************************************/
|
||
|
/******/ ([
|
||
|
/* 0 */
|
||
|
/***/ function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
/**
|
||
|
* A tool for inspecting worlds.
|
||
|
* @module Inspector
|
||
|
*/
|
||
|
|
||
|
var Inspector = module.exports = {};
|
||
|
var $ = __webpack_require__(7);
|
||
|
__webpack_require__(8);
|
||
|
var ToolsCommon = __webpack_require__(2);
|
||
|
var Serializer = __webpack_require__(1).Serializer;
|
||
|
var km = __webpack_require__(9);
|
||
|
var Matter = __webpack_require__(5);
|
||
|
var Body = Matter.Body;
|
||
|
var Bounds = Matter.Bounds;
|
||
|
var Composite = Matter.Composite;
|
||
|
var Common = Matter.Common;
|
||
|
var Events = Matter.Events;
|
||
|
var Mouse = Matter.Mouse;
|
||
|
var Query = Matter.Query;
|
||
|
var Vertices = Matter.Vertices;
|
||
|
var Vector = Matter.Vector;
|
||
|
var MouseConstraint = Matter.MouseConstraint;
|
||
|
|
||
|
var $body;
|
||
|
|
||
|
/**
|
||
|
* Creates an inspector
|
||
|
* @function Gui.create
|
||
|
* @param {engine} engine
|
||
|
* @param {render} [render]
|
||
|
* @param {object} options
|
||
|
* @return {inspector} The created inspector instance.
|
||
|
*/
|
||
|
Inspector.create = function (engine, render, options) {
|
||
|
if (!$) {
|
||
|
console.log('Could not create inspector, missing jQuery.');
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var inspector = {
|
||
|
engine: null,
|
||
|
render: null,
|
||
|
isPaused: false,
|
||
|
selected: [],
|
||
|
selectStart: null,
|
||
|
selectEnd: null,
|
||
|
selectBounds: Bounds.create(),
|
||
|
mousePrevPosition: { x: 0, y: 0 },
|
||
|
offset: { x: 0, y: 0 },
|
||
|
autoHide: true,
|
||
|
autoRewind: true,
|
||
|
bodyClass: '',
|
||
|
exportIndent: 0,
|
||
|
clipboard: [],
|
||
|
controls: {
|
||
|
container: null,
|
||
|
worldTree: null
|
||
|
},
|
||
|
root: Composite.create({
|
||
|
label: 'Root'
|
||
|
}),
|
||
|
keyBindings: []
|
||
|
};
|
||
|
|
||
|
inspector = Common.extend(inspector, options);
|
||
|
Inspector.instance = inspector;
|
||
|
|
||
|
inspector.engine = engine;
|
||
|
inspector.render = render;
|
||
|
|
||
|
if (inspector.render) {
|
||
|
inspector.mouse = Mouse.create(inspector.render.canvas);
|
||
|
inspector.mouseConstraint = MouseConstraint.create(engine, { mouse: inspector.mouse });
|
||
|
} else {
|
||
|
inspector.mouse = {
|
||
|
position: {
|
||
|
x: 0,
|
||
|
y: 0
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
if (Serializer) {
|
||
|
inspector.serializer = Serializer.create();
|
||
|
localStorage.removeItem('pauseState');
|
||
|
}
|
||
|
|
||
|
$body = $('body');
|
||
|
|
||
|
Composite.add(inspector.root, engine.world);
|
||
|
engine.world.isModified = true;
|
||
|
engine.world.parent = null;
|
||
|
|
||
|
var styles = __webpack_require__(10);
|
||
|
ToolsCommon.injectStyles(styles, 'js-tree-style');
|
||
|
|
||
|
styles = __webpack_require__(11);
|
||
|
ToolsCommon.injectStyles(styles, 'matter-inspector-style');
|
||
|
|
||
|
inspector.keyBind = Common.chain(km, function (key) {
|
||
|
inspector.keyBindings.push(key);
|
||
|
});
|
||
|
|
||
|
_initControls(inspector);
|
||
|
_initEngineEvents(inspector);
|
||
|
_initTree(inspector);
|
||
|
_initKeybinds(inspector);
|
||
|
|
||
|
return inspector;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Destroys the inspector
|
||
|
* @function Gui.destroy
|
||
|
* @param {Inspector} inspector
|
||
|
*/
|
||
|
Inspector.destroy = function (inspector) {
|
||
|
inspector.controls.worldTree.data('jstree').destroy();
|
||
|
|
||
|
var inspectorElements = [].slice.call(document.body.querySelectorAll('.ins-container', '.vakata-context', '.jstree-marker'));
|
||
|
|
||
|
inspectorElements.forEach(ToolsCommon.domRemove);
|
||
|
|
||
|
inspector.keyBindings.forEach(function (key) {
|
||
|
km.unbind(key);
|
||
|
});
|
||
|
|
||
|
Events.off(inspector.engine, 'beforeUpdate', inspector.beforeEngineUpdate);
|
||
|
|
||
|
if (inspector.render) {
|
||
|
Events.off(inspector.render, 'afterRender', inspector.afterRender);
|
||
|
Events.off(inspector.mouseConstraint);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var _initControls = function _initControls(inspector) {
|
||
|
var controls = inspector.controls;
|
||
|
|
||
|
var $inspectorContainer = $('<div class="ins-container">'),
|
||
|
$buttonGroup = $('<div class="ins-control-group">'),
|
||
|
$searchBox = $('<input class="ins-search-box" type="search" placeholder="search">'),
|
||
|
$importButton = $('<button class="ins-import-button ins-button">Import</button>'),
|
||
|
$exportButton = $('<button class="ins-export-button ins-button">Export</button>'),
|
||
|
$pauseButton = $('<button class="ins-pause-button ins-button">Pause</button>'),
|
||
|
$helpButton = $('<button class="ins-help-button ins-button">Help</button>'),
|
||
|
$addCompositeButton = $('<button class="ins-add-button ins-button">+</button>');
|
||
|
|
||
|
if (Serializer) {
|
||
|
$buttonGroup.append($pauseButton, $importButton, $exportButton, $helpButton);
|
||
|
} else {
|
||
|
$buttonGroup.append($pauseButton, $helpButton);
|
||
|
}
|
||
|
|
||
|
$inspectorContainer.prepend($searchBox, $addCompositeButton);
|
||
|
$body.prepend($inspectorContainer);
|
||
|
|
||
|
controls.pauseButton = $pauseButton;
|
||
|
controls.importButton = $importButton;
|
||
|
controls.exportButton = $exportButton;
|
||
|
controls.helpButton = $helpButton;
|
||
|
controls.searchBox = $searchBox;
|
||
|
controls.container = $inspectorContainer;
|
||
|
controls.addCompositeButton = $addCompositeButton;
|
||
|
|
||
|
controls.pauseButton.click(function () {
|
||
|
_setPaused(inspector, !inspector.isPaused);
|
||
|
});
|
||
|
|
||
|
controls.exportButton.click(function () {
|
||
|
_exportFile(inspector);
|
||
|
});
|
||
|
|
||
|
controls.importButton.click(function () {
|
||
|
_importFile(inspector);
|
||
|
});
|
||
|
|
||
|
controls.helpButton.click(function () {
|
||
|
_showHelp(inspector);
|
||
|
});
|
||
|
|
||
|
controls.addCompositeButton.click(function () {
|
||
|
_addNewComposite(inspector);
|
||
|
});
|
||
|
|
||
|
var searchTimeout;
|
||
|
controls.searchBox.keyup(function () {
|
||
|
clearTimeout(searchTimeout);
|
||
|
searchTimeout = setTimeout(function () {
|
||
|
var value = controls.searchBox.val(),
|
||
|
worldTree = controls.worldTree.data('jstree');
|
||
|
worldTree.search(value);
|
||
|
}, 250);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
var _showHelp = function _showHelp() {
|
||
|
var help = "Matter Tools\n\n";
|
||
|
|
||
|
help += "Drag nodes in the tree to move them between composites.\n";
|
||
|
help += "Use browser's developer console to inspect selected objects.\n";
|
||
|
help += "Note: selections only render if renderer supports it.\n\n";
|
||
|
|
||
|
help += "[shift + space] pause or play simulation.\n";
|
||
|
help += "[right click] and drag on empty space to select a region.\n";
|
||
|
help += "[right click] and drag on an object to move it.\n";
|
||
|
help += "[right click + shift] and drag to move whole selection.\n\n";
|
||
|
|
||
|
help += "[ctrl-c] to copy selected world objects.\n";
|
||
|
help += "[ctrl-v] to paste copied world objects to mouse position.\n";
|
||
|
help += "[del] or [backspace] delete selected objects.\n\n";
|
||
|
|
||
|
help += "[shift + s] scale-xy selected objects with mouse or arrows.\n";
|
||
|
help += "[shift + s + d] scale-x selected objects with mouse or arrows.\n";
|
||
|
help += "[shift + s + f] scale-y selected objects with mouse or arrows.\n";
|
||
|
help += "[shift + r] rotate selected objects with mouse or arrows.\n\n";
|
||
|
|
||
|
help += "[shift + q] set selected objects as static (can't be undone).\n";
|
||
|
help += "[shift + i] import objects.\n";
|
||
|
help += "[shift + o] export selected objects.\n";
|
||
|
help += "[shift + h] toggle Matter.Gui.\n";
|
||
|
help += "[shift + y] toggle auto-hide.\n";
|
||
|
help += "[shift + r] toggle auto-rewind on play/pause.\n\n";
|
||
|
|
||
|
help += "[shift + j] show this help message.";
|
||
|
|
||
|
alert(help);
|
||
|
};
|
||
|
|
||
|
var _initKeybinds = function _initKeybinds(inspector) {
|
||
|
inspector.keyBind('shift+space', function () {
|
||
|
_setPaused(inspector, !inspector.isPaused);
|
||
|
});
|
||
|
|
||
|
if (inspector.serializer) {
|
||
|
inspector.keyBind('shift+o', function () {
|
||
|
_exportFile(inspector);
|
||
|
});
|
||
|
|
||
|
inspector.keyBind('shift+i', function () {
|
||
|
_importFile(inspector);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
inspector.keyBind('shift+j', function () {
|
||
|
_showHelp(inspector);
|
||
|
});
|
||
|
|
||
|
inspector.keyBind('shift+y', function () {
|
||
|
inspector.autoHide = !inspector.autoHide;
|
||
|
$body.toggleClass('ins-auto-hide gui-auto-hide', inspector.autoHide);
|
||
|
});
|
||
|
|
||
|
inspector.keyBind('shift+r', function () {
|
||
|
inspector.autoRewind = !inspector.autoRewind;
|
||
|
if (!inspector.autoRewind) localStorage.removeItem('pauseState');
|
||
|
});
|
||
|
|
||
|
inspector.keyBind('shift+q', function () {
|
||
|
for (var i = 0; i < inspector.selected.length; i++) {
|
||
|
var object = inspector.selected[i].data;
|
||
|
if (object.type === 'body' && !object.isStatic) Body.setStatic(object, true);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
inspector.keyBind('del', function () {
|
||
|
_deleteSelectedObjects(inspector);
|
||
|
});
|
||
|
|
||
|
inspector.keyBind('backspace', function () {
|
||
|
_deleteSelectedObjects(inspector);
|
||
|
});
|
||
|
|
||
|
if (inspector.serializer) {
|
||
|
inspector.keyBind('ctrl+c', function () {
|
||
|
_copySelectedObjects(inspector);
|
||
|
});
|
||
|
|
||
|
inspector.keyBind('ctrl+v', function () {
|
||
|
_pasteSelectedObjects(inspector);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
// prevent the backspace key from navigating back
|
||
|
// http://stackoverflow.com/questions/1495219/how-can-i-prevent-the-backspace-key-from-navigating-back
|
||
|
$(document).unbind('keydown').bind('keydown', function (event) {
|
||
|
var doPrevent = false;
|
||
|
if (event.keyCode === 8) {
|
||
|
var d = event.srcElement || event.target;
|
||
|
if (d.tagName.toUpperCase() === 'INPUT' && (d.type.toUpperCase() === 'TEXT' || d.type.toUpperCase() === 'PASSWORD' || d.type.toUpperCase() === 'FILE' || d.type.toUpperCase() === 'EMAIL' || d.type.toUpperCase() === 'SEARCH') || d.tagName.toUpperCase() === 'TEXTAREA') {
|
||
|
doPrevent = d.readOnly || d.disabled;
|
||
|
} else {
|
||
|
doPrevent = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (doPrevent) {
|
||
|
event.preventDefault();
|
||
|
}
|
||
|
});
|
||
|
};
|
||
|
|
||
|
var _initTree = function _initTree(inspector) {
|
||
|
var engine = inspector.engine,
|
||
|
controls = inspector.controls,
|
||
|
deferTimeout;
|
||
|
|
||
|
var worldTreeOptions = {
|
||
|
'core': {
|
||
|
'check_callback': true
|
||
|
},
|
||
|
'dnd': {
|
||
|
'copy': false
|
||
|
},
|
||
|
'search': {
|
||
|
'show_only_matches': true,
|
||
|
'fuzzy': false
|
||
|
},
|
||
|
'types': {
|
||
|
'#': {
|
||
|
'valid_children': []
|
||
|
},
|
||
|
'body': {
|
||
|
'valid_children': []
|
||
|
},
|
||
|
'constraint': {
|
||
|
'valid_children': []
|
||
|
},
|
||
|
'composite': {
|
||
|
'valid_children': []
|
||
|
},
|
||
|
'bodies': {
|
||
|
'valid_children': ['body']
|
||
|
},
|
||
|
'constraints': {
|
||
|
'valid_children': ['constraint']
|
||
|
},
|
||
|
'composites': {
|
||
|
'valid_children': ['composite']
|
||
|
}
|
||
|
},
|
||
|
'plugins': ['dnd', 'types', 'unique', 'search']
|
||
|
};
|
||
|
|
||
|
controls.worldTree = $('<div class="ins-world-tree">').jstree(worldTreeOptions);
|
||
|
controls.container.append(controls.worldTree);
|
||
|
|
||
|
controls.worldTree.on('changed.jstree', function (event, data) {
|
||
|
var selected = [],
|
||
|
worldTree = controls.worldTree.data('jstree');
|
||
|
|
||
|
if (data.action !== 'select_node') return;
|
||
|
|
||
|
// defer selection update until selection has finished propagating
|
||
|
clearTimeout(deferTimeout);
|
||
|
deferTimeout = setTimeout(function () {
|
||
|
data.selected = worldTree.get_selected();
|
||
|
|
||
|
for (var i = 0; i < data.selected.length; i++) {
|
||
|
var nodeId = data.selected[i],
|
||
|
objectType = nodeId.split('_')[0],
|
||
|
objectId = nodeId.split('_')[1],
|
||
|
worldObject = Composite.get(engine.world, objectId, objectType);
|
||
|
|
||
|
switch (objectType) {
|
||
|
case 'body':
|
||
|
case 'constraint':
|
||
|
case 'composite':
|
||
|
selected.push(worldObject);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
_setSelectedObjects(inspector, selected);
|
||
|
}, 1);
|
||
|
});
|
||
|
|
||
|
$(document).on('dnd_stop.vakata', function (event, data) {
|
||
|
var worldTree = controls.worldTree.data('jstree'),
|
||
|
nodes = data.data.nodes;
|
||
|
|
||
|
// handle drag and drop
|
||
|
// move items between composites
|
||
|
for (var i = 0; i < nodes.length; i++) {
|
||
|
var node = worldTree.get_node(nodes[i]),
|
||
|
parentNode = worldTree.get_node(worldTree.get_parent(nodes[i])),
|
||
|
prevCompositeId = node.data.compositeId,
|
||
|
newCompositeId = parentNode.data.compositeId;
|
||
|
|
||
|
if (prevCompositeId === newCompositeId) continue;
|
||
|
|
||
|
var nodeId = nodes[i],
|
||
|
objectType = nodeId.split('_')[0],
|
||
|
objectId = nodeId.split('_')[1],
|
||
|
worldObject = Composite.get(inspector.root, objectId, objectType),
|
||
|
prevComposite = Composite.get(inspector.root, prevCompositeId, 'composite'),
|
||
|
newComposite = Composite.get(inspector.root, newCompositeId, 'composite');
|
||
|
|
||
|
Composite.move(prevComposite, worldObject, newComposite);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
controls.worldTree.on('dblclick.jstree', function () {
|
||
|
var worldTree = controls.worldTree.data('jstree'),
|
||
|
selected = worldTree.get_selected();
|
||
|
|
||
|
// select all children of double clicked node
|
||
|
for (var i = 0; i < selected.length; i++) {
|
||
|
var nodeId = selected[i],
|
||
|
objectType = nodeId.split('_')[0];
|
||
|
|
||
|
switch (objectType) {
|
||
|
case 'composite':
|
||
|
case 'composites':
|
||
|
case 'bodies':
|
||
|
case 'constraints':
|
||
|
var children = worldTree.get_node(nodeId).children;
|
||
|
|
||
|
for (var j = 0; j < children.length; j++) {
|
||
|
worldTree.select_node(children[j], false);
|
||
|
}break;
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
};
|
||
|
|
||
|
var _addBodyClass = function _addBodyClass(inspector, classNames) {
|
||
|
// only apply changes to prevent DOM lag
|
||
|
if (inspector.bodyClass.indexOf(' ' + classNames) === -1) {
|
||
|
$body.addClass(classNames);
|
||
|
inspector.bodyClass = ' ' + $body.attr('class');
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var _removeBodyClass = function _removeBodyClass(inspector, classNames) {
|
||
|
// only apply changes to prevent DOM lag
|
||
|
var updateRequired = false,
|
||
|
classes = classNames.split(' ');
|
||
|
|
||
|
for (var i = 0; i < classes.length; i++) {
|
||
|
updateRequired = inspector.bodyClass.indexOf(' ' + classes[i]) !== -1;
|
||
|
if (updateRequired) break;
|
||
|
}
|
||
|
|
||
|
if (updateRequired) {
|
||
|
$body.removeClass(classNames);
|
||
|
inspector.bodyClass = ' ' + $body.attr('class');
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var _getMousePosition = function _getMousePosition(inspector) {
|
||
|
return Vector.add(inspector.mouse.position, inspector.offset);
|
||
|
};
|
||
|
|
||
|
var _initEngineEvents = function _initEngineEvents(inspector) {
|
||
|
var engine = inspector.engine,
|
||
|
mouse = inspector.mouse,
|
||
|
mousePosition = _getMousePosition(inspector),
|
||
|
controls = inspector.controls;
|
||
|
|
||
|
inspector.beforeEngineUpdate = function () {
|
||
|
// update mouse position reference
|
||
|
mousePosition = _getMousePosition(inspector);
|
||
|
|
||
|
var mouseDelta = mousePosition.x - inspector.mousePrevPosition.x,
|
||
|
keyDelta = km.isPressed('up') + km.isPressed('right') - km.isPressed('down') - km.isPressed('left'),
|
||
|
delta = mouseDelta + keyDelta;
|
||
|
|
||
|
// update interface when world changes
|
||
|
if (engine.world.isModified) {
|
||
|
var data = _generateCompositeTreeNode(inspector.root, null, true);
|
||
|
_updateTree(controls.worldTree.data('jstree'), data);
|
||
|
_setSelectedObjects(inspector, []);
|
||
|
}
|
||
|
|
||
|
// update region selection
|
||
|
if (inspector.selectStart !== null) {
|
||
|
inspector.selectEnd.x = mousePosition.x;
|
||
|
inspector.selectEnd.y = mousePosition.y;
|
||
|
Bounds.update(inspector.selectBounds, [inspector.selectStart, inspector.selectEnd]);
|
||
|
}
|
||
|
|
||
|
// rotate mode
|
||
|
if (km.shift && km.isPressed('r')) {
|
||
|
var rotateSpeed = 0.03,
|
||
|
angle = Math.max(-2, Math.min(2, delta)) * rotateSpeed;
|
||
|
|
||
|
_addBodyClass(inspector, 'ins-cursor-rotate');
|
||
|
_rotateSelectedObjects(inspector, angle);
|
||
|
} else {
|
||
|
_removeBodyClass(inspector, 'ins-cursor-rotate');
|
||
|
}
|
||
|
|
||
|
// scale mode
|
||
|
if (km.shift && km.isPressed('s')) {
|
||
|
var scaleSpeed = 0.02,
|
||
|
scale = 1 + Math.max(-2, Math.min(2, delta)) * scaleSpeed;
|
||
|
|
||
|
_addBodyClass(inspector, 'ins-cursor-scale');
|
||
|
|
||
|
var scaleX, scaleY;
|
||
|
|
||
|
if (km.isPressed('d')) {
|
||
|
scaleX = scale;
|
||
|
scaleY = 1;
|
||
|
} else if (km.isPressed('f')) {
|
||
|
scaleX = 1;
|
||
|
scaleY = scale;
|
||
|
} else {
|
||
|
scaleX = scaleY = scale;
|
||
|
}
|
||
|
|
||
|
_scaleSelectedObjects(inspector, scaleX, scaleY);
|
||
|
} else {
|
||
|
_removeBodyClass(inspector, 'ins-cursor-scale');
|
||
|
}
|
||
|
|
||
|
// translate mode
|
||
|
if (mouse.button === 2) {
|
||
|
_addBodyClass(inspector, 'ins-cursor-move');
|
||
|
_moveSelectedObjects(inspector, mousePosition.x, mousePosition.y);
|
||
|
} else {
|
||
|
_removeBodyClass(inspector, 'ins-cursor-move');
|
||
|
}
|
||
|
|
||
|
inspector.mousePrevPosition = Common.clone(mousePosition);
|
||
|
};
|
||
|
|
||
|
Events.on(inspector.engine, 'beforeUpdate', inspector.beforeEngineUpdate);
|
||
|
|
||
|
if (inspector.mouseConstraint) {
|
||
|
Events.on(inspector.mouseConstraint, 'mouseup', function () {
|
||
|
// select objects in region if making a region selection
|
||
|
if (inspector.selectStart !== null) {
|
||
|
var selected = Query.region(Composite.allBodies(engine.world), inspector.selectBounds);
|
||
|
_setSelectedObjects(inspector, selected);
|
||
|
}
|
||
|
|
||
|
// clear selection region
|
||
|
inspector.selectStart = null;
|
||
|
inspector.selectEnd = null;
|
||
|
Events.trigger(inspector, 'selectEnd');
|
||
|
});
|
||
|
|
||
|
Events.on(inspector.mouseConstraint, 'mousedown', function () {
|
||
|
var bodies = Composite.allBodies(engine.world),
|
||
|
constraints = Composite.allConstraints(engine.world),
|
||
|
isUnionSelect = km.shift || km.control,
|
||
|
worldTree = inspector.controls.worldTree.data('jstree'),
|
||
|
i;
|
||
|
|
||
|
if (mouse.button === 2) {
|
||
|
var hasSelected = false;
|
||
|
|
||
|
for (i = 0; i < bodies.length; i++) {
|
||
|
var body = bodies[i];
|
||
|
|
||
|
if (Bounds.contains(body.bounds, mousePosition) && Vertices.contains(body.vertices, mousePosition)) {
|
||
|
|
||
|
if (isUnionSelect) {
|
||
|
_addSelectedObject(inspector, body);
|
||
|
} else {
|
||
|
_setSelectedObjects(inspector, [body]);
|
||
|
}
|
||
|
|
||
|
hasSelected = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!hasSelected) {
|
||
|
for (i = 0; i < constraints.length; i++) {
|
||
|
var constraint = constraints[i],
|
||
|
bodyA = constraint.bodyA,
|
||
|
bodyB = constraint.bodyB;
|
||
|
|
||
|
if (constraint.label.indexOf('Mouse Constraint') !== -1) continue;
|
||
|
|
||
|
var pointAWorld = constraint.pointA,
|
||
|
pointBWorld = constraint.pointB;
|
||
|
|
||
|
if (bodyA) pointAWorld = Vector.add(bodyA.position, constraint.pointA);
|
||
|
if (bodyB) pointBWorld = Vector.add(bodyB.position, constraint.pointB);
|
||
|
|
||
|
if (!pointAWorld || !pointBWorld) continue;
|
||
|
|
||
|
var distA = Vector.magnitudeSquared(Vector.sub(mousePosition, pointAWorld)),
|
||
|
distB = Vector.magnitudeSquared(Vector.sub(mousePosition, pointBWorld));
|
||
|
|
||
|
if (distA < 100 || distB < 100) {
|
||
|
if (isUnionSelect) {
|
||
|
_addSelectedObject(inspector, constraint);
|
||
|
} else {
|
||
|
_setSelectedObjects(inspector, [constraint]);
|
||
|
}
|
||
|
|
||
|
hasSelected = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!hasSelected) {
|
||
|
worldTree.deselect_all(true);
|
||
|
_setSelectedObjects(inspector, []);
|
||
|
|
||
|
inspector.selectStart = Common.clone(mousePosition);
|
||
|
inspector.selectEnd = Common.clone(mousePosition);
|
||
|
Bounds.update(inspector.selectBounds, [inspector.selectStart, inspector.selectEnd]);
|
||
|
|
||
|
Events.trigger(inspector, 'selectStart');
|
||
|
} else {
|
||
|
inspector.selectStart = null;
|
||
|
inspector.selectEnd = null;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (mouse.button === 2 && inspector.selected.length > 0) {
|
||
|
_addBodyClass(inspector, 'ins-cursor-move');
|
||
|
|
||
|
_updateSelectedMouseDownOffset(inspector);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
if (inspector.render) {
|
||
|
inspector.afterRender = function () {
|
||
|
var renderController = inspector.render.controller,
|
||
|
context = inspector.render.context;
|
||
|
if (renderController.inspector) renderController.inspector(inspector, context);
|
||
|
};
|
||
|
|
||
|
Events.on(inspector.render, 'afterRender', inspector.afterRender);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var _deleteSelectedObjects = function _deleteSelectedObjects(inspector) {
|
||
|
var objects = [],
|
||
|
object,
|
||
|
worldTree = inspector.controls.worldTree.data('jstree'),
|
||
|
i;
|
||
|
|
||
|
// delete objects in world
|
||
|
for (i = 0; i < inspector.selected.length; i++) {
|
||
|
object = inspector.selected[i].data;
|
||
|
if (object !== inspector.engine.world) objects.push(object);
|
||
|
}
|
||
|
|
||
|
// also delete non-world composites (selected only in the UI tree)
|
||
|
var selectedNodes = worldTree.get_selected();
|
||
|
for (i = 0; i < selectedNodes.length; i++) {
|
||
|
var node = worldTree.get_node(selectedNodes[i]);
|
||
|
if (node.type === 'composite') {
|
||
|
node = worldTree.get_node(node.children[0]);
|
||
|
if (node.data) {
|
||
|
var compositeId = node.data.compositeId;
|
||
|
object = Composite.get(inspector.root, compositeId, 'composite');
|
||
|
if (object && object !== inspector.engine.world) {
|
||
|
objects.push(object);
|
||
|
worldTree.delete_node(selectedNodes[i]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Composite.remove(inspector.root, objects, true);
|
||
|
_setSelectedObjects(inspector, []);
|
||
|
};
|
||
|
|
||
|
var _copySelectedObjects = function _copySelectedObjects(inspector) {
|
||
|
inspector.clipboard.length = 0;
|
||
|
|
||
|
// put selected objects into clipboard
|
||
|
for (var i = 0; i < inspector.selected.length; i++) {
|
||
|
var object = inspector.selected[i].data;
|
||
|
|
||
|
if (object.type !== 'body') continue;
|
||
|
|
||
|
inspector.clipboard.push(object);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var _pasteSelectedObjects = function _pasteSelectedObjects(inspector) {
|
||
|
if (!inspector.serializer) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var objects = [],
|
||
|
worldTree = inspector.controls.worldTree.data('jstree');
|
||
|
|
||
|
// copy objects in world
|
||
|
for (var i = 0; i < inspector.clipboard.length; i++) {
|
||
|
var object = inspector.clipboard[i],
|
||
|
clone = Serializer.clone(inspector.serializer, object);
|
||
|
Body.translate(clone, { x: 50, y: 50 });
|
||
|
|
||
|
// add the clone to the same composite as original
|
||
|
var node = worldTree.get_node(object.type + '_' + object.id, false),
|
||
|
compositeId = node.data.compositeId,
|
||
|
composite = Composite.get(inspector.engine.world, compositeId, 'composite');
|
||
|
|
||
|
Composite.add(composite, clone);
|
||
|
|
||
|
objects.push(clone);
|
||
|
}
|
||
|
|
||
|
// select clones after waiting for tree to update
|
||
|
setTimeout(function () {
|
||
|
_setSelectedObjects(inspector, objects);
|
||
|
}, 200);
|
||
|
};
|
||
|
|
||
|
var _updateSelectedMouseDownOffset = function _updateSelectedMouseDownOffset(inspector) {
|
||
|
var selected = inspector.selected,
|
||
|
mousePosition = _getMousePosition(inspector),
|
||
|
item,
|
||
|
data;
|
||
|
|
||
|
for (var i = 0; i < selected.length; i++) {
|
||
|
item = selected[i];
|
||
|
data = item.data;
|
||
|
|
||
|
if (data.position) {
|
||
|
item.mousedownOffset = {
|
||
|
x: mousePosition.x - data.position.x,
|
||
|
y: mousePosition.y - data.position.y
|
||
|
};
|
||
|
} else if (data.pointA && !data.bodyA) {
|
||
|
item.mousedownOffset = {
|
||
|
x: mousePosition.x - data.pointA.x,
|
||
|
y: mousePosition.y - data.pointA.y
|
||
|
};
|
||
|
} else if (data.pointB && !data.bodyB) {
|
||
|
item.mousedownOffset = {
|
||
|
x: mousePosition.x - data.pointB.x,
|
||
|
y: mousePosition.y - data.pointB.y
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var _moveSelectedObjects = function _moveSelectedObjects(inspector, x, y) {
|
||
|
var selected = inspector.selected,
|
||
|
item,
|
||
|
data;
|
||
|
|
||
|
for (var i = 0; i < selected.length; i++) {
|
||
|
item = selected[i];
|
||
|
data = item.data;
|
||
|
|
||
|
if (!item.mousedownOffset) continue;
|
||
|
|
||
|
switch (data.type) {
|
||
|
|
||
|
case 'body':
|
||
|
var delta = {
|
||
|
x: x - data.position.x - item.mousedownOffset.x,
|
||
|
y: y - data.position.y - item.mousedownOffset.y
|
||
|
};
|
||
|
|
||
|
Body.translate(data, delta);
|
||
|
data.positionPrev.x = data.position.x;
|
||
|
data.positionPrev.y = data.position.y;
|
||
|
|
||
|
break;
|
||
|
|
||
|
case 'constraint':
|
||
|
var point = data.pointA;
|
||
|
if (data.bodyA) point = data.pointB;
|
||
|
|
||
|
point.x = x - item.mousedownOffset.x;
|
||
|
point.y = y - item.mousedownOffset.y;
|
||
|
|
||
|
var initialPointA = data.bodyA ? Vector.add(data.bodyA.position, data.pointA) : data.pointA,
|
||
|
initialPointB = data.bodyB ? Vector.add(data.bodyB.position, data.pointB) : data.pointB;
|
||
|
|
||
|
data.length = Vector.magnitude(Vector.sub(initialPointA, initialPointB));
|
||
|
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var _scaleSelectedObjects = function _scaleSelectedObjects(inspector, scaleX, scaleY) {
|
||
|
var selected = inspector.selected,
|
||
|
item,
|
||
|
data;
|
||
|
|
||
|
for (var i = 0; i < selected.length; i++) {
|
||
|
item = selected[i];
|
||
|
data = item.data;
|
||
|
|
||
|
switch (data.type) {
|
||
|
case 'body':
|
||
|
Body.scale(data, scaleX, scaleY, data.position);
|
||
|
|
||
|
if (data.circleRadius) data.circleRadius *= scaleX;
|
||
|
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var _rotateSelectedObjects = function _rotateSelectedObjects(inspector, angle) {
|
||
|
var selected = inspector.selected,
|
||
|
item,
|
||
|
data;
|
||
|
|
||
|
for (var i = 0; i < selected.length; i++) {
|
||
|
item = selected[i];
|
||
|
data = item.data;
|
||
|
|
||
|
switch (data.type) {
|
||
|
case 'body':
|
||
|
Body.rotate(data, angle);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var _setPaused = function _setPaused(inspector, isPaused) {
|
||
|
if (isPaused) {
|
||
|
if (inspector.autoRewind && inspector.serializer) {
|
||
|
_setSelectedObjects(inspector, []);
|
||
|
Serializer.loadState(inspector.serializer, inspector.engine, 'pauseState');
|
||
|
}
|
||
|
|
||
|
inspector.engine.timing.timeScale = 0;
|
||
|
inspector.isPaused = true;
|
||
|
inspector.controls.pauseButton.text('Play');
|
||
|
|
||
|
Events.trigger(inspector, 'paused');
|
||
|
} else {
|
||
|
if (inspector.autoRewind && inspector.serializer) {
|
||
|
Serializer.saveState(inspector.serializer, inspector.engine, 'pauseState');
|
||
|
}
|
||
|
|
||
|
inspector.engine.timing.timeScale = 1;
|
||
|
inspector.isPaused = false;
|
||
|
inspector.controls.pauseButton.text('Pause');
|
||
|
|
||
|
Events.trigger(inspector, 'play');
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var _setSelectedObjects = function _setSelectedObjects(inspector, objects) {
|
||
|
var worldTree = inspector.controls.worldTree.data('jstree'),
|
||
|
data,
|
||
|
i;
|
||
|
|
||
|
for (i = 0; i < inspector.selected.length; i++) {
|
||
|
data = inspector.selected[i].data;
|
||
|
worldTree.deselect_node(data.type + '_' + data.id, true);
|
||
|
}
|
||
|
|
||
|
inspector.selected = [];
|
||
|
|
||
|
if (objects.length > 0) {
|
||
|
console.clear();
|
||
|
}
|
||
|
|
||
|
for (i = 0; i < objects.length; i++) {
|
||
|
data = objects[i];
|
||
|
|
||
|
if (data) {
|
||
|
// add the object to the selection
|
||
|
_addSelectedObject(inspector, data);
|
||
|
|
||
|
// log selected objects to console for property inspection
|
||
|
if (i < 5) {
|
||
|
console.log(data.label + ' ' + data.id + ': %O', data);
|
||
|
} else if (i === 6) {
|
||
|
console.warn('Omitted inspecting ' + (objects.length - 5) + ' more objects');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var _addSelectedObject = function _addSelectedObject(inspector, object) {
|
||
|
if (!object) return;
|
||
|
|
||
|
var worldTree = inspector.controls.worldTree.data('jstree');
|
||
|
inspector.selected.push({ data: object });
|
||
|
worldTree.select_node(object.type + '_' + object.id, true);
|
||
|
};
|
||
|
|
||
|
var _updateTree = function _updateTree(tree, data) {
|
||
|
data[0].state = data[0].state || { opened: true };
|
||
|
tree.settings.core.data = data;
|
||
|
tree.refresh(-1);
|
||
|
};
|
||
|
|
||
|
var _generateCompositeTreeNode = function _generateCompositeTreeNode(composite, compositeId, isRoot) {
|
||
|
var children = [],
|
||
|
node = {
|
||
|
id: 'composite_' + composite.id,
|
||
|
data: {
|
||
|
compositeId: compositeId
|
||
|
},
|
||
|
type: 'composite',
|
||
|
text: (composite.label ? composite.label : 'Composite') + ' ' + composite.id,
|
||
|
'li_attr': {
|
||
|
'class': 'jstree-node-type-composite'
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var childNode = _generateCompositesTreeNode(composite.composites, composite.id);
|
||
|
childNode.id = 'composites_' + composite.id;
|
||
|
children.push(childNode);
|
||
|
|
||
|
if (isRoot) return childNode.children;
|
||
|
|
||
|
childNode = _generateBodiesTreeNode(composite.bodies, composite.id);
|
||
|
childNode.id = 'bodies_' + composite.id;
|
||
|
children.push(childNode);
|
||
|
|
||
|
childNode = _generateConstraintsTreeNode(composite.constraints, composite.id);
|
||
|
childNode.id = 'constraints_' + composite.id;
|
||
|
children.push(childNode);
|
||
|
|
||
|
node.children = children;
|
||
|
|
||
|
return node;
|
||
|
};
|
||
|
|
||
|
var _generateCompositesTreeNode = function _generateCompositesTreeNode(composites, compositeId) {
|
||
|
var node = {
|
||
|
type: 'composites',
|
||
|
text: 'Composites',
|
||
|
data: {
|
||
|
compositeId: compositeId
|
||
|
},
|
||
|
children: [],
|
||
|
'li_attr': {
|
||
|
'class': 'jstree-node-type-composites'
|
||
|
}
|
||
|
};
|
||
|
|
||
|
for (var i = 0; i < composites.length; i++) {
|
||
|
var composite = composites[i];
|
||
|
node.children.push(_generateCompositeTreeNode(composite, compositeId));
|
||
|
}
|
||
|
|
||
|
return node;
|
||
|
};
|
||
|
|
||
|
var _generateBodiesTreeNode = function _generateBodiesTreeNode(bodies, compositeId) {
|
||
|
var node = {
|
||
|
type: 'bodies',
|
||
|
text: 'Bodies',
|
||
|
data: {
|
||
|
compositeId: compositeId
|
||
|
},
|
||
|
children: [],
|
||
|
'li_attr': {
|
||
|
'class': 'jstree-node-type-bodies'
|
||
|
}
|
||
|
};
|
||
|
|
||
|
for (var i = 0; i < bodies.length; i++) {
|
||
|
var body = bodies[i];
|
||
|
node.children.push({
|
||
|
type: 'body',
|
||
|
id: 'body_' + body.id,
|
||
|
data: {
|
||
|
compositeId: compositeId
|
||
|
},
|
||
|
text: (body.label ? body.label : 'Body') + ' ' + body.id,
|
||
|
'li_attr': {
|
||
|
'class': 'jstree-node-type-body'
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
return node;
|
||
|
};
|
||
|
|
||
|
var _generateConstraintsTreeNode = function _generateConstraintsTreeNode(constraints, compositeId) {
|
||
|
var node = {
|
||
|
type: 'constraints',
|
||
|
text: 'Constraints',
|
||
|
data: {
|
||
|
compositeId: compositeId
|
||
|
},
|
||
|
children: [],
|
||
|
'li_attr': {
|
||
|
'class': 'jstree-node-type-constraints'
|
||
|
}
|
||
|
};
|
||
|
|
||
|
for (var i = 0; i < constraints.length; i++) {
|
||
|
var constraint = constraints[i];
|
||
|
node.children.push({
|
||
|
type: 'constraint',
|
||
|
id: 'constraint_' + constraint.id,
|
||
|
data: {
|
||
|
compositeId: compositeId
|
||
|
},
|
||
|
text: (constraint.label ? constraint.label : 'Constraint') + ' ' + constraint.id,
|
||
|
'li_attr': {
|
||
|
'class': 'jstree-node-type-constraint'
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
return node;
|
||
|
};
|
||
|
|
||
|
var _addNewComposite = function _addNewComposite(inspector) {
|
||
|
var newComposite = Composite.create();
|
||
|
|
||
|
Composite.add(inspector.root, newComposite);
|
||
|
|
||
|
// move new composite to the start so that it appears top of tree
|
||
|
inspector.root.composites.splice(inspector.root.composites.length - 1, 1);
|
||
|
inspector.root.composites.unshift(newComposite);
|
||
|
|
||
|
Composite.setModified(inspector.engine.world, true, true, false);
|
||
|
};
|
||
|
|
||
|
var _exportFile = function _exportFile(inspector) {
|
||
|
if (!inspector.serializer) {
|
||
|
alert('No serializer.');
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (inspector.selected.length === 0) {
|
||
|
alert('No objects were selected, so export could not be created. Can only export objects that are in the World composite.');
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var fileName = 'export-objects',
|
||
|
exportComposite = Composite.create({
|
||
|
label: 'Exported Objects'
|
||
|
});
|
||
|
|
||
|
// add everything else, must be in top-down order
|
||
|
for (var i = 0; i < inspector.selected.length; i++) {
|
||
|
var object = inspector.selected[i].data;
|
||
|
|
||
|
// skip if it's already in the composite tree
|
||
|
// this means orphans will be added in the root
|
||
|
if (Composite.get(exportComposite, object.id, object.type)) continue;
|
||
|
|
||
|
Composite.add(exportComposite, object);
|
||
|
|
||
|
// better filename for small exports
|
||
|
if (inspector.selected.length === 1) fileName = 'export-' + object.label + '-' + object.id;
|
||
|
}
|
||
|
|
||
|
// santise filename
|
||
|
fileName = fileName.toLowerCase().replace(/[^\w\-]/g, '') + '.json';
|
||
|
|
||
|
// serialise
|
||
|
var json = Serializer.serialise(inspector.serializer, exportComposite, inspector.exportIndent);
|
||
|
|
||
|
// launch export download
|
||
|
var _isWebkit = 'WebkitAppearance' in document.documentElement.style;
|
||
|
|
||
|
if (_isWebkit) {
|
||
|
var blob = new Blob([json], { type: 'application/json' }),
|
||
|
anchor = document.createElement('a');
|
||
|
anchor.download = fileName;
|
||
|
anchor.href = (window.webkitURL || window.URL).createObjectURL(blob);
|
||
|
anchor.dataset.downloadurl = ['application/json', anchor.download, anchor.href].join(':');
|
||
|
anchor.click();
|
||
|
} else {
|
||
|
window.open('data:application/json;charset=utf-8,' + escape(json));
|
||
|
}
|
||
|
|
||
|
Events.trigger(inspector, 'export');
|
||
|
};
|
||
|
|
||
|
var _importFile = function _importFile(inspector) {
|
||
|
if (!inspector.serializer) {
|
||
|
alert('No serializer.');
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var element = document.createElement('div'),
|
||
|
fileInput;
|
||
|
|
||
|
element.innerHTML = '<input type="file">';
|
||
|
fileInput = element.firstChild;
|
||
|
|
||
|
fileInput.addEventListener('change', function () {
|
||
|
var file = fileInput.files[0];
|
||
|
|
||
|
if (file.name.match(/\.(txt|json)$/)) {
|
||
|
var reader = new FileReader();
|
||
|
|
||
|
reader.onload = function () {
|
||
|
var importedComposite = inspector.serializer.parse(reader.result);
|
||
|
|
||
|
if (importedComposite) {
|
||
|
importedComposite.label = 'Imported Objects';
|
||
|
|
||
|
Composite.rebase(importedComposite);
|
||
|
Composite.add(inspector.root, importedComposite);
|
||
|
|
||
|
// move imported composite to the start so that it appears top of tree
|
||
|
inspector.root.composites.splice(inspector.root.composites.length - 1, 1);
|
||
|
inspector.root.composites.unshift(importedComposite);
|
||
|
|
||
|
var worldTree = inspector.controls.worldTree.data('jstree'),
|
||
|
data = _generateCompositeTreeNode(inspector.root, null, true);
|
||
|
_updateTree(worldTree, data);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
reader.readAsText(file);
|
||
|
} else {
|
||
|
alert('File not supported, .json or .txt JSON files only');
|
||
|
}
|
||
|
});
|
||
|
|
||
|
fileInput.click();
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
*
|
||
|
* Events Documentation
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Fired after the inspector's import button pressed
|
||
|
*
|
||
|
* @event export
|
||
|
* @param {} event An event object
|
||
|
* @param {} event.source The source object of the event
|
||
|
* @param {} event.name The name of the event
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Fired after the inspector's export button pressed
|
||
|
*
|
||
|
* @event import
|
||
|
* @param {} event An event object
|
||
|
* @param {} event.source The source object of the event
|
||
|
* @param {} event.name The name of the event
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Fired after the inspector user starts making a selection
|
||
|
*
|
||
|
* @event selectStart
|
||
|
* @param {} event An event object
|
||
|
* @param {} event.source The source object of the event
|
||
|
* @param {} event.name The name of the event
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Fired after the inspector user ends making a selection
|
||
|
*
|
||
|
* @event selectEnd
|
||
|
* @param {} event An event object
|
||
|
* @param {} event.source The source object of the event
|
||
|
* @param {} event.name The name of the event
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Fired after the inspector is paused
|
||
|
*
|
||
|
* @event pause
|
||
|
* @param {} event An event object
|
||
|
* @param {} event.source The source object of the event
|
||
|
* @param {} event.name The name of the event
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Fired after the inspector is played
|
||
|
*
|
||
|
* @event play
|
||
|
* @param {} event An event object
|
||
|
* @param {} event.source The source object of the event
|
||
|
* @param {} event.name The name of the event
|
||
|
*/
|
||
|
|
||
|
/*** EXPORTS FROM exports-loader ***/
|
||
|
|
||
|
/***/ },
|
||
|
/* 1 */
|
||
|
/***/ function(module, exports) {
|
||
|
|
||
|
module.exports = __WEBPACK_EXTERNAL_MODULE_1__;
|
||
|
|
||
|
/***/ },
|
||
|
/* 2 */
|
||
|
/***/ function(module, exports) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
/**
|
||
|
* @class Common
|
||
|
*/
|
||
|
|
||
|
var Common = module.exports = {};
|
||
|
|
||
|
Common.injectStyles = function (styles, id) {
|
||
|
if (document.getElementById(id)) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var root = document.createElement('div');
|
||
|
root.innerHTML = '<style id="' + id + '" type="text/css">' + styles + '</style>';
|
||
|
|
||
|
var lastStyle = document.head.querySelector('style:last-child');
|
||
|
Common.domInsertBefore(root.firstElementChild, lastStyle);
|
||
|
};
|
||
|
|
||
|
Common.injectScript = function (url, id, callback) {
|
||
|
if (document.getElementById(id)) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var script = document.createElement('script');
|
||
|
script.id = id;
|
||
|
script.src = url;
|
||
|
script.onload = callback;
|
||
|
|
||
|
document.body.appendChild(script);
|
||
|
};
|
||
|
|
||
|
Common.domRemove = function (element) {
|
||
|
return element.parentElement.removeChild(element);
|
||
|
};
|
||
|
|
||
|
Common.domInsertBefore = function (element, before) {
|
||
|
return before.parentNode.insertBefore(element, before.previousElementSibling);
|
||
|
};
|
||
|
|
||
|
/*** EXPORTS FROM exports-loader ***/
|
||
|
|
||
|
/***/ },
|
||
|
/* 3 */,
|
||
|
/* 4 */,
|
||
|
/* 5 */
|
||
|
/***/ function(module, exports) {
|
||
|
|
||
|
module.exports = __WEBPACK_EXTERNAL_MODULE_5__;
|
||
|
|
||
|
/***/ },
|
||
|
/* 6 */,
|
||
|
/* 7 */
|
||
|
/***/ function(module, exports) {
|
||
|
|
||
|
module.exports = __WEBPACK_EXTERNAL_MODULE_7__;
|
||
|
|
||
|
/***/ },
|
||
|
/* 8 */
|
||
|
/***/ function(module, exports, __webpack_require__) {
|
||
|
|
||
|
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! jsTree - v3.3.3 - 2016-10-31 - (MIT) */
|
||
|
!function(a){"use strict"; true?!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(7)], __WEBPACK_AMD_DEFINE_FACTORY__ = (a), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)):"undefined"!=typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a,b){"use strict";if(!a.jstree){var c=0,d=!1,e=!1,f=!1,g=[],h=a("script:last").attr("src"),i=window.document;a.jstree={version:"3.3.3",defaults:{plugins:[]},plugins:{},path:h&&-1!==h.indexOf("/")?h.replace(/\/[^\/]+$/,""):"",idregex:/[\\:&!^|()\[\]<>@*'+~#";.,=\- \/${}%?`]/g,root:"#"},a.jstree.create=function(b,d){var e=new a.jstree.core(++c),f=d;return d=a.extend(!0,{},a.jstree.defaults,d),f&&f.plugins&&(d.plugins=f.plugins),a.each(d.plugins,function(a,b){"core"!==a&&(e=e.plugin(b,d[b]))}),a(b).data("jstree",e),e.init(b,d),e},a.jstree.destroy=function(){a(".jstree:jstree").jstree("destroy"),a(i).off(".jstree")},a.jstree.core=function(a){this._id=a,this._cnt=0,this._wrk=null,this._data={core:{themes:{name:!1,dots:!1,icons:!1,ellipsis:!1},selected:[],last_error:{},working:!1,worker_queue:[],focused:null}}},a.jstree.reference=function(b){var c=null,d=null;if(!b||!b.id||b.tagName&&b.nodeType||(b=b.id),!d||!d.length)try{d=a(b)}catch(e){}if(!d||!d.length)try{d=a("#"+b.replace(a.jstree.idregex,"\\$&"))}catch(e){}return d&&d.length&&(d=d.closest(".jstree")).length&&(d=d.data("jstree"))?c=d:a(".jstree").each(function(){var d=a(this).data("jstree");return d&&d._model.data[b]?(c=d,!1):void 0}),c},a.fn.jstree=function(c){var d="string"==typeof c,e=Array.prototype.slice.call(arguments,1),f=null;return c!==!0||this.length?(this.each(function(){var g=a.jstree.reference(this),h=d&&g?g[c]:null;return f=d&&h?h.apply(g,e):null,g||d||c!==b&&!a.isPlainObject(c)||a.jstree.create(this,c),(g&&!d||c===!0)&&(f=g||!1),null!==f&&f!==b?!1:void 0}),null!==f&&f!==b?f:this):!1},a.expr.pseudos.jstree=a.expr.createPseudo(function(c){return function(c){return a(c).hasClass("jstree")&&a(c).data("jstree")!==b}}),a.jstree.defaults.core={data:!1,strings:!1,check_callback:!1,error:a.noop,animation:200,multiple:!0,themes:{name:!1,url:!1,dir:!1,dots:!0,icons:!0,ellipsis:!1,stripes:!1,variant:!1,responsive:!1},expand_selected_onload:!0,worker:!0,force_text:!1,dblclick_toggle:!0},a.jstree.core.prototype={plugin:function(b,c){var d=a.jstree.plugins[b];return d?(this._data[b]={},d.prototype=this,new d(c,this)):this},init:function(b,c){this._model={data:{},changed:[],force_full_redraw:!1,redraw_timeout:!1,default_state:{loaded:!0,opened:!1,selected:!1,disabled:!1}},this._model.data[a.jstree.root]={id:a.jstree.root,parent:null,parents:[],children:[],children_d:[],state:{loaded:!1}},this.element=a(b).addClass("jstree jstree-"+this._id),this.settings=c,this._data.core.ready=!1,this._data.core.loaded=!1,this._data.core.rtl="rtl"===this.element.css("direction"),this.element[this._data.core.rtl?"addClass":"removeClass"]("jstree-rtl"),this.element.attr("role","tree"),this.settings.core.multiple&&this.element.attr("aria-multiselectable",!0),this.element.attr("tabindex")||this.element.attr("tabindex","0"),this.bind(),this.trigger("init"),this._data.core.original_container_html=this.element.find(" > ul > li").clone(!0),this._data.core.original_container_html.find("li").addBack().contents().filter(function(){return 3===this.nodeType&&(!this.nodeValue||/^\s+$/.test(this.nodeValue))}).remove(),this.element.html("<ul class='jstree-container-ul jstree-children' role='group'><li id='j"+this._id+"_loading' class='jstree-initial-node jstree-loading jstree-leaf jstree-last' role='tree-item'><i class='jstree-icon jstree-ocl'></i><a class='jstree-anchor' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>"+this.get_string("Loading ...")+"</a></li></ul>"),this.element.attr("aria-activedescendant","j"+this._id+"_loading"),this._data.core.li_height=this.get_conta
|
||
|
if(!f)return!1;if(f.id===a.jstree.root)return this.redraw(!0);if(c=c||0===f.children.length,b=i.querySelector?this.element[0].querySelector("#"+(-1!=="0123456789".indexOf(f.id[0])?"\\3"+f.id[0]+" "+f.id.substr(1).replace(a.jstree.idregex,"\\$&"):f.id.replace(a.jstree.idregex,"\\$&"))):i.getElementById(f.id))b=a(b),d||(g=b.parent().parent()[0],g===this.element[0]&&(g=null),h=b.index()),c||!f.children.length||b.children(".jstree-children").length||(c=!0),c||(j=b.children(".jstree-children")[0]),q=b.children(".jstree-anchor")[0]===i.activeElement,b.remove();else if(c=!0,!d){if(g=f.parent!==a.jstree.root?a("#"+f.parent.replace(a.jstree.idregex,"\\$&"),this.element)[0]:null,!(null===g||g&&p[f.parent].state.opened))return!1;h=a.inArray(f.id,null===g?p[a.jstree.root].children:p[f.parent].children)}b=this._data.core.node.cloneNode(!0),n="jstree-node ";for(k in f.li_attr)if(f.li_attr.hasOwnProperty(k)){if("id"===k)continue;"class"!==k?b.setAttribute(k,f.li_attr[k]):n+=f.li_attr[k]}for(f.a_attr.id||(f.a_attr.id=f.id+"_anchor"),b.setAttribute("aria-selected",!!f.state.selected),b.setAttribute("aria-level",f.parents.length),b.setAttribute("aria-labelledby",f.a_attr.id),f.state.disabled&&b.setAttribute("aria-disabled",!0),k=0,l=f.children.length;l>k;k++)if(!p[f.children[k]].state.hidden){v=!0;break}if(null!==f.parent&&p[f.parent]&&!f.state.hidden&&(k=a.inArray(f.id,p[f.parent].children),w=f.id,-1!==k))for(k++,l=p[f.parent].children.length;l>k;k++)if(p[p[f.parent].children[k]].state.hidden||(w=p[f.parent].children[k]),w!==f.id)break;f.state.hidden&&(n+=" jstree-hidden"),f.state.loaded&&!v?n+=" jstree-leaf":(n+=f.state.opened&&f.state.loaded?" jstree-open":" jstree-closed",b.setAttribute("aria-expanded",f.state.opened&&f.state.loaded)),w===f.id&&(n+=" jstree-last"),b.id=f.id,b.className=n,n=(f.state.selected?" jstree-clicked":"")+(f.state.disabled?" jstree-disabled":"");for(l in f.a_attr)if(f.a_attr.hasOwnProperty(l)){if("href"===l&&"#"===f.a_attr[l])continue;"class"!==l?b.childNodes[1].setAttribute(l,f.a_attr[l]):n+=" "+f.a_attr[l]}if(n.length&&(b.childNodes[1].className="jstree-anchor "+n),(f.icon&&f.icon!==!0||f.icon===!1)&&(f.icon===!1?b.childNodes[1].childNodes[0].className+=" jstree-themeicon-hidden":-1===f.icon.indexOf("/")&&-1===f.icon.indexOf(".")?b.childNodes[1].childNodes[0].className+=" "+f.icon+" jstree-themeicon-custom":(b.childNodes[1].childNodes[0].style.backgroundImage='url("'+f.icon+'")',b.childNodes[1].childNodes[0].style.backgroundPosition="center center",b.childNodes[1].childNodes[0].style.backgroundSize="auto",b.childNodes[1].childNodes[0].className+=" jstree-themeicon-custom")),this.settings.core.force_text?b.childNodes[1].appendChild(o.createTextNode(f.text)):b.childNodes[1].innerHTML+=f.text,c&&f.children.length&&(f.state.opened||e)&&f.state.loaded){for(m=o.createElement("UL"),m.setAttribute("role","group"),m.className="jstree-children",k=0,l=f.children.length;l>k;k++)m.appendChild(this.redraw_node(f.children[k],c,!0));b.appendChild(m)}if(j&&b.appendChild(j),!d){for(g||(g=this.element[0]),k=0,l=g.childNodes.length;l>k;k++)if(g.childNodes[k]&&g.childNodes[k].className&&-1!==g.childNodes[k].className.indexOf("jstree-children")){s=g.childNodes[k];break}s||(s=o.createElement("UL"),s.setAttribute("role","group"),s.className="jstree-children",g.appendChild(s)),g=s,h<g.childNodes.length?g.insertBefore(b,g.childNodes[h]):g.appendChild(b),q&&(t=this.element[0].scrollTop,u=this.element[0].scrollLeft,b.childNodes[1].focus(),this.element[0].scrollTop=t,this.element[0].scrollLeft=u)}return f.state.opened&&!f.state.loaded&&(f.state.opened=!1,setTimeout(a.proxy(function(){this.open_node(f.id,!1,0)},this),0)),b},open_node:function(c,d,e){var f,g,h,i;if(a.isArray(c)){for(c=c.slice(),f=0,g=c.length;g>f;f++)this.open_node(c[f],d,e);return!0}return c=this.get_node(c),c&&c.id!==a.jstree.root?(e=e===b?this.settings.core.animation:e,this.is_closed(c)?this.is_loaded(c)?(h=this.get_node(c,!0),i=this,h.length&&(e&&h.children(".jstree-children").length&&h.children(".jstree-children").stop(!0,!0),c.children.length&&!this._firstChild(h.c
|
||
|
fontWeight:g.css("fontWeight")||"",fontStyle:g.css("fontStyle")||"",fontStretch:g.css("fontStretch")||"",fontVariant:g.css("fontVariant")||"",letterSpacing:g.css("letterSpacing")||"",wordSpacing:g.css("wordSpacing")||""},h.attr("class",g.attr("class")).append(g.contents().clone()).append(l),g.replaceWith(h),k.css(m),l.css(m).width(Math.min(k.text("pW"+l[0].value).width(),f))[0].select(),void a(i).one("mousedown.jstree touchstart.jstree dnd_start.vakata",function(b){l&&b.target!==l&&a(l).blur()})):!1},set_theme:function(b,c){if(!b)return!1;if(c===!0){var d=this.settings.core.themes.dir;d||(d=a.jstree.path+"/themes"),c=d+"/"+b+"/style.css"}c&&-1===a.inArray(c,g)&&(a("head").append('<link rel="stylesheet" href="'+c+'" type="text/css" />'),g.push(c)),this._data.core.themes.name&&this.element.removeClass("jstree-"+this._data.core.themes.name),this._data.core.themes.name=b,this.element.addClass("jstree-"+b),this.element[this.settings.core.themes.responsive?"addClass":"removeClass"]("jstree-"+b+"-responsive"),this.trigger("set_theme",{theme:b})},get_theme:function(){return this._data.core.themes.name},set_theme_variant:function(a){this._data.core.themes.variant&&this.element.removeClass("jstree-"+this._data.core.themes.name+"-"+this._data.core.themes.variant),this._data.core.themes.variant=a,a&&this.element.addClass("jstree-"+this._data.core.themes.name+"-"+this._data.core.themes.variant)},get_theme_variant:function(){return this._data.core.themes.variant},show_stripes:function(){this._data.core.themes.stripes=!0,this.get_container_ul().addClass("jstree-striped"),this.trigger("show_stripes")},hide_stripes:function(){this._data.core.themes.stripes=!1,this.get_container_ul().removeClass("jstree-striped"),this.trigger("hide_stripes")},toggle_stripes:function(){this._data.core.themes.stripes?this.hide_stripes():this.show_stripes()},show_dots:function(){this._data.core.themes.dots=!0,this.get_container_ul().removeClass("jstree-no-dots"),this.trigger("show_dots")},hide_dots:function(){this._data.core.themes.dots=!1,this.get_container_ul().addClass("jstree-no-dots"),this.trigger("hide_dots")},toggle_dots:function(){this._data.core.themes.dots?this.hide_dots():this.show_dots()},show_icons:function(){this._data.core.themes.icons=!0,this.get_container_ul().removeClass("jstree-no-icons"),this.trigger("show_icons")},hide_icons:function(){this._data.core.themes.icons=!1,this.get_container_ul().addClass("jstree-no-icons"),this.trigger("hide_icons")},toggle_icons:function(){this._data.core.themes.icons?this.hide_icons():this.show_icons()},show_ellipsis:function(){this._data.core.themes.ellipsis=!0,this.get_container_ul().addClass("jstree-ellipsis"),this.trigger("show_ellipsis")},hide_ellipsis:function(){this._data.core.themes.ellipsis=!1,this.get_container_ul().removeClass("jstree-ellipsis"),this.trigger("hide_ellipsis")},toggle_ellipsis:function(){this._data.core.themes.ellipsis?this.hide_ellipsis():this.show_ellipsis()},set_icon:function(c,d){var e,f,g,h;if(a.isArray(c)){for(c=c.slice(),e=0,f=c.length;f>e;e++)this.set_icon(c[e],d);return!0}return c=this.get_node(c),c&&c.id!==a.jstree.root?(h=c.icon,c.icon=d===!0||null===d||d===b||""===d?!0:d,g=this.get_node(c,!0).children(".jstree-anchor").children(".jstree-themeicon"),d===!1?this.hide_icon(c):d===!0||null===d||d===b||""===d?(g.removeClass("jstree-themeicon-custom "+h).css("background","").removeAttr("rel"),h===!1&&this.show_icon(c)):-1===d.indexOf("/")&&-1===d.indexOf(".")?(g.removeClass(h).css("background",""),g.addClass(d+" jstree-themeicon-custom").attr("rel",d),h===!1&&this.show_icon(c)):(g.removeClass(h).css("background",""),g.addClass("jstree-themeicon-custom").css("background","url('"+d+"') center center no-repeat").attr("rel",d),h===!1&&this.show_icon(c)),!0):!1},get_icon:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.icon:!1},hide_icon:function(b){var c,d;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.hide_icon(b[c]);return!0}return b=this.get_node(b),b&&b!==a.jstree.root?(b.icon=!1,this.get_node(b,!0).children(".jstree-anchor").children(".jstree-t
|
||
|
d.length||(d=c.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").last()),d.addClass("vakata-context-hover").children("a").focus(),b.stopImmediatePropagation(),b.preventDefault());break;case 39:c.is_visible&&(c.element.find(".vakata-context-hover").last().children("ul").show().children("li:not(.vakata-context-separator)").removeClass("vakata-context-hover").first().addClass("vakata-context-hover").children("a").focus(),b.stopImmediatePropagation(),b.preventDefault());break;case 40:c.is_visible&&(d=c.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").nextAll("li:not(.vakata-context-separator)").first(),d.length||(d=c.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").first()),d.addClass("vakata-context-hover").children("a").focus(),b.stopImmediatePropagation(),b.preventDefault());break;case 27:a.vakata.context.hide(),b.preventDefault()}}).on("keydown",function(a){a.preventDefault();var b=c.element.find(".vakata-contextmenu-shortcut-"+a.which).parent();b.parent().not(".vakata-context-disabled")&&b.click()}),a(i).on("mousedown.vakata.jstree",function(b){c.is_visible&&!a.contains(c.element[0],b.target)&&a.vakata.context.hide()}).on("context_show.vakata.jstree",function(a,d){c.element.find("li:has(ul)").children("a").addClass("vakata-context-parent"),b&&c.element.addClass("vakata-context-rtl").css("direction","rtl"),c.element.find("ul").hide().end()})})}(a),a.jstree.defaults.dnd={copy:!0,open_timeout:500,is_draggable:!0,check_while_dragging:!0,always_copy:!1,inside_pos:0,drag_selection:!0,touch:!0,large_drop_target:!1,large_drag_target:!1,use_html5:!1};var k,l;a.jstree.plugins.dnd=function(b,c){this.init=function(a,b){c.init.call(this,a,b),this.settings.dnd.use_html5=this.settings.dnd.use_html5&&"draggable"in i.createElement("span")},this.bind=function(){c.bind.call(this),this.element.on(this.settings.dnd.use_html5?"dragstart.jstree":"mousedown.jstree touchstart.jstree",this.settings.dnd.large_drag_target?".jstree-node":".jstree-anchor",a.proxy(function(b){if(this.settings.dnd.large_drag_target&&a(b.target).closest(".jstree-node")[0]!==b.currentTarget)return!0;if("touchstart"===b.type&&(!this.settings.dnd.touch||"selected"===this.settings.dnd.touch&&!a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").hasClass("jstree-clicked")))return!0;var c=this.get_node(b.target),d=this.is_selected(c)&&this.settings.dnd.drag_selection?this.get_top_selected().length:1,e=d>1?d+" "+this.get_string("nodes"):this.get_text(b.currentTarget);if(this.settings.core.force_text&&(e=a.vakata.html.escape(e)),c&&c.id&&c.id!==a.jstree.root&&(1===b.which||"touchstart"===b.type||"dragstart"===b.type)&&(this.settings.dnd.is_draggable===!0||a.isFunction(this.settings.dnd.is_draggable)&&this.settings.dnd.is_draggable.call(this,d>1?this.get_top_selected(!0):[c],b))){if(k={jstree:!0,origin:this,obj:this.get_node(c,!0),nodes:d>1?this.get_top_selected():[c.id]},l=b.currentTarget,!this.settings.dnd.use_html5)return this.element.trigger("mousedown.jstree"),a.vakata.dnd.start(b,k,'<div id="jstree-dnd" class="jstree-'+this.get_theme()+" jstree-"+this.get_theme()+"-"+this.get_theme_variant()+" "+(this.settings.core.themes.responsive?" jstree-dnd-responsive":"")+'"><i class="jstree-icon jstree-er"></i>'+e+'<ins class="jstree-copy" style="display:none;">+</ins></div>');a.vakata.dnd._trigger("start",b,{helper:a(),element:l,data:k})}},this)),this.settings.dnd.use_html5&&this.element.on("dragover.jstree",function(b){return b.preventDefault(),a.vakata.dnd._trigger("move",b,{helper:a(),element:l,data:k}),!1}).on("drop.jstree",a.proxy(function(b){return b.preventDefault(),a.vakata.dnd._trigger("stop",b,{helper:a(),element:l,data:k}),!1},this))},this.redraw_node=function(a,b,d,e){if(a=c.redraw_node.apply(this,arguments),a&&this.settings.dnd.use_html5)if(this.settings.dnd.large_drag_target)a.setAttribute("draggable",!0);else{var f,g,h=null;for(f=0,g=a.childNodes.length;g>f;f++)if(a.childNodes[f]&&a.childNodes[f].classNa
|
||
|
if(c=c&&c.id?c:this.get_node(c),e=e&&e.id?e:this.get_node(e),!e||!e.children)return!0;var h="rename_node"===b?f:c.text,i=[],j=this.settings.unique.case_sensitive,k=this._model.data,l,m;for(l=0,m=e.children.length;m>l;l++)i.push(j?k[e.children[l]].text:k[e.children[l]].text.toLowerCase());switch(j||(h=h.toLowerCase()),b){case"delete_node":return!0;case"rename_node":return l=-1===a.inArray(h,i)||c.text&&c.text[j?"toString":"toLowerCase"]()===h,l||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_01",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),l;case"create_node":return l=-1===a.inArray(h,i),l||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_04",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),l;case"copy_node":return l=-1===a.inArray(h,i),l||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_02",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),l;case"move_node":return l=c.parent===e.id&&(!g||!g.is_multi)||-1===a.inArray(h,i),l||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_03",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),l}return!0},this.create_node=function(c,e,f,g,h){if(!e||e.text===b){if(null===c&&(c=a.jstree.root),c=this.get_node(c),!c)return d.create_node.call(this,c,e,f,g,h);if(f=f===b?"last":f,!f.toString().match(/^(before|after)$/)&&!h&&!this.is_loaded(c))return d.create_node.call(this,c,e,f,g,h);e||(e={});var i,j,k,l,m,n=this._model.data,o=this.settings.unique.case_sensitive,p=this.settings.unique.duplicate;for(j=i=this.get_string("New node"),k=[],l=0,m=c.children.length;m>l;l++)k.push(o?n[c.children[l]].text:n[c.children[l]].text.toLowerCase());l=1;while(-1!==a.inArray(o?j:j.toLowerCase(),k))j=p.call(this,i,++l).toString();e.text=j}return d.create_node.call(this,c,e,f,g,h)}};var n=i.createElement("DIV");if(n.setAttribute("unselectable","on"),n.setAttribute("role","presentation"),n.className="jstree-wholerow",n.innerHTML=" ",a.jstree.plugins.wholerow=function(b,c){this.bind=function(){c.bind.call(this),this.element.on("ready.jstree set_state.jstree",a.proxy(function(){this.hide_dots()},this)).on("init.jstree loading.jstree ready.jstree",a.proxy(function(){this.get_container_ul().addClass("jstree-wholerow-ul")},this)).on("deselect_all.jstree",a.proxy(function(a,b){this.element.find(".jstree-wholerow-clicked").removeClass("jstree-wholerow-clicked")},this)).on("changed.jstree",a.proxy(function(a,b){this.element.find(".jstree-wholerow-clicked").removeClass("jstree-wholerow-clicked");var c=!1,d,e;for(d=0,e=b.selected.length;e>d;d++)c=this.get_node(b.selected[d],!0),c&&c.length&&c.children(".jstree-wholerow").addClass("jstree-wholerow-clicked")},this)).on("open_node.jstree",a.proxy(function(a,b){this.get_node(b.node,!0).find(".jstree-clicked").parent().children(".jstree-wholerow").addClass("jstree-wholerow-clicked")},this)).on("hover_node.jstree dehover_node.jstree",a.proxy(function(a,b){"hover_node"===a.type&&this.is_disabled(b.node)||this.get_node(b.node,!0).children(".jstree-wholerow")["hover_node"===a.type?"addClass":"removeClass"]("jstree-wholerow-hovered")},this)).on("contextmenu.jstree",".jstree-wholerow",a.proxy(function(b){if(this._data.contextmenu){b.preventDefault();var c=a.Event("contextmenu",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey,pageX:b.pageX,pageY:b.pageY});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c)}},this)).on("click.jstree",".jstree-wholerow",function(b){b.stopImmediatePropagation();var c=a.Event("click",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c).focus()
|
||
|
|
||
|
/***/ },
|
||
|
/* 9 */
|
||
|
/***/ function(module, exports, __webpack_require__) {
|
||
|
|
||
|
// keymaster.js
|
||
|
// (c) 2011-2013 Thomas Fuchs
|
||
|
// keymaster.js may be freely distributed under the MIT license.
|
||
|
|
||
|
;(function(global){
|
||
|
var k,
|
||
|
_handlers = {},
|
||
|
_mods = { 16: false, 18: false, 17: false, 91: false },
|
||
|
_scope = 'all',
|
||
|
// modifier keys
|
||
|
_MODIFIERS = {
|
||
|
'⇧': 16, shift: 16,
|
||
|
'⌥': 18, alt: 18, option: 18,
|
||
|
'⌃': 17, ctrl: 17, control: 17,
|
||
|
'⌘': 91, command: 91
|
||
|
},
|
||
|
// special keys
|
||
|
_MAP = {
|
||
|
backspace: 8, tab: 9, clear: 12,
|
||
|
enter: 13, 'return': 13,
|
||
|
esc: 27, escape: 27, space: 32,
|
||
|
left: 37, up: 38,
|
||
|
right: 39, down: 40,
|
||
|
del: 46, 'delete': 46,
|
||
|
home: 36, end: 35,
|
||
|
pageup: 33, pagedown: 34,
|
||
|
',': 188, '.': 190, '/': 191,
|
||
|
'`': 192, '-': 189, '=': 187,
|
||
|
';': 186, '\'': 222,
|
||
|
'[': 219, ']': 221, '\\': 220
|
||
|
},
|
||
|
code = function(x){
|
||
|
return _MAP[x] || x.toUpperCase().charCodeAt(0);
|
||
|
},
|
||
|
_downKeys = [];
|
||
|
|
||
|
for(k=1;k<20;k++) _MAP['f'+k] = 111+k;
|
||
|
|
||
|
// IE doesn't support Array#indexOf, so have a simple replacement
|
||
|
function index(array, item){
|
||
|
var i = array.length;
|
||
|
while(i--) if(array[i]===item) return i;
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
// for comparing mods before unassignment
|
||
|
function compareArray(a1, a2) {
|
||
|
if (a1.length != a2.length) return false;
|
||
|
for (var i = 0; i < a1.length; i++) {
|
||
|
if (a1[i] !== a2[i]) return false;
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
var modifierMap = {
|
||
|
16:'shiftKey',
|
||
|
18:'altKey',
|
||
|
17:'ctrlKey',
|
||
|
91:'metaKey'
|
||
|
};
|
||
|
function updateModifierKey(event) {
|
||
|
for(k in _mods) _mods[k] = event[modifierMap[k]];
|
||
|
};
|
||
|
|
||
|
// handle keydown event
|
||
|
function dispatch(event) {
|
||
|
var key, handler, k, i, modifiersMatch, scope;
|
||
|
key = event.keyCode;
|
||
|
|
||
|
if (index(_downKeys, key) == -1) {
|
||
|
_downKeys.push(key);
|
||
|
}
|
||
|
|
||
|
// if a modifier key, set the key.<modifierkeyname> property to true and return
|
||
|
if(key == 93 || key == 224) key = 91; // right command on webkit, command on Gecko
|
||
|
if(key in _mods) {
|
||
|
_mods[key] = true;
|
||
|
// 'assignKey' from inside this closure is exported to window.key
|
||
|
for(k in _MODIFIERS) if(_MODIFIERS[k] == key) assignKey[k] = true;
|
||
|
return;
|
||
|
}
|
||
|
updateModifierKey(event);
|
||
|
|
||
|
// see if we need to ignore the keypress (filter() can can be overridden)
|
||
|
// by default ignore key presses if a select, textarea, or input is focused
|
||
|
if(!assignKey.filter.call(this, event)) return;
|
||
|
|
||
|
// abort if no potentially matching shortcuts found
|
||
|
if (!(key in _handlers)) return;
|
||
|
|
||
|
scope = getScope();
|
||
|
|
||
|
// for each potential shortcut
|
||
|
for (i = 0; i < _handlers[key].length; i++) {
|
||
|
handler = _handlers[key][i];
|
||
|
|
||
|
// see if it's in the current scope
|
||
|
if(handler.scope == scope || handler.scope == 'all'){
|
||
|
// check if modifiers match if any
|
||
|
modifiersMatch = handler.mods.length > 0;
|
||
|
for(k in _mods)
|
||
|
if((!_mods[k] && index(handler.mods, +k) > -1) ||
|
||
|
(_mods[k] && index(handler.mods, +k) == -1)) modifiersMatch = false;
|
||
|
// call the handler and stop the event if neccessary
|
||
|
if((handler.mods.length == 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91]) || modifiersMatch){
|
||
|
if(handler.method(event, handler)===false){
|
||
|
if(event.preventDefault) event.preventDefault();
|
||
|
else event.returnValue = false;
|
||
|
if(event.stopPropagation) event.stopPropagation();
|
||
|
if(event.cancelBubble) event.cancelBubble = true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
// unset modifier keys on keyup
|
||
|
function clearModifier(event){
|
||
|
var key = event.keyCode, k,
|
||
|
i = index(_downKeys, key);
|
||
|
|
||
|
// remove key from _downKeys
|
||
|
if (i >= 0) {
|
||
|
_downKeys.splice(i, 1);
|
||
|
}
|
||
|
|
||
|
if(key == 93 || key == 224) key = 91;
|
||
|
if(key in _mods) {
|
||
|
_mods[key] = false;
|
||
|
for(k in _MODIFIERS) if(_MODIFIERS[k] == key) assignKey[k] = false;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
function resetModifiers() {
|
||
|
for(k in _mods) _mods[k] = false;
|
||
|
for(k in _MODIFIERS) assignKey[k] = false;
|
||
|
};
|
||
|
|
||
|
// parse and assign shortcut
|
||
|
function assignKey(key, scope, method){
|
||
|
var keys, mods;
|
||
|
keys = getKeys(key);
|
||
|
if (method === undefined) {
|
||
|
method = scope;
|
||
|
scope = 'all';
|
||
|
}
|
||
|
|
||
|
// for each shortcut
|
||
|
for (var i = 0; i < keys.length; i++) {
|
||
|
// set modifier keys if any
|
||
|
mods = [];
|
||
|
key = keys[i].split('+');
|
||
|
if (key.length > 1){
|
||
|
mods = getMods(key);
|
||
|
key = [key[key.length-1]];
|
||
|
}
|
||
|
// convert to keycode and...
|
||
|
key = key[0]
|
||
|
key = code(key);
|
||
|
// ...store handler
|
||
|
if (!(key in _handlers)) _handlers[key] = [];
|
||
|
_handlers[key].push({ shortcut: keys[i], scope: scope, method: method, key: keys[i], mods: mods });
|
||
|
}
|
||
|
};
|
||
|
|
||
|
// unbind all handlers for given key in current scope
|
||
|
function unbindKey(key, scope) {
|
||
|
var multipleKeys, keys,
|
||
|
mods = [],
|
||
|
i, j, obj;
|
||
|
|
||
|
multipleKeys = getKeys(key);
|
||
|
|
||
|
for (j = 0; j < multipleKeys.length; j++) {
|
||
|
keys = multipleKeys[j].split('+');
|
||
|
|
||
|
if (keys.length > 1) {
|
||
|
mods = getMods(keys);
|
||
|
key = keys[keys.length - 1];
|
||
|
}
|
||
|
|
||
|
key = code(key);
|
||
|
|
||
|
if (scope === undefined) {
|
||
|
scope = getScope();
|
||
|
}
|
||
|
if (!_handlers[key]) {
|
||
|
return;
|
||
|
}
|
||
|
for (i = 0; i < _handlers[key].length; i++) {
|
||
|
obj = _handlers[key][i];
|
||
|
// only clear handlers if correct scope and mods match
|
||
|
if (obj.scope === scope && compareArray(obj.mods, mods)) {
|
||
|
_handlers[key][i] = {};
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
// Returns true if the key with code 'keyCode' is currently down
|
||
|
// Converts strings into key codes.
|
||
|
function isPressed(keyCode) {
|
||
|
if (typeof(keyCode)=='string') {
|
||
|
keyCode = code(keyCode);
|
||
|
}
|
||
|
return index(_downKeys, keyCode) != -1;
|
||
|
}
|
||
|
|
||
|
function getPressedKeyCodes() {
|
||
|
return _downKeys.slice(0);
|
||
|
}
|
||
|
|
||
|
function filter(event){
|
||
|
var tagName = (event.target || event.srcElement).tagName;
|
||
|
// ignore keypressed in any elements that support keyboard data input
|
||
|
return !(tagName == 'INPUT' || tagName == 'SELECT' || tagName == 'TEXTAREA');
|
||
|
}
|
||
|
|
||
|
// initialize key.<modifier> to false
|
||
|
for(k in _MODIFIERS) assignKey[k] = false;
|
||
|
|
||
|
// set current scope (default 'all')
|
||
|
function setScope(scope){ _scope = scope || 'all' };
|
||
|
function getScope(){ return _scope || 'all' };
|
||
|
|
||
|
// delete all handlers for a given scope
|
||
|
function deleteScope(scope){
|
||
|
var key, handlers, i;
|
||
|
|
||
|
for (key in _handlers) {
|
||
|
handlers = _handlers[key];
|
||
|
for (i = 0; i < handlers.length; ) {
|
||
|
if (handlers[i].scope === scope) handlers.splice(i, 1);
|
||
|
else i++;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
// abstract key logic for assign and unassign
|
||
|
function getKeys(key) {
|
||
|
var keys;
|
||
|
key = key.replace(/\s/g, '');
|
||
|
keys = key.split(',');
|
||
|
if ((keys[keys.length - 1]) == '') {
|
||
|
keys[keys.length - 2] += ',';
|
||
|
}
|
||
|
return keys;
|
||
|
}
|
||
|
|
||
|
// abstract mods logic for assign and unassign
|
||
|
function getMods(key) {
|
||
|
var mods = key.slice(0, key.length - 1);
|
||
|
for (var mi = 0; mi < mods.length; mi++)
|
||
|
mods[mi] = _MODIFIERS[mods[mi]];
|
||
|
return mods;
|
||
|
}
|
||
|
|
||
|
// cross-browser events
|
||
|
function addEvent(object, event, method) {
|
||
|
if (object.addEventListener)
|
||
|
object.addEventListener(event, method, false);
|
||
|
else if(object.attachEvent)
|
||
|
object.attachEvent('on'+event, function(){ method(window.event) });
|
||
|
};
|
||
|
|
||
|
// set the handlers globally on document
|
||
|
addEvent(document, 'keydown', function(event) { dispatch(event) }); // Passing _scope to a callback to ensure it remains the same by execution. Fixes #48
|
||
|
addEvent(document, 'keyup', clearModifier);
|
||
|
|
||
|
// reset modifiers to false whenever the window is (re)focused.
|
||
|
addEvent(window, 'focus', resetModifiers);
|
||
|
|
||
|
// store previously defined key
|
||
|
var previousKey = global.key;
|
||
|
|
||
|
// restore previously defined key and return reference to our key object
|
||
|
function noConflict() {
|
||
|
var k = global.key;
|
||
|
global.key = previousKey;
|
||
|
return k;
|
||
|
}
|
||
|
|
||
|
// set window.key and window.key.set/get/deleteScope, and the default filter
|
||
|
global.key = assignKey;
|
||
|
global.key.setScope = setScope;
|
||
|
global.key.getScope = getScope;
|
||
|
global.key.deleteScope = deleteScope;
|
||
|
global.key.filter = filter;
|
||
|
global.key.isPressed = isPressed;
|
||
|
global.key.getPressedKeyCodes = getPressedKeyCodes;
|
||
|
global.key.noConflict = noConflict;
|
||
|
global.key.unbind = unbindKey;
|
||
|
|
||
|
if(true) module.exports = assignKey;
|
||
|
|
||
|
})(this);
|
||
|
|
||
|
|
||
|
/***/ },
|
||
|
/* 10 */
|
||
|
/***/ function(module, exports) {
|
||
|
|
||
|
module.exports = "/* jsTree default theme */\n.jstree-node,\n.jstree-children,\n.jstree-container-ul {\n display: block;\n margin: 0;\n padding: 0;\n list-style-type: none;\n list-style-image: none;\n}\n.jstree-node {\n white-space: nowrap;\n}\n.jstree-anchor {\n display: inline-block;\n color: black;\n white-space: nowrap;\n padding: 0 4px 0 1px;\n margin: 0;\n vertical-align: top;\n}\n.jstree-anchor:focus {\n outline: 0;\n}\n.jstree-anchor,\n.jstree-anchor:link,\n.jstree-anchor:visited,\n.jstree-anchor:hover,\n.jstree-anchor:active {\n text-decoration: none;\n color: inherit;\n}\n.jstree-icon {\n display: inline-block;\n text-decoration: none;\n margin: 0;\n padding: 0;\n vertical-align: top;\n text-align: center;\n}\n.jstree-icon:empty {\n display: inline-block;\n text-decoration: none;\n margin: 0;\n padding: 0;\n vertical-align: top;\n text-align: center;\n}\n.jstree-ocl {\n cursor: pointer;\n}\n.jstree-leaf > .jstree-ocl {\n cursor: default;\n}\n.jstree .jstree-open > .jstree-children {\n display: block;\n}\n.jstree .jstree-closed > .jstree-children,\n.jstree .jstree-leaf > .jstree-children {\n display: none;\n}\n.jstree-anchor > .jstree-themeicon {\n margin-right: 2px;\n}\n.jstree-no-icons .jstree-themeicon,\n.jstree-anchor > .jstree-themeicon-hidden {\n display: none;\n}\n.jstree-hidden,\n.jstree-node.jstree-hidden {\n display: none;\n}\n.jstree-rtl .jstree-anchor {\n padding: 0 1px 0 4px;\n}\n.jstree-rtl .jstree-anchor > .jstree-themeicon {\n margin-left: 2px;\n margin-right: 0;\n}\n.jstree-rtl .jstree-node {\n margin-left: 0;\n}\n.jstree-rtl .jstree-container-ul > .jstree-node {\n margin-right: 0;\n}\n.jstree-wholerow-ul {\n position: relative;\n display: inline-block;\n min-width: 100%;\n}\n.jstree-wholerow-ul .jstree-leaf > .jstree-ocl {\n cursor: pointer;\n}\n.jstree-wholerow-ul .jstree-anchor,\n.jstree-wholerow-ul .jstree-icon {\n position: relative;\n}\n.jstree-wholerow-ul .jstree-wholerow {\n width: 100%;\n cursor: pointer;\n position: absolute;\n left: 0;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.vakata-context {\n display: none;\n}\n.vakata-context,\n.vakata-context ul {\n margin: 0;\n padding: 2px;\n position: absolute;\n background: #f5f5f5;\n border: 1px solid #979797;\n box-shadow: 2px 2px 2px #999999;\n}\n.vakata-context ul {\n list-style: none;\n left: 100%;\n margin-top: -2.7em;\n margin-left: -4px;\n}\n.vakata-context .vakata-context-right ul {\n left: auto;\n right: 100%;\n margin-left: auto;\n margin-right: -4px;\n}\n.vakata-context li {\n list-style: none;\n}\n.vakata-context li > a {\n display: block;\n padding: 0 2em 0 2em;\n text-decoration: none;\n width: auto;\n color: black;\n white-space: nowrap;\n line-height: 2.4em;\n text-shadow: 1px 1px 0 white;\n border-radius: 1px;\n}\n.vakata-context li > a:hover {\n position: relative;\n background-color: #e8eff7;\n box-shadow: 0 0 2px #0a6aa1;\n}\n.vakata-context li > a.vakata-context-parent {\n background-image: url(\"data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==\");\n background-position: right center;\n background-repeat: no-repeat;\n}\n.vakata-context li > a:focus {\n outline: 0;\n}\n.vakata-context .vakata-context-hover > a {\n position: relative;\n background-color: #e8eff7;\n box-shadow: 0 0 2px #0a6aa1;\n}\n.vakata-context .vakata-context-separator > a,\n.vakata-context .vakata-context-separator > a:hover {\n background: white;\n border: 0;\n border-top: 1px solid #e2e3e3;\n height: 1px;\n min-height: 1px;\n max-height: 1px;\n padding: 0;\n margin: 0 0 0 2.4em;\n border-left: 1px solid #e0e0e0;\n text-shadow: 0 0 0 transparent;\n box-shadow: 0 0 0 transparent;\n border-radius: 0;\n}\n.vakata-context .vakata-contextmenu-disabled a,\n.vakata-context .vakata-contextmenu-disabled a:hover {\n color: silver;\n background-color: transparent;\n border: 0;\n box-shadow: 0 0 0;\n}\n.vakata-context li > a > i {\n text-decoratio
|
||
|
|
||
|
/***/ },
|
||
|
/* 11 */
|
||
|
/***/ function(module, exports) {
|
||
|
|
||
|
module.exports = "/*\n*\tMatterTools.Inspector\n*/\n\n.ins-container,\n.jstree {\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.ins-cursor-move canvas {\n cursor: move !important;\n}\n\n.ins-cursor-rotate canvas {\n cursor: ew-resize !important;\n}\n\n.ins-cursor-scale canvas {\n cursor: nwse-resize !important;\n}\n\n.ins-container {\n position: fixed;\n overflow: auto;\n overflow-x: hidden;\n z-index: 10;\n width: 245px;\n bottom: 0;\n top: 0;\n left: 0;\n background: #1c1c25;\n padding: 0;\n font-family: Arial;\n font-size: 12px;\n color: #aaa;\n box-shadow: 0 0 30px rgba(0,0,0,0.2);\n}\n\nbody .ins-container::-webkit-scrollbar {\n background: #1c1c25;\n width: 12px;\n}\n\nbody .ins-container::-webkit-scrollbar-thumb {\n background: transparent;\n width: 5px;\n border-left: 5px solid transparent;\n border-right: 6px solid #2a2a31;\n border-radius: 0;\n}\n\n@media only screen and (max-width : 1500px) {\n .ins-container {\n transform: translate(-230px, 0);\n }\n\n .ins-container:hover {\n transform: none;\n }\n\n .ins-container {\n -webkit-transition: all 500ms cubic-bezier(0.965, 0.025, 0.735, 0.415); \n -moz-transition: all 500ms cubic-bezier(0.965, 0.025, 0.735, 0.415); \n -o-transition: all 500ms cubic-bezier(0.965, 0.025, 0.735, 0.415); \n transition: all 500ms cubic-bezier(0.965, 0.025, 0.735, 0.415);\n\n -webkit-transition-timing-function: cubic-bezier(0.965, 0.025, 0.735, 0.415); \n -moz-transition-timing-function: cubic-bezier(0.965, 0.025, 0.735, 0.415); \n -o-transition-timing-function: cubic-bezier(0.965, 0.025, 0.735, 0.415); \n transition-timing-function: cubic-bezier(0.965, 0.025, 0.735, 0.415);\n\n transition-delay: 3s;\n -webkit-transition-delay: 3s;\n }\n\n .ins-container:hover {\n -webkit-transition: all 500ms cubic-bezier(0.095, 0.665, 0.400, 0.835); \n -moz-transition: all 500ms cubic-bezier(0.095, 0.665, 0.400, 0.835); \n -o-transition: all 500ms cubic-bezier(0.095, 0.665, 0.400, 0.835); \n transition: all 500ms cubic-bezier(0.095, 0.665, 0.400, 0.835);\n\n -webkit-transition-timing-function: cubic-bezier(0.095, 0.665, 0.400, 0.835); \n -moz-transition-timing-function: cubic-bezier(0.095, 0.665, 0.400, 0.835); \n -o-transition-timing-function: cubic-bezier(0.095, 0.665, 0.400, 0.835); \n transition-timing-function: cubic-bezier(0.095, 0.665, 0.400, 0.835);\n\n transition-delay: 0;\n -webkit-transition-delay: 0;\n }\n}\n\n.ins-add-button.ins-button {\n float: right;\n width: auto;\n height: auto;\n padding: 2px 5px;\n margin: 2px 29px;\n min-width: 0;\n position: relative;\n z-index: 100;\n}\n\n.ins-search-box {\n margin: 20px 0px 16px 13px;\n border: 0;\n padding: 7px 8px;\n font-size: 12px;\n width: 100%;\n box-sizing: border-box;\n border-radius: 3px;\n background: #111117;\n color: #919691;\n appearance: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n}\n\n.ins-search-box:focus {\n background: #15151d;\n border: 0;\n outline: 0;\n}\n\n.ins-search-box::-webkit-search-cancel-button {\n appearance: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n height: 15px;\n width: 8px;\n cursor: pointer;\n}\n\n.ins-search-box::-webkit-search-cancel-button:before {\n height: 10px;\n width: 10px;\n content: 'x';\n font-family: Arial;\n line-height: 0;\n font-size: 13px;\n color: #999;\n font-weight: bold;\n cursor: pointer;\n}\n\n.ins-search-box::-webkit-input-placeholder {\n color: #777;\n}\n\n.ins-search-box:-moz-placeholder {\n color: #777;\n}\n\n.ins-search-box::-moz-placeholder {\n color: #777;\n}\n\n.ins-search-box:-ms-input-placeholder { \n color: #777;\n}\n\n.ins-world-tree {\n\n}\n\n.ins-control-group {\n display: block;\n clear: both;\n overflow: hidden;\n padding: 14px 20px 12px 20px;\n background: #0d0f1b;\n border-bottom: 1px solid #29292d;\n}\n\n.ins-button {\n disp
|
||
|
|
||
|
/***/ }
|
||
|
/******/ ])
|
||
|
});
|
||
|
;
|