12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096 |
- /*!
- * artDialog 4.1.7
- * Date: 2013-03-03 08:04
- * http://code.google.com/p/artdialog/
- * (c) 2009-2012 TangBin, http://www.planeArt.cn
- *
- * This is licensed under the GNU LGPL, version 2.1 or later.
- * For details, see: http://creativecommons.org/licenses/LGPL/2.1/
- */
-
- ;(function (window, undefined) {
- //if (window.jQuery) return jQuery;
- var $ = window.art = function (selector, context) {
- return new $.fn.init(selector, context);
- },
- readyBound = false,
- readyList = [],
- DOMContentLoaded,
- isOpacity = 'opacity' in document.documentElement.style,
- quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,
- rclass = /[\n\t]/g,
- ralpha = /alpha\([^)]*\)/i,
- ropacity = /opacity=([^)]*)/,
- rfxnum = /^([+-]=)?([\d+-.]+)(.*)$/;
- if (window.$ === undefined) window.$ = $;
- $.fn = $.prototype = {
- constructor: $,
-
- /**
- * DOM 就绪
- * @param {Function} 回调函数
- */
- ready: function (callback) {
- $.bindReady();
- if ($.isReady) {
- callback.call(document, $);
- } else if (readyList) {
- readyList.push(callback);
- };
- return this;
- },
- /**
- * 判断样式类是否存在
- * @param {String} 名称
- * @return {Boolean}
- */
- hasClass: function (name) {
- var className = ' ' + name + ' ';
- if ((' ' + this[0].className + ' ').replace(rclass, ' ')
- .indexOf(className) > -1) return true;
- return false;
- },
- /**
- * 添加样式类
- * @param {String} 名称
- */
- addClass: function (name) {
- if (!this.hasClass(name)) this[0].className += ' ' + name;
- return this;
- },
- /**
- * 移除样式类
- * @param {String} 名称
- */
- removeClass: function (name) {
- var elem = this[0];
- if (!name) {
- elem.className = '';
- } else
- if (this.hasClass(name)) {
- elem.className = elem.className.replace(name, ' ');
- };
- return this;
- },
- /**
- * 读写样式<br />
- * css(name) 访问第一个匹配元素的样式属性<br />
- * css(properties) 把一个"名/值对"对象设置为所有匹配元素的样式属性<br />
- * css(name, value) 在所有匹配的元素中,设置一个样式属性的值<br />
- */
- css: function (name, value) {
- var i, elem = this[0], obj = arguments[0];
- if (typeof name === 'string') {
- if (value === undefined) {
- return $.css(elem, name);
- } else {
- name === 'opacity' ?
- $.opacity.set(elem, value) :
- elem.style[name] = value;
- };
- } else {
- for (i in obj) {
- i === 'opacity' ?
- $.opacity.set(elem, obj[i]) :
- elem.style[i] = obj[i];
- };
- };
-
- return this;
- },
-
- /** 显示元素 */
- show: function () {
- return this.css('display', 'block');
- },
-
- /** 隐藏元素 */
- hide: function () {
- return this.css('display', 'none');
- },
- /**
- * 获取相对文档的坐标
- * @return {Object} 返回left、top的数值
- */
- offset: function () {
- var elem = this[0],
- box = elem.getBoundingClientRect(),
- doc = elem.ownerDocument,
- body = doc.body,
- docElem = doc.documentElement,
- clientTop = docElem.clientTop || body.clientTop || 0,
- clientLeft = docElem.clientLeft || body.clientLeft || 0,
- top = box.top + (self.pageYOffset || docElem.scrollTop) - clientTop,
- left = box.left + (self.pageXOffset || docElem.scrollLeft) - clientLeft;
- return {
- left: left,
- top: top
- };
- },
-
- /**
- * 读写HTML - (不支持文本框)
- * @param {String} 内容
- */
- html: function (content) {
- var elem = this[0];
-
- if (content === undefined) return elem.innerHTML;
- $.cleanData(elem.getElementsByTagName('*'));
- elem.innerHTML = content;
-
- return this;
- },
-
- /**
- * 移除节点
- */
- remove: function () {
- var elem = this[0];
- $.cleanData(elem.getElementsByTagName('*'));
- $.cleanData([elem]);
- elem.parentNode.removeChild(elem);
-
- return this;
- },
- /**
- * 事件绑定
- * @param {String} 类型
- * @param {Function} 要绑定的函数
- */
- bind: function (type, callback) {
- $.event.add(this[0], type, callback);
- return this;
- },
- /**
- * 移除事件
- * @param {String} 类型
- * @param {Function} 要卸载的函数
- */
- unbind: function(type, callback) {
- $.event.remove(this[0], type, callback);
- return this;
- }
- };
- $.fn.init = function (selector, context) {
- var match, elem;
- context = context || document;
-
- if (!selector) return this;
-
- if (selector.nodeType) {
- this[0] = selector;
- return this;
- };
-
- if (selector === 'body' && context.body) {
- this[0] = context.body;
- return this;
- };
-
- if (selector === 'head' || selector === 'html') {
- this[0] = context.getElementsByTagName(selector)[0];
- return this;
- };
-
- if (typeof selector === 'string') {
- match = quickExpr.exec(selector);
- if (match && match[2]) {
- elem = context.getElementById(match[2]);
- if (elem && elem.parentNode) this[0] = elem;
- return this;
- };
- };
-
- if (typeof selector === 'function') return $(document).ready(selector);
-
- this[0] = selector;
-
- return this;
- };
- $.fn.init.prototype = $.fn;
- /** 空函数 */
- $.noop = function () {};
- /** 检测window */
- $.isWindow = function (obj) {
- return obj && typeof obj === 'object' && 'setInterval' in obj;
- };
- /** 数组判定 */
- $.isArray = function (obj) {
- return Object.prototype.toString.call(obj) === '[object Array]';
- };
- /**
- * 搜索子元素
- * 注意:只支持nodeName或.className的形式,并且只返回第一个元素
- * @param {String}
- */
- $.fn.find = function (expr) {
- var value, elem = this[0],
- className = expr.split('.')[1];
- if (className) {
- if (document.getElementsByClassName) {
- value = elem.getElementsByClassName(className);
- } else {
- value = getElementsByClassName(className, elem);
- };
- } else {
- value = elem.getElementsByTagName(expr);
- };
-
- return $(value[0]);
- };
- function getElementsByClassName (className, node, tag) {
- node = node || document;
- tag = tag || '*';
- var i = 0,
- j = 0,
- classElements = [],
- els = node.getElementsByTagName(tag),
- elsLen = els.length,
- pattern = new RegExp("(^|\\s)" + className + "(\\s|$)");
-
- for (; i < elsLen; i ++) {
- if (pattern.test(els[i].className)) {
- classElements[j] = els[i];
- j ++;
- };
- };
- return classElements;
- };
- /**
- * 遍历
- * @param {Object}
- * @param {Function}
- */
- $.each = function (obj, callback) {
- var name, i = 0,
- length = obj.length,
- isObj = length === undefined;
- if (isObj) {
- for (name in obj) {
- if (callback.call(obj[name], name, obj[name]) === false) break;
- };
- } else {
- for (var value = obj[0];
- i < length && callback.call(value, i, value) !== false;
- value = obj[++i]) {};
- };
-
- return obj;
- };
- /**
- * 读写缓存
- * @param {HTMLElement} 元素
- * @param {String} 缓存名称
- * @param {Any} 数据
- * @return {Any} 如果无参数data则返回缓存数据
- */
- $.data = function (elem, name, data) {
- var cache = $.cache,
- id = uuid(elem);
-
- if (name === undefined) return cache[id];
- if (!cache[id]) cache[id] = {};
- if (data !== undefined) cache[id][name] = data;
-
- return cache[id][name];
- };
- /**
- * 删除缓存
- * @param {HTMLElement} 元素
- * @param {String} 缓存名称
- */
- $.removeData = function (elem, name) {
- var empty = true,
- expando = $.expando,
- cache = $.cache,
- id = uuid(elem),
- thisCache = id && cache[id];
- if (!thisCache) return;
- if (name) {
- delete thisCache[name];
- for (var n in thisCache) empty = false;
- if (empty) delete $.cache[id];
- } else {
- delete cache[id];
- if (elem.removeAttribute) {
- elem.removeAttribute(expando);
- } else {
- elem[expando] = null;
- };
- };
- };
- $.uuid = 0;
- $.cache = {};
- $.expando = '@cache' + + new Date
- // 标记元素唯一身份
- function uuid (elem) {
- var expando = $.expando,
- id = elem === window ? 0 : elem[expando];
- if (id === undefined) elem[expando] = id = ++ $.uuid;
- return id;
- };
- /**
- * 事件机制
- * @namespace
- * @requires [$.data, $.removeData]
- */
- $.event = {
-
- /**
- * 添加事件
- * @param {HTMLElement} 元素
- * @param {String} 事件类型
- * @param {Function} 要添加的函数
- */
- add: function (elem, type, callback) {
- var cache, listeners,
- that = $.event,
- data = $.data(elem, '@events') || $.data(elem, '@events', {});
-
- cache = data[type] = data[type] || {};
- listeners = cache.listeners = cache.listeners || [];
- listeners.push(callback);
-
- if (!cache.handler) {
- cache.elem = elem;
- cache.handler = that.handler(cache);
-
- elem.addEventListener
- ? elem.addEventListener(type, cache.handler, false)
- : elem.attachEvent('on' + type, cache.handler);
- };
- },
-
- /**
- * 卸载事件
- * @param {HTMLElement} 元素
- * @param {String} 事件类型
- * @param {Function} 要卸载的函数
- */
- remove: function (elem, type, callback) {
- var i, cache, listeners,
- that = $.event,
- empty = true,
- data = $.data(elem, '@events');
-
- if (!data) return;
- if (!type) {
- for (i in data) that.remove(elem, i);
- return;
- };
-
- cache = data[type];
- if (!cache) return;
-
- listeners = cache.listeners;
- if (callback) {
- for (i = 0; i < listeners.length; i ++) {
- listeners[i] === callback && listeners.splice(i--, 1);
- };
- } else {
- cache.listeners = [];
- };
-
- if (cache.listeners.length === 0) {
- elem.removeEventListener
- ? elem.removeEventListener(type, cache.handler, false)
- : elem.detachEvent('on' + type, cache.handler);
-
- delete data[type];
- cache = $.data(elem, '@events');
- for (var n in cache) empty = false;
- if (empty) $.removeData(elem, '@events');
- };
- },
-
- /** @inner 事件句柄 */
- handler: function (cache) {
- return function (event) {
- event = $.event.fix(event || window.event);
- for (var i = 0, list = cache.listeners, fn; fn = list[i++];) {
- if (fn.call(cache.elem, event) === false) {
- event.preventDefault();
- event.stopPropagation();
- };
- };
- };
- },
-
- /** @inner Event对象兼容处理 */
- fix: function (event) {
- if (event.target) return event;
-
- var event2 = {
- target: event.srcElement || document,
- preventDefault: function () {event.returnValue = false},
- stopPropagation: function () {event.cancelBubble = true}
- };
- // IE6/7/8 在原生window.event对象写入数据会导致内存无法回收,应当采用拷贝
- for (var i in event) event2[i] = event[i];
- return event2;
- }
-
- };
- /**
- * 清理元素集的事件与缓存
- * @requires [$.removeData, $.event]
- * @param {HTMLCollection} 元素集
- */
- $.cleanData = function (elems) {
- var i = 0, elem,
- len = elems.length,
- removeEvent = $.event.remove,
- removeData = $.removeData;
-
- for (; i < len; i ++) {
- elem = elems[i];
- removeEvent(elem);
- removeData(elem);
- };
- };
- // DOM就绪事件
- $.isReady = false;
- $.ready = function () {
- if (!$.isReady) {
- if (!document.body) return setTimeout($.ready, 13);
- $.isReady = true;
- if (readyList) {
- var fn, i = 0;
- while ((fn = readyList[i++])) {
- fn.call(document, $);
- };
- readyList = null;
- };
- };
- };
- $.bindReady = function () {
- if (readyBound) return;
- readyBound = true;
- if (document.readyState === 'complete') {
- return $.ready();
- };
- if (document.addEventListener) {
- document.addEventListener('DOMContentLoaded', DOMContentLoaded, false);
- window.addEventListener('load', $.ready, false);
- } else if (document.attachEvent) {
- document.attachEvent('onreadystatechange', DOMContentLoaded);
- window.attachEvent('onload', $.ready);
- var toplevel = false;
- try {
- toplevel = window.frameElement == null;
- } catch (e) {};
- if (document.documentElement.doScroll && toplevel) {
- doScrollCheck();
- };
- };
- };
- if (document.addEventListener) {
- DOMContentLoaded = function () {
- document.removeEventListener('DOMContentLoaded', DOMContentLoaded, false);
- $.ready();
- };
- } else if (document.attachEvent) {
- DOMContentLoaded = function () {
- if (document.readyState === 'complete') {
- document.detachEvent('onreadystatechange', DOMContentLoaded);
- $.ready();
- };
- };
- };
- function doScrollCheck () {
- if ($.isReady) return;
- try {
- document.documentElement.doScroll('left');
- } catch (e) {
- setTimeout(doScrollCheck, 1);
- return;
- };
- $.ready();
- };
- // 获取css
- $.css = 'defaultView' in document && 'getComputedStyle' in document.defaultView ?
- function (elem, name) {
- return document.defaultView.getComputedStyle(elem, false)[name];
- } :
- function (elem, name) {
- var ret = name === 'opacity' ? $.opacity.get(elem) : elem.currentStyle[name];
- return ret || '';
- };
- // 跨浏览器处理opacity
- $.opacity = {
- get: function (elem) {
- return isOpacity ?
- document.defaultView.getComputedStyle(elem, false).opacity :
- ropacity.test((elem.currentStyle
- ? elem.currentStyle.filter
- : elem.style.filter) || '')
- ? (parseFloat(RegExp.$1) / 100) + ''
- : 1;
- },
- set: function (elem, value) {
- if (isOpacity) return elem.style.opacity = value;
- var style = elem.style;
- style.zoom = 1;
- var opacity = 'alpha(opacity=' + value * 100 + ')',
- filter = style.filter || '';
- style.filter = ralpha.test(filter) ?
- filter.replace(ralpha, opacity) :
- style.filter + ' ' + opacity;
- }
- };
- /**
- * 获取滚动条位置 - [不支持写入]
- * $.fn.scrollLeft, $.fn.scrollTop
- * @example 获取文档垂直滚动条:$(document).scrollTop()
- * @return {Number} 返回滚动条位置
- */
- $.each(['Left', 'Top'], function (i, name) {
- var method = 'scroll' + name;
- $.fn[method] = function () {
- var elem = this[0], win;
- win = getWindow(elem);
- return win ?
- ('pageXOffset' in win) ?
- win[i ? 'pageYOffset' : 'pageXOffset'] :
- win.document.documentElement[method] || win.document.body[method] :
- elem[method];
- };
- });
- function getWindow (elem) {
- return $.isWindow(elem) ?
- elem :
- elem.nodeType === 9 ?
- elem.defaultView || elem.parentWindow :
- false;
- };
- /**
- * 获取窗口或文档尺寸 - [只支持window与document读取]
- * @example
- 获取文档宽度:$(document).width()
- 获取可视范围:$(window).width()
- * @return {Number}
- */
- $.each(['Height', 'Width'], function (i, name) {
- var type = name.toLowerCase();
- $.fn[type] = function (size) {
- var elem = this[0];
- if (!elem) {
- return size == null ? null : this;
- };
- return $.isWindow(elem) ?
- elem.document.documentElement['client' + name] || elem.document.body['client' + name] :
- (elem.nodeType === 9) ?
- Math.max(
- elem.documentElement['client' + name],
- elem.body['scroll' + name], elem.documentElement['scroll' + name],
- elem.body['offset' + name], elem.documentElement['offset' + name]
- ) : null;
- };
- });
- /**
- * 简单ajax支持
- * @example
- * $.ajax({
- * url: url,
- * success: callback,
- * cache: cache
- * });
- */
- $.ajax = function (config) {
- var ajax = window.XMLHttpRequest ?
- new XMLHttpRequest() :
- new ActiveXObject('Microsoft.XMLHTTP'),
- url = config.url;
-
- if (config.cache === false) {
- var ts = + new Date,
- ret = url.replace(/([?&])_=[^&]*/, "$1_=" + ts );
- url = ret + ((ret === url) ? (/\?/.test(url) ? "&" : "?") + "_=" + ts : "");
- };
-
- ajax.onreadystatechange = function() {
- if (ajax.readyState === 4 && ajax.status === 200) {
- config.success && config.success(ajax.responseText);
- ajax.onreadystatechange = $.noop;
- };
- };
- ajax.open('GET', url, 1);
- ajax.send(null);
- };
- /** 动画引擎 - [不支持链式列队操作] */
- $.fn.animate = function (prop, speed, easing, callback) {
-
- speed = speed || 400;
- if (typeof easing === 'function') callback = easing;
- easing = easing && $.easing[easing] ? easing : 'swing';
-
- var elem = this[0], overflow,
- fx, parts, start, end, unit,
- opt = {
- speed: speed,
- easing: easing,
- callback: function () {
- if (overflow != null) elem.style.overflow = '';
- callback && callback();
- }
- };
-
- opt.curAnim = {};
- $.each(prop, function (name, val) {
- opt.curAnim[name] = val;
- });
-
- $.each(prop, function (name, val) {
- fx = new $.fx(elem, opt, name);
- parts = rfxnum.exec(val);
- start = parseFloat(name === 'opacity'
- || (elem.style && elem.style[name] != null) ?
- $.css(elem, name) :
- elem[name]);
- end = parseFloat(parts[2]);
- unit = parts[3];
- if (name === 'height' || name === 'width') {
- end = Math.max(0, end);
- overflow = [elem.style.overflow,
- elem.style.overflowX, elem.style.overflowY];
- };
-
- fx.custom(start, end, unit);
- });
-
- if (overflow != null) elem.style.overflow = 'hidden';
- return this;
- };
- $.timers = [];
- $.fx = function (elem, options, prop) {
- this.elem = elem;
- this.options = options;
- this.prop = prop;
- };
- $.fx.prototype = {
- custom: function (from, to, unit) {
- var that = this;
- that.startTime = $.fx.now();
- that.start = from;
- that.end = to;
- that.unit = unit;
- that.now = that.start;
- that.state = that.pos = 0;
- function t() {
- return that.step();
- };
- t.elem = that.elem;
- t();
- $.timers.push(t);
- if (!$.timerId) $.timerId = setInterval($.fx.tick, 13);
- },
- step: function () {
- var that = this, t = $.fx.now(), done = true;
-
- if (t >= that.options.speed + that.startTime) {
- that.now = that.end;
- that.state = that.pos = 1;
- that.update();
-
- that.options.curAnim[that.prop] = true;
- for (var i in that.options.curAnim) {
- if (that.options.curAnim[i] !== true) {
- done = false;
- };
- };
-
- if (done) that.options.callback.call(that.elem);
-
- return false;
- } else {
- var n = t - that.startTime;
- that.state = n / that.options.speed;
- that.pos = $.easing[that.options.easing](that.state, n, 0, 1, that.options.speed);
- that.now = that.start + ((that.end - that.start) * that.pos);
- that.update();
- return true;
- };
- },
- update: function () {
- var that = this;
- if (that.prop === 'opacity') {
- $.opacity.set(that.elem, that.now);
- } else
- if (that.elem.style && that.elem.style[that.prop] != null) {
- that.elem.style[that.prop] = that.now + that.unit;
- } else {
- that.elem[that.prop] = that.now;
- };
- }
- };
- $.fx.now = function () {
- return + new Date;
- };
- $.easing = {
- linear: function (p, n, firstNum, diff) {
- return firstNum + diff * p;
- },
- swing: function (p, n, firstNum, diff) {
- return ((-Math.cos(p * Math.PI) / 2) + 0.5) * diff + firstNum;
- }
- };
- $.fx.tick = function () {
- var timers = $.timers;
- for (var i = 0; i < timers.length; i++) {
- !timers[i]() && timers.splice(i--, 1);
- };
- !timers.length && $.fx.stop();
- };
- $.fx.stop = function () {
- clearInterval($.timerId);
- $.timerId = null;
- };
- $.fn.stop = function () {
- var timers = $.timers;
- for (var i = timers.length - 1; i >= 0; i--) {
- if (timers[i].elem === this[0]) timers.splice(i, 1);
- };
- return this;
- };
- //-------------end
- return $}(window));
- //------------------------------------------------
- // 对话框模块
- //------------------------------------------------
- ;(function ($, window, undefined) {
- $.noop = $.noop || function () {}; // jQuery 1.3.2
- var _box, _thisScript, _skin, _path,
- _count = 0,
- _$window = $(window),
- _$document = $(document),
- _$html = $('html'),
- _elem = document.documentElement,
- _isIE6 = window.VBArray && !window.XMLHttpRequest,
- _isMobile = 'createTouch' in document && !('onmousemove' in _elem)
- || /(iPhone|iPad|iPod)/i.test(navigator.userAgent),
- _expando = 'artDialog' + + new Date;
- var artDialog = function (config, ok, cancel) {
- config = config || {};
-
- if (typeof config === 'string' || config.nodeType === 1) {
- config = {content: config, fixed: !_isMobile};
- };
-
- var api,
- defaults = artDialog.defaults,
- elem = config.follow = this.nodeType === 1 && this || config.follow;
-
- // 合并默认配置
- for (var i in defaults) {
- if (config[i] === undefined) config[i] = defaults[i];
- };
-
- // 兼容v4.1.0之前的参数,未来版本将删除此
- $.each({ok:"yesFn",cancel:"noFn",close:"closeFn",init:"initFn",okVal:"yesText",cancelVal:"noText"},
- function(i,o){config[i]=config[i]!==undefined?config[i]:config[o]});
-
- // 返回跟随模式或重复定义的ID
- if (typeof elem === 'string') elem = $(elem)[0];
- config.id = elem && elem[_expando + 'follow'] || config.id || _expando + _count;
- api = artDialog.list[config.id];
- if (elem && api) return api.follow(elem).zIndex().focus();
- if (api) return api.zIndex().focus();
-
- // 目前主流移动设备对fixed支持不好
- if (_isMobile) config.fixed = false;
-
- // 按钮队列
- if (!$.isArray(config.button)) {
- config.button = config.button ? [config.button] : [];
- };
- if (ok !== undefined) config.ok = ok;
- if (cancel !== undefined) config.cancel = cancel;
- config.ok && config.button.push({
- name: config.okVal,
- callback: config.ok,
- focus: true
- });
- config.cancel && config.button.push({
- name: config.cancelVal,
- callback: config.cancel
- });
-
- // zIndex全局配置
- artDialog.defaults.zIndex = config.zIndex;
-
- _count ++;
-
- return artDialog.list[config.id] = _box ?
- _box._init(config) : new artDialog.fn._init(config);
- };
- artDialog.fn = artDialog.prototype = {
- version: '4.1.7',
-
- closed: true,
-
- _init: function (config) {
- var that = this, DOM,
- icon = config.icon,
- iconBg = icon && (_isIE6 ? {png: 'images/' + icon + '.png'}
- : {backgroundImage: 'url(\'' + 'images/' + icon + '.png\')'});
- var artIcon='';
- switch(config.artIcon)
- {
- case 'add':
- artIcon='<i class="art-icon icon-title-add"></i>';
- break;
- case 'edit':
- artIcon='<i class="art-icon icon-title-edit"></i>';
- break;
- case 'ask':
- artIcon='<i class="art-icon icon-title-ask"></i>';
- break;
- case 'error':
- artIcon='<i class="art-icon icon-title-error"></i>';
- break;
- }
- that.closed = false;
- that.config = config;
- that.DOM = DOM = that.DOM || that._getDOM();
-
- DOM.wrap.addClass(config.skin);
- DOM.close[config.cancel === false ? 'hide' : 'show']();
- DOM.icon[0].style.display = icon ? '' : 'none';
- DOM.iconBg.css(iconBg || {background: 'none'});
- DOM.se.css('cursor', config.resize ? 'se-resize' : 'auto');
- DOM.title.css('cursor', config.drag ? 'move' : 'auto');
- DOM.content.css('padding', config.padding);
-
- that[config.show ? 'show' : 'hide'](true)
- that.button(config.button)
- .title(artIcon+config.title)
- .content(config.content, true)
- .size(config.width, config.height)
- .time(config.time);
-
- config.follow
- ? that.follow(config.follow)
- : that.position(config.left, config.top);
-
- that.zIndex().focus();
- config.lock && that.lock();
-
- that._addEvent();
- that._ie6PngFix();
- _box = null;
- if(config.tips){
- $('#aui_dialog_title').hide();
- }
- config.init && config.init.call(that, window);
- return that;
- },
-
- /**
- * 设置内容
- * @param {String, HTMLElement} 内容 (可选)
- * @return {this, HTMLElement} 如果无参数则返回内容容器DOM对象
- */
- content: function (msg) {
- var prev, next, parent, display,
- that = this,
- DOM = that.DOM,
- wrap = DOM.wrap[0],
- width = wrap.offsetWidth,
- height = wrap.offsetHeight,
- left = parseInt(wrap.style.left),
- top = parseInt(wrap.style.top),
- cssWidth = wrap.style.width,
- $content = DOM.content,
- content = $content[0];
-
- that._elemBack && that._elemBack();
- wrap.style.width = 'auto';
-
- if (msg === undefined) return content;
- if (typeof msg === 'string') {
- $content.html(msg);
- } else if (msg && msg.nodeType === 1) {
-
- // 让传入的元素在对话框关闭后可以返回到原来的地方
- display = msg.style.display;
- prev = msg.previousSibling;
- next = msg.nextSibling;
- parent = msg.parentNode;
- that._elemBack = function () {
- if (prev && prev.parentNode) {
- prev.parentNode.insertBefore(msg, prev.nextSibling);
- } else if (next && next.parentNode) {
- next.parentNode.insertBefore(msg, next);
- } else if (parent) {
- parent.appendChild(msg);
- };
- msg.style.display = display;
- that._elemBack = null;
- };
-
- $content.html('');
- content.appendChild(msg);
- msg.style.display = 'block';
-
- };
-
- // 新增内容后调整位置
- if (!arguments[1]) {
- if (that.config.follow) {
- that.follow(that.config.follow);
- } else {
- width = wrap.offsetWidth - width;
- height = wrap.offsetHeight - height;
- left = left - width / 2;
- top = top - height / 2;
- wrap.style.left = Math.max(left, 0) + 'px';
- wrap.style.top = Math.max(top, 0) + 'px';
- };
- if (cssWidth && cssWidth !== 'auto') {
- wrap.style.width = wrap.offsetWidth + 'px';
- };
- that._autoPositionType();
- };
-
- that._ie6SelectFix();
- that._runScript(content);
-
- return that;
- },
-
- /**
- * 设置标题
- * @param {String, Boolean} 标题内容. 为false则隐藏标题栏
- * @return {this, HTMLElement} 如果无参数则返回内容器DOM对象
- */
- title: function (text) {
- var DOM = this.DOM,
- wrap = DOM.wrap,
- title = DOM.title,
- className = 'aui_state_noTitle';
-
- if (text === undefined) return title[0];
- if (text === false) {
- title.hide().html('');
- wrap.addClass(className);
- } else {
- title.show().html(text || '');
- wrap.removeClass(className);
- };
-
- return this;
- },
-
- /**
- * 位置(相对于可视区域)
- * @param {Number, String}
- * @param {Number, String}
- */
- position: function (left, top) {
- var that = this,
- config = that.config,
- wrap = that.DOM.wrap[0],
- isFixed = _isIE6 ? false : config.fixed,
- ie6Fixed = _isIE6 && that.config.fixed,
- docLeft = _$document.scrollLeft(),
- docTop = _$document.scrollTop(),
- dl = isFixed ? 0 : docLeft,
- dt = isFixed ? 0 : docTop,
- ww = _$window.width(),
- wh = _$window.height(),
- ow = wrap.offsetWidth,
- oh = wrap.offsetHeight,
- style = wrap.style;
-
- if (left || left === 0) {
- that._left = left.toString().indexOf('%') !== -1 ? left : null;
- left = that._toNumber(left, ww - ow);
-
- if (typeof left === 'number') {
- left = ie6Fixed ? (left += docLeft) : left + dl;
- style.left = Math.max(left, dl) + 'px';
- } else if (typeof left === 'string') {
- style.left = left;
- };
- };
-
- if (top || top === 0) {
- that._top = top.toString().indexOf('%') !== -1 ? top : null;
- top = that._toNumber(top, wh - oh);
-
- if (typeof top === 'number') {
- top = ie6Fixed ? (top += docTop) : top + dt;
- style.top = Math.max(top, dt) + 'px';
- } else if (typeof top === 'string') {
- style.top = top;
- };
- };
-
- if (left !== undefined && top !== undefined) {
- that._follow = null;
- that._autoPositionType();
- };
-
- return that;
- },
- /**
- * 尺寸
- * @param {Number, String} 宽度
- * @param {Number, String} 高度
- */
- size: function (width, height) {
- var maxWidth, maxHeight, scaleWidth, scaleHeight,
- that = this,
- config = that.config,
- DOM = that.DOM,
- wrap = DOM.wrap,
- main = DOM.main,
- wrapStyle = wrap[0].style,
- style = main[0].style;
-
- if (width) {
- that._width = width.toString().indexOf('%') !== -1 ? width : null;
- maxWidth = _$window.width() - wrap[0].offsetWidth + main[0].offsetWidth;
- scaleWidth = that._toNumber(width, maxWidth);
- width = scaleWidth;
-
- if (typeof width === 'number') {
- wrapStyle.width = 'auto';
- style.width = Math.max(that.config.minWidth, width) + 'px';
- wrapStyle.width = wrap[0].offsetWidth + 'px'; // 防止未定义宽度的表格遇到浏览器右边边界伸缩
- } else if (typeof width === 'string') {
- style.width = width;
- width === 'auto' && wrap.css('width', 'auto');
- };
- };
-
- if (height) {
- that._height = height.toString().indexOf('%') !== -1 ? height : null;
- maxHeight = _$window.height() - wrap[0].offsetHeight + main[0].offsetHeight;
- scaleHeight = that._toNumber(height, maxHeight);
- height = scaleHeight;
-
- if (typeof height === 'number') {
- style.height = Math.max(that.config.minHeight, height) + 'px';
- } else if (typeof height === 'string') {
- style.height = height;
- };
- };
-
- that._ie6SelectFix();
-
- return that;
- },
-
- /**
- * 跟随元素
- * @param {HTMLElement, String}
- */
- follow: function (elem) {
- var $elem, that = this, config = that.config;
-
- if (typeof elem === 'string' || elem && elem.nodeType === 1) {
- $elem = $(elem);
- elem = $elem[0];
- };
-
- // 隐藏元素不可用
- if (!elem || !elem.offsetWidth && !elem.offsetHeight) {
- return that.position(that._left, that._top);
- };
-
- var expando = _expando + 'follow',
- winWidth = _$window.width(),
- winHeight = _$window.height(),
- docLeft = _$document.scrollLeft(),
- docTop = _$document.scrollTop(),
- offset = $elem.offset(),
- width = elem.offsetWidth,
- height = elem.offsetHeight,
- isFixed = _isIE6 ? false : config.fixed,
- left = isFixed ? offset.left - docLeft : offset.left,
- top = isFixed ? offset.top - docTop : offset.top,
- wrap = that.DOM.wrap[0],
- style = wrap.style,
- wrapWidth = wrap.offsetWidth,
- wrapHeight = wrap.offsetHeight,
- setLeft = left - (wrapWidth - width) / 2,
- setTop = top + height,
- dl = isFixed ? 0 : docLeft,
- dt = isFixed ? 0 : docTop;
-
- setLeft = setLeft < dl ? left :
- (setLeft + wrapWidth > winWidth) && (left - wrapWidth > dl)
- ? left - wrapWidth + width
- : setLeft;
- setTop = (setTop + wrapHeight > winHeight + dt)
- && (top - wrapHeight > dt)
- ? top - wrapHeight
- : setTop;
-
- style.left = setLeft + 'px';
- style.top = setTop + 'px';
-
- that._follow && that._follow.removeAttribute(expando);
- that._follow = elem;
- elem[expando] = config.id;
- that._autoPositionType();
- return that;
- },
-
- /**
- * 自定义按钮
- * @example
- button({
- name: 'login',
- callback: function () {},
- disabled: false,
- focus: true
- }, .., ..)
- */
- button: function () {
- var that = this,
- ags = arguments,
- DOM = that.DOM,
- buttons = DOM.buttons,
- elem = buttons[0],
- strongButton = 'aui_state_highlight',
- listeners = that._listeners = that._listeners || {},
- list = $.isArray(ags[0]) ? ags[0] : [].slice.call(ags);
-
- if (ags[0] === undefined) return elem;
- $.each(list, function (i, val) {
- var name = val.name,
- isNewButton = !listeners[name],
- button = !isNewButton ?
- listeners[name].elem :
- document.createElement('button');
-
- if (!listeners[name]) listeners[name] = {};
- if (val.callback) listeners[name].callback = val.callback;
- if (val.className) button.className = val.className;
- if (val.focus) {
- that._focus && that._focus.removeClass(strongButton);
- that._focus = $(button).addClass(strongButton);
- that.focus();
- };
-
- // Internet Explorer 的默认类型是 "button",
- // 而其他浏览器中(包括 W3C 规范)的默认值是 "submit"
- // @see http://www.w3school.com.cn/tags/att_button_type.asp
- button.setAttribute('type', 'button');
-
- button[_expando + 'callback'] = name;
- button.disabled = !!val.disabled;
- if (isNewButton) {
- button.innerHTML = name;
- listeners[name].elem = button;
- elem.appendChild(button);
- };
- });
-
- buttons[0].style.display = list.length ? '' : 'none';
-
- that._ie6SelectFix();
- return that;
- },
-
- /** 显示对话框 */
- show: function () {
-
- this.DOM.wrap.show();
- !arguments[0] && this._lockMaskWrap && this._lockMaskWrap.show();
- return this;
- },
-
- /** 隐藏对话框 */
- hide: function () {
- this.DOM.wrap.hide();
- !arguments[0] && this._lockMaskWrap && this._lockMaskWrap.hide();
- return this;
- },
-
- /** 关闭对话框 */
- close: function () {
- if (this.closed) return this;
- var that = this,
- DOM = that.DOM,
- wrap = DOM.wrap,
- list = artDialog.list,
- fn = that.config.close,
- follow = that.config.follow;
-
- that.time();
- if (typeof fn === 'function' && fn.call(that, window) === false) {
- return that;
- };
-
- that.unlock();
-
- // 置空内容
- that._elemBack && that._elemBack();
- wrap[0].className = wrap[0].style.cssText = '';
- DOM.title.html('');
- DOM.content.html('');
- DOM.buttons.html('');
-
- if (artDialog.focus === that) artDialog.focus = null;
- if (follow) follow.removeAttribute(_expando + 'follow');
- delete list[that.config.id];
- that._removeEvent();
- that.hide(true)._setAbsolute();
-
- // 清空除this.DOM之外临时对象,恢复到初始状态,以便使用单例模式
- for (var i in that) {
- if (that.hasOwnProperty(i) && i !== 'DOM') delete that[i];
- };
-
- // 移除HTMLElement或重用
- //_box ? wrap.remove() : _box = that;
- wrap.remove();
- return that;
- },
-
- /**
- * 定时关闭
- * @param {Number} 单位为秒, 无参数则停止计时器
- */
- time: function (second) {
- var that = this,
- cancel = that.config.cancelVal,
- timer = that._timer;
-
- timer && clearTimeout(timer);
-
- if (second) {
- that._timer = setTimeout(function(){
- that._click(cancel);
- }, 1000 * second);
- };
-
- return that;
- },
-
- /** 设置焦点 */
- focus: function () {
- try {
- if (this.config.focus) {
- var elem = this._focus && this._focus[0] || this.DOM.close[0];
- elem && elem.focus();
- }
- } catch (e) {}; // IE对不可见元素设置焦点会报错
- return this;
- },
-
- /** 置顶对话框 */
- zIndex: function () {
- var that = this,
- DOM = that.DOM,
- wrap = DOM.wrap,
- top = artDialog.focus,
- index = artDialog.defaults.zIndex ++;
-
- // 设置叠加高度
- wrap.css('zIndex', index);
- that._lockMask && that._lockMask.css('zIndex', index - 1);
-
- // 设置最高层的样式
- top && top.DOM.wrap.removeClass('aui_state_focus');
- artDialog.focus = that;
- wrap.addClass('aui_state_focus');
-
- return that;
- },
-
- /** 设置屏锁 */
- lock: function () {
- if (this._lock) return this;
-
- var that = this,
- index = artDialog.defaults.zIndex - 1,
- wrap = that.DOM.wrap,
- config = that.config,
- docWidth = _$document.width(),
- docHeight = _$document.height(),
- lockMaskWrap = that._lockMaskWrap || $(document.body.appendChild(document.createElement('div'))),
- lockMask = that._lockMask || $(lockMaskWrap[0].appendChild(document.createElement('div'))),
- domTxt = '(document).documentElement',
- sizeCss = _isMobile ? 'width:' + docWidth + 'px;height:' + docHeight
- + 'px' : 'width:100%;height:100%',
- ie6Css = _isIE6 ?
- 'position:absolute;left:expression(' + domTxt + '.scrollLeft);top:expression('
- + domTxt + '.scrollTop);width:expression(' + domTxt
- + '.clientWidth);height:expression(' + domTxt + '.clientHeight)'
- : '';
-
- that.zIndex();
- wrap.addClass('aui_state_lock');
-
- lockMaskWrap[0].style.cssText = sizeCss + ';position:fixed;z-index:'
- + index + ';top:0;left:0;overflow:hidden;' + ie6Css;
- lockMask[0].style.cssText = 'height:100%;background:' + config.background
- + ';filter:alpha(opacity=0);opacity:0';
-
- // 让IE6锁屏遮罩能够盖住下拉控件
- if (_isIE6) lockMask.html(
- '<iframe src="about:blank" style="width:100%;height:100%;position:absolute;' +
- 'top:0;left:0;z-index:-1;filter:alpha(opacity=0)"></iframe>');
-
- lockMask.stop();
- lockMask.bind('click', function () {
- that._reset();
- }).bind('dblclick', function () {
- return false;
- //that._click(that.config.cancelVal);
- });
-
- if (config.duration === 0) {
- lockMask.css({opacity: config.opacity});
- } else {
- lockMask.animate({opacity: config.opacity}, config.duration);
- };
-
- that._lockMaskWrap = lockMaskWrap;
- that._lockMask = lockMask;
-
- that._lock = true;
- return that;
- },
-
- /** 解开屏锁 */
- unlock: function () {
- var that = this,
- lockMaskWrap = that._lockMaskWrap,
- lockMask = that._lockMask;
-
- if (!that._lock) return that;
- var style = lockMaskWrap[0].style;
- var un = function () {
- if (_isIE6) {
- style.removeExpression('width');
- style.removeExpression('height');
- style.removeExpression('left');
- style.removeExpression('top');
- };
- style.cssText = 'display:none';
-
- _box && lockMaskWrap.remove();
- };
-
- lockMask.stop().unbind();
- that.DOM.wrap.removeClass('aui_state_lock');
- if (!that.config.duration) {// 取消动画,快速关闭
- un();
- } else {
- lockMask.animate({opacity: 0}, that.config.duration, un);
- };
-
- that._lock = false;
- return that;
- },
-
- // 获取元素
- _getDOM: function () {
- var wrap = document.createElement('div'),
- body = document.body;
- wrap.style.cssText = 'position:absolute;left:0;top:0';
- wrap.innerHTML = artDialog._templates;
- body.insertBefore(wrap, body.firstChild);
-
- var name, i = 0,
- DOM = {wrap: $(wrap)},
- els = wrap.getElementsByTagName('*'),
- elsLen = els.length;
-
- for (; i < elsLen; i ++) {
- name = els[i].className.split('aui_')[1];
- if (name) DOM[name] = $(els[i]);
- };
-
- return DOM;
- },
-
- // px与%单位转换成数值 (百分比单位按照最大值换算)
- // 其他的单位返回原值
- _toNumber: function (thisValue, maxValue) {
- if (!thisValue && thisValue !== 0 || typeof thisValue === 'number') {
- return thisValue;
- };
-
- var last = thisValue.length - 1;
- if (thisValue.lastIndexOf('px') === last) {
- thisValue = parseInt(thisValue);
- } else if (thisValue.lastIndexOf('%') === last) {
- thisValue = parseInt(maxValue * thisValue.split('%')[0] / 100);
- };
-
- return thisValue;
- },
-
- // 让IE6 CSS支持PNG背景
- _ie6PngFix: _isIE6 ? function () {
- var i = 0, elem, png, pngPath, runtimeStyle,
- path = artDialog.defaults.path + '/skins/',
- list = this.DOM.wrap[0].getElementsByTagName('*');
-
- for (; i < list.length; i ++) {
- elem = list[i];
- png = elem.currentStyle['png'];
- if (png) {
- pngPath = path + png;
- runtimeStyle = elem.runtimeStyle;
- runtimeStyle.backgroundImage = 'none';
- runtimeStyle.filter = "progid:DXImageTransform.Microsoft." +
- "AlphaImageLoader(src='" + pngPath + "',sizingMethod='crop')";
- };
- };
- } : $.noop,
-
- // 强制覆盖IE6下拉控件
- _ie6SelectFix: _isIE6 ? function () {
- var $wrap = this.DOM.wrap,
- wrap = $wrap[0],
- expando = _expando + 'iframeMask',
- iframe = $wrap[expando],
- width = wrap.offsetWidth,
- height = wrap.offsetHeight;
- width = width + 'px';
- height = height + 'px';
- if (iframe) {
- iframe.style.width = width;
- iframe.style.height = height;
- } else {
- iframe = wrap.appendChild(document.createElement('iframe'));
- $wrap[expando] = iframe;
- iframe.src = 'about:blank';
- iframe.style.cssText = 'position:absolute;z-index:-1;left:0;top:0;'
- + 'filter:alpha(opacity=0);width:' + width + ';height:' + height;
- };
- } : $.noop,
-
- // 解析HTML片段中自定义类型脚本,其this指向artDialog内部
- // <script type="text/dialog">/* [code] */</script>
- _runScript: function (elem) {
- var fun, i = 0, n = 0,
- tags = elem.getElementsByTagName('script'),
- length = tags.length,
- script = [];
-
- for (; i < length; i ++) {
- if (tags[i].type === 'text/dialog') {
- script[n] = tags[i].innerHTML;
- n ++;
- };
- };
-
- if (script.length) {
- script = script.join('');
- fun = new Function(script);
- fun.call(this);
- };
- },
-
- // 自动切换定位类型
- _autoPositionType: function () {
- this[this.config.fixed ? '_setFixed' : '_setAbsolute']();/////////////
- },
-
-
- // 设置静止定位
- // IE6 Fixed @see: http://www.planeart.cn/?p=877
- _setFixed: (function () {
- _isIE6 && $(function () {
- var bg = 'backgroundAttachment';
- if (_$html.css(bg) !== 'fixed' && $('body').css(bg) !== 'fixed') {
- _$html.css({
- zoom: 1,// 避免偶尔出现body背景图片异常的情况
- backgroundImage: 'url(about:blank)',
- backgroundAttachment: 'fixed'
- });
- };
- });
-
- return function () {
- var $elem = this.DOM.wrap,
- style = $elem[0].style;
-
- if (_isIE6) {
- var left = parseInt($elem.css('left')),
- top = parseInt($elem.css('top')),
- sLeft = _$document.scrollLeft(),
- sTop = _$document.scrollTop(),
- txt = '(document.documentElement)';
-
- this._setAbsolute();
- style.setExpression('left', 'eval(' + txt + '.scrollLeft + '
- + (left - sLeft) + ') + "px"');
- style.setExpression('top', 'eval(' + txt + '.scrollTop + '
- + (top - sTop) + ') + "px"');
- } else {
- style.position = 'fixed';
- };
- };
- }()),
-
- // 设置绝对定位
- _setAbsolute: function () {
- var style = this.DOM.wrap[0].style;
-
- if (_isIE6) {
- style.removeExpression('left');
- style.removeExpression('top');
- };
- style.position = 'absolute';
- },
-
- // 按钮回调函数触发
- _click: function (name) {
- var that = this,
- fn = that._listeners[name] && that._listeners[name].callback;
- return typeof fn !== 'function' || fn.call(that, window) !== false ?
- that.close() : that;
- },
-
- // 重置位置与尺寸
- _reset: function (test) {
- var newSize,
- that = this,
- oldSize = that._winSize || _$window.width() * _$window.height(),
- elem = that._follow,
- width = that._width,
- height = that._height,
- left = that._left,
- top = that._top;
-
- if (test) {
- // IE6~7 window.onresize bug
- newSize = that._winSize = _$window.width() * _$window.height();
- if (oldSize === newSize) return;
- };
-
- if (width || height) that.size(width, height);
-
- if (elem) {
- that.follow(elem);
- } else if (left || top) {
- that.position(left, top);
- };
- },
-
- // 事件代理
- _addEvent: function () {
- var resizeTimer,
- that = this,
- config = that.config,
- isIE = 'CollectGarbage' in window,
- DOM = that.DOM;
-
- // 窗口调节事件
- that._winResize = function () {
- resizeTimer && clearTimeout(resizeTimer);
- resizeTimer = setTimeout(function () {
- that._reset(isIE);
- }, 40);
- };
- _$window.bind('resize', that._winResize);
-
- // 监听点击
- DOM.wrap
- .bind('click', function (event) {
- var target = event.target, callbackID;
-
- if (target.disabled) return false; // IE BUG
-
- if (target === DOM.close[0]) {
- that._click(config.cancelVal);
- return false;
- } else {
- callbackID = target[_expando + 'callback'];
- callbackID && that._click(callbackID);
- };
-
- that._ie6SelectFix();
- })
- .bind('mousedown', function () {
- that.zIndex();
- });
- },
-
- // 卸载事件代理
- _removeEvent: function () {
- var that = this,
- DOM = that.DOM;
-
- DOM.wrap.unbind();
- _$window.unbind('resize', that._winResize);
- }
-
- };
- artDialog.fn._init.prototype = artDialog.fn;
- $.fn.dialog = $.fn.artDialog = function () {
- var config = arguments;
- this[this.live ? 'live' : 'bind']('click', function () {
- artDialog.apply(this, config);
- return false;
- });
- return this;
- };
- /** 最顶层的对话框API */
- artDialog.focus = null;
- /** 获取某对话框API */
- artDialog.get = function (id) {
- return id === undefined
- ? artDialog.list
- : artDialog.list[id];
- };
- artDialog.list = {};
- // 全局快捷键
- _$document.bind('keydown', function (event) {
- var target = event.target,
- nodeName = target.nodeName,
- rinput = /^INPUT|TEXTAREA$/,
- api = artDialog.focus,
- keyCode = event.keyCode;
- if (!api || !api.config.esc || rinput.test(nodeName)) return;
-
- keyCode === 27 && api._click(api.config.cancelVal);
- });
- // 获取artDialog路径
- _path = window['_artDialog_path'] || (function (script, i, me) {
- for (i in script) {
- // 如果通过第三方脚本加载器加载本文件,请保证文件名含有"artDialog"字符
- if (script[i].src && script[i].src.indexOf('artDialog') !== -1) me = script[i];
- };
-
- _thisScript = me || script[script.length - 1];
- me = _thisScript.src.replace(/\\/g, '/');
- return me.lastIndexOf('/') < 0 ? '.' : me.substring(0, me.lastIndexOf('/'));
- }(document.getElementsByTagName('script')));
- // 无阻塞载入CSS (如"artDialog.js?skin=aero")
- _skin = _thisScript.src.split('skin=')[1];
- if (_skin) {
- var link = document.createElement('link');
- link.rel = 'stylesheet';
- link.href = _path + '/skins/' + _skin + '.css?' + artDialog.fn.version;
- _thisScript.parentNode.insertBefore(link, _thisScript);
- };
- // 触发浏览器预先缓存背景图片
- _$window.bind('load', function () {
- setTimeout(function () {
- if (_count) return;
- //artDialog({left: '-9999em',time: 0,fixed: false,lock: false,focus: false});
- }, 150);
- });
- // 开启IE6 CSS背景图片缓存
- try {
- document.execCommand('BackgroundImageCache', false, true);
- } catch (e) {};
- // 使用uglifyjs压缩能够预先处理"+"号合并字符串
- // uglifyjs: http://marijnhaverbeke.nl/uglifyjs
- artDialog._templates =
- '<div class="aui_outer">'
- + '<table class="aui_border">'
- + '<tbody>'
- + '<tr>'
- + '<td class="aui_nw"></td>'
- + '<td class="aui_n"></td>'
- + '<td class="aui_ne"></td>'
- + '</tr>'
- + '<tr>'
- + '<td class="aui_w"></td>'
- + '<td class="aui_c">'
- + '<div class="aui_inner">'
- + '<table class="aui_dialog">'
- + '<tbody>'
- + '<tr id="aui_dialog_title">'
- + '<td colspan="2" class="aui_header">'
- + '<div class="aui_titleBar">'
- + '<div class="aui_title"></div>'
- + '<a class="aui_close" href="javascript:/*artDialog*/;">'
- + '\xd7'
- + '</a>'
- + '</div>'
- + '</td>'
- + '</tr>'
- + '<tr>'
- + '<td class="aui_icon">'
- + '<div class="aui_iconBg"></div>'
- + '</td>'
- + '<td class="aui_main">'
- + '<div class="aui_content"></div>'
- + '</td>'
- + '</tr>'
- + '<tr>'
- + '<td colspan="2" class="aui_footer">'
- + '<div class="aui_buttons"></div>'
- + '</td>'
- + '</tr>'
- + '</tbody>'
- + '</table>'
- + '</div>'
- + '</td>'
- + '<td class="aui_e"></td>'
- + '</tr>'
- + '<tr>'
- + '<td class="aui_sw"></td>'
- + '<td class="aui_s"></td>'
- + '<td class="aui_se"></td>'
- + '</tr>'
- + '</tbody>'
- + '</table>'
- +'</div>';
- /**
- * 默认配置
- */
- artDialog.defaults = {
- // 消息内容
- content: '<div class="aui_loading"><span>loading..</span></div>',
- title: '\u6d88\u606f', // 标题. 默认'消息'
- button: null, // 自定义按钮
- ok: null, // 确定按钮回调函数
- cancel: null, // 取消按钮回调函数
- init: null, // 对话框初始化后执行的函数
- close: null, // 对话框关闭前执行的函数
- okVal: '\u786E\u5B9A', // 确定按钮文本. 默认'确定'
- cancelVal: '\u53D6\u6D88', // 取消按钮文本. 默认'取消'
- width: 'auto', // 内容宽度
- height: 'auto', // 内容高度
- minWidth: 96, // 最小宽度限制
- minHeight: 32, // 最小高度限制
- padding: '20px 25px', // 内容与边界填充距离
- skin: '', // 皮肤名(预留接口,尚未实现)
- icon: null, // 消息图标名称
- time: null, // 自动关闭时间
- esc: true, // 是否支持Esc键关闭
- focus: true, // 是否支持对话框按钮自动聚焦
- show: true, // 初始化后是否显示对话框
- follow: null, // 跟随某元素(即让对话框在元素附近弹出)
- path: _path, // artDialog路径
- lock: false, // 是否锁屏
- background: '#000', // 遮罩颜色
- opacity: .7, // 遮罩透明度
- duration: 300, // 遮罩透明度渐变动画速度
- fixed: false, // 是否静止定位
- left: '50%', // X轴坐标
- top: '38.2%', // Y轴坐标
- zIndex: 1987, // 对话框叠加高度值(重要:此值不能超过浏览器最大限制)
- resize: true, // 是否允许用户调节尺寸
- drag: true, // 是否允许用户拖动位置
- artIcon: '', //标题旁边的图标,
- tips: false
-
- };
- window.artDialog = $.dialog = $.artDialog = artDialog;
- }(this.art || this.jQuery && (this.art = jQuery), this));
- //------------------------------------------------
- // 对话框模块-拖拽支持(可选外置模块)
- //------------------------------------------------
- ;(function ($) {
- var _dragEvent, _use,
- _$window = $(window),
- _$document = $(document),
- _elem = document.documentElement,
- _isIE6 = !('minWidth' in _elem.style),
- _isLosecapture = 'onlosecapture' in _elem,
- _isSetCapture = 'setCapture' in _elem;
- // 拖拽事件
- artDialog.dragEvent = function () {
- var that = this,
- proxy = function (name) {
- var fn = that[name];
- that[name] = function () {
- return fn.apply(that, arguments);
- };
- };
-
- proxy('start');
- proxy('move');
- proxy('end');
- };
- artDialog.dragEvent.prototype = {
- // 开始拖拽
- onstart: $.noop,
- start: function (event) {
- _$document
- .bind('mousemove', this.move)
- .bind('mouseup', this.end);
-
- this._sClientX = event.clientX;
- this._sClientY = event.clientY;
- this.onstart(event.clientX, event.clientY);
- return false;
- },
-
- // 正在拖拽
- onmove: $.noop,
- move: function (event) {
- this._mClientX = event.clientX;
- this._mClientY = event.clientY;
- this.onmove(
- event.clientX - this._sClientX,
- event.clientY - this._sClientY
- );
-
- return false;
- },
-
- // 结束拖拽
- onend: $.noop,
- end: function (event) {
- _$document
- .unbind('mousemove', this.move)
- .unbind('mouseup', this.end);
-
- this.onend(event.clientX, event.clientY);
- return false;
- }
-
- };
- _use = function (event) {
- var limit, startWidth, startHeight, startLeft, startTop, isResize,
- api = artDialog.focus,
- //config = api.config,
- DOM = api.DOM,
- wrap = DOM.wrap,
- title = DOM.title,
- main = DOM.main;
- // 清除文本选择
- var clsSelect = 'getSelection' in window ? function () {
- window.getSelection().removeAllRanges();
- } : function () {
- try {
- document.selection.empty();
- } catch (e) {};
- };
-
- // 对话框准备拖动
- _dragEvent.onstart = function (x, y) {
- if (isResize) {
- startWidth = main[0].offsetWidth;
- startHeight = main[0].offsetHeight;
- } else {
- startLeft = wrap[0].offsetLeft;
- startTop = wrap[0].offsetTop;
- };
-
- _$document.bind('dblclick', _dragEvent.end);
- !_isIE6 && _isLosecapture ?
- title.bind('losecapture', _dragEvent.end) :
- _$window.bind('blur', _dragEvent.end);
- _isSetCapture && title[0].setCapture();
-
- wrap.addClass('aui_state_drag');
- api.focus();
- };
-
- // 对话框拖动进行中
- _dragEvent.onmove = function (x, y) {
- if (isResize) {
- var wrapStyle = wrap[0].style,
- style = main[0].style,
- width = x + startWidth,
- height = y + startHeight;
-
- wrapStyle.width = 'auto';
- style.width = Math.max(0, width) + 'px';
- wrapStyle.width = wrap[0].offsetWidth + 'px';
-
- style.height = Math.max(0, height) + 'px';
-
- } else {
- var style = wrap[0].style,
- left = Math.max(limit.minX, Math.min(limit.maxX, x + startLeft)),
- top = Math.max(limit.minY, Math.min(limit.maxY, y + startTop));
- style.left = left + 'px';
- style.top = top + 'px';
- };
-
- clsSelect();
- api._ie6SelectFix();
- };
-
- // 对话框拖动结束
- _dragEvent.onend = function (x, y) {
- _$document.unbind('dblclick', _dragEvent.end);
- !_isIE6 && _isLosecapture ?
- title.unbind('losecapture', _dragEvent.end) :
- _$window.unbind('blur', _dragEvent.end);
- _isSetCapture && title[0].releaseCapture();
-
- _isIE6 && !api.closed && api._autoPositionType();
-
- wrap.removeClass('aui_state_drag');
- };
-
- isResize = event.target === DOM.se[0] ? true : false;
- limit = (function () {
- var maxX, maxY,
- wrap = api.DOM.wrap[0],
- fixed = wrap.style.position === 'fixed',
- ow = wrap.offsetWidth,
- oh = wrap.offsetHeight,
- ww = _$window.width(),
- wh = _$window.height(),
- dl = fixed ? 0 : _$document.scrollLeft(),
- dt = fixed ? 0 : _$document.scrollTop(),
-
- // 坐标最大值限制
- maxX = ww - ow + dl;
- maxY = wh - oh + dt;
-
- return {
- minX: dl,
- minY: dt,
- maxX: maxX,
- maxY: maxY
- };
- })();
-
- _dragEvent.start(event);
- };
- // 代理 mousedown 事件触发对话框拖动
- _$document.bind('mousedown', function (event) {
- var api = artDialog.focus;
- if (!api) return;
- var target = event.target,
- config = api.config,
- DOM = api.DOM;
-
- if (config.drag !== false && target === DOM.title[0]
- || config.resize !== false && target === DOM.se[0]) {
- _dragEvent = _dragEvent || new artDialog.dragEvent();
- _use(event);
- return false;// 防止firefox与chrome滚屏
- };
- });
- })(this.art || this.jQuery && (this.art = jQuery));
|