kero
Version:
1,660 lines (1,463 loc) • 217 kB
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 {
var a = factory();
for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
}
})(this, function() {
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 = "";
/******/ // Load entry module and return exports
/******/ return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.DataTable = exports.u = undefined;
var _indexApp = __webpack_require__(1);
var _indexServerEvent = __webpack_require__(23);
var _indexDataTable = __webpack_require__(28);
var _indexPage = __webpack_require__(54);
var _indexRow = __webpack_require__(60);
window.App = _indexApp.App; /**
* Module : Kero webpack entry index
* Author : liuyk(liuyuekai@yonyou.com)
* Date : 2016-08-08 15:24:46
*/
window.processXHRError = _indexApp.processXHRError;
window.ServerEvent = _indexServerEvent.ServerEvent;
window.DataTable = _indexDataTable.DataTable;
window.Page = _indexPage.Page;
window.Row = _indexRow.Row;
window.u = window.u || {};
exports.u = u = window.u;
u.createApp = _indexApp.createApp;
u.DataTable = _indexDataTable.DataTable;
u.Row = _indexRow.Row;
exports.u = u;
exports.DataTable = _indexDataTable.DataTable;
/***/ },
/* 1 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createApp = exports.processXHRError = exports.App = undefined;
var _init = __webpack_require__(2);
var _adjustMetaFunc = __webpack_require__(12);
var _dataTable = __webpack_require__(13);
var _comp = __webpack_require__(14);
var _validate = __webpack_require__(15);
var _cache = __webpack_require__(16);
var _iwebCore = __webpack_require__(17);
var _ajax = __webpack_require__(18);
var _processXHRError = __webpack_require__(20);
var _serverEvent = __webpack_require__(21);
var _util = __webpack_require__(22);
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /**
* Module : Kero webpack entry app index
* Author : liuyk(liuyuekai@yonyou.com)
* Date : 2016-08-09 15:24:46
*/
//相关依赖导入
var App = function App() {
_classCallCheck(this, App);
// init
this.init = _init.init;
this.dataTables = {};
// adjustMetaFunc
this.adjustMetaFunc = _adjustMetaFunc.adjustMetaFunc;
// dataTable
this.addDataTable = _dataTable.addDataTable;
this.getDataTable = _dataTable.getDataTable;
this.getDataTables = _dataTable.getDataTables;
// comp
this.createComp = _comp.createComp;
this.getComp = _comp.getComp;
this.getCompsByDataTable = _comp.getCompsByDataTable;
this.getCompsByType = _comp.getCompsByType;
this.getComps = _comp.getComps;
this.showComp = _comp.showComp;
// validate
this.compsValidate = _validate.compsValidate;
this.compsValidateMultiParam = _validate.compsValidateMultiParam;
// cache
this.setUserCache = _cache.setUserCache;
this.getUserCache = _cache.getUserCache;
this.removeUserCache = _cache.removeUserCache;
this.setCache = _cache.setCache;
this.getCache = _cache.getCache;
this.removeCache = _cache.removeCache;
this.setSessionCache = _cache.setSessionCache;
this.getSessionCache = _cache.getSessionCache;
this.removeSessionCache = _cache.removeSessionCache;
// iwebCode
this.getEnvironment = _iwebCore.getEnvironment;
this.setClientAttribute = _iwebCore.setClientAttribute;
this.getClientAttribute = _iwebCore.getClientAttribute;
// ajax
this.ajax = _ajax.ajax;
// serverEvent
this.serverEvent = _serverEvent.serverEvent;
// util
this.setEnable = _util.setEnable;
};
var createApp = function createApp() {
var app = new App();
if (arguments.length > 0) {
var arg = arguments[0];
app.init(arg.model, arg.el);
}
return app;
};
exports.App = App;
exports.processXHRError = _processXHRError.processXHRError;
exports.createApp = createApp;
/***/ },
/* 2 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.init = undefined;
var _compMgr = __webpack_require__(3);
var _util = __webpack_require__(9);
var _hotKeys = __webpack_require__(10);
var init = function init(viewModel, element, doApplyBindings) {
var self = this;
element = element || document.body;
if (!(0, _util.isArray)(element)) {
element = [element];
}
this.elements = element;
(0, _util.each)(this.elements, function (i, element) {
if (typeof element === 'string') {
element = document.querySelector(element);
}
if (element) {
element.querySelectorAll('[u-meta]').forEach(function (ele) {
var options = JSON.parse(ele.getAttribute('u-meta'));
options['type'] = options['type'] || 'string';
if (options && options['type']) {
if (self.adjustFunc) self.adjustFunc.call(self, options);
var comp = _compMgr.compMgr.createDataAdapter({ el: ele, options: options, model: viewModel, app: self });
ele['u-meta'] = comp;
}
});
}
if (_hotKeys.hotkeys) _hotKeys.hotkeys.scan(element);
if (typeof doApplyBindings == 'undefined' || doApplyBindings == true) ko.applyBindings(viewModel, element);
_compMgr.compMgr.updateComp(element);
});
_getDataTables(this, viewModel);
}; /**
* Module : kero app init
* Author : liuyk(liuyk@yonyou.com)
* Date : 2016-07-29 09:34:01
*/
var _getDataTables = function _getDataTables(app, viewModel) {
for (var key in viewModel) {
if (viewModel[key] && viewModel[key] instanceof u.DataTable) {
viewModel[key].id = key;
viewModel[key].parent = viewModel;
app.addDataTable(viewModel[key]);
}
}
};
exports.init = init;
/***/ },
/* 3 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.compMgr = undefined;
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; /**
* Module : Sparrow compMgr
* Author : Kvkens(yueming@yonyou.com)
* Date : 2016-07-28 18:41:06
*/
var _dom = __webpack_require__(4);
function _findRegisteredClass(name, optReplace) {
for (var i = 0; i < CompMgr.registeredControls.length; i++) {
if (CompMgr.registeredControls[i].className === name) {
if (typeof optReplace !== 'undefined') {
CompMgr.registeredControls[i] = optReplace;
}
return CompMgr.registeredControls[i];
}
}
return false;
}
function _getUpgradedListOfElement(element) {
var dataUpgraded = element.getAttribute('data-upgraded');
// Use `['']` as default value to conform the `,name,name...` style.
return dataUpgraded === null ? [''] : dataUpgraded.split(',');
}
function _isElementUpgraded(element, jsClass) {
var upgradedList = _getUpgradedListOfElement(element);
return upgradedList.indexOf(jsClass) != -1;
}
function _upgradeElement(element, optJsClass) {
if (!((typeof element === 'undefined' ? 'undefined' : _typeof(element)) === 'object' && element instanceof Element)) {
throw new Error('Invalid argument provided to upgrade MDL element.');
}
var upgradedList = _getUpgradedListOfElement(element);
var classesToUpgrade = [];
if (!optJsClass) {
var className = element.className;
for (var i = 0; i < CompMgr.registeredControls.length; i++) {
var component = CompMgr.registeredControls[i];
if (className.indexOf(component.cssClass) > -1 && classesToUpgrade.indexOf(component) === -1 && !_isElementUpgraded(element, component.className)) {
classesToUpgrade.push(component);
}
}
} else if (!_isElementUpgraded(element, optJsClass)) {
classesToUpgrade.push(_findRegisteredClass(optJsClass));
}
// Upgrade the element for each classes.
for (var i = 0, n = classesToUpgrade.length, registeredClass; i < n; i++) {
registeredClass = classesToUpgrade[i];
if (registeredClass) {
if (element[registeredClass.className]) {
continue;
}
// Mark element as upgraded.
upgradedList.push(registeredClass.className);
element.setAttribute('data-upgraded', upgradedList.join(','));
var instance = new registeredClass.classConstructor(element);
CompMgr.createdControls.push(instance);
// Call any callbacks the user has registered with this component type.
for (var j = 0, m = registeredClass.callbacks.length; j < m; j++) {
registeredClass.callbacks[j](element);
}
element[registeredClass.className] = instance;
} else {
throw new Error('Unable to find a registered component for the given class.');
}
}
}
function _upgradeDomInternal(optJsClass, optCssClass, ele) {
if (typeof optJsClass === 'undefined' && typeof optCssClass === 'undefined') {
for (var i = 0; i < CompMgr.registeredControls.length; i++) {
_upgradeDomInternal(CompMgr.registeredControls[i].className, registeredControls[i].cssClass, ele);
}
} else {
var jsClass = optJsClass;
if (!optCssClass) {
var registeredClass = _findRegisteredClass(jsClass);
if (registeredClass) {
optCssClass = registeredClass.cssClass;
}
}
var elements;
if (ele) {
elements = (0, _dom.hasClass)(ele, optCssClass) ? [ele] : ele.querySelectorAll('.' + optCssClass);
} else {
elements = document.querySelectorAll('.' + optCssClass);
}
for (var n = 0; n < elements.length; n++) {
_upgradeElement(elements[n], jsClass);
}
}
}
var CompMgr = {
plugs: {},
dataAdapters: {},
/** 注册的控件*/
registeredControls: [],
createdControls: [],
/**
*
* @param options {el:'#content', model:{}}
*/
apply: function apply(options) {
if (options) {
var _el = options.el || document.body;
var model = options.model;
}
if (typeof _el == 'string') {
_el = document.body.querySelector(_el);
}
if (_el == null || (typeof _el === 'undefined' ? 'undefined' : _typeof(_el)) != 'object') _el = document.body;
var comps = _el.querySelectorAll('[u-meta]');
comps.forEach(function (element) {
if (element['comp']) return;
var options = JSON.parse(element.getAttribute('u-meta'));
if (options && options['type']) {
//var comp = CompMgr._createComp({el:element,options:options,model:model});
var comp = CompMgr.createDataAdapter({ el: element, options: options, model: model });
if (comp) {
element['adpt'] = comp;
element['u-meta'] = comp;
}
}
});
},
addPlug: function addPlug(config) {
var plug = config['plug'],
name = config['name'];
this.plugs || (this.plugs = {});
if (this.plugs[name]) {
throw new Error('plug has exist:' + name);
}
plug.compType = name;
this.plugs[name] = plug;
},
addDataAdapter: function addDataAdapter(config) {
var adapter = config['adapter'],
name = config['name'];
//dataType = config['dataType'] || ''
//var key = dataType ? name + '.' + dataType : name;
this.dataAdapters || (dataAdapters = {});
if (this.dataAdapters[name]) {
throw new Error('dataAdapter has exist:' + name);
}
this.dataAdapters[name] = adapter;
},
getDataAdapter: function getDataAdapter(name) {
if (!name) return;
this.dataAdapters || (dataAdapters = {});
//var key = dataType ? name + '.' + dataType : name;
return this.dataAdapters[name];
},
createDataAdapter: function createDataAdapter(options) {
var opt = options['options'];
var type = opt['type'],
id = opt['id'];
var adpt = this.dataAdapters[type];
if (!adpt) return null;
var comp = new adpt(options);
comp.type = type;
comp.id = id;
return comp;
},
_createComp: function _createComp(options) {
var opt = options['options'];
var type = opt['type'];
var plug = this.plugs[type];
if (!plug) return null;
var comp = new plug(options);
comp.type = type;
return comp;
},
/**
* 注册UI控件
*/
regComp: function regComp(config) {
var newConfig = {
classConstructor: config.comp,
className: config.compAsString || config['compAsString'],
cssClass: config.css || config['css'],
callbacks: []
};
config.comp.prototype.compType = config.compAsString;
for (var i = 0; i < this.registeredControls.length; i++) {
var item = this.registeredControls[i];
//registeredControls.forEach(function(item) {
if (item.cssClass === newConfig.cssClass) {
throw new Error('The provided cssClass has already been registered: ' + item.cssClass);
}
if (item.className === newConfig.className) {
throw new Error('The provided className has already been registered');
}
};
this.registeredControls.push(newConfig);
},
updateComp: function updateComp(ele) {
for (var n = 0; n < this.registeredControls.length; n++) {
_upgradeDomInternal(this.registeredControls[n].className, null, ele);
}
}
};
var compMgr = CompMgr;
exports.compMgr = compMgr;
///**
// * 加载控件
// */
//
//if (document.readyState && document.readyState === 'complete'){
// compMgr.updateComp();
//}else{
// on(window, 'load', function() {
//
// //扫描并生成控件
// compMgr.updateComp();
// });
//}
/***/ },
/* 4 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.showPanelByEle = exports.getScroll = exports.getOffset = exports.makeModal = exports.makeDOM = exports.getZIndex = exports.getStyle = exports.wrap = exports.css = exports.closest = exports.toggleClass = exports.hasClass = exports.removeClass = exports.addClass = undefined;
var _event = __webpack_require__(5);
/**
* 元素增加指定样式
* @param value
* @returns {*}
*/
var addClass = function addClass(element, value) {
if (typeof element.classList === 'undefined') {
if (u._addClass) u._addClass(element, value);
} else {
element.classList.add(value);
}
return this;
};
/**
* 删除元素上指定样式
* @param {Object} element
* @param {Object} value
*/
/**
* Module : Sparrow dom
* Author : Kvkens(yueming@yonyou.com)
* Date : 2016-08-16 13:59:17
*/
var removeClass = function removeClass(element, value) {
if (typeof element.classList === 'undefined') {
if (u._removeClass) u._removeClass(element, value);
} else {
element.classList.remove(value);
}
return this;
};
/**
* 元素上是否存在该类
* @param {Object} element
* @param {Object} value
*/
var hasClass = function hasClass(element, value) {
if (!element) return false;
if (element.nodeName && (element.nodeName === '#text' || element.nodeName === '#comment')) return false;
if (typeof element.classList === 'undefined') {
if (u._hasClass) return u._hasClass(element, value);
return false;
} else {
return element.classList.contains(value);
}
};
/**
* 选择元素类切换
* @param {Object} element
* @param {Object} value
*/
var toggleClass = function toggleClass(element, value) {
if (typeof element.classList === 'undefined') {
return u._toggleClass(element, value);
} else {
return element.classList.toggle(value);
}
};
/**
* 向上查找指定类元素
* @param {Object} element
* @param {Object} selector
*/
var closest = function closest(element, selector) {
var tmp = element;
while (tmp != null && !hasClass(tmp, selector) && tmp != document.body) {
tmp = tmp.parentNode;
}
if (tmp == document.body) return null;
return tmp;
};
/**
* 元素CSS操作
* @param {Object} element
* @param {Object} csstext
* @param {Object} val
*/
var css = function css(element, csstext, val) {
//TO DO : 实现u.相关方法
if (csstext instanceof Object) {
for (var k in csstext) {
var tmpcss = csstext[k];
if (["width", "height", "top", "bottom", "left", "right"].indexOf(k) > -1 && isNumber(tmpcss)) {
tmpcss = tmpcss + "px";
}
element.style[k] = tmpcss;
}
} else {
if (arguments.length > 2) {
element.style[csstext] = val;
} else {
return getStyle(element, csstext);
}
}
};
var wrap = function wrap(element, parent) {
var p = makeDOM(parent);
element.parentNode.insertBefore(p, element);
p.appendChild(element);
};
var getStyle = function getStyle(element, key) {
//不要在循环里用
var allCSS;
if (window.getComputedStyle) {
allCSS = window.getComputedStyle(element);
} else {
allCSS = element.currentStyle;
}
if (allCSS[key] !== undefined) {
return allCSS[key];
} else {
return "";
}
};
var globalZIndex;
/**
* 统一zindex值, 不同控件每次显示时都取最大的zindex,防止显示错乱
*/
var getZIndex = function getZIndex() {
if (!globalZIndex) {
globalZIndex = 2000;
}
return globalZIndex++;
};
var makeDOM = function makeDOM(htmlString) {
var tempDiv = document.createElement("div");
tempDiv.innerHTML = htmlString;
var _dom = tempDiv.children[0];
return _dom;
};
/**
* element
*/
var makeModal = function makeModal(element, parEle) {
var overlayDiv = document.createElement('div');
addClass(overlayDiv, 'u-overlay');
overlayDiv.style.zIndex = getZIndex();
// 如果有父元素则插入到父元素上,没有则添加到body上
if (parEle && parEle != document.body) {
addClass(overlayDiv, 'hasPar');
parEle.appendChild(overlayDiv);
} else {
document.body.appendChild(overlayDiv);
}
element.style.zIndex = getZIndex();
(0, _event.on)(overlayDiv, 'click', function (e) {
(0, _event.stopEvent)(e);
});
return overlayDiv;
};
var getOffset = function getOffset(Node, offset) {
if (!offset) {
offset = {};
offset.top = 0;
offset.left = 0;
}
if (Node == document.body) {
return offset;
}
offset.top += Node.offsetTop;
offset.left += Node.offsetLeft;
if (Node.offsetParent) return getOffset(Node.offsetParent, offset);else return offset;
};
var getScroll = function getScroll(Node, offset) {
if (!offset) {
offset = {};
offset.top = 0;
offset.left = 0;
}
if (Node == document.body) {
offset.top += Node.scrollTop || document.documentElement.scrollTop;
offset.left += Node.scrollLeft || document.documentElement.scrollLeft;
return offset;
}
offset.top += Node.scrollTop;
offset.left += Node.scrollLeft;
if (Node.parentNode) return getScroll(Node.parentNode, offset);else return offset;
};
var showPanelByEle = function showPanelByEle(obj) {
var ele = obj.ele,
panel = obj.panel,
position = obj.position,
// off = u.getOffset(ele),scroll = u.getScroll(ele),
// offLeft = off.left,offTop = off.top,
// scrollLeft = scroll.left,scrollTop = scroll.top,
// eleWidth = ele.offsetWidth,eleHeight = ele.offsetHeight,
// panelWidth = panel.offsetWidth,panelHeight = panel.offsetHeight,
bodyWidth = document.body.clientWidth,
bodyHeight = document.body.clientHeight,
position = position || 'top',
// left = offLeft - scrollLeft,top = offTop - scrollTop,
eleRect = obj.ele.getBoundingClientRect(),
panelRect = obj.panel.getBoundingClientRect(),
eleWidth = eleRect.width,
eleHeight = eleRect.height,
left = eleRect.left,
top = eleRect.top,
panelWidth = panelRect.width,
panelHeight = panelRect.height,
docWidth = document.documentElement.clientWidth,
docHeight = document.documentElement.clientHeight;
// 基准点为Ele的左上角
// 后续根据需要完善
if (position == 'left') {
left = left - panelWidth;
top = top + (eleHeight - panelHeight) / 2;
} else if (position == 'right') {
left = left + eleWidth;
top = top + (eleHeight - panelHeight) / 2;
} else if (position == 'top' || position == 'topCenter') {
left = left + (eleWidth - panelWidth) / 2;
top = top - panelHeight;
} else if (position == 'bottom' || position == 'bottomCenter') {
left = left + (eleWidth - panelWidth) / 2;
top = top + eleHeight;
} else if (position == 'bottomLeft') {
left = left;
top = top + eleHeight;
}
if (left + panelWidth > docWidth) left = docWidth - panelWidth - 10;
if (left < 0) left = 0;
if (top + panelHeight > docHeight) {
top = docHeight - panelHeight - 10;
}
if (top < 0) top = 0;
panel.style.left = left + 'px';
panel.style.top = top + 'px';
};
exports.addClass = addClass;
exports.removeClass = removeClass;
exports.hasClass = hasClass;
exports.toggleClass = toggleClass;
exports.closest = closest;
exports.css = css;
exports.wrap = wrap;
exports.getStyle = getStyle;
exports.getZIndex = getZIndex;
exports.makeDOM = makeDOM;
exports.makeModal = makeModal;
exports.getOffset = getOffset;
exports.getScroll = getScroll;
exports.showPanelByEle = showPanelByEle;
/***/ },
/* 5 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.event = exports.stopEvent = exports.trigger = exports.off = exports.on = undefined;
var _env = __webpack_require__(6);
var u = {}; /**
* Module : Sparrow touch event
* Author : Kvkens(yueming@yonyou.com)
* Date : 2016-07-28 14:41:17
*/
u.event = {};
var touchStartEvent = _env.env.hasTouch ? "touchstart" : "mousedown",
touchStopEvent = _env.env.hasTouch ? "touchend" : "mouseup",
touchMoveEvent = _env.env.hasTouch ? "touchmove" : "mousemove";
// tap和taphold
u.event.tap = {
tapholdThreshold: 750,
emitTapOnTaphold: true,
touchstartFun: function touchstartFun() {
trigger(this, 'vmousedown');
},
touchendFun: function touchendFun() {
trigger(this, 'vmouseup');
trigger(this, 'vclick');
},
setup: function setup() {
var thisObject = this,
isTaphold = false;
on(thisObject, "vmousedown", function (event) {
isTaphold = false;
if (event.which && event.which !== 1) {
return false;
}
var origTarget = event.target,
timer;
function clearTapTimer() {
clearTimeout(timer);
}
function clearTapHandlers() {
clearTapTimer();
off(thisObject, 'vclick');
off(thisObject, 'vmouseup');
off(document, 'vmousecancel');
}
function clickHandler(event) {
clearTapHandlers();
// ONLY trigger a 'tap' event if the start target is
// the same as the stop target.
if (!isTaphold && origTarget === event.target) {
trigger(thisObject, 'tap');
} else if (isTaphold) {
event.preventDefault();
}
}
on(thisObject, 'vmouseup', clearTapTimer);
on(thisObject, 'vclick', clickHandler);
on(document, 'vmousecancel', clearTapHandlers);
timer = setTimeout(function () {
if (!u.event.tap.emitTapOnTaphold) {
isTaphold = true;
}
trigger(thisObject, "taphold");
clearTapHandlers();
}, u.event.tap.tapholdThreshold);
});
on(thisObject, 'touchstart', u.event.tap.touchstartFun);
on(thisObject, 'touchend', u.event.tap.touchendFun);
},
teardown: function teardown() {
off(thisObject, 'vmousedown');
off(thisObject, 'vclick');
off(thisObject, 'vmouseup');
off(document, 'vmousecancel');
}
};
u.event.taphold = u.event.tap;
u.event.swipe = {
// More than this horizontal displacement, and we will suppress scrolling.
scrollSupressionThreshold: 30,
// More time than this, and it isn't a swipe.
durationThreshold: 1000,
// Swipe horizontal displacement must be more than this.
horizontalDistanceThreshold: 30,
// Swipe vertical displacement must be less than this.
verticalDistanceThreshold: 30,
getLocation: function getLocation(event) {
var winPageX = window.pageXOffset,
winPageY = window.pageYOffset,
x = event.clientX,
y = event.clientY;
if (event.pageY === 0 && Math.floor(y) > Math.floor(event.pageY) || event.pageX === 0 && Math.floor(x) > Math.floor(event.pageX)) {
// iOS4 clientX/clientY have the value that should have been
// in pageX/pageY. While pageX/page/ have the value 0
x = x - winPageX;
y = y - winPageY;
} else if (y < event.pageY - winPageY || x < event.pageX - winPageX) {
// Some Android browsers have totally bogus values for clientX/Y
// when scrolling/zooming a page. Detectable since clientX/clientY
// should never be smaller than pageX/pageY minus page scroll
x = event.pageX - winPageX;
y = event.pageY - winPageY;
}
return {
x: x,
y: y
};
},
start: function start(event) {
var data = event.touches ? event.touches[0] : event,
location = u.event.swipe.getLocation(data);
return {
time: new Date().getTime(),
coords: [location.x, location.y],
origin: event.target
};
},
stop: function stop(event) {
var data = event.touches ? event.touches[0] : event,
location = u.event.swipe.getLocation(data);
return {
time: new Date().getTime(),
coords: [location.x, location.y]
};
},
handleSwipe: function handleSwipe(start, stop, thisObject, origTarget) {
if (stop.time - start.time < u.event.swipe.durationThreshold && Math.abs(start.coords[0] - stop.coords[0]) > u.event.swipe.horizontalDistanceThreshold && Math.abs(start.coords[1] - stop.coords[1]) < u.event.swipe.verticalDistanceThreshold) {
var direction = start.coords[0] > stop.coords[0] ? "swipeleft" : "swiperight";
trigger(thisObject, "swipe");
trigger(thisObject, direction);
return true;
}
return false;
},
// This serves as a flag to ensure that at most one swipe event event is
// in work at any given time
eventInProgress: false,
setup: function setup() {
var events,
thisObject = this,
context = {};
// Retrieve the events data for this element and add the swipe context
events = thisObject["mobile-events"];
if (!events) {
events = {
length: 0
};
thisObject["mobile-events"] = events;
}
events.length++;
events.swipe = context;
context.start = function (event) {
// Bail if we're already working on a swipe event
if (u.event.swipe.eventInProgress) {
return;
}
u.event.swipe.eventInProgress = true;
var stop,
start = u.event.swipe.start(event),
origTarget = event.target,
emitted = false;
context.move = function (event) {
// if ( !start || event.isDefaultPrevented() ) {
if (!start) {
return;
}
stop = u.event.swipe.stop(event);
if (!emitted) {
emitted = u.event.swipe.handleSwipe(start, stop, thisObject, origTarget);
if (emitted) {
// Reset the context to make way for the next swipe event
u.event.swipe.eventInProgress = false;
}
}
// prevent scrolling
if (Math.abs(start.coords[0] - stop.coords[0]) > u.event.swipe.scrollSupressionThreshold) {
event.preventDefault();
}
};
context.stop = function () {
emitted = true;
// Reset the context to make way for the next swipe event
u.event.swipe.eventInProgress = false;
off(document, touchMoveEvent, context.move);
context.move = null;
};
on(document, touchMoveEvent, context.move);
on(document, touchStopEvent, context.stop);
};
on(thisObject, touchStartEvent, context.start);
},
teardown: function teardown() {
var events, context;
events = thisObject["mobile-events"];
if (events) {
context = events.swipe;
delete events.swipe;
events.length--;
if (events.length === 0) {
thisObject["mobile-events"] = null;
}
}
if (context) {
if (context.start) {
off(thisObject, touchStartEvent, context.start);
}
if (context.move) {
off(document, touchMoveEvent, context.move);
}
if (context.stop) {
off(document, touchStopEvent, context.stop);
}
}
}
};
u.event.swipeleft = u.event.swipe;
u.event.swiperight = u.event.swipe;
var event = u.event;
var on = function on(element, eventName, child, listener) {
if (!element) return;
if (arguments.length < 4) {
listener = child;
child = undefined;
} else {
var childlistener = function childlistener(e) {
if (!e) {
return;
}
var tmpchildren = element.querySelectorAll(child);
tmpchildren.forEach(function (node) {
if (node == e.target) {
listener.call(e.target, e);
}
});
};
}
//capture = capture || false;
if (!element["uEvent"]) {
//在dom上添加记录区
element["uEvent"] = {};
}
//判断是否元素上是否用通过on方法填加进去的事件
if (!element["uEvent"][eventName]) {
element["uEvent"][eventName] = [child ? childlistener : listener];
if (u.event && u.event[eventName] && u.event[eventName].setup) {
u.event[eventName].setup.call(element);
}
element["uEvent"][eventName + 'fn'] = function (e) {
//火狐下有问题修改判断
if (!e) e = typeof event != 'undefined' && event ? event : window.event;
element["uEvent"][eventName].forEach(function (fn) {
try {
e.target = e.target || e.srcElement; //兼容IE8
} catch (e) {}
if (fn) fn.call(element, e);
});
};
if (element.addEventListener) {
// 用于支持DOM的浏览器
element.addEventListener(eventName, element["uEvent"][eventName + 'fn']);
} else if (element.attachEvent) {
// 用于IE浏览器
element.attachEvent("on" + eventName, element["uEvent"][eventName + 'fn']);
} else {
// 用于其它浏览器
element["on" + eventName] = element["uEvent"][eventName + 'fn'];
}
} else {
//如果有就直接往元素的记录区添加事件
var lis = child ? childlistener : listener;
var hasLis = false;
element["uEvent"][eventName].forEach(function (fn) {
if (fn == lis) {
hasLis = true;
}
});
if (!hasLis) {
element["uEvent"][eventName].push(child ? childlistener : listener);
}
}
};
var off = function off(element, eventName, listener) {
//删除事件数组
if (listener) {
if (element && element["uEvent"] && element["uEvent"][eventName]) {
element["uEvent"][eventName].forEach(function (fn, i) {
if (fn == listener) {
element["uEvent"][eventName].splice(i, 1);
}
});
}
return;
}
var eventfn = element["uEvent"][eventName + 'fn'];
if (element.removeEventListener) {
// 用于支持DOM的浏览器
element.removeEventListener(eventName, eventfn);
} else if (element.removeEvent) {
// 用于IE浏览器
element.removeEvent("on" + eventName, eventfn);
} else {
// 用于其它浏览器
delete element["on" + eventName];
}
if (u.event && u.event[eventName] && u.event[eventName].teardown) {
u.event[eventName].teardown.call(element);
}
element["uEvent"][eventName] = undefined;
element["uEvent"][eventName + 'fn'] = undefined;
};
var trigger = function trigger(element, eventName) {
if (element["uEvent"] && element["uEvent"][eventName]) {
element["uEvent"][eventName + 'fn']();
}
};
/**
* 阻止冒泡
*/
var stopEvent = function stopEvent(e) {
if (typeof e != "undefined") {
if (e.stopPropagation) e.stopPropagation();else {
e.cancelBubble = true;
}
//阻止默认浏览器动作(W3C)
if (e && e.preventDefault) e.preventDefault();
//IE中阻止函数器默认动作的方式
else window.event.returnValue = false;
}
};
exports.on = on;
exports.off = off;
exports.trigger = trigger;
exports.stopEvent = stopEvent;
exports.event = event;
/***/ },
/* 6 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.env = undefined;
var _extend = __webpack_require__(7);
var u = {}; /**
* Module : Sparrow browser environment
* Author : Kvkens(yueming@yonyou.com)
* Date : 2016-07-27 21:46:50
*/
(0, _extend.extend)(u, {
isIE: false,
isFF: false,
isOpera: false,
isChrome: false,
isSafari: false,
isWebkit: false,
isIE8_BEFORE: false,
isIE8: false,
isIE8_CORE: false,
isIE9: false,
isIE9_CORE: false,
isIE10: false,
isIE10_ABOVE: false,
isIE11: false,
isIOS: false,
isIphone: false,
isIPAD: false,
isStandard: false,
version: 0,
isWin: false,
isUnix: false,
isLinux: false,
isAndroid: false,
isMac: false,
hasTouch: false,
isMobile: false
});
(function () {
var userAgent = navigator.userAgent,
rMsie = /(msie\s|trident.*rv:)([\w.]+)/,
rFirefox = /(firefox)\/([\w.]+)/,
rOpera = /(opera).+version\/([\w.]+)/,
rChrome = /(chrome)\/([\w.]+)/,
rSafari = /version\/([\w.]+).*(safari)/,
version,
ua = userAgent.toLowerCase(),
s,
browserMatch = {
browser: "",
version: ''
},
match = rMsie.exec(ua);
if (match != null) {
browserMatch = {
browser: "IE",
version: match[2] || "0"
};
}
match = rFirefox.exec(ua);
if (match != null) {
browserMatch = {
browser: match[1] || "",
version: match[2] || "0"
};
}
match = rOpera.exec(ua);
if (match != null) {
browserMatch = {
browser: match[1] || "",
version: match[2] || "0"
};
}
match = rChrome.exec(ua);
if (match != null) {
browserMatch = {
browser: match[1] || "",
version: match[2] || "0"
};
}
match = rSafari.exec(ua);
if (match != null) {
browserMatch = {
browser: match[2] || "",
version: match[1] || "0"
};
}
if (match != null) {
browserMatch = {
browser: "",
version: "0"
};
}
if (s = ua.match(/opera.([\d.]+)/)) {
u.isOpera = true;
} else if (browserMatch.browser == "IE" && browserMatch.version == 11) {
u.isIE11 = true;
u.isIE = true;
} else if (s = ua.match(/chrome\/([\d.]+)/)) {
u.isChrome = true;
u.isStandard = true;
} else if (s = ua.match(/version\/([\d.]+).*safari/)) {
u.isSafari = true;
u.isStandard = true;
} else if (s = ua.match(/gecko/)) {
//add by licza : support XULRunner
u.isFF = true;
u.isStandard = true;
} else if (s = ua.match(/msie ([\d.]+)/)) {
u.isIE = true;
} else if (s = ua.match(/firefox\/([\d.]+)/)) {
u.isFF = true;
u.isStandard = true;
}
if (ua.match(/webkit\/([\d.]+)/)) {
u.isWebkit = true;
}
if (ua.match(/ipad/i)) {
u.isIOS = true;
u.isIPAD = true;
u.isStandard = true;
}
if (ua.match(/iphone/i)) {
u.isIOS = true;
u.isIphone = true;
}
if (navigator.platform == "Mac68K" || navigator.platform == "MacPPC" || navigator.platform == "Macintosh" || navigator.platform == "MacIntel") {
//u.isIOS = true;
u.isMac = true;
}
if (navigator.platform == "Win32" || navigator.platform == "Windows" || navigator.platform == "Win64") {
u.isWin = true;
}
if (navigator.platform == "X11" && !u.isWin && !u.isMac) {
u.isUnix = true;
}
if (String(navigator.platform).indexOf("Linux") > -1) {
u.isLinux = true;
}
if (ua.indexOf('Android') > -1 || ua.indexOf('android') > -1 || ua.indexOf('Adr') > -1 || ua.indexOf('adr') > -1) {
u.isAndroid = true;
}
u.version = version ? browserMatch.version ? browserMatch.version : 0 : 0;
if (u.isIE) {
var intVersion = parseInt(u.version);
var mode = document.documentMode;
if (mode == null) {
if (intVersion == 6 || intVersion == 7) {
u.isIE8_BEFORE = true;
}
} else {
if (mode == 7) {
u.isIE8_BEFORE = true;
} else if (mode == 8) {
u.isIE8 = true;
} else if (mode == 9) {
u.isIE9 = true;
u.isSTANDARD = true;
} else if (mode == 10) {
u.isIE10 = true;
u.isSTANDARD = true;
u.isIE10_ABOVE = true;
} else {
u.isSTANDARD = true;
}
if (intVersion == 8) {
u.isIE8_CORE = true;
} else if (intVersion == 9) {
u.isIE9_CORE = true;
} else if (browserMatch.version == 11) {
u.isIE11 = true;
} else {}
}
}
if ("ontouchend" in document) {
u.hasTouch = true;
}
if (u.isIOS || u.isAndroid) u.isMobile = true;
})();
var env = u;
exports.env = env;
/***/ },
/* 7 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.extend = undefined;
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; /**
* Module : Sparrow extend
* Author : Kvkens(yueming@yonyou.com)
* Date : 2016-07-27 21:46:50
*/
var _enumerables = __webpack_require__(8);
/**
* 复制对象属性
*
* @param {Object} 目标对象
* @param {config} 源对象
*/
var extend = function extend(object, config) {
var args = arguments,
options;
if (args.length > 1) {
for (var len = 1; len < args.length; len++) {
options = args[len];
if (object && options && (typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {
var i, j, k;
for (i in options) {
object[i] = options[i];
}
if (_enumerables.enumerables) {
for (j = _enumerables.enumerables.length; j--;) {
k = _enumerables.enumerables[j];
if (options.hasOwnProperty && options.hasOwnProperty(k)) {
object[k] = options[k];
}
}
}
}
}
}
return object;
};
exports.extend = extend;
/***/ },
/* 8 */
/***/ function(module, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
/**
* Module : Sparrow extend enum
* Author : Kvkens(yueming@yonyou.com)
* Date : 2016-07-27 21:46:50
*/
var U_LANGUAGES = "i_languages";
var U_THEME = "u_theme";
var U_LOCALE = "u_locale";
var U_USERCODE = "usercode";
var enumerables = true,
enumerablesTest = {
toString: 1
},
toString = Object.prototype.toString;
for (var i in enumerablesTest) {
exports.enumerables = enumerables = null;
}
if (enumerables) {
exports.enumerables = enumerables = ['hasOwnProperty', 'valueOf', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'constructor'];
}
exports.enumerables = enumerables;
exports.U_LANGUAGES = U_LANGUAGES;
exports.U_THEME = U_THEME;
exports.U_LOCALE = U_LOCALE;
exports.U_USERCODE = U_USERCODE;
/***/ },
/* 9 */
/***/ function(module, exports) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
/**
* Module : Sparrow util tools
* Author : Kvkens(yueming@yonyou.com)
* Date : 2016-07-27 21:46:50
*/
/**
* 创建一个带壳的对象,防止外部修改
* @param {Object} proto
*/
var createShellObject = function createShellObject(proto) {
var exf = function exf() {};
exf.prototype = proto;
return new exf();
};
var execIgnoreError = function execIgnoreError(a, b, c) {
try {
a.call(b, c);
} catch (e) {}
};
var getFunction = function getFunction(target, val) {
if (!val || typeof val == 'function') return val;
if (typeof target[val] == 'function') return target[val];else if (typeof window[val] == 'function') return window[val];else if (val.indexOf('.') != -1) {
var func = getJSObject(target, val);
if (typeof func == 'function') return func;
func = getJSObject(window, val);
if (typeof func == 'function') return func;
}
return val;
};
var getJSObject = function getJSObject(target, names) {
if (!names) {
return;
}
if ((typeof names === 'undefined' ? 'undefined' : _typeof(names)) == 'object') return names;
var nameArr = names.split('.');
var obj = target;
for (var i = 0; i < nameArr.length; i++) {
obj = obj[nameArr[i]];
if (!obj) return null;
}
return obj;
};
var isDate = function isDate(input) {
return Object.prototype.toString.call(input) === '[object Date]' || input instanceof Date;
};
var isNumber = function isNumber(obj) {
//return obj === +obj
return obj - parseFloat(obj) + 1 >= 0;
};
var isArray = Array.isArray || function (val) {
return Object.prototype.toString.call(val) === '[object Array]';
};
var isEmptyObject = function isEmptyObject(obj) {
var name;
for (name in obj) {
return false;
}
return true;
};
var inArray = function inArray(node, arr) {
if (!arr instanceof Array) {
throw "arguments is not Array";
}
for (var i = 0, k = arr.length; i < k; i++) {
if (node == arr[i]) {
return true;
}
}
return false;
};
var isDomElement = function isDomElement(obj) {
if (window['HTMLElement']) {
return obj instanceof HTMLElement;
} else {
return obj && obj.tagName && obj.nodeType === 1;
}
};
var each = function each(obj, callback) {
if (obj.forEach) {
obj.forEach(function (v, k) {
callback(k, v);
});
} else if (obj instanceof Object) {
for (var k in obj) {
callback(k, obj[k]);
}
} else {
return;
}
};
NodeList.prototype.forEach = Array.prototype.forEach;
/**
* 获得字符串的字节长度
*/
String.prototype.lengthb = function () {
// var str = this.replace(/[^\x800-\x10000]/g, "***");
var str = this.replace(/[^\x00-\xff]/g, "**");
return str.length;
};
/**
* 将AFindText全部替换为ARepText
*/
String.prototype.replaceAll = function (AFindText, ARepText) {
//自定义String对象的方法
var raRegExp = new RegExp(AFindText, "g");
return this.replace(raRegExp, ARepText);
};
exports.createShellObject = createShellObject;
exports.execIgnoreError = execIgnoreError;
exports.getFunction = getFunction;
exports.getJSObject = getJSObject;
exports.isDate = isDate;
exports.isNumber = isNumber;
exports.isArray = isArray;
exports.isEmptyObject = isEmptyObject;
exports.inArray = inArray;
exports.isDomElement = isDomElement;
exports.each = each;
/***/ },
/* 10 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.hotkeys = undefined;
var _class = __webpack_require__(11);
var _extend = __webpack_require__(7);
var _util = __webpack_require__(9);
var hotkeys = {}; /**
* Module : Sparrow hotKeys
* Author : Kvkens(yueming@yonyou.com)
* Date : 2016-07-28 20:25:39
*/
hotkeys.special_keys = {
27: 'esc', 9: 'tab', 32: 'space', 13: 'enter', 8: 'backspace', 145: 'scroll', 20: 'capslock',
144: 'numlock', 19: 'pause', 45: 'insert', 36: 'home', 46: 'del', 35: 'end', 33: 'pageup',
34: 'pagedown', 37: 'left', 38: 'up', 39: 'right', 40: 'down', 112: 'f1', 113: 'f2', 114: 'f3',
115: 'f4', 116: 'f5', 117: 'f6', 118: 'f7', 119: 'f8', 120: 'f9', 121: 'f10', 122: 'f11', 123: 'f12'
};
hotkeys.shift_nums = {
"`": "~", "1": "!", "2": "@", "3": "#", "4": "$", "5": "%", "6": "^", "7": "&",
"8": "*", "9": "(", "0": ")", "-": "_", "=": "+", ";": ":", "'": "\"", ",": "<",
".": ">", "/": "?", "\\": "|"
};
hotkeys.add = function (combi, options, callback) {
if ((0, _class.isFunction)(options)) {
callback = options;
options = {};
}
var opt = {},
defaults = { type: 'keydown', propagate: false, disableInInput: false, target: document.body, checkParent: true },
that = this;
opt = (0, _extend.extend)(opt, defaults, options || {});
combi = combi.toLowerCase();
// inspect if keystroke matches
var inspector = function inspector(event) {
//event = $.event.fix(event); // jQuery event normalization.
var element = this; //event.target;
// @ TextNode -> nodeType == 3
element = element.nodeType == 3 ? element.parentNode : element;
if (opt['disableInInput']) {
// Disable shortcut keys in Input, Textarea fields
var target = element; //$(element);
if (target.tagName == "INPUT" || target.tagName == "TEXTAREA") {
return;
}
}
var code = event.which,
type = event.type,
character = String.fromCharCode(code).toLowerCase(),
special = that.special_keys[code],
shift = event.shiftKey,
ctrl = event.ctrlKey,
alt = event.altKey,
propagate = true,
// default behaivour
mapPoint = null;
// in opera + safari, the event.target is unpredictable.
// for example: 'keydown' might be associated with HtmlBodyElement
// or the element where you last clicked with your mouse.
if (op