text: ﻿/**
   * jQuery ligerUI 1.3.3
   *
   * http://ligerui.com
   *
   * Author daomi 2015 [ gd_star@163.com ]
   *
   */
  (function ($) {
  
      $.fn.ligerPanel = function (options) {
          return $.ligerui.run.call(this, "ligerPanel", arguments);
      };
  
      $.ligerDefaults.Panel = {
          width: 400,
          height: 300,
          title: 'Panel',
          content: null,      //内容
          url: null,          //远程内容Url 
          urlParms: null,     //传参
          frameName: null,     //创建iframe时 作为iframe的name和id 
          data: null,          //可用于传递到iframe的数据 
          showClose: false,    //是否显示关闭按钮
          showToggle: true,    //是否显示收缩按钮 
          showRefresh: false,    //是否显示刷新按钮
          icon: null,          //左侧按钮
          onClose: null,       //关闭前事件
          onClosed: null,      //关闭事件
          onLoaded: null,           //url模式 加载完事件
          onToggle: null        //收缩/展开事件
      };
  
      $.ligerDefaults.PanelString = {
          refreshMessage: '刷新',
          closeMessage: '关闭',
          expandMessage: '展开',
          collapseMessage: '收起'
      };
  
      $.ligerMethos.Panel = {};
  
      $.ligerui.controls.Panel = function (element, options) {
          $.ligerui.controls.Panel.base.constructor.call(this, element, options);
      };
      $.ligerui.controls.Panel.ligerExtend($.ligerui.core.UIComponent, {
          __getType: function () {
              return 'Panel';
          },
          __idPrev: function () {
              return 'Panel';
          },
          _extendMethods: function () {
              return $.ligerMethos.Panel;
          },
          _init: function () {
              var g = this, p = this.options;
              $.ligerui.controls.Panel.base._init.call(this);
              p.content = p.content || $(g.element).html();
          },
          _render: function () {
              var g = this, p = this.options;
              g.panel = $(g.element).addClass("l-panel").html("");
              g.panel.append('<div class="l-panel-header"><span></span><div class="icons"></div></div><div class="l-panel-content"></div>');
  
              g.set(p);
  
              g.panel.find(".l-panel-header").hover(function () {
                  $(this).addClass("l-panel-header-hover");
              }, function () {
                  $(this).removeClass("l-panel-header-hover");
              });
  
              g.panel.bind("click.panel", function (e) {
                  var obj = (e.target || e.srcElement), jobj = $(obj);
                  if (jobj.hasClass("l-panel-header-toggle")) {
  
  
                      var isShowed = !g.panel.find(".l-panel-header .l-panel-header-toggle:first").hasClass("l-panel-header-toggle-hide");
  
                      g.toggle();
                      g.trigger('toggle', [isShowed]);
  
  
                  } else if (jobj.hasClass("l-panel-header-close")) {
                      g.close();
                  } else if (jobj.hasClass("l-panel-header-refresh")) {
                      g.refresh();
                  }
              });
          },
          _setChildren: function (children) {
              var g = this, p = this.options;
              var tagNames = {
                  input: ["textbox", "combobox", "select"]
              };
              var PluginNameMatchs =
                  {
                      "grid": "ligerGrid",
                      "toolbar": "ligerToolBar",
                      "tree": "ligerTree",
                      "form": "ligerForm",
                      "menu": "ligerMenu",
                      "menubar": "ligerMenuBar",
                      "portal": "ligerPortal",
                      "combobox": "ligerComboBox",
                      "textbox": "ligerTextBox",
                      "spinner": "ligerSpinner",
                      "listbox": "ligerListBox",
                      "checkbox": "ligerCheckBox",
                      "radio": "ligerRadio",
                      "checkboxlist": "ligerCheckBoxList",
                      "radiolist": "ligerRadioList",
                      "popupedit": "ligerPopupEdit",
                      "button": "ligerButton",
                      "dateeditor": "ligerDateEditor",
                      "dialog": "ligerDialog",
                      "panel": "ligerPanel",
                      "layout": "ligerLayout",
                      "accordion": "ligerAccordion",
                      "tab": "ligerTab"
                  };
              if (!children || !children.length) return;
              for (var i = 0; i < children.length; i++) {
                  var child = children[i], type = child.type;
                  var tagName = tagNames[type] || "div";
                  var plugin = PluginNameMatchs[type];
                  if (!plugin) continue;
                  var element = document.createElement(tagName);
                  g.panel.find(".l-panel-content").append(element);
                  var childOp = $.extend({}, child);
                  childOp.type = null;
                  $(element)[plugin](childOp);
              }
          },
          collapse: function () {
              var g = this, p = this.options;
              var toggle = g.panel.find(".l-panel-header .l-panel-header-toggle:first");
              if (toggle.hasClass("l-panel-header-toggle-hide")) return;
              g.toggle();
          },
          expand: function () {
              var g = this, p = this.options;
              var toggle = g.panel.find(".l-panel-header .l-panel-header-toggle:first");
              if (!toggle.hasClass("l-panel-header-toggle-hide")) return;
              g.toggle();
          },
          toggle: function () {
              var g = this, p = this.options;
              var toggle = g.panel.find(".l-panel-header .l-panel-header-toggle:first");
              if (toggle.hasClass("l-panel-header-toggle-hide")) {
                  toggle.removeClass("l-panel-header-toggle-hide");
                  toggle.attr("title", p.collapseMessage);
              } else {
                  toggle.addClass("l-panel-header-toggle-hide");
                  toggle.attr("title", p.expandMessage);
              }
              g.panel.find(".l-panel-content:first").toggle();
          },
          refresh: function () {
              var g = this, p = this.options;
              g.set('url', p.url);
          },
          _setShowToggle: function (v) {
              var g = this, p = this.options;
              var header = g.panel.find(".l-panel-header:first");
              if (v) {
                  var toggle = $("<a class='l-panel-icon l-panel-header-toggle'></a>");
                  toggle.appendTo(header.find(".icons"));
                  toggle.attr("title", p.collapseMessage);
              } else {
                  header.find(".l-panel-header-toggle").remove();
              }
          },
          _setContent: function (v) {
              var g = this, p = this.options;
              var content = g.panel.find(".l-panel-content:first");
              if (v) {
                  content.html(v);
              }
          },
          _setUrl: function (url) {
              var g = this, p = this.options;
              var content = g.panel.find(".l-panel-content:first");
              if (url) {
                  var urlParms = $.isFunction(p.urlParms) ? p.urlParms.call(g) : p.urlParms;
                  if (urlParms) {
                      for (name in urlParms) {
                          url += url.indexOf('?') == -1 ? "?" : "&";
                          url += name + "=" + urlParms[name];
                      }
                  }
                  if (!g.jiframe) {
                      g.jiframe = $("<iframe frameborder='0'></iframe>");
                      var framename = p.frameName ? p.frameName : "ligerpanel" + new Date().getTime();
                      g.jiframe.attr("name", framename);
                      g.jiframe.attr("id", framename);
                      content.prepend(g.jiframe);
                      g.jiframe[0].panel = g;//增加窗口对panel对象的引用
  
                      g.frame = window.frames[g.jiframe.attr("name")];
                  }
                  setTimeout(function () {
                      if (content.find(".l-panel-loading:first").length == 0)
                          content.append("<div class='l-panel-loading' style='display:block;'></div>");
                      var iframeloading = $(".l-panel-loading:first", content);
  
                      /*
                       可以在子窗口这样使用：
                       var panel = frameElement.panel;
                       var panelData = dialog.get('data');//获取data参数
                       panel.set('title','新标题'); //设置标题
                       panel.close();//关闭panel
                       */
                      g.jiframe.attr("src", url).bind('load.panel', function () {
                          iframeloading.hide();
                          g.trigger('loaded');
                      });
                  }, 0);
              }
          },
          _setShowClose: function (v) {
              var g = this, p = this.options;
              var header = g.panel.find(".l-panel-header:first");
              if (v) {
                  var btn = $("<a class='l-panel-icon l-panel-header-close'></a>");
                  btn.appendTo(header.find(".icons"));
                  btn.attr("title", p.closeMessage);
              } else {
                  header.find(".l-panel-header-close").remove();
              }
          },
          _setShowRefresh: function (v) {
              var g = this, p = this.options;
              var header = g.panel.find(".l-panel-header:first");
              if (v) {
                  var btn = $("<a class='l-panel-icon l-panel-header-refresh'></a>");
                  btn.appendTo(header.find(".icons"));
                  btn.attr("title", p.refreshMessage);
              } else {
                  header.find(".l-panel-header-refresh").remove();
              }
          },
          close: function () {
              var g = this, p = this.options;
              if (g.trigger('close') == false) return;
              g.panel.remove();
              g.trigger('closed');
          },
          show: function () {
              this.panel.show();
          },
          _setIcon: function (url) {
              var g = this;
              if (!url) {
                  g.panel.removeClass("l-panel-hasicon");
                  g.panel.find('img').remove();
              } else {
                  g.panel.addClass("l-panel-hasicon");
                  g.panel.append('<img src="' + url + '" />');
              }
          },
          _setWidth: function (value) {
  
              if (typeof (value) == "string") {
                  if (value.indexOf('%') > -1) {
                      this.panel.width(value);
                  }
                  else {
                      this.panel.width(parseInt(value));
                  }
              } else {
                  this.panel.width(value);
              }
          },
          _setHeight: function (value) {
              var g = this, p = this.options;
              var header = g.panel.find(".l-panel-header:first");
              this.panel.find(".l-panel-content:first").height(value - header.height());
          },
          _setTitle: function (value) {
              this.panel.find(".l-panel-header span:first").text(value);
          }
      });
  
  
  })(jQuery);