diff --git a/lib/layui/lay/okmodules/okContextMenu.js b/lib/layui/lay/okmodules/okContextMenu.js new file mode 100644 index 0000000..a4734d1 --- /dev/null +++ b/lib/layui/lay/okmodules/okContextMenu.js @@ -0,0 +1,64 @@ +layui.define(['jquery'], function (exports) { + var jQuery = layui.jquery; + !function (t, n, e, i) { + var o = function (t, n) { + this.init(t, n) + }; + o.prototype = { + init: function (t, n) { + this.ele = t, this.defaults = { + menu: [{ + text: "菜单一", callback: function () { + } + }, { + text: "菜单二", callback: function () { + } + }], target: function (t) { + }, width: 100, itemHeight: 28, bgColor: "#fff", color: "#333", fontSize: 14, hoverBgColor: "#f5f5f5" + }, this.opts = e.extend(!0, {}, this.defaults, n), this.random = (new Date).getTime() + parseInt(1e3 * Math.random()), this.eventBind() + }, renderMenu: function () { + var t = this, n = "#uiContextMenu_" + this.random; + if (!(e(n).length > 0)) { + var t = this, i = '", e("body").append(i).find(".ul-context-menu").hide(), this.initStyle(n), e(n).on("click", ".ui-context-menu-item", function (n) { + t.menuItemClick(e(this)), n.stopPropagation() + }) + } + }, initStyle: function (t) { + var n = this.opts; + e(t).css({width: n.width, backgroundColor: n.bgColor}).find(".ui-context-menu-item a").css({ + color: n.color, + fontSize: n.fontSize, + height: n.itemHeight, + lineHeight: n.itemHeight + "px" + }).hover(function () { + e(this).css({backgroundColor: n.hoverBgColor}) + }, function () { + e(this).css({backgroundColor: n.bgColor}) + }) + }, menuItemClick: function (t) { + var n = this, e = t.index(); + t.parent(".ul-context-menu").hide(), n.opts.menu[e].callback && "function" == typeof n.opts.menu[e].callback && n.opts.menu[e].callback() + }, setPosition: function (t) { + e("#uiContextMenu_" + this.random).css({left: t.clientX + 2, top: t.clientY + 2}).show() + }, eventBind: function () { + var t = this; + this.ele.on("contextmenu", function (n) { + n.preventDefault(), t.renderMenu(), t.setPosition(n), t.opts.target && "function" == typeof t.opts.target && t.opts.target(e(this)) + }), e(n).on("click", function () { + e(".ul-context-menu").hide() + }) + } + }, e.fn.okContextMenu = function (t) { + return new o(this, t), this + } + }(window, document, jQuery); + exports('okContextMenu', function (obj) { + + }); +}); + diff --git a/lib/layui/lay/okmodules/okCountUp.js b/lib/layui/lay/okmodules/okCountUp.js new file mode 100644 index 0000000..ffed659 --- /dev/null +++ b/lib/layui/lay/okmodules/okCountUp.js @@ -0,0 +1,274 @@ +/** + * 这是一个数字步进器的工具 + **/ +layui.define(['jquery'], function (exports) { + var $ = layui.jquery; + + var CountUp = function (argums, startNum, endNum) { + /** + * 用法1.当argums是JSON对象 + * 方法的startNum,endNum这两个参数无效 + * eg: var Count = new CountUp({target:$(".box")}); + * Count.start(); + * argums{ + target : 目标元素 + startVal : 你想要开始的值,默认值为0 + endVal : 你想要到达的值,默认值为元素的值 + decimals : 小数位数,默认值为0 + duration : 动画持续时间为秒,默认值为2 + options :选项的可选对象 + * } + * 用法2.当argums为字符串或者为jq元素(推荐是JQ元素哦,也可以是dom元素) + * eg: var box = new CountUp(".box"); + * box.start();//开始执行 + * 为字符串一定是个元素的JQ选择器 + * startNum:默认值0 + * endNum:默认值为元素的值 + */ + if ((typeof argums == "string") || (argums instanceof $) || (argums instanceof HTMLElement)) { + var temp = argums; + startNum = startNum || 0; + endNum = endNum || $($(argums.target)[0]).text(); + argums = { + target: $(argums)[0], + startVal: startNum, + endVal: endNum, + } + } + argums.startVal = argums.startVal || 0; + argums.target = $(argums.target)[0]; + argums.endVal = argums.endVal || $($(argums.target)[0]).text(); + /*var { + target, + startVal, + endVal, + decimals, + duration, + options + } = argums;// 这里是ES6语法*/ + var target = argums.target, + startVal = argums.startVal, + endVal = argums.endVal, + decimals = argums.decimals, + duration = argums.duration, + options = argums.options; + var self = this; + self.version = function () { + return "1.9.2" + }; + self.options = { + useEasing: true, + useGrouping: true, + separator: ",", + decimal: ".", + easingFn: easeOutExpo, + formattingFn: formatNumber, + prefix: "", + suffix: "", + numerals: [] + }; + + if (options && typeof options === "object") { + for (var key in self.options) { + if (options.hasOwnProperty(key) && options[key] !== null) { + self.options[key] = options[key] + } + } + } + if (self.options.separator === "") { + self.options.useGrouping = false + } else { + self.options.separator = "" + self.options.separator + } + var lastTime = 0; + var vendors = ["webkit", "moz", "ms", "o"]; + for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { + window.requestAnimationFrame = window[vendors[x] + "RequestAnimationFrame"]; + window.cancelAnimationFrame = window[vendors[x] + "CancelAnimationFrame"] || window[vendors[x] + + "CancelRequestAnimationFrame"] + } + if (!window.requestAnimationFrame) { + window.requestAnimationFrame = function (callback, element) { + var currTime = new Date().getTime(); + var timeToCall = Math.max(0, 16 - (currTime - lastTime)); + var id = window.setTimeout(function () { + callback(currTime + timeToCall) + }, timeToCall); + lastTime = currTime + timeToCall; + return id + } + } + if (!window.cancelAnimationFrame) { + window.cancelAnimationFrame = function (id) { + clearTimeout(id) + } + } + + function formatNumber(num) { + num = num.toFixed(self.decimals); + num += ""; + var x, x1, x2, x3, i, l; + x = num.split("."); + x1 = x[0]; + x2 = x.length > 1 ? self.options.decimal + x[1] : ""; + if (self.options.useGrouping) { + x3 = ""; + for (i = 0, l = x1.length; i < l; ++i) { + if (i !== 0 && ((i % 3) === 0)) { + x3 = self.options.separator + x3 + } + x3 = x1[l - i - 1] + x3 + } + x1 = x3 + } + if (self.options.numerals.length) { + x1 = x1.replace(/[0-9]/g, function (w) { + return self.options.numerals[+w] + }); + x2 = x2.replace(/[0-9]/g, function (w) { + return self.options.numerals[+w] + }) + } + return self.options.prefix + x1 + x2 + self.options.suffix + } + + function easeOutExpo(t, b, c, d) { + return c * (-Math.pow(2, -10 * t / d) + 1) * 1024 / 1023 + b + } + + function ensureNumber(n) { + return (typeof n === "number" && !isNaN(n)) + } + + self.initialize = function () { + if (self.initialized) { + return true + } + self.error = ""; + // self.d = (typeof target === "string") ? document.getElementById(target) : target; + self.d = target; + if (!self.d) { + self.error = "[CountUp] target is null or undefined"; + return false + } + self.startVal = Number(startVal); + self.endVal = Number(endVal); + if (ensureNumber(self.startVal) && ensureNumber(self.endVal)) { + self.decimals = Math.max(0, decimals || 0); + self.dec = Math.pow(10, self.decimals); + self.duration = Number(duration) * 1000 || 2000; + self.countDown = (self.startVal > self.endVal); + self.frameVal = self.startVal; + self.initialized = true; + return true + } else { + self.error = "[CountUp] startVal (" + startVal + ") or endVal (" + endVal + ") is not a number"; + return false + } + }; + self.printValue = function (value) { + var result = self.options.formattingFn(value); + if (self.d.tagName === "INPUT") { + this.d.value = result + } else { + if (self.d.tagName === "text" || self.d.tagName === "tspan") { + this.d.textContent = result + } else { + this.d.innerHTML = result + } + } + }; + self.count = function (timestamp) { + if (!self.startTime) { + self.startTime = timestamp + } + self.timestamp = timestamp; + var progress = timestamp - self.startTime; + self.remaining = self.duration - progress; + if (self.options.useEasing) { + if (self.countDown) { + self.frameVal = self.startVal - self.options.easingFn(progress, 0, self.startVal - self.endVal, + self.duration) + } else { + self.frameVal = self.options.easingFn(progress, self.startVal, self.endVal - self.startVal, + self.duration) + } + } else { + if (self.countDown) { + self.frameVal = self.startVal - ((self.startVal - self.endVal) * (progress / self.duration)) + } else { + self.frameVal = self.startVal + (self.endVal - self.startVal) * (progress / self.duration) + } + } + if (self.countDown) { + self.frameVal = (self.frameVal < self.endVal) ? self.endVal : self.frameVal + } else { + self.frameVal = (self.frameVal > self.endVal) ? self.endVal : self.frameVal + } + self.frameVal = Math.round(self.frameVal * self.dec) / self.dec; + self.printValue(self.frameVal); + if (progress < self.duration) { + self.rAF = requestAnimationFrame(self.count) + } else { + if (self.callback) { + self.callback() + } + } + }; + self.start = function (callback) { + if (!self.initialize()) { + return + } + self.callback = callback; + self.rAF = requestAnimationFrame(self.count) + }; + self.pauseResume = function () { + if (!self.paused) { + self.paused = true; + cancelAnimationFrame(self.rAF) + } else { + self.paused = false; + delete self.startTime; + self.duration = self.remaining; + self.startVal = self.frameVal; + requestAnimationFrame(self.count) + } + }; + self.reset = function () { + self.paused = false; + delete self.startTime; + self.initialized = false; + if (self.initialize()) { + cancelAnimationFrame(self.rAF); + self.printValue(self.startVal) + } + }; + self.update = function (newEndVal) { + if (!self.initialize()) { + return + } + newEndVal = Number(newEndVal); + if (!ensureNumber(newEndVal)) { + self.error = "[CountUp] update() - new endVal is not a number: " + newEndVal; + return + } + self.error = ""; + if (newEndVal === self.frameVal) { + return + } + cancelAnimationFrame(self.rAF); + self.paused = false; + delete self.startTime; + self.startVal = self.frameVal; + self.endVal = newEndVal; + self.countDown = (self.startVal > self.endVal); + self.rAF = requestAnimationFrame(self.count) + }; + if (self.initialize()) { + self.printValue(self.startVal) + } + }; + + exports('okCountUp', CountUp); +}); + diff --git a/lib/layui/lay/okmodules/okQrcode.js b/lib/layui/lay/okmodules/okQrcode.js new file mode 100644 index 0000000..186b604 --- /dev/null +++ b/lib/layui/lay/okmodules/okQrcode.js @@ -0,0 +1,144 @@ + +layui.define(['jquery'], function (exports) { + var jQuery = layui.jquery, + $ = jQuery; + function utf16to8(str) { + var out, i, len, c; + + out = ""; + len = str.length; + for (i = 0; i < len; i++) { + c = str.charCodeAt(i); + if ((c >= 0x0001) && (c <= 0x007F)) { + out += str.charAt(i); + } else if (c > 0x07FF) { + out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F)); + out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F)); + out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)); + } else { + out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F)); + out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)); + } + } + return out; + } + + function utf8to16(str) { + var out, i, len, c; + var char2, char3; + + out = ""; + len = str.length; + i = 0; + while (i < len) { + c = str.charCodeAt(i++); + switch (c >> 4) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + // 0xxxxxxx + out += str.charAt(i - 1); + break; + case 12: + case 13: + // 110x xxxx 10xx xxxx + char2 = str.charCodeAt(i++); + out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F)); + break; + case 14: + // 1110 xxxx 10xx xxxx 10xx xxxx + char2 = str.charCodeAt(i++); + char3 = str.charCodeAt(i++); + out += String.fromCharCode(((c & 0x0F) << 12) | + ((char2 & 0x3F) << 6) | + ((char3 & 0x3F) << 0)); + break; + } + } + + return out; + } + + function QR8bitByte(a){ + this.mode=QRMode.MODE_8BIT_BYTE, + this.data=a + } + + function QRCode(a,b){ + this.typeNumber=a, + this.errorCorrectLevel=b, + this.modules=null, + this.moduleCount=0, + this.dataCache=null, + this.dataList=new Array() + } + function QRPolynomial(a,b){ + var c,d; + if(void 0==a.length){ + throw new Error(a.length+"/"+b) + } + for(c=0;c").css("width",b.width+"px").css("height",b.height+"px").css("border","0px").css("border-collapse","collapse").css("background-color",b.background),e=b.width/c.getModuleCount(),f=b.height/c.getModuleCount(),g=0;g").css("height",f+"px").appendTo(d),i=0;i").css("width",e+"px").css("background-color",c.isDark(g,i)?b.foreground:b.background).appendTo(h)}}return d},this.each(function(){var e="canvas"==b.render?c():d();a(e).appendTo(this)})}}(jQuery),QR8bitByte.prototype={getLength:function(){return this.data.length},write:function(a){for(var b=0;ba||this.moduleCount<=a||0>b||this.moduleCount<=b){throw new Error(a+","+b)}return this.modules[a][b]},getModuleCount:function(){return this.moduleCount},make:function(){var a,b,c,d,e,f;if(this.typeNumber<1){for(a=1,a=1;40>a;a++){for(b=QRRSBlock.getRSBlocks(a,this.errorCorrectLevel),c=new QRBitBuffer(),d=0,e=0;e=7&&this.setupTypeNumber(a),null==this.dataCache&&(this.dataCache=QRCode.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,b)},setupPositionProbePattern:function(a,b){var c,d;for(c=-1;7>=c;c++){if(!(-1>=a+c||this.moduleCount<=a+c)){for(d=-1;7>=d;d++){-1>=b+d||this.moduleCount<=b+d||(this.modules[a+c][b+d]=c>=0&&6>=c&&(0==d||6==d)||d>=0&&6>=d&&(0==c||6==c)||c>=2&&4>=c&&d>=2&&4>=d?!0:!1)}}}},getBestMaskPattern:function(){var c,d,a=0,b=0;for(c=0;8>c;c++){this.makeImpl(!0,c),d=QRUtil.getLostPoint(this),(0==c||a>d)&&(a=d,b=c)}return b},createMovieClip:function(a,b,c){var f,g,h,i,j,d=a.createEmptyMovieClip(b,c),e=1;for(this.make(),f=0;f=f;f++){for(g=-2;2>=g;g++){this.modules[d+f][e+g]=-2==f||2==f||-2==g||2==g||0==f&&0==g?!0:!1}}}}}},setupTypeNumber:function(a){var c,d,b=QRUtil.getBCHTypeNumber(this.typeNumber);for(c=0;18>c;c++){d=!a&&1==(1&b>>c),this.modules[Math.floor(c/3)][c%3+this.moduleCount-8-3]=d}for(c=0;18>c;c++){d=!a&&1==(1&b>>c),this.modules[c%3+this.moduleCount-8-3][Math.floor(c/3)]=d}},setupTypeInfo:function(a,b){var e,f,c=this.errorCorrectLevel<<3|b,d=QRUtil.getBCHTypeInfo(c);for(e=0;15>e;e++){f=!a&&1==(1&d>>e),6>e?this.modules[e][8]=f:8>e?this.modules[e+1][8]=f:this.modules[this.moduleCount-15+e][8]=f}for(e=0;15>e;e++){f=!a&&1==(1&d>>e),8>e?this.modules[8][this.moduleCount-e-1]=f:9>e?this.modules[8][15-e-1+1]=f:this.modules[8][15-e-1]=f}this.modules[this.moduleCount-8][8]=!a},mapData:function(a,b){var g,h,i,j,c=-1,d=this.moduleCount-1,e=7,f=0;for(g=this.moduleCount-1;g>0;g-=2){for(6==g&&g--;;){for(h=0;2>h;h++){null==this.modules[d][g-h]&&(i=!1,f>>e)),j=QRUtil.getMask(b,d,g-h),j&&(i=!i),this.modules[d][g-h]=i,e--,-1==e&&(f++,e=7))}if(d+=c,0>d||this.moduleCount<=d){d-=c,c=-c;break}}}}},QRCode.PAD0=236,QRCode.PAD1=17,QRCode.createData=function(a,b,c){var f,g,h,d=QRRSBlock.getRSBlocks(a,b),e=new QRBitBuffer();for(f=0;f8*h){throw new Error("code length overflow. ("+e.getLengthInBits()+">"+8*h+")")}for(e.getLengthInBits()+4<=8*h&&e.put(0,4);0!=e.getLengthInBits()%8;){e.putBit(!1)}for(;;){if(e.getLengthInBits()>=8*h){break}if(e.put(QRCode.PAD0,8),e.getLengthInBits()>=8*h){break}e.put(QRCode.PAD1,8)}return QRCode.createBytes(e,d)},QRCode.createBytes=function(a,b){var h,i,j,k,l,m,n,o,p,q,r,c=0,d=0,e=0,f=new Array(b.length),g=new Array(b.length);for(h=0;h=0?n.get(o):0}}for(p=0,k=0;kk;k++){for(h=0;hk;k++){for(h=0;h=0;){b^=QRUtil.G15<=0;){b^=QRUtil.G18<>>=1}return b},getPatternPosition:function(a){return QRUtil.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,b,c){switch(a){case QRMaskPattern.PATTERN000:return 0==(b+c)%2;case QRMaskPattern.PATTERN001:return 0==b%2;case QRMaskPattern.PATTERN010:return 0==c%3;case QRMaskPattern.PATTERN011:return 0==(b+c)%3;case QRMaskPattern.PATTERN100:return 0==(Math.floor(b/2)+Math.floor(c/3))%2;case QRMaskPattern.PATTERN101:return 0==b*c%2+b*c%3;case QRMaskPattern.PATTERN110:return 0==(b*c%2+b*c%3)%2;case QRMaskPattern.PATTERN111:return 0==(b*c%3+(b+c)%2)%2;default:throw new Error("bad maskPattern:"+a)}},getErrorCorrectPolynomial:function(a){var c,b=new QRPolynomial([1],0);for(c=0;a>c;c++){b=b.multiply(new QRPolynomial([1,QRMath.gexp(c)],0))}return b},getLengthInBits:function(a,b){if(b>=1&&10>b){switch(a){case QRMode.MODE_NUMBER:return 10;case QRMode.MODE_ALPHA_NUM:return 9;case QRMode.MODE_8BIT_BYTE:return 8;case QRMode.MODE_KANJI:return 8;default:throw new Error("mode:"+a)}}else{if(27>b){switch(a){case QRMode.MODE_NUMBER:return 12;case QRMode.MODE_ALPHA_NUM:return 11;case QRMode.MODE_8BIT_BYTE:return 16;case QRMode.MODE_KANJI:return 10;default:throw new Error("mode:"+a)}}else{if(!(41>b)){throw new Error("type:"+b)}switch(a){case QRMode.MODE_NUMBER:return 14;case QRMode.MODE_ALPHA_NUM:return 13;case QRMode.MODE_8BIT_BYTE:return 16;case QRMode.MODE_KANJI:return 12;default:throw new Error("mode:"+a)}}}},getLostPoint:function(a){var d,e,f,g,h,i,j,k,l,b=a.getModuleCount(),c=0;for(d=0;b>d;d++){for(e=0;b>e;e++){for(f=0,g=a.isDark(d,e),h=-1;1>=h;h++){if(!(0>d+h||d+h>=b)){for(i=-1;1>=i;i++){0>e+i||e+i>=b||(0!=h||0!=i)&&g==a.isDark(d+h,e+i)&&f++}}}f>5&&(c+=3+f-5)}}for(d=0;b-1>d;d++){for(e=0;b-1>e;e++){j=0,a.isDark(d,e)&&j++,a.isDark(d+1,e)&&j++,a.isDark(d,e+1)&&j++,a.isDark(d+1,e+1)&&j++,(0==j||4==j)&&(c+=3)}}for(d=0;b>d;d++){for(e=0;b-6>e;e++){a.isDark(d,e)&&!a.isDark(d,e+1)&&a.isDark(d,e+2)&&a.isDark(d,e+3)&&a.isDark(d,e+4)&&!a.isDark(d,e+5)&&a.isDark(d,e+6)&&(c+=40)}}for(e=0;b>e;e++){for(d=0;b-6>d;d++){a.isDark(d,e)&&!a.isDark(d+1,e)&&a.isDark(d+2,e)&&a.isDark(d+3,e)&&a.isDark(d+4,e)&&!a.isDark(d+5,e)&&a.isDark(d+6,e)&&(c+=40)}}for(k=0,e=0;b>e;e++){for(d=0;b>d;d++){a.isDark(d,e)&&k++}}return l=Math.abs(100*k/b/b-50)/5,c+=10*l}},QRMath={glog:function(a){if(1>a){throw new Error("glog("+a+")")}return QRMath.LOG_TABLE[a]},gexp:function(a){for(;0>a;){a+=255}for(;a>=256;){a-=255}return QRMath.EXP_TABLE[a]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},i=0;8>i;i++){QRMath.EXP_TABLE[i]=1<i;i++){QRMath.EXP_TABLE[i]=QRMath.EXP_TABLE[i-4]^QRMath.EXP_TABLE[i-5]^QRMath.EXP_TABLE[i-6]^QRMath.EXP_TABLE[i-8]}for(i=0;255>i;i++){QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]]=i}QRPolynomial.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){var c,d,b=new Array(this.getLength()+a.getLength()-1);for(c=0;cf;f++){for(g=c[3*f+0],h=c[3*f+1],i=c[3*f+2],j=0;g>j;j++){e.push(new QRRSBlock(h,i))}}return e},QRRSBlock.getRsBlockTable=function(a,b){switch(b){case QRErrorCorrectLevel.L:return QRRSBlock.RS_BLOCK_TABLE[4*(a-1)+0];case QRErrorCorrectLevel.M:return QRRSBlock.RS_BLOCK_TABLE[4*(a-1)+1];case QRErrorCorrectLevel.Q:return QRRSBlock.RS_BLOCK_TABLE[4*(a-1)+2];case QRErrorCorrectLevel.H:return QRRSBlock.RS_BLOCK_TABLE[4*(a-1)+3];default:return void 0}},QRBitBuffer.prototype={get:function(a){var b=Math.floor(a/8);return 1==(1&this.buffer[b]>>>7-a%8)},put:function(a,b){for(var c=0;b>c;c++){this.putBit(1==(1&a>>>b-c-1))}},getLengthInBits:function(){return this.length},putBit:function(a){var b=Math.floor(this.length/8);this.buffer.length<=b&&this.buffer.push(0),a&&(this.buffer[b]|=128>>>this.length%8),this.length++}}; + + exports('okQrcode', function (obj) { + var elm = obj.elem; + delete obj.elem; + return jQuery(elm).qrcode(obj); + }); +}); + +