basicprimitives
Version:
Basic Primitives Diagrams for JavaScript - data visualization components library that implements organizational chart and multi-parent dependency diagrams, contains implementations of JavaScript Controls and PDF rendering plugins.
1,429 lines (1,185 loc) • 1.71 MB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["primitives"] = factory();
else
root["primitives"] = factory();
})(this, () => {
return /******/ (() => { // webpackBootstrap
/******/ "use strict";
/******/ var __webpack_modules__ = ({
/***/ "./src/BaseControl.js":
/*!****************************!*\
!*** ./src/BaseControl.js ***!
\****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ BaseControl)
/* harmony export */ });
/* harmony import */ var _graphics_structs_Point__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./graphics/structs/Point */ "./src/graphics/structs/Point.js");
/* harmony import */ var _graphics_structs_Rect__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./graphics/structs/Rect */ "./src/graphics/structs/Rect.js");
/* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enums */ "./src/enums.js");
/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./common */ "./src/common/index.js");
/* harmony import */ var _graphics_createGraphics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./graphics/createGraphics */ "./src/graphics/createGraphics.js");
/* harmony import */ var _graphics_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./graphics/dom */ "./src/graphics/dom.js");
/* harmony import */ var _common_jsonml_html__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./common/jsonml-html */ "./src/common/jsonml-html.js");
/**
* JavaScript Abstract Control
* @class BaseControl
*/
function BaseControl(element, options, taskManagerFactory, eventArgsFactory, templates) {
var _data = {
name: "orgdiagram",
options: options,
tasks: null,
graphics: null,
mouse: null,
layout: {
element: element,
controlPanel: null,
frameMousePanel: null,
framePlaceholder: null,
titlesMousePanel: null,
titlesPlaceholder: null,
scrollPanel: null,
mousePanel: null,
placeholder: null,
calloutPlaceholder: null,
forceCenterOnCursor: true
}
},
_dragFrom,
_scrollFrom,
_scrollTo,
_dragImage,
_dragTimer,
_debug = false,
_timer = null;
/**
* Performs full redraw of the diagram contents via reevaluating all API options. This method has to be called explicitly
* after all options are set in order to update controls contents.
*
* @param {UpdateMode} updateMode
* @param {boolean} forceCenterOnCursor
*/
function update(updateMode, forceCenterOnCursor) {
if (forceCenterOnCursor == null) {
forceCenterOnCursor = true;
}
switch (updateMode) {
case _enums__WEBPACK_IMPORTED_MODULE_0__.UpdateMode.Refresh:
refresh(forceCenterOnCursor, _debug);
break;
case _enums__WEBPACK_IMPORTED_MODULE_0__.UpdateMode.PositonHighlight:
positionHighlight(_debug);
break;
default:
redraw();
break;
}
}
/**
* Removes all elements control added to DOM including event listeners.
*/
function destroy() {
unbind(_data.layout);
cleanLayout(_data.layout);
_data.tasks = null;
_data.graphics = null;
}
function redraw() {
unbind(_data.layout);
cleanLayout(_data.layout);
createLayout(_data.layout, _data.name);
bind(_data.layout);
_data.tasks = taskManagerFactory(getOptions, getGraphics, getLayout, setLayout, templates);
_data.graphics = (0,_graphics_createGraphics__WEBPACK_IMPORTED_MODULE_1__["default"])(_data.layout.element);
_data.graphics.debug = _debug;
refresh(true, _debug);
}
function refresh(forceCenterOnCursor, debug) {
var centerOnCursorTask, placeholderOffset; //_data.layout.scrollPanel.css({
// "display": "none",
// "-webkit-overflow-scrolling": "auto"
//});
//this.graphics.begin();
_data.layout.forceCenterOnCursor = forceCenterOnCursor;
_data.tasks.process('OptionsTask', null, debug);
_data.graphics.end(); //_data.layout.scrollPanel.css({
// "display": "block"
//});
if (forceCenterOnCursor) {
/* scroll to offset */
centerOnCursorTask = _data.tasks.getTask("CenterOnCursorTask");
placeholderOffset = centerOnCursorTask.getPlaceholderOffset();
_data.layout.scrollPanel.scrollLeft = placeholderOffset.x;
_data.layout.scrollPanel.scrollTop = placeholderOffset.y;
} //_data.layout.scrollPanel.css({
// "-webkit-overflow-scrolling": "touch"
//});
/* fix pixel alignment */
var pixelAlignmentFix = (0,_graphics_dom__WEBPACK_IMPORTED_MODULE_2__.getFixOfPixelAlignment)(_data.layout.element);
_common_jsonml_html__WEBPACK_IMPORTED_MODULE_3__["default"].applyStyles(_data.layout.scrollPanel, {
"marginBottom": "0px",
"marginRight": "0px",
"marginLeft": pixelAlignmentFix.width + "px",
/* fixes div pixel alignment */
"marginTop": pixelAlignmentFix.height + "px"
});
}
function positionHighlight(debug) {
_data.layout.forceCenterOnCursor = false;
_data.tasks.process('HighlightItemOptionTask', null, debug);
_data.graphics.end();
}
function redrawCurrentViewPort(debug) {
_data.layout.forceCenterOnCursor = false;
_data.tasks.process('LayoutOptionsTask', null, debug);
_data.graphics.end();
}
function onScroll(event) {
if (_timer == null) {
_timer = window.setTimeout(function () {
redrawCurrentViewPort(_debug);
window.clearTimeout(_timer);
_timer = null;
}, 200);
}
}
/**
* Call this method to update controls configuration. Control uses default Config instance to initialize itself,
* so it sets only options provided in the options parameter.
*
* @param {object} options Options
*/
function setOptions(options) {
for (var option in options) {
if (options.hasOwnProperty(option)) {
_data.options[option] = options[option];
}
}
}
/**
* This method returns current configuration object.
*
* @returns {object} Returns reference to current configuration object
*/
function getOptions() {
return _data.options;
}
/**
* This method returns configuration option by name.
*
* @param {*} option Option name
*/
function getOption(option) {
return _data.options[option];
}
/**
* Sets configuration option of the control by name.
*
* @param {*} option Option name
* @param {*} value Option value
*/
function setOption(option, value) {
return _data.options[option] = value;
}
function getGraphics() {
return _data.graphics;
}
function getLayout() {
var layout = _data.layout,
scrollPanelSize = (0,_graphics_dom__WEBPACK_IMPORTED_MODULE_2__.getInnerSize)(layout.controlPanel),
placeholderOffset = new _graphics_structs_Point__WEBPACK_IMPORTED_MODULE_4__["default"](layout.scrollPanel.scrollLeft, layout.scrollPanel.scrollTop);
return {
forceCenterOnCursor: layout.forceCenterOnCursor,
scrollPanelSize: scrollPanelSize,
placeholderOffset: placeholderOffset
};
}
function setLayout(layoutOptions) {
var layout = _data.layout,
pixelAlignmentFix = (0,_graphics_dom__WEBPACK_IMPORTED_MODULE_2__.getFixOfPixelAlignment)(layout.element);
_common_jsonml_html__WEBPACK_IMPORTED_MODULE_3__["default"].applyStyles(layout.controlPanel, {
"marginLeft": pixelAlignmentFix.width + "px",
/* fixes div pixel alignment */
"marginTop": pixelAlignmentFix.height + "px"
});
/* set scroll panel position */
_common_jsonml_html__WEBPACK_IMPORTED_MODULE_3__["default"].applyStyles(layout.scrollPanel, layoutOptions.scrollPanelRect.getCSS());
/* set scaled content panel for tracking mouse events without scaling */
_common_jsonml_html__WEBPACK_IMPORTED_MODULE_3__["default"].applyStyles(layout.mousePanel, layoutOptions.mousePanelSize.getCSS());
/* set size and scale of content panel */
var scaleText = "scale(" + layoutOptions.scale + "," + layoutOptions.scale + ")";
var scaleProperties = {
"transform-origin": "0 0",
"transform": scaleText,
"-ms-transform": scaleText,
/* IE 9 */
"-webkit-transform": scaleText,
/* Safari and Chrome */
"-o-transform": scaleText,
/* Opera */
"-moz-transform": scaleText
/* Firefox */
};
_common_jsonml_html__WEBPACK_IMPORTED_MODULE_3__["default"].applyStyles(layout.placeholder, (0,_common__WEBPACK_IMPORTED_MODULE_5__.mergeObjects)(scaleProperties, layoutOptions.placeholderSize.getCSS()));
if (layoutOptions.autoSize) {
/* resize element to fit placeholder if control in auto size mode */
_common_jsonml_html__WEBPACK_IMPORTED_MODULE_3__["default"].applyStyles(layout.element, layoutOptions.controlSize.getCSS());
}
/* set titles panel scale and size */
_common_jsonml_html__WEBPACK_IMPORTED_MODULE_3__["default"].applyStyles(layout.titlesMousePanel, layoutOptions.titlesMousePanelRect.getCSS());
_common_jsonml_html__WEBPACK_IMPORTED_MODULE_3__["default"].applyStyles(layout.titlesPlaceholder, (0,_common__WEBPACK_IMPORTED_MODULE_5__.mergeObjects)(scaleProperties, layoutOptions.titlesPlaceholderSize.getCSS()));
/* set frame panel scale and size */
_common_jsonml_html__WEBPACK_IMPORTED_MODULE_3__["default"].applyStyles(layout.frameMousePanel, layoutOptions.frameMousePanelRect.getCSS());
_common_jsonml_html__WEBPACK_IMPORTED_MODULE_3__["default"].applyStyles(layout.framePlaceholder, (0,_common__WEBPACK_IMPORTED_MODULE_5__.mergeObjects)(scaleProperties, layoutOptions.framePlaceholderSize.getCSS()));
layout.scrollPanel.setAttribute("class", layoutOptions.scrollPanelRect.left > 0 ? name : "bp-scrollframe " + name);
}
function createLayout(layout, name) {
var viewportSize = (0,_graphics_dom__WEBPACK_IMPORTED_MODULE_2__.getInnerSize)(layout.element),
viewportRect = new _graphics_structs_Rect__WEBPACK_IMPORTED_MODULE_6__["default"](0, 0, viewportSize.width, viewportSize.height),
pixelAlignmentFix = (0,_graphics_dom__WEBPACK_IMPORTED_MODULE_2__.getFixOfPixelAlignment)(element);
_common_jsonml_html__WEBPACK_IMPORTED_MODULE_3__["default"].appendDOM(layout.element, _common_jsonml_html__WEBPACK_IMPORTED_MODULE_3__["default"].toHTML(["div",
/* root control panel */
{
"tabindex": 0,
"style": {
"position": "relative",
"overflow": "hidden",
"top": "0px",
"left": "0px",
"width": "100%",
"height": "100%",
"padding": "0px",
"marginBottom": "0px",
"marginRight": "0px",
"marginLeft": pixelAlignmentFix.width + "px",
/* fixes div pixel alignment */
"marginTop": pixelAlignmentFix.height + "px"
},
"name": "controlPanel",
"class": name,
"$": function $(element) {
layout.controlPanel = element;
}
}, ["div",
/* frameMousePanel - frame mouse tracking events panel */
{
"style": (0,_common__WEBPACK_IMPORTED_MODULE_5__.mergeObjects)({
position: "absolute",
overflow: "hidden"
}, viewportRect.getCSS()),
"name": "frameMousePanel",
"class": name,
"$": function $(element) {
layout.frameMousePanel = element;
}
}, ["div",
/* frameplaceholder - contents scalable panel */
{
"style": (0,_common__WEBPACK_IMPORTED_MODULE_5__.mergeObjects)({
position: "absolute",
overflow: "hidden"
}, viewportRect.getCSS()),
"name": "framePlaceholder",
"class": ["frameplaceholder", name],
"$": function $(element) {
layout.framePlaceholder = element;
}
}]], ["div",
/* titlesMousePanel - titles mouse tracking events panel */
{
"style": (0,_common__WEBPACK_IMPORTED_MODULE_5__.mergeObjects)({
position: "absolute",
overflow: "hidden"
}, viewportRect.getCSS()),
"name": "titlesMousePanel",
"class": ["bp-titles-frame", name],
"$": function $(element) {
layout.titlesMousePanel = element;
}
}, ["div",
/* titlesplaceholder - contents scalable panel */
{
"style": (0,_common__WEBPACK_IMPORTED_MODULE_5__.mergeObjects)({
position: "absolute",
overflow: "hidden"
}, viewportRect.getCSS()),
"name": "titlesPlaceholder",
"class": ["titlesplaceholder", name],
"$": function $(element) {
layout.titlesPlaceholder = element;
}
}]], ["div",
/* scrollPanel - root scroll panel */
{
"style": (0,_common__WEBPACK_IMPORTED_MODULE_5__.mergeObjects)({
position: "absolute",
"overflow": "auto",
"-webkit-overflow-scrolling": "touch",
"top": "0px",
"left": "0px",
"width": viewportRect.width + "px",
"height": viewportRect.height + "px"
}, viewportRect.getCSS()),
"name": "scrollPanel",
"class": name,
"$": function $(element) {
layout.scrollPanel = element;
}
}, ["div",
/* mousePanel - mouse tracking events panel */
{
"style": (0,_common__WEBPACK_IMPORTED_MODULE_5__.mergeObjects)({
position: "absolute",
overflow: "visible"
}, viewportRect.getCSS()),
"name": "mousePanel",
"class": name,
"$": function $(element) {
layout.mousePanel = element;
}
}, ["div",
/* placeholder - contents scalable panel */
{
"style": (0,_common__WEBPACK_IMPORTED_MODULE_5__.mergeObjects)({
position: "absolute",
overflow: "hidden"
}, viewportRect.getCSS()),
"name": "placeholder",
"class": ["placeholder", name],
"$": function $(element) {
layout.placeholder = element;
}
}, ["div",
/* calloutPlaceholder - callout panel */
{
"style": {
position: "absolute",
overflow: "visible",
top: "0px",
left: "0px",
width: "0px",
height: "0px"
},
"name": "calloutPlaceholder",
"class": ["calloutplaceholder", name],
"$": function $(element) {
layout.calloutPlaceholder = element;
}
}]]]]]));
}
function cleanLayout() {
var controlPanel = _data.layout.controlPanel;
if (controlPanel != null) {
var parent = controlPanel.parentNode;
if (parent != null) {
parent.removeChild(controlPanel);
}
}
}
function bind(layout) {
layout.mousePanel.addEventListener('mousemove', onMouseMove);
layout.mousePanel.addEventListener('click', onMouseClick);
layout.mousePanel.addEventListener('dblclick', onMouseDblClick);
layout.mousePanel.addEventListener('change', onCheckboxChange);
layout.element.addEventListener('keydown', onKeyDown);
layout.scrollPanel.addEventListener('scroll', onScroll);
if (_data.options.enablePanning && (0,_graphics_createGraphics__WEBPACK_IMPORTED_MODULE_1__.isChrome)()) {
layout.scrollPanel.draggable = true;
layout.scrollPanel.addEventListener('dragstart', onDragStart);
layout.scrollPanel.addEventListener('drag', onDragScroll);
layout.scrollPanel.addEventListener('dragend', onDragScroll);
layout.scrollPanel.addEventListener('dragover', onDragOver);
}
layout.frameMousePanel.addEventListener('mousemove', onFrameMouseMove);
layout.frameMousePanel.addEventListener('click', onFrameMouseClick);
}
function unbind(layout) {
if (layout.mousePanel != null) {
layout.mousePanel.removeEventListener("mousemove", onMouseMove);
layout.mousePanel.removeEventListener("click", onMouseClick);
layout.mousePanel.removeEventListener("dblclick", onMouseDblClick);
layout.mousePanel.removeEventListener("change", onCheckboxChange);
}
if (layout.element != null) {
layout.element.removeEventListener("keydown", onKeyDown);
}
if (layout.scrollPanel != null) {
layout.scrollPanel.removeEventListener("scroll", onScroll);
layout.scrollPanel.removeEventListener('dragstart', onDragStart);
layout.scrollPanel.removeEventListener('drag', onDragScroll);
layout.scrollPanel.removeEventListener('dragend', onDragScroll);
layout.scrollPanel.removeEventListener('dragover', onDragOver);
}
if (layout.frameMousePanel != null) {
layout.frameMousePanel.removeEventListener('mousemove', onFrameMouseMove);
layout.frameMousePanel.removeEventListener('click', onFrameMouseClick);
}
}
function onFrameMouseMove(event) {
var placeholderOffset = (0,_graphics_dom__WEBPACK_IMPORTED_MODULE_2__.getElementOffset)(_data.layout.frameMousePanel),
x = event.pageX - placeholderOffset.left,
y = event.pageY - placeholderOffset.top;
var projectItemsToFrameTask = _data.tasks.getTask("ProjectItemsToFrameTask"),
highlightItemOptionTask = _data.tasks.getTask("HighlightItemOptionTask"),
itemId;
if (highlightItemOptionTask.hasHighlightEnabled()) {
itemId = projectItemsToFrameTask.getTreeItemForMousePosition(x, y, highlightItemOptionTask.getGravityRadius());
setHighlightItem(event, itemId);
}
}
function onFrameMouseClick(event) {
var placeholderOffset = (0,_graphics_dom__WEBPACK_IMPORTED_MODULE_2__.getElementOffset)(_data.layout.frameMousePanel),
x = event.pageX - placeholderOffset.left,
y = event.pageY - placeholderOffset.top,
projectItemsToFrameTask = _data.tasks.getTask("ProjectItemsToFrameTask"),
cursorItemOptionTask = _data.tasks.getTask("CursorItemOptionTask"),
highlightItemOptionTask = _data.tasks.getTask("HighlightItemOptionTask"),
newCursorItemId = projectItemsToFrameTask.getTreeItemForMousePosition(x, y, highlightItemOptionTask.getGravityRadius()),
target,
eventArgs;
target = event.target;
if (newCursorItemId !== null) {
eventArgs = getEventArgs(null, newCursorItemId);
trigger("onMouseClick", event, eventArgs);
if (!eventArgs.cancel) {
if (cursorItemOptionTask.hasCursorEnabled()) {
setCursorItem(event, newCursorItemId);
_data.layout.element.focus();
}
}
}
}
function onMouseMove(event) {
var placeholderOffset = (0,_graphics_dom__WEBPACK_IMPORTED_MODULE_2__.getElementOffset)(_data.layout.mousePanel),
x = event.pageX - placeholderOffset.left,
y = event.pageY - placeholderOffset.top,
createTransformTask = _data.tasks.getTask("CreateTransformTask"),
highlightItemOptionTask = _data.tasks.getTask("HighlightItemOptionTask"),
itemId;
if (highlightItemOptionTask.hasHighlightEnabled()) {
itemId = createTransformTask.getTreeItemForMousePosition(x, y, highlightItemOptionTask.getGravityRadius());
setHighlightItem(event, itemId);
}
}
function onCheckboxChange(event) {
var target = event.target;
var selectedId = target.getAttribute("data-id");
if (selectedId != null) {
var selectedItems = (_data.options.selectedItems || []).slice();
var eventArgs = getEventArgs(null, selectedId);
var position = selectedItems.findIndex(function (itemid) {
return selectedId == itemid;
});
trigger("onSelectionChanging", event, eventArgs);
if (!eventArgs.cancel) {
if (position >= 0) {
selectedItems.splice(position, 1);
} else {
selectedItems.push(selectedId);
}
_data.options.selectedItems = selectedItems;
if (position < 0) {
target.setAttribute("checked", "checked");
} else {
target.removeAttribute("checked");
} //refresh(false, false);
trigger("onSelectionChanged", event, eventArgs);
}
}
}
function onMouseClick(event) {
var placeholderOffset = (0,_graphics_dom__WEBPACK_IMPORTED_MODULE_2__.getElementOffset)(_data.layout.mousePanel),
x = event.pageX - placeholderOffset.left,
y = event.pageY - placeholderOffset.top,
createTransformTask = _data.tasks.getTask("CreateTransformTask"),
cursorItemOptionTask = _data.tasks.getTask("CursorItemOptionTask"),
highlightItemOptionTask = _data.tasks.getTask("HighlightItemOptionTask"),
newCursorItemId = createTransformTask.getTreeItemForMousePosition(x, y, highlightItemOptionTask.getGravityRadius()),
target,
buttonName,
eventArgs;
target = event.target;
if (newCursorItemId !== null) {
var buttonName = target.getAttribute("data-buttonname");
if ((0,_common__WEBPACK_IMPORTED_MODULE_5__.isNullOrEmpty)(buttonName)) {
buttonName = target.parentNode && target.parentNode.getAttribute("data-buttonname");
}
;
if (!(0,_common__WEBPACK_IMPORTED_MODULE_5__.isNullOrEmpty)(buttonName)) {
eventArgs = getEventArgs(null, newCursorItemId, buttonName);
trigger("onButtonClick", event, eventArgs);
} else if (target.getAttribute("name") === "checkbox" || target.getAttribute("name") === "selectiontext") {} else {
eventArgs = getEventArgs(null, newCursorItemId);
trigger("onMouseClick", event, eventArgs);
if (!eventArgs.cancel) {
if (cursorItemOptionTask.hasCursorEnabled()) {
setCursorItem(event, newCursorItemId);
_data.layout.element.focus();
}
}
}
}
}
function onMouseDblClick(event) {
var eventArgs,
highlightItemTask = _data.tasks.getTask("HighlightItemTask"),
highlightTreeItem = highlightItemTask.getHighlightTreeItem();
if (highlightTreeItem !== null) {
eventArgs = getEventArgs(null, highlightTreeItem);
trigger("onMouseDblClick", event, eventArgs);
}
}
function onKeyDown(event) {
var highlightItemTask = _data.tasks.getTask("HighlightItemTask"),
highlightItemOptionTask = _data.tasks.getTask("HighlightItemOptionTask"),
cursorItemTask = _data.tasks.getTask("CursorItemTask"),
cursorItemOptionTask = _data.tasks.getTask("CursorItemOptionTask"),
alignDiagramTask = _data.tasks.getTask('AlignDiagramTask'),
createTransformTask = _data.tasks.getTask('CreateTransformTask'),
transform = createTransformTask.getTransform(),
navigationItem = null,
newNavigationItem,
direction = null,
accepted,
layout = _data.layout;
if (highlightItemOptionTask.hasHighlightEnabled() && cursorItemOptionTask.hasCursorEnabled()) {
navigationItem = highlightItemTask.getHighlightTreeItem();
if (navigationItem === null) {
navigationItem = cursorItemTask.getCursorTreeItem();
}
} else if (highlightItemOptionTask.hasHighlightEnabled()) {
navigationItem = highlightItemTask.getHighlightTreeItem();
} else if (cursorItemOptionTask.hasCursorEnabled()) {
navigationItem = cursorItemTask.getCursorTreeItem();
}
if (navigationItem != null) {
switch (event.which) {
case 13:
/*Enter*/
if (cursorItemOptionTask.hasCursorEnabled()) {
setCursorItem(event, navigationItem);
event.preventDefault();
layout.element.focus();
}
break;
case 40:
/*Down*/
direction = _enums__WEBPACK_IMPORTED_MODULE_0__.OrientationType.Bottom;
break;
case 38:
/*Up*/
direction = _enums__WEBPACK_IMPORTED_MODULE_0__.OrientationType.Top;
break;
case 37:
/*Left*/
direction = _enums__WEBPACK_IMPORTED_MODULE_0__.OrientationType.Left;
break;
case 39:
/*Right*/
direction = _enums__WEBPACK_IMPORTED_MODULE_0__.OrientationType.Right;
break;
}
if (direction != null) {
accepted = false;
while (!accepted) {
accepted = true;
direction = transform.getOrientation(direction);
newNavigationItem = alignDiagramTask.getNextItem(navigationItem, direction);
if (newNavigationItem != null) {
event.preventDefault();
if (highlightItemOptionTask.hasHighlightEnabled()) {
setHighlightItem(event, newNavigationItem);
} else if (cursorItemOptionTask.hasCursorEnabled()) {
setCursorItem(event, newNavigationItem);
}
}
}
layout.element.focus();
}
}
}
function onDragStart(event) {
var scrollPanel = _data.layout.scrollPanel;
_dragFrom = new _graphics_structs_Point__WEBPACK_IMPORTED_MODULE_4__["default"](event.clientX, event.clientY);
_scrollFrom = new _graphics_structs_Point__WEBPACK_IMPORTED_MODULE_4__["default"](scrollPanel.scrollLeft, scrollPanel.scrollTop);
_dragImage = _dragImage || new Image();
event.dataTransfer.setDragImage(_dragImage, 0, 0);
}
function onDragOver(event) {
event.preventDefault();
event.dataTransfer.dropEffect = "move";
}
function onDragScroll(event) {
_scrollTo = new _graphics_structs_Point__WEBPACK_IMPORTED_MODULE_4__["default"](_scrollFrom.x - (event.clientX - _dragFrom.x), _scrollFrom.y - (event.clientY - _dragFrom.y));
if (_dragTimer == null) {
_dragTimer = window.setTimeout(function () {
var scrollPanel = _data.layout.scrollPanel;
scrollPanel.scrollLeft = _scrollTo.x;
scrollPanel.scrollTop = _scrollTo.y;
window.clearTimeout(_dragTimer);
_dragTimer = null;
}, 50);
}
}
function setHighlightItem(event, newHighlightItemId) {
var result = true,
eventArgs;
if (newHighlightItemId !== null) {
if (newHighlightItemId !== _data.options.highlightItem) {
eventArgs = getEventArgs(_data.options.highlightItem, newHighlightItemId);
_data.options.highlightItem = newHighlightItemId;
trigger("onHighlightChanging", event, eventArgs);
if (!eventArgs.cancel) {
refresh(false, false);
trigger("onHighlightChanged", event, eventArgs);
} else {
result = false;
}
}
} else {
if (_data.options.highlightItem !== null) {
eventArgs = getEventArgs(_data.options.highlightItem, null);
_data.options.highlightItem = null;
trigger("onHighlightChanging", event, eventArgs);
if (!eventArgs.cancel) {
refresh(false, false);
trigger("onHighlightChanged", event, eventArgs);
} else {
result = false;
}
}
}
return result;
}
function setCursorItem(event, newCursorItemId) {
var eventArgs;
if (newCursorItemId !== _data.options.cursorItem) {
eventArgs = getEventArgs(_data.options.cursorItem, newCursorItemId);
_data.options.cursorItem = newCursorItemId;
trigger("onCursorChanging", event, eventArgs);
if (!eventArgs.cancel) {
refresh(true, _debug);
trigger("onCursorChanged", event, eventArgs);
}
}
}
function getEventArgs(oldTreeItemId, newTreeItemId, name) {
return eventArgsFactory(_data, oldTreeItemId, newTreeItemId, name);
}
/**
* This method returns item position relative to the control's element.
*
* @returns {Rect} Returns item position
*/
function getItemPosition(itemId) {
var combinedContextsTask = _data.tasks.getTask("CombinedContextsTask"),
alignDiagramTask = _data.tasks.getTask("AlignDiagramTask"),
itemConfig = combinedContextsTask.getConfig(itemId),
itemPosition,
result,
offset,
panelOffset;
if (itemConfig && itemConfig.id != null) {
panelOffset = (0,_graphics_dom__WEBPACK_IMPORTED_MODULE_2__.getElementOffset)(_data.layout.mousePanel);
offset = (0,_graphics_dom__WEBPACK_IMPORTED_MODULE_2__.getElementOffset)(_data.layout.element);
itemPosition = alignDiagramTask.getItemPosition(itemId);
result = new _graphics_structs_Rect__WEBPACK_IMPORTED_MODULE_6__["default"](itemPosition.actualPosition).translate(panelOffset.left, panelOffset.top).translate(-offset.left, -offset.top);
}
return result;
}
;
function trigger(eventHandlerName, event, eventArgs) {
var eventHandler = _data.options[eventHandlerName];
if (eventHandler != null) {
eventHandler(event, eventArgs);
}
}
update();
/* init control on create */
return {
destroy: destroy,
setOptions: setOptions,
getOptions: getOptions,
setOption: setOption,
getOption: getOption,
update: update,
getItemPosition: getItemPosition
};
}
;
/***/ }),
/***/ "./src/BasePdfkitPlugin.js":
/*!*********************************!*\
!*** ./src/BasePdfkitPlugin.js ***!
\*********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ BasePdfkitPlugin)
/* harmony export */ });
/* harmony import */ var _graphics_structs_Size__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./graphics/structs/Size */ "./src/graphics/structs/Size.js");
/* harmony import */ var _graphics_PdfGraphics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./graphics/PdfGraphics */ "./src/graphics/PdfGraphics.js");
/* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enums */ "./src/enums.js");
/**
* Creates PDFKit Family Diagram Plugin
* @class BasePdfkitPlugin
*
* @param {object} options Family Diagram Configuration object
*
* @returns {BasePdfkitPlugin} Returns reference to PDFKit Plugin instance.
*/
function BasePdfkitPlugin(options, createTaskManager, templates) {
var _data = {
doc: null,
options: options,
tasks: null,
graphics: null,
controlSize: null
},
_debug = false;
function getOptions() {
return _data.options;
}
function getGraphics() {
return _data.graphics;
}
function setLayout(options) {
var graphics = _data.graphics,
frameMousePanelRect = options.frameMousePanelRect,
titlesMousePanelRect = options.titlesMousePanelRect,
scrollPanelRect = options.scrollPanelRect,
controlSize = options.controlSize;
graphics.position("frameplaceholder", frameMousePanelRect.x, frameMousePanelRect.y, frameMousePanelRect.width, frameMousePanelRect.height);
graphics.position("titlesplaceholder", titlesMousePanelRect.x, titlesMousePanelRect.y, titlesMousePanelRect.width, titlesMousePanelRect.height);
graphics.position("placeholder", scrollPanelRect.x, scrollPanelRect.y, scrollPanelRect.width, scrollPanelRect.height);
_data.controlSize = controlSize;
}
function _disableNotAvailableFunctionality() {
/* disable functionality not available in PDF */
_data.options.scale = 1;
_data.options.showFrame = false;
_data.options.hasButtons = _enums__WEBPACK_IMPORTED_MODULE_0__.Enabled.False;
_data.options.pageFitMode = _enums__WEBPACK_IMPORTED_MODULE_0__.PageFitMode.AutoSize;
_data.options.autoSizeMinimum = new _graphics_structs_Size__WEBPACK_IMPORTED_MODULE_1__["default"](0, 0);
_data.options.autoSizeMaximum = new _graphics_structs_Size__WEBPACK_IMPORTED_MODULE_1__["default"](1000000, 1000000);
}
/**
* Calculates size of the diagram required to render all nodes without truncation.
*
* @param {object} doc PDFKit document
* @param {number} positionX Diagram placement X coordinate
* @param {number} positionY Diagram placement Y coordinate
* @returns {Size} Returns size of the diagram
*/
function draw(doc, positionX, positionY) {
_data.doc = doc;
_data.tasks = createTaskManager(getOptions, getGraphics, setLayout, templates);
_data.graphics = new _graphics_PdfGraphics__WEBPACK_IMPORTED_MODULE_2__["default"](_data.doc);
_data.graphics.debug = _debug;
_disableNotAvailableFunctionality();
_data.doc.save();
_data.doc.translate(positionX, positionY);
_data.tasks.process('OptionsTask', null, _debug);
_data.graphics.clean();
_data.doc.restore();
return new _graphics_structs_Size__WEBPACK_IMPORTED_MODULE_1__["default"](_data.controlSize);
}
/**
* Calculates size of the diagram required to render all nodes without truncation.
*
* @returns {Size} Returns size of the diagram
*/
function getSize() {
_data.tasks = createTaskManager(getOptions, getGraphics, setLayout, templates);
_data.graphics = new _graphics_PdfGraphics__WEBPACK_IMPORTED_MODULE_2__["default"](_data.doc);
_data.graphics.debug = _debug;
_disableNotAvailableFunctionality();
_data.tasks.process('OptionsTask', 'ApplyLayoutChangesTask', _debug);
_data.graphics.clean();
return new _graphics_structs_Size__WEBPACK_IMPORTED_MODULE_1__["default"](_data.controlSize);
}
return {
draw: draw,
getSize: getSize
};
}
;
/***/ }),
/***/ "./src/CalloutAnnotationControl.js":
/*!*****************************************!*\
!*** ./src/CalloutAnnotationControl.js ***!
\*****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ CalloutAnnotationControl)
/* harmony export */ });
/* harmony import */ var _graphics_structs_Rect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./graphics/structs/Rect */ "./src/graphics/structs/Rect.js");
/* harmony import */ var _graphics_createGraphics__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./graphics/createGraphics */ "./src/graphics/createGraphics.js");
/* harmony import */ var _graphics_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./graphics/dom */ "./src/graphics/dom.js");
/* harmony import */ var _common_jsonml_html__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./common/jsonml-html */ "./src/common/jsonml-html.js");
/* harmony import */ var _graphics_shapes_Callout__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./graphics/shapes/Callout */ "./src/graphics/shapes/Callout.js");
/**
* Creates JavaScript Callout Annotation Control
*
* @class Control
* @param {object} element Reference to placeholder `div` element in the DOM. The control renders its content
* inside of that div element.
* @param {CalloutAnnotationControlConfig} options Callout Annotation Configuration object
*
* @returns {CalloutAnnotationControl} Returns reference to callout annotation control.
*/
function CalloutAnnotationControl(element, options) {
var _data = {
name: "calloutcontrol",
element: element,
options: options,
placeholder: null,
panelSize: null,
graphics: null,
labelTemplate: null
};
if (!element) {
throw "Control's placeholder element is undefined";
}
if (!options) {
throw "Control's options argument is undefined";
}
function createLayout() {
var viewportSize = (0,_graphics_dom__WEBPACK_IMPORTED_MODULE_0__.getInnerSize)(_data.element);
_data.panelSize = new _graphics_structs_Rect__WEBPACK_IMPORTED_MODULE_1__["default"](0, 0, viewportSize.width, viewportSize.height);
var pixelAlignmentFix = (0,_graphics_dom__WEBPACK_IMPORTED_MODULE_0__.getFixOfPixelAlignment)(element);
_common_jsonml_html__WEBPACK_IMPORTED_MODULE_2__["default"].appendDOM(_data.element, _common_jsonml_html__WEBPACK_IMPORTED_MODULE_2__["default"].toHTML(["div",
/* root control panel */
{
"tabindex": 0,
"style": {
"position": "relative",
"overflow": "hidden",
"top": "0px",
"left": "0px",
"width": _data.panelSize.width,
"height": _data.panelSize.height,
"padding": "0px",
"marginBottom": "0px",
"marginRight": "0px",
"marginLeft": pixelAlignmentFix.width + "px",
/* fixes div pixel alignment */
"marginTop": pixelAlignmentFix.height + "px"
},
"name": "placeholder",
"class": _data.name,
"$": function $(element) {
_data.placeholder = element;
}
}]));
_data.graphics = (0,_graphics_createGraphics__WEBPACK_IMPORTED_MODULE_3__["default"])(_data.element);
}
;
function cleanLayout() {
if (_data.graphics !== null) {
_data.graphics.clean();
}
_data.graphics = null;
var placeholder = _data.placeholder;
if (placeholder != null) {
var parent = placeholder.parentNode;
if (parent != null) {
parent.removeChild(placeholder);
}
}
}
function updateLayout() {
var viewportSize = (0,_graphics_dom__WEBPACK_IMPORTED_MODULE_0__.getInnerSize)(_data.element),
pixelAlignmentFix = (0,_graphics_dom__WEBPACK_IMPORTED_MODULE_0__.getFixOfPixelAlignment)(_data.element);
_data.panelSize = new _graphics_structs_Rect__WEBPACK_IMPORTED_MODULE_1__["default"](0, 0, viewportSize.width, viewportSize.height);
_common_jsonml_html__WEBPACK_IMPORTED_MODULE_2__["default"].applyStyles(_data.placeholder, {
"width": _data.panelSize.width,
"height": _data.panelSize.height,
"marginBottom": "0px",
"marginRight": "0px",
"marginLeft": pixelAlignmentFix.width + "px",
/* fixes div pixel alignment */
"marginTop": pixelAlignmentFix.height + "px"
});
}
function update(recreate) {
if (recreate) {
cleanLayout();
createLayout();
redraw();
} else {
updateLayout();
_data.graphics.resize("placeholder", _data.panelSize.width, _data.panelSize.height);
_data.graphics.begin();
redraw();
_data.graphics.end();
}
}
function redraw() {
var annotationConfig = _data.options,
callout;
_data.graphics.activate("placeholder");
if (annotationConfig.position != null) {
callout = new _graphics_shapes_Callout__WEBPACK_IMPORTED_MODULE_4__["default"](_data.graphics);
primitives.mergeObjects(callout, options);
var position = annotationConfig.position;
/* offset position */
position = new _graphics_structs_Rect__WEBPACK_IMPORTED_MODULE_1__["default"](annotationConfig.position).offset(annotationConfig.offset);
callout.draw(annotationConfig.snapPoint, position);
}
}
function destroy() {
cleanLayout();
}
;
/**
* Call this method to update controls configuration. Control uses default Config instance to initialize itself,
* so it sets only options provided in the options parameter.
*
* @param {object} options Options
*/
function setOptions(options) {
for (var option in options) {
if (options.hasOwnProperty(option)) {
_data.options[option] = options[option];
}
}
}
/**
* This method returns current configuration object.
*
* @returns {object} Returns reference to current configuration object
*/
function getOptions() {
return _data.options;
}
/**
* This method returns configuration option by name.
*
* @param {*} option Option name
*/
function getOption(option) {
return _data.options[option];
}
/**
* Sets configuration option of the control by name.
*
* @param {*} option Option name
* @param {*} value Option value
*/
function setOption(option, value) {
return _data.options[option] = value;
}
update(true);
/* init control on create */
return {
destroy: destroy,
setOptions: setOptions,
getOptions: getOptions,
setOption: setOption,
getOption: getOption,
update: update
};
}
;
/***/ }),
/***/ "./src/ConnectorAnnotationControl.js":
/*!*******************************************!*\
!*** ./src/ConnectorAnnotationControl.js ***!
\*******************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ ConnectorAnnotationControl)
/* harmony export */ });
/* harmony import */ var _graphics_structs_Rect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./graphics/structs/Rect */ "./src/graphics/structs/Rect.js");
/* harmony import */ var _graphics_createGraphics__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./graphics/createGraphics */ "./src/graphics/createGraphics.js");
/* harmony import */ var _graphics_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./graphics/dom */ "./src/graphics/dom.js");
/* harmony import */ var _common_jsonml_html__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./common/jsonml-html */ "./src/common/jsonml-html.js");
/* harmony import */ var _graphics_annotations_ConnectorAnnotation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./graphics/annotations/ConnectorAnnotation */ "./src/graphics/annotations/ConnectorAnnotation.js");
/* harmony import */ var _templates_html_AnnotationLabelTemplate__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./templates/html/AnnotationLabelTemplate */ "./src/templates/html/AnnotationLabelTemplate.js");
/**
* Creates JavaScript Connector Annotation Control
* @class Control
* @param {object} element Reference to placeholder `div` element in the DOM. The control renders its content
* inside of that div element.
* @param {ConnectorAnnotationControlConfig} options Connector Annotation Configuration object
*
* @returns {ConnectorAnnotationControl} Returns reference to connector annotation control.
*/
function ConnectorAnnotationControl(element, options) {
var _data = {
name: "connectorcontrol",
element: element,
options: options,
placeholder: null,
panelSize: null,
graphics: null,
labelTemplate: null,
connector: null
};
if (!element) {
throw "Control's placeholder element is undefined";
}
if (!options) {
throw "Control's options argument is undefined";
}
function createLayout() {
var viewportSize = (0,_graphics_dom__WEBPACK_IMPORTED_MODULE_0__.getInnerSize)(_data.element);
_data.panelSize = new _graphics_structs_Rect__WEBPACK_IMPORTED_MODULE_1__["default"](0, 0, viewportSize.width, viewportSize.height);
var pixelAlignmentFix = (0,_graphics_dom__WEBPACK_IMPORTED_MODULE_0__.getFixOfPixelAlignment)(element);
_common_jsonml_html__WEBPACK_IMPORTED_MODULE_2__["default"].appendDOM(_data.element, _common_jsonml_html__WEBPACK_IMPORTED_MODULE_2__["default"].toHTML(["div",
/* root control panel */
{
"tabindex": 0,
"style": {
"position": "relative",
"overflow": "hidden",
"top": "0px",
"left": "0px",
"width": _data.panelSize.width,
"height": _data.panelSize.height,
"padding": "0px",
"marginBottom": "0px",
"marginRight": "0px",
"marginLeft": pixelAlignmentFix.width + "px",
/* fixes div pixel alignment */
"marginTop": pixelAlignmentFix.height + "px"
},
"name": "placeholder",
"class": _data.name,
"$": function $(element) {
_data.placeholder = element;
}
}]));
_data.graphics = (0,_graphics_createGraphics__WEBPACK_IMPORTED_MODULE_3__["default"])(_data.element);
_data.connector = new _graphics_annotations_ConnectorAnnotation__WEBPACK_IMPORTED_MODULE_4__["default"]();
}
;
function cleanLayout() {
if (_data.graphics !== null) {
_data.graphics.clean();
}
_data.graphics = null;
var placeholder = _data.placeholder;
if (placeholder != null) {
var parent = placeholder.parentNode;
if (parent != null) {
parent.removeChild(placeholder);
}
}
}
function updateLayout() {
var viewportSize = (0,_graphics_dom__WEBPACK_IMPORTED_MODULE_0__.getInnerSize)(_data.element),
pixelAlignmentFix = (0,_graphics_dom__WEBPACK_IMPORTED_MODULE_0__.getFixOfPixelAlignment)(_data.element);
_data.panelSize = new _graphics_structs_Rect__WEBPACK_IMPORTED_MODULE_1__["default"](0, 0, viewportSize.width, viewportSize.height);
_common_jsonml_html__WEBPACK_IMPORTED_MODULE_2__["default"].applyStyles(_data.placeholder, {
"width": _data.panelSize.width,
"height": _data.panelSize.height,
"marginBottom": "0px",
"marginRight": "0px",
"marginLeft": pixelAlignmentFix.width + "px",
/* fixes div pixel alignment */
"marginTop": pixelAlignmentFix.height + "px"
});
}
function update(recreate) {
if (recreate) {
_data.labelTemplate = (0,_templates_html_AnnotationLabelTemplate__WEBPACK_IMPORTED_MODULE_5__["default"])(_data.options);
cleanLayout();
createLayout();
_data.graphics.begin();
_data.connector.draw(_data.options, _data.graphics, _data.panelSize, _data.labelTemplate);
_data.graphics.end();
} else {
updateLayout();
_data.graphics.resize("placeholder", _data.panelSize.width, _data.panelSize.height);
_data.graphics.begin();
_data.connector.draw(_data.options, _data.graphics, _data.panelSize, _data.labelTemplate);
_data.graphics.end();
}
}
function destroy() {
cleanLayout();
}
;
/**
* Call this method to update controls configuration. Control uses default Config instance to initialize itself,
* so it sets only options provided in the options parameter.
*
* @param {object} options Options
*/
function setOptions(options) {
for (var option in options) {
if (options.hasOwnProperty(option)) {
_data.options[option] = options[option];
}
}
}
/**
* This method returns current configuration object.
*
* @returns {object} Returns reference to current configuration object
*/
function getOptions() {
return _data.options;
}
/**
* This method returns configuration option by name.
*
* @param {*} option Option name
*/
function getOption(option) {
return _data.options[option];
}
/**
* Sets configuration option of the control by name.
*
* @param {*} option Option name
* @param {*} value Option value
*/
function setOption(option, value) {
return _data.options[option] = value;
}
update(true);
/* init control on create */
return {
destroy: destroy,
setOptions: setOptions,
getOptions: getOptions,
setOption: setOption,
getOption: getOption,
update: update
};
}
;
/***/ }),
/***/ "./src/FamDiagram.js":
/*!***************************!*\
!*** ./src/FamDiagram.js ***!
\***************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ FamDiagram)
/* harmony export */ });
/* harmony import */ var _templates_html_AnnotationLabelTemplate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./templates/html/AnnotationLabelTemplate */ "./src/templates/html/AnnotationLabelTemplate.js");
/* harmony import */ var _templates_html_EndPointTemplate__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./templates/html/EndPointTemplate */ "./src/templates/html/EndPointTemplate.js");
/* harmony import */ var _templates_html_ButtonsTemplate__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./templates/html/ButtonsTemplate */ "./src/templates/html/ButtonsTemplate.js");
/* harmony import */ var _templates_html_CustomRenderTemplate__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./templates/html/CustomRenderTemplate */ "./src/templates/html/CustomRenderTemplate.js");
/* harmony import */ var _templates_html_CheckBoxTemplate__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./templates/html/CheckBoxTemplate */ "./src/templates/html/CheckBoxTemplate.js");
/* harmony import */ var _templates_html_CursorTemplate__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./templates/html/CursorTemplate */ "./src/templates/html/CursorTemplate.js");
/* harmony import */ var _templates_html_DotHighlightTemplate__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./templates/html/DotHighlightTemplate */ "./src/templates/html/DotHighlightTemplate.js");
/* harmony import */ var _templates_html_GroupTitleTemplate__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./templates/html/GroupTitleTemplate */ "./src/templates/html/GroupTitleTemplate.js");
/* harmony import */ var _templates_html_HighlightTemplate__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./templates/html/HighlightTemplate */ "./src/templates/html/HighlightTemplate.js");
/* harmony import */ var _templates_html_ItemTemplate__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./templates/html/ItemTemplate */ "./src/templates/html/ItemTemplate.js");
/* harmony import */ var _templates_html_UserTemplate__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./templates/html/UserTemplate */ "./src/templates/html/UserTemplate.js");
/* harmony import */ var _templates_html_LevelTitleTemplate__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./templates/html/LevelTitleTemplate */ "./src/templates/html/