c5_labsci/web/jscss/ciy.js
2026-01-26 17:44:49 +08:00

2769 lines
92 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Author: 众产® https://ciy.cn/code
* Version: 0.7.1
*/
'use strict';
var ciygv = { //全局变量
zindex: 100000 //弹窗层级
, messagefn: {} //窗口间消息回调
};
var ciyfn = {};
var ciyclass = {};
//ciydom所有dom操作封装逐步替代jquery各浏览器差异。不再必须支持IE。
//目前作为教学封装。
//通过封装抽象基础调用接口,实现多种区块链应用积累经验,简化浏览器内核,实现区块链浏览器。
//为未来区块链浏览器及独立源码部署,做底层技术储备。
function _ciydomclas(dom, parent) {
this._ciy = true;
this.length = 0;
if (dom === undefined || dom === null || dom === true || dom === false)
return this;
if (parent) {
if (typeof (parent) == 'string')
parent = document.querySelector(parent);
else if (parent && parent._ciy)
parent = parent[0];
else if (!iselement(parent))
parent = document;
}
if (!parent) {
if (dom && dom._ciy) {
for (var i = 0; i < dom.length; i++) {
this[this.length++] = dom[i];
}
} else if (isarray(dom)) {
for (var i = 0; i < dom.length; i++) {
this[this.length++] = dom[i];
}
} else if (typeof (dom) == 'string') {
if (dom[0] == '<' && dom[dom.length - 1] == '>') {
var parser = new DOMParser();
var doc = parser.parseFromString(dom, 'text/html');
var fragment = doc.body.firstChild;
while (fragment) {
this[this.length++] = fragment;
fragment = fragment.nextSibling;
}
} else {
var doms = document.querySelectorAll(dom);
for (var i = 0; i < doms.length; i++) {
this[this.length++] = doms[i];
}
}
} else if (dom instanceof Document) {
this[this.length++] = dom;
} else if (iselement(dom)) {
this[this.length++] = dom;
}
} else {
if (typeof (dom) == 'string') {
var doms = parent.querySelectorAll(dom);
for (var i = 0; i < doms.length; i++) {
this[this.length++] = doms[i];
}
} else if (dom && dom._ciy) {
for (var i = 0; i < dom.length; i++) {
if (parent == dom[i] || parent.contains(dom[i]))
this[this.length++] = dom[i];
}
} else if (isarray(dom)) {
for (var i = 0; i < dom.length; i++) {
if (parent == dom[i] || parent.contains(dom[i]))
this[this.length++] = dom[i];
}
} else {
if (parent == dom || parent.contains(dom))
this[this.length++] = dom;
}
}
return this;
}
_ciydomclas.prototype.each = function (fn, delay) {
if (!delay) {
for (var i = 0; i < this.length; i++) {
fn.call(this, this[i], i);
}
return;
}
var thos = this;
for (var i = 0; i < this.length; i++) {
(function (ix) {
setTimeout(function () {
fn.call(thos, thos[ix], ix);
}, delay * ix * 1000);
})(i);
}
return true;
};
_ciydomclas.prototype.node = function () {
if (!this[0])
return null;
return this[0].nodeName.toLowerCase();
};
_ciydomclas.prototype.children = function (selector) {
if (!this[0])
return this;
var doms = this[0].children;
if (selector === undefined)
return $5(doms);
if (typeof (selector) == 'number') {
if (selector < 0)
selector = doms.length + selector;
return $5(doms[selector]);
}
var retdoms = [];
for (var i = 0; i < doms.length; i++) {
if (doms[i].matches(selector))
retdoms.push(doms[i]);
}
return $5(retdoms);
};
_ciydomclas.prototype.parent = function (selector) {
if (!this[0])
return this;
if (this[0] instanceof Document)
return $5();
if (selector === undefined)
return $5(this[0].parentNode);
var target;
if (typeof (selector) != 'string')
return $5();
target = this[0].closest(selector);
return $5(target);
};
_ciydomclas.prototype.offset = function () {
if (!this[0])
return this;
const rect = this[0].getBoundingClientRect();
const doc = this[0].ownerDocument;
const win = doc.defaultView || doc.parentWindow;
const docElem = doc.documentElement;
return {
top: rect.top + win.pageYOffset - docElem.clientTop,
left: rect.left + win.pageXOffset - docElem.clientLeft
};
};
_ciydomclas.prototype.find = function (ele) {
if (!this[0])
return this;
var doms = this[0].querySelectorAll(ele);
return $5(doms);
};
_ciydomclas.prototype.prev = function (count) {
if (!this[0])
return this;
var dom = this[0];
var doms = [];
count = count || 1;
while (dom.previousElementSibling) {
dom = dom.previousElementSibling;
if (!dom)
break;
doms.push(dom);
if (--count <= 0)
break;
}
return $5(doms);
};
_ciydomclas.prototype.next = function (count) {
if (!this[0])
return this;
var dom = this[0];
var doms = [];
count = count || 1;
while (dom.nextElementSibling) {
dom = dom.nextElementSibling;
if (!dom)
break;
doms.push(dom);
if (--count <= 0)
break;
}
return $5(doms);
};
_ciydomclas.prototype.eq = function (num) {
if (!this[num])
return $5([]);
return $5(this[num]);
};
_ciydomclas.prototype.index = function (dom) {
if (dom && dom._ciy)
dom = dom[0];
for (var i = 0; i < this.length; i++) {
if (this[i] == dom)
return i;
}
return -1;
};
_ciydomclas.prototype.remove = function () {
this.each(function (dom) {
if (dom.remove)
dom.remove();
else
dom.parentNode.removeChild(dom);
});
for (var i = 0; i < this.length; i++) {
delete (this[i]);
}
this.length = 0;
return true;
};
_ciydomclas.prototype.setstyle = function (name, csstxt) {
var doc = window.document;
if (this[0])
doc = this[0].ownerDocument || this[0].document || window.document;
if (doc.getElementById(name))
return;
var styleElement = doc.createElement('style');
styleElement.type = 'text/css';
styleElement.id = name;
styleElement.innerText = csstxt.replace(/\n/g, '').replace(/\t/g, '');
doc.getElementsByTagName('head')[0].appendChild(styleElement);
};
_ciydomclas.prototype.addClass = function (cls) {
this.each(function (dom) {
dom.classList.add(cls);
});
return this;
};
_ciydomclas.prototype.removeClass = function (cls) {
this.each(function (dom) {
dom.classList.remove(cls);
});
return this;
};
_ciydomclas.prototype.hasClass = function (cls) {
if (!this[0])
return false;
return this[0].classList.contains(cls);
};
_ciydomclas.prototype.toggleClass = function (cls) {
this.each(function (dom) {
dom.classList.toggle(cls);
});
return this;
};
_ciydomclas.prototype.attr = function (name, value) {
if (!this[0] || !iselement(this[0]))
return null;
if (value === undefined) {
if (name in this[0])
return this[0][name];
var val = this[0].getAttribute(name);
if (val === null)
return null;
if (val.substring(0, 1) == '{' && val.substring(val.length - 1) == '}') {
var jsn = ciyfn.tojson(val);
if (jsn.v !== undefined)
return jsn.v;
return val;
}
return val;
}
this.each(function (dom) {
if (value === null)
return dom.removeAttribute(name);
if (name in dom)
return dom[name] = value;
if (typeof (value) == 'string' || typeof (value) == 'number' || typeof (value) == 'boolean')
return dom.setAttribute(name, value);
dom.setAttribute(name, ciyfn.jsontostr({ v: value }));
});
return this;
};
_ciydomclas.prototype.hasattr = function (name) {
if (!this[0])
return null;
var name = this[0].getAttribute(name);
if (name === undefined || name === null)
return false;
name = name.toLowerCase();
if (name === '0' || name === 'null' || name === 'false')
return false;
return true;
};
_ciydomclas.prototype.css = function (css, val) {
// .css() cal全部.css(name) 返回style单值 .css(name,value) 设置单值
// .css({}) 设置多值
if (!this[0])
return this;
if (css === undefined) {
return window.getComputedStyle(this[0]);
}
if (typeof (css) == 'string' && val === undefined) {
return this[0].style[css];
}
if (isobj(css)) {
this.each(function (dom) {
this._setcssarr(dom, css);
});
}
else if (typeof (css) == 'string' && val !== undefined) {
this.each(function (dom) {
dom.style[css] = val;
});
}
return this;
};
_ciydomclas.prototype._setcssarr = function (dom, css) {
for (var key in css) {
dom.style[key] = css[key];
}
};
_ciydomclas.prototype.val = function (val, from) {
if (val === undefined) {
if (!this[0])
return null;
if (this[0].ciycmp)
return this[0].ciycmp.value;
return this[0].value;
}
this.each(function (dom) {
if (dom.ciycmp)
return dom.ciycmp.setvalue(val, from);
dom.value = val;
});
return this;
};
_ciydomclas.prototype.html = function (html) {
if (!this[0])
return '';
if (html === undefined) {
return this[0].innerHTML;
}
if (typeof (html) == 'string' || typeof (html) == 'number') {
this[0].innerHTML = html;
} else if (iselement(html)) {
this[0].replaceChild(html, this[0].firstChild);
}
return this;
};
_ciydomclas.prototype.outhtml = function (html) {
if (!this[0])
return '';
if (html === undefined) {
return this[0].outerHTML;
}
this.each(function (dom) {
if (typeof (html) == 'string') {
dom.outerHTML = html;
} else if (iselement(html)) {
dom.parentElement.replaceChild(html, dom);
}
});
return this;
};
_ciydomclas.prototype.text = function (text) {
if (!this[0])
return '';
if (text === undefined) {
return this[0].textContent.trim();
}
this.each(function (dom) {
if (typeof (text) == 'string' || typeof (text) == 'number') {
dom.innerText = text;
} else if (iselement(text)) {
dom.innerText = text.textContent;
}
});
return this;
};
_ciydomclas.prototype._insdom = function (elehtml, pos) {
if (elehtml === undefined || !this[0])
return this;
if (typeof (elehtml) == 'string') {
this[0].insertAdjacentHTML(pos, elehtml);
} else if (elehtml && elehtml._ciy) {
var thos = this;
elehtml.each(function (dom) {
thos[0].insertAdjacentElement(pos, dom);
});
} else if (iselement(elehtml)) {
this[0].insertAdjacentElement(pos, elehtml);
}
return this;
};
_ciydomclas.prototype.append = function (elehtml) {
return this._insdom(elehtml, 'beforeend');
};
_ciydomclas.prototype.prepend = function (elehtml) {
return this._insdom(elehtml, 'afterbegin');
};
_ciydomclas.prototype.before = function (elehtml) {
return this._insdom(elehtml, 'beforebegin');
};
_ciydomclas.prototype.after = function (elehtml) {
return this._insdom(elehtml, 'afterend');
};
_ciydomclas.prototype.scroll = function (opn) {
opn.behavior = 'smooth';
if (opn.act == 'view') {
this[0].scrollIntoView(opn);
} else if (opn.act == 'by') {
this[0].scrollBy(opn);
} else {
this[0].scrollTo(opn);
}
return this;
};
_ciydomclas.prototype.on = function (evt, selector, func, isone) {
if (this.length == 0)
return;
if (typeof selector === 'function') {
func = selector;
selector = null;
}
this.each(function (dom) {
var listenfn = function (e) {
var ev = { originalEvent: e };
ev.fromElement = dom;
ev.preventDefault = function () {
if (e.preventDefault)
e.preventDefault();
else
e.returnValue = false;
};
ev.stopPropagation = function () {
if (e.stopPropagation)
e.stopPropagation();
else
e.cancelBubble = true;
};
var props = ['files', 'clipboardData', 'dataTransfer', 'x', 'y', 'clientX', 'clientY', 'offsetX', 'offsetY', 'pageX', 'pageY', 'screenX', 'screenY', 'keyCode', 'altKey', 'ctrlKey', 'shiftKey', 'which', 'wheelDelta', 'detail', 'srcElement', 'toElement', 'target'];
for (var i = 0; i < props.length; i++) {
var prop = props[i];
if (e[prop] !== undefined)
ev[prop] = e[prop];
}
if (selector) {
var target;
if (typeof (selector) == 'string') {
if (e.target instanceof Document)
target = e.target.documentElement.closest(selector);
else
target = e.target.closest(selector);
} else {
if (iselement(selector) || (selector._ciy && selector.length > 0)) {
if (selector._ciy)
selector = selector[0];
target = e.target;
while (target !== null && target !== selector) {
target = target.parentNode;
}
}
}
if (target) {
ev.currentTarget = target;
func.call(target, ev);
if (isone)
dom.removeEventListener(evt, listenfn);
}
} else {
ev.currentTarget = dom;
func.call(dom, ev);
if (isone)
dom.removeEventListener(evt, listenfn);
}
};
dom.addEventListener(evt, listenfn);
if (!isone) {
if (!dom._ciylistener)
dom._ciylistener = [];
dom._ciylistener.push({ evt: evt, func: listenfn });
}
});
return this;
};
_ciydomclas.prototype.one = function (evt, selector, func) {
return this.on(evt, selector, func, true);
};
_ciydomclas.prototype.off = function (evt) {
if (this.length == 0)
return;
this.each(function (dom) {
if (!dom._ciylistener)
return;
if (evt) {
for (var i = dom._ciylistener.length - 1; i >= 0; i--) {
if (dom._ciylistener[i].evt != evt)
continue;
dom.removeEventListener(evt, dom._ciylistener[i].func);
dom._ciylistener.splice(i, 1);
}
if (dom._ciylistener.length == 0)
delete dom._ciylistener;
} else {
for (var i = dom._ciylistener.length - 1; i >= 0; i--) {
dom.removeEventListener(dom._ciylistener[i].evt, dom._ciylistener[i].func);
}
delete dom._ciylistener;
}
});
return this;
};
_ciydomclas.prototype.trigger = function (evt, data) {
if (this.length == 0)
return;
var opn = {};
opn.bubbles = true;
opn.cancelable = true;
if (data)
opn.detail = data;
this.each(function (dom) {
if (evt == 'click' || evt == 'mousedown' || evt == 'mouseup' || evt == 'mousemove' || evt == 'dblclick' || evt == 'contextmenu') {
dom.dispatchEvent(new MouseEvent(evt, opn));
} else {
dom.dispatchEvent(new Event(evt, opn));
}
});
return this;
};
_ciydomclas.prototype.rect = function () {
if (!this[0])
return { top: 0, left: 0, width: 0, height: 0 };
if (this[0] instanceof Document)
return { top: 0, left: 0, width: window.innerWidth, height: window.innerHeight };
return this[0].getBoundingClientRect();
};
_ciydomclas.prototype.width = function () {
if (!this[0])
return 0;
if (this[0] instanceof Document)
return window.innerWidth;
return this[0].offsetWidth;
};
_ciydomclas.prototype.height = function () {
if (!this[0])
return 0;
if (this[0] instanceof Document)
return window.innerHeight;
return this[0].offsetHeight;
};
_ciydomclas.prototype.winwidth = function () {
if (!this[0])
return 0;
return this[0].ownerDocument.defaultView.innerWidth;
};
_ciydomclas.prototype.winheight = function () {
if (!this[0])
return 0;
return this[0].ownerDocument.defaultView.innerHeight;
};
_ciydomclas.prototype._getdisplay = function (dom) {
if (!iselement(dom))
return 'block';
var dp = window.getComputedStyle(dom).display;
if (dp != 'none')
return dp;
var node = dom.nodeName.toLowerCase();
if (node == 'div' || node == 'p' || node == 'ul' || node == 'ol' || node == 'header' || node == 'footer' || node == 'section' || node == 'article' || node == 'nav')
return 'block';
else if (node == 'table')
return 'table';
else
return 'inline';
};
_ciydomclas.prototype.aniin = function (tranform, sec, display) {
sec = tofloat(sec);
if (sec < 0.1)
sec = 0.5;
tranform = tranform || '';
display = display || null;
var thos = this;
thos._aniing = true;
this.each(function (dom) {
dom.style.opacity = 0;
dom.style.transform = tranform;
dom.style.transition = 'none';
dom.style.display = display ? display : this._getdisplay(dom);
});
setTimeout(function () {
thos.css({ opacity: 1, transform: '', transition: 'all ' + sec + 's' });
}, 1);
setTimeout(function () {
thos._aniing = false;
}, sec * 1000);
};
_ciydomclas.prototype.aniout = function (tranform, sec, bremove) {
sec = tofloat(sec);
if (sec < 0.1)
sec = 0.5;
tranform = tranform || '';
var thos = this;
this.css({ opacity: 0, transform: tranform, transition: 'all ' + sec + 's' });
setTimeout(function () {
if (thos._aniing)
return;
if (bremove)
thos.remove();
else
thos.css({ opacity: 1, display: 'none', transform: '', transition: '' });
}, sec * 1000);
};
_ciydomclas.prototype.show = function (tranform, sec, display) {
display = display || null;
sec = tofloat(sec);
if (sec > 5)
sec = 0.5;
if (sec <= 0) {
this.css({ opacity: 1, display: display ? display : this._getdisplay(this[0]) });
return this;
}
var thos = this;
if (tranform == 'slide') {
this._aniing = true;
this.each(function (dom) {
if (dom._ciyopacity === undefined) dom._ciyopacity = dom.style.opacity;
if (dom._ciypadding === undefined) dom._ciypadding = dom.style.padding;
if (dom._ciyheight === undefined) dom._ciyheight = dom.style.height;
if (dom._ciytransition === undefined) dom._ciytransition = dom.style.transition;
if (dom._ciyoverflow === undefined) dom._ciyoverflow = dom.style.overflow;
dom.style.display = display ? display : this._getdisplay(dom);
dom.style.opacity = 0;
var hei = dom.offsetHeight;
dom.style.height = 0;
dom.style.padding = '0';
dom.style.transition = 'all ' + sec + 's';
setTimeout(function () {
dom.style.height = hei + 'px';
dom.style.overflow = 'hidden';
dom.style.padding = dom._ciypadding;
dom.style.opacity = dom._ciyopacity;
}, 0);
});
setTimeout(function () {
thos._aniing = false;
thos.each(function (dom) {
dom.style.height = dom._ciyheight;
dom.style.overflow = dom._ciyoverflow;
dom.style.transition = dom._ciytransition;
});
}, sec * 1000);
return this;
}
if (tranform == 'up')//fade默认
tranform = 'translateY(30px)';
else if (tranform == 'down')
tranform = 'translateY(-30px)';
else if (tranform == 'left')
tranform = 'translateX(-30px)';
else if (tranform == 'right')
tranform = 'translateX(30px)';
else if (tranform == 'small')
tranform = 'scale(0.5)';
else if (tranform == 'big')
tranform = 'scale(2)';
this.aniin(tranform, sec, display);
return this;
};
_ciydomclas.prototype.hide = function (tranform, sec, bremove) {
sec = tofloat(sec);
if (sec <= 0) {
if (bremove)
this.remove();
else
this.css({ display: 'none', opacity: 1, transform: '' });
return this;
}
if (tranform == 'slide') {
this.each(function (dom) {
var hei = dom.offsetHeight;
if (dom._ciyheight === undefined) dom._ciyheight = dom.style.height;
if (dom._ciymarginBottom === undefined) dom._ciymarginBottom = dom.style.marginBottom;
if (dom._ciytransition === undefined) dom._ciytransition = dom.style.transition;
if (dom._ciypadding === undefined) dom._ciypadding = dom.style.padding;
if (dom._ciyborder === undefined) dom._ciyborder = dom.style.border;
if (dom._ciyoverflow === undefined) dom._ciyoverflow = dom.style.overflow;
if (dom._ciydisplay === undefined) dom._ciydisplay = dom.style.display;
dom.style.height = hei + 'px';
dom.style.display = dom._ciydisplay || 'block';
dom.style.transition = 'all ' + sec + 's';
setTimeout(function () {
dom.style.height = 0;
dom.style.marginBottom = 0;
dom.style.border = 'none';
dom.style.padding = '0';
dom.style.overflow = 'hidden';
}, 16);
});
var thos = this;
setTimeout(function () {
if (thos._aniing)
return;
if (bremove)
thos.remove();
else {
thos.each(function (dom) {
dom.style.height = dom._ciyheight;
dom.style.marginBottom = dom._ciymarginBottom;
dom.style.border = dom._ciyborder;
dom.style.padding = dom._ciypadding;
dom.style.overflow = dom._ciyoverflow;
dom.style.display = 'none';
dom.style.transition = dom._ciytransition;
});
}
}, sec * 1000 + 50);
return this;
}
if (tranform == 'up')//fade默认
tranform = 'translateY(30px)';
else if (tranform == 'down')
tranform = 'translateY(-30px)';
else if (tranform == 'left')
tranform = 'translateX(-30px)';
else if (tranform == 'right')
tranform = 'translateX(30px)';
else if (tranform == 'small')
tranform = 'scale(0.5)';
else if (tranform == 'big')
tranform = 'scale(2)';
this.aniout(tranform, sec, bremove);
return this;
};
_ciydomclas.prototype.toggle = function (tranform, sec, display) {
if (this.css('display') == 'none')
this.show(tranform, sec, display);
else
this.hide(tranform, sec, false);
};
function $5(dom, parent) {
if (dom && dom._ciy && parent === undefined)
return dom;
return new _ciydomclas(dom, parent);
}
// console.log(isobj(null));
// console.log(isobj(''));
// console.log(isobj(new Date()));
// console.log(isobj(new ciyclass.loading()));
// console.log(isobj(0));
// console.log(isobj(1.2));
// console.log(isobj(undefined));
// console.log(isobj());
// console.log(isobj(false));
// console.log(isobj(true));
// console.log(isobj([]));
function tostr(val, defval) {
if (!val) {
if (defval == undefined)
defval = '';
return defval;
}
return val + '';
}
function toint(val, defval) {
if (defval == undefined)
defval = 0;
var ret = parseInt(val);
if (isNaN(ret))
return defval;
else if (ret == undefined)
return defval;
else
return ret;
}
function tofloat(val, defval) {
if (defval == undefined)
defval = 0;
var ret = parseFloat(val);
if (isNaN(ret))
return defval;
else
return ret;
}
function tostamp(time) {
var t;
if (time instanceof Date)
t = time;
else if (time === undefined || time == -1 || time == '-1')
t = new Date();
else if (/^\d+$/.test(time)) {
if (time == 0)
return 0;
t = new Date(time * 1000);
} else if (typeof (time) == 'string')
t = new Date(time.replace(/\-/g, '/'));
else
return 0;
return toint(t.getTime() / 1000);
}
function isarray(v) {
var typ = Object.prototype.toString.call(v);
if (typ === '[object NodeList]')
return true;
if (typ === '[object HTMLCollection]')
return true;
return typ === '[object Array]';
}
function isobj(v) {
return Object.prototype.toString.call(v) === '[object Object]';
}
function iselement(v) {
var typ = Object.prototype.toString.call(v);
return typ.indexOf('Element') > -1;
}
ciyfn.isemptyobj = function (obj) {
for (var key in obj) {
if (obj.hasOwnProperty(key))
return false;
}
return true;
}
ciyfn.split = function (str, sep) {
if (!str)
return [];
str = str + '';
var arr = str.split(sep);
for (var i = 0; i < arr.length; i++)
arr[i] = arr[i].trim();
return arr;
}
ciyfn.getdictdata = function (datakey, pagedata) {
//直接数组,字典缓存,静态引用,字符串拼接
if (isarray(datakey))
return datakey;
if (typeof (datakey) != 'string')
return new Array();
var datas = ciyfn.getstorage('cata_' + datakey);
if (isarray(datas))
return datas;
if (isobj(pagedata) && pagedata[datakey])
return pagedata[datakey];
if (isarray(window[datakey]))
return window[datakey];
if (datakey.indexOf(',') == -1 && datakey.indexOf(':') == -1)
return new Array();
var svs = ciyfn.split(datakey, ',');
datas = new Array();
for (var i = 0; i < svs.length; i++) {
var ind = svs[i].indexOf(':');
if (ind == -1) {
datas.push({
id: i + 1
, name: svs[i]
});
} else {
var id = svs[i].substring(0, ind);
datas.push({
id: id
, name: svs[i].substring(ind + 1)
});
}
}
return datas;
}
ciyfn.filterdictdata = function (data, opn) {
var retdata = [];
if (!isarray(data))
return [];
if (opn.all)
retdata.push({ id: '', name: ciyfn.lang(opn.all) });
if (isarray(opn.first)) {
for (var i in opn.first)
retdata.push(opn.first[i]);
}
var limit = 0;
var limit_data = null;
if (opn.limit) { //2~ 10~20 12,13,14
if (opn.limit.indexOf('~') > -1) {
limit = 1;
limit_data = opn.limit.split('~');
} else {
limit = 2;
limit_data = opn.limit.split(',');
}
}
if (opn.filter) {
var fs = opn.filter.split('=');
if (fs.length == 2) {
opn.filter = {
field: fs[0]
, value: fs[1]
};
} else {
opn.filter = null;
}
}
if (!isarray(opn.rename))
opn.rename = null;
for (var i in data) {
if (limit == 1) {
if (limit_data[0] != '' && toint(data[i].id) < toint(limit_data[0]))
continue;
if (limit_data[1] != '' && toint(data[i].id) > toint(limit_data[1]))
continue;
} else if (limit == 2) {
if (limit_data.indexOf(data[i].id + '') == -1)
continue;
}
if (opn.filter && (data[i][opn.filter.field] ? data[i][opn.filter.field] : '') != opn.filter.value)
continue;
if (opn.rename) {
for (var j in opn.rename) {
if (data[i].id == opn.rename[j].id)
data[i].name = opn.rename[j].name;
}
}
retdata.push(data[i]);
}
return retdata;
}
ciyfn.tojson = function (data) {
var ret;
try {
ret = JSON.parse(data);
} catch (err) {
return { errmsg: err.message }
}
if (isarray(ret))
return ret;
if (ret)
return ret;
return { errmsg: 'JSON parse error' };
}
ciyfn.jsontostr = function (data, space) {
var ret;
try {
ret = JSON.stringify(data, null, space);
} catch (err) {
return '';
}
return ret;
}
ciyfn.sha256 = async function (str) {
const msgBuffer = new TextEncoder().encode(str);
const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
const hashArray = Array.from(new Uint8Array(hashBuffer));
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
}
ciyfn.sha512 = async function (str) {
const msgBuffer = new TextEncoder().encode(str);
const hashBuffer = await crypto.subtle.digest('SHA-512', msgBuffer);
const hashArray = Array.from(new Uint8Array(hashBuffer));
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
}
ciyfn.loadjs = function (objname, jsurl, donefunc) {
if (window[objname])
return donefunc();
var script = document.createElement("script");
script.type = "text/javascript";
script.src = jsurl;
script.onload = function () {
donefunc();
};
document.head.appendChild(script);
}
ciyfn.calljsondata = function (url, successfunc, opn) {
opn = opn || {};
opn.url = url;
opn.method = 'GET';
opn.success = function (data, xhr) {
var ind = Math.min(data.indexOf('['), data.indexOf('{'));
if (ind > 0)
data = data.substring(ind);
var json = ciyfn.tojson(data);
if (json.errmsg) {
if (typeof opn.fail === 'function')
opn.fail(data, xhr);
else
ciyfn.alert('Err:' + json.errmsg);
return;
}
successfunc(json, xhr);
}
ciyfn.ajax(opn);
}
ciyfn.callfrequency = function (sec) {
if (ciygv._callduptime && (new Date().getTime() - ciygv._callduptime < sec * 1000))
return true;
ciygv._callduptime = new Date().getTime();
return false;
}
ciyfn.throttle = function (dom, sec) {
sec = toint(sec);
if (sec < 1)
sec = ciy_vars.dupsec || 3;
if (ciygv._clickduptime && (new Date().getTime() - ciygv._clickduptime < sec * 1000))
return true;
ciygv._clickduptime = new Date().getTime();
if (dom) {
var dombtn = $5(dom);
if (dombtn.node() == 'form')
dombtn = dombtn.find('[type="submit"]');
dombtn.addClass('loading');
ciygv._clickdupdombtn = dombtn;
}
ciygv._clickduptime = new Date().getTime();
return false;
}
ciyfn.callfastfunc = function (dom, confirmmsg, func, postparam, succfunc, failfunc) {
if (!confirmmsg)
return cfunc();
if (ciygv._clickduptime)
return;
ciyfn.alert(confirmmsg, function (opn) {
opn.close();
if (opn.btn != "关闭")
cfunc();
}, { btns: ["继续", "*关闭"] });
function cfunc() {
if (ciyfn.throttle(dom)) return;
ciyfn.callfunc(func, postparam, function (json) {
if (succfunc == 'reload') {
ciyfn.toast('操作成功', function () {
location.reload();
});
} else if (typeof (succfunc) == 'function')
succfunc(json);
else
ciyfn.toast('操作成功');
}, { fail: failfunc });
}
}
ciyclass.loading = function () {
try {
if (window.parent != window && window.parent.ciyclass.loading)
return window.parent.ciyclass.loading();
} catch { }
var htmldom = '<div class="ciy-layer ciy-loading" style="z-index: ' + (ciygv.zindex++) + ';"></div>';
htmldom = $5(htmldom);
$5('body').append(htmldom);
setTimeout(function () { htmldom.addClass("start") }, 50);
this.close = function (cls) {
htmldom.addClass(cls);
setTimeout(function () { $5('.ciy-loading').remove(); }, 600);
}
return this;
}
ciyfn.callfunc = function (funcname, post, successfunc, opn) { //opn showload,method,fail,complete,header,timeout
opn = opn || {};
opn.header = opn.header || {};
if (typeof (window['ciy_vars']) === 'undefined')
window.ciy_vars = {};
if (ciy_vars.tokenfield)
opn.header['ciyauth'] = ciyfn.getstorage('_' + ciy_vars.tokenfield);
if (opn.showload === undefined)
opn.showload = true;
if (opn.method == 'get' || funcname.indexOf('?') > -1 || funcname.indexOf('://') > -1) {
opn.url = funcname;
} else {
var ind = document.location.pathname.lastIndexOf('/');
var path = document.location.pathname.substring(1, ind + 1);
var pagename = document.location.pathname.substring(ind + 1) || 'index.html';
ind = pagename.lastIndexOf('.');
if (ind > 0)
pagename = pagename.substring(0, ind);
if (funcname.indexOf('.') == -1) {
funcname = path + pagename + '.' + funcname;
} else if (funcname.indexOf('/') == -1) {
funcname = path + funcname;
}
opn.url = '/' + funcname;
}
opn.data = post || {};
opn.data._pf = 'PC' + new Date().getTime() + '_' + parseInt(80000000 + Math.random() * 10000000);
opn.done = function (xhr) {
ciygv._clickduptime = null;
if (ciygv._clickdupdombtn) {
ciygv._clickdupdombtn.removeClass('loading');
ciygv._clickdupdombtn = null;
}
if (typeof opn.complete === 'function')
opn.complete(xhr);
}
opn.success = function (data, xhr) {
var ind = data.indexOf('{');
if (ind > 0)
data = data.substring(ind);
var json = ciyfn.tojson(data);
if (json.code == 1) {
if (opn._load)
opn._load.close('succ');
if (ciy_vars.tokenfield) {
var re = xhr.getResponseHeader('_re');
if (re && funcname.indexOf('restorage') == -1
&& document.location.pathname.indexOf('/rigger/cata.html') == -1
&& document.location.pathname.indexOf('/rigger/admin.html') == -1
) {
ciyfn.sendsignal(window.top, 'restorage', { show: false });
}
if (json['_ciyauth'])
ciyfn.setstorage('_' + ciy_vars.tokenfield, json['_ciyauth']);
}
if (typeof (successfunc) == 'function')
successfunc(json, xhr);
} else if (json.code == 2) {
if (ciy_vars.loginurl) {
if (ciy_vars.loginurl)
top.location.href = '/' + ciy_vars.loginurl;
} else {
ciyfn.alert('No Login');
}
} else if (json.code == 3) {
document.body.innerHTML = '<h1 style="text-align: center;margin-top: 0.5em;color: #ff0000;font-size: 2em;">' + json.errmsg + '</h1>';
} else {
if (opn._load)
opn._load.close('fail');
if (typeof (opn.fail) === 'function')
opn.fail(json, xhr);
else
ciyfn.alert(json.errmsg);
}
}
if (opn.showload)
opn._load = new ciyclass.loading();
ciyfn.ajax(opn);
}
ciyfn.ajax = function (opn) { //IE8 OK
opn = opn || {};
var header = opn.header || {};
if (!header['Content-Type']) //header:{'Content-Type':'application/x-www-form-urlencoded'},
header['Content-Type'] = 'application/json';
var url = opn.url || '';
var timeout = opn.timeout || 10;
if (timeout < 1)
timeout = 3;
if (timeout > 20)
header['ciy-timeout'] = timeout;
var method = opn.method || 'POST';
method = method.toUpperCase();
if (method == 'GET' && typeof (opn.data) == 'object') {
var datastr = "";
for (var p in opn.data)
datastr += "&" + encodeURIComponent(p) + "=" + encodeURIComponent(opn.data[p]);
if (url.indexOf('?') == -1)
url += '?' + datastr.substring(1);
else
url += datastr;
}
if (document.location.search) {
if (url.indexOf('?') > -1)
url += '&' + document.location.search.substring(1);
else
url += document.location.search;
}
var request = new XMLHttpRequest();
request.withCredentials = true;
request.open(method, url, true);
if (typeof (header) == 'object') {
for (var i in header) {
if (header[i] !== undefined)
request.setRequestHeader(i, "" + header[i]);
}
}
var sendstr = null;
if (method == 'POST' || method == 'PUT') {
if (typeof (opn.data) == 'object') {
if (header['Content-Type'] == 'application/x-www-form-urlencoded') {
var sendstr = "";
for (var p in opn.data)
sendstr += "&" + encodeURIComponent(p) + "=" + encodeURIComponent(opn.data[p]);
sendstr = sendstr.substring(1);
} else
sendstr = ciyfn.jsontostr(opn.data);
} else if (opn.data) {
if (header['Content-Type'] == 'application/json') {
var json = {};
var ds = opn.data.split('&');
for (var d in ds) {
var ind = ds[d].indexOf('=');
if (ind > 0)
json[ds[d].substring(0, ind)] = ds[d].substring(ind + 1);
}
sendstr = ciyfn.jsontostr(json);
} else
sendstr = "" + opn.data;
}
}
request.timeout = timeout * 1000;
request.ontimeout = function () {
clearTimeout(aborttime);
console.warn('request timeout: ' + timeout + 's');
};
request.send(sendstr);
request.onreadystatechange = function () {
if (this.readyState === 4) {
clearTimeout(aborttime);
if (typeof opn.done === 'function')
opn.done(this);
if (this.status >= 200 && this.status < 400) {
if (typeof opn.success === 'function')
opn.success(this.responseText, this);
} else {
var errtxt = 'ErrCode:' + this.status;
if (this.status == 200)
errtxt = 'Server Error: ' + this.responseText;
else if (this.status == 404)
errtxt = "404 Not Found: " + this.responseURL;
else if (this.status == 0)
errtxt = "Server No Response.";
else
errtxt = 'ErrCode:' + this.status + "," + this.statusText;
if (typeof opn.fail === 'function')
opn.fail({ errmsg: errtxt }, this);
else
ciyfn.alert(errtxt);
}
}
}
var aborttime = window.setTimeout(function () {
console.warn('ajax timeout abort: ' + timeout + 's');
request.abort("timeout");
}, timeout * 1000 + 3000);
}
ciyfn.ajaxsync = function (opn) {
var method = opn.method || 'POST';
var request;
if (window.XMLHttpRequest) {
request = new XMLHttpRequest();
} else {
request = new ActiveXObject("Microsoft.XMLHTTP");
}
try {
request.open(method.toUpperCase(), opn.url, false);
request.setRequestHeader("Content-type", "application/json");
if (opn.data) {
if (typeof (opn.data) == 'string')
request.send(opn.data);
else
request.send(JSON.stringify(opn.data));
} else {
request.send();
}
} catch (err) {
return {
"errmsg": "ConnectFail"
}
}
if (request.readyState == 4 && request.status == 200) {
let res = JSON.parse(request.responseText)
if (res.code == 0) {
res.code = 1;
return res;
}
res.errmsg = res.msg || res.message || '未知错误';
return res;
}
return {
"errmsg": "本地服务连接失败"
};
}
ciyfn._getform_dom = function (dom) {
var sep = ',';
var retdata = {};
var els = dom.querySelectorAll("input,textarea,select");
for (var i = 0; i < els.length; i++) {
if (!els[i].name)
continue;
var eltype = els[i].getAttribute('type');
if (els[i].tagName == 'SELECT') {//即将废弃
retdata[els[i].name] = els[i].value;
} else if (eltype == 'file') {
} else if (eltype == 'radio') {//即将废弃
if (els[i].checked) {
retdata[els[i].name] = els[i].value;
} else if (retdata[els[i].name] === undefined) {
retdata[els[i].name] = false;
}
} else if (eltype == 'checkbox') {//即将废弃
if (els[i].checked) {
if (retdata[els[i].name] === undefined) {
retdata[els[i].name] = sep + els[i].value + sep;
} else {
retdata[els[i].name] += els[i].value + sep;
}
}
} else {
if (retdata[els[i].name] === undefined)
retdata[els[i].name] = els[i].value;
else
retdata[els[i].name] += sep + els[i].value;
}
}
return retdata;
}
ciyfn.getform = function (dom, parentTag) {
while (true) {
if (dom.tagName == parentTag)
break;
if (dom.tagName == 'BODY' || dom.tagName == 'FORM')
break;
if (!dom.parentNode)
break;
dom = dom.parentNode;
}
var retdata = ciyfn._getform_dom(dom);
return retdata;
}
ciyfn.showimg = function (idx, imgstr, act) {
ciyfn.alert({
frame: '/jscss/imgreview.html?idx=' + idx + '&act=' + act + '&imgs=' + encodeURIComponent(imgstr)
, title: null
, noclosebtn: true
, width: 'max'
, height: 'max'
, btns: null
});
}
ciyfn.makeuploadpath = function (mpath, saas) {
var path = '{Y}/{m}{d}/' + mpath;
if (saas && saas.saasid && saas.saaspre)
path = saas.saaspre + toint(saas.saasid / 1000) + '/' + saas.saasid + '/' + path;
return path;
}
ciyfn.ccode = function (arr, value, field, nonestr) {
field = field || 'name';
if (typeof (nonestr) === 'undefined')
nonestr = '--';
arr = ciyfn.getdictdata(arr);
if (typeof (arr) != 'object')
return '!';
for (var i = 0; i < arr.length; i++) {
if (arr[i].id == value) {
if (field == 'idx')
return i;
if (field == '_obj')
return arr[i];
if (arr[i][field])
return arr[i][field];
return nonestr;
}
}
if (field == '_obj')
return null;
if (!value)
return nonestr;
return '';
}
ciyfn.scode = function (arr, ids, field) {
arr = ciyfn.getdictdata(arr);
if (typeof (arr) != 'object')
return ['!'];
ids = ids || '';
var vals = ids.split(',');
var rets = [];
for (var v = 0; v < vals.length; v++) {
for (var i = 0; i < arr.length; i++) {
if (arr[i].id != vals[v])
continue;
if (field)
rets.push(arr[i][field]);
else
rets.push(arr[i]);
}
}
return rets;
}
ciyfn.mcode = function (arr, value, field) {
arr = ciyfn.getdictdata(arr);
if (typeof (arr) != 'object')
return [];
var ret = [];
for (var x = 0; x < 100; x++) {
var bfind = false;
for (var i = 0; i < arr.length; i++) {
if (arr[i].id == value) {
bfind = true;
value = arr[i].upid;
if (field)
ret.unshift(arr[i][field]);
else
ret.unshift(arr[i]);
break;
}
}
if (!bfind)
break;
}
return ret;
}
ciyfn.arr_treemap = function (rows, upid) {
var tree = [];
for (var i = 0; i < rows.length; i++) {
var item = rows[i];
if (item.upid != upid)
continue;
var child = ciyfn.arr_treemap(rows, item.id);
if (Object.keys(child).length > 0)
item.child = child;
tree.push(item);
}
return tree;
}
ciyfn.urlparam = function (url) {
var obj = {};
if (url) {
if (url.indexOf('?') == -1)
return obj;
url = url.substring(url.indexOf('?'));
} else
url = document.location.search;
if (url[0] != '?')
return obj;
var pairs = url.substring(1).split('&');
for (var p in pairs) {
var ind = pairs[p].indexOf('=');
if (ind > -1)
obj[decodeURIComponent(pairs[p].substring(0, ind))] = decodeURIComponent(pairs[p].substring(ind + 1));
else
obj[decodeURIComponent(pairs[p])] = true;
}
return obj;
}
ciyfn.sendsignal = function (win, func, data) {
data = data || {};
data.func = func;
if (win)
win.postMessage(data, '*');
}
ciyfn.inmobile = function () {
return /Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent);
}
ciyclass.mask = function () {
var thos = this;
var clickfn = null;
var maskdom = $5('<div class="ciy-mask"></div>');
$5('body').prepend(maskdom);
maskdom.on('click', function (e) {
if (typeof clickfn == 'function') {
var ret = clickfn(thos, e);
if (ret === false)
return;
clickfn = null;
} else
thos.hide();
});
maskdom.on('contextmenu', function (e) {
thos.hide();
if (typeof clickfn == 'function') {
clickfn(thos, e);
clickfn = null;
}
e.preventDefault();
return false;
});
this.show = function (fn, css) {
if (isobj(css))
maskdom.css(css);
clickfn = fn;
maskdom.css('display', 'block');
}
this.hide = function () {
maskdom.css('display', 'none');
}
return this;
}
ciyfn.popmenu = function (e, popmenu) {
var pmdom;
if (isarray(popmenu)) {
var html = '';
html += '<ul class="ciy-popmenu">';
for (var i = 0; i < popmenu.length; i++) {
html += '<li';
for (var key in popmenu[i]) {
html += ' data-' + key + '="' + popmenu[i][key] + '"';
}
html += '>' + popmenu[i].title + '</li>';
}
html += '</ul>';
pmdom = $5(html);
pmdom.css('position', 'fixed');
$5('body').append(pmdom);
} else {
pmdom = $5(popmenu);
}
$5('body').append(pmdom);
var winWidth = document.documentElement.clientWidth;
var winHeight = document.documentElement.clientHeight;
var mouseX = e.clientX;
var mouseY = e.clientY;
pmdom.css({ 'display': 'block' });
var menuWidth = pmdom.width();
var menuHeight = pmdom.height();
var menuLeft, menuTop;
if (mouseX + menuWidth >= winWidth &&
mouseY + menuHeight >= winHeight) {
menuLeft = mouseX - menuWidth;
menuTop = mouseY - menuHeight;
} else if (mouseX + menuWidth >= winWidth) {
menuLeft = mouseX - menuWidth;
menuTop = mouseY;
} else if (mouseY + menuHeight >= winHeight) {
menuLeft = mouseX;
menuTop = mouseY - menuHeight;
} else {
menuLeft = mouseX;
menuTop = mouseY;
};
ciygv.mask.show(function () {
pmdom.remove();
}, { zIndex: 10000 });
pmdom.css({ 'left': menuLeft + "px", 'top': menuTop + "px", 'zIndex': 10001 });
return pmdom;
}
ciyfn.showmap = function (lat, lng, zoom) {
ciyfn.alert({
title: '地图位置',
width: 'max',
height: 'max',
frame: '/jscss/map_loc.html?lat=' + lat + "&lng=" + lng + '&zoom=' + zoom
});
}
ciyfn.alert = function (content, cb, opn) {
if (typeof (content) == 'string') {
opn = opn || {};
if (typeof (cb) == 'function')
opn.cb = cb;
opn.content = content;
if (opn.maskclose === undefined)
opn.maskclose = true;
} else {
opn = content || {};
if (typeof (cb) == 'function')
opn.cb = cb;
opn.content = opn.content || '';
if (opn.maskclose === undefined)
opn.maskclose = false;
}
opn.autoheight = opn.autoheight || true;
try {
if (!opn.noparent && window.parent != window && window.parent.ciyfn.alert)
return window.parent.ciyfn.alert(opn);
} catch { }
var contentstyle = opn.contentstyle || '';
if (opn.width) {
if (opn.width == 'mb')
contentstyle += 'width: 27em;';
else if (opn.width == 'pc')
contentstyle += 'width:' + ((57 * 14 > window.innerWidth) ? '27em' : '57em') + ';';
else
contentstyle += 'width: ' + opn.width + ';';
}
if (opn.height) {
if (opn.height == 'mb')
contentstyle += 'height:' + (window.innerHeight - 80) + 'px;';
else if (opn.height == 'pc')
contentstyle += 'height:' + (window.innerHeight - 100) + 'px;';
else
contentstyle += 'height: ' + opn.height + ';';
}
ciygv.zindex += 3;
var htmldom = '<div';
if (opn.stopclick)
htmldom += ' onclick="event.stopPropagation();"';
htmldom += ' class="ciy-layer ciy-dialog" style="opacity:0;top:-100vh;z-index: ' + (ciygv.zindex - 1) + ';">';
if (opn.title !== null) {
opn.title = opn.title || "温馨提示";
htmldom += '<div class="title flex flex-center" onselectstart="return false"><div class="flex1">' + ciyfn.lang(opn.title) + '</div>';
if (!opn.noclosebtn)
htmldom += '<div class="ciy-close close"></div>';
htmldom += '</div>';
} else {
if (!opn.noclosebtn)
htmldom += '<div class="abs r0 t0" style="background:var(--bg6);border-radius:50%;z-index:1;padding: 0.3em;"><div class="ciy-close close" style="width: 0.7em;height: 0.7em;"></div></div>';
}
if (opn.frame) {
opn.btns = opn.btns || null;
htmldom += '<div class="content" style="padding:0;' + contentstyle + '">';
htmldom += '<iframe src="' + opn.frame + '" style="display:block;width:100%;height:100%;" frameborder="0"></iframe>';
htmldom += '</div>';
} else {
htmldom += '<div class="content"';
if (contentstyle != '')
htmldom += ' style="' + contentstyle + '"';
htmldom += '>' + ciyfn.lang(opn.content) + '</div>';
}
if (opn.btns !== null) {
if (!isarray(opn.btns))
opn.btns = ["*关闭"];
var btn = '';
for (var i = 0; i < opn.btns.length; i++) {
if (opn.btns[i][0] == '*') //灰色按钮
btn += "<a class='lang btn def btnalert' data-btn='" + opn.btns[i].substring(1) + "'>" + opn.btns[i].substring(1) + "</a>";
else if (opn.btns[i][0] == '!') //暗红色按钮
btn += "<a class='lang btn dag btnalert' data-btn='" + opn.btns[i].substring(1) + "'>" + opn.btns[i].substring(1) + "</a>";
else if (opn.btns[i][0] == '#') //保存按钮
btn += "<a class='lang btn warn ctrl_s btnalert' data-btn='" + opn.btns[i].substring(1) + "'>" + opn.btns[i].substring(1) + "</a>";
else if (opn.btns[i][0] != '<') //普通蓝色按钮
btn += "<a class='lang btn btnalert' data-btn='" + opn.btns[i] + "'>" + opn.btns[i] + "</a>";
else
btn += opn.btns[i]; //html自定义按钮
}
htmldom += '<div class="buttons">' + btn + '</div>';
}
htmldom += '</div>';
htmldom = $5(htmldom);
var domifm = $5("iframe", htmldom);
if (domifm.length > 0) {
domifm[0].onload = function (e) {
var thos = this;
ciygv.messagefn['alert_done'] = function (msgevent) {
if (typeof (opn.cb) != 'function')
return alertclose();
opn.cb({
dombtn: domifm[0],
btn: msgevent.data.btn || '按钮',
inputs: msgevent.data.inputs,
dom: htmldom,
doc: document,
close: function () {
alertclose();
}
});
};
if (opn.autoheight) {
ciygv.messagefn['alert_mywh'] = function (msgevent) {
setrect(msgevent.data.width, msgevent.data.height);
};
opn._interval = setInterval(function () {
ciyfn.sendsignal(thos.contentWindow, 'alert_getwh');
}, 300);
}
setrect(htmldom.find('.content').height(), 300, true);
};
}
if (opn.btns !== null) {
htmldom.on('click', '.btnalert', function (e) {
var inputs = ciyfn._getform_dom(htmldom[0]);
if (typeof (opn.cb) != 'function')
return alertclose();
opn.cb({
dombtn: e.currentTarget,
btn: e.currentTarget.getAttribute('data-btn'),
inputs: inputs,
dom: htmldom,
doc: document,
close: function () {
alertclose();
}
});
});
}
htmldom.on('click', '.close', function () {
alertclose();
});
ciygv.mask.show(function () {
if (opn.maskclose) {
alertclose();
} else
return false;
}, { zIndex: ciygv.zindex - 2 });
$5('body').append(htmldom);
if (domifm.length == 0) {
if (typeof (opn.fn_showed) == 'function')
opn.fn_showed(document, htmldom);
var contentdom = htmldom.find('.content')[0];
opn._interval = setInterval(function () {
setrect(contentdom.scrollWidth, contentdom.scrollHeight);
}, 100);
setrect(contentdom.scrollWidth, contentdom.scrollHeight, true);
}
ciyfn.domlang();
if (opn.width != 'max') {
//增加拖动效果
if (opn.title !== null) {
if (!('ontouchstart' in window)) {
var dodrag = null;
htmldom.on('mousedown', '.title', function (ev) {
if (ev.target.classList.contains('close'))
return;
var mainRect = htmldom.rect();
dodrag = {};
dodrag.mainX = ev.clientX - mainRect.left;
dodrag.mainY = ev.clientY - mainRect.top;
htmldom.css({ opacity: 0.8 });
$5(document).on('mouseup', function () {
dodrag = null;
htmldom.css({ opacity: 1 });
htmldom.off('mouseup');
htmldom.off('mousemove');
}).on('mousemove', function (ev) {
if (dodrag == null)
return;
htmldom.css({ 'left': ev.pageX - dodrag.mainX - window.scrollX, 'top': ev.pageY - dodrag.mainY - window.scrollY });
});
});
}
}
}
if (opn.width == 'max' && opn.height == 'max')
$5('body').css('overflow', 'hidden');
var lastwh;
function setrect(newwidth, newheight, bfirst) {
var titbtnheight = toint(htmldom.find('.title').height()) + toint(htmldom.find('.buttons').height());
lastwh = lastwh || { w: 0, h: 0 };
if (Math.abs(newwidth - lastwh.w) < 5 && Math.abs(newheight - lastwh.h) < 5)
return;
lastwh = { w: newwidth, h: newheight };
var ctheight = newheight;
if (ctheight > window.innerHeight) {
ctheight = window.innerHeight;
if (opn.title !== null)
ctheight -= titbtnheight + 20;
}
htmldom.find('.content').css('height', (ctheight + 2) + 'px');
var dialogcss = {};
var w = toint(htmldom.find('.content').css().width) + 5;
if (!opn.width && opn.frame) {
if ('ontouchstart' in window)
w = window.innerWidth - 10;
else
w = window.innerWidth - 40;
if (w > newwidth)
w = newwidth;
} else if (opn.width == 'max')
w = window.innerWidth - 10;
else if (window.innerWidth - w < 30)
w = window.innerWidth - 30;
if (w < 300)
w = 300;
if (Math.abs(w - toint(htmldom.css().width)) > 6)
dialogcss.width = w + 'px';
dialogcss.height = 'auto';
var h = toint(htmldom.css().height);
if (opn.height == 'max') {
h = window.innerHeight - 10;
dialogcss.height = h + 'px';
htmldom.find('.content').css('height', (h - titbtnheight) + 'px');
} else if (window.innerHeight - h <= 20) {
h = window.innerHeight - 20;
dialogcss.height = h + 'px';
htmldom.find('.content').css('height', (h - titbtnheight) + 'px');
} else {
htmldom.find('.content').css('height', (h - titbtnheight) + 'px');
}
dialogcss.top = ((window.innerHeight - h) / 3) + 'px';
if (opn.align === 'left') {
dialogcss.left = '10px';
} else if (opn.align === 'right') {
dialogcss.right = '10px';
dialogcss.left = 'auto';
} else {
dialogcss.left = ((window.innerWidth - w) / 2) + 'px';
}
htmldom.css(dialogcss);
if (bfirst) {
setTimeout(function () {
htmldom.css({ transition: null, opacity: 1 });//'all .3s'
}, 0);
// setTimeout(function () {
// htmldom.css({ transition: null });
// }, 600);
}
}
function alertclose() {
clearInterval(opn._interval);
ciygv.mask.hide();
if (opn.width == 'max' && opn.height == 'max')
$5('body').css('overflow', '');
var domifm = $5("iframe", htmldom);
if (domifm.length > 0) {
domifm[0].src = 'about:blank';
try {
domifm[0].contentWindow.close();
} catch (err) { }
}
htmldom.remove();
}
return false;
}
ciyfn.toast = function (content, cb, opn) {
if (typeof (content) == 'string') {
opn = opn || {};
if (typeof (cb) == 'function')
opn.cb = cb;
opn.content = content;
} else {
opn = content || {};
if (typeof (cb) == 'function')
opn.cb = cb;
opn.content = opn.content || '';
}
if (opn.maskclose === undefined)
opn.maskclose = true;
try {
if (window.parent != window && window.parent.ciyfn.toast)
return window.parent.ciyfn.toast(opn);
} catch { }
var htmldom = '<div class="ciy-layer ciy-toast" style="left:-100vw;z-index: ' + ciygv.zindex + ';">' + ciyfn.lang(opn.content) + '</div>';
htmldom = $5(htmldom);
if (opn.maskclose) {
ciygv.mask.show(function () {
toastclose();
}, { zIndex: ciygv.zindex++ });
} else {
htmldom.on('click', function () {
toastclose();
});
}
if (opn.timeout === undefined)
opn.timeout = 2;
setTimeout(function () {
toastclose();
}, opn.timeout * 1000);
$5('body').append(htmldom);
var iw = window.innerWidth;
var ih = window.innerHeight;
setTimeout(function () {
htmldom.css({ 'left': ((iw - toint(htmldom.css().width)) / 2) + 'px', 'top': ((ih - htmldom.rect().height) / 3) + 'px' });
}, 90);
function toastclose() {
if (typeof (opn.cb) == 'function')
opn.cb();
ciygv.mask.hide();
htmldom.remove();
}
return false;
}
ciyfn.showend = function (opn) {
if (typeof (opn) === 'string') {
var strs = opn.split('|');
opn = {};
opn.content = strs[0];
if (strs.length > 1)
opn.title = strs[1];
}
opn.timeout = opn.timeout || 10;
var dom = $5('.ciy-showend');
if (dom.length == 0) {
dom = $5('<div class="ciy-showend"></div>');
dom.css('zIndex', ciygv.zindex++);
$5('body').append(dom);
}
var istyle = 'background:var(--man5);';
if (opn.icon == 'fail')
istyle = 'background:var(--dag5);';
if (opn.icon == 'warn')
istyle = 'background:var(--warn5);';
if (opn.icon == 'msg')
istyle = 'background:var(--succ5);';
var html = '<div class="ciy-showend-view"><i style="' + istyle + '"></i><b>×</b>';
if (opn.title)
html += '<h3>' + opn.title + '</h3>';
else
html += '<div style="height:0.5em;"></div>';
html += '<div>' + opn.content + '</div><span class="ciy-showend-view-es"></span></div>';
var viewdom = $5(html);
viewdom.on('click', 'b', function (e) {
if (opn._inter)
clearInterval(opn._inter);
var medom = e.currentTarget.parentNode;
medom.style.height = medom.clientHeight + "px";
medom.style.overflow = 'hidden';
medom.style.transition = "all .5s";
setTimeout(function () {
setTimeout(function () {
if (medom === null || medom.parentNode === null)
return;
var pdom = medom.parentNode;
pdom.removeChild(medom);
if (pdom.children.length == 0)
pdom.parentNode.removeChild(pdom);
}, 500);
medom.style.marginBottom = 0;
medom.style.height = 0;
medom.style.opacity = 0;
}, 1);
if (typeof (opn.cb) == 'function')
opn.cb(opn);
});
dom.prepend(viewdom);
if (opn.timeout >= 1) {
opn._span = toint(opn.timeout);
opn._inter = setInterval(function () {
opn._span--;
$5('span.ciy-showend-view-es', viewdom).text(opn._span);
}, 1000);
setTimeout(function () { $5('b', viewdom).trigger('click') }, opn.timeout * 1000);
}
}
ciyfn.dropmenu = function (dom) {
dom = $5(dom);
if ('ontouchend' in window) {
dom.on("click", function () {
if (dom.hasClass('show')) {
dom.removeClass('show');
ciygv.mask.hide();
return;
}
var menudom = $5(this);
showmenu(menudom);
});
} else {
dom.on("mouseenter", function () {
var menudom = $5(this);
showmenu(menudom);
menudom.one("mouseleave", function () {
menudom.removeClass('show');
menudom.css('zIndex', null);
ciygv.mask.hide();
});
});
}
function showmenu(menudom) {
ciygv.mask.show(function () {
menudom.removeClass('show');
}, { zIndex: 10 });
menudom.css('zIndex', 30);
menudom.addClass('show');
var domrect = menudom.rect();
var top = domrect.top;
var left = domrect.left;
var uldom = $5('ul', menudom);
var ulrect = uldom.rect();
uldom.css('inset', null);
var menuwidth = ulrect.width;
var menuheight = ulrect.height;
var direction = menudom.attr('direction');
if (direction == 'lr')
left += domrect.width;
if ($5(document).width() < left + menuwidth) {
if (direction == 'lr')
left = domrect.left - menuwidth;
else
left = $5(document).width() - menuwidth - 2;
}
if (left < 0)
left = 0;
if (top + menuheight + 40 < document.documentElement.clientHeight) {
if (direction != 'lr')
top += domrect.height;
uldom.css({ 'position': 'fixed', 'left': left + 'px', 'top': top + 'px', 'bottom': 'auto' });
} else {
if (direction == 'lr')
top += domrect.height;
if (top < menuheight) {
var meheight = domrect.height;
if (document.documentElement.clientHeight > menuheight + meheight)
uldom.css({ 'position': 'fixed', 'left': left + 'px', 'top': meheight + 'px', 'bottom': 'auto' });
else
uldom.css({ 'position': 'fixed', 'left': left + 'px', 'top': meheight + 'px', 'bottom': 0, 'overflowY': 'auto' });
}
else {
uldom.css({ 'position': 'fixed', 'left': left + 'px', 'top': (top - menuheight) + 'px', 'bottom': 'auto' });
}
}
}
}
ciyclass.tabcard = function (opn) {
opn = opn || {};
var thos = this;
this.onchange = opn.onchange || null;
opn.dom = $5(opn.dom);
if (opn.dom.length == 0)
return this;
var lidoms = $5('.ciy-tabcard>ul>li', opn.dom);
var contentdoms = $5('.ciy-tabcard>div>div.tabcontent', opn.dom);
if (contentdoms.length > 0 && contentdoms.length != lidoms.length)
return console.error('tabcard: tabcontent.length != li.length');
contentdoms.css('display', 'none');
if (typeof (opn.value) !== 'undefined')
tocard(opn.value, 'init');
if (opn.liid > 0) {
lidoms.each(function (dom, i) {
if ($5(dom).attr('data-liid') == opn.liid)
tocard(i, 'init');
});
}
else if ($5('ul>li.active', opn.dom).length == 0)
tocard(0, 'init');
else {
lidoms.each(function (dom, i) {
if ($5(dom).hasClass('active'))
tocard(i, 'init');
});
}
opn.dom.on('click', '.ciy-tabcard>ul>li', function (ev) {
lidoms.removeClass('active');
if (contentdoms.length > 0)
contentdoms.css('display', 'none');
lidoms.each(function (dom, i) {
if (dom == ev.currentTarget) {
tocard(i, 'click');
}
});
});
this.setbyvalue = function (index) {
if (index < 0 || index >= lidoms.length)
return;
tocard(index, 'selectcard');
}
this.setbyliid = function (liid) {
lidoms.each(function (dom, i) {
if ($5(dom).attr('data-liid') == liid)
tocard(i, 'selectcard');
});
}
function tocard(i, from) {
lidoms.removeClass('active');
if (contentdoms.length > 0)
contentdoms.css('display', 'none');
lidoms.eq(i).addClass('active');
if (contentdoms.length > 0) {
var disply = contentdoms.eq(i).attr('data-display');
contentdoms.eq(i).css('display', disply ? disply : 'block');
}
if (typeof (thos.onchange) == 'function')
thos.onchange({ index: i, lidom: lidoms[i], contentdom: contentdoms[i], from: from });
}
return this;
}
ciyfn.lazyimg = function () {
if (+new Date() - ciygv._lazyimg < 500)
return;
ciygv._lazyimg = +new Date();
var imgdoms = document.querySelectorAll('img[data-src]');
for (var i = 0, len = imgdoms.length; i < len; i++) {
var rect = imgdoms[i].getBoundingClientRect();
if (rect.left == 0 && rect.right == 0)
continue;
if (rect.top < document.documentElement.clientHeight && !imgdoms[i].src) {
imgdoms[i].src = imgdoms[i].getAttribute("data-src");
imgdoms[i].removeAttribute("data-src");
}
}
}
ciyfn.getstorage = function (key, def) {
def = def || '';
var val = localStorage.getItem(key);
if (val === undefined || val === null || val === '')
return def;
var fst = val.substring(0, 1);
if (fst != '[' && fst != '{')
return val;
return ciyfn.tojson(val);
}
ciyfn.setstorage = function (key, value) {
if (isarray(value) || isobj(value))
value = ciyfn.jsontostr(value);
localStorage.setItem(key, value);
}
ciyfn.removestorage = function (key) {
localStorage.removeItem(key);
}
ciyfn.savedict = function (arr) {
for (var code in arr) {
if (code != 'cata') {
ciyfn.setstorage('cata_' + code, arr[code]);
continue;
}
for (var c in arr[code]) {
if (arr[code][c].cbid > 0)
continue;
var types = arr[code][c].codeid;
var codes = new Array();
for (var d in arr[code]) {
if (arr[code][d].cbid != arr[code][c].id)
continue;
var cs = {};
cs.id = arr[code][d].codeid;
cs.name = arr[code][d].name;
if (arr[code][d].extdata)
cs.extdata = arr[code][d].extdata;
if (arr[code][d].clas)
cs.clas = arr[code][d].clas;
if (arr[code][d].isuse != 1)
cs.isuse = 2;
if (arr[code][d].upid > 0) {
for (var i in arr[code]) {
if (arr[code][d].upid == arr[code][i].id) {
cs.upid = arr[code][i].codeid;
break;
}
}
}
codes.push(cs);
}
if (types != '')
ciyfn.setstorage('cata_' + types, codes);
}
}
}
ciyfn.totimepoint = function (time, bsecond) {
if (time <= 0 || time > 86400)
return '';
time--;
var hour = toint(time / 3600);
var minute = toint((time - hour * 3600) / 60);
var ret = ciyfn.topad0(hour) + ':' + ciyfn.topad0(minute);
if (!bsecond)
return ret;
var second = time - hour * 3600 - minute * 60;
ret += ':' + ciyfn.topad0(second);
return ret;
}
ciyfn.totimespan = function (time, futstr, befstr) {
if (futstr === undefined)
futstr = "后";
if (befstr === undefined)
befstr = "前";
var t;
if (/^\d+$/.test(time)) {
if (time == 0)
return '--';
t = new Date(time * 1000);
} else {
t = new Date(time.replace(/\-/g, '/'));
}
if (isNaN(t.getTime()))
return 'ERR';
var diffsec = (new Date() - t);
diffsec = toint(diffsec / 1000);
if (diffsec > 0)
return ciyfn.totimesec(diffsec, befstr);
return ciyfn.totimesec(-diffsec, futstr);
}
ciyfn.totimesec = function (sec, bestr, nowstr) {
if (bestr === undefined)
bestr = "";
if (nowstr === undefined)
nowstr = ciyfn.lang("刚刚");
if (sec < 0)
return '--';
if (sec < 3) //3秒以内
return nowstr;
if (sec < 60) //60秒以内
return sec + ciyfn.lang("秒") + bestr;
if (sec < 3600) //60分以内
return parseInt(sec / 60) + ciyfn.lang("分钟") + bestr;
if (sec < 86400) //24小时以内
return parseInt(sec / 3600) + ciyfn.lang("小时") + bestr;
if (sec < 2592000) //30天以内
return parseInt(sec / 86400) + ciyfn.lang("天") + bestr;
if (sec < 31536000) //12月以内
return parseInt(sec / 2592000) + ciyfn.lang("个月") + bestr;
return parseInt(sec / 31536000) + ciyfn.lang("年") + bestr;
}
ciyfn.todatetime = function (time, format, zero) {
if (zero === undefined)
zero = "--";
var t;
if (time instanceof Date)
t = time;
else if (time == -1 || time === undefined)
t = new Date();
else if (/^\d+$/.test(time)) {
if (time == 0)
return zero;
t = new Date(time * 1000);
} else {
t = new Date((time + '').replace(/\-/g, '/'));
}
if (isNaN(t.getTime()))
return '';
if (!format)
format = 'Y-m-d H:i';
var ret = format;
ret = ret.replace('yyyy', t.getFullYear()).replace('Y', t.getFullYear());
ret = ret.replace('y', (t.getFullYear() + "").substring(2));
ret = ret.replace('m', ciyfn.topad0(t.getMonth() + 1));
ret = ret.replace('n', t.getMonth() + 1);
ret = ret.replace('d', ciyfn.topad0(t.getDate()));
ret = ret.replace('j', t.getDate());
ret = ret.replace('H', ciyfn.topad0(t.getHours()));
ret = ret.replace('G', t.getHours());
ret = ret.replace('h', ciyfn.topad0(t.getHours() % 12));
ret = ret.replace('g', t.getHours() % 12);
ret = ret.replace('i', ciyfn.topad0(t.getMinutes()));
ret = ret.replace('sss', ciyfn.topad0(t.getMilliseconds(), 3));
ret = ret.replace('s', ciyfn.topad0(t.getSeconds()));
if (t.getHours() < 12)
ret = ret.replace('A', 'AM').replace('a', 'am');
else
ret = ret.replace('A', 'PM').replace('a', 'pm');
ret = ret.replace('w', t.getDay());
return ret;
}
ciyfn.todayage = function (time, noday) {
if (time == 0 || time === undefined)
return '--';
var t = new Date(time * 1000);
var diff = (new Date() - t) / 1000;
diff = parseInt(diff / 86400) + 1;
if (diff < 30) //30天以内
return diff + "天";
var month = parseInt(diff / 30);
if (noday)
return month + '个月';
return month + '个月 ' + (diff - month * 30) + '天';
}
ciyfn.tofix = function (val, length) {
//length正数小数点保留n位不去0。
//负数小数点保留n位末尾去零。
//0按数长保留尽量少的位数显示。
//不填,-4
var num = parseFloat(val);
if (isNaN(num))
num = 0;
if (length === undefined)
length = -4;
if (length == 0) {
if (num >= 1000)
return parseInt(num);
var numlen = (parseInt(num) + '').length;
length = 4 - numlen;
if (Math.abs(num % 1) < Math.pow(0.1, length))
return parseInt(num);
num = num.toFixed(length);
var y = '.';
for (var i = 0; i < length; i++)
y += "0";
if (num.substring(num.length - length - 1) == y)
num = num.substring(0, num.length - length - 1);
return num;
} else if (length < 0) {
length = -length;
num = num.toFixed(length); //xx.xx
var numd = num.split('.')[1];
var numd0 = true;
for (var i = 0; i < numd.length; i++) {
if (numd.charAt(i) != '0') {
numd0 = false;
break;
}
}
if (numd0)
num = num.split('.')[0];
return num;
}
num = num.toFixed(length);
return num;
}
ciyfn.tonumtho = function (num) {
return parseInt(num).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
ciyfn.tonumdec = function (num, showzero, len) {
len = len || 2; // 与tofix不同点小数长度不变如 1.10
var m2 = Math.ceil((num - parseInt(num)) * 100);
if (m2 < 10)
m2 = '0' + m2;
else
m2 = m2 + '';
if (showzero)
return '.' + m2;
if (m2 == '00')
return '';
else
return '.' + m2;
}
ciyfn.objclone = function (obj) {
if (obj instanceof Array | obj instanceof Object) {
var copy = (obj instanceof Array) ? [] : {};
for (var attr in obj) {
if (obj.hasOwnProperty(attr))
copy[attr] = ciyfn.objclone(obj[attr]);
}
return copy;
}
return obj;
}
ciyfn.objdeepmerge = function (src, desc, btop) {
if (src === undefined)
return desc;
for (const key in desc) {
if (!desc.hasOwnProperty(key))
continue;
if (desc[key] instanceof Array) {
if (!(src[key] instanceof Array))
src[key] = [];
if (key.substring(0, 4) == 'ciy_')
src[key] = desc[key];
else {
let srcidmap = {};
for (let i in src[key]) {
srcidmap[src[key][i].id] = parseInt(i) + 1;
}
for (let i in desc[key]) {
if (desc[key][i].id && srcidmap[desc[key][i].id]) {
src[key][srcidmap[desc[key][i].id] - 1] = ciyfn.objdeepmerge(src[key][srcidmap[desc[key][i].id] - 1], desc[key][i]);
continue;
}
if (btop)
src[key].unshift(desc[key][i]);
else
src[key].push(desc[key][i]);
}
}
} else if (desc[key] instanceof Object) {
src[key] = ciyfn.objdeepmerge(src[key] || {}, desc[key]);
} else {
if (src[key] != desc[key])
src[key] = desc[key];
}
}
if (desc && !desc.errmsg && src.errmsg)
delete src.errmsg;
return src;
}
ciyfn.isfloat0 = function (num) {
num = parseFloat(num);
if (isNaN(num))
return true;
return (num < 0.001 && num > -0.001);
}
ciyfn.topad0 = function (num, length) {
length = length || 2;
if ((num + "").length > length)
return num;
return (Array(length).join('0') + num).slice(-length);
}
ciyfn.trim = function (str, char) {
str = str.trim();
let start = 0;
let end = str.length;
while (start < end && str[start] === char) start++;
while (end > start && str[end - 1] === char) end--;
return str.slice(start, end);
}
ciyfn.copyboard = function (txt, cb) {
if (window.clipboardData) {
window.clipboardData.clearData();
clipboardData.setData('Text', txt);
if (typeof (cb) == 'function')
cb();
else
ciyfn.toast(ciyfn.lang('已复制到剪贴板'));
} else {
var input = document.createElement('textarea');
input.value = txt;
document.body.appendChild(input);
input.select();
if (document.execCommand('Copy')) {
if (typeof (cb) == 'function')
cb();
else
ciyfn.toast(ciyfn.lang('已复制到剪贴板'));
} else {
if (typeof (cb) == 'function')
cb();
else
ciyfn.alert(ciyfn.lang('复制剪贴板失败'));
}
document.body.removeChild(input);
}
}
ciyfn.getstrparam = function (str, split) {
if (!str)
return {};
if (split === undefined)
split = '|';
var strs = str.split(split);
var ret = {};
for (var i in strs) {
var ind = strs[i].indexOf('=');
if (ind == -1)
continue;
ret[strs[i].substring(0, ind)] = strs[i].substring(ind + 1);
}
return ret;
}
ciyfn.setstrparam = function (obj, split) {
if (split === undefined)
split = '|';
var ret = [];
for (var key in obj) {
ret.push(key + '=' + obj[key]);
}
return ret.join(split);
}
ciyfn.file_ext = function (file) {
var ind = file.lastIndexOf(".");
if (ind == -1)
return '';
var ext = file.substring(ind + 1).toUpperCase();
if (ext == 'JPEG' || ext == 'JPE')
ext = 'JPG';
return ext;
}
ciyfn.file_stor = function (url, pre) {
if (!url)
return '';
if (url.substring(0, 4).toLowerCase() == 'http')
return url;
return ciy_vars.storlist[url[0]] + url.substring(1) + (pre ? pre : '');
}
ciyfn.isimg = function (ext) {
if (ext.indexOf('.') > 0)
ext = ciyfn.file_ext(ext);
return (["PNG", "JPG", "GIF", "BMP", "WEBP", "SVG"].indexOf(ext) >= 0);
}
ciyfn.nopower = function (mepower, power) {
//true无权限false有权限
if (mepower == '.*.') //超级管理员
return false;
power = '.' + power;
var dotidx = -1;
for (let i = 0; i < mepower.length; i++) {
if (mepower[i] !== '.')
continue;
if (dotidx > -1 && dotidx + 1 < i) {
if (power.indexOf(mepower.substring(dotidx, i)) === -1)
continue;
return false; //有权限
}
dotidx = i;
}
return true; //无权限
}
ciyclass.sse = function (opn) {
if (!window.EventSource)
return alert('您的浏览器不支持SSE');
opn = opn || {};
if (!opn.url)
return alert('无url参数');
if (opn.url.indexOf('?') == -1 && opn.url.indexOf('://') == -1) {
var ind = document.location.pathname.lastIndexOf('/');
var path = document.location.pathname.substring(1, ind + 1);
var pagename = document.location.pathname.substring(ind + 1) || 'index.html';
ind = pagename.lastIndexOf('.');
if (ind > 0)
pagename = pagename.substring(0, ind);
if (opn.url.indexOf('.') == -1) {
opn.url = path + pagename + '.' + opn.url;
} else if (opn.url.indexOf('/') == -1) {
opn.url = path + opn.url;
}
opn.url = "/" + opn.url;
}
if (isobj(opn.param)) {
for (var i in opn.param) {
if (opn.url.indexOf('?') == -1)
opn.url += '?' + i + '=' + opn.param[i];
else
opn.url += '&' + i + '=' + opn.param[i];
}
}
var method = 'GET';
if (opn.post)
method = 'POST';
opn.header = opn.header || {};
if (!ciy_vars)
console.log('nofind ciy_vars');
opn.header['ciyauth'] = ciyfn.getstorage('_' + ciy_vars.tokenfield);
this.close = () => {
this.isaborted = true;
if (this.xhr) {
this.xhr.abort();
}
}
this.isaborted = false;
this.xhr = new XMLHttpRequest();
this.xhr.open(method, opn.url, true);
for (var i in opn.header) {
if (opn.header[i] !== undefined)
this.xhr.setRequestHeader(i, "" + opn.header[i]);
}
this.xhr.setRequestHeader('Accept', 'text/event-stream');
this.xhr.setRequestHeader('Cache-Control', 'no-cache');
if (opn.headers) {
for (const [key, value] of Object.entries(opn.headers))
this.xhr.setRequestHeader(key, value);
}
var position = 0;
this.xhr.onprogress = () => {
var data = this.xhr.responseText.substring(position);
position += data.length;
var datas = data.split('\n\n');
for (var i = 0; i < datas.length; i++) {
var dat1 = datas[i];
if (dat1 === '')
continue;
var ind = dat1.indexOf('\n');
var dat2 = '';
if (ind > -1) {
dat2 = dat1.substring(ind + 1);
dat1 = dat1.substring(0, ind);
}
if (dat1.substring(0, 6) != 'data: ') {
if (typeof (this.recvmsg) == 'function')
this.recvmsg(dat1);
continue;
}
dat1 = dat1.substring(6);
// if (dat1.substring(0, 7) == 'base64,')
// dat1 = decodeURIComponent(escape(atob(dat1.substring(7))));
if (dat2.substring(0, 6) == 'event:') {
dat2 = dat2.substring(6).trim();
if (typeof (this.recvfix) == 'function')
this.recvfix(dat1, dat2);
continue;
}
if (dat2.substring(0, 3) == 'id:')
dat2 = dat2.substring(3).trim();
if (typeof (this.recvmsg) == 'function')
this.recvmsg(dat1, dat2);
}
};
this.xhr.onreadystatechange = () => {
console.log('onreadystatechange', this.xhr.readyState);
if (this.xhr.readyState === XMLHttpRequest.HEADERS_RECEIVED) {
if (typeof (opn.onopen) == 'function')
opn.onopen();
else
console.log(opn.url + ' SSE连接成功');
}
if (this.xhr.readyState === XMLHttpRequest.DONE) {
if (this.xhr.status >= 400) {
if (typeof (opn.onerror) == 'function')
opn.onerror(this.xhr);
else
console.error(opn.url, this.xhr);
} else {
if (typeof (opn.onclose) == 'function')
opn.onclose(this.xhr);
else
console.log(opn.url + ' SSE连接已关闭');
}
}
};
if (opn.post)
this.xhr.send(ciyfn.jsontostr(opn.post));
else
this.xhr.send();
return this;
}
ciyfn.lang = function (zhstr) {
if (!zhstr)
return '';
if (ciygv.lang === undefined)
ciygv.lang = ciyfn.getstorage('_lang');
if (typeof (ciygv.lang) == 'object') {
if (zhstr.length < 50) {
if (ciygv.lang[zhstr] !== undefined)
return ciygv.lang[zhstr];
}
}
return zhstr;
}
ciyfn.setlang = function (lang) {
if (!lang) {
ciyfn.removestorage('_lang');
location.reload();
} else {
ciyfn.ajax({
url: '/jscss/lang/' + lang + '.json'
, success: function (txt) {
var json = ciyfn.tojson(txt);
delete json.code;
ciyfn.setstorage('_lang', json);
location.reload();
}
, method: 'GET'
});
}
}
ciyfn.domlang = function (dom) {
if (ciygv.lang === undefined)
ciygv.lang = ciyfn.getstorage('_lang');
if (typeof (ciygv.lang) != 'object')
return;
dom = dom || document;
$5('.lang', dom).each(function (dom) {
var zhstr = dom.innerHTML;
if (!zhstr)
return;
zhstr = zhstr.trim();
$5(dom).removeClass('lang');
if (zhstr.indexOf('<') > -1)
return;
if (zhstr.length < 50) {
if (ciygv.lang[zhstr] !== undefined)
dom.textContent = ciygv.lang[zhstr];
}
});
$5('option', dom).each(function () {
var zhstr = dom.innerHTML;
if (!zhstr)
return;
zhstr = zhstr.trim();
if (zhstr.indexOf('<') > -1)
return;
if (zhstr.length < 50) {
if (ciygv.lang[zhstr] !== undefined)
dom.textContent = ciygv.lang[zhstr];
}
});
}
ciyclass.anidom = function (doms, key) {
var anis = {};
for (var i = 0; i < doms.length; i++) {
var rect = doms[i].getBoundingClientRect();
var id = doms[i].getAttribute(key);
anis[id] = { l: rect.left, t: rect.top };
}
this.animate = function (sec) {
sec = sec || 0.5;
for (var i = 0; i < doms.length; i++) {
var id = doms[i].getAttribute(key);
var ani = anis[id];
var rect = doms[i].getBoundingClientRect();
doms[i].style.transition = 'transform 0s';
doms[i].style.transform = 'translate(' + (ani.l - rect.left) + 'px, ' + (ani.t - rect.top) + 'px)';
(function (idx) {
requestAnimationFrame(function () {
doms[idx].style.transition = 'transform ' + sec + 's';
doms[idx].style.transform = null;
});
setTimeout(function () {
doms[idx].style.transition = null;
}, sec * 1000);
})(i);
}
}
return this;
}
ciyclass.dragdom = function (opn) {
if (!opn.dom)
return console.error('dom参数错误');
opn.dom = $5(opn.dom);
var dom_sourceDrag = null;
opn.dom.on('dragstart', function (event) {
setTimeout(() => {
event.target.classList.add('dragging');
}, 0);
dom_sourceDrag = event.target;
event.dataTransfer.effectAllowed = 'move'
});
opn.dom.on('dragenter', function (event) {
var ani;
if (opn.key)
ani = new ciyclass.anidom(opn.dom[0].children, opn.key);
event.preventDefault();
if (event.target === opn.dom[0] || event.target === dom_sourceDrag)
return;
var child = [...opn.dom[0].children];
var sidx = child.indexOf(dom_sourceDrag);
var tidx = child.indexOf(event.target);
if (tidx == -1)
return;
if (sidx < tidx) {
opn.dom[0].insertBefore(dom_sourceDrag, event.target.nextElementSibling);
} else {
if (event.target.parentNode === opn.dom[0])
opn.dom[0].insertBefore(dom_sourceDrag, event.target);
}
if (opn.key)
ani.animate(0.5);
});
opn.dom.on('dragenter', function (event) {
event.preventDefault();
});
opn.dom.on('dragend', function (event) {
event.target.classList.remove('dragging');
if (!opn.sort) {
if (typeof (opn.fn_sort) == 'function')
opn.fn_sort();
return;
}
opn.sortgap = opn.sortgap || 100;
var me = {
id: dom_sourceDrag.getAttribute(opn.key),
sort: parseInt(dom_sourceDrag.getAttribute(opn.sort))
};
var meprev = null;
if (dom_sourceDrag.previousElementSibling) {
meprev = {
id: dom_sourceDrag.previousElementSibling.getAttribute(opn.key),
sort: parseInt(dom_sourceDrag.previousElementSibling.getAttribute(opn.sort))
}
}
var menext = null;
if (dom_sourceDrag.nextElementSibling) {
menext = {
id: dom_sourceDrag.nextElementSibling.getAttribute(opn.key),
sort: parseInt(dom_sourceDrag.nextElementSibling.getAttribute(opn.sort))
}
}
var updates = [];
if (meprev && menext) {
var odr = menext.sort - meprev.sort;
if (odr > 1) {
var od = meprev.sort + parseInt(odr / 2);
console.log(menext.sort, meprev.sort, od);
updates.push({ id: me.id, sort: od });
dom_sourceDrag.setAttribute(opn.sort, od);
} else {
var od = opn.sortgap;
for (var i = 0; i < opn.dom[0].children.length; i++) {
var item = opn.dom[0].children[i];
updates.push({ id: item.getAttribute(opn.key), sort: od });
item.setAttribute(opn.sort, od);
od += opn.sortgap;
}
}
} else if (meprev) {
updates.push({ id: me.id, sort: meprev.sort + opn.sortgap });
dom_sourceDrag.setAttribute(opn.sort, meprev.sort + opn.sortgap);
} else if (menext) {
updates.push({ id: me.id, sort: menext.sort - opn.sortgap });
dom_sourceDrag.setAttribute(opn.sort, menext.sort - opn.sortgap);
}
//排序后,更新数据库
if (typeof (opn.fn_sort) == 'function')
opn.fn_sort(updates);
});
return this;
}
ciyfn.pageload = function (func) {
document.addEventListener('DOMContentLoaded', function () {
func();
});
}
document.addEventListener('DOMContentLoaded', function () {
ciygv.mask = new ciyclass.mask();
ciyfn.dropmenu(".btn-menu");
const observer = new MutationObserver(function (mutations) {
for (var i = 0; i < mutations.length; i++) {
if (mutations[i].addedNodes && mutations[i].addedNodes.length) {
ciyfn.domlang();
setTimeout(function () {
ciyfn.lazyimg();
}, 500);
return;
}
}
});
observer.observe(document.body, { childList: true, subtree: true });
ciyfn.lazyimg();
ciyfn.domlang();
window.addEventListener('scroll', function () {
ciyfn.lazyimg();
});
window.addEventListener('message', function (event) {
if (!event.data.func)
return;
if (event.data.func == 'chgtheme')
ciy_chgtheme(event.data.data);
else if (event.data.func == 'reload')
location.reload();
else if (event.data.func == 'alert_getwh') {
ciyfn.sendsignal(event.source, 'alert_mywh', { width: document.body.scrollWidth, height: document.body.scrollHeight });
} else {
if (typeof (ciygv.messagefn[event.data.func]) == 'function') {
ciygv.messagefn[event.data.func](event);
}
}
});
$5(document).on('click', '.help', itm => {
var help = $5(itm.currentTarget).attr('help');
ciyfn.alert(help.replace(/\\n/g, '<br>'));
});
});