//基础框架 (function() { var $C = window.$ = jQuery; var Cute = window.Cute = { set$: function($){ window.$C = $; }, config: { SITEURL: "", RESOURCEURL: "", SCRIPTPATH: "/static/js/", SERVICEURL: "/api/", DEBUG: true }, init: function() { // 可以通过在 url 上加 ?cute-DEBUG 来开启 DEBUG 模式 if (window.location.search && window.location.search.indexOf('cute-DEBUG') !== -1) { this.config.DEBUG = true; } return this; }, log: function(msg, src) { if (this.config.DEBUG) { if (src) { msg = src + ': ' + msg; } if (window['console'] !== undefined && console.log) { console.log(msg); } } return this; }, error: function(msg) { if (this.config.DEBUG) { throw msg; } }, common: { confirm: function(msg, url, options) { if (arguments.length < 2) { url = msg; msg = "真的要删除吗?"; } new Cute.ui.dialog().confirm(msg, $C.extend(options || {}, { yes: function() { if (url.constructor == String) { location.href = url; return false; } else if (url.constructor == Function) { url(); return false; } return true; } })); return false; }, copy: function(txt) { if (window.clipboardData) { window.clipboardData.clearData(); window.clipboardData.setData("Text", txt); } else if (navigator.userAgent.indexOf("Opera") != -1) { window.location = txt; } else if (window.netscape) { try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); } catch (e) { alert("您的firefox安全限制限制您进行剪贴板操作,请打开'about:config'将signed.applets.codebase_principal_support'设置为true'之后重试"); return false; } var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard); if (!clip) return false; var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable); if (!trans) return false; trans.addDataFlavor('text/unicode'); var str = new Object(); var len = new Object(); var str = Components.classes['@mozilla.org/supports-string;1'].createInstance(Components.interfaces.nsISupportsString); var copytext = txt; str.data = copytext; trans.setTransferData("text/unicode", str, copytext.length * 2); var clipid = Components.interfaces.nsIClipboard; if (!clip) return false; clip.setData(trans, null, clipid.kGlobalClipboard); } else { return false; } return true; }, flashCopy: function(obj, txt, success) { var that = this; $C(obj).each(function() { var content = txt; if ($C.isFunction(txt)) { content = txt.call(this); } // if($C.support.cssFloat){ if (typeof ZeroClipboard == "undefined") return false; this.clip = null; ZeroClipboard.setMoviePath(Cute.config.RESOURCEURL + "/js/ZeroClipboard.swf"); this.clip = new ZeroClipboard.Client(); this.clip.setHandCursor(true); this.clip.setText(content); this.clip.addEventListener('onComplete', success); $C(window).resize(function() { this.clip.reposition(); } .bind(this)); this.clip.glue(this); // }else{ // $C(this).on('click', function(){ // that.copy(content); // success(); // }); // } return this.clip; }); }, checkAll: function(obj, elName) { $C(obj).closest("form").find("input:checkbox[name=" + elName + "]").prop("checked", $C(obj).porp("checked")); }, insertSelection: function(obj, str) { var obj = $C(obj)[0]; obj.focus(); var pos = this.getRangPos(obj); if(pos.start == 0 && pos.end == 0){ this.selectText(obj, $(obj).val().length); } if (typeof document.selection != "undefined") { document.selection.createRange().text = str; obj.createTextRange().duplicate().moveStart("character", -str.length); } else { var tclen = obj.value.length; var m = obj.selectionStart; obj.value = obj.value.substr(0, obj.selectionStart) + str + obj.value.substring(obj.selectionStart, tclen); obj.selectionStart = m + str.length; obj.setSelectionRange(m + str.length, m + str.length); } }, selectText: function(obj, start, end) { var obj = $C(obj)[0]; obj.focus(); if(end == undefined){ end = start; } if (typeof document.selection != "undefined") { var range = obj.createTextRange(); range.collapse(true); range.moveEnd("character", end); range.moveStart("character", start); range.select(); } else { obj.setSelectionRange(start, end); //设光标 } }, getRangPos: function(obj) { var obj = $C(obj)[0]; var pos = {}; if (typeof document.selection != "undefined") { var range = document.selection.createRange(); if (obj != range.parentElement()) return var range_all = document.body.createTextRange(); range_all.moveToElementText(obj); for (var sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++) { range_all.moveStart('character', 1); } for (var i = 0; i <= sel_start; i++) { if (obj.value.charAt(i) == '\n') sel_start++; } pos.start = sel_start; var range_all = document.body.createTextRange(); range_all.moveToElementText(obj); for (var sel_end = 0; range_all.compareEndPoints('StartToEnd', range) < 0; sel_end++) range_all.moveStart('character', 1); for (var i = 0; i <= sel_end; i++) { if (obj.value.charAt(i) == '\n') sel_end++; } pos.end = sel_end; } else if (obj.selectionStart || obj.selectionStart == '0') { pos.start = obj.selectionStart; pos.end = obj.selectionEnd; } return pos; }, scrolling: function(obj, options, func) { var defaults = { target: 1, timer: 800, offset: 0, parent: 'html,body' }; func = func || $C.noop; var o = $C.extend(defaults, options || {}); $C(obj).each(function(i) { switch (o.target) { case 1: var targetTop = $C(obj).offset().top + o.offset; $C(o.parent).animate({ scrollTop: targetTop }, o.timer, Cute.Function.bind(func, obj, o)); break; case 2: var targetLeft = $C(obj).offset().left + o.offset; $C(o.parent).animate({ scrollLeft: targetLeft }, o.timer, Cute.Function.bind(func, obj, o)); break; } return false; }); return this; } }, ui: {}, plugin: {} }; Cute.params = { //参数操作 init: function(str) { this.list = {}; var params = str ? str : location.search; $C.each(params.match(/(?:[\?|\&])[^\=]+=[^\&|#|$]*/gi) || [], function(n, item) { var _item = item.substring(1); var _key = _item.split("=", 1)[0]; var _value = _item.replace(eval("/" + _key + "=/i"), ""); this.list[_key.toLowerCase()] = Cute.String.urldecode(_value); } .bind(this)); return this; }, get: function(item) { if (typeof this.list == "undefined") this.init(); var _item = this.list[item.toLowerCase()]; return _item ? _item : ""; }, set: function(options) { if (typeof this.list == "undefined") this.init(); $C.extend(true, this.list, options || {}); return this; }, serialize: function() { if (typeof this.list == "undefined") this.init(); return $C.param(this.list, true); }, hashString: function(item) { if (!item) return location.hash.substring(1); var sValue = location.hash.match(new RegExp("[\#\&]" + item + "=([^\&]*)(\&?)", "i")); sValue = sValue ? sValue[1] : ""; return sValue == location.hash.substring(1) ? "" : sValue == undefined ? location.hash.substring(1) : Cute.String.urldecode(sValue); } }; Cute.api = { //接口调用方法 ajax: function(type, action, data, callback, cache, async, options) { if (typeof data == 'function' && typeof callback == 'undefined') { callback = data; data = undefined; } var url = ""; if(!options) options = {}; if (action != undefined) { if (action.substring(0,1) == "/" || action.indexOf('http://') !== -1) { url = action; if(action.indexOf('http://') !== -1) options['dataType'] = 'jsonp'; } else { url = Cute.config.SERVICEURL + '/' + action; if(Cute.config.SERVICEURL.substring(0,1) !== "/" && Cute.config.SERVICEURL.indexOf(location.hostname) == -1){ if(!options) options = {}; if(type == 'GET'){ options['dataType'] = 'jsonp'; }else if(type == 'POST'){ options['crossDomain'] = true; } } } } else { url = location.pathname; } return $C.ajax($C.extend({ url: url, data: data, async: typeof async !== "undefined" ? async : true, type: typeof type !== "undefined" ? type : "GET", //dataType: "json", ifModified: false, timeout: 20000, traditional: false, headers:{ }, cache: typeof cache != "undefined" ? cache : false, success: callback, // dataFilter: function(data) { // return eval("(" + data + ")"); // }, error: function() { if (async == false) { new Cute.ui.dialog().alert("出错"); } $C("#dialog_loading").remove(); return false; }, beforeSend: function(request) { } }, options || {})); }, get: function(action, data, callback, cache, async, options) { return this.ajax("GET", action, data, callback, cache, async, options); }, post: function(action, data, callback, cache, async, options) { return this.ajax("POST", action, data, callback, cache, async, options); } }; Cute.Class = { /* *创建一个命名空间 */ namespace: function(module) { var space = module.split('.'); var s = ''; for (var i in space) { if (space[i].constructor == String) { if (0 == s.length) s = space[i]; else s += '.' + space[i]; eval("if ((typeof(" + s + ")) == 'undefined') " + s + " = {};"); } } }, /* *创建一个类,并执行构造函数 */ create: function() { var f = function() { this.initialize.apply(this, arguments); }; for (var i = 0, il = arguments.length, it; i < il; i++) { it = arguments[i]; if (it == null) continue; $C.extend(f.prototype, it); } return f; }, /* *继承一个类,暂不支持多重继承 */ inherit: function(superC, opt) { function temp() { }; temp.prototype = superC.prototype; var f = function() { this.initialize.apply(this, arguments); }; f.prototype = new temp(); $C.extend(f.prototype, opt); f.prototype.superClass_ = superC.prototype; f.prototype.super_ = function() { this.superClass_.initialize.apply(this, arguments); }; return f; } }; Cute.Object = { /* * 对象的完全克隆 */ clone: function(obj) { var con = obj.constructor, cloneObj = null; if (con == Object) { cloneObj = new con(); } else if (con == Function) { return Cute.Function.clone(obj); } else cloneObj = new con(obj.valueOf()); for (var it in obj) { if (cloneObj[it] != obj[it]) { if (typeof (obj[it]) != 'object') { cloneObj[it] = obj[it]; } else { cloneObj[it] = arguments.callee(obj[it]) } } } cloneObj.toString = obj.toString; cloneObj.valueOf = obj.valueOf; return cloneObj; } }; Cute.Function = { before: function(self, fun){ return function(){ if(fun.apply(this, arguments) === false){ return false; } return self.apply(this, arguments); } }, after: function(self, fun){ return function(){ var ret = self.apply(this, arguments); if(ret) return ret; return fun.apply(this, arguments); } }, timeout: function(fun, time) { return setTimeout(fun, time * 1000); }, interval: function(fun, time) { return setInterval(fun, time * 1000); }, //域绑定,可传参 bind: function(fun) { var _this = arguments[1], args = []; for (var i = 2, il = arguments.length; i < il; i++) { args.push(arguments[i]); } return function() { var thisArgs = args.concat(); for (var i = 0, il = arguments.length; i < il; i++) { thisArgs.push(arguments[i]); } return fun.apply(_this || this, thisArgs); } }, // 域绑定,可传事件 bindEvent: function(fun) { var _this = arguments[1], args = []; for (var i = 2, il = arguments.length; i < il; i++) { args.push(arguments[i]); } return function(e) { var thisArgs = args.concat(); thisArgs.unshift(e || window.event); return fun.apply(_this || this, thisArgs); } }, clone: function(fun) { var clone = function() { return fun.apply(this, arguments); }; clone.prototype = fun.prototype; for (prototype in fun) { if (fun.hasOwnProperty(prototype) && prototype != 'prototype') { clone[prototype] = fun[prototype]; } } return clone; } }; Cute.Cookie = { get: function(name) { var v = document.cookie.match('(?:^|;)\\s*' + name + '=([^;]*)'); return v ? decodeURIComponent(v[1]) : null; }, set: function(name, value, expires, path, domain) { var str = name + "=" + encodeURIComponent(value); if (expires != null && expires != '') { if (expires == 0) { expires = 100 * 365 * 24 * 60 * 60; } var exp = new Date(); exp.setTime(exp.getTime() + expires * 1000); str += "; expires=" + exp.toUTCString(); } if (path) { str += "; path=" + path; } if (domain) { str += "; domain=" + domain; } document.cookie = str; }, del: function(name, path, domain) { document.cookie = name + "=" + ((path) ? "; path=" + path : "") + ((domain) ? "; domain=" + domain : "") + "; expires=Thu, 01-Jan-70 00:00:01 GMT"; } }; Cute.Json = { stringify: function(obj) { if (window['JSON']) { return JSON.stringify(obj); }else{ var t = typeof (obj); if (t != "object" || obj === null) { // simple data type if (t == "string") obj = '"' + obj + '"'; return String(obj); } else { // recurse array or object var n, v, json = [], arr = (obj && obj.constructor == Array); for (n in obj) { v = obj[n]; t = typeof(v); if (obj.hasOwnProperty(n)) { if (t == "string") v = '"' + v + '"'; else if (t == "object" && v !== null) v = this.stringify(v); json.push((arr ? "" : '"' + n + '":') + String(v)); } } return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}"); } } } }; Cute.String = { //去除空格 trim: function(str) { return str.replace(/^\s+|\s+$/g, ''); }, urldecode: decodeURIComponent, urlencode: encodeURIComponent, //过滤HTML filterHTML: function(str){ return str.replace(/<\/?[^>]*>/g,''); }, //格式化HTML escapeHTML: function(str) { return str.replace(/&/g, '&').replace(//g, '>'); }, //反格式化HTML unescapeHTML: function(str) { return str.replace(/</g, '<').replace(/>/g, '>').replace(/&/g, '&'); }, // 取得字符的字节长度,汉字认为是两个字符 byteLength: function(str) { return str.replace(/[^\x00-\xff]/g, "**").length; }, //截断 cut: function(str, length, padding){ var r =/[^\x00-\xff]/g; if(str.replace(r, "mm").length > length){ var m = Math.floor(length/2); for(var i=m; i=length){ return str.substr(0, i) + padding; } } } return str; }, rnd: function (a, b) { return Math.floor((b - a + 1) * Math.random() + a) }, // 除去最后一个字符 delLast: function(str) { return str.substring(0, str.length - 1); }, // String to Int toInt: function(str) { return Math.floor(str); }, // 取左边多少字符,中文两个字节 left: function(str, n) { var s = str.replace(/\*/g, " ").replace(/[^\x00-\xff]/g, "**"); s = s.slice(0, n).replace(/\*\*/g, " ").replace(/\*/g, "").length; return str.slice(0, s); }, // 取右边多少字符,中文两个字节 right: function(str, n) { var len = str.length; var s = str.replace(/\*/g, " ").replace(/[^\x00-\xff]/g, "**"); s = s.slice(s.length - n, s.length).replace(/\*\*/g, " ").replace(/\*/g, "").length; return str.slice(len - s, len); }, // 除去HTML标签 removeHTML: function(str) { return str.replace(/<\/?[^>]+>/gi, ''); }, //"
{0}
{1}".format(txt0,txt1); format: function() { var str = arguments[0], args = []; for (var i = 1, il = arguments.length; i < il; i++) { args.push(arguments[i]); } return str.replace(/\{(\d+)\}/g, function(m, i) { return args[i]; }); }, // toString(16) on16: function(str) { var a = [], i = 0; for (; i < str.length; ) a[i] = ("00" + str.charCodeAt(i++).toString(16)).slice(-4); return "\\u" + a.join("\\u"); }, // unString(16) un16: function(str) { return unescape(str.replace(/\\/g, "%")); }, base64_encode: function(data) { var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc = "", tmp_arr = []; if(!data) { return data; } do { // pack three octets into four hexets o1 = data.charCodeAt(i++); o2 = data.charCodeAt(i++); o3 = data.charCodeAt(i++); bits = o1 << 16 | o2 << 8 | o3; h1 = bits >> 18 & 0x3f; h2 = bits >> 12 & 0x3f; h3 = bits >> 6 & 0x3f; h4 = bits & 0x3f; // use hexets to index into b64, and append result to encoded string tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); } while (i < data.length); enc = tmp_arr.join(''); var r = data.length % 3; return(r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3); }, base64_decode: function(data) { var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, dec = "", tmp_arr = []; if (!data) { return data; } data += ''; do { // unpack four hexets into three octets using index points in b64 h1 = b64.indexOf(data.charAt(i++)); h2 = b64.indexOf(data.charAt(i++)); h3 = b64.indexOf(data.charAt(i++)); h4 = b64.indexOf(data.charAt(i++)); bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; o1 = bits >> 16 & 0xff; o2 = bits >> 8 & 0xff; o3 = bits & 0xff; if (h3 == 64) { tmp_arr[ac++] = String.fromCharCode(o1); } else if (h4 == 64) { tmp_arr[ac++] = String.fromCharCode(o1, o2); } else { tmp_arr[ac++] = String.fromCharCode(o1, o2, o3); } } while (i < data.length); dec = tmp_arr.join(''); dec = this.utf8_decode(dec); return dec; }, uniqid: function(prefix, more_entropy) { // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // + revised by: Kankrelune (http://www.webfaktory.info/) // % note 1: Uses an internal counter (in php_js global) to avoid collision // * example 1: uniqid(); // * returns 1: 'a30285b160c14' // * example 2: uniqid('foo'); // * returns 2: 'fooa30285b1cd361' // * example 3: uniqid('bar', true); // * returns 3: 'bara20285b23dfd1.31879087' if (typeof prefix == 'undefined') { prefix = ""; } var retId; var formatSeed = function (seed, reqWidth) { seed = parseInt(seed, 10).toString(16); // to hex str if (reqWidth < seed.length) { // so long we split return seed.slice(seed.length - reqWidth); } if (reqWidth > seed.length) { // so short we pad return Array(1 + (reqWidth - seed.length)).join('0') + seed; } return seed; }; // BEGIN REDUNDANT if (!this.php_js) { this.php_js = {}; } // END REDUNDANT if (!this.php_js.uniqidSeed) { // init seed with big random int this.php_js.uniqidSeed = Math.floor(Math.random() * 0x75bcd15); } this.php_js.uniqidSeed++; retId = prefix; // start with prefix, add current milliseconds hex string retId += formatSeed(parseInt(new Date().getTime() / 1000, 10), 8); retId += formatSeed(this.php_js.uniqidSeed, 5); // add seed hex string if (more_entropy) { // for more entropy we add a float lower to 10 retId += (Math.random() * 10).toFixed(8).toString(); } return retId; } }; Cute.Array = { // 判断是否包含某个值或者对象 include: function(arr, value) { if (arr.constructor != Array) return false; return this.index(arr, value) != -1; }, // 判断一个对象在数组中的位置 index: function(arr, value) { for (var i = 0, il = arr.length; i < il; i++) { if (arr[i] == value) return i; } return -1; }, // 过滤重复项 unique: function(arr) { if (arr.length && typeof (arr[0]) == 'object') { var len = arr.length; for (var i = 0, il = len; i < il; i++) { var it = arr[i]; for (var j = len - 1; j > i; j--) { if (arr[j] == it) arr.splice(j, 1); } } return arr; } else { var result = [], hash = {}; for (var i = 0, key; (key = arr[i]) != null; i++) { if (!hash[key]) { result.push(key); hash[key] = true; } } return result; } }, //移去某一项 remove: function(arr, o) { if (typeof o == 'number' && !Cute.Array.include(arr, o)) { arr.splice(o, 1); } else { var i = Cute.Array.index(arr, o); if (i >= 0) arr.splice(i, 1); } return arr; }, //取随机一项 random: function(arr) { var i = Math.round(Math.random() * (arr.length - 1)); return arr[i]; }, //乱序 shuffle: function(arr) { return arr.sort(function(a, b) { return Math.random() > .5 ? -1 : 1; }); } }; Cute.Date = { // new Date().format('yyyy年MM月dd日'); format: function(date, f) { var o = { "M+": date.getMonth() + 1, "d+": date.getDate(), "h+": date.getHours(), "m+": date.getMinutes(), "s+": date.getSeconds(), "q+": Math.floor((date.getMonth() + 3) / 3), "S": date.getMilliseconds() }; if (/(y+)/.test(f)) f = f.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length)); for (var k in o) if (new RegExp("(" + k + ")").test(f)) f = f.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)); return f; } }; Cute.Event = { out: function(el, name, func, canMore) { var callback = function(e) { var src = e.target, isIn = false; while (src) { if (src == el) { isIn = true; break; } src = src.parentNode; } if (!isIn) { func.call(el, e); if (!canMore) { $C.event.remove(document.body, name, c); if (el._EVENT && el._EVENT.out && el._EVENT.out.length) { var arr = el._EVENT.out; for (var i = 0, il = arr.length; i < il; i++) { if (arr[i].efunc == c && arr[i].name == name) { arr.splice(i, 1); return; } } } } } } var c = callback.bindEvent(window); if (!el._EVENT) { el._EVENT = { out: [] } } el._EVENT.out.push({ name: name, func: func, efunc: c }); $C.event.add(document.body, name, c); }, unout: function(el, name, func) { if (el._EVENT && el._EVENT.out && el._EVENT.out.length) { var arr = el._EVENT.out; if(func === undefined){ $C.event.remove(document.body, name); }else{ for (var i = 0; i < arr.length; i++) { if (func == arr[i].func && name == arr[i].name) { $C.event.remove(document.body, name,arr[i].efunc); arr.splice(i, 1); return; } } } } } }; $C.extend(Cute, { isUndefined: function(o) { return o === undefined; }, isBoolean: function(o) { return typeof o === 'boolean'; }, isString: function(o) { return typeof o === 'string'; }, isNumber: function(o) { return !isNaN(Number(o)) && isFinite(o); }, include: function(url, callback, media) { var afile = url.toLowerCase().replace(/^\s|\s$/g, "").match(/([^\/\\]+)\.(\w+)$/); if (!afile) return false; switch (afile[2]) { case "css": var el = $C('').appendTo("head"); if (!$C.support.cssFloat) { el.load(function() { if (typeof callback == 'function') callback(); }); } else { var i = 0; var checkInterval = setInterval(function() { if ($C("head>link").index(el) != -1) { if (i < 10) clearInterval(checkInterval) if (typeof callback == 'function') callback(); i++; } }, 200); } break; case "js": $C.ajax({ global: false, cache: true, ifModified: true, dataType: "script", url: url, success: callback }); break; default: break; } } }, true); Cute.Widget = { drag: function(obj, position, target, offset, func) { func = func || $C.noop; target = $C(target || obj); position = position || window; offset = offset || { x: 0, y: 0 }; return obj.css("cursor", "move").bind("mousedown.drag", function(e) { e.preventDefault(); e.stopPropagation(); //if (e.which && (e.which != 1)) return; //if (e.originalEvent.mouseHandled) { return; } if (document.defaultView) { var _top = document.defaultView.getComputedStyle(target[0], null).getPropertyValue("top"); var _left = document.defaultView.getComputedStyle(target[0], null).getPropertyValue("left"); } else { if (target[0].currentStyle) { var _top = target.css("top"); var _left = target.css("left"); } } var width = target.outerWidth(), height = target.outerHeight(); if (position === window) { position = $C.browser.msie6 ? document.body : window; var mainW = $C(position).width() - offset.x, mainH = $C(position).height() - offset.y; } else { var mainW = $C(position).outerWidth() - offset.x, mainH = $C(position).outerHeight() - offset.y; } target.posX = e.pageX - parseInt(_left); target.posY = e.pageY - parseInt(_top); if (target[0].setCapture) target[0].setCapture(); else if (window.captureEvents) window.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP); $C(document).unbind(".drag").bind("mousemove.drag", function(e) { var posX = e.pageX - target.posX, posY = e.pageY - target.posY; target.css({ left: function() { if (posX > 0 && posX + width < mainW) return posX; else if (posX <= 0) return offset.x; else if (posX + width >= mainW) return mainW - width }, top: function() { if (posY > 0 && posY + height < mainH) return posY; else if (posY <= 0) return offset.y; else if (posY + height >= mainH) return mainH - height; } }); func(_top, _left, width, height, posY, posX); }).bind("mouseup.drag", function(e) { if (target[0].releaseCapture) target[0].releaseCapture(); else if (window.releaseEvents) window.releaseEvents(Event.MOUSEMOVE | Event.MOUSEUP); $C(this).unbind(".drag"); }); }); } }; var ext = function(target, src, is) { if (!target) target = {}; for (var it in src) { if (is) { target[it] = Cute.Function.bind(function() { var c = arguments[0], f = arguments[1]; var args = [this]; for (var i = 2, il = arguments.length; i < il; i++) { args.push(arguments[i]); } return c[f].apply(c, args); }, null, src, it); } else { target[it] = src[it]; } } }; ext(window.Class = {}, Cute.Class, false); ext(Function.prototype, Cute.Function, true); ext(String.prototype, Cute.String, true); //ext(Array.prototype, Cute.Array, true); ext(Date.prototype, Cute.Date, true); })(); jQuery.fn.extend({ //jQuery 扩展 out: function(name, listener, canMore) { return this.each(function() { Cute.Event.out(this, name, listener, canMore); }); }, unout: function(name, listener) { return this.each(function() { Cute.Event.unout(this, name, listener); }); }, drag: function(position, target, offset, func) { Cute.Widget.drag(this,position, target, offset, func) }, scrolling: function(options, func) { Cute.common.scrolling(this,options, func); } }); jQuery.extend(true, { browser: { msie: /msie/.test(navigator.userAgent.toLowerCase()), msie6: /msie/.test(navigator.userAgent.toLowerCase()) && /MSIE 6\.0/i.test(window.navigator.userAgent) && !/MSIE 7\.0/i.test(window.navigator.userAgent) && !/MSIE 8\.0/i.test(window.navigator.userAgent) }, support : { pjax : window.history && window.history.pushState && window.history.replaceState && !navigator.userAgent.match(/(iPod|iPhone|iPad|WebApps\/.+CFNetwork)/), storage : !!window.localStorage } });