add site
This commit is contained in:
207
Site/fic/js/HashMap.js
Normal file
207
Site/fic/js/HashMap.js
Normal file
@ -0,0 +1,207 @@
|
||||
var HashMap = function () {
|
||||
|
||||
var size = 0;// Map大小
|
||||
var entry = new Object();// 对象
|
||||
|
||||
this.common = new common(); //取得common的通用方法
|
||||
|
||||
// Map的存put方法
|
||||
this.put = function (key, value) {
|
||||
if (!this.containsKey(key)) {
|
||||
size++;
|
||||
entry[key] = value;
|
||||
}
|
||||
}
|
||||
|
||||
// Map取get方法
|
||||
this.get = function (key) {
|
||||
return this.containsKey(key) ? entry[key] : null;
|
||||
}
|
||||
|
||||
// Map删除remove
|
||||
this.remove = function (key) {
|
||||
if (this.containsKey(key) && (delete entry[key])) {
|
||||
size--;
|
||||
}
|
||||
}
|
||||
|
||||
// 是否包含Key
|
||||
this.containsKey = function (key) {
|
||||
return (key in entry);
|
||||
}
|
||||
// 是否包含Value
|
||||
this.containsValue = function (value) {
|
||||
for (var prop in entry) {
|
||||
if (isObjectValueEqual(entry[prop], value)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// 所有的Value
|
||||
this.values = function () {
|
||||
var values = new Array();
|
||||
for (var prop in entry) {
|
||||
values.push(entry[prop]);
|
||||
}
|
||||
return values;
|
||||
}
|
||||
|
||||
// 所有的 Key
|
||||
this.keys = function () {
|
||||
var keys = new Array();
|
||||
for (var prop in entry) {
|
||||
keys.push(prop);
|
||||
}
|
||||
return keys;
|
||||
}
|
||||
|
||||
// Map size
|
||||
this.size = function () {
|
||||
return size;
|
||||
}
|
||||
|
||||
// 清空Map
|
||||
this.clear = function () {
|
||||
size = 0;
|
||||
entry = new Object();
|
||||
}
|
||||
|
||||
// 获取key By value
|
||||
this.getKeyByValue = function (value) {
|
||||
for (var prop in entry) {
|
||||
if (this.common.isObjectValueEqual(entry[prop], value)) {
|
||||
console.log("getKeyByValue is ok");
|
||||
return prop;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// 包含特定字段对象的所有keys
|
||||
this.specialKeys = function (containsID) {
|
||||
var keys = new Array();
|
||||
var object_container = new Array();
|
||||
var values = this.values();
|
||||
for (var i = 0; i < values.length; i++) {
|
||||
console.log(this.common.isPropertyInObject(values[i], containsID));
|
||||
if (this.common.isPropertyInObject(values[i], containsID)) {
|
||||
object_container.push(values[i]);
|
||||
}
|
||||
}
|
||||
console.log("object_container.length", object_container.length);
|
||||
for (var j = 0; j < object_container.length; j++) {
|
||||
keys.push(this.getKeyByValue(object_container[j]));
|
||||
}
|
||||
return keys;
|
||||
}
|
||||
|
||||
// 查找一个弱对象是否存在于哈希表中
|
||||
this.findWeekObjectInHash = function (obj) {
|
||||
var values = this.values();
|
||||
for (var i = 0; i < values.length; i++) {
|
||||
if (this.common.isObjectValueEqualIgnoreSequence(obj, values[i])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// 包含对象特定字段的所有keys
|
||||
this.specialKeysSequence = function (containsID, start_end) {
|
||||
var keys = new Array();
|
||||
var object_container = new Array();
|
||||
var values = this.values();
|
||||
for (var i = 0; i < values.length; i++) {
|
||||
if (this.common.isPropertyValueInAndEqualObjectPropertyValue(values[i],
|
||||
start_end, containsID)) {
|
||||
object_container.push(values[i]);
|
||||
}
|
||||
}
|
||||
for (var j = 0; j < object_container.length; j++) {
|
||||
keys.push(this.getKeyByValue(object_container[j]));
|
||||
}
|
||||
return keys;
|
||||
}
|
||||
|
||||
// 根据对象中是否包含某一属性值去查找hashmap的该value(即该对象)
|
||||
this.findObjectByPropety = function (ID) {
|
||||
var value = this.values();
|
||||
for (var i = 0; i < value.length; i++) {
|
||||
if (this.common.isPropertyInObject(value[i], ID)) {
|
||||
return value[i];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
var common = function () {
|
||||
|
||||
// 判断两个对象是否相等
|
||||
this.isObjectValueEqual = function (a, b) {
|
||||
var aProps = Object.getOwnPropertyNames(a);
|
||||
var bProps = Object.getOwnPropertyNames(b);
|
||||
if (aProps.length != bProps.length) {
|
||||
return false;
|
||||
}
|
||||
for (var i = 0; i < aProps.length; i++) {
|
||||
var propName = aProps[i];
|
||||
if (a[propName] !== b[propName]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* @description:弱判断两个对象是否相等(忽略属性的先后顺序,只要值相等 @example:A.x=1,A.y=2与A.x=2,A.y=1视为相等
|
||||
*
|
||||
*/
|
||||
this.isObjectValueEqualIgnoreSequence = function (a, b) {
|
||||
var flag = true;
|
||||
var aProps = Object.getOwnPropertyNames(a);
|
||||
var bProps = Object.getOwnPropertyNames(b);
|
||||
if (aProps.length != bProps.length) {
|
||||
return false;
|
||||
}
|
||||
for (var i = 0; i < aProps.length; i++) {
|
||||
if (!isPropertyInObject(b, a[aProps[i]])) {
|
||||
flag = false;
|
||||
}
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
// 判断一个属性值是不是在一个对象里
|
||||
this.isPropertyInObject = function (object, value) {
|
||||
for (var i in object) {
|
||||
if (object[i] == value) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// 判断一个属性值是不是与一个对象的指定属性值相等
|
||||
this.isPropertyValueInAndEqualObjectPropertyValue = function (object, prop, value) {
|
||||
if (prop in object) {
|
||||
if (object[prop] == value) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// 根据一个属性值找对象中另外一个属性值
|
||||
this.FindPropertyValueInObjectWithOtherPropertyValue = function (object, prop1,
|
||||
prop2, value) {
|
||||
if (prop1 in object) {
|
||||
if (object[prop1] == value) {
|
||||
return object[prop2];
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
93
Site/fic/js/RPolish.js
Normal file
93
Site/fic/js/RPolish.js
Normal file
@ -0,0 +1,93 @@
|
||||
function evalRpn(input) {
|
||||
var outputStack = [];
|
||||
var rpnQueue = toRPolish(input);
|
||||
while (rpnQueue.length > 0) {
|
||||
var cur = rpnQueue.shift();
|
||||
|
||||
if (!isOperatorR(cur)) {
|
||||
outputStack.push(cur);
|
||||
} else {
|
||||
if (outputStack.length < 2) {
|
||||
throw "unvalid stack length";
|
||||
}
|
||||
var sec = outputStack.pop();
|
||||
var fir = outputStack.pop();
|
||||
|
||||
outputStack.push(getResult(fir, sec, cur));
|
||||
}
|
||||
}
|
||||
|
||||
if (outputStack.length != 1) {
|
||||
throw "unvalid expression";
|
||||
} else {
|
||||
return outputStack[0];
|
||||
}
|
||||
}
|
||||
|
||||
function getResult(fir, sec, cur) {
|
||||
var s = fir + cur + sec;
|
||||
var r = eval(s);
|
||||
if (r < 0) {
|
||||
r = r * -1;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
function isOperatorR(value) {
|
||||
var operatorString = "+-*/";
|
||||
return operatorString.indexOf(value) > -1
|
||||
}
|
||||
|
||||
function isOperatorF(value) {
|
||||
var operatorString = "(){}[]";
|
||||
return operatorString.indexOf(value) > -1
|
||||
}
|
||||
|
||||
function toRPolish(input) {
|
||||
var regex = /(\+|\-|\*|\/)+/;
|
||||
var array = input.replaceAll('\\(', '').replaceAll('\\)', '').replaceAll('\\{', '').replaceAll('\\}', '').replaceAll('\\[', '').replaceAll('\\]', '').split(regex);
|
||||
var RPolish = ""
|
||||
var isI = false;
|
||||
num = 0;
|
||||
var SymbolArray = new Array(100);
|
||||
var SymbolNum = -1;
|
||||
for (j = 0; j < input.length; j++) {
|
||||
if (input.charAt(j).match(/\d/)) {
|
||||
if (isI == false) {
|
||||
if (RPolish.length > 0) {
|
||||
RPolish += ','
|
||||
}
|
||||
RPolish += array[num];
|
||||
num++;
|
||||
isI = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
var c = input.charAt(j);
|
||||
if (isOperatorR(c)) {
|
||||
num++;
|
||||
}
|
||||
if (!isOperatorF(c)) {
|
||||
SymbolNum++;
|
||||
SymbolArray[SymbolNum] = input.charAt(j);
|
||||
}
|
||||
isI = false;
|
||||
}
|
||||
}
|
||||
while (SymbolNum >= 0) {
|
||||
RPolish += ',';
|
||||
RPolish += SymbolArray[SymbolNum];
|
||||
SymbolNum--;
|
||||
}
|
||||
regex = /,/;
|
||||
var RPolishArray = RPolish.split(regex);
|
||||
return RPolishArray;
|
||||
}
|
||||
|
||||
function compare(a, b) {
|
||||
if ((a.match(/\*/) || a.match(/\//)) && (b.match(/\+/) || b.match(/\-/))) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
31
Site/fic/js/acceptancetext.js
Normal file
31
Site/fic/js/acceptancetext.js
Normal file
@ -0,0 +1,31 @@
|
||||
$acceptancetext = $dialog.extend({});
|
||||
|
||||
$acceptancetext.prototype.show = function (msg) {
|
||||
var width = 650;
|
||||
var height = 400;
|
||||
// 获取当前语言ID
|
||||
var lang = _utility.currentLang;
|
||||
this.title = GetLanguageByKey("LHBIS_FIC_CLIENT_MODULES_SYSTEMOPTIONSCTRL_A037", "Terms and Conditions");
|
||||
var dialog = this.createDialog(width, height);
|
||||
dialog.css("top", (document.documentElement.clientHeight - height) / 2);
|
||||
var src = "AcceptanceText.aspx?l=" + lang;
|
||||
var ele = $('<div style="width: 97%;height: 80%; margin: 10px auto auto auto;border: 1px solid;"></div>').appendTo(dialog);
|
||||
ele.load(sitePath + src);
|
||||
|
||||
//TODO: 添加一些按钮
|
||||
$('<input type="button" style="margin-right: 23px;float: right;margin-top: 5px;width: 110px;" value="' + GetLanguageByKey("LHBIS_FIC_SILVERLIGHT_LOGIN_LOGINPAGE_A059", "Do Not Accept") + '"/>').click(this,
|
||||
function (e) {
|
||||
e.data.close();
|
||||
}
|
||||
).appendTo(dialog);
|
||||
|
||||
$('<input type="button" style="margin-right: 23px;float: right;margin-top: 5px;width: 70px;" value="' + GetLanguageByKey("LHBIS_FIC_SILVERLIGHT_LOGIN_LOGINPAGE_A058", "Accept") + '"/>').click(this,
|
||||
function (e) {
|
||||
reLoginAcceptanceText();
|
||||
e.data.close();
|
||||
}
|
||||
).appendTo(dialog);
|
||||
|
||||
dialog.appendTo($(document.body));
|
||||
|
||||
};
|
18
Site/fic/js/cookie.js
Normal file
18
Site/fic/js/cookie.js
Normal file
@ -0,0 +1,18 @@
|
||||
function setCookie(cname, cvalue, exdays) {
|
||||
if (exdays === undefined) {
|
||||
document.cookie = cname + "=" + cvalue + "; path=/" + "; document=" + document.domain;
|
||||
} else {
|
||||
var d = new Date();
|
||||
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
|
||||
var expires = "expires=" + d.toUTCString();
|
||||
document.cookie = cname + "=" + cvalue + "; " + expires + "; path=/" + "; document=" + document.domain;
|
||||
}
|
||||
}
|
||||
|
||||
function GetCookie(name) {
|
||||
var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
|
||||
if (arr = document.cookie.match(reg))
|
||||
return unescape(decodeURI(arr[2]));
|
||||
else
|
||||
return null;
|
||||
}
|
10
Site/fic/js/datepicker.min.js
vendored
Normal file
10
Site/fic/js/datepicker.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
22
Site/fic/js/echarts.min.js
vendored
Normal file
22
Site/fic/js/echarts.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
10351
Site/fic/js/jquery-1.11.3.js
vendored
Normal file
10351
Site/fic/js/jquery-1.11.3.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
5
Site/fic/js/jquery-1.12.4.min.js
vendored
Normal file
5
Site/fic/js/jquery-1.12.4.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
626
Site/fic/js/jquery.treegrid.js
Normal file
626
Site/fic/js/jquery.treegrid.js
Normal file
@ -0,0 +1,626 @@
|
||||
/*
|
||||
* jQuery treegrid Plugin 0.3.0
|
||||
* https://github.com/maxazan/jquery-treegrid
|
||||
*
|
||||
* Copyright 2013, Pomazan Max
|
||||
* Licensed under the MIT licenses.
|
||||
*/
|
||||
(function($) {
|
||||
|
||||
var methods = {
|
||||
/**
|
||||
* Initialize tree
|
||||
*
|
||||
* @param {Object} options
|
||||
* @returns {Object[]}
|
||||
*/
|
||||
initTree: function(options) {
|
||||
var settings = $.extend({}, this.treegrid.defaults, options);
|
||||
return this.each(function() {
|
||||
var $this = $(this);
|
||||
$this.treegrid('setTreeContainer', $(this));
|
||||
$this.treegrid('setSettings', settings);
|
||||
settings.getRootNodes.apply(this, [$(this)]).treegrid('initNode', settings);
|
||||
$this.treegrid('getRootNodes').treegrid('render');
|
||||
});
|
||||
},
|
||||
/**
|
||||
* Initialize node
|
||||
*
|
||||
* @param {Object} settings
|
||||
* @returns {Object[]}
|
||||
*/
|
||||
initNode: function(settings) {
|
||||
return this.each(function() {
|
||||
var $this = $(this);
|
||||
$this.treegrid('setTreeContainer', settings.getTreeGridContainer.apply(this));
|
||||
$this.treegrid('getChildNodes').treegrid('initNode', settings);
|
||||
$this.treegrid('initExpander').treegrid('initIndent').treegrid('initEvents').treegrid('initState').treegrid('initChangeEvent').treegrid("initSettingsEvents");
|
||||
});
|
||||
},
|
||||
initChangeEvent: function() {
|
||||
var $this = $(this);
|
||||
//Save state on change
|
||||
$this.on("change", function() {
|
||||
var $this = $(this);
|
||||
$this.treegrid('render');
|
||||
if ($this.treegrid('getSetting', 'saveState')) {
|
||||
$this.treegrid('saveState');
|
||||
}
|
||||
});
|
||||
return $this;
|
||||
},
|
||||
/**
|
||||
* Initialize node events
|
||||
*
|
||||
* @returns {Node}
|
||||
*/
|
||||
initEvents: function() {
|
||||
var $this = $(this);
|
||||
//Default behavior on collapse
|
||||
$this.on("collapse", function() {
|
||||
var $this = $(this);
|
||||
$this.removeClass('treegrid-expanded');
|
||||
$this.addClass('treegrid-collapsed');
|
||||
});
|
||||
//Default behavior on expand
|
||||
$this.on("expand", function() {
|
||||
var $this = $(this);
|
||||
$this.removeClass('treegrid-collapsed');
|
||||
$this.addClass('treegrid-expanded');
|
||||
});
|
||||
|
||||
return $this;
|
||||
},
|
||||
/**
|
||||
* Initialize events from settings
|
||||
*
|
||||
* @returns {Node}
|
||||
*/
|
||||
initSettingsEvents: function() {
|
||||
var $this = $(this);
|
||||
//Save state on change
|
||||
$this.on("change", function() {
|
||||
var $this = $(this);
|
||||
if (typeof($this.treegrid('getSetting', 'onChange')) === "function") {
|
||||
$this.treegrid('getSetting', 'onChange').apply($this);
|
||||
}
|
||||
});
|
||||
//Default behavior on collapse
|
||||
$this.on("collapse", function() {
|
||||
var $this = $(this);
|
||||
if (typeof($this.treegrid('getSetting', 'onCollapse')) === "function") {
|
||||
$this.treegrid('getSetting', 'onCollapse').apply($this);
|
||||
}
|
||||
});
|
||||
//Default behavior on expand
|
||||
$this.on("expand", function() {
|
||||
var $this = $(this);
|
||||
if (typeof($this.treegrid('getSetting', 'onExpand')) === "function") {
|
||||
$this.treegrid('getSetting', 'onExpand').apply($this);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
return $this;
|
||||
},
|
||||
/**
|
||||
* Initialize expander for node
|
||||
*
|
||||
* @returns {Node}
|
||||
*/
|
||||
initExpander: function() {
|
||||
var $this = $(this);
|
||||
var cell = $this.find('td').get($this.treegrid('getSetting', 'treeColumn'));
|
||||
var tpl = $this.treegrid('getSetting', 'expanderTemplate');
|
||||
var expander = $this.treegrid('getSetting', 'getExpander').apply(this);
|
||||
if (expander) {
|
||||
expander.remove();
|
||||
}
|
||||
$(tpl).prependTo(cell).click(function() {
|
||||
$($(this).closest('tr')).treegrid('toggle');
|
||||
});
|
||||
return $this;
|
||||
},
|
||||
/**
|
||||
* Initialize indent for node
|
||||
*
|
||||
* @returns {Node}
|
||||
*/
|
||||
initIndent: function() {
|
||||
var $this = $(this);
|
||||
$this.find('.treegrid-indent').remove();
|
||||
var tpl = $this.treegrid('getSetting', 'indentTemplate');
|
||||
var expander = $this.find('.treegrid-expander');
|
||||
var depth = $this.treegrid('getDepth');
|
||||
for (var i = 0; i < depth; i++) {
|
||||
$(tpl).insertBefore(expander);
|
||||
}
|
||||
return $this;
|
||||
},
|
||||
/**
|
||||
* Initialise state of node
|
||||
*
|
||||
* @returns {Node}
|
||||
*/
|
||||
initState: function() {
|
||||
var $this = $(this);
|
||||
if ($this.treegrid('getSetting', 'saveState') && !$this.treegrid('isFirstInit')) {
|
||||
$this.treegrid('restoreState');
|
||||
} else {
|
||||
if ($this.treegrid('getSetting', 'initialState') === "expanded") {
|
||||
$this.treegrid('expand');
|
||||
} else {
|
||||
$this.treegrid('collapse');
|
||||
}
|
||||
}
|
||||
return $this;
|
||||
},
|
||||
/**
|
||||
* Return true if this tree was never been initialised
|
||||
*
|
||||
* @returns {Boolean}
|
||||
*/
|
||||
isFirstInit: function() {
|
||||
var tree = $(this).treegrid('getTreeContainer');
|
||||
if (tree.data('first_init') === undefined) {
|
||||
tree.data('first_init', $.cookie(tree.treegrid('getSetting', 'saveStateName')) === undefined);
|
||||
}
|
||||
return tree.data('first_init');
|
||||
},
|
||||
/**
|
||||
* Save state of current node
|
||||
*
|
||||
* @returns {Node}
|
||||
*/
|
||||
saveState: function() {
|
||||
var $this = $(this);
|
||||
if ($this.treegrid('getSetting', 'saveStateMethod') === 'cookie') {
|
||||
|
||||
var stateArrayString = $.cookie($this.treegrid('getSetting', 'saveStateName')) || '';
|
||||
var stateArray = (stateArrayString === '' ? [] : stateArrayString.split(','));
|
||||
var nodeId = $this.treegrid('getNodeId');
|
||||
|
||||
if ($this.treegrid('isExpanded')) {
|
||||
if ($.inArray(nodeId, stateArray) === -1) {
|
||||
stateArray.push(nodeId);
|
||||
}
|
||||
} else if ($this.treegrid('isCollapsed')) {
|
||||
if ($.inArray(nodeId, stateArray) !== -1) {
|
||||
stateArray.splice($.inArray(nodeId, stateArray), 1);
|
||||
}
|
||||
}
|
||||
$.cookie($this.treegrid('getSetting', 'saveStateName'), stateArray.join(','));
|
||||
}
|
||||
return $this;
|
||||
},
|
||||
/**
|
||||
* Restore state of current node.
|
||||
*
|
||||
* @returns {Node}
|
||||
*/
|
||||
restoreState: function() {
|
||||
var $this = $(this);
|
||||
if ($this.treegrid('getSetting', 'saveStateMethod') === 'cookie') {
|
||||
var stateArray = $.cookie($this.treegrid('getSetting', 'saveStateName')).split(',');
|
||||
if ($.inArray($this.treegrid('getNodeId'), stateArray) !== -1) {
|
||||
$this.treegrid('expand');
|
||||
} else {
|
||||
$this.treegrid('collapse');
|
||||
}
|
||||
|
||||
}
|
||||
return $this;
|
||||
},
|
||||
/**
|
||||
* Method return setting by name
|
||||
*
|
||||
* @param {type} name
|
||||
* @returns {unresolved}
|
||||
*/
|
||||
getSetting: function(name) {
|
||||
if (!$(this).treegrid('getTreeContainer')) {
|
||||
return null;
|
||||
}
|
||||
return $(this).treegrid('getTreeContainer').data('settings')[name];
|
||||
},
|
||||
/**
|
||||
* Add new settings
|
||||
*
|
||||
* @param {Object} settings
|
||||
*/
|
||||
setSettings: function(settings) {
|
||||
$(this).treegrid('getTreeContainer').data('settings', settings);
|
||||
},
|
||||
/**
|
||||
* Return tree container
|
||||
*
|
||||
* @returns {HtmlElement}
|
||||
*/
|
||||
getTreeContainer: function() {
|
||||
return $(this).data('treegrid');
|
||||
},
|
||||
/**
|
||||
* Set tree container
|
||||
*
|
||||
* @param {HtmlE;ement} container
|
||||
*/
|
||||
setTreeContainer: function(container) {
|
||||
return $(this).data('treegrid', container);
|
||||
},
|
||||
/**
|
||||
* Method return all root nodes of tree.
|
||||
*
|
||||
* Start init all child nodes from it.
|
||||
*
|
||||
* @returns {Array}
|
||||
*/
|
||||
getRootNodes: function() {
|
||||
return $(this).treegrid('getSetting', 'getRootNodes').apply(this, [$(this).treegrid('getTreeContainer')]);
|
||||
},
|
||||
/**
|
||||
* Method return all nodes of tree.
|
||||
*
|
||||
* @returns {Array}
|
||||
*/
|
||||
getAllNodes: function() {
|
||||
return $(this).treegrid('getSetting', 'getAllNodes').apply(this, [$(this).treegrid('getTreeContainer')]);
|
||||
},
|
||||
/**
|
||||
* Mthod return true if element is Node
|
||||
*
|
||||
* @returns {String}
|
||||
*/
|
||||
isNode: function() {
|
||||
return $(this).treegrid('getNodeId') !== null;
|
||||
},
|
||||
/**
|
||||
* Mthod return id of node
|
||||
*
|
||||
* @returns {String}
|
||||
*/
|
||||
getNodeId: function() {
|
||||
if ($(this).treegrid('getSetting', 'getNodeId') === null) {
|
||||
return null;
|
||||
} else {
|
||||
return $(this).treegrid('getSetting', 'getNodeId').apply(this);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Method return parent id of node or null if root node
|
||||
*
|
||||
* @returns {String}
|
||||
*/
|
||||
getParentNodeId: function() {
|
||||
return $(this).treegrid('getSetting', 'getParentNodeId').apply(this);
|
||||
},
|
||||
/**
|
||||
* Method return parent node or null if root node
|
||||
*
|
||||
* @returns {Object[]}
|
||||
*/
|
||||
getParentNode: function() {
|
||||
if ($(this).treegrid('getParentNodeId') === null) {
|
||||
return null;
|
||||
} else {
|
||||
return $(this).treegrid('getSetting', 'getNodeById').apply(this, [$(this).treegrid('getParentNodeId'), $(this).treegrid('getTreeContainer')]);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Method return array of child nodes or null if node is leaf
|
||||
*
|
||||
* @returns {Object[]}
|
||||
*/
|
||||
getChildNodes: function() {
|
||||
return $(this).treegrid('getSetting', 'getChildNodes').apply(this, [$(this).treegrid('getNodeId'), $(this).treegrid('getTreeContainer')]);
|
||||
},
|
||||
/**
|
||||
* Method return depth of tree.
|
||||
*
|
||||
* This method is needs for calculate indent
|
||||
*
|
||||
* @returns {Number}
|
||||
*/
|
||||
getDepth: function() {
|
||||
if ($(this).treegrid('getParentNode') === null) {
|
||||
return 0;
|
||||
}
|
||||
return $(this).treegrid('getParentNode').treegrid('getDepth') + 1;
|
||||
},
|
||||
/**
|
||||
* Method return true if node is root
|
||||
*
|
||||
* @returns {Boolean}
|
||||
*/
|
||||
isRoot: function() {
|
||||
return $(this).treegrid('getDepth') === 0;
|
||||
},
|
||||
/**
|
||||
* Method return true if node has no child nodes
|
||||
*
|
||||
* @returns {Boolean}
|
||||
*/
|
||||
isLeaf: function() {
|
||||
return $(this).treegrid('getChildNodes').length === 0;
|
||||
},
|
||||
/**
|
||||
* Method return true if node last in branch
|
||||
*
|
||||
* @returns {Boolean}
|
||||
*/
|
||||
isLast: function() {
|
||||
if ($(this).treegrid('isNode')) {
|
||||
var parentNode = $(this).treegrid('getParentNode');
|
||||
if (parentNode === null) {
|
||||
if ($(this).treegrid('getNodeId') === $(this).treegrid('getRootNodes').last().treegrid('getNodeId')) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if ($(this).treegrid('getNodeId') === parentNode.treegrid('getChildNodes').last().treegrid('getNodeId')) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
},
|
||||
/**
|
||||
* Method return true if node first in branch
|
||||
*
|
||||
* @returns {Boolean}
|
||||
*/
|
||||
isFirst: function() {
|
||||
if ($(this).treegrid('isNode')) {
|
||||
var parentNode = $(this).treegrid('getParentNode');
|
||||
if (parentNode === null) {
|
||||
if ($(this).treegrid('getNodeId') === $(this).treegrid('getRootNodes').first().treegrid('getNodeId')) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if ($(this).treegrid('getNodeId') === parentNode.treegrid('getChildNodes').first().treegrid('getNodeId')) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
},
|
||||
/**
|
||||
* Return true if node expanded
|
||||
*
|
||||
* @returns {Boolean}
|
||||
*/
|
||||
isExpanded: function() {
|
||||
return $(this).hasClass('treegrid-expanded');
|
||||
},
|
||||
/**
|
||||
* Return true if node collapsed
|
||||
*
|
||||
* @returns {Boolean}
|
||||
*/
|
||||
isCollapsed: function() {
|
||||
return $(this).hasClass('treegrid-collapsed');
|
||||
},
|
||||
/**
|
||||
* Return true if at least one of parent node is collapsed
|
||||
*
|
||||
* @returns {Boolean}
|
||||
*/
|
||||
isOneOfParentsCollapsed: function() {
|
||||
var $this = $(this);
|
||||
if ($this.treegrid('isRoot')) {
|
||||
return false;
|
||||
} else {
|
||||
if ($this.treegrid('getParentNode').treegrid('isCollapsed')) {
|
||||
return true;
|
||||
} else {
|
||||
return $this.treegrid('getParentNode').treegrid('isOneOfParentsCollapsed');
|
||||
}
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Expand node
|
||||
*
|
||||
* @returns {Node}
|
||||
*/
|
||||
expand: function() {
|
||||
if (!this.treegrid('isLeaf') && !this.treegrid("isExpanded")) {
|
||||
this.trigger("expand");
|
||||
this.trigger("change");
|
||||
return this;
|
||||
}
|
||||
return this;
|
||||
},
|
||||
/**
|
||||
* Expand all nodes
|
||||
*
|
||||
* @returns {Node}
|
||||
*/
|
||||
expandAll: function() {
|
||||
var $this = $(this);
|
||||
$this.treegrid('getRootNodes').treegrid('expandRecursive');
|
||||
return $this;
|
||||
},
|
||||
/**
|
||||
* Expand current node and all child nodes begin from current
|
||||
*
|
||||
* @returns {Node}
|
||||
*/
|
||||
expandRecursive: function() {
|
||||
return $(this).each(function() {
|
||||
var $this = $(this);
|
||||
$this.treegrid('expand');
|
||||
if (!$this.treegrid('isLeaf')) {
|
||||
$this.treegrid('getChildNodes').treegrid('expandRecursive');
|
||||
}
|
||||
});
|
||||
},
|
||||
/**
|
||||
* Collapse node
|
||||
*
|
||||
* @returns {Node}
|
||||
*/
|
||||
collapse: function() {
|
||||
return $(this).each(function() {
|
||||
var $this = $(this);
|
||||
if (!$this.treegrid('isLeaf') && !$this.treegrid("isCollapsed")) {
|
||||
$this.trigger("collapse");
|
||||
$this.trigger("change");
|
||||
}
|
||||
});
|
||||
},
|
||||
/**
|
||||
* Collapse all nodes
|
||||
*
|
||||
* @returns {Node}
|
||||
*/
|
||||
collapseAll: function() {
|
||||
var $this = $(this);
|
||||
$this.treegrid('getRootNodes').treegrid('collapseRecursive');
|
||||
return $this;
|
||||
},
|
||||
/**
|
||||
* Collapse current node and all child nodes begin from current
|
||||
*
|
||||
* @returns {Node}
|
||||
*/
|
||||
collapseRecursive: function() {
|
||||
return $(this).each(function() {
|
||||
var $this = $(this);
|
||||
$this.treegrid('collapse');
|
||||
if (!$this.treegrid('isLeaf')) {
|
||||
$this.treegrid('getChildNodes').treegrid('collapseRecursive');
|
||||
}
|
||||
});
|
||||
},
|
||||
/**
|
||||
* Expand if collapsed, Collapse if expanded
|
||||
*
|
||||
* @returns {Node}
|
||||
*/
|
||||
toggle: function() {
|
||||
var $this = $(this);
|
||||
if ($this.treegrid('isExpanded')) {
|
||||
$this.treegrid('collapse');
|
||||
} else {
|
||||
$this.treegrid('expand');
|
||||
}
|
||||
return $this;
|
||||
},
|
||||
/**
|
||||
* Rendering node
|
||||
*
|
||||
* @returns {Node}
|
||||
*/
|
||||
render: function() {
|
||||
return $(this).each(function() {
|
||||
var $this = $(this);
|
||||
//if parent colapsed we hidden
|
||||
if ($this.treegrid('isOneOfParentsCollapsed')) {
|
||||
$this.hide();
|
||||
} else {
|
||||
$this.show();
|
||||
}
|
||||
if (!$this.treegrid('isLeaf')) {
|
||||
$this.treegrid('renderExpander');
|
||||
$this.treegrid('getChildNodes').treegrid('render');
|
||||
}
|
||||
});
|
||||
},
|
||||
/**
|
||||
* Rendering expander depends on node state
|
||||
*
|
||||
* @returns {Node}
|
||||
*/
|
||||
renderExpander: function() {
|
||||
return $(this).each(function() {
|
||||
var $this = $(this);
|
||||
var expander = $this.treegrid('getSetting', 'getExpander').apply(this);
|
||||
if (expander) {
|
||||
|
||||
if (!$this.treegrid('isCollapsed')) {
|
||||
expander.removeClass($this.treegrid('getSetting', 'expanderCollapsedClass'));
|
||||
expander.addClass($this.treegrid('getSetting', 'expanderExpandedClass'));
|
||||
} else {
|
||||
expander.removeClass($this.treegrid('getSetting', 'expanderExpandedClass'));
|
||||
expander.addClass($this.treegrid('getSetting', 'expanderCollapsedClass'));
|
||||
}
|
||||
} else {
|
||||
$this.treegrid('initExpander');
|
||||
$this.treegrid('renderExpander');
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
$.fn.treegrid = function(method) {
|
||||
if (methods[method]) {
|
||||
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
|
||||
} else if (typeof method === 'object' || !method) {
|
||||
return methods.initTree.apply(this, arguments);
|
||||
} else {
|
||||
$.error('Method with name ' + method + ' does not exists for jQuery.treegrid');
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Plugin's default options
|
||||
*/
|
||||
$.fn.treegrid.defaults = {
|
||||
initialState: 'expanded',
|
||||
saveState: false,
|
||||
saveStateMethod: 'cookie',
|
||||
saveStateName: 'tree-grid-state',
|
||||
expanderTemplate: '<span class="treegrid-expander"></span>',
|
||||
indentTemplate: '<span class="treegrid-indent"></span>',
|
||||
expanderExpandedClass: 'treegrid-expander-expanded',
|
||||
expanderCollapsedClass: 'treegrid-expander-collapsed',
|
||||
treeColumn: 0,
|
||||
getExpander: function() {
|
||||
return $(this).find('.treegrid-expander');
|
||||
},
|
||||
getNodeId: function() {
|
||||
var template = /treegrid-([A-Za-z0-9_-]+)/;
|
||||
if (template.test($(this).attr('class'))) {
|
||||
return template.exec($(this).attr('class'))[1];
|
||||
}
|
||||
return null;
|
||||
},
|
||||
getParentNodeId: function() {
|
||||
var template = /treegrid-parent-([A-Za-z0-9_-]+)/;
|
||||
if (template.test($(this).attr('class'))) {
|
||||
return template.exec($(this).attr('class'))[1];
|
||||
}
|
||||
return null;
|
||||
},
|
||||
getNodeById: function(id, treegridContainer) {
|
||||
var templateClass = "treegrid-" + id;
|
||||
return treegridContainer.find('tr.' + templateClass);
|
||||
},
|
||||
getChildNodes: function(id, treegridContainer) {
|
||||
var templateClass = "treegrid-parent-" + id;
|
||||
return treegridContainer.find('tr.' + templateClass);
|
||||
},
|
||||
getTreeGridContainer: function() {
|
||||
return $(this).closest('table');
|
||||
},
|
||||
getRootNodes: function(treegridContainer) {
|
||||
var result = $.grep(treegridContainer.find('tr'), function(element) {
|
||||
var classNames = $(element).attr('class');
|
||||
var templateClass = /treegrid-([A-Za-z0-9_-]+)/;
|
||||
var templateParentClass = /treegrid-parent-([A-Za-z0-9_-]+)/;
|
||||
return templateClass.test(classNames) && !templateParentClass.test(classNames);
|
||||
});
|
||||
return $(result);
|
||||
},
|
||||
getAllNodes: function(treegridContainer) {
|
||||
var result = $.grep(treegridContainer.find('tr'), function(element) {
|
||||
var classNames = $(element).attr('class');
|
||||
var templateClass = /treegrid-([A-Za-z0-9_-]+)/;
|
||||
return templateClass.test(classNames);
|
||||
});
|
||||
return $(result);
|
||||
},
|
||||
//Events
|
||||
onCollapse: null,
|
||||
onExpand: null,
|
||||
onChange: null
|
||||
|
||||
};
|
||||
})(jQuery);
|
3
Site/fic/js/lib/vue-color.min.js
vendored
Normal file
3
Site/fic/js/lib/vue-color.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
10078
Site/fic/js/lib/vue.js
Normal file
10078
Site/fic/js/lib/vue.js
Normal file
File diff suppressed because it is too large
Load Diff
6
Site/fic/js/lib/vue.min.js
vendored
Normal file
6
Site/fic/js/lib/vue.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
310
Site/fic/js/promise.js
Normal file
310
Site/fic/js/promise.js
Normal file
@ -0,0 +1,310 @@
|
||||
/* eslint-disable no-var */
|
||||
/* eslint-disable no-plusplus */
|
||||
/* eslint-disable prefer-arrow-callback */
|
||||
/* eslint-disable prefer-template */
|
||||
/* eslint-disable func-names */
|
||||
/* eslint-disable object-shorthand */
|
||||
|
||||
(function (factory) {
|
||||
// eslint-disable-next-line no-unused-expressions
|
||||
window.Promise || (window.Promise = factory());
|
||||
// eslint-disable-next-line padded-blocks
|
||||
}(function () {
|
||||
|
||||
var STATUS = {
|
||||
PENDING: 'pending',
|
||||
SEALED: 'sealed',
|
||||
FULFILLED: 'fulfilled',
|
||||
REJECTED: 'rejected',
|
||||
};
|
||||
|
||||
var asyncSettimer = typeof setImmediate !== 'undefined' ? setImmediate : setTimeout;
|
||||
var asyncQueue = [];
|
||||
var asyncTimer;
|
||||
|
||||
function NOP() { }
|
||||
|
||||
function isArray(value) {
|
||||
return Array.isArray ? Array.isArray(value) : Object.prototype.toString.call(value) === '[object Array]';
|
||||
}
|
||||
|
||||
function asyncFlush() {
|
||||
var i = 0;
|
||||
// run
|
||||
for (; i < asyncQueue.length; i++) {
|
||||
asyncQueue[i][0](asyncQueue[i][1]);
|
||||
}
|
||||
|
||||
// reset
|
||||
asyncQueue = [];
|
||||
asyncTimer = false;
|
||||
}
|
||||
|
||||
function asyncCall(callback, arg) {
|
||||
asyncQueue.push([callback, arg]);
|
||||
|
||||
if (!asyncTimer) {
|
||||
asyncTimer = true;
|
||||
asyncSettimer(asyncFlush, 0);
|
||||
}
|
||||
}
|
||||
|
||||
function publish(promise) {
|
||||
var i = 0;
|
||||
var callbacks = promise._then;
|
||||
promise._then = null;
|
||||
|
||||
for (; i < callbacks.length; i++) {
|
||||
// eslint-disable-next-line no-use-before-define
|
||||
invokeCallback(callbacks[i]);
|
||||
}
|
||||
}
|
||||
|
||||
function publishFulfillment(promise) {
|
||||
promise._state = STATUS.FULFILLED;
|
||||
publish(promise);
|
||||
}
|
||||
|
||||
function publishRejection(promise) {
|
||||
promise._state = STATUS.REJECTED;
|
||||
publish(promise);
|
||||
}
|
||||
|
||||
function fulfill(promise, value) {
|
||||
if (promise._state === STATUS.PENDING) {
|
||||
promise._state = STATUS.SEALED;
|
||||
promise._data = value;
|
||||
|
||||
asyncCall(publishFulfillment, promise);
|
||||
}
|
||||
}
|
||||
|
||||
function resolve(promise, value) {
|
||||
// eslint-disable-next-line no-use-before-define
|
||||
if (promise === value || !handleThenable(promise, value)) {
|
||||
fulfill(promise, value);
|
||||
}
|
||||
}
|
||||
|
||||
function reject(promise, reason) {
|
||||
if (promise._state === STATUS.PENDING) {
|
||||
promise._state = STATUS.SEALED;
|
||||
promise._data = reason;
|
||||
|
||||
asyncCall(publishRejection, promise);
|
||||
}
|
||||
}
|
||||
|
||||
function handleThenable(promise, value) {
|
||||
var resolved;
|
||||
|
||||
try {
|
||||
if (promise === value) {
|
||||
throw new TypeError('A promise\'s callback cannot return that same promise');
|
||||
}
|
||||
|
||||
if (value && (typeof value === 'function' || typeof value === 'object')) {
|
||||
// eslint-disable-next-line vars-on-top
|
||||
var then = value.then;
|
||||
|
||||
if (typeof then === 'function') {
|
||||
then.call(value, function (val) {
|
||||
if (!resolved) {
|
||||
resolved = true;
|
||||
|
||||
if (value !== val) {
|
||||
resolve(promise, val);
|
||||
} else {
|
||||
fulfill(promise, val);
|
||||
}
|
||||
}
|
||||
}, function (reason) {
|
||||
if (!resolved) {
|
||||
resolved = true;
|
||||
|
||||
reject(promise, reason);
|
||||
}
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
if (!resolved) {
|
||||
reject(promise, e);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function invokeResolver(fn, promise) {
|
||||
function resolvePromise(value) {
|
||||
resolve(promise, value);
|
||||
}
|
||||
|
||||
function rejectPromise(reason) {
|
||||
reject(promise, reason);
|
||||
}
|
||||
|
||||
try {
|
||||
fn(resolvePromise, rejectPromise);
|
||||
} catch (e) {
|
||||
rejectPromise(e);
|
||||
}
|
||||
}
|
||||
|
||||
function invokeCallback(subscriber) {
|
||||
var owner = subscriber.owner;
|
||||
var settled = owner._state;
|
||||
var value = owner._data;
|
||||
var callback = subscriber[settled];
|
||||
var promise = subscriber.then;
|
||||
|
||||
if (typeof callback === 'function') {
|
||||
settled = STATUS.FULFILLED;
|
||||
try {
|
||||
value = callback(value);
|
||||
} catch (e) {
|
||||
reject(promise, e);
|
||||
}
|
||||
}
|
||||
|
||||
if (!handleThenable(promise, value)) {
|
||||
if (settled === STATUS.FULFILLED) {
|
||||
resolve(promise, value);
|
||||
} else if (settled === STATUS.REJECTED) {
|
||||
reject(promise, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Promise(fn) {
|
||||
if (!(this instanceof Promise)) {
|
||||
throw new TypeError(this + ' is not a promise');
|
||||
}
|
||||
if (typeof fn !== 'function') {
|
||||
throw new TypeError('Promise resolver ' + fn + ' is not a function');
|
||||
}
|
||||
|
||||
this._then = [];
|
||||
|
||||
invokeResolver(fn, this);
|
||||
}
|
||||
|
||||
Promise.prototype = {
|
||||
_state: STATUS.PENDING,
|
||||
_then: null,
|
||||
_data: undefined,
|
||||
|
||||
then: function (onResolver, onRejection) {
|
||||
var subscriber = {
|
||||
owner: this,
|
||||
then: new Promise(NOP),
|
||||
fulfilled: onResolver,
|
||||
rejected: onRejection,
|
||||
};
|
||||
|
||||
if (this._state === STATUS.FULFILLED || this._state === STATUS.REJECTED) {
|
||||
// already resolved
|
||||
asyncCall(invokeCallback, subscriber);
|
||||
} else {
|
||||
// subscribe
|
||||
this._then.push(subscriber);
|
||||
}
|
||||
return subscriber.then;
|
||||
},
|
||||
// eslint-disable-next-line quote-props
|
||||
'catch': function (onRejection) {
|
||||
return this.then(null, onRejection);
|
||||
},
|
||||
};
|
||||
|
||||
// eslint-disable-next-line no-extend-native
|
||||
Object.defineProperty(Promise.prototype, 'constructor', { value: Promise });
|
||||
|
||||
Promise.all = function (promises) {
|
||||
var This = this;
|
||||
|
||||
if (!isArray(promises)) {
|
||||
throw new TypeError(promises + ' is not an array');
|
||||
}
|
||||
|
||||
return new This(function (onresolve, onreject) {
|
||||
var results = [];
|
||||
var remaining = 0;
|
||||
var i = 0;
|
||||
var promise;
|
||||
|
||||
function resolver(index) {
|
||||
remaining++;
|
||||
return function (value) {
|
||||
results[index] = value;
|
||||
if (!--remaining) {
|
||||
onresolve(results);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
for (; i < promises.length; i++) {
|
||||
promise = promises[i];
|
||||
|
||||
if (promise && typeof promise.then === 'function') {
|
||||
promise.then(resolver(i), onreject);
|
||||
} else {
|
||||
results[i] = promise;
|
||||
}
|
||||
}
|
||||
|
||||
if (!remaining) {
|
||||
onresolve(results);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
Promise.race = function (promises) {
|
||||
var This = this;
|
||||
|
||||
if (!isArray(promises)) {
|
||||
throw new TypeError(promises + ' is not an array');
|
||||
}
|
||||
|
||||
return new This(function (onresolve, onreject) {
|
||||
var i = 0;
|
||||
var promise;
|
||||
for (; i < promises.length; i++) {
|
||||
promise = promises[i];
|
||||
|
||||
if (promise && typeof promise.then === 'function') {
|
||||
promise.then(onresolve, onreject);
|
||||
} else {
|
||||
onresolve(promise);
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
Promise.resolve = function (value) {
|
||||
var This = this;
|
||||
|
||||
if (value && typeof value === 'object' && value.constructor === This) {
|
||||
return value;
|
||||
}
|
||||
|
||||
return new This(function (onresolve) {
|
||||
onresolve(value);
|
||||
});
|
||||
};
|
||||
|
||||
Promise.reject = function (reason) {
|
||||
var This = this;
|
||||
|
||||
return new This(function (onresolve, onreject) {
|
||||
onreject(reason);
|
||||
});
|
||||
};
|
||||
|
||||
return Promise;
|
||||
}));
|
3130
Site/fic/js/utility.js
Normal file
3130
Site/fic/js/utility.js
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user