UU跑腿标准版

ligerDialog.js 39KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133
  1. /**
  2. * jQuery ligerUI 1.2.4
  3. *
  4. * http://ligerui.com
  5. *
  6. * Author daomi 2014 [ gd_star@163.com ]
  7. *
  8. */
  9. (function ($)
  10. {
  11. var l = $.ligerui;
  12. //全局事件
  13. $(".l-dialog-btn").live('mouseover', function ()
  14. {
  15. $(this).addClass("l-dialog-btn-over");
  16. }).live('mouseout', function ()
  17. {
  18. $(this).removeClass("l-dialog-btn-over");
  19. });
  20. $(".l-dialog-tc .l-dialog-close").live('mouseover', function ()
  21. {
  22. $(this).addClass("l-dialog-close-over");
  23. }).live('mouseout', function ()
  24. {
  25. $(this).removeClass("l-dialog-close-over");
  26. });
  27. $.ligerDialog = function ()
  28. {
  29. return l.run.call(null, "ligerDialog", arguments, { isStatic: true });
  30. };
  31. //dialog 图片文件夹的路径 预加载
  32. $.ligerui.DialogImagePath = "../../lib/ligerUI/skins/Aqua/images/win/";
  33. function prevImage(paths)
  34. {
  35. for (var i in paths)
  36. {
  37. $('<img />').attr('src', l.DialogImagePath + paths[i]);
  38. }
  39. }
  40. //prevImage(['dialog.gif', 'dialog-winbtns.gif', 'dialog-bc.gif', 'dialog-tc.gif']);
  41. $.ligerDefaults.Dialog = {
  42. cls: null, //给dialog附加css class
  43. id: null, //给dialog附加id
  44. buttons: null, //按钮集合
  45. isDrag: true, //是否拖动
  46. width: 280, //宽度
  47. height: null, //高度,默认自适应
  48. content: '', //内容
  49. target: null, //目标对象,指定它将以appendTo()的方式载入
  50. url: null, //目标页url,默认以iframe的方式载入
  51. load: false, //是否以load()的方式加载目标页的内容
  52. type: 'none', //类型 warn、success、error、question
  53. left: null, //位置left
  54. top: null, //位置top
  55. modal: true, //是否模态对话框
  56. data: null, //传递数据容器
  57. name: null, //创建iframe时 作为iframe的name和id
  58. isResize: false, // 是否调整大小
  59. allowClose: true, //允许关闭
  60. opener: null,
  61. timeParmName: null, //是否给URL后面加上值为new Date().getTime()的参数,如果需要指定一个参数名即可
  62. closeWhenEnter: null, //回车时是否关闭dialog
  63. isHidden: true, //关闭对话框时是否只是隐藏,还是销毁对话框
  64. show: true, //初始化时是否马上显示
  65. title: '提示', //头部
  66. showMax: false, //是否显示最大化按钮
  67. showToggle: false, //是否显示收缩窗口按钮
  68. showMin: false, //是否显示最小化按钮
  69. slide: $.browser.msie ? false : true, //是否以动画的形式显示
  70. fixedType: null, //在固定的位置显示, 可以设置的值有n, e, s, w, ne, se, sw, nw
  71. showType: null, //显示类型,可以设置为slide(固定显示时有效)
  72. onLoaded: null,
  73. onExtend: null,
  74. onExtended: null,
  75. onCollapse: null,
  76. onCollapseed: null,
  77. onContentHeightChange: null,
  78. onClose: null,
  79. onClosed: null,
  80. onStopResize: null
  81. };
  82. $.ligerDefaults.DialogString = {
  83. titleMessage: '提示', //提示文本标题
  84. ok: '确定',
  85. yes: '是',
  86. no: '否',
  87. cancel: '取消',
  88. waittingMessage: '正在等待中,请稍候...'
  89. };
  90. $.ligerMethos.Dialog = $.ligerMethos.Dialog || {};
  91. l.controls.Dialog = function (options)
  92. {
  93. l.controls.Dialog.base.constructor.call(this, null, options);
  94. };
  95. l.controls.Dialog.ligerExtend(l.core.Win, {
  96. __getType: function ()
  97. {
  98. return 'Dialog';
  99. },
  100. __idPrev: function ()
  101. {
  102. return 'Dialog';
  103. },
  104. _extendMethods: function ()
  105. {
  106. return $.ligerMethos.Dialog;
  107. },
  108. _render: function ()
  109. {
  110. var g = this, p = this.options;
  111. var tmpId = "";
  112. g.set(p, true);
  113. var dialog = $('<div class="l-dialog"><table class="l-dialog-table" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="l-dialog-tl"></td><td class="l-dialog-tc"><div class="l-dialog-tc-inner"><div class="l-dialog-icon"></div><div class="l-dialog-title"></div><div class="l-dialog-winbtns"><div class="l-dialog-winbtn l-dialog-close"></div></div></div></td><td class="l-dialog-tr"></td></tr><tr><td class="l-dialog-cl"></td><td class="l-dialog-cc"><div class="l-dialog-body"><div class="l-dialog-image"></div> <div class="l-dialog-content"></div><div class="l-dialog-buttons"><div class="l-dialog-buttons-inner"></div></td><td class="l-dialog-cr"></td></tr><tr><td class="l-dialog-bl"></td><td class="l-dialog-bc"></td><td class="l-dialog-br"></td></tr></tbody></table></div>');
  114. $('body').append(dialog);
  115. g.dialog = dialog;
  116. g.element = dialog[0];
  117. g.dialog.body = $(".l-dialog-body:first", g.dialog);
  118. g.dialog.header = $(".l-dialog-tc-inner:first", g.dialog);
  119. g.dialog.winbtns = $(".l-dialog-winbtns:first", g.dialog.header);
  120. g.dialog.buttons = $(".l-dialog-buttons:first", g.dialog);
  121. g.dialog.content = $(".l-dialog-content:first", g.dialog);
  122. g.set(p, false);
  123. if (p.allowClose == false) $(".l-dialog-close", g.dialog).remove();
  124. if (p.target || p.url || p.type == "none")
  125. {
  126. p.type = null;
  127. g.dialog.addClass("l-dialog-win");
  128. }
  129. if (p.cls) g.dialog.addClass(p.cls);
  130. if (p.id) g.dialog.attr("id", p.id);
  131. //设置锁定屏幕、拖动支持 和设置图片
  132. g.mask();
  133. if (p.isDrag)
  134. g._applyDrag();
  135. if (p.isResize)
  136. g._applyResize();
  137. if (p.type)
  138. g._setImage();
  139. else
  140. {
  141. $(".l-dialog-image", g.dialog).remove();
  142. g.dialog.content.addClass("l-dialog-content-noimage");
  143. }
  144. if (!p.show)
  145. {
  146. g.unmask();
  147. g.dialog.hide();
  148. }
  149. //设置主体内容
  150. if (p.target)
  151. {
  152. g.dialog.content.prepend(p.target);
  153. $(p.target).show();
  154. }
  155. else if (p.url)
  156. {
  157. if (p.timeParmName)
  158. {
  159. p.url += p.url.indexOf('?') == -1 ? "?" : "&";
  160. p.url += p.timeParmName + "=" + new Date().getTime();
  161. }
  162. if (p.load)
  163. {
  164. g.dialog.body.load(p.url, function ()
  165. {
  166. g._saveStatus();
  167. g.trigger('loaded');
  168. });
  169. }
  170. else
  171. {
  172. g.jiframe = $("<iframe frameborder='0'></iframe>");
  173. var framename = p.name ? p.name : "ligerwindow" + new Date().getTime();
  174. g.jiframe.attr("name", framename);
  175. g.jiframe.attr("id", framename);
  176. g.dialog.content.prepend(g.jiframe);
  177. g.dialog.content.addClass("l-dialog-content-nopadding l-dialog-content-frame");
  178. setTimeout(function ()
  179. {
  180. if (g.dialog.body.find(".l-dialog-loading:first").length == 0)
  181. g.dialog.body.append("<div class='l-dialog-loading' style='display:block;'></div>");
  182. var iframeloading = $(".l-dialog-loading:first", g.dialog.body);
  183. g.jiframe[0].dialog = g;//增加窗口对dialog对象的引用
  184. /*
  185. 可以在子窗口这样使用:
  186. var dialog = frameElement.dialog;
  187. var dialogData = dialog.get('data');//获取data参数
  188. dialog.set('title','新标题'); //设置标题
  189. dialog.close();//关闭dialog
  190. */
  191. g.jiframe.attr("src", p.url).bind('load.dialog', function ()
  192. {
  193. iframeloading.hide();
  194. g.trigger('loaded');
  195. });
  196. g.frame = window.frames[g.jiframe.attr("name")];
  197. }, 0);
  198. // 为了解决ie下对含有iframe的div窗口销毁不正确,进而导致第二次打开时焦点不在当前图层的问题
  199. // 加入以下代码
  200. tmpId = 'jquery_ligerui_' + new Date().getTime();
  201. g.tmpInput = $("<input></input>");
  202. g.tmpInput.attr("id", tmpId);
  203. g.dialog.content.prepend(g.tmpInput);
  204. }
  205. }
  206. if (p.opener) g.dialog.opener = p.opener;
  207. //设置按钮
  208. if (p.buttons)
  209. {
  210. $(p.buttons).each(function (i, item)
  211. {
  212. var btn = $('<div class="l-dialog-btn"><div class="l-dialog-btn-l"></div><div class="l-dialog-btn-r"></div><div class="l-dialog-btn-inner"></div></div>');
  213. $(".l-dialog-btn-inner", btn).html(item.text);
  214. $(".l-dialog-buttons-inner", g.dialog.buttons).prepend(btn);
  215. item.width && btn.width(item.width);
  216. item.onclick && btn.click(function () { item.onclick(item, g, i) });
  217. item.cls && btn.addClass(item.cls);
  218. });
  219. } else
  220. {
  221. g.dialog.buttons.remove();
  222. }
  223. $(".l-dialog-buttons-inner", g.dialog.buttons).append("<div class='l-clear'></div>");
  224. $(".l-dialog-title", g.dialog)
  225. .bind("selectstart", function () { return false; });
  226. g.dialog.click(function ()
  227. {
  228. l.win.setFront(g);
  229. });
  230. //设置事件
  231. $(".l-dialog-tc .l-dialog-close", g.dialog).click(function ()
  232. {
  233. if (p.isHidden)
  234. g.hide();
  235. else
  236. g.close();
  237. });
  238. if (!p.fixedType)
  239. {
  240. if (p.width == 'auto')
  241. {
  242. setTimeout(function ()
  243. {
  244. resetPos()
  245. }, 100);
  246. } else
  247. {
  248. resetPos();
  249. }
  250. }
  251. function resetPos()
  252. {
  253. //位置初始化
  254. var left = 0;
  255. var top = 0;
  256. var width = p.width || g.dialog.width();
  257. if (p.slide == true) p.slide = 'fast';
  258. if (p.left != null) left = p.left;
  259. else p.left = left = 0.5 * ($(window).width() - width);
  260. if (p.top != null) top = p.top;
  261. else p.top = top = 0.5 * ($(window).height() - g.dialog.height()) + $(window).scrollTop() - 10;
  262. if (left < 0) p.left = left = 0;
  263. if (top < 0) p.top = top = 0;
  264. g.dialog.css({ left: left, top: top });
  265. }
  266. g.show();
  267. $('body').bind('keydown.dialog', function (e)
  268. {
  269. var key = e.which;
  270. if (key == 13)
  271. {
  272. g.enter();
  273. }
  274. else if (key == 27)
  275. {
  276. g.esc();
  277. }
  278. });
  279. g._updateBtnsWidth();
  280. g._saveStatus();
  281. g._onReisze();
  282. if (tmpId != "")
  283. {
  284. $("#" + tmpId).focus();
  285. $("#" + tmpId).remove();
  286. }
  287. },
  288. _borderX: 12,
  289. _borderY: 32,
  290. doMax: function (slide)
  291. {
  292. var g = this, p = this.options;
  293. var width = $(window).width(), height = $(window).height(), left = 0, top = 0;
  294. if (l.win.taskbar)
  295. {
  296. height -= l.win.taskbar.outerHeight();
  297. if (l.win.top) top += l.win.taskbar.outerHeight();
  298. }
  299. if (slide)
  300. {
  301. g.dialog.body.animate({ width: width - g._borderX }, p.slide);
  302. g.dialog.animate({ left: left, top: top }, p.slide);
  303. g.dialog.content.animate({ height: height - g._borderY - g.dialog.buttons.outerHeight() }, p.slide, function ()
  304. {
  305. g._onReisze();
  306. });
  307. }
  308. else
  309. {
  310. g.set({ width: width, height: height, left: left, top: top });
  311. g._onReisze();
  312. }
  313. },
  314. //最大化
  315. max: function ()
  316. {
  317. var g = this, p = this.options;
  318. if (g.winmax)
  319. {
  320. g.winmax.addClass("l-dialog-recover");
  321. g.doMax(p.slide);
  322. if (g.wintoggle)
  323. {
  324. if (g.wintoggle.hasClass("l-dialog-extend"))
  325. g.wintoggle.addClass("l-dialog-toggle-disabled l-dialog-extend-disabled");
  326. else
  327. g.wintoggle.addClass("l-dialog-toggle-disabled l-dialog-collapse-disabled");
  328. }
  329. if (g.resizable) g.resizable.set({ disabled: true });
  330. if (g.draggable) g.draggable.set({ disabled: true });
  331. g.maximum = true;
  332. $(window).bind('resize.dialogmax', function ()
  333. {
  334. g.doMax(false);
  335. });
  336. }
  337. },
  338. //恢复
  339. recover: function ()
  340. {
  341. var g = this, p = this.options;
  342. if (g.winmax)
  343. {
  344. g.winmax.removeClass("l-dialog-recover");
  345. if (p.slide)
  346. {
  347. g.dialog.body.animate({ width: g._width - g._borderX }, p.slide);
  348. g.dialog.animate({ left: g._left, top: g._top }, p.slide);
  349. g.dialog.content.animate({ height: g._height - g._borderY - g.dialog.buttons.outerHeight() }, p.slide, function ()
  350. {
  351. g._onReisze();
  352. });
  353. }
  354. else
  355. {
  356. g.set({ width: g._width, height: g._height, left: g._left, top: g._top });
  357. g._onReisze();
  358. }
  359. if (g.wintoggle)
  360. {
  361. g.wintoggle.removeClass("l-dialog-toggle-disabled l-dialog-extend-disabled l-dialog-collapse-disabled");
  362. }
  363. $(window).unbind('resize.dialogmax');
  364. }
  365. if (this.resizable) this.resizable.set({ disabled: false });
  366. if (g.draggable) g.draggable.set({ disabled: false });
  367. g.maximum = false;
  368. },
  369. //最小化
  370. min: function ()
  371. {
  372. var g = this, p = this.options;
  373. var task = l.win.getTask(this);
  374. if (p.slide)
  375. {
  376. g.dialog.body.animate({ width: 1 }, p.slide);
  377. task.y = task.offset().top + task.height();
  378. task.x = task.offset().left + task.width() / 2;
  379. g.dialog.animate({ left: task.x, top: task.y }, p.slide, function ()
  380. {
  381. g.dialog.hide();
  382. });
  383. }
  384. else
  385. {
  386. g.dialog.hide();
  387. }
  388. g.unmask();
  389. g.minimize = true;
  390. g.actived = false;
  391. },
  392. active: function ()
  393. {
  394. var g = this, p = this.options;
  395. if (g.minimize)
  396. {
  397. var width = g._width, height = g._height, left = g._left, top = g._top;
  398. if (g.maximum)
  399. {
  400. width = $(window).width();
  401. height = $(window).height();
  402. left = top = 0;
  403. if (l.win.taskbar)
  404. {
  405. height -= l.win.taskbar.outerHeight();
  406. if (l.win.top) top += l.win.taskbar.outerHeight();
  407. }
  408. }
  409. if (p.slide)
  410. {
  411. g.dialog.body.animate({ width: width - g._borderX }, p.slide);
  412. g.dialog.animate({ left: left, top: top }, p.slide);
  413. }
  414. else
  415. {
  416. g.set({ width: width, height: height, left: left, top: top });
  417. }
  418. }
  419. g.actived = true;
  420. g.minimize = false;
  421. l.win.setFront(g);
  422. g.show();
  423. },
  424. //展开 收缩
  425. toggle: function ()
  426. {
  427. var g = this, p = this.options;
  428. if (!g.wintoggle) return;
  429. if (g.wintoggle.hasClass("l-dialog-extend"))
  430. g.extend();
  431. else
  432. g.collapse();
  433. },
  434. //收缩
  435. collapse: function ()
  436. {
  437. var g = this, p = this.options;
  438. if (!g.wintoggle) return;
  439. if (p.slide)
  440. g.dialog.content.animate({ height: 1 }, p.slide);
  441. else
  442. g.dialog.content.height(1);
  443. if (this.resizable) this.resizable.set({ disabled: true });
  444. },
  445. //展开
  446. extend: function ()
  447. {
  448. var g = this, p = this.options;
  449. if (!g.wintoggle) return;
  450. var contentHeight = g._height - g._borderY - g.dialog.buttons.outerHeight();
  451. if (p.slide)
  452. g.dialog.content.animate({ height: contentHeight }, p.slide);
  453. else
  454. g.dialog.content.height(contentHeight);
  455. if (this.resizable) this.resizable.set({ disabled: false });
  456. },
  457. _updateBtnsWidth: function ()
  458. {
  459. var g = this;
  460. var btnscount = $(">div", g.dialog.winbtns).length;
  461. g.dialog.winbtns.width(22 * btnscount);
  462. },
  463. _setLeft: function (value)
  464. {
  465. if (!this.dialog) return;
  466. if (value != null)
  467. this.dialog.css({ left: value });
  468. },
  469. _setTop: function (value)
  470. {
  471. if (!this.dialog) return;
  472. if (value != null)
  473. this.dialog.css({ top: value });
  474. },
  475. _setWidth: function (value)
  476. {
  477. if (!this.dialog) return;
  478. if (value >= this._borderX)
  479. {
  480. this.dialog.body.width(value - this._borderX);
  481. }
  482. },
  483. _setHeight: function (value)
  484. {
  485. var g = this, p = this.options;
  486. if (!this.dialog) return;
  487. if (value == "auto")
  488. {
  489. g.dialog.content.height('auto');
  490. }else if (value >= this._borderY)
  491. {
  492. var height = value - this._borderY - g.dialog.buttons.outerHeight();
  493. if (g.trigger('ContentHeightChange', [height]) == false) return;
  494. g.dialog.content.height(height);
  495. g.trigger('ContentHeightChanged', [height]);
  496. }
  497. },
  498. _setShowMax: function (value)
  499. {
  500. var g = this, p = this.options;
  501. if (value)
  502. {
  503. if (!g.winmax)
  504. {
  505. g.winmax = $('<div class="l-dialog-winbtn l-dialog-max"></div>').appendTo(g.dialog.winbtns)
  506. .hover(function ()
  507. {
  508. if ($(this).hasClass("l-dialog-recover"))
  509. $(this).addClass("l-dialog-recover-over");
  510. else
  511. $(this).addClass("l-dialog-max-over");
  512. }, function ()
  513. {
  514. $(this).removeClass("l-dialog-max-over l-dialog-recover-over");
  515. }).click(function ()
  516. {
  517. if ($(this).hasClass("l-dialog-recover"))
  518. g.recover();
  519. else
  520. g.max();
  521. });
  522. }
  523. }
  524. else if (g.winmax)
  525. {
  526. g.winmax.remove();
  527. g.winmax = null;
  528. }
  529. g._updateBtnsWidth();
  530. },
  531. _setShowMin: function (value)
  532. {
  533. var g = this, p = this.options;
  534. if (value)
  535. {
  536. if (!g.winmin)
  537. {
  538. g.winmin = $('<div class="l-dialog-winbtn l-dialog-min"></div>').appendTo(g.dialog.winbtns)
  539. .hover(function ()
  540. {
  541. $(this).addClass("l-dialog-min-over");
  542. }, function ()
  543. {
  544. $(this).removeClass("l-dialog-min-over");
  545. }).click(function ()
  546. {
  547. g.min();
  548. });
  549. l.win.addTask(g);
  550. }
  551. }
  552. else if (g.winmin)
  553. {
  554. g.winmin.remove();
  555. g.winmin = null;
  556. }
  557. g._updateBtnsWidth();
  558. },
  559. _setShowToggle: function (value)
  560. {
  561. var g = this, p = this.options;
  562. if (value)
  563. {
  564. if (!g.wintoggle)
  565. {
  566. g.wintoggle = $('<div class="l-dialog-winbtn l-dialog-collapse"></div>').appendTo(g.dialog.winbtns)
  567. .hover(function ()
  568. {
  569. if ($(this).hasClass("l-dialog-toggle-disabled")) return;
  570. if ($(this).hasClass("l-dialog-extend"))
  571. $(this).addClass("l-dialog-extend-over");
  572. else
  573. $(this).addClass("l-dialog-collapse-over");
  574. }, function ()
  575. {
  576. $(this).removeClass("l-dialog-extend-over l-dialog-collapse-over");
  577. }).click(function ()
  578. {
  579. if ($(this).hasClass("l-dialog-toggle-disabled")) return;
  580. if (g.wintoggle.hasClass("l-dialog-extend"))
  581. {
  582. if (g.trigger('extend') == false) return;
  583. g.wintoggle.removeClass("l-dialog-extend");
  584. g.extend();
  585. g.trigger('extended');
  586. }
  587. else
  588. {
  589. if (g.trigger('collapse') == false) return;
  590. g.wintoggle.addClass("l-dialog-extend");
  591. g.collapse();
  592. g.trigger('collapseed')
  593. }
  594. });
  595. }
  596. }
  597. else if (g.wintoggle)
  598. {
  599. g.wintoggle.remove();
  600. g.wintoggle = null;
  601. }
  602. },
  603. //按下回车
  604. enter: function ()
  605. {
  606. var g = this, p = this.options;
  607. var isClose;
  608. if (p.closeWhenEnter != undefined)
  609. {
  610. isClose = p.closeWhenEnter;
  611. }
  612. else if (p.type == "warn" || p.type == "error" || p.type == "success" || p.type == "question")
  613. {
  614. isClose = true;
  615. }
  616. if (isClose)
  617. {
  618. g.close();
  619. }
  620. },
  621. esc: function ()
  622. {
  623. },
  624. _removeDialog: function ()
  625. {
  626. var g = this, p = this.options;
  627. if (p.showType && p.fixedType)
  628. {
  629. g.dialog.animate({ bottom: -1 * p.height }, function ()
  630. {
  631. remove();
  632. });
  633. }
  634. else
  635. {
  636. remove();
  637. }
  638. function remove()
  639. {
  640. var jframe = $('iframe', g.dialog);
  641. if (jframe.length)
  642. {
  643. var frame = jframe[0];
  644. frame.src = "about:blank";
  645. if (frame.contentWindow && frame.contentWindow.document)
  646. {
  647. frame.contentWindow.document.write('');
  648. }
  649. $.browser.msie && CollectGarbage();
  650. jframe.remove();
  651. }
  652. g.dialog.remove();
  653. }
  654. },
  655. close: function ()
  656. {
  657. var g = this, p = this.options;
  658. if (g.trigger('Close') == false) return;
  659. g.doClose();
  660. if (g.trigger('Closed') == false) return;
  661. },
  662. doClose: function ()
  663. {
  664. var g = this;
  665. l.win.removeTask(this);
  666. $.ligerui.remove(this);
  667. g.unmask();
  668. g._removeDialog();
  669. $('body').unbind('keydown.dialog');
  670. },
  671. _getVisible: function ()
  672. {
  673. return this.dialog.is(":visible");
  674. },
  675. _setUrl: function (url)
  676. {
  677. var g = this, p = this.options;
  678. p.url = url;
  679. if (p.load)
  680. {
  681. g.dialog.body.html("").load(p.url, function ()
  682. {
  683. g.trigger('loaded');
  684. });
  685. }
  686. else if (g.jiframe)
  687. {
  688. g.jiframe.attr("src", p.url);
  689. }
  690. },
  691. _setContent: function (content)
  692. {
  693. this.dialog.content.html(content);
  694. },
  695. _setTitle: function (value)
  696. {
  697. var g = this; var p = this.options;
  698. if (value)
  699. {
  700. $(".l-dialog-title", g.dialog).html(value);
  701. }
  702. },
  703. _hideDialog: function ()
  704. {
  705. var g = this, p = this.options;
  706. if (p.showType && p.fixedType)
  707. {
  708. g.dialog.animate({ bottom: -1 * p.height }, function ()
  709. {
  710. g.dialog.hide();
  711. });
  712. } else
  713. {
  714. g.dialog.hide();
  715. }
  716. },
  717. hidden: function ()
  718. {
  719. var g = this;
  720. l.win.removeTask(g);
  721. g.dialog.hide();
  722. g.unmask();
  723. },
  724. show: function ()
  725. {
  726. var g = this, p = this.options;
  727. g.mask();
  728. if (p.fixedType)
  729. {
  730. if (p.showType)
  731. {
  732. g.dialog.css({ bottom: -1 * p.height }).addClass("l-dialog-fixed");
  733. g.dialog.show().animate({ bottom: 0 });
  734. }
  735. else
  736. {
  737. g.dialog.show().css({ bottom: 0 });
  738. }
  739. }
  740. else
  741. {
  742. g.dialog.show();
  743. }
  744. //前端显示
  745. $.ligerui.win.setFront.ligerDefer($.ligerui.win, 100, [g]);
  746. },
  747. setUrl: function (url)
  748. {
  749. this._setUrl(url);
  750. },
  751. _saveStatus: function ()
  752. {
  753. var g = this;
  754. g._width = g.dialog.body.width();
  755. g._height = g.dialog.body.height();
  756. var top = 0;
  757. var left = 0;
  758. if (!isNaN(parseInt(g.dialog.css('top'))))
  759. top = parseInt(g.dialog.css('top'));
  760. if (!isNaN(parseInt(g.dialog.css('left'))))
  761. left = parseInt(g.dialog.css('left'));
  762. g._top = top;
  763. g._left = left;
  764. },
  765. _applyDrag: function ()
  766. {
  767. var g = this, p = this.options;
  768. if ($.fn.ligerDrag)
  769. {
  770. g.draggable = g.dialog.ligerDrag({
  771. handler: '.l-dialog-title', animate: false,
  772. onStartDrag: function ()
  773. {
  774. l.win.setFront(g);
  775. var mask = $("<div class='l-dragging-mask' style='display:block'></div>").height(g.dialog.height());
  776. g.dialog.append(mask);
  777. g.dialog.content.addClass('l-dialog-content-dragging');
  778. },
  779. onDrag: function (current, e)
  780. {
  781. var pageY = e.pageY || e.screenY;
  782. if (pageY < 0) return false;
  783. },
  784. onStopDrag: function ()
  785. {
  786. g.dialog.find("div.l-dragging-mask:first").remove();
  787. g.dialog.content.removeClass('l-dialog-content-dragging');
  788. if (p.target)
  789. {
  790. var triggers1 = l.find($.ligerui.controls.DateEditor);
  791. var triggers2 = l.find($.ligerui.controls.ComboBox);
  792. //更新所有下拉选择框的位置
  793. $($.merge(triggers1, triggers2)).each(function ()
  794. {
  795. if (this.updateSelectBoxPosition)
  796. this.updateSelectBoxPosition();
  797. });
  798. }
  799. g._saveStatus();
  800. }
  801. });
  802. }
  803. },
  804. _onReisze: function ()
  805. {
  806. var g = this, p = this.options;
  807. if (p.target)
  808. {
  809. var manager = $(p.target).liger();
  810. if (!manager) manager = $(p.target).find(":first").liger();
  811. if (!manager) return;
  812. var contentHeight = g.dialog.content.height();
  813. var contentWidth = g.dialog.content.width();
  814. manager.trigger('resize', [{ width: contentWidth, height: contentHeight }]);
  815. }
  816. },
  817. _applyResize: function ()
  818. {
  819. var g = this, p = this.options;
  820. if ($.fn.ligerResizable)
  821. {
  822. g.resizable = g.dialog.ligerResizable({
  823. onStopResize: function (current, e)
  824. {
  825. var top = 0;
  826. var left = 0;
  827. if (!isNaN(parseInt(g.dialog.css('top'))))
  828. top = parseInt(g.dialog.css('top'));
  829. if (!isNaN(parseInt(g.dialog.css('left'))))
  830. left = parseInt(g.dialog.css('left'));
  831. if (current.diffLeft)
  832. {
  833. g.set({ left: left + current.diffLeft });
  834. }
  835. if (current.diffTop)
  836. {
  837. g.set({ top: top + current.diffTop });
  838. }
  839. if (current.newWidth)
  840. {
  841. g.set({ width: current.newWidth });
  842. g.dialog.body.css({ width: current.newWidth - g._borderX });
  843. }
  844. if (current.newHeight)
  845. {
  846. g.set({ height: current.newHeight });
  847. }
  848. g._onReisze();
  849. g._saveStatus();
  850. g.trigger('stopResize');
  851. return false;
  852. }, animate: false
  853. });
  854. }
  855. },
  856. _setImage: function ()
  857. {
  858. var g = this, p = this.options;
  859. if (p.type)
  860. {
  861. if (p.type == 'success' || p.type == 'donne' || p.type == 'ok')
  862. {
  863. $(".l-dialog-image", g.dialog).addClass("l-dialog-image-donne").show();
  864. g.dialog.content.css({ paddingLeft: 64, paddingBottom: 30 });
  865. }
  866. else if (p.type == 'error')
  867. {
  868. $(".l-dialog-image", g.dialog).addClass("l-dialog-image-error").show();
  869. g.dialog.content.css({ paddingLeft: 64, paddingBottom: 30 });
  870. }
  871. else if (p.type == 'warn')
  872. {
  873. $(".l-dialog-image", g.dialog).addClass("l-dialog-image-warn").show();
  874. g.dialog.content.css({ paddingLeft: 64, paddingBottom: 30 });
  875. }
  876. else if (p.type == 'question')
  877. {
  878. $(".l-dialog-image", g.dialog).addClass("l-dialog-image-question").show();
  879. g.dialog.content.css({ paddingLeft: 64, paddingBottom: 40 });
  880. }
  881. }
  882. }
  883. });
  884. l.controls.Dialog.prototype.hide = l.controls.Dialog.prototype.hidden;
  885. $.ligerDialog.open = function (p)
  886. {
  887. return $.ligerDialog(p);
  888. };
  889. $.ligerDialog.close = function ()
  890. {
  891. var dialogs = l.find(l.controls.Dialog.prototype.__getType());
  892. for (var i in dialogs)
  893. {
  894. var d = dialogs[i];
  895. d.destroy.ligerDefer(d, 5);
  896. }
  897. l.win.unmask();
  898. };
  899. $.ligerDialog.show = function (p)
  900. {
  901. var dialogs = l.find(l.controls.Dialog.prototype.__getType());
  902. if (dialogs.length)
  903. {
  904. for (var i in dialogs)
  905. {
  906. dialogs[i].show();
  907. return;
  908. }
  909. }
  910. return $.ligerDialog(p);
  911. };
  912. $.ligerDialog.hide = function ()
  913. {
  914. var dialogs = l.find(l.controls.Dialog.prototype.__getType());
  915. for (var i in dialogs)
  916. {
  917. var d = dialogs[i];
  918. d.hide();
  919. }
  920. };
  921. $.ligerDialog.tip = function (options)
  922. {
  923. options = $.extend({
  924. showType: 'slide',
  925. width: 240,
  926. modal: false,
  927. height: 100
  928. }, options || {});
  929. $.extend(options, {
  930. fixedType: 'se',
  931. type: 'none',
  932. isDrag: false,
  933. isResize: false,
  934. showMax: false,
  935. showToggle: false,
  936. showMin: false
  937. });
  938. return $.ligerDialog.open(options);
  939. };
  940. $.ligerDialog.alert = function (content, title, type, callback)
  941. {
  942. content = content || "";
  943. if (typeof (title) == "function")
  944. {
  945. callback = title;
  946. type = null;
  947. }
  948. else if (typeof (type) == "function")
  949. {
  950. callback = type;
  951. }
  952. var btnclick = function (item, Dialog, index)
  953. {
  954. Dialog.close();
  955. if (callback)
  956. callback(item, Dialog, index);
  957. };
  958. p = {
  959. content: content,
  960. buttons: [{ text: $.ligerDefaults.DialogString.ok, onclick: btnclick }]
  961. };
  962. if (typeof (title) == "string" && title != "") p.title = title;
  963. if (typeof (type) == "string" && type != "") p.type = type;
  964. $.extend(p, {
  965. showMax: false,
  966. showToggle: false,
  967. showMin: false
  968. });
  969. return $.ligerDialog(p);
  970. };
  971. $.ligerDialog.confirm = function (content, title, callback)
  972. {
  973. if (typeof (title) == "function")
  974. {
  975. callback = title;
  976. type = null;
  977. }
  978. var btnclick = function (item, Dialog)
  979. {
  980. Dialog.close();
  981. if (callback)
  982. {
  983. callback(item.type == 'ok');
  984. }
  985. };
  986. p = {
  987. type: 'question',
  988. content: content,
  989. buttons: [{ text: $.ligerDefaults.DialogString.yes, onclick: btnclick, type: 'ok' }, { text: $.ligerDefaults.DialogString.no, onclick: btnclick, type: 'no' }]
  990. };
  991. if (typeof (title) == "string" && title != "") p.title = title;
  992. $.extend(p, {
  993. showMax: false,
  994. showToggle: false,
  995. showMin: false
  996. });
  997. return $.ligerDialog(p);
  998. };
  999. $.ligerDialog.warning = function (content, title, callback)
  1000. {
  1001. if (typeof (title) == "function")
  1002. {
  1003. callback = title;
  1004. type = null;
  1005. }
  1006. var btnclick = function (item, Dialog)
  1007. {
  1008. Dialog.close();
  1009. if (callback)
  1010. {
  1011. callback(item.type);
  1012. }
  1013. };
  1014. p = {
  1015. type: 'question',
  1016. content: content,
  1017. buttons: [{ text: $.ligerDefaults.DialogString.yes, onclick: btnclick, type: 'yes' }, { text: $.ligerDefaults.DialogString.no, onclick: btnclick, type: 'no' }, { text: $.ligerDefaults.DialogString.cancel, onclick: btnclick, type: 'cancel' }]
  1018. };
  1019. if (typeof (title) == "string" && title != "") p.title = title;
  1020. $.extend(p, {
  1021. showMax: false,
  1022. showToggle: false,
  1023. showMin: false
  1024. });
  1025. return $.ligerDialog(p);
  1026. };
  1027. $.ligerDialog.waitting = function (title)
  1028. {
  1029. title = title || $.ligerDefaults.Dialog.waittingMessage;
  1030. return $.ligerDialog.open({ cls: 'l-dialog-waittingdialog', type: 'none', content: '<div style="padding:4px">' + title + '</div>', allowClose: false });
  1031. };
  1032. $.ligerDialog.closeWaitting = function ()
  1033. {
  1034. var dialogs = l.find(l.controls.Dialog);
  1035. for (var i in dialogs)
  1036. {
  1037. var d = dialogs[i];
  1038. if (d.dialog.hasClass("l-dialog-waittingdialog"))
  1039. d.close();
  1040. }
  1041. };
  1042. $.ligerDialog.success = function (content, title, onBtnClick)
  1043. {
  1044. return $.ligerDialog.alert(content, title, 'success', onBtnClick);
  1045. };
  1046. $.ligerDialog.error = function (content, title, onBtnClick)
  1047. {
  1048. return $.ligerDialog.alert(content, title, 'error', onBtnClick);
  1049. };
  1050. $.ligerDialog.warn = function (content, title, onBtnClick)
  1051. {
  1052. return $.ligerDialog.alert(content, title, 'warn', onBtnClick);
  1053. };
  1054. $.ligerDialog.question = function (content, title)
  1055. {
  1056. return $.ligerDialog.alert(content, title, 'question');
  1057. };
  1058. $.ligerDialog.prompt = function (title, value, multi, callback)
  1059. {
  1060. var target = $('<input type="text" class="l-dialog-inputtext"/>');
  1061. if (typeof (multi) == "function")
  1062. {
  1063. callback = multi;
  1064. }
  1065. if (typeof (value) == "function")
  1066. {
  1067. callback = value;
  1068. }
  1069. else if (typeof (value) == "boolean")
  1070. {
  1071. multi = value;
  1072. }
  1073. if (typeof (multi) == "boolean" && multi)
  1074. {
  1075. target = $('<textarea class="l-dialog-textarea"></textarea>');
  1076. }
  1077. if (typeof (value) == "string" || typeof (value) == "int")
  1078. {
  1079. target.val(value);
  1080. }
  1081. var btnclick = function (item, Dialog, index)
  1082. {
  1083. Dialog.close();
  1084. if (callback)
  1085. {
  1086. callback(item.type == 'yes', target.val());
  1087. }
  1088. }
  1089. p = {
  1090. title: title,
  1091. target: target,
  1092. width: 320,
  1093. buttons: [{ text: $.ligerDefaults.DialogString.ok, onclick: btnclick, type: 'yes' }, { text: $.ligerDefaults.DialogString.cancel, onclick: btnclick, type: 'cancel' }]
  1094. };
  1095. return $.ligerDialog(p);
  1096. };
  1097. })(jQuery);