UU跑腿标准版

ligerPanel.js 8.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  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. $.fn.ligerPanel = function (options)
  12. {
  13. return $.ligerui.run.call(this, "ligerPanel", arguments);
  14. };
  15. $.ligerDefaults.Panel = {
  16. width: 400,
  17. height : 300,
  18. title: 'Panel',
  19. content: null, //内容
  20. url: null, //远程内容Url
  21. frameName: null, //创建iframe时 作为iframe的name和id
  22. data: null, //可用于传递到iframe的数据
  23. showClose: false, //是否显示关闭按钮
  24. showToggle: true, //是否显示收缩按钮
  25. icon: null, //左侧按钮
  26. onClose:null, //关闭前事件
  27. onClosed:null, //关闭事件
  28. onLoaded:null //url模式 加载完事件
  29. };
  30. $.ligerMethos.Panel = {};
  31. $.ligerui.controls.Panel = function (element, options)
  32. {
  33. $.ligerui.controls.Panel.base.constructor.call(this, element, options);
  34. };
  35. $.ligerui.controls.Panel.ligerExtend($.ligerui.core.UIComponent, {
  36. __getType: function ()
  37. {
  38. return 'Panel';
  39. },
  40. __idPrev: function ()
  41. {
  42. return 'Panel';
  43. },
  44. _extendMethods: function ()
  45. {
  46. return $.ligerMethos.Panel;
  47. },
  48. _init: function ()
  49. {
  50. var g = this, p = this.options;
  51. $.ligerui.controls.Panel.base._init.call(this);
  52. p.content = p.content || $(g.element).html();
  53. },
  54. _render: function ()
  55. {
  56. var g = this, p = this.options;
  57. g.panel = $(g.element).addClass("l-panel").html("");
  58. g.panel.append('<div class="l-panel-header"><span></span><div class="icons"></div></div><div class="l-panel-content"></div>');
  59. g.set(p);
  60. g.panel.bind("click.panel", function (e)
  61. {
  62. var obj = (e.target || e.srcElement), jobj = $(obj);
  63. if (jobj.hasClass("l-panel-header-toggle"))
  64. {
  65. g.toggle();
  66. } else if (jobj.hasClass("l-panel-header-close"))
  67. {
  68. g.close();
  69. }
  70. });
  71. },
  72. _setChildren: function(children)
  73. {
  74. var g = this, p = this.options;
  75. var tagNames = {
  76. input : ["textbox", "combobox", "select"]
  77. };
  78. var PluginNameMatchs =
  79. {
  80. "grid" : "ligerGrid",
  81. "toolbar":"ligerToolBar",
  82. "tree":"ligerTree",
  83. "form":"ligerForm",
  84. "menu":"ligerMenu",
  85. "menubar":"ligerMenuBar",
  86. "portal":"ligerPortal",
  87. "combobox":"ligerComboBox",
  88. "textbox":"ligerTextBox",
  89. "spinner":"ligerSpinner",
  90. "listbox":"ligerListBox",
  91. "checkbox":"ligerCheckBox",
  92. "radio":"ligerRadio",
  93. "checkboxlist":"ligerCheckBoxList",
  94. "radiolist":"ligerRadioList",
  95. "popupedit":"ligerPopupEdit",
  96. "button":"ligerButton",
  97. "dateeditor":"ligerDateEditor",
  98. "dialog":"ligerDialog",
  99. "panel":"ligerPanel",
  100. "layout":"ligerLayout",
  101. "accordion":"ligerAccordion",
  102. "tab":"ligerTab"
  103. };
  104. if (!children || !children.length) return;
  105. for (var i = 0; i < children.length; i++)
  106. {
  107. var child = children[i], type = child.type;
  108. var tagName = tagNames[type] || "div";
  109. var plugin = PluginNameMatchs[type];
  110. if (!plugin) continue;
  111. var element = document.createElement(tagName);
  112. g.panel.find(".l-panel-content").append(element);
  113. var childOp = $.extend({},child);
  114. childOp.type = null;
  115. $(element)[plugin](childOp);
  116. }
  117. },
  118. collapse: function ()
  119. {
  120. var g = this, p = this.options;
  121. var toggle = g.panel.find(".l-panel-header .l-panel-header-toggle:first");
  122. if (toggle.hasClass("l-panel-header-toggle-hide")) return;
  123. g.toggle();
  124. },
  125. expand: function ()
  126. {
  127. var g = this, p = this.options;
  128. var toggle = g.panel.find(".l-panel-header .l-panel-header-toggle:first");
  129. if (!toggle.hasClass("l-panel-header-toggle-hide")) return;
  130. g.toggle();
  131. },
  132. toggle : function()
  133. {
  134. var g = this, p = this.options;
  135. var toggle = g.panel.find(".l-panel-header .l-panel-header-toggle:first");
  136. if (toggle.hasClass("l-panel-header-toggle-hide"))
  137. {
  138. toggle.removeClass("l-panel-header-toggle-hide");
  139. } else
  140. {
  141. toggle.addClass("l-panel-header-toggle-hide");
  142. }
  143. g.panel.find(".l-panel-content:first").toggle("normal");
  144. },
  145. _setShowToggle:function(v)
  146. {
  147. var g = this, p = this.options;
  148. var header = g.panel.find(".l-panel-header:first");
  149. if (v)
  150. {
  151. var toggle = $("<div class='l-panel-header-toggle'></div>");
  152. toggle.appendTo(header.find(".icons"));
  153. } else
  154. {
  155. header.find(".l-panel-header-toggle").remove();
  156. }
  157. },
  158. _setContent: function (v)
  159. {
  160. var g = this, p = this.options;
  161. var content = g.panel.find(".l-panel-content:first");
  162. if (v)
  163. {
  164. content.html(v);
  165. }
  166. },
  167. _setUrl: function (url)
  168. {
  169. var g = this, p = this.options;
  170. var content = g.panel.find(".l-panel-content:first");
  171. if (url)
  172. {
  173. g.jiframe = $("<iframe frameborder='0'></iframe>");
  174. var framename = p.frameName ? p.frameName : "ligerpanel" + new Date().getTime();
  175. g.jiframe.attr("name", framename);
  176. g.jiframe.attr("id", framename);
  177. content.prepend(g.jiframe);
  178. setTimeout(function ()
  179. {
  180. if (content.find(".l-panel-loading:first").length == 0)
  181. content.append("<div class='l-panel-loading' style='display:block;'></div>");
  182. var iframeloading = $(".l-panel-loading:first", content);
  183. g.jiframe[0].panel = g;//增加窗口对panel对象的引用
  184. /*
  185. 可以在子窗口这样使用:
  186. var panel = frameElement.panel;
  187. var panelData = dialog.get('data');//获取data参数
  188. panel.set('title','新标题'); //设置标题
  189. panel.close();//关闭dialog
  190. */
  191. g.jiframe.attr("src", p.url).bind('load.panel', function ()
  192. {
  193. iframeloading.hide();
  194. g.trigger('loaded');
  195. });
  196. g.frame = window.frames[g.jiframe.attr("name")];
  197. }, 0);
  198. }
  199. },
  200. _setShowClose: function (v)
  201. {
  202. var g = this, p = this.options;
  203. var header = g.panel.find(".l-panel-header:first");
  204. if (v)
  205. {
  206. var btn = $("<div class='l-panel-header-close'></div>");
  207. btn.appendTo(header.find(".icons"));
  208. } else
  209. {
  210. header.find(".l-panel-header-close").remove();
  211. }
  212. },
  213. close:function()
  214. {
  215. var g = this, p = this.options;
  216. if (g.trigger('close') == false) return;
  217. g.panel.remove();
  218. g.trigger('closed');
  219. },
  220. show: function ()
  221. {
  222. this.panel.show();
  223. },
  224. _setIcon : function(url)
  225. {
  226. var g = this;
  227. if (!url)
  228. {
  229. g.panel.removeClass("l-panel-hasicon");
  230. g.panel.find('img').remove();
  231. } else
  232. {
  233. g.panel.addClass("l-panel-hasicon");
  234. g.panel.append('<img src="' + url + '" />');
  235. }
  236. },
  237. _setWidth: function (value)
  238. {
  239. value && this.panel.width(value);
  240. },
  241. _setHeight: function (value)
  242. {
  243. var g = this, p = this.options;
  244. var header = g.panel.find(".l-panel-header:first");
  245. this.panel.find(".l-panel-content:first").height(value - header.height());
  246. },
  247. _setTitle: function (value)
  248. {
  249. this.panel.find(".l-panel-header span:first").text(value);
  250. }
  251. });
  252. })(jQuery);