📄 spinner.js
字号:
delta: "1e1", postMixInProperties: function(/*Object*/ args, /*Object*/ frag){ dojo.widget.RealNumberSpinner.superclass.postMixInProperties.apply(this, arguments); this._spinnerPostMixInProperties(args, frag); }, postCreate: function(/*Object*/ args, /*Object*/ frag){ dojo.widget.RealNumberSpinner.superclass.postCreate.apply(this, arguments); this._spinnerPostCreate(args, frag); }, adjustValue: function(/*Number*/ direction, /*Number*/ x){ var val = this.getValue().replace(/[^\-+\.eE\d]/g, ""); if(!val.length){ return; } var num = parseFloat(val); if(isNaN(num)){ return; } var delta = this.delta.split(/[eE]/); if(!delta.length){ delta = [1, 1]; }else{ delta[0] = parseFloat(delta[0].replace(/[^\-+\.\d]/g, "")); if(isNaN(delta[0])){ delta[0] = 1; } if(delta.length > 1){ delta[1] = parseInt(delta[1]); } if(isNaN(delta[1])){ delta[1] = 1; } } val = this.getValue().split(/[eE]/); if(!val.length){ return; } var numBase = parseFloat(val[0].replace(/[^\-+\.\d]/g, "")); if(val.length == 1){ var numExp = 0; }else{ var numExp = parseInt(val[1].replace(/[^\-+\d]/g, "")); } if(x <= val[0].length){ x = 0; numBase += delta[0] * direction; }else{ x = Number.MAX_VALUE; numExp += delta[1] * direction; if(this.flags.eSigned == false && numExp < 0){ numExp = 0; } } num = Math.min(Math.max((numBase * Math.pow(10,numExp)), (this.flags.min?this.flags.min:-Infinity)), (this.flags.max?this.flags.max:+Infinity)); if((this.flags.exponent == true || (this.flags.exponent != false && x != 0)) && num.toExponential){ if (isNaN(this.flags.places) || this.flags.places == Infinity){ val = num.toExponential(); }else{ val = num.toExponential(this.flags.places); } }else if(num.toFixed && num.toPrecision){ if(isNaN(this.flags.places) || this.flags.places == Infinity){ val = num.toPrecision((1/3).toString().length-1); }else{ val = num.toFixed(this.flags.places); } }else{ val = num.toString(); } if(num >= 0){ if(this.flags.signed == true){ val = '+' + val; } } val = val.split(/[eE]/); if(this.flags.separator.length > 0){ if(num >= 0 && val[0].substr(0,1) != '+'){ val[0] = ' ' + val[0]; // make sure first char is nondigit for easy algorithm } var i = val[0].lastIndexOf('.'); if(i >= 0){ i -= 3; }else{ i = val[0].length-3; } for (; i > 1; i-=3){ val[0] = val[0].substr(0,i)+this.flags.separator+val[0].substr(i); } if(val[0].substr(0,1) == ' '){ val[0] = val[0].substr(1); } // remove space } if(val.length > 1){ if((this.flags.eSigned == true)&&(val[1].substr(0,1) != '+')){ val[1] = '+' + val[1]; }else if((!this.flags.eSigned)&&(val[1].substr(0,1) == '+')){ val[1] = val[1].substr(1); }else if((!this.flags.eSigned)&&(val[1].substr(0,1) == '-')&&(num.toFixed && num.toPrecision)){ if(isNaN(this.flags.places)){ val[0] = num.toPrecision((1/3).toString().length-1); }else{ val[0] = num.toFixed(this.flags.places).toString(); } val[1] = "0"; } val[0] += 'e' + val[1]; } this.setValue(val[0]); if(x > val[0].length){ x = val[0].length; } return x; }});dojo.widget.defineWidget( "dojo.widget.TimeSpinner", [dojo.widget.TimeTextbox, dojo.widget.Spinner], function(){ dojo.experimental("dojo.widget.TimeSpinner"); },{ postMixInProperties: function(/*Object*/ args, /*Object*/ frag){ dojo.widget.TimeSpinner.superclass.postMixInProperties.apply(this, arguments); this._spinnerPostMixInProperties(args, frag); }, postCreate: function(/*Object*/ args, /*Object*/ frag){ dojo.widget.TimeSpinner.superclass.postCreate.apply(this, arguments); this._spinnerPostCreate(args, frag); }, adjustValue: function(/*Number*/ direction, /*Number*/ x){ //FIXME: formatting should make use of dojo.date.format? var val = this.getValue(); var format = (this.flags.format && this.flags.format.search(/[Hhmst]/) >= 0) ? this.flags.format : "hh:mm:ss t"; if(direction == 0 || !val.length || !this.isValid()){ return; } if (!this.flags.amSymbol){ this.flags.amSymbol = "AM"; } if (!this.flags.pmSymbol){ this.flags.pmSymbol = "PM"; } var re = dojo.regexp.time(this.flags); var qualifiers = format.replace(/H/g,"h").replace(/[^hmst]/g,"").replace(/([hmst])\1/g,"$1"); var hourPos = qualifiers.indexOf('h') + 1; var minPos = qualifiers.indexOf('m') + 1; var secPos = qualifiers.indexOf('s') + 1; var ampmPos = qualifiers.indexOf('t') + 1; // tweak format to match the incoming data exactly to help find where the cursor is var cursorFormat = format; var ampm = ""; if (ampmPos > 0){ ampm = val.replace(new RegExp(re),"$"+ampmPos); cursorFormat = cursorFormat.replace(/t+/, ampm.replace(/./g,"t")); } var hour = 0; var deltaHour = 1; if (hourPos > 0){ hour = val.replace(new RegExp(re),"$"+hourPos); if (dojo.lang.isString(this.delta)){ deltaHour = this.delta.replace(new RegExp(re),"$"+hourPos); } if (isNaN(deltaHour)){ deltaHour = 1; } else { deltaHour = parseInt(deltaHour); } if (hour.length == 2){ cursorFormat = cursorFormat.replace(/([Hh])+/, "$1$1"); } else { cursorFormat = cursorFormat.replace(/([Hh])+/, "$1"); } if (isNaN(hour)){ hour = 0; } else { hour = parseInt(hour.replace(/^0(\d)/,"$1")); } } var min = 0; var deltaMin = 1; if (minPos > 0){ min = val.replace(new RegExp(re),"$"+minPos); if (dojo.lang.isString(this.delta)){ deltaMin = this.delta.replace(new RegExp(re),"$"+minPos); } if (isNaN(deltaMin)){ deltaMin = 1; } else { deltaMin = parseInt(deltaMin); } cursorFormat = cursorFormat.replace(/m+/, min.replace(/./g,"m")); if (isNaN(min)){ min = 0; } else { min = parseInt(min.replace(/^0(\d)/,"$1")); } } var sec = 0; var deltaSec = 1; if (secPos > 0){ sec = val.replace(new RegExp(re),"$"+secPos); if (dojo.lang.isString(this.delta)){ deltaSec = this.delta.replace(new RegExp(re),"$"+secPos); } if (isNaN(deltaSec)){ deltaSec = 1; } else { deltaSec = parseInt(deltaSec); } cursorFormat = cursorFormat.replace(/s+/, sec.replace(/./g,"s")); if (isNaN(sec)){ sec = 0; } else { sec = parseInt(sec.replace(/^0(\d)/,"$1")); } } if (isNaN(x) || x >= cursorFormat.length){ x = cursorFormat.length-1; } var cursorToken = cursorFormat.charAt(x); switch(cursorToken){ case 't': if (ampm == this.flags.amSymbol){ ampm = this.flags.pmSymbol; } else if (ampm == this.flags.pmSymbol){ ampm = this.flags.amSymbol; } break; default: if (hour >= 1 && hour < 12 && ampm == this.flags.pmSymbol){ hour += 12; } if (hour == 12 && ampm == this.flags.amSymbol){ hour = 0; } switch(cursorToken){ case 's': sec += deltaSec * direction; while (sec < 0){ min--; sec += 60; } while (sec >= 60){ min++; sec -= 60; } case 'm': if (cursorToken == 'm'){ min += deltaMin * direction; } while (min < 0){ hour--; min += 60; } while (min >= 60){ hour++; min -= 60; } case 'h': case 'H': if (cursorToken == 'h' || cursorToken == 'H'){ hour += deltaHour * direction; } while (hour < 0){ hour += 24; } while (hour >= 24){ hour -= 24; } break; default: // should never get here return; } if (hour >= 12){ ampm = this.flags.pmSymbol; if (format.indexOf('h') >= 0 && hour >= 13){ hour -= 12; } } else { ampm = this.flags.amSymbol; if (format.indexOf('h') >= 0 && hour == 0){ hour = 12; } } } cursorFormat = format; if (hour >= 0 && hour < 10 && format.search(/[hH]{2}/) >= 0){ hour = "0" + hour.toString(); } if (hour >= 10 && cursorFormat.search(/[hH]{2}/) < 0 ){ cursorFormat = cursorFormat.replace(/(h|H)/, "$1$1"); } if (min >= 0 && min < 10 && cursorFormat.search(/mm/) >= 0){ min = "0" + min.toString(); } if (min >= 10 && cursorFormat.search(/mm/) < 0 ){ cursorFormat = cursorFormat.replace(/m/, "$1$1"); } if (sec >= 0 && sec < 10 && cursorFormat.search(/ss/) >= 0){ sec = "0" + sec.toString(); } if (sec >= 10 && cursorFormat.search(/ss/) < 0 ){ cursorFormat = cursorFormat.replace(/s/, "$1$1"); } x = cursorFormat.indexOf(cursorToken); if (x == -1){ x = format.length; } format = format.replace(/[hH]+/, hour); format = format.replace(/m+/, min); format = format.replace(/s+/, sec); format = format.replace(/t/, ampm); this.setValue(format); if(x > format.length){ x = format.length; } return x; }});
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -