405 lines
13 KiB
JavaScript
405 lines
13 KiB
JavaScript
/**
|
|
* jQuery ligerUI 1.3.2
|
|
*
|
|
* http://ligerui.com
|
|
*
|
|
* Author daomi 2015 [ gd_star@163.com ]
|
|
*
|
|
*/
|
|
(function ($)
|
|
{
|
|
$.fn.ligerSpinner = function ()
|
|
{
|
|
return $.ligerui.run.call(this, "ligerSpinner", arguments);
|
|
};
|
|
$.fn.ligerGetSpinnerManager = function ()
|
|
{
|
|
return $.ligerui.run.call(this, "ligerGetSpinnerManager", arguments);
|
|
};
|
|
|
|
$.ligerDefaults.Spinner = {
|
|
type: 'float', //类型 float:浮点数 int:整数 time:时间
|
|
isNegative: true, //是否负数
|
|
decimalplace: 2, //小数位 type=float时起作用
|
|
step: 0.1, //每次增加的值
|
|
interval: 50, //间隔,毫秒
|
|
value : null,
|
|
onChangeValue: false, //改变值事件
|
|
minValue: null, //最小值
|
|
maxValue: null, //最大值
|
|
disabled: false,
|
|
readonly: false //是否只读
|
|
};
|
|
|
|
$.ligerMethos.Spinner = {};
|
|
|
|
$.ligerui.controls.Spinner = function (element, options)
|
|
{
|
|
$.ligerui.controls.Spinner.base.constructor.call(this, element, options);
|
|
};
|
|
$.ligerui.controls.Spinner.ligerExtend($.ligerui.controls.Input, {
|
|
__getType: function ()
|
|
{
|
|
return 'Spinner';
|
|
},
|
|
__idPrev: function ()
|
|
{
|
|
return 'Spinner';
|
|
},
|
|
_extendMethods: function ()
|
|
{
|
|
return $.ligerMethos.Spinner;
|
|
},
|
|
_init: function ()
|
|
{
|
|
$.ligerui.controls.Spinner.base._init.call(this);
|
|
var p = this.options;
|
|
if (p.type == 'float')
|
|
{
|
|
p.step = 0.1;
|
|
p.interval = 50;
|
|
} else if (p.type == 'int')
|
|
{
|
|
p.step = 1;
|
|
p.interval = 100;
|
|
} else if (p.type == 'time')
|
|
{
|
|
p.step = 1;
|
|
p.interval = 100;
|
|
} else
|
|
{
|
|
p.type = "int";
|
|
p.step = 1;
|
|
p.interval = 100;
|
|
}
|
|
},
|
|
_render: function ()
|
|
{
|
|
var g = this, p = this.options;
|
|
g.interval = null;
|
|
g.inputText = null;
|
|
g.value = null;
|
|
g.textFieldID = "";
|
|
if (this.element.tagName.toLowerCase() == "input" && this.element.type && this.element.type == "text")
|
|
{
|
|
g.inputText = $(this.element);
|
|
if (this.element.id)
|
|
g.textFieldID = this.element.id;
|
|
}
|
|
else
|
|
{
|
|
g.inputText = $('<input type="text"/>');
|
|
g.inputText.appendTo($(this.element));
|
|
}
|
|
if (g.textFieldID == "" && p.textFieldID)
|
|
g.textFieldID = p.textFieldID;
|
|
|
|
g.link = $('<div class="l-trigger"><div class="l-spinner-up"><div class="l-spinner-icon"></div></div><div class="l-spinner-split"></div><div class="l-spinner-down"><div class="l-spinner-icon"></div></div></div>');
|
|
g.wrapper = g.inputText.wrap('<div class="l-text"></div>').parent();
|
|
g.wrapper.append('<div class="l-text-l"></div><div class="l-text-r"></div>');
|
|
g.wrapper.append(g.link).after(g.selectBox).after(g.valueField);
|
|
g.link.up = $(".l-spinner-up", g.link);
|
|
g.link.down = $(".l-spinner-down", g.link);
|
|
g.inputText.addClass("l-text-field");
|
|
|
|
if (p.disabled)
|
|
{
|
|
g.wrapper.addClass("l-text-disabled");
|
|
}
|
|
//初始化
|
|
if (!g._isVerify(g.inputText.val()))
|
|
{
|
|
g.value = g._getDefaultValue();
|
|
g._showValue(g.value);
|
|
}
|
|
//事件
|
|
g.link.up.hover(function ()
|
|
{
|
|
if (!p.disabled)
|
|
$(this).addClass("l-spinner-up-over");
|
|
}, function ()
|
|
{
|
|
clearInterval(g.interval);
|
|
$(document).unbind("selectstart.spinner");
|
|
$(this).removeClass("l-spinner-up-over");
|
|
}).mousedown(function ()
|
|
{
|
|
if (!p.disabled)
|
|
{
|
|
g._uping.call(g);
|
|
g.interval = setInterval(function ()
|
|
{
|
|
g._uping.call(g);
|
|
}, p.interval);
|
|
$(document).bind("selectstart.spinner", function () { return false; });
|
|
}
|
|
}).mouseup(function ()
|
|
{
|
|
clearInterval(g.interval);
|
|
g.inputText.trigger("change").focus();
|
|
$(document).unbind("selectstart.spinner");
|
|
});
|
|
g.link.down.hover(function ()
|
|
{
|
|
if (!p.disabled)
|
|
$(this).addClass("l-spinner-down-over");
|
|
}, function ()
|
|
{
|
|
clearInterval(g.interval);
|
|
$(document).unbind("selectstart.spinner");
|
|
$(this).removeClass("l-spinner-down-over");
|
|
}).mousedown(function ()
|
|
{
|
|
if (!p.disabled)
|
|
{
|
|
g.interval = setInterval(function ()
|
|
{
|
|
g._downing.call(g);
|
|
}, p.interval);
|
|
$(document).bind("selectstart.spinner", function () { return false; });
|
|
}
|
|
}).mouseup(function ()
|
|
{
|
|
clearInterval(g.interval);
|
|
g.inputText.trigger("change").focus();
|
|
$(document).unbind("selectstart.spinner");
|
|
});
|
|
|
|
g.inputText.change(function ()
|
|
{
|
|
var value = g.inputText.val();
|
|
g.value = g._getVerifyValue(value);
|
|
g.trigger('changeValue', [g.value]);
|
|
g._showValue(g.value);
|
|
}).blur(function ()
|
|
{
|
|
g.wrapper.removeClass("l-text-focus");
|
|
}).focus(function ()
|
|
{
|
|
g.wrapper.addClass("l-text-focus");
|
|
});
|
|
g.wrapper.hover(function ()
|
|
{
|
|
if (!p.disabled)
|
|
g.wrapper.addClass("l-text-over");
|
|
}, function ()
|
|
{
|
|
g.wrapper.removeClass("l-text-over");
|
|
});
|
|
g.set(p);
|
|
},
|
|
_setValue: function (value)
|
|
{
|
|
if (value != null)
|
|
this.inputText.val(value);
|
|
},
|
|
_setWidth: function (value)
|
|
{
|
|
var g = this;
|
|
if (value > 20)
|
|
{
|
|
g.wrapper.css({ width: value });
|
|
g.inputText.css({ width: value - 20 });
|
|
}
|
|
},
|
|
_setHeight: function (value)
|
|
{
|
|
var g = this;
|
|
if (value > 10)
|
|
{
|
|
g.wrapper.height(value);
|
|
g.inputText.height(value - 2);
|
|
g.link.height(value - 4);
|
|
}
|
|
},
|
|
_setDisabled: function (value)
|
|
{
|
|
if (value)
|
|
{
|
|
this.wrapper.addClass("l-text-disabled");
|
|
}
|
|
else
|
|
{
|
|
this.wrapper.removeClass("l-text-disabled");
|
|
}
|
|
},
|
|
_showValue: function (value)
|
|
{
|
|
var g = this, p = this.options;
|
|
if (!value || value == "NaN") value = 0;
|
|
if (p.type == 'float')
|
|
{
|
|
value = parseFloat(value).toFixed(p.decimalplace);
|
|
}
|
|
this.inputText.val(value)
|
|
},
|
|
_setValue: function (value)
|
|
{
|
|
this._showValue(value);
|
|
},
|
|
setValue: function (value)
|
|
{
|
|
this._showValue(value);
|
|
},
|
|
getValue: function ()
|
|
{
|
|
return this.inputText.val();
|
|
},
|
|
_round: function (v, e)
|
|
{
|
|
var g = this, p = this.options;
|
|
var t = 1;
|
|
for (; e > 0; t *= 10, e--) { }
|
|
for (; e < 0; t /= 10, e++) { }
|
|
return Math.round(v * t) / t;
|
|
},
|
|
_isInt: function (str)
|
|
{
|
|
var g = this, p = this.options;
|
|
var strP = p.isNegative ? /^-?\d+$/ : /^\d+$/;
|
|
if (!strP.test(str)) return false;
|
|
if (parseFloat(str) != str) return false;
|
|
return true;
|
|
},
|
|
_isFloat: function (str)
|
|
{
|
|
var g = this, p = this.options;
|
|
var strP = p.isNegative ? /^-?\d+(\.\d+)?$/ : /^\d+(\.\d+)?$/;
|
|
if (!strP.test(str)) return false;
|
|
if (parseFloat(str) != str) return false;
|
|
return true;
|
|
},
|
|
_isTime: function (str)
|
|
{
|
|
var g = this, p = this.options;
|
|
var a = str.match(/^(\d{1,2}):(\d{1,2})$/);
|
|
if (a == null) return false;
|
|
if (a[1] > 24 || a[2] > 60) return false;
|
|
return true;
|
|
|
|
},
|
|
_isVerify: function (str)
|
|
{
|
|
var g = this, p = this.options;
|
|
if (p.type == 'float')
|
|
{
|
|
if (!g._isFloat(str)) return false;
|
|
var value = parseFloat(str);
|
|
if (p.minValue != undefined && p.minValue > value) return false;
|
|
if (p.maxValue != undefined && p.maxValue < value) return false;
|
|
return true;
|
|
} else if (p.type == 'int')
|
|
{
|
|
if (!g._isInt(str)) return false;
|
|
var value = parseInt(str);
|
|
if (p.minValue != undefined && p.minValue > value) return false;
|
|
if (p.maxValue != undefined && p.maxValue < value) return false;
|
|
return true;
|
|
} else if (p.type == 'time')
|
|
{
|
|
return g._isTime(str);
|
|
}
|
|
return false;
|
|
},
|
|
_getVerifyValue: function (value)
|
|
{
|
|
var g = this, p = this.options;
|
|
var newvalue = null;
|
|
if (p.type == 'float')
|
|
{
|
|
newvalue = g._round(value, p.decimalplace);
|
|
}
|
|
else if (p.type == 'int')
|
|
{
|
|
newvalue = parseInt(value);
|
|
} else if (p.type == 'time')
|
|
{
|
|
newvalue = value;
|
|
}
|
|
if (!g._isVerify(newvalue))
|
|
{
|
|
return g.value;
|
|
} else
|
|
{
|
|
return newvalue;
|
|
}
|
|
},
|
|
_isOverValue: function (value)
|
|
{
|
|
var g = this, p = this.options;
|
|
if (p.minValue != null && p.minValue > value) return true;
|
|
if (p.maxValue != null && p.maxValue < value) return true;
|
|
return false;
|
|
},
|
|
_getDefaultValue: function ()
|
|
{
|
|
var g = this, p = this.options;
|
|
if (p.type == 'float' || p.type == 'int') { return 0; }
|
|
else if (p.type == 'time') { return "00:00"; }
|
|
},
|
|
_addValue: function (num)
|
|
{
|
|
var g = this, p = this.options;
|
|
var value = g.inputText.val();
|
|
value = parseFloat(value) + num;
|
|
if (g._isOverValue(value)) return;
|
|
g._showValue(value);
|
|
g.inputText.trigger("change");
|
|
},
|
|
_addTime: function (minute)
|
|
{
|
|
var g = this, p = this.options;
|
|
var value = g.inputText.val();
|
|
var a = value.match(/^(\d{1,2}):(\d{1,2})$/);
|
|
newminute = parseInt(a[2]) + minute;
|
|
if (newminute < 10) newminute = "0" + newminute;
|
|
value = a[1] + ":" + newminute;
|
|
if (g._isOverValue(value)) return;
|
|
g._showValue(value);
|
|
g.inputText.trigger("change");
|
|
},
|
|
_uping: function ()
|
|
{
|
|
var g = this, p = this.options;
|
|
if (p.type == 'float' || p.type == 'int')
|
|
{
|
|
g._addValue(p.step);
|
|
} else if (p.type == 'time')
|
|
{
|
|
g._addTime(p.step);
|
|
}
|
|
},
|
|
_downing: function ()
|
|
{
|
|
var g = this, p = this.options;
|
|
if (p.type == 'float' || p.type == 'int')
|
|
{
|
|
g._addValue(-1 * p.step);
|
|
} else if (p.type == 'time')
|
|
{
|
|
g._addTime(-1 * p.step);
|
|
}
|
|
},
|
|
_isDateTime: function (dateStr)
|
|
{
|
|
var g = this, p = this.options;
|
|
var r = dateStr.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
|
|
if (r == null) return false;
|
|
var d = new Date(r[1], r[3] - 1, r[4]);
|
|
if (d == "NaN") return false;
|
|
return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4]);
|
|
},
|
|
_isLongDateTime: function (dateStr)
|
|
{
|
|
var g = this, p = this.options;
|
|
var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2})$/;
|
|
var r = dateStr.match(reg);
|
|
if (r == null) return false;
|
|
var d = new Date(r[1], r[3] - 1, r[4], r[5], r[6]);
|
|
if (d == "NaN") return false;
|
|
return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4] && d.getHours() == r[5] && d.getMinutes() == r[6]);
|
|
}
|
|
});
|
|
|
|
|
|
})(jQuery); |