/**
* jQuery ligerUI 1.1.9
*
* http://ligerui.com
*
* Author daomi 2012 [ 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, //间隔,毫秒
onChangeValue: false, //改变值事件
minValue: null, //最小值
maxValue: null, //最大值
disabled: 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;
}
},
_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 = $('');
g.inputText.appendTo($(this.element));
}
if (g.textFieldID == "" && p.textFieldID)
g.textFieldID = p.textFieldID;
g.link = $('
');
g.wrapper = g.inputText.wrap('').parent();
g.wrapper.append('');
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.inputText.val(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.inputText.val(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);
},
_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");
}
},
setValue: function (value)
{
this.inputText.val(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.inputText.val(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.inputText.val(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);