Release `v5.24.1`

This commit is contained in:
jos 2018-08-26 17:47:02 +02:00
parent d3192e9fbe
commit 2644cb9d1c
11 changed files with 247 additions and 201 deletions

View File

@ -3,7 +3,7 @@
https://github.com/josdejong/jsoneditor
## not yet released, version 5.24.1
## 2018-08-26, version 5.24.1
- Context menu and color picker are now absolutely positioned, and
can overflow the borders of the editor.

View File

@ -24,8 +24,8 @@
* Copyright (c) 2011-2017 Jos de Jong, http://jsoneditoronline.org
*
* @author Jos de Jong, <wjosdejong@gmail.com>
* @version 5.24.0
* @date 2018-08-22
* @version 5.24.1
* @date 2018-08-26
*/
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
@ -97,8 +97,8 @@ return /******/ (function(modules) { // webpackBootstrap
var VanillaPicker = __webpack_require__(5); // may be undefined in case of minimalist bundle
var treemode = __webpack_require__(6);
var textmode = __webpack_require__(27);
var util = __webpack_require__(11);
var textmode = __webpack_require__(28);
var util = __webpack_require__(12);
/**
* @constructor JSONEditor
@ -1446,16 +1446,16 @@ return /******/ (function(modules) { // webpackBootstrap
var History = __webpack_require__(8);
var SearchBox = __webpack_require__(9);
var ContextMenu = __webpack_require__(10);
var TreePath = __webpack_require__(15);
var Node = __webpack_require__(16);
var ModeSwitcher = __webpack_require__(25);
var util = __webpack_require__(11);
var autocomplete = __webpack_require__(26);
var showSortModal = __webpack_require__(21);
var showTransformModal = __webpack_require__(23);
var translate = __webpack_require__(14).translate;
var setLanguages = __webpack_require__(14).setLanguages;
var setLanguage = __webpack_require__(14).setLanguage;
var TreePath = __webpack_require__(16);
var Node = __webpack_require__(17);
var ModeSwitcher = __webpack_require__(26);
var util = __webpack_require__(12);
var autocomplete = __webpack_require__(27);
var showSortModal = __webpack_require__(22);
var showTransformModal = __webpack_require__(24);
var translate = __webpack_require__(15).translate;
var setLanguages = __webpack_require__(15).setLanguages;
var setLanguage = __webpack_require__(15).setLanguage;
var DEFAULT_MODAL_ANCHOR = document.body; // TODO: this constant is defined twice
@ -1585,15 +1585,10 @@ return /******/ (function(modules) { // webpackBootstrap
colorPicker: true,
onColorPicker: function (parent, color, onChange) {
if (VanillaPicker) {
var contentRect = editor.content.getBoundingClientRect();
var parentRect = parent.getBoundingClientRect();
var pickerWidth = 250;
var pickerRight = parentRect.right + pickerWidth;
new VanillaPicker({
parent: parent,
color: color,
popup: (pickerRight < contentRect.right) ? 'bottom' : 'left',
popup: 'bottom',
onDone: function (color) {
var alpha = color.rgba[3]
var hex = (alpha === 1)
@ -2484,8 +2479,6 @@ return /******/ (function(modules) { // webpackBootstrap
if (this.options && this.options.modes && this.options.modes.length) {
var me = this;
this.modeSwitcher = new ModeSwitcher(this.menu, this.options.modes, this.options.mode, function onSwitch(mode) {
me.modeSwitcher.destroy();
// switch mode and restore focus
me.setMode(mode);
me.modeSwitcher.focus();
@ -3096,7 +3089,7 @@ return /******/ (function(modules) { // webpackBootstrap
});
var menu = new ContextMenu(items, {close: onClose});
menu.show(anchor, this.content);
menu.show(anchor, editor.frame);
};
/**
@ -4033,17 +4026,9 @@ return /******/ (function(modules) { // webpackBootstrap
'use strict';
var util = __webpack_require__(11);
var translate = __webpack_require__(14).translate;
/**
* Node.getRootNode shim
* @param {Node} node node to check
* @return {Node} node's rootNode or `window` if there is ShadowDOM is not supported.
*/
function getRootNode(node){
return node.getRootNode && node.getRootNode() || window;
}
var createAbsoluteAnchor = __webpack_require__(11).createAbsoluteAnchor;
var util = __webpack_require__(12);
var translate = __webpack_require__(15).translate;
/**
* A context menu
@ -4236,74 +4221,55 @@ return /******/ (function(modules) { // webpackBootstrap
/**
* Attach the menu to an anchor
* @param {HTMLElement} anchor Anchor where the menu will be attached
* as sibling.
* @param {HTMLElement} [contentWindow] The DIV with with the (scrollable) contents
* @param {HTMLElement} anchor Anchor where the menu will be attached as sibling.
* @param {HTMLElement} frame The root of the JSONEditor window
*/
ContextMenu.prototype.show = function (anchor, contentWindow) {
ContextMenu.prototype.show = function (anchor, frame) {
this.hide();
// determine whether to display the menu below or above the anchor
var showBelow = true;
var parent = anchor.parentNode;
var anchorRect = anchor.getBoundingClientRect();
var parentRect = parent.getBoundingClientRect()
var parentRect = parent.getBoundingClientRect();
var frameRect = frame.getBoundingClientRect();
if (contentWindow) {
var me = this;
this.dom.absoluteAnchor = createAbsoluteAnchor(anchor, frame, function () {
me.hide()
});
var contentRect = contentWindow.getBoundingClientRect();
if (anchorRect.bottom + this.maxHeight < contentRect.bottom) {
// fits below -> show below
}
else if (anchorRect.top - this.maxHeight > contentRect.top) {
// fits above -> show above
showBelow = false;
}
else {
// doesn't fit above nor below -> show below
}
if (anchorRect.bottom + this.maxHeight < frameRect.bottom) {
// fits below -> show below
}
else if (anchorRect.top - this.maxHeight > frameRect.top) {
// fits above -> show above
showBelow = false;
}
else {
// doesn't fit above nor below -> show below
}
var leftGap = anchorRect.left - parentRect.left;
var topGap = anchorRect.top - parentRect.top;
// position the menu
if (showBelow) {
// display the menu below the anchor
var anchorHeight = anchor.offsetHeight;
this.dom.menu.style.left = leftGap + 'px';
this.dom.menu.style.left = '0';
this.dom.menu.style.top = topGap + anchorHeight + 'px';
this.dom.menu.style.bottom = '';
}
else {
// display the menu above the anchor
this.dom.menu.style.left = leftGap + 'px';
this.dom.menu.style.top = topGap + 'px';
this.dom.menu.style.left = '0';
this.dom.menu.style.top = '';
this.dom.menu.style.bottom = '0px';
}
// find the root node of the page (window, or a shadow dom root element)
this.rootNode = getRootNode(anchor);
// attach the menu to the parent of the anchor
parent.insertBefore(this.dom.root, parent.firstChild);
// create and attach event listeners
var me = this;
var list = this.dom.list;
this.eventListeners.mousedown = util.addEventListener(this.rootNode, 'mousedown', function (event) {
// hide menu on click outside of the menu
var target = event.target;
if ((target != list) && !me._isChildOf(target, list)) {
me.hide();
event.stopPropagation();
event.preventDefault();
}
});
this.eventListeners.keydown = util.addEventListener(this.rootNode, 'keydown', function (event) {
me._onKeyDown(event);
});
// attach the menu to the temporary, absolute anchor
// parent.insertBefore(this.dom.root, anchor);
this.dom.absoluteAnchor.appendChild(this.dom.root);
// move focus to the first button in the context menu
this.selection = util.getSelection();
@ -4322,6 +4288,12 @@ return /******/ (function(modules) { // webpackBootstrap
* Hide the context menu if visible
*/
ContextMenu.prototype.hide = function () {
// remove temporary absolutely positioned anchor
if (this.dom.absoluteAnchor) {
this.dom.absoluteAnchor.destroy();
delete this.dom.absoluteAnchor;
}
// remove the menu from the DOM
if (this.dom.root.parentNode) {
this.dom.root.parentNode.removeChild(this.dom.root);
@ -4330,18 +4302,6 @@ return /******/ (function(modules) { // webpackBootstrap
}
}
// remove all event listeners
// all event listeners are supposed to be attached to document.
for (var name in this.eventListeners) {
if (this.eventListeners.hasOwnProperty(name)) {
var fn = this.eventListeners[name];
if (fn) {
util.removeEventListener(this.rootNode, name, fn);
}
delete this.eventListeners[name];
}
}
if (ContextMenu.visibleMenu == this) {
ContextMenu.visibleMenu = undefined;
}
@ -4500,35 +4460,102 @@ return /******/ (function(modules) { // webpackBootstrap
}
};
/**
* Test if an element is a child of a parent element.
* @param {Element} child
* @param {Element} parent
* @return {boolean} isChild
*/
ContextMenu.prototype._isChildOf = function (child, parent) {
var e = child.parentNode;
while (e) {
if (e == parent) {
return true;
}
e = e.parentNode;
}
return false;
};
module.exports = ContextMenu;
/***/ },
/* 11 */
/***/ function(module, exports, __webpack_require__) {
var util = __webpack_require__(12);
/**
* Create an anchor element absolutely positioned in the `parent`
* element.
* @param {HTMLElement} anchor
* @param {HTMLElement} parent
* @param [onDestroy(function(anchor)] Callback when the anchor is destroyed
* @returns {HTMLElement}
*/
exports.createAbsoluteAnchor = function (anchor, parent, onDestroy) {
var root = getRootNode(anchor);
var eventListeners = {};
var anchorRect = anchor.getBoundingClientRect();
var frameRect = parent.getBoundingClientRect();
var absoluteAnchor = document.createElement('div');
absoluteAnchor.className = 'jsoneditor-anchor';
absoluteAnchor.style.position = 'absolute';
absoluteAnchor.style.left = (anchorRect.left - frameRect.left) + 'px';
absoluteAnchor.style.top = (anchorRect.top - frameRect.top) + 'px';
absoluteAnchor.style.width = (anchorRect.width - 2) + 'px';
absoluteAnchor.style.height = (anchorRect.height - 2) + 'px';
absoluteAnchor.style.boxSizing = 'border-box';
parent.appendChild(absoluteAnchor);
function destroy () {
// remove temporary absolutely positioned anchor
if (absoluteAnchor && absoluteAnchor.parentNode) {
absoluteAnchor.parentNode.removeChild(absoluteAnchor);
// remove all event listeners
// all event listeners are supposed to be attached to document.
for (var name in eventListeners) {
if (eventListeners.hasOwnProperty(name)) {
var fn = eventListeners[name];
if (fn) {
util.removeEventListener(root, name, fn);
}
delete eventListeners[name];
}
}
if (typeof onDestroy === 'function') {
onDestroy(anchor);
}
}
}
// create and attach event listeners
var destroyIfOutside = function (event) {
var target = event.target;
if ((target !== absoluteAnchor) && !util.isChildOf(target, absoluteAnchor)) {
destroy();
event.stopPropagation();
event.preventDefault();
}
}
eventListeners.mousedown = util.addEventListener(root, 'mousedown', destroyIfOutside);
eventListeners.mousewheel = util.addEventListener(root, 'mousewheel', destroyIfOutside);
eventListeners.scroll = util.addEventListener(root, 'scroll', destroyIfOutside);
absoluteAnchor.destroy = destroy;
return absoluteAnchor
}
/**
* Node.getRootNode shim
* @param {HTMLElement} node node to check
* @return {HTMLElement} node's rootNode or `window` if there is ShadowDOM is not supported.
*/
function getRootNode(node){
return (typeof node.getRootNode === 'function')
? node.getRootNode()
: window;
}
/***/ },
/* 12 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var jsonlint = __webpack_require__(12);
var jsonMap = __webpack_require__(13);
var jsonlint = __webpack_require__(13);
var jsonMap = __webpack_require__(14);
/**
* Parse JSON using the parser built-in in the browser.
@ -5198,6 +5225,24 @@ return /******/ (function(modules) { // webpackBootstrap
}
};
/**
* Test if an element is a child of a parent element.
* @param {Element} elem
* @param {Element} parent
* @return {boolean} returns true if elem is a child of the parent
*/
exports.isChildOf = function (elem, parent) {
var e = elem.parentNode;
while (e) {
if (e === parent) {
return true;
}
e = e.parentNode;
}
return false;
};
/**
* Parse a JSON path like '.items[3].name' into an array
* @param {string} jsonPath
@ -5572,7 +5617,7 @@ return /******/ (function(modules) { // webpackBootstrap
}
/***/ },
/* 12 */
/* 13 */
/***/ function(module, exports, __webpack_require__) {
/* Jison generated parser */
@ -5995,7 +6040,7 @@ return /******/ (function(modules) { // webpackBootstrap
}
/***/ },
/* 13 */
/* 14 */
/***/ function(module, exports) {
'use strict';
@ -6411,7 +6456,7 @@ return /******/ (function(modules) { // webpackBootstrap
/***/ },
/* 14 */
/* 15 */
/***/ function(module, exports) {
'use strict';
@ -6645,13 +6690,13 @@ return /******/ (function(modules) { // webpackBootstrap
};
/***/ },
/* 15 */
/* 16 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var ContextMenu = __webpack_require__(10);
var translate = __webpack_require__(14).translate;
var translate = __webpack_require__(15).translate;
/**
* Creates a component that visualize path selection in tree based editors
@ -6760,20 +6805,21 @@ return /******/ (function(modules) { // webpackBootstrap
module.exports = TreePath;
/***/ },
/* 16 */
/* 17 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var jmespath = __webpack_require__(17);
var naturalSort = __webpack_require__(18);
var jmespath = __webpack_require__(18);
var naturalSort = __webpack_require__(19);
var createAbsoluteAnchor = __webpack_require__(11).createAbsoluteAnchor;
var ContextMenu = __webpack_require__(10);
var appendNodeFactory = __webpack_require__(19);
var showMoreNodeFactory = __webpack_require__(20);
var showSortModal = __webpack_require__(21);
var showTransformModal = __webpack_require__(23);
var util = __webpack_require__(11);
var translate = __webpack_require__(14).translate;
var appendNodeFactory = __webpack_require__(20);
var showMoreNodeFactory = __webpack_require__(21);
var showSortModal = __webpack_require__(22);
var showTransformModal = __webpack_require__(24);
var util = __webpack_require__(12);
var translate = __webpack_require__(15).translate;
var DEFAULT_MODAL_ANCHOR = document.body; // TODO: this constant is defined twice
@ -7380,17 +7426,16 @@ return /******/ (function(modules) { // webpackBootstrap
* Remove the DOM of this node and it's childs and recreate it again
*/
Node.prototype.recreateDom = function() {
// only recreate dom if there is a dom already
if (!this.dom || ! this.dom.tr || !this.dom.tr.parentNode) {
return;
if (this.dom && this.dom.tr && this.dom.tr.parentNode) {
var domAnchor = this._detachFromDom();
this.clearDom();
this._attachToDom(domAnchor);
}
else {
this.clearDom();
}
var domAnchor = this._detachFromDom();
// delete the DOM
this.clearDom();
this._attachToDom(domAnchor);
};
/**
@ -10121,7 +10166,11 @@ return /******/ (function(modules) { // webpackBootstrap
node._deleteDomColor();
node.updateDom();
this.editor.options.onColorPicker(this.dom.color, this.value, function onChange(value) {
var colorAnchor = createAbsoluteAnchor(this.dom.color, this.editor.frame);
this.editor.options.onColorPicker(colorAnchor, this.value, function onChange(value) {
colorAnchor.destroy();
if (typeof value === 'string' && value !== node.value) {
// force recreating the color block, to cleanup any attached color picker
node._deleteDomColor();
@ -11080,7 +11129,7 @@ return /******/ (function(modules) { // webpackBootstrap
}
var menu = new ContextMenu(items, {close: onClose});
menu.show(anchor, this.editor.content);
menu.show(anchor, this.editor.frame);
};
/**
@ -11239,7 +11288,7 @@ return /******/ (function(modules) { // webpackBootstrap
/***/ },
/* 17 */
/* 18 */
/***/ function(module, exports, __webpack_require__) {
(function(exports) {
@ -12912,7 +12961,7 @@ return /******/ (function(modules) { // webpackBootstrap
/***/ },
/* 18 */
/* 19 */
/***/ function(module, exports) {
/*
@ -12963,14 +13012,14 @@ return /******/ (function(modules) { // webpackBootstrap
/***/ },
/* 19 */
/* 20 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var util = __webpack_require__(11);
var util = __webpack_require__(12);
var ContextMenu = __webpack_require__(10);
var translate = __webpack_require__(14).translate;
var translate = __webpack_require__(15).translate;
/**
* A factory function to create an AppendNode, which depends on a Node
@ -13218,12 +13267,12 @@ return /******/ (function(modules) { // webpackBootstrap
/***/ },
/* 20 */
/* 21 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var translate = __webpack_require__(14).translate;
var translate = __webpack_require__(15).translate;
/**
* A factory function to create an ShowMoreNode, which depends on a Node
@ -13379,11 +13428,11 @@ return /******/ (function(modules) { // webpackBootstrap
/***/ },
/* 21 */
/* 22 */
/***/ function(module, exports, __webpack_require__) {
var picoModal = __webpack_require__(22);
var translate = __webpack_require__(14).translate;
var picoModal = __webpack_require__(23);
var translate = __webpack_require__(15).translate;
/**
* Show advanced sorting modal
@ -13499,7 +13548,7 @@ return /******/ (function(modules) { // webpackBootstrap
/***/ },
/* 22 */
/* 23 */
/***/ function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/**
@ -14108,14 +14157,14 @@ return /******/ (function(modules) { // webpackBootstrap
/***/ },
/* 23 */
/* 24 */
/***/ function(module, exports, __webpack_require__) {
var jmespath = __webpack_require__(17);
var picoModal = __webpack_require__(22);
var Selectr = __webpack_require__(24);
var translate = __webpack_require__(14).translate;
var debounce = __webpack_require__(11).debounce;
var jmespath = __webpack_require__(18);
var picoModal = __webpack_require__(23);
var Selectr = __webpack_require__(25);
var translate = __webpack_require__(15).translate;
var debounce = __webpack_require__(12).debounce;
var MAX_PREVIEW_LINES = 100;
@ -14415,7 +14464,7 @@ return /******/ (function(modules) { // webpackBootstrap
/***/ },
/* 24 */
/* 25 */
/***/ function(module, exports) {
/*!
@ -16594,7 +16643,7 @@ return /******/ (function(modules) { // webpackBootstrap
/***/ },
/* 25 */
/* 26 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@ -16677,7 +16726,7 @@ return /******/ (function(modules) { // webpackBootstrap
box.title = 'Switch editor mode';
box.onclick = function () {
var menu = new ContextMenu(items);
menu.show(box);
menu.show(box, container);
};
var frame = document.createElement('div');
@ -16715,7 +16764,7 @@ return /******/ (function(modules) { // webpackBootstrap
/***/ },
/* 26 */
/* 27 */
/***/ function(module, exports) {
'use strict';
@ -17102,14 +17151,14 @@ return /******/ (function(modules) { // webpackBootstrap
module.exports = completely;
/***/ },
/* 27 */
/* 28 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var ace = __webpack_require__(1);
var ModeSwitcher = __webpack_require__(25);
var util = __webpack_require__(11);
var ModeSwitcher = __webpack_require__(26);
var util = __webpack_require__(12);
// create a mixin with the functions for text mode
var textmode = {};
@ -17180,7 +17229,7 @@ return /******/ (function(modules) { // webpackBootstrap
this.theme = options.theme || DEFAULT_THEME;
if (this.theme === DEFAULT_THEME && _ace) {
try {
__webpack_require__(28);
__webpack_require__(29);
}
catch (err) {
console.error(err);
@ -18127,7 +18176,7 @@ return /******/ (function(modules) { // webpackBootstrap
/***/ },
/* 28 */
/* 29 */
/***/ function(module, exports) {
/* ***** BEGIN LICENSE BLOCK *****

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

32
dist/jsoneditor.js vendored
View File

@ -24,8 +24,8 @@
* Copyright (c) 2011-2017 Jos de Jong, http://jsoneditoronline.org
*
* @author Jos de Jong, <wjosdejong@gmail.com>
* @version 5.24.0
* @date 2018-08-25
* @version 5.24.1
* @date 2018-08-26
*/
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
@ -33097,20 +33097,19 @@ return /******/ (function(modules) { // webpackBootstrap
// doesn't fit above nor below -> show below
}
var leftGap = anchorRect.left - parentRect.left;
var topGap = anchorRect.top - parentRect.top;
// position the menu
if (showBelow) {
// display the menu below the anchor
var anchorHeight = anchor.offsetHeight;
this.dom.menu.style.left = leftGap + 'px';
this.dom.menu.style.left = '0';
this.dom.menu.style.top = topGap + anchorHeight + 'px';
this.dom.menu.style.bottom = '';
}
else {
// display the menu above the anchor
this.dom.menu.style.left = leftGap + 'px';
this.dom.menu.style.left = '0';
this.dom.menu.style.top = '';
this.dom.menu.style.bottom = '0px';
}
@ -33377,7 +33376,7 @@ return /******/ (function(modules) { // webpackBootstrap
eventListeners.mousedown = util.addEventListener(root, 'mousedown', destroyIfOutside);
eventListeners.mousewheel = util.addEventListener(root, 'mousewheel', destroyIfOutside);
// eventListeners.scroll = util.addEventListener(this.rootNode, 'scroll', destroyIfOutside);
eventListeners.scroll = util.addEventListener(root, 'scroll', destroyIfOutside);
absoluteAnchor.destroy = destroy;
@ -36274,17 +36273,16 @@ return /******/ (function(modules) { // webpackBootstrap
* Remove the DOM of this node and it's childs and recreate it again
*/
Node.prototype.recreateDom = function() {
// only recreate dom if there is a dom already
if (!this.dom || ! this.dom.tr || !this.dom.tr.parentNode) {
return;
if (this.dom && this.dom.tr && this.dom.tr.parentNode) {
var domAnchor = this._detachFromDom();
this.clearDom();
this._attachToDom(domAnchor);
}
else {
this.clearDom();
}
var domAnchor = this._detachFromDom();
// delete the DOM
this.clearDom();
this._attachToDom(domAnchor);
};
/**
@ -45575,7 +45573,7 @@ return /******/ (function(modules) { // webpackBootstrap
box.title = 'Switch editor mode';
box.onclick = function () {
var menu = new ContextMenu(items);
menu.show(box);
menu.show(box, container);
};
var frame = document.createElement('div');

2
dist/jsoneditor.map vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
{
"name": "jsoneditor",
"version": "5.24.0",
"version": "5.24.1",
"main": "./index",
"description": "A web-based tool to view, edit, format, and validate JSON",
"tags": [

View File

@ -224,20 +224,19 @@ ContextMenu.prototype.show = function (anchor, frame) {
// doesn't fit above nor below -> show below
}
var leftGap = anchorRect.left - parentRect.left;
var topGap = anchorRect.top - parentRect.top;
// position the menu
if (showBelow) {
// display the menu below the anchor
var anchorHeight = anchor.offsetHeight;
this.dom.menu.style.left = leftGap + 'px';
this.dom.menu.style.left = '0';
this.dom.menu.style.top = topGap + anchorHeight + 'px';
this.dom.menu.style.bottom = '';
}
else {
// display the menu above the anchor
this.dom.menu.style.left = leftGap + 'px';
this.dom.menu.style.left = '0';
this.dom.menu.style.top = '';
this.dom.menu.style.bottom = '0px';
}

View File

@ -78,7 +78,7 @@ function ModeSwitcher(container, modes, current, onSwitch) {
box.title = 'Switch editor mode';
box.onclick = function () {
var menu = new ContextMenu(items);
menu.show(box);
menu.show(box, container);
};
var frame = document.createElement('div');

View File

@ -60,7 +60,7 @@ exports.createAbsoluteAnchor = function (anchor, parent, onDestroy) {
eventListeners.mousedown = util.addEventListener(root, 'mousedown', destroyIfOutside);
eventListeners.mousewheel = util.addEventListener(root, 'mousewheel', destroyIfOutside);
// eventListeners.scroll = util.addEventListener(this.rootNode, 'scroll', destroyIfOutside);
// eventListeners.scroll = util.addEventListener(root, 'scroll', destroyIfOutside);
absoluteAnchor.destroy = destroy;