From 7844e017aa9064cf2c4558066ee393ff12cd7b15 Mon Sep 17 00:00:00 2001 From: kerry Date: Mon, 10 May 2021 11:06:38 +0800 Subject: [PATCH 001/148] =?UTF-8?q?REPORT-51244=09=E3=80=9010.0.17?= =?UTF-8?q?=E3=80=91=E5=A4=8D=E7=94=A8=E7=BB=84=E4=BB=B6=E6=8E=A5=E8=A7=A6?= =?UTF-8?q?=E7=82=B9=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/DesignerEnvManager.java | 19 +- .../mainframe/ComponentReuseNotifyUtil.java | 39 ++++ .../mainframe/DesignOperationEvent.java | 15 ++ .../mainframe/EastRegionContainerPane.java | 39 +++- .../reuse/ComponentReuseNotificationInfo.java | 69 ++++++ .../mainframe/toast/DesignerToastMsgUtil.java | 106 +++++++++ .../mainframe/toast/ToastMsgDialog.java | 154 +++++++++++++ .../form/designer/widget_apply_icon.png | Bin 0 -> 166 bytes .../com/fr/design/images/toast/reuse_icon.png | Bin 0 -> 377 bytes .../fr/design/images/toast/toast_prompt.png | Bin 0 -> 608 bytes .../fr/design/images/toast/toast_warning.png | Bin 0 -> 622 bytes .../ComponentReuseNotificationInfoTest.java | 46 ++++ .../treeview/ComponentTreeCellRenderer.java | 25 ++ .../design/mainframe/FormParaWidgetPane.java | 43 ++++ .../java/com/fr/design/mainframe/JForm.java | 7 + .../mainframe/ReuseTriggerPointManager.java | 214 ++++++++++++++++++ .../adaptve/config/ReuseNotifyInfo.java | 27 +++ .../adaptve/config/TriggerPointProvider.java | 20 ++ .../config/impl/CellStyleTriggerPoint.java | 28 +++ .../CellValueImageChangeTriggerPoint.java | 27 +++ .../ReuseTriggerPointManagerTest.java | 45 ++++ .../actions/utils/ReportActionUtils.java | 13 +- .../cell/settingpane/CellStylePane.java | 3 +- .../src/main/java/com/fr/grid/Grid.java | 3 + 24 files changed, 929 insertions(+), 13 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/ComponentReuseNotifyUtil.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/DesignOperationEvent.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/reuse/ComponentReuseNotificationInfo.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/toast/DesignerToastMsgUtil.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/toast/ToastMsgDialog.java create mode 100644 designer-base/src/main/resources/com/fr/design/images/form/designer/widget_apply_icon.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/toast/reuse_icon.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/toast/toast_prompt.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/toast/toast_warning.png create mode 100644 designer-base/src/test/java/com/fr/design/mainframe/reuse/ComponentReuseNotificationInfoTest.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/ReuseTriggerPointManager.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/adaptve/config/ReuseNotifyInfo.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/adaptve/config/TriggerPointProvider.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/adaptve/config/impl/CellStyleTriggerPoint.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/adaptve/config/impl/CellValueImageChangeTriggerPoint.java create mode 100644 designer-form/src/test/java/com/fr/design/mainframe/ReuseTriggerPointManagerTest.java diff --git a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java index b8951ea8ba..011f92140a 100644 --- a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java @@ -18,6 +18,7 @@ import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.fun.DesignerPortProvider; import com.fr.design.i18n.Toolkit; import com.fr.design.locale.impl.ProductImproveMark; +import com.fr.design.mainframe.reuse.ComponentReuseNotificationInfo; import com.fr.design.mainframe.vcs.VcsConfigManager; import com.fr.design.notification.SnapChatConfig; import com.fr.design.port.DesignerPortContext; @@ -196,6 +197,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { // 开启内嵌web页面的调试窗口 private boolean openDebug = false; + private ComponentReuseNotificationInfo notificationInfo = ComponentReuseNotificationInfo.getInstance(); + /** * DesignerEnvManager. */ @@ -1561,13 +1564,15 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { readRecentColor(reader); } else if ("OpenDebug".equals(name)) { readOpenDebug(reader); + } else if (name.equals(ComponentReuseNotificationInfo.XML_TAG)) { + readComponentReuseNotificationInfo(reader); } else if (name.equals(DesignerPushUpdateConfigManager.XML_TAG)) { readDesignerPushUpdateAttr(reader); } else if (name.equals(vcsConfigManager.XML_TAG)) { readVcsAttr(reader); } else if (DesignerPort.XML_TAG.equals(name)) { readDesignerPort(reader); - }else if (name.equals(SnapChatConfig.XML_TAG)) { + } else if (name.equals(SnapChatConfig.XML_TAG)) { readSnapChatConfig(reader); } else { readLayout(reader, name); @@ -1575,6 +1580,11 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { } } + private void readComponentReuseNotificationInfo(XMLableReader reader){ + reader.readXMLObject(this.notificationInfo); + + } + private void readSnapChatConfig(XMLableReader reader) { reader.readXMLObject(this.snapChatConfig = SnapChatConfig.getInstance()); } @@ -1795,9 +1805,16 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { writeVcsAttr(writer); writeDesignerPort(writer); writeSnapChatConfig(writer); + writeComponentReuseNotificationInfo(writer); writer.end(); } + private void writeComponentReuseNotificationInfo(XMLPrintWriter writer) { + if (this.notificationInfo != null) { + this.notificationInfo.writeXML(writer); + } + } + private void writeSnapChatConfig(XMLPrintWriter writer) { if (this.snapChatConfig != null) { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/ComponentReuseNotifyUtil.java b/designer-base/src/main/java/com/fr/design/mainframe/ComponentReuseNotifyUtil.java new file mode 100644 index 0000000000..8541ffa66e --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/ComponentReuseNotifyUtil.java @@ -0,0 +1,39 @@ +package com.fr.design.mainframe; + +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.reuse.ComponentReuseNotificationInfo; +import com.fr.design.mainframe.toast.DesignerToastMsgUtil; +import com.fr.design.notification.SnapChat; +import com.fr.design.notification.SnapChatFactory; +import com.fr.design.notification.SnapChatKey; + +/** + * Created by kerry on 5/8/21 + */ +public class ComponentReuseNotifyUtil { + private static final String COMPONENT_SNAP_CHAT_KEY = "com.fr.component.share-components"; + + private ComponentReuseNotifyUtil() { + + } + + public static void enterWidgetLib() { + EastRegionContainerPane.getInstance().switchTabTo(EastRegionContainerPane.KEY_WIDGET_LIB); + enterWidgetLibExtraAction(); + } + + public static void enterWidgetLibExtraAction() { + if (ComponentReuseNotificationInfo.getInstance().isClickedWidgetLib()) { + return; + } + SnapChat snapChat = SnapChatFactory.createSnapChat(false, new SnapChatKey() { + @Override + public String calc() { + return COMPONENT_SNAP_CHAT_KEY; + } + }); + if (snapChat.hasRead()) { + DesignerToastMsgUtil.toastPrompt(Toolkit.i18nText("Fine-Design_Component_Reuse_Merge_Prompt")); + } + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignOperationEvent.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignOperationEvent.java new file mode 100644 index 0000000000..5357cefbda --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignOperationEvent.java @@ -0,0 +1,15 @@ +package com.fr.design.mainframe; + +import com.fr.event.Event; +import com.fr.event.Null; + +/** + * Created by kerry on 4/28/21 + */ +public enum DesignOperationEvent implements Event { + + CELL_STYLE_MODIFY, + + CELL_IMAGE_VALUE_MODIFY + +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java index 3bf9848de2..346902a0d8 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java @@ -299,7 +299,12 @@ public class EastRegionContainerPane extends UIEastResizableContainer { // 组件库 PropertyItem widgetLib = new PropertyItem(KEY_WIDGET_LIB, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Widget_Library"), "widgetlib", new PropertyMode[]{PropertyMode.FORM}, - new PropertyMode[]{PropertyMode.FORM}); + new PropertyMode[]{PropertyMode.FORM}, new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + ComponentReuseNotifyUtil.enterWidgetLibExtraAction(); + } + }); // 权限编辑 PropertyItem authorityEdition = new PropertyItem(KEY_AUTHORITY_EDITION, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Permissions_Edition"), "authorityedit", new PropertyMode[]{PropertyMode.AUTHORITY_EDITION_DISABLED}, @@ -595,6 +600,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { if (propertyItem.isVisible() && propertyItem.isEnabled() && !propertyItem.isPoppedOut()) { propertyCard.show(rightPane, tabName); propertyItem.setTabButtonSelected(); + propertyItem.processSnapChat(); //从单元格菜单过来也要关闭弹出窗 hideCurrentPopupPane(); } @@ -713,19 +719,30 @@ public class EastRegionContainerPane extends UIEastResizableContainer { private String iconSuffix = ICON_SUFFIX_NORMAL; // normal, diabled, selected, 三者之一 private final Color selectedBtnBackground = new Color(0xF5F5F7); private Color originBtnBackground; + private ActionListener actionListener; public PropertyItem(String name, String title, String btnIconName, PropertyMode[] visibleModes, PropertyMode[] enableModes) { this(name, title, btnIconName, ICON_BASE_DIR, visibleModes, enableModes, null, null); } + public PropertyItem(String name, String title, String btnIconName, PropertyMode[] visibleModes, PropertyMode[] enableModes, ActionListener actionListener) { + this(name, title, btnIconName, ICON_BASE_DIR, visibleModes, enableModes, null, null, actionListener); + } + + public PropertyItem(String name, String title, String btnIconName, String iconBaseDir, PropertyMode[] visibleModes, PropertyMode[] enableModes, SnapChat snapChat, PromptWindow promptWindow) { + this(name, title, btnIconName, iconBaseDir, visibleModes, enableModes, snapChat, promptWindow, null); + } + + public PropertyItem(String name, String title, String btnIconName, String iconBaseDir, PropertyMode[] visibleModes, PropertyMode[] enableModes, SnapChat snapChat, PromptWindow promptWindow, ActionListener actionListener) { this.name = name; this.title = title; this.btnIconName = btnIconName; this.iconBaseDir = iconBaseDir; this.snapChat = snapChat; this.promptWindow = promptWindow; + this.actionListener = actionListener; initButton(); initPropertyPanel(); initModes(visibleModes, enableModes); @@ -956,17 +973,25 @@ public class EastRegionContainerPane extends UIEastResizableContainer { popupFixedPane(); } setTabButtonSelected(); - if (snapChat != null && !snapChat.hasRead()) { - snapChat.markRead(); - if (promptWindow != null) { - promptWindow.showWindow(); - } - } + processSnapChat(); } }); + if (actionListener != null) { + button.addActionListener(actionListener); + } button.setToolTipText(title); } + public void processSnapChat(){ + if (snapChat != null && !snapChat.hasRead()) { + snapChat.markRead(); + if (promptWindow != null) { + promptWindow.showWindow(); + } + } + } + + public UIButton getButton() { return button; } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/reuse/ComponentReuseNotificationInfo.java b/designer-base/src/main/java/com/fr/design/mainframe/reuse/ComponentReuseNotificationInfo.java new file mode 100644 index 0000000000..d819c18762 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/reuse/ComponentReuseNotificationInfo.java @@ -0,0 +1,69 @@ +package com.fr.design.mainframe.reuse; + +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLable; +import com.fr.stable.xml.XMLableReader; + +/** + * Created by kerry on 5/8/21 + */ +public class ComponentReuseNotificationInfo implements XMLable { + public static final String XML_TAG = "ComponentReuseNotificationInfo"; + + private static final ComponentReuseNotificationInfo INSTANCE = new ComponentReuseNotificationInfo(); + + public static ComponentReuseNotificationInfo getInstance() { + return INSTANCE; + } + + private long lastNotifyTime = 0; + + private int notifiedNumber = 0; + + private boolean clickedWidgetLib = false; + + public long getLastNotifyTime() { + return lastNotifyTime; + } + + public void setLastNotifyTime(long lastNotifyTime) { + this.lastNotifyTime = lastNotifyTime; + } + + public int getNotifiedNumber() { + return notifiedNumber; + } + + public void setNotifiedNumber(int notifiedNumber) { + this.notifiedNumber = notifiedNumber; + } + + public boolean isClickedWidgetLib() { + return clickedWidgetLib; + } + + public void setClickedWidgetLib(boolean clickedWidgetLib) { + this.clickedWidgetLib = clickedWidgetLib; + } + + @Override + public void readXML(XMLableReader reader) { + this.setLastNotifyTime(reader.getAttrAsLong("lastNotifyTime", 0L)); + this.setNotifiedNumber(reader.getAttrAsInt("notifiedNumber", 0)); + this.setClickedWidgetLib(reader.getAttrAsBoolean("clickedWidgetLib", false)); + } + + @Override + public void writeXML(XMLPrintWriter writer) { + writer.startTAG("ComponentReuseNotificationInfo"); + writer.attr("lastNotifyTime", this.lastNotifyTime) + .attr("notifiedNumber", this.notifiedNumber) + .attr("clickedWidgetLib", this.clickedWidgetLib); + writer.end(); + } + + @Override + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/toast/DesignerToastMsgUtil.java b/designer-base/src/main/java/com/fr/design/mainframe/toast/DesignerToastMsgUtil.java new file mode 100644 index 0000000000..e77cf8b864 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/toast/DesignerToastMsgUtil.java @@ -0,0 +1,106 @@ +package com.fr.design.mainframe.toast; + +import com.fr.base.BaseUtils; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.DesignerContext; +import com.fr.stable.Constants; + +import javax.swing.BorderFactory; +import javax.swing.Icon; +import javax.swing.JEditorPane; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.Font; + +/** + * Created by kerry on 5/6/21 + */ +public class DesignerToastMsgUtil { + private static final int MIN_WIDTH = 134; + private static final int MAX_WIDTH = 454; + private static final Icon PROMPT_ICON = BaseUtils.readIcon("/com/fr/design/images/toast/toast_prompt.png"); + private static final Icon WARNING_ICON = BaseUtils.readIcon("/com/fr/design/images/toast/toast_warning.png"); + + private DesignerToastMsgUtil() { + + } + + + public static void toastPrompt(JPanel contendPane) { + toastPane(PROMPT_ICON, contendPane); + } + + public static void toastWarning(JPanel contendPane) { + toastPane(WARNING_ICON, contendPane); + + } + + public static void toastPrompt(String promptInfo) { + toastPrompt(toastPane(promptInfo)); + } + + public static void toastWarning(String warningInfo) { + toastWarning(toastPane(warningInfo)); + } + + private static JPanel toastPane(String text) { + UILabel promptLabel = new UILabel("" + text + ""); + JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + int width = promptLabel.getPreferredSize().width; + if (width > MAX_WIDTH) { + Dimension dimension = calculatePreferSize(text, promptLabel.getFont(), width); + jPanel.setPreferredSize(dimension); + } + jPanel.add(promptLabel, BorderLayout.NORTH); + return jPanel; + } + + private static void toastPane(Icon icon, JPanel contendPane) { + JPanel pane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + UILabel uiLabel = new UILabel(icon); + uiLabel.setVerticalAlignment(SwingConstants.TOP); + uiLabel.setBorder(BorderFactory.createEmptyBorder(3, 0, 0, 0)); + pane.add(uiLabel, BorderLayout.WEST); + pane.add(contendPane, BorderLayout.CENTER); + pane.setBorder(BorderFactory.createEmptyBorder(8, 15, 8, 15)); + contendPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0)); + ToastMsgDialog dialog = new ToastMsgDialog(DesignerContext.getDesignerFrame(), pane); + dialog.setVisible(true); + } + + + private static Dimension calculatePreferSize(String text, Font font, int width) { + int limitWidth = Math.max(MIN_WIDTH, width); + limitWidth = Math.min(MAX_WIDTH, limitWidth); + return new Dimension(limitWidth, getHtmlHeight(text, limitWidth, font)); + } + + + private static int getHtmlHeight(String content, int width, Font font) { + StringBuffer limitDiv = new StringBuffer("
"); + return getHtmlContentDimension(content, limitDiv).height; + } + + + private static Dimension getHtmlContentDimension(String content, StringBuffer limitDiv) { + content = limitDiv.append(content).append("
").toString(); + JEditorPane editorPane = new JEditorPane(); + editorPane.setContentType("text/html"); + editorPane.setText(content); + return editorPane.getPreferredSize(); + } + + private static String getFontWrapStyle(Font font) { + double dpi96 = Constants.FR_PAINT_RESOLUTION; + double dpi72 = Constants.DEFAULT_FONT_PAINT_RESOLUTION; + return new StringBuilder() + .append(";font-size:").append(font.getSize() * dpi96 / dpi72) + .append("pt;font-family:").append(font.getFontName()) + .toString(); + } + +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/toast/ToastMsgDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/toast/ToastMsgDialog.java new file mode 100644 index 0000000000..e2cdaa35df --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/toast/ToastMsgDialog.java @@ -0,0 +1,154 @@ +package com.fr.design.mainframe.toast; + +import com.fr.concurrent.NamedThreadFactory; +import com.fr.design.dialog.UIDialog; +import com.fr.design.mainframe.DesignerContext; +import com.fr.module.ModuleContext; + +import javax.swing.JPanel; +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.Point; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +/** + * Created by kerry on 4/29/21 + */ +public class ToastMsgDialog extends UIDialog { + private static final int MIN_HEIGHT = 36; + private static final String TOAST_MSG_TIMER = "TOAST_MSG_TIMER"; + private ScheduledExecutorService TIMER; + private int hide_height = 0; + private JPanel contentPane; + + public ToastMsgDialog(Frame parent, JPanel panel) { + super(parent); + setFocusable(false); + setAutoRequestFocus(false); + setUndecorated(true); + contentPane = panel; + initComponent(parent); + } + + private void initComponent(Frame parent) { + this.getContentPane().setLayout(null); + this.getContentPane().add(contentPane); + Dimension dimension = calculatePreferSize(); + hide_height = dimension.height; + setSize(new Dimension(dimension.width, 0)); + contentPane.setSize(dimension); + setLocationRelativeTo(DesignerContext.getDesignerFrame().getContentFrame()); + int positionY = DesignerContext.getDesignerFrame().getContentFrame().getLocationOnScreen().y + 10; + setLocation((parent.getWidth() - dimension.width) / 2, positionY); + addMouseEvent(contentPane); + } + + + private Dimension calculatePreferSize() { + Dimension contentDimension = contentPane.getPreferredSize(); + int height = Math.max(MIN_HEIGHT, contentDimension.height); + return new Dimension(contentDimension.width, height); + } + + + public void display(JPanel outerJPanel) { + outerJPanel.setLocation(0, -hide_height); + ScheduledExecutorService TIP_TOOL_TIMER = createToastScheduleExecutorService(); + TIP_TOOL_TIMER.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + Point point = outerJPanel.getLocation(); + if (point.y >= 0) { + TIP_TOOL_TIMER.shutdown(); + disappear(outerJPanel); + } + int showDistance = 5 + point.y < 0 ? 5 : -point.y; + outerJPanel.setLocation(point.x, point.y + showDistance); + Dimension dimension = ToastMsgDialog.this.getSize(); + ToastMsgDialog.this.setSize(new Dimension(dimension.width, dimension.height + showDistance)); + System.out.println(ToastMsgDialog.this.getHeight()); + } + }, 0, 50, TimeUnit.MILLISECONDS); + + } + + private void disappear(JPanel outerJPanel) { + TIMER = createToastScheduleExecutorService(); + TIMER.schedule(new Runnable() { + @Override + public void run() { + ScheduledExecutorService TIP_TOOL_TIMER = createToastScheduleExecutorService(); + TIP_TOOL_TIMER.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + Point point = outerJPanel.getLocation(); + if (point.y <= -hide_height) { + TIP_TOOL_TIMER.shutdown(); + ToastMsgDialog.this.setVisible(false); + ToastMsgDialog.this.dispose(); + } + outerJPanel.setLocation(point.x, point.y - 5); + Dimension dimension = ToastMsgDialog.this.getSize(); + ToastMsgDialog.this.setSize(new Dimension(dimension.width, dimension.height - 5)); + } + }, 0,50, TimeUnit.MILLISECONDS); + + } + }, 5000, TimeUnit.MILLISECONDS); + } + + private ScheduledExecutorService createToastScheduleExecutorService() { + return ModuleContext.getExecutor().newSingleThreadScheduledExecutor(new NamedThreadFactory(TOAST_MSG_TIMER)); + } + + private void addMouseEvent(JPanel jPanel) { + jPanel.addMouseListener(new MouseListener() { + @Override + public void mouseClicked(MouseEvent e) { + + } + + @Override + public void mousePressed(MouseEvent e) { + + } + + @Override + public void mouseReleased(MouseEvent e) { + + } + + @Override + public void mouseEntered(MouseEvent e) { + TIMER.shutdownNow(); + } + + @Override + public void mouseExited(MouseEvent e) { + disappear(jPanel); + } + }); + } + + + @Override + public void checkValid() throws Exception { + } + + public void setVisible(boolean visible) { + super.setVisible(visible); + if (visible) { + display(contentPane); + } + } + + @Override + public void dispose() { + super.dispose(); + } + + +} diff --git a/designer-base/src/main/resources/com/fr/design/images/form/designer/widget_apply_icon.png b/designer-base/src/main/resources/com/fr/design/images/form/designer/widget_apply_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3817f4c47d890f7fd81705d42af5cd51ce272163 GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`xt=bLAr}63CmrN%FyLW6X`~ZS zZezEGUA7^!r|HQahLtbZ|8<%As#xmyw1dg(^jXgoL|N-H)V*xn@iM1j-v8IRXB3pD z9rIvXaa{h$+7+29tEG>YH@u~E}lgmiIDkxsF;)qfzu5)ed- zbomV`2CVE?8%3}UF=8Phq!c40BI1+H%ysXmwNnh-;hS^LJ%ry=I*bE0He^O#o`_H< zt*Yl6sVg_jRoaiYEpr9TB=ck%Sj}oYzQLZhcsE*4Rmdp~_>#d&p!re4W17V<1J{zF-4s@Oj!X=N`n9%#nG^BxSqE^3W%#INJXU5us#zn^_ ziI8_nQyHMT?4jLfe8fQ7Cj>JJ$4!H%WhD`mY_~F}adKIAYbf?x!)!YJt}y5qfgL5g;SalOgU{|f&G XuG5LyK_Z3z00000NkvXXu0mjf;OC;a literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/toast/toast_prompt.png b/designer-base/src/main/resources/com/fr/design/images/toast/toast_prompt.png new file mode 100644 index 0000000000000000000000000000000000000000..5662a88a41a31c9a573eb2d5bbb2c63c6064e9da GIT binary patch literal 608 zcmV-m0-ybfP)vN-Df(+oYoAS1anVqK?-P$kDu2q4=c%-!2(B=OA z{L*_UN4O4T0I&VbuP2z8ShUa;{r~sp14xXKiA4Zi?%%&Z*AAw0TYwDUcbxU(B?BWP zJG!FxHxCtp#01st`Y{6K|No!+(>TOI1_(ON`tcl_0dKGD%m!%`)^VST!vIN;0YdgO zzZ_v=V%0=f^yc#R9FUlZuICg?FZ{lKFrCK+Y=BMwvpQBD;e1jI`2FSW#3O}LO<*s` zc~(j)1=gQnWMt$;Hst&JCrdzlPC=O%lr;VS|L1$_8!aAfZ+{LBLrVM`%jor@y9Az_{{R2{^~t5;(@kcZ7#J9S zgD^ND!3+T93mNBpF?p}zR2D7)S0-jQ1(4={e}6sr^X85n8vgxb zxcled->rMDzMT@#diNz%GsrNo0W474m|x5@2^8XHnZdxw$cJn-!VUjFz5DtnLn7(S zdIkoDzc2$>85kItpUp8265(TA%)r11atR*r|KFQWzhk9R&aML)0&)Sz(qcvNP&4sM z=r+Ip_25`M!WZJ~d!BUKF?a>>bQbA(Y8ho?S z<-Y#-(<>Nvx(;Lj@AnlJCzzQSwa^tExbiUrB<7&QKLcIv@4x@oI3rG2fDGXOxylmc z6n1n)`!0XX1c^E6@=r&X`_I7elRfOXILH9OpQ|jNV>963l}|+=jrKZxeK-t|1Q{Uo zb-Be6R%S*`bVYyu{rdnCV_{+vK$rXd_y2Y7$P+eT176HCt`p*6%STsq_U`8fkeIPD zFPKIK@4oz+D3Nrw3G9W+PzlL~5QP(rjEuau=7B}~ z>K7odGw?GoFtDBP(eu}q>48Oq9$iTn=N{y^%yLJ6^`TmWb>6rUyF@PFK=RCVE7Hf;DiJ-07U2dh>4Z@%A^YNu)46ZGAV#G|N8y!!TT@2 z_jGT5GJEotSFd22VFqwOGZZLOfiN=^BWGz?Rt9At5dH(h0Ha35zmLC6$p8QV07*qo IM6N<$f|#-=7XSbN literal 0 HcmV?d00001 diff --git a/designer-base/src/test/java/com/fr/design/mainframe/reuse/ComponentReuseNotificationInfoTest.java b/designer-base/src/test/java/com/fr/design/mainframe/reuse/ComponentReuseNotificationInfoTest.java new file mode 100644 index 0000000000..c90e7a8b05 --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/mainframe/reuse/ComponentReuseNotificationInfoTest.java @@ -0,0 +1,46 @@ +package com.fr.design.mainframe.reuse; + +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLableReader; +import com.fr.third.javax.xml.stream.XMLStreamException; +import org.junit.Assert; +import org.junit.Test; + +import java.io.PrintWriter; +import java.io.StringReader; +import java.io.StringWriter; + +/** + * Created by kerry on 5/10/21 + */ +public class ComponentReuseNotificationInfoTest { + + @Test + public void testReadXML() { + try { + XMLableReader xmlReader = XMLableReader.createXMLableReader(new StringReader("\n")); + ComponentReuseNotificationInfo notificationInfo = ComponentReuseNotificationInfo.getInstance(); + notificationInfo.readXML(xmlReader); + xmlReader.close(); + Assert.assertEquals(2, notificationInfo.getNotifiedNumber()); + Assert.assertEquals(true, notificationInfo.isClickedWidgetLib()); + Assert.assertEquals(1620612153215L, notificationInfo.getLastNotifyTime()); + } catch (XMLStreamException e) { + Assert.fail(e.getMessage()); + } + } + + @Test + public void testWriteXML() { + StringWriter sw = new StringWriter(); + XMLPrintWriter writer = XMLPrintWriter.create(new PrintWriter(sw)); + ComponentReuseNotificationInfo notificationInfo = ComponentReuseNotificationInfo.getInstance(); + notificationInfo.setNotifiedNumber(1); + notificationInfo.writeXML(writer); + writer.flush(); + writer.close(); + Assert.assertEquals("\n" + + "\n", sw.toString()); + } + +} diff --git a/designer-form/src/main/java/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java b/designer-form/src/main/java/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java index 48938dceee..e4bfcfaf10 100644 --- a/designer-form/src/main/java/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java +++ b/designer-form/src/main/java/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java @@ -1,17 +1,24 @@ package com.fr.design.designer.treeview; +import com.fr.base.BaseUtils; +import com.fr.base.iofile.attr.ExtendSharableAttrMark; import com.fr.design.constants.UIConstants; import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XCreatorUtils; +import com.fr.form.ui.AbstractBorderStyleWidget; import com.fr.log.FineLoggerFactory; +import com.fr.stable.StringUtils; import javax.swing.BorderFactory; import javax.swing.Icon; import javax.swing.JTree; import javax.swing.tree.DefaultTreeCellRenderer; import java.awt.Component; +import java.awt.Graphics; public class ComponentTreeCellRenderer extends DefaultTreeCellRenderer { + private boolean needAddShareIcon = false; + private static final Icon SHARE_ICON = BaseUtils.readIcon("/com/fr/design/images/toast/icon_reuse.png"); public ComponentTreeCellRenderer() { } @@ -31,13 +38,31 @@ public class ComponentTreeCellRenderer extends DefaultTreeCellRenderer { } if (icon != null) { setIcon(icon); + this.needAddShareIcon = isShareWidget((XCreator) value); } + } this.setBorder(BorderFactory.createEmptyBorder(1, 0, 1, 0)); this.setBackgroundNonSelectionColor(UIConstants.TREE_BACKGROUND); return this; } + private boolean isShareWidget(XCreator xCreator) { + if (!xCreator.toData().acceptType(AbstractBorderStyleWidget.class)) { + return false; + } + ExtendSharableAttrMark attrMark = ((AbstractBorderStyleWidget) xCreator.toData()).getWidgetAttrMark(ExtendSharableAttrMark.XML_TAG); + return attrMark != null && StringUtils.isNotEmpty(attrMark.getShareId()); + + } + + public void paint(Graphics g) { + super.paint(g); + if (needAddShareIcon) { + SHARE_ICON.paintIcon(this, g, 10, 0); + } + } + @Override public Icon getClosedIcon() { return getIcon(); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormParaWidgetPane.java b/designer-form/src/main/java/com/fr/design/mainframe/FormParaWidgetPane.java index ddd78c13f6..b5722e9da9 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormParaWidgetPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormParaWidgetPane.java @@ -15,6 +15,7 @@ import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.imenu.UIPopupMenu; +import com.fr.design.i18n.Toolkit; import com.fr.design.module.DesignModuleFactory; import com.fr.design.utils.gui.LayoutUtils; import com.fr.form.ui.UserDefinedWidgetConfig; @@ -35,6 +36,8 @@ import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JSeparator; import javax.swing.SwingConstants; +import java.awt.Cursor; +import java.awt.event.MouseListener; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; @@ -233,8 +236,48 @@ public class FormParaWidgetPane extends JPanel { } add(createWidgetCombinationPane(widgetPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_ToolBar_Widget"))); add(createJSeparator()); + + add(createComponentReuseToolPane()); + add(createJSeparator()); } + private JPanel createComponentReuseToolPane() { + JPanel jPanel = new JPanel(new BorderLayout(17, 10)); + UILabel uiLabel = new UILabel(BaseUtils.readIcon("/com/fr/design/images/form/designer/widget_apply_icon.png")); + jPanel.addMouseListener(new MouseListener() { + @Override + public void mouseClicked(MouseEvent e) { + ComponentReuseNotifyUtil.enterWidgetLib(); + } + + @Override + public void mousePressed(MouseEvent e) { + jPanel.setBackground(Color.decode("#419BF9")); + } + + @Override + public void mouseReleased(MouseEvent e) { + jPanel.setBackground(null); + } + + @Override + public void mouseEntered(MouseEvent e) { + + } + + @Override + public void mouseExited(MouseEvent e) { + + } + }); + jPanel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + jPanel.add(uiLabel, BorderLayout.NORTH); + jPanel.add(new UILabel(Toolkit.i18nText("Fine-Design_Component_Reuse_Apply_Widget")), BorderLayout.CENTER); + jPanel.setToolTipText(Toolkit.i18nText("Fine-Design_Component_Reuse_Apply_Widget")); + return jPanel; + } + + private void loadPredefinedWidget() { predifinedwidgeList.clear(); if (designer != null) { diff --git a/designer-form/src/main/java/com/fr/design/mainframe/JForm.java b/designer-form/src/main/java/com/fr/design/mainframe/JForm.java index a851074be1..54db2ec1ab 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/JForm.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/JForm.java @@ -319,6 +319,13 @@ public class JForm extends JTemplate implements BaseJForm jt) { + ReuseTriggerPointManager.getInstance().registerJForm(JForm.this); + } }); return tabCenterPane; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/ReuseTriggerPointManager.java b/designer-form/src/main/java/com/fr/design/mainframe/ReuseTriggerPointManager.java new file mode 100644 index 0000000000..c4bdc8bf74 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/ReuseTriggerPointManager.java @@ -0,0 +1,214 @@ + + +package com.fr.design.mainframe; + +import com.fr.base.iofile.attr.ExtendSharableAttrMark; +import com.fr.design.DesignerEnvManager; +import com.fr.design.file.HistoryTemplateListCache; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.adaptve.config.TriggerPointProvider; + +import com.fr.design.mainframe.adaptve.config.impl.CellStyleTriggerPoint; +import com.fr.design.mainframe.adaptve.config.impl.CellValueImageChangeTriggerPoint; +import com.fr.design.mainframe.adaptve.config.ReuseNotifyInfo; +import com.fr.design.mainframe.reuse.ComponentReuseNotificationInfo; +import com.fr.design.mainframe.toast.DesignerToastMsgUtil; +import com.fr.event.Event; +import com.fr.event.EventDispatcher; +import com.fr.event.Listener; +import com.fr.event.Null; +import com.fr.form.main.Form; +import com.fr.form.main.WidgetGather; +import com.fr.form.ui.AbstractBorderStyleWidget; +import com.fr.form.ui.Widget; +import com.fr.stable.StringUtils; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Cursor; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +/** + * Created by kerry on 4/28/21 + */ +public class ReuseTriggerPointManager { + private static final long ONE_WEEK_TIME = 7 * 24 * 3600 * 1000L; + + private static class Holder { + private static final ReuseTriggerPointManager HOLDER = new ReuseTriggerPointManager(); + } + + public static ReuseTriggerPointManager getInstance() { + return Holder.HOLDER; + } + + private Map map = new HashMap<>(); + + private List listeners = new ArrayList<>(); + + private ReuseTriggerPointManager() { + if (!hasNotifiedTwice()) { + List list = getTriggerPoints(); + for (TriggerPointProvider triggerPoint : list) { + Listener listener = new Listener() { + @Override + public void on(Event event, Null o) { + triggerPoint.triggerAction(); + } + }; + EventDispatcher.listen(triggerPoint.triggerEvent(), listener); + listeners.add(listener); + } + + } + } + + private List getTriggerPoints() { + List list = new ArrayList<>(); + list.add(new CellStyleTriggerPoint()); + list.add(new CellValueImageChangeTriggerPoint()); + return list; + } + + + private boolean hasNotifiedTwice() { + return ComponentReuseNotificationInfo.getInstance().getNotifiedNumber() >= 2; + } + + + private void reCount() { + //重新计次数 + Iterator> iterator = map.entrySet().iterator(); + while (iterator.hasNext()) { + iterator.next().getValue().reset(); + } + } + + private void writeTriggerInfo2xml() { + int number = ComponentReuseNotificationInfo.getInstance().getNotifiedNumber() + 1; + ComponentReuseNotificationInfo.getInstance().setNotifiedNumber(number); + ComponentReuseNotificationInfo.getInstance().setLastNotifyTime(System.currentTimeMillis()); + DesignerEnvManager.getEnvManager().saveXMLFile(); + //如果已经提示过两次了 + if (hasNotifiedTwice()) { + for (Listener listener : listeners) { + EventDispatcher.stopListen(listener); + } + this.map.clear(); + } + } + + public boolean needTrigger() { + boolean result = true; + if (ComponentReuseNotificationInfo.getInstance().getLastNotifyTime() > 0L) { + result = System.currentTimeMillis() - ComponentReuseNotificationInfo.getInstance().getLastNotifyTime() > ONE_WEEK_TIME; + } + return !hasNotifiedTwice() && result; + } + + + public void registerJForm(JForm jForm) { + if (!hasNotifiedTwice()) { + this.map.put(jForm, new ReuseNotifyInfo()); + } + + } + + public void removeJForm(JForm jForm) { + if (!hasNotifiedTwice()) { + this.map.remove(jForm); + } + } + + + public ReuseNotifyInfo getReuseNotifyInfo() { + JTemplate currentJTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + if (!(currentJTemplate instanceof JForm && hasUseReuseComponent((JForm) currentJTemplate)) + && !ReuseTriggerPointManager.getInstance().needTrigger()) { + return null; + } + return map.get(currentJTemplate); + } + + public void reuseNotify(ReuseNotifyInfo notifyInfo) { + if (notifyInfo.matchCondition()) { + ReuseTriggerPointManager.getInstance().reCount(); + //弹出提示框 + JTemplate currentJTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + DesignerToastMsgUtil.toastPrompt(createReusePrompt((JForm) currentJTemplate)); + ReuseTriggerPointManager.getInstance().writeTriggerInfo2xml(); + } + } + + + private boolean hasUseReuseComponent(JForm jForm) { + Form form = jForm.getTarget(); + List extendSharableWidgetList = new ArrayList<>(); + Form.traversalWidget(form.getContainer(), new WidgetGather() { + @Override + public void dealWith(Widget widget) { + ExtendSharableAttrMark attrMark = ((AbstractBorderStyleWidget) widget).getWidgetAttrMark(ExtendSharableAttrMark.XML_TAG); + if (attrMark != null && StringUtils.isNotEmpty(attrMark.getShareId())) { + extendSharableWidgetList.add(widget); + } + } + + @Override + public boolean dealWithAllCards() { + return true; + } + }, AbstractBorderStyleWidget.class); + return extendSharableWidgetList.size() > 0; + } + + + private JPanel createReusePrompt(JForm jForm) { + JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + jPanel.add(new UILabel(Toolkit.i18nText("Fine-Design_Component_Reuse_Try_Prompt")), BorderLayout.WEST); + UILabel reuseLabel = new UILabel(Toolkit.i18nText("Fine-Design_Component_Reuse")); + reuseLabel.addMouseListener(new MouseListener() { + @Override + public void mouseClicked(MouseEvent e) { + jForm.tabChanged(0); + ComponentReuseNotifyUtil.enterWidgetLib(); + } + + @Override + public void mousePressed(MouseEvent e) { + + } + + @Override + public void mouseReleased(MouseEvent e) { + + } + + @Override + public void mouseEntered(MouseEvent e) { + + } + + @Override + public void mouseExited(MouseEvent e) { + + } + }); + reuseLabel.setBorder(BorderFactory.createEmptyBorder(0, 3, 0, 0)); + reuseLabel.setForeground(Color.BLUE); + reuseLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + jPanel.add(reuseLabel, BorderLayout.CENTER); + return jPanel; + } + + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/adaptve/config/ReuseNotifyInfo.java b/designer-form/src/main/java/com/fr/design/mainframe/adaptve/config/ReuseNotifyInfo.java new file mode 100644 index 0000000000..01dc7bbb80 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/adaptve/config/ReuseNotifyInfo.java @@ -0,0 +1,27 @@ +package com.fr.design.mainframe.adaptve.config; + +/** + * Created by kerry on 5/7/21 + */ +public class ReuseNotifyInfo { + private int cellStyleModifiedNumber = 0; + private int cellImageValueNumber = 0; + + public void addCellStyleModify() { + cellStyleModifiedNumber++; + } + + + public void addCellImageValueModify() { + cellImageValueNumber++; + } + + public boolean matchCondition() { + return cellStyleModifiedNumber >= 3 || cellImageValueNumber >= 1; + } + + public void reset() { + this.cellImageValueNumber = 0; + this.cellStyleModifiedNumber = 0; + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/adaptve/config/TriggerPointProvider.java b/designer-form/src/main/java/com/fr/design/mainframe/adaptve/config/TriggerPointProvider.java new file mode 100644 index 0000000000..5fa4db80ff --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/adaptve/config/TriggerPointProvider.java @@ -0,0 +1,20 @@ +package com.fr.design.mainframe.adaptve.config; + + +import com.fr.event.Event; + +/** + * Created by kerry on 4/29/21 + */ +public interface TriggerPointProvider { + /** + * 触发后的操作 + */ + void triggerAction(); + + /** + * 触发事件 + * @return + */ + Event triggerEvent(); +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/adaptve/config/impl/CellStyleTriggerPoint.java b/designer-form/src/main/java/com/fr/design/mainframe/adaptve/config/impl/CellStyleTriggerPoint.java new file mode 100644 index 0000000000..47055eec1b --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/adaptve/config/impl/CellStyleTriggerPoint.java @@ -0,0 +1,28 @@ +package com.fr.design.mainframe.adaptve.config.impl; + +import com.fr.design.mainframe.DesignOperationEvent; +import com.fr.design.mainframe.ReuseTriggerPointManager; +import com.fr.design.mainframe.adaptve.config.ReuseNotifyInfo; +import com.fr.design.mainframe.adaptve.config.TriggerPointProvider; +import com.fr.event.Event; + +/** + * Created by kerry on 5/7/21 + */ +public class CellStyleTriggerPoint implements TriggerPointProvider { + @Override + public void triggerAction() { + ReuseNotifyInfo notifyInfo = ReuseTriggerPointManager.getInstance().getReuseNotifyInfo(); + if (notifyInfo == null) { + return; + } + notifyInfo.addCellStyleModify(); + ReuseTriggerPointManager.getInstance().reuseNotify(notifyInfo); + + } + + @Override + public Event triggerEvent() { + return DesignOperationEvent.CELL_STYLE_MODIFY; + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/adaptve/config/impl/CellValueImageChangeTriggerPoint.java b/designer-form/src/main/java/com/fr/design/mainframe/adaptve/config/impl/CellValueImageChangeTriggerPoint.java new file mode 100644 index 0000000000..1429ebeab7 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/adaptve/config/impl/CellValueImageChangeTriggerPoint.java @@ -0,0 +1,27 @@ +package com.fr.design.mainframe.adaptve.config.impl; + +import com.fr.design.mainframe.DesignOperationEvent; +import com.fr.design.mainframe.ReuseTriggerPointManager; +import com.fr.design.mainframe.adaptve.config.ReuseNotifyInfo; +import com.fr.design.mainframe.adaptve.config.TriggerPointProvider; +import com.fr.event.Event; + +/** + * Created by kerry on 5/7/21 + */ +public class CellValueImageChangeTriggerPoint implements TriggerPointProvider { + @Override + public void triggerAction() { + ReuseNotifyInfo notifyInfo = ReuseTriggerPointManager.getInstance().getReuseNotifyInfo(); + if (notifyInfo == null) { + return; + } + notifyInfo.addCellImageValueModify(); + ReuseTriggerPointManager.getInstance().reuseNotify(notifyInfo); + } + + @Override + public Event triggerEvent() { + return DesignOperationEvent.CELL_IMAGE_VALUE_MODIFY; + } +} diff --git a/designer-form/src/test/java/com/fr/design/mainframe/ReuseTriggerPointManagerTest.java b/designer-form/src/test/java/com/fr/design/mainframe/ReuseTriggerPointManagerTest.java new file mode 100644 index 0000000000..8a80e7f7d5 --- /dev/null +++ b/designer-form/src/test/java/com/fr/design/mainframe/ReuseTriggerPointManagerTest.java @@ -0,0 +1,45 @@ +package com.fr.design.mainframe; + +import com.fr.design.mainframe.reuse.ComponentReuseNotificationInfo; +import org.junit.Assert; +import org.junit.Test; + +/** + * Created by kerry on 5/10/21 + */ +public class ReuseTriggerPointManagerTest { + private static final long ONE_WEEK_TIME = 7 * 24 * 3600 * 1000L; + + + @Test + public void testNeedTrigger() { + ComponentReuseNotificationInfo notificationInfo = ComponentReuseNotificationInfo.getInstance(); + notificationInfo.setNotifiedNumber(0); + Assert.assertTrue(ReuseTriggerPointManager.getInstance().needTrigger()); + + notificationInfo.setNotifiedNumber(1); + Assert.assertTrue(ReuseTriggerPointManager.getInstance().needTrigger()); + + notificationInfo.setNotifiedNumber(2); + Assert.assertFalse(ReuseTriggerPointManager.getInstance().needTrigger()); + + notificationInfo.setNotifiedNumber(0); + notificationInfo.setLastNotifyTime(System.currentTimeMillis()); + Assert.assertFalse(ReuseTriggerPointManager.getInstance().needTrigger()); + + notificationInfo.setNotifiedNumber(1); + notificationInfo.setLastNotifyTime(System.currentTimeMillis()); + Assert.assertFalse(ReuseTriggerPointManager.getInstance().needTrigger()); + + + notificationInfo.setNotifiedNumber(1); + notificationInfo.setLastNotifyTime(System.currentTimeMillis() - ONE_WEEK_TIME - 1); + Assert.assertTrue(ReuseTriggerPointManager.getInstance().needTrigger()); + + + notificationInfo.setNotifiedNumber(2); + notificationInfo.setLastNotifyTime(System.currentTimeMillis()); + Assert.assertFalse(ReuseTriggerPointManager.getInstance().needTrigger()); + } + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/utils/ReportActionUtils.java b/designer-realize/src/main/java/com/fr/design/actions/utils/ReportActionUtils.java index 7f4a513947..2c0b73fe95 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/utils/ReportActionUtils.java +++ b/designer-realize/src/main/java/com/fr/design/actions/utils/ReportActionUtils.java @@ -2,7 +2,9 @@ package com.fr.design.actions.utils; import com.fr.base.Style; import com.fr.design.actions.cell.style.StyleActionInterface; +import com.fr.design.mainframe.DesignOperationEvent; import com.fr.design.mainframe.ElementCasePane; +import com.fr.event.EventDispatcher; import com.fr.grid.selection.CellSelection; import com.fr.grid.selection.FloatSelection; import com.fr.grid.selection.Selection; @@ -50,9 +52,7 @@ public class ReportActionUtils { @Override public void dealWith(CellElement editCellElement) { Style style2Mod = editCellElement.getStyle(); - editCellElement.setStyle( - styleActionInterface.executeStyle(style2Mod, selectedStyle)); - + updateCellStyle(editCellElement, styleActionInterface.executeStyle(style2Mod, selectedStyle)); } }); } @@ -119,4 +119,9 @@ public class ReportActionUtils { //peter:直接返回当前编辑元素的Style return editCellElement.getStyle(); } -} \ No newline at end of file + + public static void updateCellStyle(CellElement cellElement, Style style){ + cellElement.setStyle(style); + EventDispatcher.fire(DesignOperationEvent.CELL_STYLE_MODIFY); + } +} diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java index 4bfd9fa46c..049b0111ae 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java @@ -1,6 +1,7 @@ package com.fr.design.mainframe.cell.settingpane; import com.fr.base.Style; +import com.fr.design.actions.utils.ReportActionUtils; import com.fr.design.constants.UIConstants; import com.fr.design.mainframe.cell.settingpane.style.StylePane; import com.fr.design.style.BorderUtils; @@ -63,7 +64,7 @@ public class CellStylePane extends AbstractCellAttrPane { @Override public void updateBean(TemplateCellElement cellElement) { - cellElement.setStyle(stylePane.updateBean()); + ReportActionUtils.updateCellStyle(cellElement, stylePane.updateBean()); } @Override diff --git a/designer-realize/src/main/java/com/fr/grid/Grid.java b/designer-realize/src/main/java/com/fr/grid/Grid.java index dc414f6731..abbd60928a 100644 --- a/designer-realize/src/main/java/com/fr/grid/Grid.java +++ b/designer-realize/src/main/java/com/fr/grid/Grid.java @@ -15,9 +15,11 @@ import com.fr.design.constants.UIConstants; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.fun.GridUIProcessor; import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.mainframe.DesignOperationEvent; import com.fr.design.mainframe.ElementCasePane; import com.fr.design.mainframe.JTemplate; import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.event.EventDispatcher; import com.fr.general.ComparatorUtils; import com.fr.grid.event.CellEditorEvent; import com.fr.grid.event.CellEditorListener; @@ -1083,6 +1085,7 @@ public class Grid extends BaseGridComponent { imageChange = true; } if (styleChange || imageChange) { + EventDispatcher.fire(DesignOperationEvent.CELL_IMAGE_VALUE_MODIFY); return true; } } else { From a3e89e1e1752ee9c94f7742e87c1201d384c03c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=B2=B3?= <445798420@qq.com> Date: Mon, 10 May 2021 16:26:10 +0800 Subject: [PATCH 002/148] =?UTF-8?q?CHART-19174=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E8=87=AA=E5=AE=9A=E4=B9=89wms=E5=B8=A6token=E6=97=A0?= =?UTF-8?q?=E6=95=88=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chart/map/designer/type/WMSLayerPane.java | 22 +++++-------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/designer-chart/src/main/java/com/fr/van/chart/map/designer/type/WMSLayerPane.java b/designer-chart/src/main/java/com/fr/van/chart/map/designer/type/WMSLayerPane.java index 19afd688f6..67369d826f 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/map/designer/type/WMSLayerPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/map/designer/type/WMSLayerPane.java @@ -1,6 +1,6 @@ package com.fr.van.chart.map.designer.type; -import com.fr.decision.webservice.v10.map.WMSFactory; +import com.fr.decision.webservice.v10.map.MapEditService; import com.fr.design.dialog.FineJOptionPane; import com.fr.design.event.UIObserver; import com.fr.design.event.UIObserverListener; @@ -11,7 +11,6 @@ import com.fr.design.gui.itextarea.UITextArea; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; -import com.fr.general.http.HttpClient; import com.fr.plugin.chart.base.GisLayer; import com.fr.plugin.chart.map.layer.WMSLayer; import com.fr.van.chart.designer.TableLayout4VanChartHelper; @@ -85,21 +84,13 @@ public class WMSLayerPane extends JPanel implements UIObserver { public void actionPerformed(ActionEvent e) { new SwingWorker() { - private java.util.List list = new ArrayList<>(); + private List list = new ArrayList<>(); @Override protected Void doInBackground() { - HttpClient httpClient = new HttpClient(wmsUrl.getText() + "service=WMS&request=GetCapabilities"); - httpClient.asGet(); - - if (!httpClient.isServerAlive()) { - return null; - } - - String res = httpClient.getResponseText(); - List layers = WMSFactory.readLayers(res); + List wmsNames = MapEditService.getInstance().getWMSNames(wmsUrl.getText()); list.clear(); - for (String layer : layers) { + for (String layer : wmsNames) { list.add(new WMSLayer(layer, false)); } return null; @@ -108,9 +99,8 @@ public class WMSLayerPane extends JPanel implements UIObserver { @Override protected void done() { connectButton.setText(Toolkit.i18nText("Fine-Design_Chart_Connect_WMP")); - if (list != null && list.size() > 0) { - resetWMSLayerPane(list); - } else { + resetWMSLayerPane(list); + if (list == null || list.isEmpty()) { FineJOptionPane.showMessageDialog(null, Toolkit.i18nText("Fine-Design_Chart_Invalid_WMS")); } } From e972b9d92332491bf7988b10ad12fc395cee6429 Mon Sep 17 00:00:00 2001 From: kerry Date: Tue, 11 May 2021 10:17:11 +0800 Subject: [PATCH 003/148] =?UTF-8?q?=E5=88=A0=E9=99=A4=E8=B0=83=E8=AF=95?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/mainframe/toast/ToastMsgDialog.java | 1 - 1 file changed, 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/toast/ToastMsgDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/toast/ToastMsgDialog.java index e2cdaa35df..8fee83378c 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/toast/ToastMsgDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/toast/ToastMsgDialog.java @@ -69,7 +69,6 @@ public class ToastMsgDialog extends UIDialog { outerJPanel.setLocation(point.x, point.y + showDistance); Dimension dimension = ToastMsgDialog.this.getSize(); ToastMsgDialog.this.setSize(new Dimension(dimension.width, dimension.height + showDistance)); - System.out.println(ToastMsgDialog.this.getHeight()); } }, 0, 50, TimeUnit.MILLISECONDS); From 9525ae797e3977a20cd0c67bb0c636aee090a4a7 Mon Sep 17 00:00:00 2001 From: kerry Date: Tue, 11 May 2021 11:59:08 +0800 Subject: [PATCH 004/148] =?UTF-8?q?=E9=AD=94=E6=B3=95=E6=95=B0=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/adaptve/config/ReuseNotifyInfo.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/adaptve/config/ReuseNotifyInfo.java b/designer-form/src/main/java/com/fr/design/mainframe/adaptve/config/ReuseNotifyInfo.java index 01dc7bbb80..17aa1a6316 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/adaptve/config/ReuseNotifyInfo.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/adaptve/config/ReuseNotifyInfo.java @@ -4,6 +4,8 @@ package com.fr.design.mainframe.adaptve.config; * Created by kerry on 5/7/21 */ public class ReuseNotifyInfo { + private static final int CELL_STYLE_MODIFY_MAX_NUMBER = 3; + private static final int CELL_IMAGE_VALUE_MODIFY_MAX_NUMBER = 1; private int cellStyleModifiedNumber = 0; private int cellImageValueNumber = 0; @@ -17,7 +19,8 @@ public class ReuseNotifyInfo { } public boolean matchCondition() { - return cellStyleModifiedNumber >= 3 || cellImageValueNumber >= 1; + return cellStyleModifiedNumber >= CELL_STYLE_MODIFY_MAX_NUMBER + || cellImageValueNumber >= CELL_IMAGE_VALUE_MODIFY_MAX_NUMBER; } public void reset() { From d243e3d60f3ff8714357a0e98ae5b6a8c2262a4f Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Mon, 17 May 2021 17:31:05 +0800 Subject: [PATCH 005/148] =?UTF-8?q?REPORT-51678=20=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=A4=8D=E7=94=A8=E6=8F=92=E4=BB=B6=E4=BB=A3=E7=A0=81=E5=90=88?= =?UTF-8?q?=E5=B9=B6=E4=B8=BBjar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../creator/XBorderStyleWidgetCreator.java | 6 + .../design/designer/creator/XChartEditor.java | 25 +- .../fr/design/designer/creator/XCreator.java | 54 +- .../designer/creator/XCreatorUtils.java | 1 - .../design/designer/creator/XElementCase.java | 36 +- .../designer/creator/XWAbsoluteLayout.java | 77 +- .../designer/creator/XWTitleLayout.java | 6 + .../cardlayout/XWCardMainBorderLayout.java | 80 +- .../com/fr/design/mainframe/CoverPane.java | 129 ++-- .../fr/design/mainframe/CoverReportPane.java | 174 ++--- .../mainframe/EditingMouseListener.java | 133 ++-- .../mainframe/FormCreatorDropTarget.java | 4 +- .../mainframe/FormWidgetDetailPane.java | 420 +---------- .../design/mainframe/ShareWidgetButton.java | 314 -------- .../fr/design/mainframe/ShareWidgetPane.java | 29 - .../share/AbstractWidgetSelectPane.java | 62 ++ .../share/Bean/ComponentGenerateInfo.java | 59 ++ .../share/Bean/LinkageChangeBean.java | 114 +++ .../share/action/CreateComponentAction.java | 400 ++++++++++ .../share/action/InstallComponentAction.java | 163 ++++ .../mainframe/share/action/ShareUIAspect.java | 9 + .../share/collect/CollectorManager.java | 89 +++ .../share/collect/ComponentCollector.java | 541 ++++++++++++++ .../share/collect/ComponentSender.java | 45 ++ .../share/constants/ComponentType.java | 18 + .../share/constants/ComponentTypes.java | 193 +++++ .../share/constants/DisplayDevice.java | 66 ++ .../share/constants/ShareEntryKey.java | 6 + .../mainframe/share/constants/StyleTheme.java | 81 ++ .../share/exception/LackOfValueException.java | 14 + .../share/generate/AbstractComponentTask.java | 9 + .../share/generate/ComponentBanner.java | 14 + .../generate/ComponentCreatorProcessor.java | 20 + .../share/generate/ComponentGenerator.java | 22 + .../generate/ComponentGeneratorCenter.java | 68 ++ .../share/generate/ComponentTask.java | 13 + .../share/generate/ComponentTaskAdaptor.java | 26 + .../AbstractComponentCreatorProcessor.java | 24 + .../impl/AbstractComponentGenerator.java | 161 ++++ .../generate/impl/ComponentPureGenerator.java | 57 ++ .../impl/ComponentUploadGenerator.java | 99 +++ .../share/generate/task/ComponentCreator.java | 114 +++ .../generate/task/ComponentDesensitize.java | 44 ++ .../share/generate/task/ComponentEncrypt.java | 28 + .../task/ComponentGenerateComplete.java | 19 + .../task/ComponentUploadComplete.java | 19 + .../generate/task/ComponentUploader.java | 153 ++++ .../share/group/ui/BaseGroupDialog.java | 59 ++ .../share/group/ui/GroupFileDialog.java | 173 +++++ .../share/group/ui/GroupMoveDialog.java | 79 ++ .../share/select/ComponentTransformer.java | 25 + .../select/ComponentTransformerFactory.java | 53 ++ .../select/ComponentTransformerImpl.java | 156 ++++ .../share/select/TransformerKey.java | 112 +++ .../share/sort/OnlineWidgetSortType.java | 153 ++++ .../design/mainframe/share/sort/SortType.java | 12 + .../mainframe/share/sort/WidgetSortType.java | 55 ++ .../mainframe/share/ui/base/ChartIcon.java | 91 +++ .../ui/base/DictionaryComboCheckBox.java | 92 +++ .../share/ui/base/DownloadProgressPane.java | 129 ++++ .../share/ui/base/FailureMessagePane.java | 58 ++ .../share/ui/base/FlexSearchFieldPane.java | 172 +++++ .../share/ui/base/ImageBackgroundPane.java | 226 ++++++ .../mainframe/share/ui/base/ImagePanel.java | 28 + .../share/ui/base/ImitationProgress.java | 129 ++++ .../share/ui/base/LeftWordsTextArea.java | 44 ++ .../mainframe/share/ui/base/LoadingPane.java | 49 ++ .../share/ui/base/MouseClickListener.java | 34 + .../mainframe/share/ui/base/NoMatchPane.java | 41 + .../share/ui/base/PageableButton.java | 128 ++++ .../share/ui/base/PagingFiledPane.java | 213 ++++++ .../share/ui/base/PlaceholderTextArea.java | 42 ++ .../share/ui/base/PopupMenuItem.java | 31 + .../share/ui/base/PopupPreviewPane.java | 83 +++ .../share/ui/base/ShareProgressBar.java | 231 ++++++ .../share/ui/base/SortPopupMenuItem.java | 104 +++ .../share/ui/base/ui/PlaceHolderUI.java | 48 ++ .../ui/base/ui/SharePopupMenuItemUI.java | 82 ++ .../ui/block/AbstractOnlineWidgetBlock.java | 94 +++ .../block/DragAndDropDragGestureListener.java | 72 ++ .../share/ui/block/LocalWidgetBlock.java | 313 ++++++++ .../share/ui/block/OnlineWidgetBlock.java | 303 ++++++++ .../ui/block/OnlineWidgetPackageBlock.java | 57 ++ .../share/ui/block/PreviewWidgetBlock.java | 138 ++++ .../share/ui/block/SimpleWidgetBlock.java | 17 + .../mainframe/share/ui/local/GroupPane.java | 380 ++++++++++ .../share/ui/local/LocalPaneStatus.java | 87 +++ .../share/ui/local/LocalWidgetRepoPane.java | 266 +++++++ .../share/ui/local/LocalWidgetSelectPane.java | 113 +++ .../mainframe/share/ui/local/ManagePane.java | 245 ++++++ .../mainframe/share/ui/local/ToolbarPane.java | 226 ++++++ .../share/ui/local/WidgetSelectedManager.java | 121 +++ .../mainframe/share/ui/menu/SnapChatKeys.java | 32 + .../share/ui/menu/TemplateStoreMenu.java | 53 ++ .../online/AbstractOnlineWidgetShowPane.java | 269 +++++++ .../ui/online/OnlineDownloadPackagePane.java | 253 +++++++ .../ui/online/OnlineResourceManager.java | 53 ++ .../share/ui/online/OnlineWidgetRepoPane.java | 189 +++++ .../ui/online/OnlineWidgetSelectPane.java | 225 ++++++ .../share/ui/online/OnlineWidgetShowPane.java | 144 ++++ .../share/ui/online/OnlineWidgetTabPane.java | 58 ++ .../share/ui/online/ResourceLoader.java | 13 + .../OnlineWidgetPackageSelectPane.java | 40 + .../OnlineWidgetPackagesShowPane.java | 183 +++++ .../share/ui/widgetfilter/FilterPane.java | 235 ++++++ .../ui/widgetfilter/FilterPopupPane.java | 201 +++++ .../ui/widgetfilter/LocalFilterPopupPane.java | 23 + .../ui/widgetfilter/LocalWidgetFilter.java | 139 ++++ .../LocalWidgetFilterCategory.java | 82 ++ .../widgetfilter/OnlineFilterPopupPane.java | 23 + .../mainframe/share/util/DownloadUtils.java | 143 ++++ .../share/util/InstallComponentHelper.java | 64 ++ .../mainframe/share/util/InstallUtils.java | 150 ++++ .../share/util/ShareComponentUtils.java | 93 +++ .../mainframe/share/util/ShareUIUtils.java | 189 +++++ .../mainframe/ShareWidgetButtonTest.java | 38 - .../design/share/effect/BaseEffectItem.java | 115 +++ .../share/effect/ConditionEffectItem.java | 86 +++ .../fr/design/share/effect/EffectItem.java | 32 + .../design/share/effect/EffectItemGroup.java | 279 +++++++ .../share/effect/HighlightEffectItem.java | 56 ++ .../share/effect/HyperlinkEffectItem.java | 93 +++ .../share/effect/ListenerEffectItem.java | 41 + .../StackAndAxisConditionEffectItem.java | 73 ++ .../effect/VanChartAlertValueEffectItem.java | 94 +++ .../share/effect/source/BaseSourceNode.java | 42 ++ .../share/effect/source/CellSourceNode.java | 21 + .../share/effect/source/EventSourceNode.java | 25 + .../share/effect/source/PlotSourceNode.java | 31 + .../share/effect/source/SourceNode.java | 14 + .../share/effect/source/SourceNodeUtils.java | 34 + .../ui/config/ShareConfigContentPane.java | 175 +++++ .../share/ui/config/ShareConfigPane.java | 238 ++++++ .../ui/config/table/ConfigItemRender.java | 86 +++ .../ui/config/table/ConfigTableModel.java | 70 ++ .../ui/config/table/ExpandEffectTable.java | 163 ++++ .../ui/effect/EffectControlUpdatePane.java | 85 +++ .../ui/effect/EffectPopupEditDialog.java | 206 +++++ .../design/share/ui/effect/PreviewPane.java | 356 +++++++++ .../share/ui/generate/CoverUploadPane.java | 59 ++ .../share/ui/generate/EffectContent.java | 169 +++++ .../design/share/ui/generate/EffectPane.java | 147 ++++ .../share/ui/generate/PriceExpectPane.java | 87 +++ .../share/ui/generate/ShareGeneratePane.java | 309 ++++++++ .../share/ui/generate/ShareLoginLabel.java | 50 ++ .../share/ui/generate/ShareMainPane.java | 703 ++++++++++++++++++ .../ui/generate/table/EffectItemRender.java | 117 +++ .../ui/generate/table/EffectTableModel.java | 76 ++ .../share/ui/table/EffectItemEditor.java | 65 ++ .../design/share/utils/EffectItemUtils.java | 22 + .../design/share/utils/ShareDialogUtils.java | 36 + .../fr/start/module/DesignerActivator.java | 5 + 152 files changed, 15471 insertions(+), 1283 deletions(-) delete mode 100644 designer-form/src/main/java/com/fr/design/mainframe/ShareWidgetButton.java delete mode 100644 designer-form/src/main/java/com/fr/design/mainframe/ShareWidgetPane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/AbstractWidgetSelectPane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/Bean/ComponentGenerateInfo.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/Bean/LinkageChangeBean.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/action/CreateComponentAction.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/action/InstallComponentAction.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/action/ShareUIAspect.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/collect/CollectorManager.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/collect/ComponentSender.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/constants/ComponentType.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/constants/ComponentTypes.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/constants/DisplayDevice.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/constants/ShareEntryKey.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/constants/StyleTheme.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/exception/LackOfValueException.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/generate/AbstractComponentTask.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/generate/ComponentBanner.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/generate/ComponentCreatorProcessor.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/generate/ComponentGenerator.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/generate/ComponentGeneratorCenter.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/generate/ComponentTask.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/generate/ComponentTaskAdaptor.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/generate/impl/AbstractComponentCreatorProcessor.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/generate/impl/AbstractComponentGenerator.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/generate/impl/ComponentPureGenerator.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/generate/impl/ComponentUploadGenerator.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentCreator.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentDesensitize.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentEncrypt.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentGenerateComplete.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentUploadComplete.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentUploader.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/group/ui/BaseGroupDialog.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/group/ui/GroupFileDialog.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/group/ui/GroupMoveDialog.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/select/ComponentTransformer.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/select/ComponentTransformerFactory.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/select/ComponentTransformerImpl.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/select/TransformerKey.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/sort/OnlineWidgetSortType.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/sort/SortType.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/sort/WidgetSortType.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ChartIcon.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/DictionaryComboCheckBox.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/DownloadProgressPane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/FailureMessagePane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/FlexSearchFieldPane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ImageBackgroundPane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ImagePanel.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ImitationProgress.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/LeftWordsTextArea.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/LoadingPane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/MouseClickListener.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/NoMatchPane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/PageableButton.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/PagingFiledPane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/PlaceholderTextArea.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/PopupMenuItem.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/PopupPreviewPane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ShareProgressBar.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/SortPopupMenuItem.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ui/PlaceHolderUI.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ui/SharePopupMenuItemUI.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/AbstractOnlineWidgetBlock.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/DragAndDropDragGestureListener.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/LocalWidgetBlock.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetPackageBlock.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/PreviewWidgetBlock.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/SimpleWidgetBlock.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/GroupPane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalPaneStatus.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetRepoPane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetSelectPane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ManagePane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ToolbarPane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/WidgetSelectedManager.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/SnapChatKeys.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/TemplateStoreMenu.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/AbstractOnlineWidgetShowPane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineDownloadPackagePane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineResourceManager.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetRepoPane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetSelectPane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetShowPane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetTabPane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/ResourceLoader.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/widgetpackage/OnlineWidgetPackageSelectPane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/widgetpackage/OnlineWidgetPackagesShowPane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/FilterPane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/FilterPopupPane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/LocalFilterPopupPane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/LocalWidgetFilter.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/LocalWidgetFilterCategory.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/OnlineFilterPopupPane.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallComponentHelper.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallUtils.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareComponentUtils.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareUIUtils.java delete mode 100644 designer-form/src/test/java/com/fr/design/mainframe/ShareWidgetButtonTest.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/effect/BaseEffectItem.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/effect/ConditionEffectItem.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/effect/EffectItem.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/effect/EffectItemGroup.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/effect/HighlightEffectItem.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/effect/HyperlinkEffectItem.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/effect/ListenerEffectItem.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/effect/StackAndAxisConditionEffectItem.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/effect/VanChartAlertValueEffectItem.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/effect/source/BaseSourceNode.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/effect/source/CellSourceNode.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/effect/source/EventSourceNode.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/effect/source/PlotSourceNode.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/effect/source/SourceNode.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/effect/source/SourceNodeUtils.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigContentPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/ui/config/table/ConfigItemRender.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/ui/config/table/ConfigTableModel.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/ui/config/table/ExpandEffectTable.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/ui/effect/EffectControlUpdatePane.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/ui/effect/EffectPopupEditDialog.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/ui/effect/PreviewPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/ui/generate/CoverUploadPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/ui/generate/EffectContent.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/ui/generate/EffectPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/ui/generate/PriceExpectPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareGeneratePane.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareLoginLabel.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/ui/generate/table/EffectItemRender.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/ui/generate/table/EffectTableModel.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/ui/table/EffectItemEditor.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/utils/EffectItemUtils.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/utils/ShareDialogUtils.java diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XBorderStyleWidgetCreator.java b/designer-form/src/main/java/com/fr/design/designer/creator/XBorderStyleWidgetCreator.java index fdefc019ae..e4b5377ba7 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XBorderStyleWidgetCreator.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XBorderStyleWidgetCreator.java @@ -1,6 +1,7 @@ package com.fr.design.designer.creator; import com.fr.base.BaseFormula; +import com.fr.base.iofile.attr.ExtendSharableAttrMark; import com.fr.design.border.UIRoundedBorder; import com.fr.form.ui.AbstractBorderStyleWidget; import com.fr.form.ui.Label; @@ -31,6 +32,11 @@ public class XBorderStyleWidgetCreator extends XWidgetCreator{ public XBorderStyleWidgetCreator(Widget widget, Dimension initSize) { super(widget, initSize); + + ExtendSharableAttrMark sharableAttrMark = this.toData().getWidgetAttrMark(ExtendSharableAttrMark.XML_TAG); + if (sharableAttrMark != null) { + this.setShareId(sharableAttrMark.getShareId()); + } } /** diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XChartEditor.java b/designer-form/src/main/java/com/fr/design/designer/creator/XChartEditor.java index a6a29339e5..24bea01776 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XChartEditor.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XChartEditor.java @@ -17,7 +17,6 @@ import com.fr.design.mainframe.CoverReportPane; import com.fr.design.mainframe.EastRegionContainerPane; import com.fr.design.mainframe.EditingMouseListener; import com.fr.design.mainframe.FormDesigner; -import com.fr.design.mainframe.HelpDialogManager; import com.fr.design.mainframe.widget.editors.WLayoutBorderStyleEditor; import com.fr.design.module.DesignModuleFactory; import com.fr.form.ui.BaseChartEditor; @@ -273,10 +272,11 @@ public class XChartEditor extends XBorderStyleWidgetCreator { } } } - HelpDialogManager.getInstance().setPane(coverPanel); - if (this.isHelpBtnOnFocus()) { - coverPanel.setMsgDisplay(e); + if (this.isShareConfigButtonFocus()) { + CoverReportPane.showShareConfig(((XCreator) this.getParent()).toData()); } + + } @Override @@ -315,23 +315,6 @@ public class XChartEditor extends XBorderStyleWidgetCreator { return editor; } - /** - * 是否展现覆盖的pane - * - * @param display 是否 - */ - public void displayCoverPane(boolean display) { - isHovering = display; - coverPanel.setVisible(display); - coverPanel.setPreferredSize(editor.getPreferredSize()); - coverPanel.setBounds(editor.getBounds()); - editor.repaint(); - } - - public JComponent getCoverPane() { - return coverPanel; - } - /** * 是否支持设置可用 * return boolean diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java b/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java index c7c91d9aaf..3cd33d6c34 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java @@ -24,16 +24,11 @@ import com.fr.design.utils.gui.LayoutUtils; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WTitleLayout; import com.fr.stable.Constants; -import com.fr.stable.CoreGraphHelper; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; -import com.fr.third.javax.annotation.Nullable; import javax.swing.BorderFactory; -import javax.swing.Icon; -import javax.swing.ImageIcon; import javax.swing.JComponent; -import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.Border; import java.awt.BorderLayout; @@ -43,7 +38,6 @@ import java.awt.Dimension; import java.awt.Graphics; import java.awt.Rectangle; import java.awt.event.MouseEvent; -import java.awt.image.BufferedImage; import java.beans.IntrospectionException; import java.util.ArrayList; import java.util.List; @@ -71,7 +65,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo private int[] directions; private Rectangle backupBound; private String shareId = StringUtils.EMPTY;//如果组件是共享的会有这个属性 - private boolean isHelpBtnOnFocus = false;//焦点是否在帮助按钮上 + private boolean isShareConfigButtonFocus = false;//焦点是否在帮助按钮上 private static final int SHORTS_SEPARATOR_POS = 4; // 弹出菜单分割的位置 public XCreator(Widget ob, Dimension initSize) { @@ -658,6 +652,9 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo public void setShareId(String shareId) { this.shareId = shareId; + if (coverPanel != null) { + coverPanel.setShared(isShared()); + } } public String getShareId() { @@ -668,54 +665,31 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo * 焦点是否在帮助按钮上 * @return 焦点是否在帮助按钮上 */ - public boolean isHelpBtnOnFocus() { - return isHelpBtnOnFocus; + public boolean isShareConfigButtonFocus() { + return isShareConfigButtonFocus; } - public void setHelpBtnOnFocus(boolean helpBtnOnFocus) { - isHelpBtnOnFocus = helpBtnOnFocus; + public void setShareConfigButtonFocus(boolean shareConfigButtonFocus) { + isShareConfigButtonFocus = shareConfigButtonFocus; } - /** - * 设置描述信息 - * @param msg 帮助信息 - */ - public void setXDescrption(String msg){ - if (coverPanel != null) { - coverPanel.setHelpMsg(msg); - } - } - public JComponent getCoverPane(){ + public CoverReportPane getCoverPane(){ return coverPanel; } - /** - * 销毁帮助提示框 - */ - public void destroyHelpDialog(){ - if (coverPanel != null) { - coverPanel.destroyHelpDialog(); - } - } - /** * 是否展现覆盖的pane * @param display 是否 */ public void displayCoverPane(boolean display){ - } - - /** - * 根据widget设置Xcreator描述信息 - * @param widget - */ - public void setXDescrption(Widget widget){ - if (widget != null) { - setXDescrption(widget.getDescription()); + if (coverPanel != null) { + coverPanel.setVisible(display); + coverPanel.setPreferredSize(editor.getPreferredSize()); + coverPanel.setBounds(editor.getBounds()); + editor.repaint(); } } - /** * 按照比例调整组件的宽度 * @param percent 比例 diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java b/designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java index 260318023e..945d3bfdd3 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java @@ -257,7 +257,6 @@ public class XCreatorUtils { FineLoggerFactory.getLogger().error("Error to create xcreator!"); creator = new NullCreator(widget, d); } - creator.setXDescrption(widget);//设置描述信息 return creator; } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java b/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java index 14e0a65113..6aafc8c6e1 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java @@ -34,7 +34,6 @@ import java.util.Set; public class XElementCase extends XBorderStyleWidgetCreator implements FormElementCaseContainerProvider{ private UILabel imageLable; - private CoverReportPane coverPanel; private FormDesigner designer; private static BufferedImage DEFAULT_BACKGROUND; private boolean isHovering = false; @@ -223,28 +222,6 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme imageLable.setBounds(0, 0, icon.getIconWidth(), icon.getIconHeight()); } - /** - * 是否展现覆盖的pane - * @param display 是否 - */ - public void displayCoverPane(boolean display){ - isHovering = display; - coverPanel.setVisible(display); - coverPanel.setBounds(1, 1, (int) editor.getBounds().getWidth(), (int) editor.getBounds().getHeight()); - editor.repaint(); - } - - /** - * 销毁帮助提示框 - */ - public void destroyHelpDialog(){ - coverPanel.destroyHelpDialog(); - } - - public JComponent getCoverPane(){ - return coverPanel; - } - @Override public void paintBorder(Graphics g, Rectangle bounds){ if (!isHovering) { @@ -316,11 +293,10 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme * @param e 点击事件 */ public void respondClick(EditingMouseListener editingMouseListener,MouseEvent e){ - HelpDialogManager.getInstance().setPane(coverPanel); super.respondClick(editingMouseListener, e); editingMouseListener.refreshTopXCreator(); - if (this.isHelpBtnOnFocus()) { - coverPanel.setMsgDisplay(e); + if (this.isShareConfigButtonFocus()) { + CoverReportPane.showShareConfig(((XCreator)this.getParent()).toData()); } else { switchTab(e, editingMouseListener); } @@ -342,11 +318,6 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme return new WidgetPropertyUIProvider[]{ new ElementCasePropertyUI(this)}; } - @Override - public void setXDescrption(String msg) { - coverPanel.setHelpMsg(msg); - } - /** * data属性改变触发其他操作 * @@ -370,7 +341,4 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme public boolean isSupportShared() { return true; } - - - } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteLayout.java index da268b0e6c..32273ca08a 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteLayout.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteLayout.java @@ -4,8 +4,6 @@ package com.fr.design.designer.creator; import com.fr.base.GraphHelper; -import com.fr.base.iofile.attr.SharableAttrMark; -import com.fr.design.constants.UIConstants; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.beans.LayoutAdapter; @@ -16,14 +14,11 @@ import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; import com.fr.design.designer.properties.mobile.MobileBooKMarkUsePropertyUI; import com.fr.design.form.layout.FRAbsoluteLayout; import com.fr.design.form.util.FormDesignerUtils; -import com.fr.design.form.util.XCreatorConstants; import com.fr.design.fun.WidgetPropertyUIProvider; -import com.fr.design.icon.IconPathConstants; -import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.CoverReportPane; import com.fr.design.mainframe.EditingMouseListener; import com.fr.design.mainframe.FormArea; import com.fr.design.mainframe.FormDesigner; -import com.fr.design.mainframe.WidgetHelpDialog; import com.fr.design.mainframe.WidgetPropertyPane; import com.fr.form.ui.Connector; import com.fr.form.ui.Widget; @@ -31,26 +26,17 @@ import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.form.ui.container.WLayout; import com.fr.general.FRScreen; -import com.fr.general.IOUtils; - -import com.fr.share.ShareConstants; import com.fr.stable.AssistUtils; import com.fr.stable.Constants; -import javax.swing.Icon; -import java.awt.AlphaComposite; import java.awt.Color; -import java.awt.Composite; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Graphics; -import java.awt.Graphics2D; import java.awt.Rectangle; -import java.awt.RenderingHints; import java.awt.Toolkit; import java.awt.event.ContainerEvent; import java.awt.event.MouseEvent; -import java.awt.image.BufferedImage; import java.beans.IntrospectionException; import java.util.ArrayList; import java.util.HashMap; @@ -61,20 +47,14 @@ import java.util.HashMap; */ public class XWAbsoluteLayout extends XLayoutContainer { - private static final int EDIT_BTN_WIDTH = 75; - private static final int EDIT_BTN_HEIGHT = 20; private int minWidth = WLayout.MIN_WIDTH; private int minHeight = WLayout.MIN_HEIGHT; private static final Color OUTER_BORDER_COLOR = new Color(65, 155, 249, 30); private static final Color INNER_BORDER_COLOR = new Color(65, 155, 249); - private static final int BORDER_WIDTH = 1; - private Icon controlMode = IOUtils.readIcon(IconPathConstants.TD_EL_SHARE_HELP_ICON_PATH); //由于屏幕分辨率不同,界面上的容器大小可能不是默认的100%,此时拖入组件时,保存的大小按照100%时的计算 protected double containerPercent = 1.0; - private boolean isHovering = false; - private HashMap xConnectorMap; public XWAbsoluteLayout() { @@ -462,52 +442,10 @@ public class XWAbsoluteLayout extends XLayoutContainer { super.paint(g); //如果鼠标移动到布局内且布局不可编辑,画出编辑蒙层 if (isMouseEnter && !this.editable) { - int x = 0; - int y = 0; - int w = getWidth(); - int h = getHeight(); - - Graphics2D g2d = (Graphics2D) g; - Composite oldComposite = g2d.getComposite(); - //画白色的编辑层 - g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 50 / 100.0F)); - g2d.setColor(XCreatorConstants.COVER_COLOR); - g2d.fillRect(x, y, w, h); - //画编辑按钮所在框 - FormDesigner formDesigner = WidgetPropertyPane.getInstance().getEditingFormDesigner(); - AlphaComposite alphaComposite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, formDesigner.getCursor().getType() != Cursor.DEFAULT_CURSOR ? 0.9f : 0.7f); - g2d.setColor(XCreatorConstants.EDIT_COLOR); - g2d.setComposite(alphaComposite); - g2d.fillRoundRect((x + w / 2 - EDIT_BTN_WIDTH / 2), (y + h / 2 - EDIT_BTN_HEIGHT / 2), EDIT_BTN_WIDTH, EDIT_BTN_HEIGHT, 4, 4); - g2d.setComposite(oldComposite); - //画编辑按钮图标 - BufferedImage image = IOUtils.readImage(IconPathConstants.EDIT_ICON_PATH); - g2d.drawImage( - image, - (x + w / 2 - 23), - (y + h / 2 - image.getHeight() / 2), - image.getWidth(), - image.getHeight(), - null, - this - ); - g2d.setColor(Color.WHITE); - //画编辑文字 - g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - g2d.drawString(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Edit"), x + w / 2 - 2, y + h / 2 + 5); - g.setColor(XCreatorConstants.FORM_BORDER_COLOR); - GraphHelper.draw(g, new Rectangle(BORDER_WIDTH, BORDER_WIDTH, getWidth() - BORDER_WIDTH * 2, getHeight() - BORDER_WIDTH * 2), Constants.LINE_MEDIUM); - paintExtro(g); - } - } - - public void paintExtro(Graphics g) { - if (this.toData().getWidgetAttrMark(SharableAttrMark.XML_TAG) != null) { - int width = getWidth() - ShareConstants.SHARE_EL_CONTROL_BUTTON_HW; - g.setColor(UIConstants.NORMAL_BACKGROUND); - g.fillArc(width, 0, ShareConstants.SHARE_EL_CONTROL_BUTTON_HW, ShareConstants.SHARE_EL_CONTROL_BUTTON_HW, - 0, 360); - controlMode.paintIcon(this, g, width, 0); + CoverReportPane.paintEditButton(g, this); + if (isShared()) { + CoverReportPane.paintShareButton(g, this); + } } } @@ -529,9 +467,8 @@ public class XWAbsoluteLayout extends XLayoutContainer { * @param e 鼠标点击事件 */ public void respondClick(EditingMouseListener editingMouseListener, MouseEvent e) { - //帮助弹窗 - if (this.isHelpBtnOnFocus()) { - new WidgetHelpDialog(DesignerContext.getDesignerFrame(), this.toData().getDescription()).showWindow(e); + if (this.isShareConfigButtonFocus()) { + CoverReportPane.showShareConfig(this.toData()); return; } FormDesigner designer = editingMouseListener.getDesigner(); diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XWTitleLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/XWTitleLayout.java index 964f0aa03d..7401b5ede0 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XWTitleLayout.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XWTitleLayout.java @@ -13,6 +13,7 @@ import com.fr.form.ui.WidgetTitle; import com.fr.form.ui.container.WTitleLayout; import com.fr.general.ComparatorUtils; import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; +import com.fr.stable.StringUtils; import java.awt.*; import java.awt.event.ContainerEvent; @@ -190,4 +191,9 @@ public class XWTitleLayout extends DedicateLayoutContainer { return creator.getWidgetPropertyUIProviders(); } + @Override + public void setShareId(String shareId) { + super.setShareId(shareId); + this.getEditingChildCreator().setShareId(shareId); + } } \ No newline at end of file diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java index 5b37ad313f..2d5b5ba917 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java @@ -3,9 +3,6 @@ */ package com.fr.design.designer.creator.cardlayout; -import com.fr.base.GraphHelper; -import com.fr.base.iofile.attr.SharableAttrMark; -import com.fr.design.constants.UIConstants; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.beans.LayoutAdapter; @@ -16,13 +13,9 @@ import com.fr.design.designer.creator.XCreatorUtils; import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.designer.creator.XWBorderLayout; import com.fr.design.designer.creator.XWidgetCreator; -import com.fr.design.form.util.XCreatorConstants; -import com.fr.design.icon.IconPathConstants; -import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.CoverReportPane; import com.fr.design.mainframe.EditingMouseListener; import com.fr.design.mainframe.FormDesigner; -import com.fr.design.mainframe.WidgetHelpDialog; -import com.fr.design.mainframe.WidgetPropertyPane; import com.fr.form.event.Listener; import com.fr.form.ui.CardSwitchButton; import com.fr.form.ui.LayoutBorderStyle; @@ -36,25 +29,15 @@ import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; import com.fr.form.ui.container.cardlayout.WCardTagLayout; import com.fr.form.ui.container.cardlayout.WCardTitleLayout; import com.fr.general.ComparatorUtils; -import com.fr.general.IOUtils; import com.fr.general.act.BorderPacker; -import com.fr.share.ShareConstants; -import com.fr.stable.Constants; -import javax.swing.Icon; -import java.awt.AlphaComposite; -import java.awt.Color; import java.awt.Component; -import java.awt.Composite; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Graphics; -import java.awt.Graphics2D; import java.awt.Rectangle; -import java.awt.RenderingHints; import java.awt.event.MouseEvent; -import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.List; @@ -67,15 +50,10 @@ import java.util.List; */ public class XWCardMainBorderLayout extends XWBorderLayout { - private Icon controlMode = IOUtils.readIcon(IconPathConstants.TD_EL_SHARE_HELP_ICON_PATH); private static final int CENTER = 1; private static final int NORTH = 0; private static final int TITLE_STYLE = 2; - private static final int EDIT_BTN_WIDTH = 75; - private static final int EDIT_BTN_HEIGHT = 20; - private static final int BORDER_WIDTH = 1; - private final int CARDMAINLAYOUT_CHILD_COUNT = 1; /** @@ -358,53 +336,10 @@ public class XWCardMainBorderLayout extends XWBorderLayout { super.paint(g); //如果鼠标移动到布局内且布局不可编辑,画出编辑蒙层 if (isMouseEnter && !editable) { - int x = 0; - int y = 0; - int w = getWidth(); - int h = getHeight(); - - Graphics2D g2d = (Graphics2D) g; - Composite oldComposite = g2d.getComposite(); - //画白色的编辑层 - g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 50 / 100.0F)); - g2d.setColor(XCreatorConstants.COVER_COLOR); - g2d.fillRect(x, y, w, h); - //画编辑按钮所在框 - FormDesigner formDesigner = WidgetPropertyPane.getInstance().getEditingFormDesigner(); - AlphaComposite alphaComposite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, formDesigner.getCursor().getType() != Cursor.DEFAULT_CURSOR ? 0.9f : 0.7f); - g2d.setColor(XCreatorConstants.EDIT_COLOR); - g2d.setComposite(alphaComposite); - g2d.fillRoundRect((x + w / 2 - EDIT_BTN_WIDTH / 2), (y + h / 2 - EDIT_BTN_HEIGHT / 2), EDIT_BTN_WIDTH, EDIT_BTN_HEIGHT, 4, 4); - g2d.setComposite(oldComposite); - - //画编辑按钮图标 - BufferedImage image = IOUtils.readImage(IconPathConstants.EDIT_ICON_PATH); - g2d.drawImage( - image, - (x + w / 2 - 23), - (y + h / 2 - image.getHeight() / 2), - image.getWidth(), - image.getHeight(), - null, - this - ); - g2d.setColor(Color.WHITE); - //画编辑文字 - g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - g2d.drawString(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Edit"), x + w / 2 - 2, y + h / 2 + 5); - g.setColor(XCreatorConstants.FORM_BORDER_COLOR); - GraphHelper.draw(g, new Rectangle(BORDER_WIDTH, BORDER_WIDTH, getWidth() - BORDER_WIDTH * 2, getHeight() - BORDER_WIDTH * 2), Constants.LINE_MEDIUM); - paintExtro(g); - } - } - - public void paintExtro(Graphics g) { - if (this.toData().getWidgetAttrMark(SharableAttrMark.XML_TAG) != null) { - int width = getWidth() - ShareConstants.SHARE_EL_CONTROL_BUTTON_HW; - g.setColor(UIConstants.NORMAL_BACKGROUND); - g.fillArc(width, 0, ShareConstants.SHARE_EL_CONTROL_BUTTON_HW, ShareConstants.SHARE_EL_CONTROL_BUTTON_HW, - 0, 360); - controlMode.paintIcon(this, g, width, 0); + CoverReportPane.paintEditButton(g, this); + if (isShared()) { + CoverReportPane.paintShareButton(g, this); + } } } @@ -423,9 +358,8 @@ public class XWCardMainBorderLayout extends XWBorderLayout { */ @Override public void respondClick(EditingMouseListener editingMouseListener, MouseEvent e){ - //帮助弹窗 - if (this.isHelpBtnOnFocus()) { - new WidgetHelpDialog(DesignerContext.getDesignerFrame(), this.toData().getDescription()).showWindow(e); + if (this.isShareConfigButtonFocus()) { + CoverReportPane.showShareConfig(this.toData()); return; } FormDesigner designer = editingMouseListener.getDesigner(); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/CoverPane.java b/designer-form/src/main/java/com/fr/design/mainframe/CoverPane.java index a4c4014408..f63c430554 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/CoverPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/CoverPane.java @@ -13,13 +13,12 @@ import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Component; import java.awt.Composite; -import java.awt.Container; import java.awt.Cursor; -import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; -import java.awt.LayoutManager; import java.awt.Rectangle; +import java.awt.RenderingHints; +import java.awt.image.BufferedImage; /** @@ -29,29 +28,52 @@ import java.awt.Rectangle; * Time: 上午9:09 */ public class CoverPane extends JComponent { - - private UIButton editButton; private AlphaComposite composite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f); - private static final int BORDER_WIDTH = 2; - private static final Color COVER_COLOR = new Color(216, 242, 253); - private static final int EDIT_BTN_WIDTH = 75; - private static final int EDIT_BTN_HEIGHT = 20; + protected static final int BORDER_WIDTH = 2; + public static final int EDIT_BTN_W = 75; + public static final int EDIT_BTN_H = 20; + + public static void paintEditButton(Graphics g, Component component) { + int x = 0; + int y = 0; + int w = component.getWidth(); + int h = component.getHeight(); + + Graphics2D g2d = (Graphics2D) g; + Composite oldComposite = g2d.getComposite(); + //画白色的编辑层 + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 50 / 100.0F)); + g2d.setColor(XCreatorConstants.COVER_COLOR); + g2d.fillRect(x, y, w, h); + //画编辑按钮所在框 + FormDesigner formDesigner = WidgetPropertyPane.getInstance().getEditingFormDesigner(); + AlphaComposite alphaComposite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, formDesigner.getCursor().getType() != Cursor.DEFAULT_CURSOR ? 0.9f : 0.7f); + g2d.setColor(XCreatorConstants.EDIT_COLOR); + g2d.setComposite(alphaComposite); + g2d.fillRoundRect((x + w / 2 - EDIT_BTN_W / 2), (y + h / 2 - EDIT_BTN_H / 2), EDIT_BTN_W, EDIT_BTN_H, 4, 4); + g2d.setComposite(oldComposite); + //画编辑按钮图标 + BufferedImage image = IOUtils.readImage(IconPathConstants.EDIT_ICON_PATH); + g2d.drawImage( + image, + (x + w / 2 - 23), + (y + h / 2 - image.getHeight() / 2), + image.getWidth(), + image.getHeight(), + null + ); + g2d.setColor(Color.WHITE); + //画编辑文字 + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g2d.drawString(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Edit"), x + w / 2 - 2, y + h / 2 + 5); + + g.setColor(XCreatorConstants.FORM_BORDER_COLOR); + GraphHelper.draw(g, new Rectangle(BORDER_WIDTH, BORDER_WIDTH, w - BORDER_WIDTH * 2, h - BORDER_WIDTH * 2), Constants.LINE_MEDIUM); + } public CoverPane() { - setLayout(getCoverLayout()); setBackground(null); setOpaque(false); - - editButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Edit"), IOUtils.readIcon(IconPathConstants.EDIT_ICON_PATH)) { - @Override - public Dimension getPreferredSize() { - return new Dimension(60, 24); - } - }; - editButton.setBorderPainted(false); - editButton.setExtraPainted(false); - editButton.setForeground(Color.WHITE); - add(editButton); } public AlphaComposite getComposite() { @@ -62,72 +84,9 @@ public class CoverPane extends JComponent { this.composite = composite; } - public UIButton getEditButton() { - return editButton; - } - - public void setEditButton(UIButton editButton) { - this.editButton = editButton; - } - - protected LayoutManager getCoverLayout() { - return new LayoutManager() { - - @Override - public void removeLayoutComponent(Component comp) { - } - - @Override - public Dimension preferredLayoutSize(Container parent) { - return parent.getPreferredSize(); - } - - @Override - public Dimension minimumLayoutSize(Container parent) { - return null; - } - - @Override - public void layoutContainer(Container parent) { - int width = parent.getParent().getWidth(); - int height = parent.getParent().getHeight(); - int preferWidth = editButton.getPreferredSize().width; - int preferHeight = editButton.getPreferredSize().height; - editButton.setBounds((width - preferWidth) / 2, (height - preferHeight) / 2, preferWidth, preferHeight); - } - - @Override - public void addLayoutComponent(String name, Component comp) { - } - }; - } - public void paint(Graphics g) { - int x = 0; - int y = 0; - int w = getWidth(); - int h = getHeight(); - Graphics2D g2d = (Graphics2D) g; - Composite oldComposite = g2d.getComposite(); - g2d.setComposite(composite); - g2d.setColor(COVER_COLOR); - g2d.fillRect(0, 0, getWidth(), getHeight()); - FormDesigner formDesigner = WidgetPropertyPane.getInstance().getEditingFormDesigner(); - g2d.setColor(XCreatorConstants.EDIT_COLOR); - boolean editHover = formDesigner.getCursor().getType() != Cursor.DEFAULT_CURSOR; - AlphaComposite alphaComposite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, editHover ? 0.9f : 0.7f); - g2d.setComposite(alphaComposite); - g2d.fillRoundRect((x + w / 2 - EDIT_BTN_WIDTH / 2), (y + h / 2 - EDIT_BTN_HEIGHT / 2), EDIT_BTN_WIDTH, EDIT_BTN_HEIGHT, 4, 4); - g2d.setComposite(oldComposite); - g.setColor(XCreatorConstants.FORM_BORDER_COLOR); - GraphHelper.draw(g, getPaintBorderBounds(), Constants.LINE_MEDIUM); - - super.paint(g); - } - - protected Rectangle getPaintBorderBounds(){ - return new Rectangle(BORDER_WIDTH, BORDER_WIDTH, getWidth() - BORDER_WIDTH * 2 , getHeight() - BORDER_WIDTH * 2); + paintEditButton(g, this); } } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/CoverReportPane.java b/designer-form/src/main/java/com/fr/design/mainframe/CoverReportPane.java index d976691c6e..c71070ac1a 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/CoverReportPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/CoverReportPane.java @@ -1,18 +1,20 @@ package com.fr.design.mainframe; -import com.fr.design.constants.UIConstants; -import com.fr.design.gui.ibutton.UIButton; -import com.fr.design.icon.IconPathConstants; -import com.fr.share.ShareConstants; -import com.fr.general.FRScreen; -import com.fr.general.IOUtils; -import com.fr.stable.StringUtils; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.MouseEvent; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; +import com.fr.base.BaseUtils; +import com.fr.design.dialog.BasicPane; +import com.fr.design.mainframe.share.constants.ShareEntryKey; +import com.fr.form.ui.Widget; +import com.fr.locale.InterProviderFactory; +import com.fr.stable.Constants; +import com.fr.stable.bridge.StableFactory; + +import java.awt.Color; +import java.awt.Component; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.RenderingHints; +import java.awt.image.BufferedImage; +import java.util.HashMap; /** * 报表块的封面(如果后面所有的组件都有帮助信息的话就抽接口吧) @@ -20,123 +22,61 @@ import java.awt.event.WindowEvent; * Date: 2016/11/2 * Time: 11:32 */ -public class CoverReportPane extends CoverPane implements HelpDialogHandler{ - private static final int BORDER_WIDTH = 1; - private Icon controlMode = IOUtils.readIcon(IconPathConstants.TD_EL_SHARE_HELP_ICON_PATH); - private JComponent controlButton = new JComponent() { - protected void paintComponent(Graphics g) { - g.setColor(UIConstants.NORMAL_BACKGROUND); - g.fillArc(0, 0, ShareConstants.SHARE_EL_CONTROL_BUTTON_HW, ShareConstants.SHARE_EL_CONTROL_BUTTON_HW, - 0, 360); - controlMode.paintIcon(this, g, 0, 0); - } - }; - - - private String helpMsg;//帮助信息(后续帮助信息可能会变成标配,就直接放这边了) - - private WidgetHelpDialog helpDialog = null; - - public CoverReportPane() { - this(StringUtils.EMPTY); - } - - public CoverReportPane(String helpMsg) { - super(); - this.helpMsg = helpMsg; +public class CoverReportPane extends CoverPane{ + public static final int SHARE_CONF_BTN_W = 90; + public static final int SHARE_CONF_BTN_H = 24; + + public static final Color SHARE_BTN_BG = new Color(152, 193, 250); + + public static void showShareConfig(Widget widget) { + Object[] compositeArg = new Object[]{widget}; + HashMap compoClass = new HashMap(); + compoClass.put(Constants.ARG_0, Widget.class); + BasicPane shareGuidePane = StableFactory.getMarkedInstanceObjectFromClass(ShareEntryKey.SHARE_CONFIG, compositeArg, compoClass, BasicPane.class); + shareGuidePane.show(); } - public String getHelpMsg() { - return helpMsg; + public static void paintShareButton(Graphics g, Component component) { + int x = component.getWidth() - SHARE_CONF_BTN_W; + int y = 0; + + Graphics2D g2d = (Graphics2D) g; + g2d.setColor(SHARE_BTN_BG); + g2d.fillRoundRect(x ,y, SHARE_CONF_BTN_W, SHARE_CONF_BTN_H,5,5); + g2d.setColor(Color.WHITE); + + // 画配置文字 + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g2d.drawString(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Help_Settings"),x + 30, 17); + // 画图标 + BufferedImage image = BaseUtils.readImage("com/fr/base/images/share/config.png"); + g2d.drawImage(image, x + 10, 5, image.getWidth(), image.getHeight(), null); } - public void setHelpMsg(String helpMsg) { - this.helpMsg = helpMsg; - //帮助信息为空就不显示帮助按钮 - if (StringUtils.isNotEmpty(helpMsg)) { - add(controlButton); - } - } + private boolean isShared = false; - public void setMsgDisplay(MouseEvent e) { - if (helpDialog == null) { -// controlMode = IOUtils.readIcon(IconPathConstants.TD_EL_SHARE_CLOSE_ICON_PATH); - controlButton.setVisible(false); - helpDialog = new WidgetHelpDialog(DesignerContext.getDesignerFrame(), helpMsg); - double screenValue = FRScreen.getDesignScreenByDimension(Toolkit.getDefaultToolkit().getScreenSize()).getValue(); - int offsetX = 0; - if (screenValue < FormArea.DEFAULT_SLIDER) { - offsetX = (int) ((1 - screenValue / FormArea.DEFAULT_SLIDER) - * WidgetPropertyPane.getInstance().getEditingFormDesigner().getRootComponent().getWidth() / 2); - } - int rX = WestRegionContainerPane.getInstance().getWidth() + e.getX() + offsetX - 227;//弹出框宽度190加上图标的宽度27加上10的偏移 - int rY = 165 + e.getY();//165是设计器最上面几个面板的高度 - helpDialog.setLocationRelativeTo(DesignerContext.getDesignerFrame(), rX, rY); - helpDialog.showWindow(); - helpDialog.addWindowListener(new WindowAdapter() { - @Override - public void windowClosed(WindowEvent e) { - helpDialog = null; - controlButton.setVisible(true); - } - }); - HelpDialogManager.getInstance().setPane(this); - } + public CoverReportPane() { + this(false); } - protected LayoutManager getCoverLayout() { - return new LayoutManager() { - - @Override - public void removeLayoutComponent(Component comp) { - } - - @Override - public Dimension preferredLayoutSize(Container parent) { - return parent.getPreferredSize(); - } - - @Override - public Dimension minimumLayoutSize(Container parent) { - return null; - } - - @Override - public void layoutContainer(Container parent) { - UIButton editButton = getEditButton(); - int width = parent.getParent().getWidth(); - int height = parent.getParent().getHeight(); - int preferWidth = editButton.getPreferredSize().width; - int preferHeight = editButton.getPreferredSize().height; - editButton.setBounds((width - preferWidth) / 2, (height - preferHeight) / 2, preferWidth, preferHeight); - controlButton.setBounds((width - 28), 0, 27, 27); - } - - @Override - public void addLayoutComponent(String name, Component comp) { - } - }; + public CoverReportPane(boolean shared) { + super(); + isShared = shared; } - public void destroyHelpDialog() { - if (helpDialog != null) { - controlMode = IOUtils.readIcon(IconPathConstants.TD_EL_SHARE_HELP_ICON_PATH); - controlButton.repaint(); - helpDialog.dispose(); - helpDialog = null; - } + public boolean isShared() { + return isShared; } - @Override - protected Rectangle getPaintBorderBounds(){ - return new Rectangle(BORDER_WIDTH, BORDER_WIDTH, getWidth() - 3 * BORDER_WIDTH , getHeight() - 3 * BORDER_WIDTH); + public void setShared(boolean shared) { + isShared = shared; } @Override - public void setVisible(boolean aFlag) { - super.setVisible(aFlag); -// if (aFlag) { -// HelpDialogManager.getInstance().setPane(this); -// } + public void paint(Graphics g) { + super.paint(g); + if (isShared()) { + paintShareButton(g, this); + } } } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/EditingMouseListener.java b/designer-form/src/main/java/com/fr/design/mainframe/EditingMouseListener.java index 524dd8bf14..fd12360915 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/EditingMouseListener.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/EditingMouseListener.java @@ -11,6 +11,7 @@ import com.fr.design.designer.beans.location.Direction; import com.fr.design.designer.beans.location.Location; import com.fr.design.designer.beans.models.SelectionModel; import com.fr.design.designer.beans.models.StateModel; +import com.fr.design.designer.creator.XBorderStyleWidgetCreator; import com.fr.design.designer.creator.XChartEditor; import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XCreatorUtils; @@ -28,9 +29,7 @@ import com.fr.design.icon.IconPathConstants; import com.fr.design.utils.ComponentUtils; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.LayoutUtils; -import com.fr.share.ShareConstants; import com.fr.stable.Constants; -import com.fr.stable.StringUtils; import javax.swing.BorderFactory; import javax.swing.JComponent; @@ -41,6 +40,7 @@ import javax.swing.event.MouseInputAdapter; import java.awt.Color; import java.awt.Container; import java.awt.Cursor; +import java.awt.Insets; import java.awt.Rectangle; import java.awt.event.MouseEvent; @@ -106,10 +106,10 @@ public class EditingMouseListener extends MouseInputAdapter { private int minDragSize = 5; private int minMoveSize = 8; - private static final int EDIT_BTN_WIDTH = 60; - private static final int EDIT_BTN_HEIGHT = 24; + private static final Insets DEEFAULT_INSETS = new Insets(0,0,0,0); + //报表块的编辑按钮不灵敏,范围扩大一点 - private static final int GAP = 10; + private static final int GAP = 5; private XElementCase xElementCase; private XChartEditor xChartEditor; @@ -353,62 +353,48 @@ public class EditingMouseListener extends MouseInputAdapter { } - private void elementCaseMouseMoved(MouseEvent e, XCreator component) { - xElementCase = (XElementCase) component; - UIButton button = (UIButton) xElementCase.getCoverPane().getComponent(0); - if (designer.getCursor().getType() == Cursor.HAND_CURSOR) { - designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - } // component.getParent() 是报表块所在的XWTitleLayout - int minX = button.getX() + getParentPositionX(component, 0) - designer.getHorizontalScaleValue(); - int minY = button.getY() + getParentPositionY(component, 0) - designer.getVerticalScaleValue() + xElementCase.getY(); - if (e.getX() + GAP - xElementCase.getInsets().left > minX && e.getX() - GAP - xElementCase.getInsets().left < minX + button.getWidth()) { - if (e.getY() + GAP - xElementCase.getInsets().top > minY && e.getY() - GAP - xElementCase.getInsets().top < minY + button.getHeight()) { - designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + private boolean isShareConfigButton(MouseEvent e, XCreator component, Insets insets) { + if (component.isShared()) { + int minX = getParentPositionX(component, component.getX()) + component.getWidth() - insets.right - CoverReportPane.SHARE_CONF_BTN_W - designer.getHorizontalScaleValue(); + int maxX = minX + CoverReportPane.SHARE_CONF_BTN_W; + int minY = getParentPositionY(component, component.getY()) + insets.top - designer.getVerticalScaleValue(); + int maxY = minY + CoverReportPane.SHARE_CONF_BTN_H; + + if ((e.getX() > minX - GAP) && e.getX() < maxX + GAP) { + if (e.getY() > minY - GAP && e.getY() < maxY + GAP) { + return true; + } } } - setHelpBtnFocus(e, xElementCase); + return false; } - private void setHelpBtnFocus(MouseEvent e, XCreator component) { - component.setHelpBtnOnFocus(false); - if (component.getCoverPane() != null) { - if (component.getCoverPane().getComponentCount() > 1) { - JComponent button1 = (JComponent) component.getCoverPane().getComponent(1); - int minX1 = button1.getX() + getParentPositionX(component, 0) - designer.getHorizontalScaleValue(); - int minY1 = button1.getY() + getParentPositionY(component, 0) - designer.getVerticalScaleValue() + component.getY(); - if (e.getX() + GAP - component.getInsets().left > minX1 && e.getX() - GAP - component.getInsets().left < minX1 + button1.getWidth()) { - if (e.getY() + GAP - component.getInsets().top > minY1 && e.getY() - GAP - component.getInsets().top < minY1 + button1.getHeight()) { - designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - component.setHelpBtnOnFocus(true); - } - } - } - component.displayCoverPane(true); - component.setDirections(Direction.TOP_BOTTOM_LEFT_RIGHT); - } else { - //没有帮助信息时,不显示帮助图标 - if (StringUtils.isEmpty(component.toData().getDescription())) { - return; - } - int minX1 = getParentPositionX(component, component.getX()) + component.getWidth() - ShareConstants.SHARE_EL_CONTROL_BUTTON_HW - designer.getHorizontalScaleValue(); - int minY1 = getParentPositionY(component, component.getY()) - designer.getVerticalScaleValue(); - if (e.getX() + GAP - component.getInsets().left > minX1 && e.getX() - GAP - component.getInsets().left < minX1 + ShareConstants.SHARE_EL_CONTROL_BUTTON_HW) { - if (e.getY() + GAP - component.getInsets().top > minY1 && e.getY() - GAP - component.getInsets().top < minY1 + ShareConstants.SHARE_EL_CONTROL_BUTTON_HW) { - designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - component.setHelpBtnOnFocus(true); - } + private boolean isEditButton(MouseEvent e, XCreator component, Insets insets) { + int innerWidth = component.getWidth() - insets.left - insets.right; + int innerHeight = component.getHeight() - insets.top - insets.bottom; + + int minX = getParentPositionX(component, component.getX()) + insets.left + (innerWidth - CoverReportPane.EDIT_BTN_W) / 2 - designer.getHorizontalScaleValue(); + int maxX = minX + CoverReportPane.EDIT_BTN_W; + int minY = getParentPositionY(component, component.getY()) + insets.top + (innerHeight - CoverReportPane.EDIT_BTN_H) / 2 - designer.getVerticalScaleValue(); + int maxY = minY + CoverReportPane.EDIT_BTN_H; + if (e.getX() > minX - GAP && e.getX() < maxX + GAP) { + if (e.getY() > minY - GAP && e.getY() < maxY + GAP) { + return true; } } + return false; } - private void setCoverPaneNotDisplay(XCreator component, MouseEvent e, boolean isLinkedHelpDialog) { + private void elementCaseMouseMoved(MouseEvent e, XCreator component) { + xElementCase = (XElementCase) component; + component.displayCoverPane(true); + processCoverMouseMove(component, e); + } + private void setCoverPaneNotDisplay(XCreator component, MouseEvent e, boolean isLinkedHelpDialog) { if (xChartEditor != null) { xChartEditor.displayCoverPane(false); } - if (isLinkedHelpDialog) { - component.destroyHelpDialog(); - } component.displayCoverPane(false); if (xTopLayoutContainer != null) { xTopLayoutContainer.setMouseEnter(false); @@ -432,19 +418,7 @@ public class EditingMouseListener extends MouseInputAdapter { xTopLayoutContainer.setMouseEnter(true); designer.repaint(); if (!xTopLayoutContainer.isEditable()) { - if (designer.getCursor().getType() == Cursor.HAND_CURSOR) { - designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - } - int minX = getParentPositionX(parent, parent.getX()) + parent.getWidth() / 2; - int minY = getParentPositionY(parent, parent.getY()) + parent.getHeight() / 2; - int offsetX = EDIT_BTN_WIDTH / 2 + GAP; - int offsetY = EDIT_BTN_HEIGHT / 2 + GAP; - if (e.getX() > (minX - offsetX) && e.getX() < (minX + offsetX)) { - if (e.getY() > (minY - offsetY) && e.getY() < (minY + offsetY + designer.getParaHeight())) { - designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - } - } - setHelpBtnFocus(e, xTopLayoutContainer); + processCoverMouseMove(parent, e); return true; } } @@ -454,19 +428,28 @@ public class EditingMouseListener extends MouseInputAdapter { private void processChartEditorMouseMove(XCreator component, MouseEvent e) { if (component instanceof XChartEditor) { xChartEditor = (XChartEditor) component; - UIButton button = (UIButton) xChartEditor.getCoverPane().getComponent(0); - if (designer.getCursor().getType() == Cursor.HAND_CURSOR) { - designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - } - int minX = button.getX() + getParentPositionX(component, 0) - designer.getHorizontalScaleValue(); - int minY = button.getY() + getParentPositionY(component, 0) - designer.getVerticalScaleValue() + xChartEditor.getY(); - if (e.getX() + GAP > minX && e.getX() - GAP < minX + button.getWidth()) { - if (e.getY() + GAP > minY && e.getY() - GAP < minY + button.getHeight()) { - designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - } - } - setHelpBtnFocus(e, xChartEditor); - designer.repaint(); + component.displayCoverPane(true); + processCoverMouseMove(component, e); + + } + } + + private void processCoverMouseMove(XCreator component, MouseEvent e) { + component.setShareConfigButtonFocus(false); + Insets insets; + if (component instanceof XBorderStyleWidgetCreator) { + insets = ((XBorderStyleWidgetCreator) component).getInsets(); + } else { + insets = DEEFAULT_INSETS; + } + if (designer.getCursor().getType() == Cursor.HAND_CURSOR) { + designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } + if (isShareConfigButton(e, component, insets)) { + designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + component.setShareConfigButtonFocus(true); + } else if (isEditButton(e, component, insets)) { + designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); } } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java b/designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java index e35580b917..eb036239bc 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java @@ -22,10 +22,9 @@ import com.fr.design.gui.ibutton.UIButton; import com.fr.design.icon.IconPathConstants; import com.fr.design.mainframe.chart.info.ChartInfoCollector; import com.fr.design.utils.ComponentUtils; -import com.fr.form.share.SharableEditorProvider; +import com.fr.form.share.editor.SharableEditorProvider; import com.fr.form.share.SharableWidgetProvider; import com.fr.form.share.ShareLoader; -import com.fr.form.ui.ChartEditor; import com.fr.form.ui.Widget; import com.fr.stable.Constants; import com.fr.stable.StringUtils; @@ -43,7 +42,6 @@ import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetDragEvent; import java.awt.dnd.DropTargetDropEvent; import java.awt.dnd.DropTargetEvent; -import java.util.Map; /** * 添加模式下鼠标事件处理器。 diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java b/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java index 311ea4cb76..fdad24577e 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java @@ -1,45 +1,20 @@ package com.fr.design.mainframe; import com.fr.base.BaseUtils; -import com.fr.base.FRContext; -import com.fr.design.gui.ibutton.UIButton; -import com.fr.design.gui.icombobox.UIComboBox; -import com.fr.design.gui.icontainer.UIScrollPane; -import com.fr.design.gui.ifilechooser.UINativeFileChooser; -import com.fr.design.gui.ilable.UILabel; +import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.ibutton.UIHeadGroup; import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.os.impl.SupportOSImpl; -import com.fr.design.widget.FRWidgetFactory; -import com.fr.form.share.SharableWidgetProvider; -import com.fr.form.share.ShareLoader; -import com.fr.general.CloudCenter; -import com.fr.log.FineLoggerFactory; -import com.fr.share.ShareConstants; -import com.fr.stable.ArrayUtils; -import com.fr.stable.StringUtils; +import com.fr.design.mainframe.share.collect.ComponentCollector; +import com.fr.design.mainframe.share.ui.local.LocalWidgetRepoPane; +import com.fr.design.mainframe.share.ui.online.OnlineWidgetRepoPane; -import javax.swing.BorderFactory; -import javax.swing.DefaultComboBoxModel; import javax.swing.Icon; -import javax.swing.JFileChooser; -import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; -import javax.swing.SwingWorker; -import javax.swing.filechooser.FileNameExtensionFilter; import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Desktop; -import java.awt.Dimension; -import java.awt.FlowLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.io.File; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; +import java.awt.CardLayout; +import java.util.ArrayList; +import java.util.List; /** * Created with IntelliJ IDEA. @@ -48,19 +23,8 @@ import java.net.URISyntaxException; * Time: 下午8:18 */ public class FormWidgetDetailPane extends FormDockView{ - private static final int LOCAL_WIDGET_LABEL_WIDTH = 90; - - private UIScrollPane downPane; - private JPanel reuWidgetPanel; - private UIComboBox comboBox; - private SharableWidgetProvider[] elCaseBindInfoList; - private UIButton deleteButton; - private JPanel editPanel; - private JPanel resetPanel; - private JPanel menutPanelNorthPane; - private SwingWorker sw; - //组件面板是否可以编辑 - private boolean isEdit; + private JPanel centerPane; + private List paneList; public static FormWidgetDetailPane getInstance() { if (HOLDER.singleton == null) { @@ -99,348 +63,32 @@ public class FormWidgetDetailPane extends FormDockView{ public void refreshDockingView(){ FormDesigner designer = this.getEditingFormDesigner(); removeAll(); - if(designer == null){ + if (designer == null) { clearDockingView(); return; } - reuWidgetPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); - reuWidgetPanel.setBorder(null); - if (elCaseBindInfoList == null) { - if (sw != null) { - sw.cancel(true); - } - sw = new SwingWorker() { - @Override - protected Object doInBackground() throws Exception { - elCaseBindInfoList = ShareLoader.getLoader().getAllBindInfoList(); - refreshDownPanel(false); - return null; - } - }; - sw.execute(); - } - initReuWidgetPanel(); - initMenuPanel(); - - add(reuWidgetPanel, BorderLayout.CENTER); - - } - - /** - * 初始化组件共享和复用面板 - */ - private void initReuWidgetPanel() { - elCaseBindInfoList = ShareLoader.getLoader().getAllBindInfoList(); - downPane = new UIScrollPane(new ShareWidgetPane(elCaseBindInfoList, false)); - downPane.setBorder(null); - reuWidgetPanel.add(downPane); - } - - /** - * 初始化菜单栏面板 - */ - private void initMenuPanel() { - JPanel menutPanel = new JPanel(); - menutPanel.setLayout(FRGUIPaneFactory.createBorderLayout()); - menutPanel.setBorder(BorderFactory.createEmptyBorder(3, 10, 10, 15)); - - menutPanelNorthPane = new JPanel(new BorderLayout()); - UILabel localWidgetLabel = FRWidgetFactory.createLineWrapLabel( - com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Local_Widget"), - LOCAL_WIDGET_LABEL_WIDTH); - menutPanelNorthPane.add(localWidgetLabel, BorderLayout.WEST); - menutPanelNorthPane.add(initEditButtonPane(), BorderLayout.EAST); - menutPanelNorthPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 5, 0)); - - menutPanel.add(menutPanelNorthPane, BorderLayout.NORTH); - comboBox = new UIComboBox(getFormCategories()); - comboBox.setPreferredSize(new Dimension(240, comboBox.getPreferredSize().height)); - initComboBoxSelectedListener(); - menutPanel.add(comboBox, BorderLayout.CENTER); - reuWidgetPanel.add(menutPanel, BorderLayout.NORTH); - - } - - /** - * 创建菜单栏按钮面板 - */ - private JPanel initEditButtonPane() { - editPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 0, 0)); - - editPanel.add(createRefreshButton()); - editPanel.add(createDownloadButton()); - editPanel.add(createInstallButton()); - editPanel.add(createDeleteButton()); - - return editPanel; - } - - /** - * 创建取消删除面板 - */ - private JPanel initResetButtonPane() { - resetPanel = new JPanel(); - UIButton resetButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Reset")); - resetPanel.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); - resetButton.setBackground(Color.white); - resetButton.setForeground(new Color(0x333334)); - resetButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - refreshDownPanel(false); - replaceButtonPanel(false); - reuWidgetPanel.remove(deleteButton); - } - }); - - deleteButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Remove_Item")); - deleteButton.setBackground(Color.white); - deleteButton.setForeground(new Color(0xeb1d1f)); - deleteButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (ShareLoader.getLoader().removeModulesFromList()) { - refreshShareMoudule(); - reuWidgetPanel.remove(deleteButton); - elCaseBindInfoList = ShareLoader.getLoader().getAllBindInfoList(); - JOptionPane.showMessageDialog(null, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Share_Module_Removed_Successful")); - refreshDownPanel(false); - replaceButtonPanel(false); - refreshComboxData(); - } else { - JOptionPane.showMessageDialog(null, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Share_Module_Removed_Failed")); - } - - } - }); - JPanel deletePane = new JPanel(new BorderLayout()); - deletePane.add(deleteButton, BorderLayout.CENTER); - deletePane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5)); - - resetPanel.setLayout(FRGUIPaneFactory.createBorderLayout()); - resetPanel.add(resetButton, BorderLayout.CENTER); - resetPanel.add(deletePane, BorderLayout.WEST); - - refreshDownPanel(true); - - return resetPanel; - - } - - - private void initComboBoxSelectedListener() { - comboBox.addItemListener(new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - ShareLoader.getLoader().resetRemovedModuleList(); - int filterIndex = comboBox.getSelectedIndex(); - if (filterIndex == 0) { - elCaseBindInfoList = ShareLoader.getLoader().getAllBindInfoList(); - } else { - String filterName = comboBox.getSelectedItem().toString(); - elCaseBindInfoList = ShareLoader.getLoader().getFilterBindInfoList(filterName); - } - refreshDownPanel(isEdit); - - } - }); - } - - /** - * 创建工具条按钮 - */ - private UIButton createToolButton(Icon icon, String toolTip, ActionListener actionListener) { - UIButton toolButton = new UIButton(); - toolButton.setIcon(icon); - toolButton.setToolTipText(toolTip); - toolButton.set4ToolbarButton(); - toolButton.addActionListener(actionListener); - return toolButton; - - } - - /** - * 创建刷新按钮 - */ - private UIButton createRefreshButton() { - return createToolButton( - BaseUtils.readIcon("/com/fr/design/form/images/refresh.png"), - com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Refresh"), - new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (sw != null) { - sw.cancel(true); - } - sw = new SwingWorker() { - @Override - protected Object doInBackground() throws Exception { - ShareLoader.getLoader().refreshModule(); - elCaseBindInfoList = ShareLoader.getLoader().getAllBindInfoList(); - refreshComboxData(); - refreshDownPanel(false); - return null; - } - }; - sw.execute(); - } - } - ); - } - - private void refreshComboxData() { - comboBox.setSelectedIndex(0); - comboBox.setModel(new DefaultComboBoxModel(getFormCategories())); - } - /** - * 创建下载模板的按钮 - */ - private UIButton createDownloadButton() { - UIButton downloadButton = new UIButton(); - downloadButton.setIcon(BaseUtils.readIcon("/com/fr/design/form/images/download icon.png")); - downloadButton.set4ToolbarButton(); - downloadButton.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Download_Template")); - downloadButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - String url = CloudCenter.getInstance().acquireUrlByKind("reuse.url"); - if (StringUtils.isEmpty(url)) { - FRContext.getLogger().info("The URL is empty!"); - return; - } - try { - Desktop.getDesktop().browse(new URI(url)); - } catch (IOException exp) { - JOptionPane.showMessageDialog(null, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Set_Default_Browser_Duplicate")); - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - } catch (URISyntaxException exp) { - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - } catch (Exception exp) { - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + url); - } - } - }); - return downloadButton; - } - - /** - * 创建安装模板的按钮 - */ - private UIButton createInstallButton() { - return createToolButton( - BaseUtils.readIcon("/com/fr/design/form/images/install icon.png"), - com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Install_Template"), - new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (SupportOSImpl.NATIVE_CHOOSER.support()) { - UINativeFileChooser nativeFileChooser = new UINativeFileChooser(); - nativeFileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); - nativeFileChooser.setMultiSelectionEnabled(true); - nativeFileChooser.setExtensionFilter("*.reu"); - nativeFileChooser.setDialogTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Select")); - int returnValue = nativeFileChooser.showOpenDialog(new UILabel()); - if (returnValue == JFileChooser.APPROVE_OPTION) { - final File[] chosenFiles = nativeFileChooser.getSelectedFiles(); - for (File file : chosenFiles) { - installFromDiskZipFile(file); - } - } - } else { - JFileChooser fileChooser = new JFileChooser(); - fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); - fileChooser.setMultiSelectionEnabled(true); - fileChooser.setFileFilter(new FileNameExtensionFilter(".reu", "reu")); - int returnValue = fileChooser.showDialog(new UILabel(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Select")); - if (returnValue == JFileChooser.APPROVE_OPTION) { - final File[] chosenFiles = fileChooser.getSelectedFiles(); - for (File file : chosenFiles) { - installFromDiskZipFile(file); - } - } - } - } - } - ); - } - - /** - * 创建删除模板的按钮 - */ - private UIButton createDeleteButton() { - return createToolButton( - BaseUtils.readIcon("/com/fr/design/form/images/delete icon.png"), - com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Delete_Template"), - new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - replaceButtonPanel(true); - } - } - ); - } - - private void replaceButtonPanel(boolean isEdit) { - this.isEdit = isEdit; - if (isEdit) { - menutPanelNorthPane.remove(editPanel); - menutPanelNorthPane.add(initResetButtonPane(), BorderLayout.EAST); - } else { - menutPanelNorthPane.remove(resetPanel); - menutPanelNorthPane.add(initEditButtonPane(), BorderLayout.EAST); - ShareLoader.getLoader().resetRemovedModuleList(); + initPaneList(); + this.setBorder(null); + final CardLayout cardLayout = new CardLayout(); + centerPane = new JPanel(cardLayout); + String[] paneNames = new String[paneList.size()]; + for (int i = 0; i < paneList.size(); i++) { + String title = paneList.get(i).getTitle(); + paneNames[i] = title; + centerPane.add(paneList.get(i), title); } - } - - private void installFromDiskZipFile(File chosenFile) { - if (chosenFile != null && chosenFile.getName().endsWith(ShareConstants.SUFFIX_MODULE)) { - try { - if (ShareLoader.getLoader().installModuleFromDiskZipFile(chosenFile)) { - refreshShareMoudule(); - elCaseBindInfoList = ShareLoader.getLoader().getAllBindInfoList(); - refreshDownPanel(false); - refreshComboxData(); - JOptionPane.showMessageDialog(null, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Share_Module_OK")); - } else { - JOptionPane.showMessageDialog(null, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Share_Module_Error")); + UIHeadGroup headGroup = new UIHeadGroup(paneNames) { + protected void tabChanged(int newSelectedIndex) { + if (newSelectedIndex == 1) { + ComponentCollector.getInstance().collectMarkerClick(); } - } catch (IOException e) { - JOptionPane.showMessageDialog(null, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Share_Module_Error")); - FineLoggerFactory.getLogger().error(e.getMessage(), e); + cardLayout.show(centerPane, paneList.get(newSelectedIndex).getTitle()); } - } - } - - private void refreshShareMoudule() { - try { - ShareLoader.getLoader().refreshModule(); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } - - /** - * 获取报表块组件分类 - */ - public String[] getFormCategories() { - return ArrayUtils.addAll(new String[] {com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_AllCategories")}, ShareLoader.getLoader().getModuleCategory()); - } - - public void refreshDownPanel(boolean isEdit) { - reuWidgetPanel.remove(downPane); - downPane = new UIScrollPane(new ShareWidgetPane(elCaseBindInfoList, isEdit)); - downPane.setBorder(null); - reuWidgetPanel.add(downPane); - repaintContainer(); - - } - - public void repaintContainer() { - validate(); - repaint(); - revalidate(); + }; + headGroup.setSelectedIndex(0); + this.add(headGroup, BorderLayout.NORTH); + this.add(centerPane, BorderLayout.CENTER); } /** @@ -453,14 +101,20 @@ public class FormWidgetDetailPane extends FormDockView{ } - /** * 定位 - * @return 位置 + * + * @return 位置 */ + @Override public Location preferredLocation() { return Location.WEST_BELOW; } + private void initPaneList() { + paneList = new ArrayList<>(); + paneList.add(LocalWidgetRepoPane.getInstance()); + paneList.add(OnlineWidgetRepoPane.getInstance()); + } } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/ShareWidgetButton.java b/designer-form/src/main/java/com/fr/design/mainframe/ShareWidgetButton.java deleted file mode 100644 index cdfa095bf6..0000000000 --- a/designer-form/src/main/java/com/fr/design/mainframe/ShareWidgetButton.java +++ /dev/null @@ -1,314 +0,0 @@ -package com.fr.design.mainframe; - -import com.fr.base.iofile.attr.SharableAttrMark; -import com.fr.base.vcs.DesignerMode; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XCreatorUtils; -import com.fr.design.gui.ilable.UILabel; -import com.fr.form.share.SharableWidgetProvider; -import com.fr.form.share.ShareLoader; -import com.fr.form.ui.AbstractBorderStyleWidget; -import com.fr.form.ui.Widget; -import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; -import com.fr.general.ComparatorUtils; -import com.fr.general.IOUtils; -import com.fr.share.ShareConstants; -import com.fr.stable.StringUtils; -import org.jetbrains.annotations.NotNull; - -import javax.swing.Icon; -import javax.swing.ImageIcon; -import javax.swing.JComponent; -import javax.swing.JPanel; -import java.awt.AlphaComposite; -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Component; -import java.awt.Composite; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.LayoutManager; -import java.awt.Rectangle; -import java.awt.datatransfer.DataFlavor; -import java.awt.datatransfer.Transferable; -import java.awt.datatransfer.UnsupportedFlavorException; -import java.awt.dnd.DnDConstants; -import java.awt.dnd.DragGestureEvent; -import java.awt.dnd.DragGestureListener; -import java.awt.dnd.DragSource; -import java.awt.dnd.DragSourceAdapter; -import java.awt.dnd.DragSourceDragEvent; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.awt.event.MouseMotionListener; -import java.io.IOException; -import java.io.Serializable; - -/** - * Coder: zack - * Date: 2016/10/9 - * Time: 16:14 - */ -public class ShareWidgetButton extends JPanel implements MouseListener, MouseMotionListener, Serializable { - - protected SharableWidgetProvider bindInfo; - protected MouseEvent lastPressEvent; - protected JPanel reportPane; - protected boolean isEdit; - protected boolean isMarked; - private ShareWidgetUI ui; - private Icon markedMode = IOUtils.readIcon("/com/fr/design/form/images/marked.png"); - private Icon unMarkedMode = IOUtils.readIcon("/com/fr/design/form/images/unmarked.png"); - private AlphaComposite composite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 60 / 100.0F); - private JComponent markedButton = new JComponent() { - protected void paintComponent(Graphics g) { - markedMode.paintIcon(this, g, 0, 0); - } - }; - private JComponent unMarkedButton = new JComponent() { - protected void paintComponent(Graphics g) { - unMarkedMode.paintIcon(this, g, 0, 0); - } - }; - - public ShareWidgetButton(SharableWidgetProvider bindInfo, ShareWidgetUI ui) { - - this.bindInfo = bindInfo; - this.ui = ui; - this.setPreferredSize(new Dimension(108, 68)); - initUI(); - this.setLayout(getCoverLayout()); - this.addMouseListener(this); - this.addMouseMotionListener(this); - new DragAndDropDragGestureListener(this, DnDConstants.ACTION_COPY_OR_MOVE); - } - - public ShareWidgetButton(SharableWidgetProvider bindInfo) { - - this(bindInfo, new ShareWidgetUI()); - } - - public void paint(Graphics g) { - Graphics2D g2d = (Graphics2D) g; - Composite oldComposite = g2d.getComposite(); - g2d.setComposite(composite); - g2d.setColor(Color.WHITE); - g2d.fillRect(0, 0, getWidth(), getHeight()); - g2d.setComposite(oldComposite); - super.paint(g); - } - - public void setElementCaseEdit(boolean isEdit) { - this.isEdit = isEdit; - if (isEdit) { - this.add(unMarkedButton, 0); - repaint(); - } - - - } - - private void initUI() { - - reportPane = new JPanel(new BorderLayout()); - reportPane.add(new UILabel(new ImageIcon(bindInfo.getCover())), BorderLayout.CENTER); - JPanel labelPane = new JPanel(new BorderLayout()); - UILabel label = new UILabel(bindInfo.getName(), UILabel.CENTER); - labelPane.setBackground(new Color(184, 220, 242)); - labelPane.add(label, BorderLayout.CENTER); - reportPane.add(labelPane, BorderLayout.SOUTH); - add(reportPane); - } - - protected LayoutManager getCoverLayout() { - return new LayoutManager() { - - @Override - public void removeLayoutComponent(Component comp) { - } - - @Override - public Dimension preferredLayoutSize(Container parent) { - return parent.getPreferredSize(); - } - - @Override - public Dimension minimumLayoutSize(Container parent) { - return null; - } - - @Override - public void layoutContainer(Container parent) { - int width = parent.getWidth(); - int height = parent.getHeight(); - markedButton.setBounds((width - 25), 0, 25, 25); - unMarkedButton.setBounds((width - 25), 0, 25, 25); - reportPane.setBounds(0, 0, width, height); - - - - } - - @Override - public void addLayoutComponent(String name, Component comp) { - } - }; - } - - public SharableWidgetProvider getBindInfo() { - return bindInfo; - } - - public void setBindInfo(SharableWidgetProvider bindInfo) { - this.bindInfo = bindInfo; - } - - public String getFileName() { - return bindInfo.getName() +"." + bindInfo.getId() + ShareConstants.SUFFIX_MODULE; - } - - @Override - public void mouseClicked(MouseEvent e) { - if (isEdit) { - if (isMarked) { - remove(markedButton); - ShareLoader.getLoader().removeModuleForList(getFileName()); - isMarked = false; - } else { - add(markedButton,0); - ShareLoader.getLoader().addModuleToList(getFileName()); - isMarked = true; - } - } - - repaint(); - } - - @Override - public void mousePressed(MouseEvent e) { - lastPressEvent = e; - } - - @Override - public void mouseReleased(MouseEvent e) { - - } - - @Override - public void mouseEntered(MouseEvent e) { - - } - - @Override - public void mouseExited(MouseEvent e) { - - } - - @Override - public void mouseDragged(MouseEvent e) { - if (DesignerMode.isAuthorityEditing()) { - return; - } - if (lastPressEvent == null) { - return; - } - Object source = e.getSource(); - Widget creatorSource = null; - String shareId = StringUtils.EMPTY; - if (source instanceof ShareWidgetButton) { - ShareWidgetButton no = (ShareWidgetButton) e.getSource(); - if (no == null) { - return; - } - shareId = no.getBindInfo().getId(); - creatorSource = ShareLoader.getLoader().getElCaseEditorById(shareId); - if (creatorSource != null) { - ((AbstractBorderStyleWidget)creatorSource).addWidgetAttrMark(new SharableAttrMark(true)); - //tab布局WCardMainBorderLayout通过反射出来的大小是960*480 - XCreator xCreator = ui.createXCreator(creatorSource, shareId, no.getBindInfo()); - WidgetToolBarPane.getTarget().startDraggingBean(xCreator); - lastPressEvent = null; - this.setBorder(null); - } - } - } - - @Override - public void mouseMoved(MouseEvent e) { - - } - - public class DragAndDropDragGestureListener extends DragSourceAdapter implements DragGestureListener { - private DragSource source; - - public DragAndDropDragGestureListener(ShareWidgetButton tt, int actions) { - source = new DragSource(); - source.createDefaultDragGestureRecognizer(tt, actions, this); - } - - public void dragGestureRecognized(DragGestureEvent dge) { - ShareWidgetButton shareWidgetButton = (ShareWidgetButton) dge.getComponent(); - if (shareWidgetButton != null) { - Widget widget = ShareLoader.getLoader().getElCaseEditorById(shareWidgetButton.getBindInfo().getId()); - DragAndDropTransferable dragAndDropTransferable = new DragAndDropTransferable(widget); - dge.startDrag(DragSource.DefaultCopyDrop, dragAndDropTransferable, this); - } - } - - @Override - public void dragEnter(DragSourceDragEvent dragSourceDragEvent) { - - } - } - - public class DragAndDropTransferable implements Transferable { - private Widget widget; - - public DragAndDropTransferable(Widget widget) { - this.widget = widget; - } - - DataFlavor[] flavors = {new DataFlavor(Widget.class, "Widget")}; - - public DataFlavor[] getTransferDataFlavors() { - return flavors; - } - - public boolean isDataFlavorSupported(DataFlavor flavor) { - for (DataFlavor df : flavors) { - if (ComparatorUtils.equals(df, flavor)) { - return true; - } - } - return false; - } - - public Object getTransferData(DataFlavor df) throws UnsupportedFlavorException, IOException { - return widget; - } - } - - /** - * 抽出来,专门为了创建 ui 来搞 - */ - public static class ShareWidgetUI { - - private static final Dimension TAB_DEFAULT_SIZE = new Dimension(500, 300); - - @NotNull - public XCreator createXCreator(Widget creatorSource, String shareId, SharableWidgetProvider provider) { - - XCreator xCreator = null; - if (creatorSource instanceof WCardMainBorderLayout) { - xCreator = XCreatorUtils.createXCreator(creatorSource, TAB_DEFAULT_SIZE); - } else { - xCreator = XCreatorUtils.createXCreator(creatorSource, new Dimension(provider.getWidth(), provider.getHeight())); - } - xCreator.setBackupBound(new Rectangle(provider.getWidth(), provider.getHeight())); - xCreator.setShareId(shareId); - return xCreator; - } - } -} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/ShareWidgetPane.java b/designer-form/src/main/java/com/fr/design/mainframe/ShareWidgetPane.java deleted file mode 100644 index 549a4b174e..0000000000 --- a/designer-form/src/main/java/com/fr/design/mainframe/ShareWidgetPane.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.fr.design.mainframe; - - - -import com.fr.form.share.SharableWidgetProvider; - -import javax.swing.*; -import java.awt.*; - - -/** - * Created by xiaxiang on 2016/10/10. - */ -public class ShareWidgetPane extends JPanel { - - public ShareWidgetPane(SharableWidgetProvider[] elCaseBindInfoList, boolean isEdit) { - this.setBorder(BorderFactory.createEmptyBorder(10, 3, 0, 0));// 设置面板的边框 ,距离上、左、下、右 的距离 - if (elCaseBindInfoList != null) { - int rowCount = (elCaseBindInfoList.length + 1) / 2; - this.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 10)); - for (SharableWidgetProvider rbModuleInfo : elCaseBindInfoList) { - ShareWidgetButton widgetButton = new ShareWidgetButton(rbModuleInfo); - widgetButton.setElementCaseEdit(isEdit); - this.add(widgetButton); - } - this.setPreferredSize(new Dimension(240, rowCount * 80)); - } - } -} \ No newline at end of file diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/AbstractWidgetSelectPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/AbstractWidgetSelectPane.java new file mode 100644 index 0000000000..96b321c930 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/AbstractWidgetSelectPane.java @@ -0,0 +1,62 @@ +package com.fr.design.mainframe.share; + +import com.fr.design.mainframe.share.ui.base.PopupPreviewPane; +import com.fr.design.mainframe.share.ui.block.PreviewWidgetBlock; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.ComparatorUtils; +import com.fr.stable.StringUtils; + +import javax.swing.JPanel; +import java.awt.Container; + +/** + * @Author: Yuan.Wang + * @Date: 2021/1/15 + */ +public abstract class AbstractWidgetSelectPane extends JPanel { + private static final int SCROLL_BAR_HEIGHT = 10; + private final PopupPreviewPane previewPane; + private String currentShowWidgetID; + + public AbstractWidgetSelectPane() { + this.previewPane = new PopupPreviewPane(); + } + + public void showPreviewPane(PreviewWidgetBlock comp, String showWidgetID) { + if (ComparatorUtils.equals(currentShowWidgetID, showWidgetID)) { + return; + } + popupPreviewPane(comp, showWidgetID); + } + + public void hidePreviewPane() { + if (previewPane != null && previewPane.isVisible()) { + previewPane.setVisible(false); + } + this.currentShowWidgetID = StringUtils.EMPTY; + } + + private void popupPreviewPane(PreviewWidgetBlock comp, String showWidgetID) { + if (previewPane.isVisible()) { + previewPane.setVisible(false); + } + + if (!previewPane.isVisible() && comp.getWidth() != 0 && comp.getHeight() != 0) { + //父容器是GroupPane,要获得的是GroupPane的父容器 + Container parentContainer =getParentContainer(); + previewPane.setComp(comp.getPreviewImage()); + int popupPosY = comp.getLocationOnScreen().y - parentContainer.getLocationOnScreen().y; + if (previewPane.getHeight() + popupPosY > parentContainer.getHeight() + SCROLL_BAR_HEIGHT) { + popupPosY -= (previewPane.getHeight() + popupPosY - parentContainer.getHeight() - SCROLL_BAR_HEIGHT); + } + int popupPosX = -previewPane.getPreferredSize().width; + if (parentContainer.getLocationOnScreen().x < previewPane.getPreferredSize().width) { + popupPosX = parentContainer.getWidth(); + } + GUICoreUtils.showPopupMenu(previewPane, parentContainer, popupPosX, popupPosY); + this.currentShowWidgetID = showWidgetID; + } + } + + abstract protected Container getParentContainer(); +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/Bean/ComponentGenerateInfo.java b/designer-form/src/main/java/com/fr/design/mainframe/share/Bean/ComponentGenerateInfo.java new file mode 100644 index 0000000000..a5bd419a21 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/Bean/ComponentGenerateInfo.java @@ -0,0 +1,59 @@ +package com.fr.design.mainframe.share.Bean; + +import com.fr.design.mainframe.JTemplate; +import com.fr.form.share.DefaultSharableWidget; +import com.fr.form.ui.Widget; + +import java.util.Map; + +/** + * created by Harrison on 2020/04/13 + * + * 组件生成信息 + **/ +public class ComponentGenerateInfo { + + private boolean autoUpload; + + private JTemplate jt; + + private Map paraMap; + + private Widget widget; + + private DefaultSharableWidget info; + + public ComponentGenerateInfo(boolean autoUpload, JTemplate jt, Map paraMap, Widget widget, DefaultSharableWidget info) { + + this.autoUpload = autoUpload; + this.jt = jt; + this.paraMap = paraMap; + this.widget = widget; + this.info = info; + } + + public boolean isAutoUpload() { + + return autoUpload; + } + + public JTemplate getJt() { + + return jt; + } + + public Map getParaMap() { + + return paraMap; + } + + public Widget getWidget() { + + return widget; + } + + public DefaultSharableWidget getInfo() { + + return info; + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/Bean/LinkageChangeBean.java b/designer-form/src/main/java/com/fr/design/mainframe/share/Bean/LinkageChangeBean.java new file mode 100644 index 0000000000..b286cfb418 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/Bean/LinkageChangeBean.java @@ -0,0 +1,114 @@ +package com.fr.design.mainframe.share.Bean; + +import com.fr.design.mainframe.share.constants.ComponentTypes; +import com.fr.form.share.bean.WidgetDeviceBean; +import com.fr.form.share.bean.WidgetTypeBean; +import com.fr.design.mainframe.share.constants.DisplayDevice; +import com.fr.stable.AssistUtils; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 下拉框与下拉复现框联动状态 + * @author hades + * @version 10.0 + * Created by hades on 2020/6/9 + */ +public class LinkageChangeBean { + + private static final Map> STATE_MAP = new HashMap<>(); + + static { + // all or default + STATE_MAP.put(new LinkageChangeBean(new WidgetDeviceBean(false, false), new WidgetTypeBean(false, false)), ComponentTypes.allTypes()); + STATE_MAP.put(new LinkageChangeBean(new WidgetDeviceBean(true, true), new WidgetTypeBean(true, true)), ComponentTypes.allTypes()); + STATE_MAP.put(new LinkageChangeBean(new WidgetDeviceBean(false, false), new WidgetTypeBean(true, true)), ComponentTypes.allTypes()); + STATE_MAP.put(new LinkageChangeBean(new WidgetDeviceBean(true, true), new WidgetTypeBean(false, false)), ComponentTypes.allTypes()); + + // pc + STATE_MAP.put(new LinkageChangeBean(new WidgetDeviceBean(false, true), new WidgetTypeBean(false, false)), ComponentTypes.allTypesByDevice(DisplayDevice.PC.getType())); + STATE_MAP.put(new LinkageChangeBean(new WidgetDeviceBean(false, true), new WidgetTypeBean(true, true)), ComponentTypes.allTypesByDevice(DisplayDevice.PC.getType())); + + // mobile + STATE_MAP.put(new LinkageChangeBean(new WidgetDeviceBean(true, false), new WidgetTypeBean(false, false)), ComponentTypes.allTypesByDevice(DisplayDevice.MOBILE.getType())); + STATE_MAP.put(new LinkageChangeBean(new WidgetDeviceBean(true, false), new WidgetTypeBean(true, true)), ComponentTypes.allTypesByDevice(DisplayDevice.MOBILE.getType())); + + // report + STATE_MAP.put(new LinkageChangeBean(new WidgetDeviceBean(false, false), new WidgetTypeBean(true, false)), ComponentTypes.REPORT.types()); + STATE_MAP.put(new LinkageChangeBean(new WidgetDeviceBean(true, true), new WidgetTypeBean(true, false)), ComponentTypes.REPORT.types()); + + // chart + STATE_MAP.put(new LinkageChangeBean(new WidgetDeviceBean(false, false), new WidgetTypeBean(false, true)), ComponentTypes.CHART.types()); + STATE_MAP.put(new LinkageChangeBean(new WidgetDeviceBean(true, true), new WidgetTypeBean(false, true)), ComponentTypes.CHART.types()); + + // pc-report + STATE_MAP.put(new LinkageChangeBean(new WidgetDeviceBean(false, true), new WidgetTypeBean(true, false)), ComponentTypes.REPORT.children(DisplayDevice.PC.getType())); + + // pc-chart + STATE_MAP.put(new LinkageChangeBean(new WidgetDeviceBean(false, true), new WidgetTypeBean(false, true)), ComponentTypes.CHART.children(DisplayDevice.PC.getType())); + + // mobile-report + STATE_MAP.put(new LinkageChangeBean(new WidgetDeviceBean(true, false), new WidgetTypeBean(true, false)), ComponentTypes.REPORT.children(DisplayDevice.MOBILE.getType())); + + // mobile-chart + STATE_MAP.put(new LinkageChangeBean(new WidgetDeviceBean(true, false), new WidgetTypeBean(false, true)), ComponentTypes.CHART.children(DisplayDevice.MOBILE.getType())); + + } + + public static List getComboBoxItems(LinkageChangeBean bean) { + return STATE_MAP.get(bean); + } + + private LinkageChangeBean(WidgetDeviceBean widgetDeviceBean, WidgetTypeBean widgetTypeBean) { + this.widgetDeviceBean = widgetDeviceBean; + this.widgetTypeBean = widgetTypeBean; + } + + private WidgetTypeBean widgetTypeBean; + private WidgetDeviceBean widgetDeviceBean; + + public static class Builder { + private boolean report; + private boolean chart; + private boolean mobile; + private boolean pc; + + public Builder setReport(boolean report) { + this.report = report; + return this; + } + + public Builder setChart(boolean chart) { + this.chart = chart; + return this; + } + + public Builder setMobile(boolean mobile) { + this.mobile = mobile; + return this; + } + + public Builder setPc(boolean pc) { + this.pc = pc; + return this; + } + + public LinkageChangeBean build() { + return new LinkageChangeBean(new WidgetDeviceBean(this.mobile, this.pc), new WidgetTypeBean(this.report, this.chart)); + } + } + + @Override + public boolean equals(Object o) { + return o instanceof LinkageChangeBean + && AssistUtils.equals(this.widgetDeviceBean, ((LinkageChangeBean) o).widgetDeviceBean) + && AssistUtils.equals(this.widgetTypeBean, ((LinkageChangeBean) o).widgetTypeBean); + } + + @Override + public int hashCode() { + return AssistUtils.hashCode(this.widgetDeviceBean, this.widgetTypeBean); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/action/CreateComponentAction.java b/designer-form/src/main/java/com/fr/design/mainframe/share/action/CreateComponentAction.java new file mode 100644 index 0000000000..4d714b1622 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/action/CreateComponentAction.java @@ -0,0 +1,400 @@ +package com.fr.design.mainframe.share.action; + +import com.fr.base.Parameter; +import com.fr.base.ParameterMapNameSpace; +import com.fr.base.TableData; +import com.fr.chart.chartattr.Chart; +import com.fr.chart.chartattr.ChartCollection; +import com.fr.chart.chartdata.TableDataDefinition; +import com.fr.data.impl.NameTableData; +import com.fr.data.impl.TableDataDictionary; +import com.fr.design.actions.UpdateAction; +import com.fr.design.data.DesignTableDataManager; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.dialog.BasicPane; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.DesignerFrame; +import com.fr.design.mainframe.FormSelection; +import com.fr.design.mainframe.JForm; +import com.fr.design.mainframe.JTemplate; +import com.fr.design.mainframe.form.FormECCompositeProvider; +import com.fr.design.mainframe.share.constants.ShareEntryKey; +import com.fr.design.mainframe.share.select.ComponentTransformerFactory; +import com.fr.design.parameter.ParameterInputPane; +import com.fr.form.FormElementCaseProvider; +import com.fr.form.main.Form; +import com.fr.form.main.FormIO; +import com.fr.form.main.WidgetGather; +import com.fr.form.ui.BaseChartEditor; +import com.fr.form.ui.ChartEditor; +import com.fr.form.ui.DataControl; +import com.fr.form.ui.DictionaryContainer; +import com.fr.form.ui.ElementCaseEditor; +import com.fr.form.ui.Widget; +import com.fr.general.IOUtils; +import com.fr.locale.InterProviderFactory; +import com.fr.log.FineLoggerFactory; +import com.fr.report.cell.DefaultTemplateCellElement; +import com.fr.report.cell.cellattr.core.group.DSColumn; +import com.fr.script.Calculator; +import com.fr.stable.ArrayUtils; +import com.fr.stable.Constants; +import com.fr.stable.CoreGraphHelper; +import com.fr.stable.DependenceProvider; +import com.fr.stable.ParameterProvider; +import com.fr.stable.StringUtils; +import com.fr.stable.bridge.StableFactory; +import com.fr.stable.script.CalculatorProvider; +import com.fr.stable.script.NameSpace; +import com.fr.third.guava.base.Preconditions; +import com.fr.third.org.apache.commons.lang3.tuple.ImmutableTriple; +import com.fr.third.org.apache.commons.lang3.tuple.Triple; + +import javax.swing.Action; +import javax.swing.UIManager; +import java.awt.Color; +import java.awt.Component; +import java.awt.Graphics2D; +import java.awt.Image; +import java.awt.Rectangle; +import java.awt.event.ActionEvent; +import java.awt.image.BufferedImage; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Callable; +import java.util.concurrent.FutureTask; +import java.util.concurrent.TimeUnit; + +import static javax.swing.JOptionPane.ERROR_MESSAGE; + +/** + * @Author: Yuan.Wang + * @Date: 2020/11/3 + * 创建组件事件 + */ +public class CreateComponentAction extends UpdateAction { + ShareUIAspect aspect; + /** + * 等待时间 500 ms. + */ + private static final int WAIT_TIME = 500; + + private final HashMap parameterMap = new HashMap<>(); + private String[] widgetPara = new String[]{}; + + + public CreateComponentAction(ShareUIAspect aspect) { + this.putValue(Action.SMALL_ICON, null); + this.setName(Toolkit.i18nText("Fine-Plugin_Component_Create")); + this.aspect = aspect; + } + + @Override + public void actionPerformed(ActionEvent event) { + DesignerFrame designerFrame = DesignerContext.getDesignerFrame(); + // 停止编辑 + JTemplate jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); + jt.stopEditing(); + Form form = null; + try { + form = (Form) jt.getTarget().clone(); + } catch (CloneNotSupportedException e1) { + FineLoggerFactory.getLogger().error(e1.getMessage(), e1); + } + FormSelection selection = ((JForm) jt).getFormDesign().getSelectionModel().getSelection(); + + // 获取选中的组件 + Triple sharedTriple = ComponentTransformerFactory.getInstance().transform(selection); + if (sharedTriple == null) { + FineJOptionPane.showMessageDialog(designerFrame, InterProviderFactory.getProvider().getLocText("Fine-Plugin_Select_Error_Tip"), + Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"), ERROR_MESSAGE, IOUtils.readIcon("/com/fr/base/images/share/Information_Icon_warning_normal_32x32.png")); + return; + } + + Widget widget = sharedTriple.getLeft(); + + try { + + if (form == null) { + throw new NullPointerException("tpl get failed"); + } + //准备参数 + prepareParameter(widget, designerFrame); + + //准备的封面大小 + //组件大小 + Rectangle reportRec = FormIO.getContentRect(form); + Image coverImage = toCoverImage(form, sharedTriple, parameterMap, reportRec); + + Object[] compositeArg = new Object[]{jt, widget, sharedTriple.getRight(), coverImage, parameterMap, (ShareUIAspect)aspect}; + HashMap compoClass = new HashMap(); + compoClass.put(Constants.ARG_0, JTemplate.class); + compoClass.put(Constants.ARG_1, Widget.class); + compoClass.put(Constants.ARG_2, Rectangle.class); + compoClass.put(Constants.ARG_3, Image.class); + compoClass.put(Constants.ARG_4, HashMap.class); + compoClass.put(Constants.ARG_5, ShareUIAspect.class); + + BasicPane ShareGuidePane = StableFactory.getMarkedInstanceObjectFromClass(ShareEntryKey.SHARE_GENERATE, compositeArg, compoClass, BasicPane.class); +// ShareGuidePane moduleGuidePane = new ShareGuidePane(jt, widget, sharedTriple.getRight(), coverImage, parameterMap, aspect); + ShareGuidePane.show(); + } catch (Exception e) { + FineJOptionPane.showMessageDialog(designerFrame, InterProviderFactory.getProvider().getLocText("Fine-Plugin_Create_Share_Pane_Failed"), + Toolkit.i18nText("Fine-Design_Basic_Error"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon")); + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + + /** + * 准备参数 + */ + private void prepareParameter(Widget widget, DesignerFrame designerFrame) { + + final Calculator ca = Calculator.createCalculator(); + Parameter[] tplParameters = ((Form)HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().getTarget()).getParameters(); + widgetPara = new String[]{}; + calWidgetParameter(widget, ca); + List tplPList = new ArrayList(); + //只弹出使用到参数,其他的不要 + for (String wp : widgetPara) { + for (Parameter tplParameter : tplParameters) { + if (wp.length() > 0 && StringUtils.equals(wp, tplParameter.getName())) { + tplPList.add(tplParameter); + } else if (wp.contains("$") && StringUtils.equals(wp.substring(1, wp.length()), tplParameter.getName())){ + tplPList.add(tplParameter); + } + } + } + Parameter[] parameters = new Parameter[tplPList.size()]; + tplPList.toArray(parameters); + if (ArrayUtils.isNotEmpty(parameters)) {// 检查Parameter. + final ParameterInputPane pPane = new ParameterInputPane(parameters); + pPane.showSmallWindow(designerFrame, new DialogActionAdapter() { + + @Override + public void doOk() { + parameterMap.putAll(pPane.update()); + } + }).setVisible(true); + } + } + + private Triple prepareImageArgs(Triple pair, Rectangle reportRec) { + + Widget widget = pair.getLeft(); + XCreator xCreator = pair.getMiddle(); + Rectangle rectangle = pair.getRight(); + + if (widget instanceof ElementCaseEditor) { + rectangle = reportRec; + } + return new ImmutableTriple<>(widget, xCreator, rectangle); + } + + /** + * 准备封面 + *

+ * 操作可能会很耗时,所以加个时间限制 + */ + private Image toCoverImage(final Form form, + final Triple triple, + final Map parameterMap, + Rectangle reportRec) { + + final Triple imageArgs = prepareImageArgs(triple, reportRec); + FutureTask task = new FutureTask<>(new Callable() { + @Override + public Image call() throws Exception { + + Preconditions.checkNotNull(imageArgs); + Widget widget = imageArgs.getLeft(); + XCreator xCreator = imageArgs.getMiddle(); + Rectangle rectangle = imageArgs.getRight(); + if (widget instanceof ElementCaseEditor) { + return moduleToImage(form, (ElementCaseEditor) widget, parameterMap, rectangle); + } else { + return componentToImage(xCreator, rectangle); + } + } + }); + Thread imgThread = new Thread(task, "img-thread"); + try { + imgThread.start(); + //等待一段时间 + return task.get(WAIT_TIME, TimeUnit.MILLISECONDS); + } catch (Throwable throwable) { + + FineLoggerFactory.getLogger().debug("--- img generate failed ---"); + FineLoggerFactory.getLogger().debug(throwable.getMessage(), throwable); + FineLoggerFactory.getLogger().debug("--- prepare use default img ---"); + try (InputStream in = this.getClass().getResourceAsStream("/com/fr/base/images/share/default_cover.png")) { + //读取默认图表 + return IOUtils.readImage(in); + } catch (Throwable e) { + //随便画一个 + Rectangle realRec = triple.getRight(); + BufferedImage allInOne = CoreGraphHelper.createBufferedImage(realRec.width, realRec.height); + Graphics2D g2d = allInOne.createGraphics(); + g2d.setBackground(Color.white); + return allInOne; + } + } + } + + private Image componentToImage(Component comp, Rectangle rect) { + + BufferedImage im = new BufferedImage((int) rect.getWidth(), (int) rect.getHeight(), BufferedImage.TYPE_INT_ARGB); + comp.paint(im.getGraphics()); + return im; + } + + //画报表块的缩略图 + private Image moduleToImage(Form form, ElementCaseEditor editor, Map parameterMap, Rectangle rect) { + + if (editor == null) { + return new BufferedImage((int) rect.getWidth(), (int) rect.getHeight(), BufferedImage.TYPE_INT_ARGB); + } + FormElementCaseProvider provider = editor.getElementCase(); + provider.setName(editor.getWidgetName()); + provider.setTabledataSource(form); + final Calculator ca = Calculator.createCalculator(); + NameSpace ns = ParameterMapNameSpace.create(parameterMap); + ca.pushNameSpace(ns); + BufferedImage image = provider.toImage(ca, (int) rect.getWidth(), (int) rect.getHeight(), parameterMap, true); + return image; + + } + + //计算容器内使用到的参数 + private void calWidgetParameter(Widget widget, final Calculator ca) { + + Form.traversalWidget(widget, new WidgetGather() { + + @Override + public void dealWith(Widget widget) { + DataControl dc = (DataControl) widget; + TableData tableData = null; + try { + tableData = ((TableDataDictionary)(((DictionaryContainer) dc).getDictionary())).getTableData(); + } catch (Exception ignore) { + //ignore + } + widgetPara = ArrayUtils.addAll(widgetPara, getTableDataPara(tableData)); + + } + + @Override + public boolean dealWithAllCards() { + return true; + } + + }, DataControl.class); + + Form.traversalWidget(widget, new WidgetGather() { + + @Override + public void dealWith(Widget widget) { + ElementCaseEditor el = (ElementCaseEditor) widget; + widgetPara = ArrayUtils.addAll(widgetPara, getCellParameters(el.getElementCase(), ca)); + widgetPara = ArrayUtils.addAll(widgetPara, el.getElementCase().dependence(ca)); + } + + public boolean dealWithAllCards() { + return true; + } + + }, ElementCaseEditor.class); + + Form.traversalWidget(widget, new WidgetGather() { + + @Override + public void dealWith(Widget widget) { + //算的好麻烦,本来直接用dependence就好了,但是表单的selectedChart中的tabledata只有一个name,里面的_tableData是null、、所以从环境中重新取一下 + Chart selectedChart = ((ChartCollection) ((ChartEditor) widget).getChartCollection()).getSelectedChart(); + TableData tableData = null; + try { + tableData = ((TableDataDefinition)selectedChart.getFilterDefinition()).getTableData(); + } catch (Exception ignore) { + //ignore + } + widgetPara = ArrayUtils.addAll(widgetPara, getTableDataPara(tableData)); + } + + public boolean dealWithAllCards() { + return true; + } + + }, BaseChartEditor.class); + } + + private ArrayList getTableDataName(FormElementCaseProvider el, CalculatorProvider ca) { + Iterator it = el.cellIterator(); + ArrayList allECDepends = new ArrayList(); + while(it.hasNext()){ + DefaultTemplateCellElement ce = it.next(); + Object value = ce.getValue(); + //先处理单元格值(图表, 公式) + if(value instanceof DSColumn){ + String[] valueDep = ((DependenceProvider) value).dependence(ca); + allECDepends.addAll(Arrays.asList(valueDep)); + } + } + return allECDepends; + } + + private String[] getTableDataPara(TableData tableData) { + try { + return getTableParameters(((NameTableData) tableData).getName()); + } catch (Exception ignore) { + return new String[]{}; + } + } + + private String[] getCellParameters(FormElementCaseProvider formElementCase,Calculator ca) { + Iterator it = formElementCase.cellIterator(); + ArrayList allECDepends = new ArrayList(); + while(it.hasNext()){ + DefaultTemplateCellElement ce = it.next(); + Object value = ce.getValue(); + //处理单元格值(图表, 公式) + if(value instanceof DependenceProvider){ + String[] valueDep = ((DependenceProvider) value).dependence(ca); + allECDepends.addAll(Arrays.asList(valueDep)); + if (value instanceof DSColumn) { + String[] dsPara = getTableParameters(((DSColumn) value).getDSName()); + allECDepends.addAll(Arrays.asList(dsPara)); + } + } + } + //去掉重复的dependence + HashSet removeRepeat = new HashSet(allECDepends); + return removeRepeat.toArray(new String[removeRepeat.size()]); + } + + //通过tableName获取所用参数 + private String[] getTableParameters(String name) { + final Calculator ca = Calculator.createCalculator(); + ParameterProvider[] parameterProviders = new ParameterProvider[]{}; + TableData tableData = DesignTableDataManager.getEditingTableDataSource().getTableData(name); + //只使用自定义数据集的数据 + if (tableData == null) { + return new String[]{}; + } + parameterProviders = tableData.getParameters(ca); + String[] paras = new String[parameterProviders.length]; + for (int i = 0; i < parameterProviders.length; i++) { + paras[i] = parameterProviders[0].getName(); + } + return paras; + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/action/InstallComponentAction.java b/designer-form/src/main/java/com/fr/design/mainframe/share/action/InstallComponentAction.java new file mode 100644 index 0000000000..35e22964d9 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/action/InstallComponentAction.java @@ -0,0 +1,163 @@ +package com.fr.design.mainframe.share.action; + +import com.fr.design.actions.UpdateAction; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.gui.ifilechooser.UINativeFileChooser; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.share.ui.base.FailureMessagePane; +import com.fr.design.mainframe.share.ui.local.LocalWidgetRepoPane; +import com.fr.design.mainframe.share.util.InstallUtils; +import com.fr.design.mainframe.share.util.ShareComponentUtils; +import com.fr.design.mainframe.share.util.ShareUIUtils; +import com.fr.design.os.impl.SupportOSImpl; +import com.fr.form.share.record.ShareWidgetInfoManager; +import com.fr.form.share.utils.ReuxUtils; +import com.fr.log.FineLoggerFactory; + +import javax.swing.Action; +import javax.swing.JFileChooser; +import javax.swing.SwingWorker; +import javax.swing.filechooser.FileNameExtensionFilter; +import java.awt.event.ActionEvent; +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; + +/** + * @Author: Yuan.Wang + * @Date: 2020/12/8 + */ + +public class InstallComponentAction extends UpdateAction { + + public InstallComponentAction() { + this.putValue(Action.SMALL_ICON, null); + this.setName(Toolkit.i18nText("Fine-Plugin_Component_Install")); + } + + @Override + public void actionPerformed(ActionEvent e) { + + if (SupportOSImpl.NATIVE_CHOOSER.support()) { + UINativeFileChooser nativeFileChooser = new UINativeFileChooser(); + nativeFileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); + nativeFileChooser.setMultiSelectionEnabled(true); + nativeFileChooser.setFileFilter(new FileNameExtensionFilter("reu reus", "reu", "reus")); + nativeFileChooser.setDialogTitle(Toolkit.i18nText("Fine-Design_Basic_Select")); + int returnValue = nativeFileChooser.showOpenDialog(new UILabel()); + installComponent(returnValue, nativeFileChooser.getSelectedFiles()); + } else { + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); + fileChooser.setMultiSelectionEnabled(true); + fileChooser.setFileFilter(new FileNameExtensionFilter("reu reus", "reu", "reus")); + int returnValue = fileChooser.showDialog(new UILabel(), Toolkit.i18nText("Fine-Design_Basic_Select")); + installComponent(returnValue, fileChooser.getSelectedFiles()); + } + } + + private void installComponent(int returnValue, File[] selectedFiles) { + if (returnValue != JFileChooser.APPROVE_OPTION) { + return; + } + LocalWidgetRepoPane.getInstance().switch2InstallingPane(); + final File[] chosenFiles = selectedFiles; + new SwingWorker() { + @Override + protected InstallBackInfo doInBackground() { + return batchInstallZipFiles(chosenFiles); + } + + @Override + protected void done() { + try { + InstallBackInfo info = get(); + LocalWidgetRepoPane.getInstance().refreshAllGroupPane(); + showMessageDialog(info); + } catch (InterruptedException | ExecutionException e) { + FineLoggerFactory.getLogger().error(e, e.getMessage()); + } + } + }.execute(); + } + + private InstallBackInfo batchInstallZipFiles(File[] chosenFiles) { + try { + long installTime = System.currentTimeMillis(); + boolean installStatus = true; + //记录安装失败的组件 + List failureList = new ArrayList<>(); + for (File file : chosenFiles) { + installStatus &= installFromDiskZipFile(file, installTime, failureList); + } + ShareWidgetInfoManager.getInstance().saveXmlInfo(); + + boolean needShowMessage = (chosenFiles.length > 1 && chosenFiles.length != failureList.size()) || containRues(chosenFiles); + return new InstallBackInfo(installStatus, needShowMessage, failureList); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + return new InstallBackInfo(false, false, new ArrayList<>()); + } + } + + private void showMessageDialog(InstallBackInfo info) { + if (info.success) { + FineJOptionPane.showMessageDialog(null, Toolkit.i18nText("Fine-Design_Form_Share_Module_OK")); + return; + } + if (info.needShowMessage) { + final FailureMessagePane failureMessagePane = new FailureMessagePane(appendString(info.failureInfo)); + BasicDialog dialog = failureMessagePane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { + }); + dialog.setVisible(true); + } else { + ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Plugin_Component_Share_Module_Install_Error")); + } + } + + private boolean containRues(File[] chosenFiles) { + for (File file : chosenFiles) { + if (file.getName().endsWith(ReuxUtils.REUS_SUFFIX)) + return true; + } + return false; + } + + private String appendString(List list) { + StringBuilder builder = new StringBuilder(); + for (String str : list) { + builder.append(str).append("\n"); + } + return builder.toString(); + } + + /** + * 安装选中文件 + */ + private boolean installFromDiskZipFile(File chosenFile, long installTime, List failList) { + if (chosenFile == null) { + return false; + } + ShareComponentUtils.checkReadMe(); + boolean isReus = chosenFile.getName().endsWith(ReuxUtils.REUS_SUFFIX); + return isReus ? InstallUtils.installReusFile(chosenFile, installTime, failList) : InstallUtils.installReuFile(chosenFile, installTime, failList); + } + + private static class InstallBackInfo { + final boolean success; + final boolean needShowMessage; + final List failureInfo; + + public InstallBackInfo(boolean success, boolean needShowMessage, List failureInfo) { + this.success = success; + this.needShowMessage = needShowMessage; + this.failureInfo = failureInfo; + } + } + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/action/ShareUIAspect.java b/designer-form/src/main/java/com/fr/design/mainframe/share/action/ShareUIAspect.java new file mode 100644 index 0000000000..27643e06a8 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/action/ShareUIAspect.java @@ -0,0 +1,9 @@ +package com.fr.design.mainframe.share.action; + +/** + * created by Harrison on 2020/04/22 + **/ +public interface ShareUIAspect { + + void afterOk(); +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/collect/CollectorManager.java b/designer-form/src/main/java/com/fr/design/mainframe/share/collect/CollectorManager.java new file mode 100644 index 0000000000..3ccb624297 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/collect/CollectorManager.java @@ -0,0 +1,89 @@ +package com.fr.design.mainframe.share.collect; + +import com.fr.concurrent.NamedThreadFactory; +import com.fr.stable.StringUtils; +import com.fr.third.joda.time.DateTime; +import com.fr.third.joda.time.Days; +import com.fr.third.joda.time.format.DateTimeFormat; +import com.fr.third.joda.time.format.DateTimeFormatter; + +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +/** + * created by Harrison on 2020/03/25 + **/ +public class CollectorManager { + + /** + * 1 天 + */ + private static final int DELTA = 1; + + /** + * 发送间隔 5 分钟 + */ + private static final long SEND_DELAY = 300 * 1000L; + + /** + * 线程 + */ + private ScheduledExecutorService service; + + private static class ConfigManagerHolder { + private static CollectorManager instance = new CollectorManager(); + } + + public static CollectorManager getInstance() { + + return ConfigManagerHolder.instance; + } + + public void execute() { + + service = Executors + .newSingleThreadScheduledExecutor(new NamedThreadFactory("plugin-CollectorManager", true)); + service.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + sendCloudCenter(); + } + }, SEND_DELAY, SEND_DELAY, TimeUnit.MILLISECONDS); + } + + public void shutdown() { + + ComponentCollector.getInstance().saveInfo(); + if (service != null) { + service.shutdown(); + } + } + + private void sendCloudCenter() { + + String lastTime = ComponentCollector.getInstance().getLastTime(); + if (validate(lastTime)) { + boolean sendSuccess = ComponentSender.send(); + String currentTime = DateTime.now().toString("yyyy-MM-dd"); + ComponentCollector.getInstance().setLastTime(currentTime); + if (sendSuccess) { + ComponentCollector.getInstance().clear(); + } + } + ComponentCollector.getInstance().saveInfo(); + } + + private boolean validate(String lastTime) { + + if (StringUtils.isEmpty(lastTime)) { + return true; + } + DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd"); + DateTime last = formatter.parseDateTime(lastTime); + DateTime current = DateTime.now(); + return Days.daysBetween(last, current).getDays() >= DELTA; + } + + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java b/designer-form/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java new file mode 100644 index 0000000000..69bd1d8077 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java @@ -0,0 +1,541 @@ +package com.fr.design.mainframe.share.collect; + +import com.fr.base.io.XMLReadHelper; +import com.fr.config.MarketConfig; +import com.fr.design.DesignerEnvManager; +import com.fr.form.share.DefaultSharableWidget; +import com.fr.form.share.SharableWidgetProvider; +import com.fr.form.share.constants.ComponentPath; +import com.fr.form.share.group.DefaultShareGroupManager; +import com.fr.form.share.group.Group; +import com.fr.form.share.group.filter.DirFilter; +import com.fr.form.share.group.filter.ReuFilter; +import com.fr.general.ComparatorUtils; +import com.fr.json.JSON; +import com.fr.json.JSONArray; +import com.fr.json.JSONException; +import com.fr.json.JSONFactory; +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.plugin.context.PluginContexts; +import com.fr.stable.ProductConstants; +import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLTools; +import com.fr.stable.xml.XMLable; +import com.fr.stable.xml.XMLableReader; +import com.fr.third.javax.xml.stream.XMLStreamException; +import com.fr.third.joda.time.DateTime; +import com.fr.third.joda.time.Days; +import com.fr.third.org.apache.commons.io.FileUtils; +import com.fr.workspace.WorkContext; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.Iterator; + +/** + * created by Harrison on 2020/03/25 + **/ +public class ComponentCollector implements XMLable { + private static final String SIMPLE_DATE_PATTERN = "yyyy-MM-dd"; + + private static final String XML = "ComponentCollector"; + + private static final String ACTIVATE_VALUE = "activateValue"; + + private static final String COMP_PKT_CLICK = "cmpPktClick"; + + private static final String DOWNLOAD_PKT_NUM = "downloadPktNum"; + + private static final String DOWNLOAD_CMP = "downloadCmp"; + + private static final int ACTIVATE_INITIAL_VALUE = 1; + + private static final String ACTIVATE_DATE = "date"; + + private static final String GENERATE_CMP_RECORD_NAME = "name"; + + private static final String GENERATE_CMP_RECORD_TYPE = "type"; + + private static final String GENERATE_CMP_RECORD_UUID = "uuid"; + + private static final String HELP_CONFIG_INFO = "helpConfigInfo"; + + private static final String HELP_CONFIG_USE_INFO = "helpConfigUseInfo"; + + private static final String TEMPLATE_ID = "templateId"; + + private static final String SHOW_COUNT = "showCount"; + + private static final String USE_COUNT = "useCount"; + + private static final String GROUPING_DETAIL = "groupingDetail"; + + private static final String GROUP_NAME = "groupName"; + + private static final String CONTAIN_AMOUNT = "containAmount"; + + private static final String SEARCH_CONTENT = "searchContent"; + + private static final String FILTER_CONTENT = "filterContent"; + + private static final String SORT_TYPE = "sortType"; + + private static final String MARKET_CLICK = "marketClick"; + + private static final String uuid = DesignerEnvManager.getEnvManager().getUUID(); + private static ComponentCollector instance; + + private int localCmpNumber = 0; + + private int remoteCmpNumber = 0; + + private int generateCmpNumber = 0; + + private int uploadCmpNumber = 0; + + private int cmpBoardClick = 0; + + private JSONArray activateRecord = JSONFactory.createJSON(JSON.ARRAY); + + private JSONArray generateCmpRecord = JSONFactory.createJSON(JSON.ARRAY); + + private JSONArray helpConfigInfo = JSONFactory.createJSON(JSON.ARRAY); + + private JSONArray searchContent = JSONFactory.createJSON(JSON.ARRAY); + + private JSONArray filterContent = JSONFactory.createJSON(JSON.ARRAY); + + private JSONArray sortType = JSONFactory.createJSON(JSON.ARRAY); + + private String startTime = StringUtils.EMPTY; + + private String lastTime = StringUtils.EMPTY; + + private JSONArray helpConfigUseInfo = JSONFactory.createJSON(JSON.ARRAY); + + private static class ComponentCollectorHolder { + + private static ComponentCollector collector = new ComponentCollector(); + } + + public static ComponentCollector getInstance() { + return ComponentCollectorHolder.collector; + } + + private ComponentCollector() { + + loadFromFile(); + if (StringUtils.isEmpty(startTime)) { + startTime = DateTime.now().toString(SIMPLE_DATE_PATTERN); + } + } + + public void collectGenerateCmpNumber() { + + generateCmpNumber++; + saveInfo(); + } + + public void collectUploadCmpNumber() { + + uploadCmpNumber++; + saveInfo(); + } + + public void collectTepMenuEnterClick() { + + saveInfo(); + } + + public void collectCmpBoardClick() { + collectActivateRecord(); + cmpBoardClick++; + saveInfo(); + } + + public void collectCmpNumber() { + int count = 0; + //默认分组组件数量 + String[] reus = WorkContext.getWorkResource().list(ComponentPath.SHARE_PATH.path(), new ReuFilter()); + count += reus.length; + + //其他分组组件数量 + String[] groups = WorkContext.getWorkResource().list(ComponentPath.SHARE_PATH.path(), new DirFilter()); + for (String groupName : groups) { + String relativePath = StableUtils.pathJoin(ComponentPath.SHARE_PATH.path(), groupName); + String[] groupReus = WorkContext.getWorkResource().list(relativePath, new ReuFilter()); + count += groupReus.length; + } + + if (WorkContext.getCurrent().isLocal()) { + localCmpNumber = count; + } else { + remoteCmpNumber = count; + } + saveInfo(); + } + + public void collectCmpPktClick() { + collectAttrActiveCount(COMP_PKT_CLICK); + saveInfo(); + } + + public void collectDownloadPktNum() { + collectAttrActiveCount(DOWNLOAD_PKT_NUM); + saveInfo(); + } + + public void collectMarkerClick() { + collectAttrActiveCount(MARKET_CLICK); + } + + public void clearActiveRecord() { + String currentDate = DateTime.now().toString(SIMPLE_DATE_PATTERN); + Iterator iterator = activateRecord.iterator(); + while (iterator.hasNext()) { + JSONObject jo = (JSONObject) iterator.next(); + if (!ComparatorUtils.equals(currentDate, jo.getString(ACTIVATE_DATE))) { + iterator.remove(); + } + } + } + + public void collectGenerateCmpRecord(SharableWidgetProvider bindInfo) { + JSONObject jo = JSONFactory.createJSON(JSON.OBJECT); + jo.put(GENERATE_CMP_RECORD_NAME, bindInfo.getName()) + .put(GENERATE_CMP_RECORD_TYPE, ((DefaultSharableWidget) bindInfo).getChildClassify()) + .put(GENERATE_CMP_RECORD_UUID, bindInfo.getId()); + generateCmpRecord.add(jo); + } + + public void clearGenerateCmpRecord() { + generateCmpRecord = JSONFactory.createJSON(JSON.ARRAY); + } + + public void collectCmpDownLoad(String uuid) { + String currentDate = DateTime.now().toString(SIMPLE_DATE_PATTERN); + for (int i = 0; i < activateRecord.size(); i++) { + JSONObject jo = activateRecord.getJSONObject(i); + if (ComparatorUtils.equals(currentDate, jo.getString(ACTIVATE_DATE))) { + JSONArray downloadComp = jo.containsKey(DOWNLOAD_CMP) ? jo.getJSONArray(DOWNLOAD_CMP) : JSONFactory.createJSON(JSON.ARRAY); + downloadComp.add(uuid); + jo.put(DOWNLOAD_CMP, downloadComp); + saveInfo(); + return; + } + } + JSONObject jo = JSONFactory.createJSON(JSON.OBJECT); + jo.put(ACTIVATE_DATE, currentDate).put(DOWNLOAD_CMP, JSONFactory.createJSON(JSON.ARRAY).add(uuid)); + activateRecord.add(jo); + saveInfo(); + } + + public JSONArray getActivateRecord() { + return activateRecord; + } + + public JSONArray getGenerateCmpRecord() { + return generateCmpRecord; + } + + private void collectActivateRecord() { + collectAttrActiveCount(ACTIVATE_VALUE); + } + + private void collectAttrActiveCount(String attrName) { + String currentDate = DateTime.now().toString(SIMPLE_DATE_PATTERN); + for (int i = 0; i < activateRecord.size(); i++) { + JSONObject jo = activateRecord.getJSONObject(i); + if (ComparatorUtils.equals(currentDate, jo.getString(ACTIVATE_DATE))) { + int attrNum = jo.getInt(attrName); + attrNum++; + jo.put(attrName, attrNum); + return; + } + } + JSONObject jo = JSONFactory.createJSON(JSON.OBJECT); + jo.put(ACTIVATE_DATE, currentDate).put(attrName, ACTIVATE_INITIAL_VALUE); + activateRecord.add(jo); + } + + + private JSONArray getGroupingDetail() { + JSONArray ja = JSONFactory.createJSON(JSON.ARRAY); + Group[] groups = DefaultShareGroupManager.getInstance().getAllGroup(); + for(Group group : groups) { + JSONObject jo = JSONFactory.createJSON(JSON.OBJECT); + jo.put(GROUP_NAME, group.getGroupName()); + jo.put(CONTAIN_AMOUNT, group.getAllBindInfoList().length); + ja.add(jo); + } + return ja; + } + + public void collectHelpConfigInfo(String templateId, int showCount, int useCount) { + JSONObject jo = JSONFactory.createJSON(JSON.OBJECT); + jo.put(TEMPLATE_ID, templateId); + jo.put(SHOW_COUNT, showCount); + jo.put(USE_COUNT, useCount); + helpConfigInfo.add(jo); + saveInfo(); + } + + public void clearHelpConfigInfo() { + helpConfigInfo = JSONFactory.createJSON(JSON.ARRAY); + } + + public void collectSearchContent(String search) { + searchContent.add(search); + } + + public void clearSearchContent() { + searchContent = JSONFactory.createJSON(JSON.ARRAY); + } + + public void collectFilterContent(String filter) { + filterContent.add(filter); + saveInfo(); + } + + public void clearFilterContent() { + filterContent = JSONFactory.createJSON(JSON.ARRAY); + } + + public void collectSortType(String type) { + sortType.add(type); + saveInfo(); + } + + public void clearSortType() { + sortType = JSONFactory.createJSON(JSON.ARRAY); + } + + private int cmpBoardClickDaily() { + + DateTime dateTime = DateTime.parse(startTime); + DateTime currTime = DateTime.now(); + int days = (Days.daysBetween(dateTime, currTime).getDays() + 1); + return cmpBoardClick / days; + } + + public String getLastTime() { + return lastTime; + } + + public void setLastTime(String lastTime) { + this.lastTime = lastTime; + } + + /** + * 保存埋点信息到文件中 + */ + public void saveInfo() { + + try { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + XMLTools.writeOutputStreamXML(this, out); + out.flush(); + out.close(); + String fileContent = new String(out.toByteArray(), StandardCharsets.UTF_8); + FileUtils.writeStringToFile(getInfoFile(), fileContent, StandardCharsets.UTF_8); + } catch (Exception ex) { + FineLoggerFactory.getLogger().error(ex.getMessage()); + } + } + + /** + * 从文件中读取埋点信息 + */ + private void loadFromFile() { + + if (!getInfoFile().exists()) { + return; + } + XMLableReader reader = null; + try (InputStream in = new FileInputStream(getInfoFile())) { + // XMLableReader 还是应该考虑实现 Closable 接口的,这样就能使用 try-with 语句了 + reader = XMLReadHelper.createXMLableReader(in, XMLPrintWriter.XML_ENCODER); + if (reader == null) { + return; + } + reader.readXMLObject(this); + } catch (FileNotFoundException e) { + // do nothing + } catch (XMLStreamException | IOException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } finally { + try { + if (reader != null) { + reader.close(); + } + } catch (XMLStreamException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + } + + + private File getInfoFile() { + + File file = new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), "component.info")); + try { + if (!file.exists()) { + file.createNewFile(); + } + } catch (Exception ex) { + FineLoggerFactory.getLogger().error(ex.getMessage(), ex); + } + return file; + } + + @Override + public void readXML(XMLableReader reader) { + + String tagName = reader.getTagName(); + if (tagName.equals(XML)) { + this.cmpBoardClick = reader.getAttrAsInt("cmpBoardClick", 0); + this.startTime = reader.getAttrAsString("startTime", StringUtils.EMPTY); + this.lastTime = reader.getAttrAsString("lastTime", StringUtils.EMPTY); + this.localCmpNumber = reader.getAttrAsInt("localCmpNumber", 0); + this.remoteCmpNumber = reader.getAttrAsInt("remoteCmpNumber", 0); + this.generateCmpNumber = reader.getAttrAsInt("generateCmpNumber", 0); + this.uploadCmpNumber = reader.getAttrAsInt("uploadCmpNumber", 0); + + String activateRecordStr = reader.getAttrAsString("activateRecord", StringUtils.EMPTY); + activateRecord = parseJSONArray(activateRecordStr); + String generateCmpRecordStr = reader.getAttrAsString("generateCmpRecord", StringUtils.EMPTY); + generateCmpRecord = parseJSONArray(generateCmpRecordStr); + + this.helpConfigInfo = parseJSONArray(reader.getAttrAsString(HELP_CONFIG_INFO, StringUtils.EMPTY)); + this.helpConfigUseInfo = parseJSONArray(reader.getAttrAsString(HELP_CONFIG_USE_INFO, StringUtils.EMPTY)); + this.searchContent = parseJSONArray(reader.getAttrAsString(SEARCH_CONTENT,StringUtils.EMPTY)); + this.filterContent = parseJSONArray(reader.getAttrAsString(FILTER_CONTENT, StringUtils.EMPTY)); + this.sortType = parseJSONArray(reader.getAttrAsString(SORT_TYPE, StringUtils.EMPTY)); + + } + } + + private JSONArray parseJSONArray(String value) { + JSONArray ja; + try { + ja = new JSONArray(value); + } catch (JSONException e) { + ja = JSONFactory.createJSON(JSON.ARRAY); + + } + return ja; + } + + + @Override + public void writeXML(XMLPrintWriter writer) { + + writer.startTAG(XML) + .attr("cmpBoardClick", cmpBoardClick) + .attr("startTime", startTime) + .attr("lastTime", lastTime) + .attr("localCmpNumber", localCmpNumber) + .attr("remoteCmpNumber", remoteCmpNumber) + .attr("uploadCmpNumber", uploadCmpNumber) + .attr("generateCmpNumber", generateCmpNumber) + .attr("activateRecord", activateRecord.toString()) + .attr("generateCmpRecord", generateCmpRecord.toString()) + .attr(HELP_CONFIG_INFO, helpConfigInfo.toString()) + .attr(HELP_CONFIG_USE_INFO, helpConfigUseInfo.toString()) + .attr(SEARCH_CONTENT, searchContent.toString()) + .attr(FILTER_CONTENT, filterContent.toString()) + .attr(SORT_TYPE, sortType.toString()) + .end(); + } + + /** + * 累计信息 + */ + public String generateTotalInfo() { + collectCmpNumber(); + JSONObject jo = JSONObject.create(); + jo.put("userId", MarketConfig.getInstance().getBBSAttr().getBbsUid()); + jo.put("uuid", uuid); + jo.put("cmpBoardClickDaily", cmpBoardClickDaily()); + jo.put("pluginVersion", PluginContexts.currentContext().getVersion()); + jo.put("localCmpNumber", localCmpNumber); + jo.put("remoteCmpNumber", remoteCmpNumber); + jo.put("uploadCmpNumber", uploadCmpNumber); + jo.put("generateCmpNumber", generateCmpNumber); + jo.put("activateRecord", getValidActivateRecord()); + jo.put("generateCmpRecord", generateCmpRecord.toString()); + jo.put(HELP_CONFIG_INFO, helpConfigInfo.toString()); + jo.put(GROUPING_DETAIL, getGroupingDetail().toString()); + jo.put(SEARCH_CONTENT, searchContent.toString()); + jo.put(FILTER_CONTENT, filterContent.toString()); + jo.put(SORT_TYPE, sortType.toString()); + return jo.toString(); + } + + public String getValidActivateRecord() { + JSONArray result = JSONFactory.createJSON(JSON.ARRAY); + String currentDate = DateTime.now().toString(SIMPLE_DATE_PATTERN); + for (Object o : activateRecord) { + JSONObject jo = (JSONObject) o; + if (!ComparatorUtils.equals(currentDate, jo.getString(ACTIVATE_DATE))) { + result.add(jo); + } + } + return result.toString(); + } + + @Override + public Object clone() throws CloneNotSupportedException { + + return null; + } + + public void setHelpConfigUseInfo(String templateId, String widgetId) { + for (int i = 0; i < helpConfigUseInfo.size(); i++) { + JSONObject jo = helpConfigUseInfo.getJSONObject(i); + if (ComparatorUtils.equals(templateId, jo.getString(TEMPLATE_ID))) { + JSONArray useInfo = jo.getJSONArray(HELP_CONFIG_USE_INFO); + if (!useInfo.contains(widgetId)) { + useInfo.add(widgetId); + } + jo.put(HELP_CONFIG_USE_INFO, useInfo); + return; + } + } + JSONObject jo = JSONFactory.createJSON(JSON.OBJECT); + JSONArray ja = JSONFactory.createJSON(JSON.ARRAY); + ja.add(widgetId); + jo.put(TEMPLATE_ID, templateId); + jo.put(HELP_CONFIG_USE_INFO, ja); + helpConfigUseInfo.add(jo); + saveInfo(); + } + + public JSONArray getHelpConfigUseInfoWithTemplate(String templateId) { + for (int i = 0; i < helpConfigUseInfo.size(); i++) { + JSONObject jo = helpConfigUseInfo.getJSONObject(i); + if (ComparatorUtils.equals(templateId, jo.getString(TEMPLATE_ID))) { + return jo.getJSONArray(HELP_CONFIG_USE_INFO); + } + } + return JSONFactory.createJSON(JSON.ARRAY); + } + + public void clear(){ + clearActiveRecord(); + clearGenerateCmpRecord(); + clearFilterContent(); + clearHelpConfigInfo(); + clearSearchContent(); + clearSortType(); + saveInfo(); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/collect/ComponentSender.java b/designer-form/src/main/java/com/fr/design/mainframe/share/collect/ComponentSender.java new file mode 100644 index 0000000000..5043e5fb7d --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/collect/ComponentSender.java @@ -0,0 +1,45 @@ +package com.fr.design.mainframe.share.collect; + +import com.fr.design.mainframe.SiteCenterToken; +import com.fr.general.ComparatorUtils; +import com.fr.general.http.HttpToolbox; +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; + +import java.util.HashMap; +import java.util.Map; + +/** + * created by Harrison on 2020/03/25 + **/ +public class ComponentSender { + + private static final String CLOUD_REUSE_URL = "https://cloud.fanruan.com/api/monitor/record_of_reusePlugin/single"; + + public static boolean send() { + + long start = System.currentTimeMillis(); + + String content = ComponentCollector.getInstance().generateTotalInfo(); + + long end = System.currentTimeMillis(); + FineLoggerFactory.getLogger().error("cal time cost {} ms", end - start); + return sendInfo(CLOUD_REUSE_URL, content); + } + + private static boolean sendInfo(String url, String content) { + + Map para = new HashMap<>(); + para.put("token", SiteCenterToken.generateToken()); + para.put("content", content); + + try { + String res = HttpToolbox.post(url, para); + return ComparatorUtils.equals(new JSONObject(res).get("status"), "success"); + } catch (Throwable e) { + // 客户不需要关心,错误等级为 debug 就行了 + FineLoggerFactory.getLogger().debug(e.getMessage(), e); + } + return false; + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/constants/ComponentType.java b/designer-form/src/main/java/com/fr/design/mainframe/share/constants/ComponentType.java new file mode 100644 index 0000000000..bb1f1976d1 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/constants/ComponentType.java @@ -0,0 +1,18 @@ +package com.fr.design.mainframe.share.constants; + +import java.util.List; + +/** + * created by Harrison on 2020/04/20 + **/ +public interface ComponentType { + + List children(int device); + + /** + * 返回子类型所有 + * + * @return + */ + List types(); +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/constants/ComponentTypes.java b/designer-form/src/main/java/com/fr/design/mainframe/share/constants/ComponentTypes.java new file mode 100644 index 0000000000..f1d9ffaa0c --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/constants/ComponentTypes.java @@ -0,0 +1,193 @@ +package com.fr.design.mainframe.share.constants; + +import com.fr.design.i18n.Toolkit; + +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +/** + * created by Harrison on 2020/04/20 + **/ +public enum ComponentTypes implements ComponentType { + + CHART("Fine-Plugin_Component_Type_Basic_Element") { + @Override + public List children(int device) { + + return ChartChildTypes.support(device); + } + + @Override + public List types() { + List list = new ArrayList<>(); + for (ChartChildTypes types : ChartChildTypes.values()) { + list.add(types.getLocText()); + } + return list; + } + }, + + REPORT("Fine-Plugin_Component_Type_Report") { + @Override + public List children(int device) { + + if (DisplayDevice.supportMobile(device)) { + return ReportChildTypes.support(DisplayDevice.MOBILE.getType()); + } + return ReportChildTypes.support(DisplayDevice.PC.getType()); + } + + @Override + public List types() { + List list = new ArrayList<>(); + for (ReportChildTypes types : ReportChildTypes.values()) { + list.add(types.getLocText()); + } + return list; + } + }; + + /** + * 所有类型 + * + * @return + */ + public static List allTypes() { + List allTypes = new ArrayList<>(); + Set set = new LinkedHashSet<>(); + for (ComponentTypes types : values()) { + set.addAll(types.children(DisplayDevice.MOBILE.getType())); + set.addAll(types.children(DisplayDevice.PC.getType())); + } + allTypes.addAll(set); + return allTypes; + } + + /** + * 根据终端返回所有类型 + * + * @param device + * @return + */ + public static List allTypesByDevice(int device) { + List allTypes = new ArrayList<>(); + for (ComponentTypes types : values()) { + allTypes.addAll(types.children(device)); + } + return allTypes; + } + + private enum ReportChildTypes { + + INDICATOR_CARD("Fine-Plugin_Component_Type_Indicator_Card"), + + TITLE("Fine-Plugin_Component_Type_Title"), + + DIMENSION_CHANGE("Fine-Plugin_Component_Type_Dimension_Change"), + + FILL("Fine-Plugin_Component_Type_Fill", DisplayDevice.MOBILE), + + Directory_Navigation("Fine-Plugin_Component_Type_Mobile_Directory_Navigation", DisplayDevice.MOBILE), + + + SPECIAL_CARD("Fine-Plugin_Component_Type_Special_Card"); + + private String locale; + + /** + * @see DisplayDevice + */ + private int support; + + ReportChildTypes(String locale) { + this(locale, DisplayDevice.buildAll()); + } + + ReportChildTypes(String locale, DisplayDevice device) { + this(locale, device.getType()); + } + + ReportChildTypes(String locale, int support) { + this.locale = locale; + this.support = support; + } + + public static List support(int device) { + + List list = new ArrayList<>(); + ReportChildTypes[] values = ReportChildTypes.values(); + for (ReportChildTypes value : values) { + //支持当前设备 + if (DisplayDevice.supportDevice(device, value.support)) { + list.add(value.getLocText()); + } + } + return list; + } + + public String getLocText() { + + return Toolkit.i18nText(this.locale); + } + } + + private enum ChartChildTypes { + + COLUMN_CHART("File-Plugin_Component_Type_Chart_Column"), + + PIE_CHART("Fine-Plugin_Component_Type_Chart_Pie"), + + FOLD_LINE_CHART("Fine-Plugin_Component_Type_Chart_Fold_Line"), + + COMBINE_CHART("Fine-Plugin_Component_Type_Chart_Combine"), + + METER_CHART("Fine-Plugin_Component_Type_Chart_Meter"), + + MAP_CHART("Fine-Plugin_Component_Type_Chart_Map"), + + OTHERS("Fine-Plugin_Component_Type_Chart_Other"), + + DETAIL_LIST("Fine-Plugin_Component_Type_Detail_List"), + + BASIC_WIDGET("Fine-Plugin_Component_Type_Basic_Widget"); + + private String locale; + + ChartChildTypes(String locale) { + this.locale = locale; + } + + public static List support(int device) { + + List list = new ArrayList<>(); + ChartChildTypes[] values = ChartChildTypes.values(); + for (ChartChildTypes value : values) { + list.add(value.getLocText()); + } + return list; + } + + public String getLocText() { + + return Toolkit.i18nText(this.locale); + } + } + + private String locale; + + ComponentTypes(String locale) { + this.locale = locale; + } + + public String getLocText() { + + return Toolkit.i18nText(this.locale); + } + + @Override + public String toString() { + return getLocText(); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/constants/DisplayDevice.java b/designer-form/src/main/java/com/fr/design/mainframe/share/constants/DisplayDevice.java new file mode 100644 index 0000000000..87f77241c4 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/constants/DisplayDevice.java @@ -0,0 +1,66 @@ +package com.fr.design.mainframe.share.constants; + +/** + * created by Harrison on 2020/04/21 + **/ +public enum DisplayDevice { + + NONE(0), + + MOBILE(1), + + PC(2); + + private int type; + + DisplayDevice(int type) { + this.type = type; + } + + public int getType() { + return type; + } + + public static int buildAll() { + + int support = 0; + DisplayDevice[] values = DisplayDevice.values(); + for (DisplayDevice value : values) { + support |= value.getType(); + } + return support; + } + + public static int buildDevice(Iterable devices) { + + int support = 0; + if (devices == null) { + return support; + } + for (DisplayDevice device : devices) { + support |= device.type; + } + return support; + } + + public static boolean supportDevice(int device, int support) { + + return device == buildAll() || (support & device) == device; + } + + public static boolean supportMobile(int device) { + + return (device & MOBILE.getType()) == MOBILE.getType(); + } + + public static boolean supportPC(int device) { + + return (device & PC.getType()) == PC.getType(); + } + + private static int calVal(DisplayDevice device) { + + return 1 << device.type; + } + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/constants/ShareEntryKey.java b/designer-form/src/main/java/com/fr/design/mainframe/share/constants/ShareEntryKey.java new file mode 100644 index 0000000000..a873325f57 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/constants/ShareEntryKey.java @@ -0,0 +1,6 @@ +package com.fr.design.mainframe.share.constants; + +public class ShareEntryKey { + static public final String SHARE_GENERATE = "ShareGeneratePane"; + static public final String SHARE_CONFIG = "ShareConfigPane"; +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/constants/StyleTheme.java b/designer-form/src/main/java/com/fr/design/mainframe/share/constants/StyleTheme.java new file mode 100644 index 0000000000..a3712f83c5 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/constants/StyleTheme.java @@ -0,0 +1,81 @@ +package com.fr.design.mainframe.share.constants; + +import com.fr.design.i18n.Toolkit; +import com.fr.form.share.bean.StyleThemeBean; +import com.fr.form.share.bean.WidgetFilterInfo; +import com.fr.form.share.bean.WidgetFilterTypeInfo; +import com.fr.form.share.constants.ShareComponentConstants; +import com.fr.form.share.utils.ShareUtils; +import com.fr.general.ComparatorUtils; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/** + * Created by kerry on 2020-12-09 + */ +public enum StyleTheme { + + SIMPLE_FRESH("Fine-Plugin_Component_Style_Theme_Simple", "1"), + BUSINESS_STABLE("Fine-Plugin_Component_Style_Theme_Business", "2"), + LIVE_GORGEOUS("Fine-Plugin_Component_Style_Theme_Live", "3"), + COOL_TECHNOLOGY("Fine-Plugin_Component_Style_Theme_Cool", "4"), + OTHER_THEME("Fine-Plugin_Component_Style_Theme_Other", "5"); + + + private final String local; + private final String id; + + StyleTheme(String name, String id) { + this.local = name; + this.id = id; + } + + public String getLocText() { + return Toolkit.i18nText(this.local); + } + + public String getId() { + return this.id; + } + + private static List types() { + List list = new ArrayList<>(); + for (StyleTheme type : StyleTheme.values()) { + list.add(new StyleThemeBean(type.getId(), type.getLocText())); + } + return list; + } + + /** + * 获取样式风格属性list + * + * @return List + */ + public static List getStyleThemeTypeInfo() { + List widgetFilterTypeInfos = ShareUtils.getWidgetFilterTypeInfos(); + if (widgetFilterTypeInfos.isEmpty()) { + return types(); + } + WidgetFilterTypeInfo styleThemeFilterInfo = new WidgetFilterTypeInfo(); + for (WidgetFilterTypeInfo typeInfo : widgetFilterTypeInfos) { + if (ComparatorUtils.equals(ShareComponentConstants.STYLE_THEME_KEY, typeInfo.getKey())) { + styleThemeFilterInfo = typeInfo; + break; + } + } + List resultList = new ArrayList<>(); + List filterInfoList = styleThemeFilterInfo.getFilterItems(); + Iterator infoIterator = filterInfoList.iterator(); + while (infoIterator.hasNext()) { + WidgetFilterInfo filterInfo = infoIterator.next(); + if (!ComparatorUtils.equals(ShareComponentConstants.ALL_STYLE_THEME, filterInfo.getId())) { + resultList.add(new StyleThemeBean(filterInfo.getId(), filterInfo.getName())); + } + } + return resultList; + } + + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/exception/LackOfValueException.java b/designer-form/src/main/java/com/fr/design/mainframe/share/exception/LackOfValueException.java new file mode 100644 index 0000000000..04c6b9b49a --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/exception/LackOfValueException.java @@ -0,0 +1,14 @@ +package com.fr.design.mainframe.share.exception; + +import com.fr.design.i18n.Toolkit; + +/** + * created by Harrison on 2020/04/21 + **/ +public class LackOfValueException extends RuntimeException{ + + public LackOfValueException() { + + super(Toolkit.i18nText("Fine-Plugin_Lack_Val")); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/AbstractComponentTask.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/AbstractComponentTask.java new file mode 100644 index 0000000000..0e88a5bf95 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/AbstractComponentTask.java @@ -0,0 +1,9 @@ +package com.fr.design.mainframe.share.generate; + +/** + * created by Harrison on 2020/04/23 + **/ +public abstract class AbstractComponentTask implements ComponentTask { + + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/ComponentBanner.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/ComponentBanner.java new file mode 100644 index 0000000000..aa812b82a5 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/ComponentBanner.java @@ -0,0 +1,14 @@ +package com.fr.design.mainframe.share.generate; + +/** + * created by Harrison on 2020/04/13 + **/ +public interface ComponentBanner { + + /** + * 加载文字 + * + * @return 加载 + */ + String getLoadingText(); +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/ComponentCreatorProcessor.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/ComponentCreatorProcessor.java new file mode 100644 index 0000000000..4d38dc98a0 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/ComponentCreatorProcessor.java @@ -0,0 +1,20 @@ +package com.fr.design.mainframe.share.generate; + +import com.fr.design.mainframe.JTemplate; +import com.fr.form.share.DefaultSharableWidget; +import com.fr.form.share.bean.ComponentReuBean; +import com.fr.form.ui.Widget; +import com.fr.stable.fun.mark.Immutable; + +import java.util.Map; + +/** + * Created by kerry on 2020-07-30 + */ +public interface ComponentCreatorProcessor extends ComponentBanner, Immutable { + + String MARK_STRING = "ComponentCreatorProcessor"; + int CURRENT_LEVEL = 1; + + ComponentReuBean create(JTemplate jt, Map paraMap, Widget widget, DefaultSharableWidget info) throws Exception; +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/ComponentGenerator.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/ComponentGenerator.java new file mode 100644 index 0000000000..5728f8fee6 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/ComponentGenerator.java @@ -0,0 +1,22 @@ +package com.fr.design.mainframe.share.generate; + +/** + * created by Harrison on 2020/04/16 + **/ +public interface ComponentGenerator { + + /** + * 生成组件 + * + * @return 组件 + */ + boolean generate() throws Throwable; + + /** + * 耗时/速率 + * + * @return 时间 + */ + int speed(); + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/ComponentGeneratorCenter.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/ComponentGeneratorCenter.java new file mode 100644 index 0000000000..739ad2390f --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/ComponentGeneratorCenter.java @@ -0,0 +1,68 @@ +package com.fr.design.mainframe.share.generate; + +import com.fr.design.mainframe.share.Bean.ComponentGenerateInfo; +import com.fr.design.mainframe.share.generate.impl.ComponentPureGenerator; +import com.fr.design.mainframe.share.generate.impl.ComponentUploadGenerator; +import com.fr.design.mainframe.share.ui.base.ShareProgressBar; +import com.fr.log.FineLoggerFactory; + +import java.util.concurrent.Future; + +/** + * created by Harrison on 2020/04/13 + **/ +public class ComponentGeneratorCenter { + + private ComponentGenerateInfo info; + + public ComponentGeneratorCenter(ComponentGenerateInfo info) { + + this.info = info; + } + + public boolean generate() throws Exception { + + try { + + return generate0(); + } catch (RuntimeException e) { + throw e; + } catch (Throwable throwable) { + FineLoggerFactory.getLogger().error(throwable.getMessage(), throwable); + return false; + } finally { + ShareProgressBar.getInstance().completeNow(); + } + } + + private boolean generate0() throws Throwable{ + + ComponentGenerator generator = innerGenerator(); + + //ui + ShareProgressBar progressBar = ShareProgressBar.getInstance(); + progressBar.prepare(generator.speed()); + progressBar.monitor(); + + return generator.generate(); + } + + private void waitComplete(Future complete) { + + try { + complete.get(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + + private ComponentGenerator innerGenerator() { + + if (info.isAutoUpload()) { + return ComponentUploadGenerator.create(info); + } else { + return ComponentPureGenerator.create(info); + } + } + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/ComponentTask.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/ComponentTask.java new file mode 100644 index 0000000000..3fb8521f7e --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/ComponentTask.java @@ -0,0 +1,13 @@ +package com.fr.design.mainframe.share.generate; + +/** + * created by Harrison on 2020/04/23 + **/ +public interface ComponentTask { + + T execute() throws Exception; + + double indicator(); + + String getLoadingText(); +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/ComponentTaskAdaptor.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/ComponentTaskAdaptor.java new file mode 100644 index 0000000000..16b8f97746 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/ComponentTaskAdaptor.java @@ -0,0 +1,26 @@ +package com.fr.design.mainframe.share.generate; + +/** + * created by Harrison on 2020/04/23 + **/ +public abstract class ComponentTaskAdaptor extends AbstractComponentTask { + + private double indicator; + + private String loadingText; + + public ComponentTaskAdaptor(double indicator, String loadingText) { + this.indicator = indicator; + this.loadingText = loadingText; + } + + @Override + public double indicator() { + return this.indicator; + } + + @Override + public String getLoadingText() { + return this.loadingText; + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/impl/AbstractComponentCreatorProcessor.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/impl/AbstractComponentCreatorProcessor.java new file mode 100644 index 0000000000..e0d17bfed7 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/impl/AbstractComponentCreatorProcessor.java @@ -0,0 +1,24 @@ +package com.fr.design.mainframe.share.generate.impl; + +import com.fr.design.mainframe.share.generate.ComponentCreatorProcessor; +import com.fr.stable.fun.mark.API; + +/** + * Created by kerry on 2020-07-30 + */ +@API(level = ComponentCreatorProcessor.CURRENT_LEVEL) +public abstract class AbstractComponentCreatorProcessor implements ComponentCreatorProcessor { + + + @Override + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + @Override + public int layerIndex() { + return DEFAULT_LAYER_INDEX; + } + + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/impl/AbstractComponentGenerator.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/impl/AbstractComponentGenerator.java new file mode 100644 index 0000000000..6fb5141175 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/impl/AbstractComponentGenerator.java @@ -0,0 +1,161 @@ +package com.fr.design.mainframe.share.generate.impl; + +import com.fr.design.mainframe.share.Bean.ComponentGenerateInfo; +import com.fr.design.mainframe.share.generate.ComponentBanner; +import com.fr.design.mainframe.share.generate.ComponentCreatorProcessor; +import com.fr.design.mainframe.share.generate.ComponentGenerator; +import com.fr.design.mainframe.share.generate.ComponentTask; +import com.fr.design.mainframe.share.generate.task.ComponentCreator; +import com.fr.design.mainframe.share.ui.base.ShareProgressBar; +import com.fr.design.mainframe.share.util.ShareUIUtils; +import com.fr.log.FineLoggerFactory; +import com.fr.report.ExtraReportClassManager; +import com.fr.third.org.apache.commons.lang3.time.StopWatch; + +import javax.swing.SwingWorker; +import java.util.concurrent.BrokenBarrierException; +import java.util.concurrent.Callable; +import java.util.concurrent.CyclicBarrier; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.FutureTask; +import java.util.concurrent.TimeUnit; + +/** + * created by Harrison on 2020/04/16 + **/ +public abstract class AbstractComponentGenerator implements ComponentGenerator { + + /** + * 默认 40 ms + */ + private static final int DEFAULT_SPEED = 40; + + /** + * 进度 100 + */ + private static final int PROGRESS = 100; + + /** + * 每一个任务平均耗时 2000 ms + */ + private static final int PER_TIME = 2000; + + private final int speed; + + private ComponentGenerateInfo info; + + public AbstractComponentGenerator(ComponentGenerateInfo info, ComponentBanner... banners) { + this.info = info; + this.speed = calSpeed(banners); + } + + public ComponentGenerateInfo getInfo() { + return info; + } + + private int calSpeed(ComponentBanner... banners) { + + if (banners == null || banners.length == 0) { + return DEFAULT_SPEED; + } + return PER_TIME / (PROGRESS / banners.length); + } + + /** + * 进度条 100 + * 目前有 n 个任务 + * 每个任务至少 2000 ms + *

+ * 则平均速度为 2000 / (100/n) + */ + @Override + public int speed() { + + return this.speed; + } + + @Override + public boolean generate() throws Throwable { + + try { + return generate0(); + } catch (ExecutionException e) { + //抛出根本原因 + throw e.getCause(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + return false; + } + } + + protected abstract boolean generate0() throws InterruptedException, ExecutionException; + + protected T execute(final ComponentTask componentTask) throws InterruptedException, ExecutionException { + + final CyclicBarrier barrier = new CyclicBarrier(2); + Thread UIThread = new Thread(new FutureTask(new Callable() { + @Override + public Void call() throws Exception { + SwingWorker worker = new SwingWorker() { + @Override + protected Void doInBackground() throws Exception { + + StopWatch stopWatch = new StopWatch(); + stopWatch.start(); + + //ui更新 + doUIUpdate(); + + stopWatch.stop(); + long time = stopWatch.getTime(TimeUnit.MILLISECONDS); + if (time < 2000L) { + //不到 2 s + ShareUIUtils.wait((int) (2000L - time)); + } + + //完成更新 + finishUpdate(); + return null; + } + + private int finishUpdate() throws InterruptedException, BrokenBarrierException { + return barrier.await(); + } + + private void doUIUpdate() throws Exception { + ShareProgressBar.getInstance().updateProgress(componentTask.indicator(), componentTask.getLoadingText()); + } + }; + worker.execute(); + return null; + } + })); + UIThread.setName("Component-UIThread"); + + FutureTask task = new FutureTask<>(new Callable() { + @Override + public T call() throws Exception { + T result = componentTask.execute(); + barrier.await(); + return result; + } + }); + Thread workThread = new Thread(task); + workThread.setName("Component-WorkThread"); + parallel(UIThread, workThread); + return task.get(); + } + + private void parallel(Thread UIThread, Thread workThread) { + + UIThread.start(); + workThread.start(); + } + + + public static ComponentCreatorProcessor getComponentCreator(){ + ComponentCreatorProcessor processor = ExtraReportClassManager.getInstance().getSingle(ComponentCreatorProcessor.MARK_STRING, ComponentCreator.class); + return processor; + } + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/impl/ComponentPureGenerator.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/impl/ComponentPureGenerator.java new file mode 100644 index 0000000000..d03f552406 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/impl/ComponentPureGenerator.java @@ -0,0 +1,57 @@ +package com.fr.design.mainframe.share.generate.impl; + +import com.fr.design.mainframe.share.Bean.ComponentGenerateInfo; +import com.fr.design.mainframe.share.generate.ComponentCreatorProcessor; +import com.fr.design.mainframe.share.generate.ComponentTaskAdaptor; +import com.fr.design.mainframe.share.generate.task.ComponentGenerateComplete; +import com.fr.form.share.bean.ComponentReuBean; + +import java.util.concurrent.ExecutionException; + +/** + * created by Harrison on 2020/04/16 + **/ +public class ComponentPureGenerator extends AbstractComponentGenerator { + + private ComponentCreatorProcessor creator; + + private ComponentGenerateComplete complete; + + private ComponentPureGenerator(ComponentGenerateInfo info, ComponentCreatorProcessor creator, ComponentGenerateComplete complete) { + + super(info, creator, complete); + this.creator = creator; + this.complete = complete; + } + + public static ComponentPureGenerator create(ComponentGenerateInfo info) { + + ComponentCreatorProcessor creator = getComponentCreator(); + ComponentGenerateComplete complete = new ComponentGenerateComplete(); + return new ComponentPureGenerator(info, creator, complete); + } + + @Override + protected boolean generate0() throws InterruptedException, ExecutionException { + + final ComponentGenerateInfo info = getInfo(); + ComponentTaskAdaptor createTest = new ComponentTaskAdaptor(1.0, creator.getLoadingText()) { + @Override + public ComponentReuBean execute() throws Exception { + return creator.create(info.getJt(), info.getParaMap(), info.getWidget(), info.getInfo()); + } + }; + ComponentReuBean bean = execute(createTest); + + ComponentTaskAdaptor completeTask = new ComponentTaskAdaptor(1.0, complete.getLoadingText()) { + @Override + public Void execute() throws Exception { + complete.execute(); + return null; + } + }; + Void result = execute(completeTask); + return true; + } + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/impl/ComponentUploadGenerator.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/impl/ComponentUploadGenerator.java new file mode 100644 index 0000000000..58084c3446 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/impl/ComponentUploadGenerator.java @@ -0,0 +1,99 @@ +package com.fr.design.mainframe.share.generate.impl; + +import com.fr.design.mainframe.share.Bean.ComponentGenerateInfo; +import com.fr.design.mainframe.share.generate.ComponentCreatorProcessor; +import com.fr.design.mainframe.share.generate.ComponentTaskAdaptor; +import com.fr.design.mainframe.share.generate.task.ComponentDesensitize; +import com.fr.design.mainframe.share.generate.task.ComponentEncrypt; +import com.fr.design.mainframe.share.generate.task.ComponentUploadComplete; +import com.fr.design.mainframe.share.generate.task.ComponentUploader; +import com.fr.form.share.bean.ComponentReuBean; + +import java.util.concurrent.ExecutionException; + +/** + * created by Harrison on 2020/04/16 + **/ +public class ComponentUploadGenerator extends AbstractComponentGenerator { + + private ComponentCreatorProcessor creator; + + private ComponentEncrypt encrypt; + + private ComponentDesensitize desensitize; + + private ComponentUploader uploader; + + private ComponentUploadComplete complete; + + private ComponentUploadGenerator(ComponentGenerateInfo info, ComponentCreatorProcessor creator, ComponentEncrypt encrypt, ComponentDesensitize desensitize, ComponentUploader uploader, ComponentUploadComplete complete) { + + super(info, creator, desensitize, encrypt, uploader); + this.creator = creator; + this.encrypt = encrypt; + this.desensitize = desensitize; + this.uploader = uploader; + this.complete = complete; + } + + public static ComponentUploadGenerator create(ComponentGenerateInfo info) { + + ComponentCreatorProcessor creator = getComponentCreator(); + ComponentUploader uploader = new ComponentUploader(); + ComponentEncrypt encrypt = new ComponentEncrypt(); + ComponentDesensitize desensitize = new ComponentDesensitize(); + ComponentUploadComplete complete = new ComponentUploadComplete(); + return new ComponentUploadGenerator(info, creator, encrypt, desensitize, uploader, complete); + } + + @Override + protected boolean generate0() throws InterruptedException, ExecutionException { + final ComponentGenerateInfo info = getInfo(); + //创建 + ComponentTaskAdaptor createTask = new ComponentTaskAdaptor(0.20, creator.getLoadingText()) { + @Override + public ComponentReuBean execute() throws Exception { + return creator.create(info.getJt(), info.getParaMap(), info.getWidget(), info.getInfo()); + } + }; + final ComponentReuBean plainBean = execute(createTask); + + //脱敏 + ComponentTaskAdaptor desensitizeTask = new ComponentTaskAdaptor(0.60, desensitize.getLoadingText()) { + @Override + public Object execute() throws Exception { + desensitize.execute(); + return null; + } + }; + execute(desensitizeTask); + + //加密 + ComponentTaskAdaptor encryptTask = new ComponentTaskAdaptor(0.85, encrypt.getLoadingText()) { + @Override + public ComponentReuBean execute() throws Exception { + return encrypt.execute(plainBean); + } + }; + final ComponentReuBean encryptBean = execute(encryptTask); + + //上传 + ComponentTaskAdaptor uploadTask = new ComponentTaskAdaptor(1.0, uploader.getLoadingText()) { + @Override + public Boolean execute() throws Exception { + return uploader.upload(encryptBean.getPath()); + } + }; + Boolean success = execute(uploadTask); + + //完成 + final ComponentTaskAdaptor completeTask = new ComponentTaskAdaptor(1.0, complete.getLoadingText()) { + @Override + public Boolean execute() throws Exception { + return complete.execute(); + } + }; + return success && execute(completeTask); + } + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentCreator.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentCreator.java new file mode 100644 index 0000000000..e675d7025f --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentCreator.java @@ -0,0 +1,114 @@ +package com.fr.design.mainframe.share.generate.task; + +import com.fr.base.iofile.attr.ExtendSharableAttrMark; +import com.fr.base.iofile.attr.SharableAttrMark; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.JTemplate; +import com.fr.design.mainframe.share.generate.impl.AbstractComponentCreatorProcessor; +import com.fr.form.main.Form; +import com.fr.form.main.WidgetGatherAdapter; +import com.fr.form.share.DefaultSharableWidget; +import com.fr.form.share.EmbeddedConverter; +import com.fr.form.share.bean.ComponentReuBean; +import com.fr.form.share.editor.DefaultSharableEditor; +import com.fr.form.share.editor.PlainSharableEditor; +import com.fr.form.share.utils.ShareUtils; +import com.fr.form.ui.AbstractBorderStyleWidget; +import com.fr.form.ui.Widget; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.fun.IOFileAttrMark; +import com.fr.workspace.WorkContext; +import org.jetbrains.annotations.NotNull; + +import java.util.HashMap; +import java.util.Map; + +/** + * created by Harrison on 2020/04/13 + **/ +public class ComponentCreator extends AbstractComponentCreatorProcessor { + + /** + * 生成组件 + * 返回组件的路径 + * + * @return 路径 + */ + @Override + public ComponentReuBean create(JTemplate jt, Map paraMap, Widget widget, DefaultSharableWidget info) throws Exception { + + + // 遍历判断是否存在共享组件 + checkOriginStatus(widget, info); + + // 导出内置数据集 + Form form = embeddedForm(jt, paraMap); + + // 创建组件 + DefaultSharableEditor editor = createSharableEditor(form, paraMap, widget, info); + + // 生成组件 + String generatePath = generate(editor, info); + + + return new ComponentReuBean(generatePath, editor, info); + } + + protected void checkOriginStatus(Widget widget, final DefaultSharableWidget info) { + + Form.traversalWidget(widget, new WidgetGatherAdapter() { + @Override + public void dealWith(Widget widget) { + + AbstractBorderStyleWidget borderStyleWidget = (AbstractBorderStyleWidget) widget; + IOFileAttrMark attrMark = borderStyleWidget.getWidgetAttrMark(SharableAttrMark.XML_TAG); + if (attrMark != null) { + info.setTransform(); + } + } + }, AbstractBorderStyleWidget.class); + } + + @Override + public String getLoadingText() { + + return Toolkit.i18nText("Fine-Plugin_Component_Generate_Ing"); + } + + /** + * 内置数据集处理 + * + * @return 返回 + */ + protected Form embeddedForm(JTemplate jt, Map paraMap) throws Exception { + + jt.stopEditing(); + + Form tpl = null; + try { + tpl = (Form) jt.getTarget().clone(); + } catch (CloneNotSupportedException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + +// //内置数据集 + EmbeddedConverter embeddedConverter = WorkContext.getCurrent().get(EmbeddedConverter.class); + embeddedConverter.convertToEmbeddedTableData(tpl, paraMap); + + return tpl; + } + + @NotNull + protected DefaultSharableEditor createSharableEditor(Form form, Map paraMap, Widget widget, DefaultSharableWidget info) { + + String uuid = info.getId(); + ((AbstractBorderStyleWidget) widget).addWidgetAttrMark(new SharableAttrMark()); + ((AbstractBorderStyleWidget) widget).addWidgetAttrMark(new ExtendSharableAttrMark(uuid)); + return new PlainSharableEditor(uuid, widget, form, (HashMap) paraMap); + } + + protected String generate(Widget editor, DefaultSharableWidget info) throws Exception { + + return ShareUtils.generateModule(editor, info); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentDesensitize.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentDesensitize.java new file mode 100644 index 0000000000..c08a132b7d --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentDesensitize.java @@ -0,0 +1,44 @@ +package com.fr.design.mainframe.share.generate.task; + +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.share.generate.ComponentBanner; +import com.fr.form.share.exception.NetWorkFailedException; +import com.fr.general.http.HttpRequest; +import com.fr.general.http.HttpToolbox; +import com.fr.log.FineLoggerFactory; +import com.fr.third.org.apache.http.HttpStatus; +import com.fr.third.org.apache.http.client.methods.CloseableHttpResponse; + +/** + * created by Harrison on 2020/04/22 + **/ +public class ComponentDesensitize implements ComponentBanner { + + private static final String TEST_URL = "http://www.baidu.com"; + + public void execute() { + + if (!testNet()) { + throw new NetWorkFailedException(); + } + } + + private boolean testNet() { + + try { + HttpRequest httpRequest = HttpRequest.custom().url(TEST_URL).build(); + CloseableHttpResponse response = HttpToolbox.execute(httpRequest); + if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + return true; + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return false; + } + + @Override + public String getLoadingText() { + return Toolkit.i18nText("Fine-Plugin_Component_Desensitize"); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentEncrypt.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentEncrypt.java new file mode 100644 index 0000000000..be959aac8c --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentEncrypt.java @@ -0,0 +1,28 @@ +package com.fr.design.mainframe.share.generate.task; + +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.share.generate.ComponentBanner; +import com.fr.form.share.bean.ComponentReuBean; +import com.fr.workspace.WorkContext; + +/** + * created by Harrison on 2020/04/22 + **/ +public class ComponentEncrypt implements ComponentBanner { + + public ComponentReuBean execute(ComponentReuBean bean) throws Exception { + + try { + return bean; + } catch (Exception e) { + String path = bean.getPath(); + WorkContext.getWorkResource().delete(path); + throw e; + } + } + + @Override + public String getLoadingText() { + return Toolkit.i18nText("Fine-Plugin_Component_Encrypt"); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentGenerateComplete.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentGenerateComplete.java new file mode 100644 index 0000000000..1e3b905adc --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentGenerateComplete.java @@ -0,0 +1,19 @@ +package com.fr.design.mainframe.share.generate.task; + +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.share.generate.ComponentBanner; + +/** + * created by Harrison on 2020/04/13 + **/ +public class ComponentGenerateComplete implements ComponentBanner { + + public void execute() throws InterruptedException { + } + + @Override + public String getLoadingText() { + + return Toolkit.i18nText("Fine-Plugin_Component_Generate_Success"); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentUploadComplete.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentUploadComplete.java new file mode 100644 index 0000000000..5113b8684f --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentUploadComplete.java @@ -0,0 +1,19 @@ +package com.fr.design.mainframe.share.generate.task; + +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.share.generate.ComponentBanner; + +/** + * created by Harrison on 2020/06/16 + **/ +public class ComponentUploadComplete implements ComponentBanner { + + public boolean execute() throws InterruptedException { + return true; + } + + @Override + public String getLoadingText() { + return Toolkit.i18nText("Fine-Plugin_Component_Upload_Success"); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentUploader.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentUploader.java new file mode 100644 index 0000000000..8e044f7a35 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentUploader.java @@ -0,0 +1,153 @@ +package com.fr.design.mainframe.share.generate.task; + +import com.fr.config.MarketConfig; +import com.fr.design.i18n.Toolkit; +import com.fr.form.share.config.ComponentReuseConfigManager; +import com.fr.design.mainframe.share.generate.ComponentBanner; +import com.fr.io.utils.ResourceIOUtils; +import com.fr.log.FineLoggerFactory; +import com.fr.third.org.apache.http.HttpEntity; +import com.fr.third.org.apache.http.HttpStatus; +import com.fr.third.org.apache.http.client.config.CookieSpecs; +import com.fr.third.org.apache.http.client.config.RequestConfig; +import com.fr.third.org.apache.http.client.entity.UrlEncodedFormEntity; +import com.fr.third.org.apache.http.client.methods.CloseableHttpResponse; +import com.fr.third.org.apache.http.client.methods.HttpPost; +import com.fr.third.org.apache.http.conn.ssl.NoopHostnameVerifier; +import com.fr.third.org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import com.fr.third.org.apache.http.entity.mime.HttpMultipartMode; +import com.fr.third.org.apache.http.entity.mime.MultipartEntityBuilder; +import com.fr.third.org.apache.http.entity.mime.content.ByteArrayBody; +import com.fr.third.org.apache.http.impl.client.BasicCookieStore; +import com.fr.third.org.apache.http.impl.client.CloseableHttpClient; +import com.fr.third.org.apache.http.impl.client.HttpClients; +import com.fr.third.org.apache.http.message.BasicNameValuePair; +import com.fr.third.org.apache.http.ssl.SSLContextBuilder; +import com.fr.third.org.apache.http.ssl.TrustStrategy; +import com.fr.workspace.WorkContext; +import org.jetbrains.annotations.NotNull; + +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.SSLContext; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; +import java.util.ArrayList; +import java.util.List; + +/** + * 组件上传 + *

+ * created by Harrison on 2020/04/13 + **/ +public class ComponentUploader implements ComponentBanner { + + //private static final String MARKET_LOGIN = CloudCenter.getInstance().acquireUrlByKind("market.login", "https://market.fanruan.com/ShopServer?pg=login&_=1590635085629"); + //private static final String MARKET_REU_FILE_UPLOAD = CloudCenter.getInstance().acquireUrlByKind("market.reuses.upload", "https://market.fanruan.com/reuses/upload"); + + /** + * 先用临时的。 暂时不上线 + */ + private static final String URL_MARKET_LOGIN = ComponentReuseConfigManager.getInstance().getMarketLoginUrl(); + private static final String URL_MARKET_REU_FILE_UPLOAD = ComponentReuseConfigManager.getInstance().getComponentUploadUrl(); + + private static final String KEY_USERNAME = "username"; + private static final String KEY_PASSWORD = "password"; + private static final String KEY_FILE = "file"; + + public boolean upload(String path) { + + boolean success = false; + try { + success = upload0(path); + } catch (Exception e) { + WorkContext.getWorkResource().delete(path); + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return success; + } + + @Override + public String getLoadingText() { + + return Toolkit.i18nText("Fine-Plugin_Component_Encrypt"); + } + + private boolean upload0(String path) throws Exception { + + CloseableHttpClient client = createClient(); + if (login(client)) { + HttpPost uploadRequest = new HttpPost(URL_MARKET_REU_FILE_UPLOAD); + byte[] bytes = WorkContext.getWorkResource().readFully(path); + String fileName = ResourceIOUtils.getName(path); + HttpEntity reqEntity = MultipartEntityBuilder.create() + .setCharset(StandardCharsets.UTF_8) + .setMode(HttpMultipartMode.BROWSER_COMPATIBLE) + // 相当于 + .addPart(KEY_FILE, new ByteArrayBody(bytes, fileName)) + .build(); + uploadRequest.setEntity(reqEntity); + + // 发起请求 并返回请求的响应 + CloseableHttpResponse uploadResponse = client.execute(uploadRequest); + FineLoggerFactory.getLogger().info(uploadResponse.toString()); + return uploadResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK; + } + return false; + } + + private boolean login(CloseableHttpClient client) throws IOException { + + String bbsUsername = MarketConfig.getInstance().getBbsUsername(); + String bbsPassword = MarketConfig.getInstance().getBbsPassword(); + List pairs = new ArrayList<>(); + pairs.add(new BasicNameValuePair(KEY_USERNAME, bbsUsername)); + pairs.add(new BasicNameValuePair(KEY_PASSWORD, bbsPassword)); + + HttpPost login = new HttpPost(URL_MARKET_LOGIN); + login.setEntity(new UrlEncodedFormEntity(pairs, StandardCharsets.UTF_8)); + login.addHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36"); + login.addHeader("Connection", "keep-alive"); + CloseableHttpResponse loginResponse = client.execute(login); + FineLoggerFactory.getLogger().info(loginResponse.toString()); + return loginResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK; + } + + private static CloseableHttpClient createClient() throws Exception { + + SSLConnectionSocketFactory connectionFactory = createSSL(); + + BasicCookieStore cookieStore = new BasicCookieStore(); + return HttpClients.custom() + .setDefaultRequestConfig(RequestConfig.custom() + .setCookieSpec(CookieSpecs.STANDARD) + .setSocketTimeout(2000) + .setConnectTimeout(5000) + .setConnectionRequestTimeout(5000) + .setAuthenticationEnabled(false) + .build()) + .setDefaultCookieStore(cookieStore) + .setSSLSocketFactory(connectionFactory) + .build(); + } + + @NotNull + private static SSLConnectionSocketFactory createSSL() throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException { + SSLContext sslContext = SSLContextBuilder + .create() + .loadTrustMaterial(new TrustStrategy() { + @Override + public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { + return true; + } + }) + .build(); + HostnameVerifier allowAllHosts = new NoopHostnameVerifier(); + return new SSLConnectionSocketFactory(sslContext, allowAllHosts); + } + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/group/ui/BaseGroupDialog.java b/designer-form/src/main/java/com/fr/design/mainframe/share/group/ui/BaseGroupDialog.java new file mode 100644 index 0000000000..e9d5d490bb --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/group/ui/BaseGroupDialog.java @@ -0,0 +1,59 @@ +package com.fr.design.mainframe.share.group.ui; + +import com.fr.base.BaseUtils; +import com.fr.design.dialog.UIDialog; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.i18n.Toolkit; +import com.fr.design.utils.gui.GUICoreUtils; + +import javax.swing.JDialog; +import java.awt.Dimension; +import java.awt.Frame; + +/** + * @Author: Yuan.Wang + * @Date: 2020/12/9 + */ +abstract public class BaseGroupDialog extends UIDialog { + public BaseGroupDialog(Frame parent) { + super(parent); + } + + protected UIButton createConfirmButton() { + UIButton confirmButton; + + confirmButton = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Confirm")); + confirmButton.setPreferredSize(new Dimension(60, 25)); + confirmButton.setEnabled(false); + confirmButton.addActionListener(e -> confirmClose()); + return confirmButton; + } + + protected UIButton createCancelButton() { + UIButton cancelButton = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Cancel")); + cancelButton.setPreferredSize(new Dimension(60, 25)); + + cancelButton.addActionListener(e -> dispose()); + return cancelButton; + } + + /** + * 点击确定后的处理方法 + */ + abstract protected void confirmClose(); + + protected void initStyle() { + this.setSize(340, 180); + this.setResizable(false); + this.setAlwaysOnTop(true); + this.setIconImage(BaseUtils.readImage("/com/fr/base/images/oem/logo.png")); + this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); + GUICoreUtils.centerWindow(this); + this.setVisible(true); + } + + @Override + public void checkValid() throws Exception { + // do nothing + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/group/ui/GroupFileDialog.java b/designer-form/src/main/java/com/fr/design/mainframe/share/group/ui/GroupFileDialog.java new file mode 100644 index 0000000000..33a6824f4b --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/group/ui/GroupFileDialog.java @@ -0,0 +1,173 @@ +package com.fr.design.mainframe.share.group.ui; + +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.stable.StringUtils; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Frame; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; + +/** + * @Author: Yuan.Wang + * @Date: 2020/10/29 + */ +abstract public class GroupFileDialog extends BaseGroupDialog { + + private UITextField nameField; + + private UILabel warnLabel; + + private final UIButton confirmButton; + + public GroupFileDialog(Frame frame, String title) { + this(frame, title, StringUtils.EMPTY); + + } + + public GroupFileDialog(Frame frame, String title, String defaultName) { + super(frame); + this.setLayout(new BorderLayout()); + this.setModal(true); + + setTitle(title); + // 标签 + UILabel newNameLabel = creteNewNameLabel(); + // 输入框 + createNameField(defaultName); + // 重名提示 + createWarnLabel(); + // 确认按钮 + confirmButton = createConfirmButton(); + // 取消按钮 + UIButton cancelButton = createCancelButton(); + + JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 5)); + topPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 0, 15)); + topPanel.add(newNameLabel); + topPanel.add(nameField); + + JPanel midPanel = new JPanel(new BorderLayout()); + midPanel.setBorder(BorderFactory.createEmptyBorder(0, 15, 0, 15)); + midPanel.add(warnLabel, BorderLayout.WEST); + + JPanel bottomPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + bottomPanel.setBorder(BorderFactory.createEmptyBorder(0, 15, 0, 15)); + bottomPanel.add(confirmButton); + bottomPanel.add(cancelButton); + + this.add( + TableLayoutHelper.createTableLayoutPane( + new Component[][]{ + new Component[]{topPanel}, + new Component[]{midPanel}, + new Component[]{bottomPanel} + }, + new double[]{TableLayout.FILL, TableLayout.FILL, TableLayout.FILL}, + new double[]{TableLayout.FILL} + ), BorderLayout.CENTER); + initStyle(); + } + + protected String getFileName() { + return nameField.getText().trim(); + } + + protected void validInput() { + //抽成模板方法 + String userInput = getFileName(); + + if (StringUtils.isEmpty(userInput)) { + confirmButton.setEnabled(false); + return; + } + String name = nameField.getText().trim(); + + if (isDuplicate(name)) { + nameField.selectAll(); + // 如果文件名已存在,则灰掉确认按钮 + warnLabel.setText(Toolkit.i18nText("Fine-Plugin_Component_Group_Repeat_Name_Info")); + warnLabel.setVisible(true); + confirmButton.setEnabled(false); + } else { + warnLabel.setVisible(false); + confirmButton.setEnabled(true); + } + } + + /** + * 点击确定后的处理方法 + */ + abstract protected void confirmClose(); + + /** + * 是否重名 + */ + abstract protected boolean isDuplicate(String fileName); + + + private UILabel creteNewNameLabel() { + // 输入框前提示 + UILabel newNameLabel = new UILabel(Toolkit.i18nText("Fine-Plugin_Component_Group_Enter_New_Folder_Name")); + newNameLabel.setHorizontalAlignment(SwingConstants.RIGHT); + newNameLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 10)); + newNameLabel.setPreferredSize(new Dimension(84, 16)); + return newNameLabel; + } + + private void createNameField(String name) { + // 文件名输入框 + nameField = new UITextField(name); + nameField.getDocument().addDocumentListener(new DocumentListener() { + + public void changedUpdate(DocumentEvent e) { + validInput(); + } + + public void insertUpdate(DocumentEvent e) { + validInput(); + } + + public void removeUpdate(DocumentEvent e) { + validInput(); + } + }); + nameField.selectAll(); + nameField.setPreferredSize(new Dimension(200, 20)); + // 增加enter以及esc快捷键的支持 + nameField.addKeyListener(new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { + dispose(); + } else if (e.getKeyCode() == KeyEvent.VK_ENTER) { + if (confirmButton.isEnabled()) { + confirmClose(); + } + } + } + }); + } + + private void createWarnLabel() { + warnLabel = new UILabel(); + warnLabel.setPreferredSize(new Dimension(300, 30)); + warnLabel.setHorizontalAlignment(SwingConstants.LEFT); + warnLabel.setForeground(Color.RED); + warnLabel.setVisible(false); + } +} \ No newline at end of file diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/group/ui/GroupMoveDialog.java b/designer-form/src/main/java/com/fr/design/mainframe/share/group/ui/GroupMoveDialog.java new file mode 100644 index 0000000000..64dae45da4 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/group/ui/GroupMoveDialog.java @@ -0,0 +1,79 @@ +package com.fr.design.mainframe.share.group.ui; + +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.icombobox.UIComboBox; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.form.share.group.DefaultShareGroupManager; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Frame; + +/** + * @Author: Yuan.Wang + * @Date: 2020/12/9 + */ +abstract public class GroupMoveDialog extends BaseGroupDialog { + private UIComboBox selectGroupBox; + + public GroupMoveDialog(Frame frame) { + super(frame); + this.setLayout(new BorderLayout()); + this.setModal(true); + + setTitle(Toolkit.i18nText("Fine-Plugin_Component_Group_Move")); + // 标签 + UILabel newNameLabel = creteNewNameLabel(); + // 输入框 + createSwitchGroupBox(); + + // 确认按钮 + UIButton confirmButton = createConfirmButton(); + confirmButton.setEnabled(true); + // 取消按钮 + UIButton cancelButton = createCancelButton(); + + JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 5)); + topPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 0, 15)); + topPanel.add(newNameLabel); + topPanel.add(selectGroupBox); + + JPanel bottomPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + bottomPanel.setBorder(BorderFactory.createEmptyBorder(0, 15, 0, 15)); + bottomPanel.setPreferredSize(new Dimension(340, 45)); + bottomPanel.add(confirmButton); + bottomPanel.add(cancelButton); + this.add(topPanel, BorderLayout.CENTER); + this.add(bottomPanel, BorderLayout.SOUTH); + + initStyle(); + + + } + + private void createSwitchGroupBox() { + // 文件名输入框 + selectGroupBox = new UIComboBox(DefaultShareGroupManager.getInstance().getAllGroup()); + selectGroupBox.setPreferredSize(new Dimension(225, 20)); + } + + + private UILabel creteNewNameLabel() { + // 输入框前提示 + UILabel newNameLabel = new UILabel(Toolkit.i18nText("Fine-Plugin_Component_Group_Select")); + newNameLabel.setHorizontalAlignment(SwingConstants.RIGHT); + newNameLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 10)); + newNameLabel.setPreferredSize(new Dimension(60, 16)); + return newNameLabel; + } + + protected UIComboBox getSelectGroupBox() { + return selectGroupBox; + } + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/select/ComponentTransformer.java b/designer-form/src/main/java/com/fr/design/mainframe/share/select/ComponentTransformer.java new file mode 100644 index 0000000000..de61f29d23 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/select/ComponentTransformer.java @@ -0,0 +1,25 @@ +package com.fr.design.mainframe.share.select; + +import com.fr.design.designer.creator.XCreator; +import com.fr.design.mainframe.FormSelection; +import com.fr.form.ui.Widget; +import com.fr.third.org.apache.commons.lang3.tuple.Triple; + +import java.awt.Rectangle; + +/** + * 组件选择器 + *

+ * created by Harrison on 2020/06/11 + **/ +public interface ComponentTransformer { + + /** + * 获取选择到组件 + * + * @return 组件相关信息 + */ + Triple transform(FormSelection selection); + +} + diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/select/ComponentTransformerFactory.java b/designer-form/src/main/java/com/fr/design/mainframe/share/select/ComponentTransformerFactory.java new file mode 100644 index 0000000000..bf9e6ea613 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/select/ComponentTransformerFactory.java @@ -0,0 +1,53 @@ +package com.fr.design.mainframe.share.select; + +import com.fr.design.designer.creator.XCreator; +import com.fr.design.mainframe.FormSelection; +import com.fr.form.ui.Widget; +import com.fr.stable.AssistUtils; +import com.fr.third.org.apache.commons.lang3.tuple.Triple; +import org.jetbrains.annotations.Nullable; + +import java.awt.Rectangle; + +/** + * created by Harrison on 2020/06/11 + **/ +public class ComponentTransformerFactory { + + private TransformerKey lastKey; + private Triple lastCache; + + private ComponentTransformer transformer = new ComponentTransformerImpl(); + + private static class InstanceHolder { + + private static ComponentTransformerFactory INSTANCE = new ComponentTransformerFactory(); + } + + public static ComponentTransformerFactory getInstance() { + + return InstanceHolder.INSTANCE; + } + + @Nullable + public Triple transform(FormSelection selection) { + + if (selection == null) { + return null; + } + TransformerKey transformerKey = new TransformerKey(selection); + if (AssistUtils.equals(lastKey, transformerKey)) { + return lastCache; + } + Triple triple = transformer.transform(selection); + //缓存一下。 + cache(transformerKey, triple); + return triple; + } + + private void cache(TransformerKey transformerKey, Triple triple) { + + this.lastKey = transformerKey; + this.lastCache = triple; + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/select/ComponentTransformerImpl.java b/designer-form/src/main/java/com/fr/design/mainframe/share/select/ComponentTransformerImpl.java new file mode 100644 index 0000000000..a7b23a994f --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/select/ComponentTransformerImpl.java @@ -0,0 +1,156 @@ +package com.fr.design.mainframe.share.select; + +import com.fr.base.FRContext; +import com.fr.design.designer.beans.adapters.component.CompositeComponentAdapter; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.designer.creator.XWAbsoluteLayout; +import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.file.HistoryTemplateListCache; +import com.fr.design.mainframe.FormSelection; +import com.fr.design.mainframe.JTemplate; +import com.fr.design.mainframe.WidgetPropertyPane; +import com.fr.form.main.Form; +import com.fr.form.share.bean.ShareLayoutWidget; +import com.fr.form.ui.AbstractBorderStyleWidget; +import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WAbsoluteBodyLayout; +import com.fr.form.ui.container.WAbsoluteLayout; +import com.fr.form.ui.container.WBorderLayout; +import com.fr.form.ui.container.WFitLayout; +import com.fr.form.ui.container.WLayout; +import com.fr.form.ui.container.WParameterLayout; +import com.fr.form.ui.widget.CRBoundsWidget; +import com.fr.general.Inter; +import com.fr.log.FineLoggerFactory; +import com.fr.third.org.apache.commons.lang3.tuple.ImmutableTriple; +import com.fr.third.org.apache.commons.lang3.tuple.Triple; +import com.fr.web.FormCompVisibleUtils; +import org.jetbrains.annotations.Nullable; + +import java.awt.Dimension; +import java.awt.Rectangle; +import java.awt.Toolkit; +import java.util.Comparator; +import java.util.Map; +import java.util.TreeMap; + +/** + * created by Harrison on 2020/06/11 + **/ +public class ComponentTransformerImpl implements ComponentTransformer { + + @Override + @Nullable + public Triple transform(FormSelection selection) { + + XCreator selectedCreator; + Widget selectedWidget; + if (selection == null) { + return null; + } + Rectangle selectionBounds = selection.getSelctionBounds(); + Rectangle selectedTriple = new Rectangle(0, 0, selectionBounds.width, selectionBounds.height); + XCreator[] xCreators = selection.getSelectedCreators(); + if (xCreators.length == 1) { + selectedCreator = xCreators[0]; + selectedWidget = selectedCreator.toData(); + } else { + + WAbsoluteLayout wAbsoluteLayout = new WAbsoluteLayout("absolute"); + wAbsoluteLayout.setCompState(WAbsoluteLayout.STATE_FIT); + Map widgetMap = new TreeMap<>( + new Comparator() { + @Override + public int compare(Integer o1, Integer o2) { + return o2.compareTo(o1); + } + } + ); + //控件上下层关系需要继承下来 + for (XCreator xCreator : xCreators) { + XLayoutContainer container = (XLayoutContainer) xCreator.getParent(); + int i = container.getComponentZOrder(xCreator); + widgetMap.put(i, xCreator.toData()); + } + JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + Form form = (Form) jt.getTarget(); + for (Widget innerWidget : widgetMap.values()) { + WLayout parentWLayout = getParentLayout(form, innerWidget); + if (parentWLayout == null){ + continue; + } + try { + CRBoundsWidget boundsWidget = (CRBoundsWidget) parentWLayout.getBoundsWidget(innerWidget).clone(); + adaptBounds(boundsWidget, selectionBounds); + wAbsoluteLayout.addWidget(boundsWidget); + } catch (CloneNotSupportedException e1) { + FRContext.getLogger().error(e1.getMessage(), e1); + } + } + wAbsoluteLayout.setDesigningResolution(Toolkit.getDefaultToolkit().getScreenSize()); + + selectedCreator = new XWAbsoluteLayout(wAbsoluteLayout, new Dimension(selectedTriple.width, selectedTriple.height)); + selectedWidget = selectedCreator.toData(); + + //将选中的类型初始化一下。 + CompositeComponentAdapter adapter = new CompositeComponentAdapter(WidgetPropertyPane.getInstance().getEditingFormDesigner(), selectedCreator); + adapter.initialize(); + //并且初始化一次。缓存一下值。 + selectedCreator.repaint(); + } + try { + if (!supportShared(selectedWidget)) { + return null; + } + if (!(selectedWidget instanceof AbstractBorderStyleWidget)) { + selectedWidget = new ShareLayoutWidget(selectedWidget); + } + selectedWidget = (Widget) selectedWidget.clone(); + } catch (CloneNotSupportedException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + FineJOptionPane.showMessageDialog(null, Inter.getLocText("FR-Plugin_Share_Module_Failed")); + } + return new ImmutableTriple<>(selectedWidget, selectedCreator, selectedTriple); + } + + //先从body中找,如果找不到再从参数面板中找 + @Nullable + private WLayout getParentLayout(Form form, Widget innerWidget) { + WLayout bodyLayout = (WLayout) ((WBorderLayout) form.getContainer()).getLayoutWidget(WBorderLayout.CENTER); + WLayout paraLayout = (WLayout) ((WBorderLayout) form.getContainer()).getLayoutWidget(WBorderLayout.NORTH); + WLayout parentLayout = FormCompVisibleUtils.findFitLayout(bodyLayout, innerWidget); + if (parentLayout == null && paraLayout != null) { + parentLayout = FormCompVisibleUtils.findFitLayout(paraLayout, innerWidget); + } + return parentLayout; + } + + //组件集合产生绝对布局的时候,子组件的bounds需要去掉主框架的xy值,保证边界和绝对布局对齐 + private static void adaptBounds(CRBoundsWidget cRBoundsWidget, Rectangle delRec) { + Rectangle rec = cRBoundsWidget.getBounds(); + int originX = rec.x; + int originY = rec.y; + int delX = delRec.x; + int delY = delRec.y; + cRBoundsWidget.setBounds(new Rectangle(originX - delX, originY - delY, rec.width, rec.height)); + } + + private static boolean supportShared(Widget widget) { + + return notBody(widget) && notForm(widget); + } + + private static boolean notBody(Widget widget) { + return !(widget instanceof WAbsoluteBodyLayout || widget instanceof WFitLayout || widget instanceof WParameterLayout); + } + + private static boolean notForm(Widget widget) { + if (!(widget instanceof WBorderLayout)) { + return true; + } + Widget centerWidget = ((WBorderLayout) widget).getLayoutWidget(WBorderLayout.CENTER); + return notBody(centerWidget); + + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/select/TransformerKey.java b/designer-form/src/main/java/com/fr/design/mainframe/share/select/TransformerKey.java new file mode 100644 index 0000000000..2218702721 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/select/TransformerKey.java @@ -0,0 +1,112 @@ +package com.fr.design.mainframe.share.select; + +import com.fr.design.designer.creator.XCreator; +import com.fr.design.mainframe.FormSelection; +import com.fr.form.ui.Widget; +import com.fr.general.ComparatorUtils; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.AssistUtils; +import org.jetbrains.annotations.Nullable; + +import java.awt.Rectangle; +import java.util.Arrays; +import java.util.Objects; +import java.util.UUID; + +/** + * created by Harrison on 2020/06/11 + **/ +public class TransformerKey { + + private Rectangle selectionBounds; + + private Widget[] widgets; + + public TransformerKey(FormSelection selection) { + this.selectionBounds = selection.getSelctionBounds(); + this.widgets = deepData(selection.getSelectedCreators()); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + TransformerKey that = (TransformerKey) o; + return Objects.equals(selectionBounds, that.selectionBounds) && + Arrays.equals(widgets, that.widgets); + } + + @Override + public int hashCode() { + int result = Objects.hash(selectionBounds); + result = 31 * result + + Arrays.hashCode(widgets); + return result; + } + + private Widget[] deepData(XCreator[] xCreators) { + if (xCreators == null) { + return new UniqueWidgetWrapper[0]; + } + Widget[] widgets = new Widget[xCreators.length]; + int i = 0; + for (XCreator xCreator : xCreators) { + widgets[i++] = new UniqueWidgetWrapper(cloneWidget(xCreator)); + } + return widgets; + } + + @Nullable + private Widget cloneWidget(XCreator xCreator) { + + try { + return xCreator.toData() != null ? (Widget) xCreator.toData().clone() : null; + } catch (CloneNotSupportedException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + return null; + } + } + + private static class UniqueWidgetWrapper extends Widget { + private String uuid; + private Widget widget; + + public UniqueWidgetWrapper(Widget widget) { + this.widget = widget; + this.uuid = UUID.randomUUID().toString(); + } + + @Override + public String getXType() { + return "UniqueWidgetWrapper"; + } + + @Override + public boolean isEditor() { + return false; + } + + @Override + public String[] supportedEvents() { + return new String[0]; + } + + /** + * hash码 + * + * @return 返回int + */ + @Override + public int hashCode() { + return 31 * super.hashCode() + AssistUtils.hashCode(this.uuid, this.widget); + } + + @Override + public boolean equals(Object obj) { + return obj instanceof UniqueWidgetWrapper + && super.equals(obj) + && ComparatorUtils.equals(((UniqueWidgetWrapper) obj).uuid, this.uuid) + && ComparatorUtils.equals(((UniqueWidgetWrapper) obj).widget, this.widget); + } + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/sort/OnlineWidgetSortType.java b/designer-form/src/main/java/com/fr/design/mainframe/share/sort/OnlineWidgetSortType.java new file mode 100644 index 0000000000..94a17d8553 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/sort/OnlineWidgetSortType.java @@ -0,0 +1,153 @@ +package com.fr.design.mainframe.share.sort; + +import com.fr.design.i18n.Toolkit; +import com.fr.form.share.bean.OnlineShareWidget; +import com.fr.form.share.bean.SortParameter; +import com.fr.form.share.utils.ShareUtils; +import com.fr.general.ComparatorUtils; +import com.fr.general.GeneralContext; + +import java.text.Collator; +import java.util.Arrays; +import java.util.Comparator; +import java.util.Date; +import java.util.Map; + + +/** + * Created by kerry on 2020-10-22 + */ +public enum OnlineWidgetSortType implements SortType { + COMPOSITE { + @Override + public void sort(OnlineShareWidget[] widgetProviders) { + Map parameterMap = ShareUtils.getCompositeSortPara(); + Arrays.sort(widgetProviders, new Comparator() { + @Override + public int compare(OnlineShareWidget o1, OnlineShareWidget o2) { + double t1 = getSortValue(o1, parameterMap); + double t2 = getSortValue(o2, parameterMap); + return ComparatorUtils.compareCommonType(t2, t1); + } + }); + } + + private double getSortValue(OnlineShareWidget o, Map parameterMap) { + double a1 = getParaValue("a1", parameterMap), + a2 = getParaValue("a2", parameterMap), + a3 = getParaValue("a3", parameterMap), + b1 = getParaValue("b1", parameterMap), + b2 = getParaValue("b2", parameterMap), + k = getParaValue("k", parameterMap), + q1 = getParaValue("q1", parameterMap), + q2 = getParaValue("q2", parameterMap); + String[] hot2 = new String[]{"report-1", "report-2"}; + String[] hot1 = new String[]{"chart-1", "chart-2", "chart-3", "chart-4", "chart-5", "chart-6"}; + int commentNumber = o.getCommentNumber(), weight = o.getWeight(), downloadTimes = o.getDownloadTimes(); + + double hotValue = a3; + String cid = o.getCid(); + for (String str2 : hot2) { + if (ComparatorUtils.equals(str2, cid)) { + hotValue = a2; + break; + } + } + for (String str1 : hot1) { + if (ComparatorUtils.equals(str1, cid)) { + hotValue = a1; + break; + } + } + + double t = (new Date().getTime() - o.getUploadTime().getTime()) / (3600 * 1000 * 24D); + return q1 * hotValue * Math.pow(2.718, (0 - k) * t) + q2 * (b1 * commentNumber + b2 * downloadTimes) * Math.pow(2.718, (0 - k) * t) + weight; + } + + private double getParaValue(String parameter, Map parameterMap) { + SortParameter sortParameter = parameterMap.get(parameter); + if (sortParameter == null) { + return 0.0D; + } + return sortParameter.getValue(); + } + + + @Override + public String getDisplayName() { + return Toolkit.i18nText("Fine-Plugin_Component_Composite"); + } + }, + + + SALES { + @Override + public void sort(OnlineShareWidget[] widgetProviders) { + Arrays.sort(widgetProviders, new Comparator() { + @Override + public int compare(OnlineShareWidget o1, OnlineShareWidget o2) { + int t1 = o1.getDownloadTimes(); + int t2 = o2.getDownloadTimes(); + int result = ComparatorUtils.compareCommonType(t2, t1); + if (result == 0) { + result = Collator.getInstance(GeneralContext.getLocale()).compare(o1.getName(), o2.getName()); + } + return result; + } + }); + } + + @Override + public String getDisplayName() { + return Toolkit.i18nText("Fine-Plugin_Component_Sale"); + } + }, + + NEW_PRODUCT { + @Override + public void sort(OnlineShareWidget[] widgetProviders) { + Arrays.sort(widgetProviders, new Comparator() { + @Override + public int compare(OnlineShareWidget o1, OnlineShareWidget o2) { + long t1 = o1.getUploadTime().getTime(); + long t2 = o2.getUploadTime().getTime(); + int result = ComparatorUtils.compareCommonType(t2, t1); + if (result == 0) { + result = Collator.getInstance(GeneralContext.getLocale()).compare(o1.getName(), o2.getName()); + } + return result; + } + }); + } + + @Override + public String getDisplayName() { + return Toolkit.i18nText("Fine-Plugin_Component_New_Product"); + } + } + //现在不用,以后可能会用,先注释掉 + /*, + PRICE { + @Override + public void sort(OnlineShareWidget[] widgetProviders) { + Arrays.sort(widgetProviders, new Comparator() { + @Override + public int compare(OnlineShareWidget o1, OnlineShareWidget o2) { + double t1 = o1.getPrice(); + double t2 = o2.getPrice(); + int result = ComparatorUtils.compareCommonType(t2, t1); + if (result == 0) { + result = Collator.getInstance(GeneralContext.getLocale()).compare(o1.getName(), o2.getName()); + } + return result; + } + }); + } + + @Override + public String getDisplayName() { + return Toolkit.i18nText("Fine-Plugin_Component_Price"); + } + };*/ + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/sort/SortType.java b/designer-form/src/main/java/com/fr/design/mainframe/share/sort/SortType.java new file mode 100644 index 0000000000..316bb3c103 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/sort/SortType.java @@ -0,0 +1,12 @@ +package com.fr.design.mainframe.share.sort; + +/** + * @Author: Yuan.Wang + * @Date: 2020/11/19 + */ +public interface SortType { + + void sort(T[] widgetProviders); + + String getDisplayName(); +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/sort/WidgetSortType.java b/designer-form/src/main/java/com/fr/design/mainframe/share/sort/WidgetSortType.java new file mode 100644 index 0000000000..a4df3ac41a --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/sort/WidgetSortType.java @@ -0,0 +1,55 @@ +package com.fr.design.mainframe.share.sort; + +import com.fr.design.i18n.Toolkit; +import com.fr.form.share.SharableWidgetProvider; +import com.fr.form.share.record.ShareWidgetInfoManager; +import com.fr.general.ComparatorUtils; +import com.fr.general.GeneralContext; + +import java.text.Collator; +import java.util.Arrays; +import java.util.Comparator; + +/** + * Created by kerry on 2020-07-01 + */ +public enum WidgetSortType implements SortType { + INSTALL_TIME { + @Override + public void sort(SharableWidgetProvider[] widgetProviders) { + Arrays.sort(widgetProviders, new Comparator() { + @Override + public int compare(SharableWidgetProvider o1, SharableWidgetProvider o2) { + long t1 = ShareWidgetInfoManager.getInstance().getCompInstallTime(o1.getName() + "." + o1.getId()); + long t2 = ShareWidgetInfoManager.getInstance().getCompInstallTime(o2.getName() + "." + o2.getId()); + int result = ComparatorUtils.compareCommonType(t2, t1); + if (result == 0) { + result = Collator.getInstance(GeneralContext.getLocale()).compare(o1.getName(), o2.getName()); + } + return result; + } + }); + } + + @Override + public String getDisplayName() { + return Toolkit.i18nText("Fine-Plugin_Component_Install_Time"); + } + }, + COMPONENT_NAME { + @Override + public void sort(SharableWidgetProvider[] widgetProviders) { + Arrays.sort(widgetProviders, new Comparator() { + @Override + public int compare(SharableWidgetProvider o1, SharableWidgetProvider o2) { + return Collator.getInstance(GeneralContext.getLocale()).compare(o1.getName(), o2.getName()); + } + }); + } + + @Override + public String getDisplayName() { + return Toolkit.i18nText("Fine-Plugin_Component_Sort_Name"); + } + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ChartIcon.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ChartIcon.java new file mode 100644 index 0000000000..b52916f9c7 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ChartIcon.java @@ -0,0 +1,91 @@ +package com.fr.design.mainframe.share.ui.base; + +import com.fr.base.chart.BaseChartCollection; +import com.fr.base.chart.BaseChartPainter; +import com.fr.base.chart.chartdata.CallbackEvent; +import com.fr.base.chart.result.WebChartIDInfo; +import com.fr.script.Calculator; + +import javax.swing.Icon; +import java.awt.Color; +import java.awt.Component; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Paint; + +public class ChartIcon implements Icon { + private BaseChartCollection chartCollection; + private CallbackEvent callbackEvent; + + private int width; + private int height; + + /** + * 构造Chart的缩略图Icon + */ + public ChartIcon(BaseChartCollection chartCollection, int width, int height) { + try { + this.chartCollection = (BaseChartCollection) chartCollection.clone(); + } catch (CloneNotSupportedException e) { + this.chartCollection = chartCollection; + } + this.width = width; + this.height = height; + } + + public void registerCallBackEvent(CallbackEvent callbackEvent) { + this.callbackEvent = callbackEvent; + } + + /** + * 画出缩略图Icon + * + * @param g 图形的上下文 + * @param c 所在的Component + * @param x 缩略图的起始坐标x + * @param y 缩略图的起始坐标y + */ + @Override + public void paintIcon(Component c, Graphics g, int x, int y) { + + BaseChartPainter chartPainter = getChartPainter(); + + Graphics2D g2d = (Graphics2D) g; + Paint oldPaint = g2d.getPaint(); + g.translate(x, y); + g2d.setPaint(Color.white); + g2d.fillRect(0, 0, getIconWidth(), getIconHeight()); + + chartPainter.paint(g2d, getIconWidth(), getIconHeight(), 0, null, callbackEvent); + + g.translate(-x, -y); + g2d.setPaint(oldPaint); + } + + protected BaseChartPainter getChartPainter() { + BaseChartPainter painter = chartCollection.createResultChartPainterWithOutDealFormula(Calculator.createCalculator(), + WebChartIDInfo.createEmptyDesignerInfo(), getIconWidth(), getIconHeight()); + return painter; + } + + + /** + * 返回缩略图的宽度 + * + * @return int 缩略图宽度 + */ + @Override + public int getIconWidth() { + return width; + } + + /** + * 返回缩略图的高度 + * + * @return int 缩略图高度 + */ + @Override + public int getIconHeight() { + return height; + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/DictionaryComboCheckBox.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/DictionaryComboCheckBox.java new file mode 100644 index 0000000000..2a4fedddb4 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/DictionaryComboCheckBox.java @@ -0,0 +1,92 @@ +package com.fr.design.mainframe.share.ui.base; + +import com.fr.design.gui.icombocheckbox.UIComboCheckBox; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.i18n.Toolkit; +import com.fr.stable.StringUtils; + +import java.awt.Component; +import java.util.ArrayList; +import java.util.List; + +/** + * created by Harrison on 2020/04/21 + **/ +public class DictionaryComboCheckBox extends UIComboCheckBox { + + private static final String DEFAULT_VALUE_SEPARATOR = ","; + + private static final String EDITOR_FIELD = "editor"; + + private Object[] values; + + private Object[] displays; + + private String locale; + + private UITextField newEditor = null; + + public DictionaryComboCheckBox(Object[] values, String[] displays, String locale) { + super(displays); + init(values, displays); + this.locale = locale; + + installUI(); + } + + private void init(Object[] keys, String[] displays) { + + this.displays = displays; + this.values = keys; + } + + /** + * 这里是有问题的, 这里本身直接获取比较好。 + */ + @Deprecated + private void installUI() { + + Component[] components = getComponents(); + UITextField editor = (UITextField) components[0]; + editor.setPlaceholder(Toolkit.i18nText(locale)); + } + + @Override + public String getText() { + + Object[] selectedValues = getSelectedValues(); + StringBuilder builder = new StringBuilder(); + if (selectedValues != null) { + for (Object value : selectedValues) { + builder.append(value); + builder.append(DEFAULT_VALUE_SEPARATOR); + } + } + //去掉末尾多余的逗号 + return builder.length() > 0 ? builder.substring(0, builder.length() - 1) : StringUtils.EMPTY; + } + + @Override + public Object[] getSelectedValues() { + + Object[] selectedValues = super.getSelectedValues(); + List realValues = new ArrayList<>(); + for (Object selectedValue : selectedValues) { + Object realValue = matchValue(selectedValue); + if (realValue != null) { + realValues.add(realValue); + } + } + return realValues.toArray(); + } + + protected Object matchValue(Object key) { + + for (int i = 0; i < displays.length; i++) { + if (displays[i].equals(key)) { + return values[i]; + } + } + return null; + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/DownloadProgressPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/DownloadProgressPane.java new file mode 100644 index 0000000000..c25eab1fda --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/DownloadProgressPane.java @@ -0,0 +1,129 @@ +package com.fr.design.mainframe.share.ui.base; + +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.iprogressbar.ModernUIProgressBarUI; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.general.IOUtils; + +import javax.swing.BorderFactory; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JProgressBar; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; + +/** + * @Author: Yuan.Wang + * @Date: 2020/12/24 + * 下载组件包的时候用到的进度条 + */ +public class DownloadProgressPane extends JPanel { + private static final int MAX_NUM = 1000; + + private final UILabel tipLabel; + private final UILabel closeLabel; + private final JProgressBar processBar; + + public DownloadProgressPane(MouseClickListener listener) { + this.setLayout(new BorderLayout()); + this.setBorder(BorderFactory.createEmptyBorder(200, 25, 0, 25)); + + processBar = createProgressBar(); + tipLabel = createTipLabel(); + + JPanel panel = new JPanel(new BorderLayout()); + panel.setOpaque(false); + panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); + panel.setPreferredSize(new Dimension(240, 60)); + panel.add(processBar, BorderLayout.CENTER); + + closeLabel = new UILabel(IOUtils.readIcon("/com/fr/base/images/share/close_small.png")); + closeLabel.addMouseListener(listener); + + JPanel labelPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + labelPane.setOpaque(false); + labelPane.add(tipLabel, BorderLayout.CENTER); + labelPane.add(closeLabel, BorderLayout.EAST); + labelPane.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 7)); + + UILabel downloadTipLabel = new UILabel(Toolkit.i18nText("Fine-Plugin_Component_Package_Downloading_Tip")); + downloadTipLabel.setPreferredSize(new Dimension(240, 90)); + downloadTipLabel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); + downloadTipLabel.setForeground(Color.WHITE); + downloadTipLabel.setHorizontalTextPosition(UILabel.CENTER); + + + JPanel centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + centerPane.setPreferredSize(new Dimension(240, 138)); + centerPane.add(labelPane, BorderLayout.NORTH); + centerPane.add(panel, BorderLayout.CENTER); + centerPane.add(downloadTipLabel, BorderLayout.SOUTH); + centerPane.setOpaque(false); + + this.add(centerPane, BorderLayout.NORTH); + this.setSize(new Dimension(240, 800)); + this.setBackground(new Color(0, 0, 0, 0)); + this.setOpaque(false); + } + + private UILabel createTipLabel() { + UILabel label = new UILabel(ProcessState.DOWNLOADING.tip); + label.setPreferredSize(new Dimension(200, 20)); + label.setHorizontalAlignment(UILabel.CENTER); + label.setOpaque(false); + label.setForeground(Color.WHITE); + return label; + } + + private JProgressBar createProgressBar() { + JProgressBar jProgressBar = new JProgressBar(); + jProgressBar.setUI(new ModernUIProgressBarUI()); + jProgressBar.setBorderPainted(false); + jProgressBar.setOpaque(false); + jProgressBar.setBorder(null); + jProgressBar.setMaximum(MAX_NUM); + return jProgressBar; + } + + public void changeState() { + tipLabel.setText(ProcessState.INSTALLING.tip); + closeLabel.setVisible(false); + this.validate(); + this.repaint(); + } + + public void updateProgress(double process) { + if (process < 0 || process > 1) { + throw new IllegalArgumentException(); + } + processBar.setValue((int) (process * MAX_NUM)); + } + + + private enum ProcessState { + DOWNLOADING(Toolkit.i18nText("Fine-Plugin_Component_Package_Downloading")), + INSTALLING(Toolkit.i18nText("Fine-Plugin_Component_Package_Installing")); + + private final String tip; + + ProcessState(String tip) { + this.tip = tip; + } + } + + public static void main(String[] args) { + JFrame frame = new JFrame(); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setBounds(600, 200, 240, 500); + + DownloadProgressPane pane = new DownloadProgressPane(null); + pane.updateProgress(0.5); + frame.add(pane); + frame.setVisible(true); + + } +} + + diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/FailureMessagePane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/FailureMessagePane.java new file mode 100644 index 0000000000..7a2f9f6ab9 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/FailureMessagePane.java @@ -0,0 +1,58 @@ +package com.fr.design.mainframe.share.ui.base; + +import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.frpane.UITextPane; +import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.general.IOUtils; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.text.Style; +import javax.swing.text.StyleConstants; +import javax.swing.text.StyleContext; +import java.awt.BorderLayout; +import java.awt.FlowLayout; + +/** + * @Author: Yuan.Wang + * @Date: 2020/9/14 + */ +public class FailureMessagePane extends BasicPane { + public FailureMessagePane(String str) { + UILabel imageLabel = new UILabel(IOUtils.readIcon("/com/fr/base/images/share/error_icon.png")); + UILabel label = new UILabel(Toolkit.i18nText("Fine-Plugin_Component_Share_Modules_Error")); + UITextPane textPane = new UITextPane(); + UIScrollPane jScrollPane = new UIScrollPane(textPane); + JPanel panel = new JPanel(); + + Style style = new StyleContext().new NamedStyle(); + StyleConstants.setLineSpacing(style, 0.1f); + StyleConstants.setFontSize(style, 12); + textPane.setLogicalStyle(style); + textPane.setText(str); + textPane.setCaretPosition(0); + textPane.setEditable(false); + textPane.setBorder(BorderFactory.createEmptyBorder(3, 5, 3, 5)); + + jScrollPane.setBorder(BorderFactory.createEmptyBorder()); + label.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0)); + + setLayout(new BorderLayout()); + setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 8)); + + panel.add(imageLabel); + panel.add(label); + panel.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); + panel.setBorder(BorderFactory.createEmptyBorder(4, 0, 4, 0)); + add(panel, BorderLayout.NORTH); + add(jScrollPane, BorderLayout.CENTER); + } + + @Override + protected String title4PopupWindow() { + return Toolkit.i18nText("Fine-Plugin_Component_Dialog_Message"); + } + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/FlexSearchFieldPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/FlexSearchFieldPane.java new file mode 100644 index 0000000000..91b2ce358b --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/FlexSearchFieldPane.java @@ -0,0 +1,172 @@ +package com.fr.design.mainframe.share.ui.base; + +import com.fr.base.BaseUtils; +import com.fr.design.event.ChangeEvent; +import com.fr.design.event.ChangeListener; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.general.IOUtils; +import com.fr.stable.StringUtils; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by kerry on 2020-10-19 + */ +public class FlexSearchFieldPane extends JPanel { + private static final String SEARCH = "SEARCH"; + private static final String OTHER = "OTHER"; + + private static final Color SEARCH_BORDER_COLOR = Color.decode("#F5F5F7"); + private static final Color SEARCH_BORDER_INPUT_COLOR = Color.decode("#419BF9"); + private UITextField searchTextField; + private CardLayout cardLayout; + private JPanel centerPane; + private List changeListenerList = new ArrayList<>(); + private List focusListeners = new ArrayList<>(); + private List deleteIconMouseListener = new ArrayList<>(); + private List fieldDocumentListener = new ArrayList<>(); + + public FlexSearchFieldPane(JPanel otherPane) { + JPanel searchFieldPane = createSearchField(); + JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + jPanel.add(otherPane, BorderLayout.CENTER); + jPanel.add(createSearchLabel(), BorderLayout.EAST); + cardLayout = new CardLayout(); + centerPane = new JPanel(cardLayout); + centerPane.add(searchFieldPane, SEARCH); + centerPane.add(jPanel, OTHER); + cardLayout.show(centerPane, OTHER); + this.add(centerPane, BorderLayout.CENTER); + } + + + private JPanel createSearchLabel() { + JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + UILabel label = new UILabel(IOUtils.readIcon("/com/fr/base/images/share/search_icon.png")); + label.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); + jPanel.add(label, BorderLayout.EAST); + label.addMouseListener(new MouseClickListener() { + @Override + public void mouseClicked(MouseEvent e) { + cardLayout.show(centerPane, SEARCH); + searchTextField.requestFocus(); + } + }); + return jPanel; + } + + private JPanel createSearchField() { + final JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + jPanel.setPreferredSize(new Dimension(228, 20)); + jPanel.setBorder(BorderFactory.createLineBorder(SEARCH_BORDER_COLOR)); + jPanel.setBackground(Color.WHITE); + UILabel label = new UILabel(IOUtils.readIcon("/com/fr/base/images/share/search_icon.png")); + label.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0)); + jPanel.add(label, BorderLayout.WEST); + this.searchTextField = new UITextField(); + this.searchTextField.setBorderPainted(false); + this.searchTextField.setPlaceholder(Toolkit.i18nText("Fine-Design_Basic_Plugin_Search")); + this.searchTextField.addFocusListener(new FocusListener() { + @Override + public void focusGained(FocusEvent e) { + jPanel.setBorder(BorderFactory.createLineBorder(SEARCH_BORDER_INPUT_COLOR)); + jPanel.repaint(); + for (FocusListener focusListener : focusListeners) { + focusListener.focusGained(e); + } + } + + @Override + public void focusLost(FocusEvent e) { + jPanel.setBorder(BorderFactory.createLineBorder(SEARCH_BORDER_COLOR)); + jPanel.repaint(); + for (FocusListener focusListener : focusListeners) { + focusListener.focusLost(e); + } + } + }); + this.searchTextField.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + filterByName(); + for (DocumentListener listener : fieldDocumentListener) { + listener.insertUpdate(e); + } + } + + @Override + public void removeUpdate(DocumentEvent e) { + filterByName(); + for (DocumentListener listener : fieldDocumentListener) { + listener.removeUpdate(e); + } + } + + @Override + public void changedUpdate(DocumentEvent e) { + filterByName(); + for (DocumentListener listener : fieldDocumentListener) { + listener.changedUpdate(e); + } + } + }); + jPanel.add(this.searchTextField, BorderLayout.CENTER); + UILabel xLabel = new UILabel(BaseUtils.readIcon("/com/fr/design/images/buttonicon/close_icon.png")); + xLabel.addMouseListener(new MouseClickListener() { + @Override + public void mouseClicked(MouseEvent e) { + searchTextField.setText(StringUtils.EMPTY); + cardLayout.show(centerPane, OTHER); + for (MouseListener listener : deleteIconMouseListener) { + listener.mouseClicked(e); + } + } + }); + xLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); + jPanel.add(xLabel, BorderLayout.EAST); + + + return jPanel; + } + + private void filterByName() { + String text = searchTextField.getText(); + for (ChangeListener listener : changeListenerList) { + listener.fireChanged(new ChangeEvent(text)); + } + } + + public void registerChangeListener(ChangeListener changeListener) { + changeListenerList.add(changeListener); + } + + public void registerSearchTextFieldFocusListener(FocusListener focusListener) { + focusListeners.add(focusListener); + } + + public void registerDeleteIconMouseListener(MouseListener mouseListener) { + deleteIconMouseListener.add(mouseListener); + } + + public void registerFieldDocumentListener(DocumentListener documentListener) { + fieldDocumentListener.add(documentListener); + } + + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ImageBackgroundPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ImageBackgroundPane.java new file mode 100644 index 0000000000..073dee1035 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ImageBackgroundPane.java @@ -0,0 +1,226 @@ +package com.fr.design.mainframe.share.ui.base; + +import com.fr.base.Style; +import com.fr.base.background.ImageBackground; +import com.fr.base.background.ImageFileBackground; +import com.fr.design.gui.frpane.ImgChooseWrapper; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ibutton.UIRadioButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.style.background.BackgroundDetailPane; +import com.fr.design.style.background.image.ImageFileChooser; +import com.fr.design.style.background.image.ImagePreviewPane; +import com.fr.general.Background; +import com.fr.stable.Constants; + +import javax.swing.BorderFactory; +import javax.swing.ButtonGroup; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.BorderLayout; +import java.awt.GridLayout; +import java.awt.Image; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +/** + * Image background pane. + */ +public class ImageBackgroundPane extends BackgroundDetailPane { + + protected ImagePreviewPane previewPane = null; + private Style imageStyle = null; + private ChangeListener changeListener = null; + private ImageFileChooser imageFileChooser = null; + protected UILabel imageSizeLabel = new UILabel(); + + protected UIRadioButton defaultRadioButton = null; + protected UIRadioButton tiledRadioButton = null; + private UIRadioButton extendRadioButton = null; + private UIRadioButton adjustRadioButton = null; + + public ImageBackgroundPane() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + + // preview pane + JPanel previewContainerPane = FRGUIPaneFactory.createBorderLayout_L_Pane(); + this.add(previewContainerPane, BorderLayout.CENTER); + + JPanel previewOwnerPane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preview")); + previewOwnerPane.setLayout(new BorderLayout()); + previewContainerPane.add(previewOwnerPane, BorderLayout.CENTER); + previewContainerPane.add(initSelectFilePane(), BorderLayout.EAST); + previewPane = new ImagePreviewPane(); + previewOwnerPane.add(new JScrollPane(previewPane)); + previewPane.addChangeListener(imageSizeChangeListener); + + + // init image file chooser. + imageFileChooser = new ImageFileChooser(); + imageFileChooser.setMultiSelectionEnabled(false); + } + + public JPanel initSelectFilePane() { + JPanel selectFilePane = FRGUIPaneFactory.createBorderLayout_L_Pane(); + + selectFilePane.setBorder(BorderFactory.createEmptyBorder(8, 2, 4, 0)); + + UIButton selectPictureButton = new UIButton( + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Image_Select")); + selectFilePane.add(selectPictureButton, BorderLayout.NORTH); + selectPictureButton.setMnemonic('S'); + selectPictureButton.addActionListener(selectPictureActionListener); + JPanel layoutPane = FRGUIPaneFactory.createMediumHGapHighTopFlowInnerContainer_M_Pane(); + selectFilePane.add(layoutPane, BorderLayout.CENTER); + + //布局 + defaultRadioButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Alignment_Layout_Default")); + tiledRadioButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Alignment_Layout_Image_Titled")); + extendRadioButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Alignment_Layout_Image_Extend")); + adjustRadioButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Alignment_Layout_Image_Adjust")); + + defaultRadioButton.addActionListener(layoutActionListener); + tiledRadioButton.addActionListener(layoutActionListener); + extendRadioButton.addActionListener(layoutActionListener); + adjustRadioButton.addActionListener(layoutActionListener); + + JPanel jp = new JPanel(new GridLayout(4, 1, 15, 15)); + for (UIRadioButton button : imageLayoutButtons()) { + jp.add(button); + } + layoutPane.add(jp); + + ButtonGroup layoutBG = new ButtonGroup(); + layoutBG.add(defaultRadioButton); + layoutBG.add(tiledRadioButton); + layoutBG.add(extendRadioButton); + layoutBG.add(adjustRadioButton); + + defaultRadioButton.setSelected(true); + return selectFilePane; + } + + protected UIRadioButton[] imageLayoutButtons() { + return new UIRadioButton[]{ + defaultRadioButton, + tiledRadioButton, + extendRadioButton, + adjustRadioButton + }; + } + + /** + * Select picture. + */ + ActionListener selectPictureActionListener = new ActionListener() { + + public void actionPerformed(ActionEvent evt) { + int returnVal = imageFileChooser.showOpenDialog(ImageBackgroundPane.this); + setImageStyle(); + ImgChooseWrapper.getInstance(previewPane, imageFileChooser, imageStyle, changeListener).dealWithImageFile(returnVal); + } + }; + + protected void setImageStyle() { + if (tiledRadioButton.isSelected()) { + imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_TILED); + } else if (adjustRadioButton.isSelected()) { + imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_ADJUST); + } else if (extendRadioButton.isSelected()) { + imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_EXTEND); + } else { + imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_CENTER); + } + } + + ActionListener layoutActionListener = new ActionListener() { + + @Override + public void actionPerformed(ActionEvent evt) { + setImageStyle(); + changeImageStyle(); + } + + private void changeImageStyle() { + previewPane.setImageStyle(ImageBackgroundPane.this.imageStyle); + previewPane.repaint(); + } + }; + + @Override + public void populate(Background background) { + + if (background instanceof ImageBackground) { + ImageBackground imageBackground = (ImageBackground) background; + + if (imageBackground.getLayout() == Constants.IMAGE_CENTER) { + defaultRadioButton.setSelected(true); + imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_CENTER); + } else if (imageBackground.getLayout() == Constants.IMAGE_EXTEND) { + extendRadioButton.setSelected(true); + imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_EXTEND); + } else if (imageBackground.getLayout() == Constants.IMAGE_ADJUST) { + adjustRadioButton.setSelected(true); + imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_ADJUST); + } else { + tiledRadioButton.setSelected(true); + imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_TILED); + } + + previewPane.setImageStyle(ImageBackgroundPane.this.imageStyle); + if (imageBackground.getImage() != null) { + previewPane.setImageWithSuffix(imageBackground.getImageWithSuffix()); + imageSizeLabel.setText(previewPane.getImage().getWidth(null) + + " X " + previewPane.getImage().getHeight(null)); + } + + if (imageBackground.getImage() != null) { + previewPane.setImage(imageBackground.getImage()); + } + } else { + previewPane.setImage(null); + tiledRadioButton.setSelected(true); + + imageSizeLabel.setText(""); + } + + fireChagneListener(); + } + + @Override + public Background update() throws Exception { + ImageBackground imageBackground = new ImageFileBackground(previewPane.getImageWithSuffix()); + setImageStyle(); + imageBackground.setLayout(imageStyle.getImageLayout()); + return imageBackground; + } + + @Override + public void addChangeListener(ChangeListener changeListener) { + this.changeListener = changeListener; + } + + private void fireChagneListener() { + if (this.changeListener != null) { + ChangeEvent evt = new ChangeEvent(this); + this.changeListener.stateChanged(evt); + } + } + + ChangeListener imageSizeChangeListener = new ChangeListener() { + + @Override + public void stateChanged(ChangeEvent evt) { + Image image = ((ImagePreviewPane) evt.getSource()).getImage(); + + if (image == null) { + imageSizeLabel.setText(""); + } else { + imageSizeLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Size_Detail", image.getWidth(null) + "x" + image.getHeight(null))); + } + } + }; +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ImagePanel.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ImagePanel.java new file mode 100644 index 0000000000..a9bc8b787b --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ImagePanel.java @@ -0,0 +1,28 @@ +package com.fr.design.mainframe.share.ui.base; + +import javax.swing.JPanel; +import java.awt.Graphics; +import java.awt.Image; +import java.awt.Toolkit; + +/** + * Created by kerry on 2020-10-23 + */ +public class ImagePanel extends JPanel { + + + private Image image; + + public ImagePanel(String imagePath) { + image = Toolkit.getDefaultToolkit().createImage(ImagePanel.class + .getResource(imagePath)); + } + + @Override + public void paintComponent(Graphics g) { + super.paintComponent(g); + if (image != null) { + g.drawImage(image, 0, 0, 45, 45, this); + } + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ImitationProgress.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ImitationProgress.java new file mode 100644 index 0000000000..062ca9293c --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ImitationProgress.java @@ -0,0 +1,129 @@ +package com.fr.design.mainframe.share.ui.base; + + +import java.util.concurrent.atomic.AtomicReference; + +/** + * @Author: Yuan.Wang + * @Date: 2020/12/23 + */ +public class ImitationProgress { + private final com.fr.design.extra.Process process; + private static final double TOTAL_NUM = 1000; + private static final double FIRST_STAGE_RATE = 0.8; + private static final int SLEEP_TIME = 600; + + private final AtomicReference state = new AtomicReference<>(ImitationState.NEW); + + private final int num; + private final double initSpeed; + private int currentProgressRate = 0; + + public ImitationProgress(com.fr.design.extra.Process process, int num) { + this.process = process; + this.num = num; + initSpeed = TOTAL_NUM * FIRST_STAGE_RATE / num; + } + + public void start() { + if (!state.compareAndSet(ImitationState.NEW, ImitationState.FIRST_STAGE)) { + return; + } + firstState(); + if (state.compareAndSet(ImitationState.FIRST_STAGE, ImitationState.SECOND_STATE)) { + secondState(); + } + if (state.get() == ImitationState.COMPLETE) { + thirdState(); + } + } + + /** + * 按照预先估计的速度跑完80% + */ + private void firstState() { + int i = 0; + for (; i < num; i++) { + try { + Thread.sleep(SLEEP_TIME); + currentProgressRate += initSpeed; + process.process(currentProgressRate / TOTAL_NUM); + if (state.get() != ImitationState.FIRST_STAGE) { + return; + } + } catch (InterruptedException ignore) { + } + } + } + + /** + * 第一阶段结束但是还没有下载完,则减慢速度跑第二阶段 + */ + private void secondState() { + double speed = TOTAL_NUM * 0.1 / 30; + //70%-90%,30s + int i = 0; + for (; i < 30; i++) { + try { + Thread.sleep(1000); + currentProgressRate += speed; + process.process(currentProgressRate / (TOTAL_NUM)); + if (state.get() != ImitationState.SECOND_STATE) { + return; + } + } catch (InterruptedException ignore) { + return; + } + } + //90%-95%,三分钟 + speed = TOTAL_NUM * 0.05 / 60; + for (i = 0; i < 60; i++) { + try { + Thread.sleep(3000); + currentProgressRate += speed; + process.process(currentProgressRate / (TOTAL_NUM)); + } catch (InterruptedException ignore) { + return; + } + } + //线程睡眠1h + try { + Thread.sleep(1000 * 3600); + } catch (InterruptedException ignore) { + } + } + + + /** + * 下载完,则跑第三阶段,即1s内跑完剩下所有进度 + */ + private void thirdState() { + int localSpeed = (int) (TOTAL_NUM - currentProgressRate) / 10; + for (int i = 0; i < 10; i++) { + try { + Thread.sleep(100); + currentProgressRate += localSpeed; + process.process((currentProgressRate) / TOTAL_NUM); + } catch (InterruptedException ignore) { + return; + } + } + + } + + public void completed() { + state.set(ImitationState.COMPLETE); + } + + public void stop() { + state.set(ImitationState.STOP); + } + + private enum ImitationState { + NEW, + FIRST_STAGE, + SECOND_STATE, + COMPLETE, + STOP + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/LeftWordsTextArea.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/LeftWordsTextArea.java new file mode 100644 index 0000000000..df9dd8aacc --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/LeftWordsTextArea.java @@ -0,0 +1,44 @@ +package com.fr.design.mainframe.share.ui.base; + +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.RenderingHints; + +/** + * created by Harrison on 2020/04/21 + **/ +public class LeftWordsTextArea extends PlaceholderTextArea { + + /** + * 默认值 200 + */ + private int limitedLen = 200; + + public LeftWordsTextArea() { + } + + public LeftWordsTextArea(String s, String placeholder) { + super(s, placeholder); + } + + public void setLimitedLen(int len) { + this.limitedLen = len; + } + + @Override + protected void paintComponent(Graphics pG) { + super.paintComponent(pG); + + char[] text = getText().toCharArray(); + int currentLen = text.length; + int leftLen = limitedLen - currentLen; + String leftWordsLen = String.valueOf(leftLen); + + final Graphics2D g = (Graphics2D) pG; + g.setRenderingHint( + RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + g.setColor(getDisabledTextColor()); + g.drawString(leftWordsLen, getWidth() - getInsets().right - leftWordsLen.length() * 8 - 5, getHeight() - getInsets().bottom - 5); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/LoadingPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/LoadingPane.java new file mode 100644 index 0000000000..6504b85769 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/LoadingPane.java @@ -0,0 +1,49 @@ +package com.fr.design.mainframe.share.ui.base; + +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; + +/** + * Created by kerry on 2020-10-23 + */ +public class LoadingPane extends JPanel { + + public LoadingPane() { + this(Toolkit.i18nText("Fine-Plugin_Component_Online_Loading")); + } + + public LoadingPane(String message) { + JPanel panel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + JPanel borderPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + borderPane.setPreferredSize(new Dimension(120, 120)); + ImagePanel imagePanel = new ImagePanel("/com/fr/base/images/share/loading.gif"); + imagePanel.setPreferredSize(new Dimension(45, 45)); + borderPane.setBorder(BorderFactory.createEmptyBorder(150, 95, 5, 75)); + borderPane.add(imagePanel); + + panel.add(borderPane, BorderLayout.CENTER); + + JPanel labelPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + UILabel topLabel = new UILabel(Toolkit.i18nText(message), SwingConstants.CENTER); + topLabel.setForeground(Color.GRAY); + labelPanel.add(topLabel, BorderLayout.CENTER); + labelPanel.setPreferredSize(new Dimension(240, 20)); + panel.add(labelPanel, BorderLayout.SOUTH); + + panel.setPreferredSize(new Dimension(240, 230)); + + + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.setBorder(BorderFactory.createEmptyBorder(100, 0, 0, 0)); + this.add(panel, BorderLayout.NORTH); + } + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/MouseClickListener.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/MouseClickListener.java new file mode 100644 index 0000000000..ae5247d214 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/MouseClickListener.java @@ -0,0 +1,34 @@ +package com.fr.design.mainframe.share.ui.base; + +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; + +/** + * Created by kerry on 2020-10-22 + */ +public abstract class MouseClickListener implements MouseListener { + @Override + public void mouseClicked(MouseEvent e) { + + } + + @Override + public void mousePressed(MouseEvent e) { + + } + + @Override + public void mouseReleased(MouseEvent e) { + + } + + @Override + public void mouseEntered(MouseEvent e) { + + } + + @Override + public void mouseExited(MouseEvent e) { + + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/NoMatchPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/NoMatchPane.java new file mode 100644 index 0000000000..e36d4d02ec --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/NoMatchPane.java @@ -0,0 +1,41 @@ +package com.fr.design.mainframe.share.ui.base; + +import com.fr.base.BaseUtils; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.FlowLayout; + +/** + * @Author: Yuan.Wang + * @Date: 2021/1/14 + */ +public class NoMatchPane extends JPanel { + public NoMatchPane() { + init(); + } + + private void init() { + JPanel panel = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 5); + UILabel picLabel = new UILabel(); + picLabel.setIcon(BaseUtils.readIcon("com/fr/base/images/share/no_match_icon.png")); + picLabel.setHorizontalAlignment(SwingConstants.CENTER); + picLabel.setPreferredSize(new Dimension(240, 100)); + UILabel label = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Plugin_Component_No_Match_Result"), SwingConstants.CENTER); + label.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0)); + label.setForeground(Color.gray); + label.setPreferredSize(new Dimension(240, 20)); + label.setHorizontalAlignment(SwingConstants.CENTER); + panel.add(picLabel); + panel.add(label); + panel.setBorder(BorderFactory.createEmptyBorder(250, 0, 0, 0)); + this.setLayout(new BorderLayout()); + this.add(panel, BorderLayout.CENTER); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/PageableButton.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/PageableButton.java new file mode 100644 index 0000000000..781797e07f --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/PageableButton.java @@ -0,0 +1,128 @@ +package com.fr.design.mainframe.share.ui.base; + +import javax.swing.SwingConstants; +import javax.swing.plaf.ColorUIResource; +import javax.swing.plaf.basic.BasicArrowButton; +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Shape; +import java.awt.geom.Path2D; +import java.awt.geom.RoundRectangle2D; + +public class PageableButton extends BasicArrowButton { + + static final private Color BORDER_COLOR = new ColorUIResource(198, 198, 198); + static final private Color ARROW_DISABLED_COLOR = new ColorUIResource(193, 193, 193); + static final private Color ARROW_COLOR = new ColorUIResource(112, 112, 112); + static final private Color BUTTON_COLOR = new ColorUIResource(255, 255, 255); + static final private Color BUTTON_DISABLED_COLOR = new ColorUIResource(242, 242, 242); + static final private Color BUTTON_PRESS_COLOR = new ColorUIResource(96, 189, 246); + static final private Color BUTTON_ROLLOVER_COLOR = new ColorUIResource(0xd2d2d2); + static final private int CONNER = 2; + + + public PageableButton(int direction) { + super(direction); + } + + public void paint(Graphics g) { + paintButton(g); + paintArrow(g); + paintButtonBorder(g); + } + + private void paintButton(Graphics g) { + + int width = this.getWidth(); + int height = this.getHeight(); + if (!isEnabled()) { + g.setColor(PageableButton.BUTTON_DISABLED_COLOR); + } else if (getModel().isPressed()) { + g.setColor(PageableButton.BUTTON_PRESS_COLOR); + } else if (getModel().isRollover()){ + g.setColor(PageableButton.BUTTON_ROLLOVER_COLOR); + } else { + g.setColor(PageableButton.BUTTON_COLOR); + } + + g.fillRoundRect(1, 1, width -2, height - 2, PageableButton.CONNER, PageableButton.CONNER); + } + + private void paintArrow(Graphics g) { + if (!this.isEnabled()) { + g.setColor(PageableButton.ARROW_DISABLED_COLOR); + } else { + g.setColor(PageableButton.ARROW_COLOR); + } + switch (direction) { + case SwingConstants.NORTH: + g.drawLine(8, 5, 8, 5); + g.drawLine(7, 6, 9, 6); + g.drawLine(6, 7, 10, 7); + g.drawLine(5, 8, 7, 8); + g.drawLine(9, 8, 11, 8); + g.drawLine(4, 9, 6, 9); + g.drawLine(10, 9, 12, 9); + g.drawLine(5, 10, 5, 10); + g.drawLine(11, 10, 11, 10); + break; + case SwingConstants.SOUTH: + g.drawLine(5, 6, 5, 6); + g.drawLine(11, 6, 11, 6); + g.drawLine(4, 7, 6, 7); + g.drawLine(10, 7, 12, 7); + g.drawLine(5, 8, 7, 8); + g.drawLine(9, 8, 11, 8); + g.drawLine(6, 9, 10, 9); + g.drawLine(7, 10, 9, 10); + g.drawLine(8, 11, 8, 11); + break; + case SwingConstants.EAST: + g.drawLine(6, 5, 6, 5); + g.drawLine(6, 11, 6, 11); + g.drawLine(7, 4, 7, 6); + g.drawLine(7, 10, 7, 12); + g.drawLine(8, 5, 8, 7); + g.drawLine(8, 9, 8, 11); + g.drawLine(9, 6, 9, 10); + g.drawLine(10, 7, 10, 9); + g.drawLine(11, 8, 11, 8); + break; + case SwingConstants.WEST: + g.drawLine(4, 8, 4, 8); + g.drawLine(5, 7, 5, 9); + g.drawLine(6, 6, 6, 10); + g.drawLine(7, 5, 7, 7); + g.drawLine(7, 9, 7, 11); + g.drawLine(8, 4, 8, 6); + g.drawLine(8, 10, 8, 12); + g.drawLine(9, 5, 9, 5); + g.drawLine(9, 11, 9, 11); + break; + } + } + + private void paintButtonBorder(Graphics g) { + int offs = 1; + int width = this.getWidth(); + int height = this.getHeight(); + + Graphics2D g2d = (Graphics2D) g; + Color oldColor = g2d.getColor(); + g2d.setColor(PageableButton.BORDER_COLOR); + + Shape outer; + Shape inner; + int size = offs + offs; + + outer = new RoundRectangle2D.Float(0, 0, width, height, offs, offs); + inner = new RoundRectangle2D.Float(offs, offs, width - size, height - size, PageableButton.CONNER, PageableButton.CONNER); + + Path2D path = new Path2D.Float(Path2D.WIND_EVEN_ODD); + path.append(outer, false); + path.append(inner, false); + g2d.fill(path); + g2d.setColor(oldColor); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/PagingFiledPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/PagingFiledPane.java new file mode 100644 index 0000000000..b5cfcd53a4 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/PagingFiledPane.java @@ -0,0 +1,213 @@ +package com.fr.design.mainframe.share.ui.base; + +import com.fr.base.BaseUtils; +import com.fr.design.event.ChangeEvent; +import com.fr.design.event.ChangeListener; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itextfield.UINumberField; +import com.fr.stable.ArrayUtils; + +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JSeparator; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Insets; +import java.awt.Toolkit; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; + +/** + * Created by kerry on 2020-10-20 + */ +public class PagingFiledPane extends JPanel { + private static final Dimension PAGING_BTN_SIZE = new Dimension(20, 20); + private int currentPageNum = 1; + private int totalPageNum; + private int numPerPage; + + private ChangeListener changeListener; + + private UIButton lastPageBtn; + private UIButton nextPageBtn; + private UINumberField pagingEditField; + + public PagingFiledPane(int totalItems, int numPerPage) { + this.setOpaque(false); + this.numPerPage = numPerPage; + this.totalPageNum = totalItems / numPerPage + ((totalItems % numPerPage) == 0 ? 0 : 1); + this.totalPageNum = this.totalPageNum > 0 ? this.totalPageNum : 1; + initPane(totalPageNum); + } + + private void initPane(int totalPageNum) { + + this.setLayout(new FlowLayout(FlowLayout.RIGHT, 5, 15)); + initLastPageBtn(); + + JSeparator jSeparator1 = new JSeparator(); + + pagingEditField = new UINumberField(); + registerPagingEditFieldListener(); + pagingEditField.canFillNegativeNumber(false); + pagingEditField.setMinValue(1); + pagingEditField.setMaxValue(totalPageNum); + pagingEditField.setPreferredSize(new Dimension(50, 20)); + + UILabel totalPageLabel = new UILabel("/" + totalPageNum); + + JSeparator jSeparator2 = new JSeparator(); + + initNextPageBtn(); + + checkPageStatus(); + + this.add(lastPageBtn); + this.add(jSeparator1); + this.add(pagingEditField); + this.add(totalPageLabel); + this.add(jSeparator2); + this.add(nextPageBtn); + } + + public void setEnable(boolean enable) { + lastPageBtn.setEnabled(enable); + nextPageBtn.setEnabled(enable); + pagingEditField.setEnabled(enable); + } + + private void initLastPageBtn() { + lastPageBtn = new UIButton(BaseUtils.readIcon("/com/fr/base/images/share/left_page_normal.png")); + lastPageBtn.setRolloverEnabled(true); + lastPageBtn.setFocusPainted(false); + lastPageBtn.setContentAreaFilled(true); + lastPageBtn.setMargin(new Insets(0, 0, 0, 0)); + lastPageBtn.setPressedIcon(BaseUtils.readIcon("/com/fr/base/images/share/left_page_click.png")); + lastPageBtn.setRolloverIcon(BaseUtils.readIcon("/com/fr/base/images/share/left_page_hover.png")); + lastPageBtn.setDisabledIcon(BaseUtils.readIcon("/com/fr/base/images/share/left_page_disable.png")); + lastPageBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + clickLastPage(); + } + }); + lastPageBtn.setPreferredSize(PAGING_BTN_SIZE); + + } + + private void initNextPageBtn() { + nextPageBtn = new UIButton(BaseUtils.readIcon("/com/fr/base/images/share/right_page_normal.png")); + nextPageBtn.setRolloverEnabled(true); + nextPageBtn.setFocusPainted(false); + nextPageBtn.setContentAreaFilled(true); + nextPageBtn.setMargin(new Insets(0, 0, 0, 0)); + nextPageBtn.setPressedIcon(BaseUtils.readIcon("/com/fr/base/images/share/right_page_click.png")); + nextPageBtn.setRolloverIcon(BaseUtils.readIcon("/com/fr/base/images/share/right_page_hover.png")); + nextPageBtn.setDisabledIcon(BaseUtils.readIcon("/com/fr/base/images/share/right_page_disable.png")); + nextPageBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + clickNextPage(); + } + }); + nextPageBtn.setPreferredSize(PAGING_BTN_SIZE); + + } + + private void registerPagingEditFieldListener() { + pagingEditField.addKeyListener(new KeyListener() { + @Override + public void keyTyped(KeyEvent e) { + + } + + @Override + public void keyPressed(KeyEvent e) { + + } + + @Override + public void keyReleased(KeyEvent evt) { + int code = evt.getKeyCode(); + if (code == KeyEvent.VK_ENTER) { + jumpPage((int) pagingEditField.getValue()); + } + } + }); + pagingEditField.addFocusListener(new FocusListener() { + @Override + public void focusGained(FocusEvent e) { + + } + + @Override + public void focusLost(FocusEvent e) { + jumpPage((int) pagingEditField.getValue()); + } + }); + } + + public int getCurrentPageNum() { + return currentPageNum; + } + + public void registerChangeListener(ChangeListener changeListener) { + this.changeListener = changeListener; + } + + private void checkPageStatus() { + lastPageBtn.setEnabled(currentPageNum > 1); + nextPageBtn.setEnabled(currentPageNum < totalPageNum); + pagingEditField.setText(String.valueOf(currentPageNum)); + if (changeListener != null) { + changeListener.fireChanged(new ChangeEvent(currentPageNum)); + } + } + + private void clickNextPage() { + if (currentPageNum < totalPageNum) { + currentPageNum++; + checkPageStatus(); + } + } + + private void clickLastPage() { + if (currentPageNum > 1) { + currentPageNum--; + checkPageStatus(); + } + } + + private void jumpPage(int pageNum) { + if (pageNum > 0 && pageNum <= totalPageNum) { + currentPageNum = pageNum; + checkPageStatus(); + } + } + + public T[] getShowItems(T[] items) { + int startIndex = Math.max(0, currentPageNum - 1); + T[] resultArr = ArrayUtils.subarray(items, startIndex * this.numPerPage, this.currentPageNum * this.numPerPage); + return resultArr; + } + + + /** + * 测试程序 + */ + public static void main(String[] args) { + JFrame frame = new JFrame(""); + frame.setSize(400, 320); + Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); + frame.setLocation((d.width - frame.getSize().width) / 2, (d.height - frame.getSize().height) / 2); + PagingFiledPane tt = new PagingFiledPane(10, 3); + frame.getContentPane().add(tt); + frame.setVisible(true); + } + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/PlaceholderTextArea.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/PlaceholderTextArea.java new file mode 100644 index 0000000000..c463a49034 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/PlaceholderTextArea.java @@ -0,0 +1,42 @@ +package com.fr.design.mainframe.share.ui.base; + +import com.fr.design.gui.itextarea.UITextArea; + +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.RenderingHints; + +/** + * created by Harrison on 2020/04/21 + **/ +public class PlaceholderTextArea extends UITextArea { + + private String placeholder; + + public PlaceholderTextArea() { + } + + public PlaceholderTextArea(String s, String placeholder) { + super(s); + this.placeholder = placeholder; + } + + public void setPlaceholder(String placeholder) { + + this.placeholder = placeholder; + } + + @Override + protected void paintComponent(final Graphics pG) { + super.paintComponent(pG); + if (placeholder.length() == 0 || getText().length() > 0) { + return; + } + final Graphics2D g = (Graphics2D) pG; + g.setRenderingHint( + RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + g.setColor(getDisabledTextColor()); + g.drawString(placeholder, getInsets().left, pG.getFontMetrics() + .getMaxAscent() + getInsets().top + 1); + }} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/PopupMenuItem.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/PopupMenuItem.java new file mode 100644 index 0000000000..4ef1cffc64 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/PopupMenuItem.java @@ -0,0 +1,31 @@ +package com.fr.design.mainframe.share.ui.base; + +import com.fr.design.constants.UIConstants; +import com.fr.design.mainframe.share.ui.base.ui.SharePopupMenuItemUI; +import com.fr.stable.StringUtils; + +import javax.swing.Action; +import javax.swing.JMenuItem; +import java.awt.Dimension; + +/** + * @Author: Yuan.Wang + * @Date: 2020/10/30 + * 弹窗菜单项 + */ +public class PopupMenuItem extends JMenuItem { + + public PopupMenuItem(Action action) { + super(StringUtils.EMPTY, null); + setBackground(UIConstants.DEFAULT_BG_RULER); + setAction(action); + setUI(new SharePopupMenuItemUI()); + this.setPreferredSize(new Dimension(60, 21)); + } + + @Override + public String getText() { + return StringUtils.EMPTY + super.getText(); + } + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/PopupPreviewPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/PopupPreviewPane.java new file mode 100644 index 0000000000..91b1eae89e --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/PopupPreviewPane.java @@ -0,0 +1,83 @@ +package com.fr.design.mainframe.share.ui.base; + +import com.fr.design.constants.UIConstants; +import com.fr.general.IOUtils; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.JPopupMenu; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Image; +import java.awt.Toolkit; + +/** + * Created by kerry on 2020-06-23 + */ +public class PopupPreviewPane extends JPopupMenu { + private Container contentPane; + private Image compImage; + private static final int WIDTH = 400; + private static final int STANDARD_DPI = 128; + private static final int MAX_HEIGHT = 400; + private static final int HEIGHT = 210; + + public PopupPreviewPane() { + setFocusable(false); + contentPane = new JPanel(); + contentPane.setBackground(Color.white); + this.setLayout(new BorderLayout()); + this.add(contentPane, BorderLayout.CENTER); + this.setOpaque(false); + setPreferredSize(new Dimension(WIDTH, MAX_HEIGHT)); + setBorder(BorderFactory.createLineBorder(UIConstants.LINE_COLOR)); + } + + public void setComp(Image compImage) { + try { + this.compImage = compImage; + this.updateSize(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void paint(Graphics g) { + super.paint(g); + if (compImage != null) { + g.drawImage(compImage, 0, 0, getWidth(), getHeight(), null); + } + } + + @Override + public void setVisible(boolean visible) { + super.setVisible(visible); + } + + public void menuSelectionChanged(boolean isIncluded) { + } + + + // 根据控件内容,更新弹出框大小 + private void updateSize() { + int dpi = Toolkit.getDefaultToolkit().getScreenResolution(); + int width; + int height; + if (compImage == null) { + compImage = IOUtils.readImage("com/fr/base/images/share/component_error.png"); + width = WIDTH; + height = HEIGHT; + } else { + width = compImage.getWidth(null); + height = compImage.getHeight(null); + } + double aspectRatio = (double) width / height; + width = (WIDTH * dpi) / STANDARD_DPI; + height = (int) (width / aspectRatio); + this.setPreferredSize(new Dimension(width, height)); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ShareProgressBar.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ShareProgressBar.java new file mode 100644 index 0000000000..49fd3173b9 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ShareProgressBar.java @@ -0,0 +1,231 @@ +package com.fr.design.mainframe.share.ui.base; + +import com.fr.concurrent.NamedThreadFactory; +import com.fr.design.gui.iprogressbar.ProgressDialog; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.ui.util.UIUtil; +import com.fr.stable.StringUtils; + +import java.util.concurrent.Callable; +import java.util.concurrent.Executors; +import java.util.concurrent.FutureTask; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; + +public class ShareProgressBar { + + private static final int STEP = 20; + + private ProgressDialog progressBar = null; + + private LimitProgress loadingProgress = new LimitProgress(); + + /** + * 默认 40 ms更新进度 + */ + private int stepHeartbeat = 40; + + private volatile int progress = 0; + + private final AtomicBoolean TERMINATE = new AtomicBoolean(false); + + private final AtomicBoolean RUNNING = new AtomicBoolean(false); + + private ShareProgressBar() { + } + + private static class InstanceHolder { + + private static final ShareProgressBar INSTANCE = new ShareProgressBar(); + } + + public static ShareProgressBar getInstance() { + + return InstanceHolder.INSTANCE; + } + + public void prepare(int stepHeartbeat) { + + this.progressBar = createNewBar(); + this.stepHeartbeat = stepHeartbeat; + } + + public void updateProgress(double rate, String loadingText) throws Exception { + int maximum = progressBar.getProgressMaximum(); + double progress = maximum * rate; + int maxProgress = (int) Math.floor(progress); + loadingProgress.lock(maxProgress, loadingText); + + RUNNING.compareAndSet(false, true); + //终止条件 + TERMINATE.compareAndSet(true, false); + + loadingProgress.get(); + + } + + public void monitor() { + + final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1, + new NamedThreadFactory("ShareProgressMonitor", true)); + scheduler.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + if (!isRunning()) { + return; + } + if (isComplete()) { + shutdown(scheduler); + return; + } + updateUI(); + } + }, 0, stepHeartbeat, TimeUnit.MILLISECONDS); + } + + + /** + * 延迟关闭 + */ + public void complete(String loadingText) throws Exception { + + updateProgress(1.0, loadingText); + } + + /** + * 立刻关闭 + */ + public void completeNow() { + + if (RUNNING.get()) { + this.progress = progressBar.getProgressMaximum(); + this.TERMINATE.compareAndSet(false, true); + } + } + + /** + * 完成条件。不只是达到目标值,还要确保当前已经可以终止了。 + * + * @return 是否终止了。 + */ + public boolean isComplete() { + + return this.progress >= progressBar.getProgressMaximum() && this.TERMINATE.get(); + } + + private ProgressDialog createNewBar() { + return new ProgressDialog(DesignerContext.getDesignerFrame()); + } + + /** + * 小于当前最大时, 每次递增 1 + * 大于等于时, 停止 + * + * @return 当前最大值 + */ + private int incrementProgress() { + if (progress >= loadingProgress.getLimitKey()) { + progress = loadingProgress.getLimitKey(); + loadingProgress.release(); + return progress; + } else { + progress += STEP; + return progress; + } + } + + private String getLoadingText() { + + return loadingProgress.getLimitText(); + } + + + private boolean isRunning() { + + return RUNNING.get(); + } + + + private void shutdown(ScheduledExecutorService scheduler) { + + //停止运行 + RUNNING.compareAndSet(true, false); + reset(); + scheduler.shutdown(); + } + + private void reset() { + + this.progress = 0; + this.loadingProgress.reset(); + this.progressBar.setVisible(false); + this.progressBar.dispose(); + this.progressBar = null; + } + + private void updateUI() { + String text = getLoadingText(); + int value = incrementProgress(); + UIUtil.invokeLaterIfNeeded(new Runnable() { + @Override + public void run() { + if (!progressBar.isVisible()) { + progressBar.setVisible(true); + } + progressBar.updateLoadingText(text); + progressBar.setProgressValue(value); + } + }); + } + + private static class LimitProgress { + + private int limitKey = 0; + + private String limitText = StringUtils.EMPTY; + + private FutureTask lock; + + public void lock(int key, String loadingText) { + + this.limitKey = key; + this.limitText = loadingText; + this.lock = new FutureTask<>(new Callable() { + @Override + public Void call() throws Exception { + return null; + } + }); + } + + public void release() { + + this.lock.run(); + } + + public void get() throws Exception { + + this.lock.get(); + } + + public void reset() { + + this.limitKey = 0; + this.limitText = StringUtils.EMPTY; + //防止卡住。 + this.lock.run(); + } + + public int getLimitKey() { + return limitKey; + } + + public String getLimitText() { + return limitText; + } + + + } + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/SortPopupMenuItem.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/SortPopupMenuItem.java new file mode 100644 index 0000000000..2b3c5703cd --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/SortPopupMenuItem.java @@ -0,0 +1,104 @@ +package com.fr.design.mainframe.share.ui.base; + +import com.fr.design.constants.UIConstants; +import com.fr.design.utils.gui.GUIPaintUtils; +import com.fr.stable.Constants; +import com.fr.stable.StringUtils; +import sun.swing.SwingUtilities2; + +import javax.swing.Action; +import javax.swing.ButtonModel; +import javax.swing.JMenu; +import javax.swing.JMenuItem; +import javax.swing.UIManager; +import javax.swing.plaf.basic.BasicMenuItemUI; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.FontMetrics; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Rectangle; + +/** + * Created by kerry on 2020-06-30 + */ +public class SortPopupMenuItem extends JMenuItem { + + + public SortPopupMenuItem(Action action) { + super(StringUtils.EMPTY, null); + setBackground(UIConstants.DEFAULT_BG_RULER); + setAction(action); + setUI(new SortPopupMenuItemUI()); + this.setPreferredSize(new Dimension(60, 21)); + } + + @Override + public String getText() { + return StringUtils.EMPTY + super.getText(); + } + + + private class SortPopupMenuItemUI extends BasicMenuItemUI { + + @Override + protected void paintBackground(Graphics g, JMenuItem menuItem, Color bgColor) { + if (menuItem.getIcon() == null) { + super.paintBackground(g, menuItem, bgColor); + return; + } + ButtonModel model = menuItem.getModel(); + Color oldColor = g.getColor(); + int menuWidth = menuItem.getWidth(); + int menuHeight = menuItem.getHeight(); + + g.setColor(UIConstants.DEFAULT_BG_RULER); + g.fillRect(0, 0, menuWidth, menuHeight); + if (menuItem.isOpaque()) { + if (model.isArmed() || (menuItem instanceof JMenu && model.isSelected())) { + GUIPaintUtils.fillPaint((Graphics2D) g, 0, 0, menuWidth, menuHeight, true, Constants.NULL, UIConstants.FLESH_BLUE, 7); + } else { + GUIPaintUtils.fillPaint((Graphics2D) g, 0, 0, menuWidth, menuHeight, true, Constants.NULL, menuItem.getBackground(), 7); + } + g.setColor(oldColor); + } else if (model.isArmed() || (menuItem instanceof JMenu && + model.isSelected())) { + GUIPaintUtils.fillPaint((Graphics2D) g, 0, 0, menuWidth, menuHeight, true, Constants.NULL, UIConstants.FLESH_BLUE, 7); + g.setColor(oldColor); + } + } + + protected void paintText(Graphics g, JMenuItem menuItem, Rectangle textRect, String text) { + ButtonModel model = menuItem.getModel(); + FontMetrics fm = SwingUtilities2.getFontMetrics(menuItem, g); + int mnemIndex = menuItem.getDisplayedMnemonicIndex(); + + if (!model.isEnabled()) { + // *** paint the text disabled + if (UIManager.get("MenuItem.disabledForeground") instanceof Color) { + g.setColor(UIManager.getColor("MenuItem.disabledForeground")); + SwingUtilities2.drawStringUnderlineCharAt(menuItem, g, text, + -1, textRect.x, textRect.y + fm.getAscent()); + } else { + g.setColor(menuItem.getBackground().brighter()); + SwingUtilities2.drawStringUnderlineCharAt(menuItem, g, text, + -1, textRect.x, textRect.y + fm.getAscent()); + g.setColor(menuItem.getBackground().darker()); + SwingUtilities2.drawStringUnderlineCharAt(menuItem, g, text, + -1, textRect.x - 1, textRect.y + + fm.getAscent() - 1); + } + } else { + // *** paint the text normally + if (model.isArmed() || (menuItem instanceof JMenu && model.isSelected())) { + g.setColor(Color.WHITE); // Uses protected field. + } + SwingUtilities2.drawStringUnderlineCharAt(menuItem, g, text, + -1, textRect.x, textRect.y + fm.getAscent()); + } + } + + } + + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ui/PlaceHolderUI.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ui/PlaceHolderUI.java new file mode 100644 index 0000000000..5c4c39eae4 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ui/PlaceHolderUI.java @@ -0,0 +1,48 @@ +package com.fr.design.mainframe.share.ui.base.ui; + +import javax.swing.JComponent; +import javax.swing.plaf.ComponentUI; +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.RenderingHints; + +/** + * created by Harrison on 2020/04/22 + **/ +public abstract class PlaceHolderUI extends ComponentUI { + + private static final Color DEFAULT_COLOR = new Color(143, 142, 139); + + private String placeholder; + + + public PlaceHolderUI(String placeholder) { + this.placeholder = placeholder; + } + + @Override + public void paint(Graphics pG, JComponent c) { + @SuppressWarnings("unchecked") T realType = (T) c; + if (placeholder.length() == 0 || validate(realType)) { + return; + } + final Graphics2D g = (Graphics2D) pG; + g.setRenderingHint( + RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + g.setColor(getDisabledTextColor()); + g.drawString(placeholder, c.getInsets().left + 10, pG.getFontMetrics() + .getMaxAscent() + c.getInsets().top + 3); + + } + + + protected abstract boolean validate(T t); + + protected Color getDisabledTextColor() { + + return DEFAULT_COLOR; + }; + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ui/SharePopupMenuItemUI.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ui/SharePopupMenuItemUI.java new file mode 100644 index 0000000000..16a5a58bde --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/ui/SharePopupMenuItemUI.java @@ -0,0 +1,82 @@ +package com.fr.design.mainframe.share.ui.base.ui; + +import com.fr.design.constants.UIConstants; +import com.fr.design.utils.gui.GUIPaintUtils; +import com.fr.stable.Constants; +import sun.swing.SwingUtilities2; + +import javax.swing.ButtonModel; +import javax.swing.JMenu; +import javax.swing.JMenuItem; +import javax.swing.UIManager; +import javax.swing.plaf.basic.BasicMenuItemUI; +import java.awt.Color; +import java.awt.FontMetrics; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Rectangle; + +/** + * @Author: Yuan.Wang + * @Date: 2020/10/30 + */ +public class SharePopupMenuItemUI extends BasicMenuItemUI { + + @Override + protected void paintBackground(Graphics g, JMenuItem menuItem, Color bgColor) { + if (menuItem.getIcon() == null) { + super.paintBackground(g, menuItem, bgColor); + return; + } + ButtonModel model = menuItem.getModel(); + Color oldColor = g.getColor(); + int menuWidth = menuItem.getWidth(); + int menuHeight = menuItem.getHeight(); + + g.setColor(UIConstants.DEFAULT_BG_RULER); + g.fillRect(0, 0, menuWidth, menuHeight); + if (menuItem.isOpaque()) { + if (model.isArmed() || (menuItem instanceof JMenu && model.isSelected())) { + GUIPaintUtils.fillPaint((Graphics2D) g, 0, 0, menuWidth, menuHeight, true, Constants.NULL, UIConstants.FLESH_BLUE, 7); + } else { + GUIPaintUtils.fillPaint((Graphics2D) g, 0, 0, menuWidth, menuHeight, true, Constants.NULL, menuItem.getBackground(), 7); + } + g.setColor(oldColor); + } else if (model.isArmed() || (menuItem instanceof JMenu && + model.isSelected())) { + GUIPaintUtils.fillPaint((Graphics2D) g, 0, 0, menuWidth, menuHeight, true, Constants.NULL, UIConstants.FLESH_BLUE, 7); + g.setColor(oldColor); + } + } + + protected void paintText(Graphics g, JMenuItem menuItem, Rectangle textRect, String text) { + ButtonModel model = menuItem.getModel(); + FontMetrics fm = SwingUtilities2.getFontMetrics(menuItem, g); + + if (!model.isEnabled()) { + // *** paint the text disabled + if (UIManager.get("MenuItem.disabledForeground") instanceof Color) { + g.setColor(UIManager.getColor("MenuItem.disabledForeground")); + SwingUtilities2.drawStringUnderlineCharAt(menuItem, g, text, + -1, textRect.x, textRect.y + fm.getAscent()); + } else { + g.setColor(menuItem.getBackground().brighter()); + SwingUtilities2.drawStringUnderlineCharAt(menuItem, g, text, + -1, textRect.x, textRect.y + fm.getAscent()); + g.setColor(menuItem.getBackground().darker()); + SwingUtilities2.drawStringUnderlineCharAt(menuItem, g, text, + -1, textRect.x - 1, textRect.y + + fm.getAscent() - 1); + } + } else { + g.setColor(Color.BLACK); + // *** paint the text normally + if (model.isArmed() || (menuItem instanceof JMenu && model.isSelected())) { + g.setColor(Color.WHITE); // Uses protected field. + } + + SwingUtilities2.drawStringUnderlineCharAt(menuItem, g, text, + -1, textRect.x, textRect.y + fm.getAscent()); + } + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/AbstractOnlineWidgetBlock.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/AbstractOnlineWidgetBlock.java new file mode 100644 index 0000000000..06e513b809 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/AbstractOnlineWidgetBlock.java @@ -0,0 +1,94 @@ +package com.fr.design.mainframe.share.ui.block; + +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.mainframe.share.ui.online.OnlineResourceManager; +import com.fr.design.mainframe.share.ui.online.OnlineWidgetSelectPane; +import com.fr.design.mainframe.share.ui.online.ResourceLoader; +import com.fr.form.share.bean.OnlineShareWidget; +import com.fr.form.share.constants.ShareComponentConstants; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.EncodeConstants; +import com.fr.third.springframework.web.util.UriUtils; +import org.jetbrains.annotations.NotNull; + +import javax.imageio.ImageIO; +import javax.swing.ImageIcon; +import java.awt.Dimension; +import java.awt.Image; +import java.io.IOException; +import java.net.URL; + +/** + * Created by kerry on 2020-11-22 + */ +public abstract class AbstractOnlineWidgetBlock extends PreviewWidgetBlock implements ResourceLoader { + + private final OnlineWidgetSelectPane parentPane; + private UILabel coverLabel; + + public AbstractOnlineWidgetBlock(OnlineShareWidget widget, OnlineWidgetSelectPane parentPane) { + super(widget); + this.parentPane = parentPane; + } + + protected UILabel initCoverLabel(Image image) { + coverLabel = new UILabel(new ImageIcon(image)); + return coverLabel; + } + + @Override + protected String getWidgetUuid() { + return widget.getUuid(); + } + + protected void showPreview(OnlineShareWidget widget) { + parentPane.showPreviewPane(this, widget.getId()); + } + + protected void hidePreview() { + parentPane.hidePreviewPane(); + } + + @Override + @NotNull + protected Image getCoverImage() { + OnlineResourceManager.getInstance().addLoader(this); + return getDefaultDisplayImage(); + } + + public Image getPreviewImage() { + try { + return ImageIO.read(new URL(UriUtils.encodePath(widget.getPicPath(), EncodeConstants.ENCODING_UTF_8))); + } catch (IOException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + return getDefaultDisplayImage(); + } + } + + public void load() { + Image image; + try { + + Dimension coverDimension = getCoverDimension(); + String previewURI = UriUtils.encodePath(widget.getPicPath(), EncodeConstants.ENCODING_UTF_8) + "?x-oss-process=image/resize,m_fixed," + "w_" + coverDimension.width + + ",h_" + coverDimension.height; + image = ImageIO.read(new URL(previewURI)); + } catch (IOException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + image = getDefaultDisplayImage(); + } + resetCover(image); + } + + private Image getDefaultDisplayImage(){ + return ShareComponentConstants.DEFAULT_COVER; + } + + + public void resetCover(Image image) { + coverLabel.setIcon(new ImageIcon(image)); + this.parentPane.validate(); + this.parentPane.repaint(); + } + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/DragAndDropDragGestureListener.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/DragAndDropDragGestureListener.java new file mode 100644 index 0000000000..3fe0fc388d --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/DragAndDropDragGestureListener.java @@ -0,0 +1,72 @@ +package com.fr.design.mainframe.share.ui.block; + +import com.fr.form.share.utils.ShareUtils; +import com.fr.form.ui.Widget; +import com.fr.general.ComparatorUtils; +import org.jetbrains.annotations.NotNull; + +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.dnd.DragGestureEvent; +import java.awt.dnd.DragGestureListener; +import java.awt.dnd.DragSource; +import java.awt.dnd.DragSourceAdapter; +import java.awt.dnd.DragSourceDragEvent; + +/** + * @Author: Yuan.Wang + * @Date: 2021/1/15 + */ +public class DragAndDropDragGestureListener extends DragSourceAdapter implements DragGestureListener { + private final PreviewWidgetBlock block; + + public DragAndDropDragGestureListener(PreviewWidgetBlock tt, int actions) { + block = tt; + DragSource source = new DragSource(); + source.createDefaultDragGestureRecognizer(tt, actions, this); + } + + public void dragGestureRecognized(DragGestureEvent dge) { + PreviewWidgetBlock onlineWidgetBlock = (PreviewWidgetBlock) dge.getComponent(); + if (onlineWidgetBlock != null) { + String uuid = block.getWidgetUuid(); + Widget widget = ShareUtils.getElCaseEditorById(uuid); + if (widget != null) { + DragAndDropTransferable dragAndDropTransferable = new DragAndDropTransferable(widget); + dge.startDrag(DragSource.DefaultCopyDrop, dragAndDropTransferable, this); + } + } + } + + @Override + public void dragEnter(DragSourceDragEvent dragSourceDragEvent) { + + } + + private static class DragAndDropTransferable implements Transferable { + private final Widget widget; + + public DragAndDropTransferable(Widget widget) { + this.widget = widget; + } + + DataFlavor[] flavors = {new DataFlavor(Widget.class, "Widget")}; + + public DataFlavor[] getTransferDataFlavors() { + return flavors; + } + + public boolean isDataFlavorSupported(DataFlavor flavor) { + for (DataFlavor df : flavors) { + if (ComparatorUtils.equals(df, flavor)) { + return true; + } + } + return false; + } + @NotNull + public Object getTransferData(DataFlavor df) { + return widget; + } + } +} \ No newline at end of file diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/LocalWidgetBlock.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/LocalWidgetBlock.java new file mode 100644 index 0000000000..b72f5c5856 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/LocalWidgetBlock.java @@ -0,0 +1,313 @@ +package com.fr.design.mainframe.share.ui.block; + +import com.fr.base.GraphHelper; +import com.fr.base.iofile.attr.SharableAttrMark; +import com.fr.design.actions.UpdateAction; +import com.fr.design.base.mode.DesignModeContext; +import com.fr.design.constants.UIConstants; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.form.util.XCreatorConstants; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.imenu.UIPopupMenu; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.WidgetToolBarPane; +import com.fr.design.mainframe.share.group.ui.GroupMoveDialog; +import com.fr.design.mainframe.share.ui.base.PopupMenuItem; +import com.fr.design.mainframe.share.ui.local.LocalWidgetRepoPane; +import com.fr.design.mainframe.share.ui.local.LocalWidgetSelectPane; +import com.fr.design.mainframe.share.ui.local.WidgetSelectedManager; +import com.fr.design.mainframe.share.util.ShareComponentUtils; +import com.fr.design.mainframe.share.util.ShareUIUtils; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.form.share.DefaultSharableWidget; +import com.fr.form.share.SharableWidgetProvider; +import com.fr.form.share.constants.ShareComponentConstants; +import com.fr.form.share.group.Group; +import com.fr.form.share.record.ShareWidgetInfoManager; +import com.fr.form.ui.AbstractBorderStyleWidget; +import com.fr.form.ui.Widget; +import com.fr.general.ComparatorUtils; +import com.fr.general.IOUtils; +import com.fr.stable.Constants; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import javax.swing.Action; +import javax.swing.Icon; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Image; +import java.awt.Rectangle; +import java.awt.dnd.DnDConstants; +import java.awt.event.ActionEvent; +import java.awt.event.MouseEvent; +import java.util.UUID; + +/** + * created by Harrison on 2020/06/12 + * 本地组件块 + **/ +public class LocalWidgetBlock extends PreviewWidgetBlock { + private static final int MARK_START_X = 83; + + private boolean mouseHover = false; + private final LocalWidgetSelectPane parentPane; + + private MouseEvent lastPressEvent; + private boolean isEdit; + private boolean isMarked; + private boolean pressed; + private boolean hover; + private final Icon markedMode = IOUtils.readIcon("/com/fr/base/images/share/marked.png"); + private final Icon unMarkedMode = IOUtils.readIcon("/com/fr/base/images/share/unmarked.png"); + + public LocalWidgetBlock(DefaultSharableWidget provider, LocalWidgetSelectPane parentPane) { + super(provider); + this.parentPane = parentPane; + new DragAndDropDragGestureListener(this, DnDConstants.ACTION_COPY_OR_MOVE); + initUI(); + } + + + private void initUI() { + JPanel labelPane = new JPanel(new BorderLayout()); + UILabel label = new UILabel(this.getBindInfo().getName(), UILabel.CENTER); + label.setPreferredSize(new Dimension(ShareComponentConstants.SHARE_THUMB_WIDTH, ShareComponentConstants.SHARE_BLOCK_LABEL_HEIGHT)); + labelPane.setBackground(Color.WHITE); + labelPane.add(label, BorderLayout.CENTER); + this.add(labelPane, BorderLayout.SOUTH); + } + + public void setElementCaseEdit(boolean isEdit) { + this.isEdit = isEdit; + if (isEdit) { + isMarked = WidgetSelectedManager.getInstance().isSelected(getGroup().getGroupName(), this.getWidget().getId()); + } + repaint(); + } + + public String getFileName() { + //插件里面, 所有的值都是插件值。可以强转的。 + DefaultSharableWidget provider = (DefaultSharableWidget) getBindInfo(); + return provider.getFileName(); + } + + public SharableWidgetProvider getBindInfo() { + return this.getWidget(); + } + + @Override + protected void showPreview(DefaultSharableWidget widget) { + this.parentPane.showPreviewPane(this, widget.getId()); + } + + @Override + protected void hidePreview() { + this.parentPane.hidePreviewPane(); + } + + @Override + @NotNull + public Image getCoverImage() { + return this.getWidget().getCover(); + } + + @Override + protected String getWidgetUuid() { + return widget.getId(); + } + + @Nullable + public Image getPreviewImage() { + String id = this.getWidget().getId(); + return getGroup().getPreviewImage(id); + } + + @Override + public void mouseClicked(MouseEvent e) { + super.mouseClicked(e); + if (e.getButton() == MouseEvent.BUTTON3 && !isEdit) { + this.parentPane.hidePreviewPane(); + UIPopupMenu popupMenu = new UIPopupMenu(); + popupMenu.setOnlyText(true); + popupMenu.setBackground(UIConstants.DEFAULT_BG_RULER); + popupMenu.add(new PopupMenuItem(new MoveGroupAction())); + popupMenu.add(new PopupMenuItem(new RemoveAction())); + GUICoreUtils.showPopupMenu(popupMenu, this, e.getX(), e.getY()); + } + + } + + @Override + public void mousePressed(MouseEvent e) { + super.mousePressed(e); + lastPressEvent = e; + pressed = true; + } + + @Override + public void mouseReleased(MouseEvent e) { + super.mouseReleased(e); + if (pressed && hover) { + dealClickAction(e); + } + pressed = false; + } + + @Override + public void mouseMoved(MouseEvent e) { + super.mouseMoved(e); + this.mouseHover = true; + if (!isEdit) { + setCursor(new Cursor(Cursor.MOVE_CURSOR)); + } + this.repaint(); + } + + @Override + public void mouseEntered(MouseEvent e) { + super.mouseEntered(e); + hover = true; + } + + @Override + public void mouseExited(MouseEvent e) { + super.mouseExited(e); + this.mouseHover = false; + setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); + hover = false; + this.repaint(); + } + + + @Override + public void mouseDragged(MouseEvent e) { + if (DesignModeContext.isAuthorityEditing() || lastPressEvent == null || isEdit) { + return; + } + hidePreview(); + Object source = e.getSource(); + Widget creatorSource; + String shareId; + if (source instanceof LocalWidgetBlock) { + LocalWidgetBlock no = (LocalWidgetBlock) e.getSource(); + if (no == null) { + return; + } + shareId = no.getBindInfo().getId(); + creatorSource = getGroup().getElCaseEditorById(shareId); + if (creatorSource == null) { + ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Plugin_Component_Drag_Error_Info")); + return; + } + creatorSource.setWidgetID(UUID.randomUUID().toString()); + ((AbstractBorderStyleWidget) creatorSource).addWidgetAttrMark(new SharableAttrMark(true)); + //tab布局WCardMainBorderLayout通过反射出来的大小是960*480 + XCreator xCreator = ShareComponentUtils.createXCreator(creatorSource, shareId, no.getBindInfo()); + WidgetToolBarPane.getTarget().startDraggingBean(xCreator); + lastPressEvent = null; + this.setBorder(null); + } + } + + @Override + public void paint(Graphics g) { + super.paint(g); + //绘制删除标志 + if (isEdit) { + Icon icon = isMarked ? markedMode : unMarkedMode; + icon.paintIcon(this, g, MARK_START_X, 0); + } + if (ComparatorUtils.equals(this, this.parentPane.getSelectedBlock()) || this.mouseHover) { + g.setColor(XCreatorConstants.FORM_BORDER_COLOR); + Rectangle rectangle = new Rectangle(); + rectangle.width = this.getWidth(); + rectangle.height = this.getHeight(); + GraphHelper.draw(g, rectangle, Constants.LINE_LARGE); + } + } + + /** + * 由鼠标释放时调用该方法来触发左键点击事件 + */ + private void dealClickAction(MouseEvent e) { + this.parentPane.setSelectBlock(this); + if (e.getButton() == MouseEvent.BUTTON1) { + if (isEdit) { + if (isMarked) { + WidgetSelectedManager.getInstance().removeSelect(getGroup().getGroupName(), this.getWidget().getId()); + isMarked = false; + } else { + WidgetSelectedManager.getInstance().addSelect(getGroup().getGroupName(), this.getWidget().getId()); + isMarked = true; + } + } + //没有组件被选择则禁用按钮 + LocalWidgetRepoPane.getInstance().setManageButtonEnable(hasComponentSelected()); + repaint(); + } + } + + private Group getGroup() { + return parentPane.getGroup(); + } + + private boolean hasComponentSelected() { + return !WidgetSelectedManager.getInstance().isSelectEmpty(); + } + + private class MoveGroupAction extends UpdateAction { + public MoveGroupAction() { + this.putValue(Action.SMALL_ICON, null); + this.setName(Toolkit.i18nText("Fine-Plugin_Component_Group_Move")); + } + + @Override + public void actionPerformed(ActionEvent e) { + new GroupMoveDialog(DesignerContext.getDesignerFrame()) { + @Override + protected void confirmClose() { + this.dispose(); + Group group = (Group) getSelectGroupBox().getSelectedItem(); + assert group != null; + if (WidgetSelectedManager.getInstance().moveSelect(getGroup().getGroupName(), group.getGroupName(), getWidget().getId())) { + ShareWidgetInfoManager.getInstance().saveXmlInfo(); + LocalWidgetRepoPane.getInstance().refreshShowPanel(false); + } else { + ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Plugin_Component_Group_Move_Fail_Message")); + } + } + + }; + } + } + + private class RemoveAction extends UpdateAction { + public RemoveAction() { + this.putValue(Action.SMALL_ICON, null); + this.setName(Toolkit.i18nText("Fine-Plugin_Component_Remove")); + } + + @Override + public void actionPerformed(ActionEvent e) { + int rv = FineJOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), + Toolkit.i18nText("Fine-Plugin_Component_Remove_Info"), + Toolkit.i18nText("Fine-Plugin_Component_Group_Confirm"), + FineJOptionPane.YES_NO_OPTION + ); + if (rv == FineJOptionPane.YES_OPTION) { + if (!WidgetSelectedManager.getInstance().unInstallSelect(getGroup().getGroupName(), getWidget().getId())) { + FineJOptionPane.showMessageDialog(null, Toolkit.i18nText("Fine-Plugin_Component_Remove_Failure")); + } + LocalWidgetRepoPane.getInstance().refreshShowPanel(getGroup()); + } + } + } + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java new file mode 100644 index 0000000000..0249673f01 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java @@ -0,0 +1,303 @@ +package com.fr.design.mainframe.share.ui.block; + +import com.fr.base.iofile.attr.SharableAttrMark; +import com.fr.config.MarketConfig; +import com.fr.design.base.mode.DesignModeContext; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.extra.WebViewDlgHelper; +import com.fr.design.form.util.XCreatorConstants; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.WidgetToolBarPane; +import com.fr.design.mainframe.share.collect.ComponentCollector; +import com.fr.form.share.group.DefaultShareGroup; +import com.fr.design.mainframe.share.ui.local.LocalWidgetRepoPane; +import com.fr.design.mainframe.share.ui.online.OnlineWidgetRepoPane; +import com.fr.design.mainframe.share.ui.online.OnlineWidgetSelectPane; +import com.fr.design.mainframe.share.util.DownloadUtils; +import com.fr.design.mainframe.share.util.ShareComponentUtils; +import com.fr.design.mainframe.share.util.ShareUIUtils; +import com.fr.design.ui.util.UIUtil; +import com.fr.form.share.SharableWidgetProvider; +import com.fr.form.share.bean.OnlineShareWidget; +import com.fr.form.share.constants.ShareComponentConstants; +import com.fr.form.share.group.DefaultShareGroupManager; +import com.fr.form.share.group.Group; +import com.fr.form.share.utils.ShareUtils; +import com.fr.form.ui.AbstractBorderStyleWidget; +import com.fr.form.ui.Widget; +import com.fr.general.IOUtils; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; + +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import javax.swing.SwingWorker; +import java.awt.AlphaComposite; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Composite; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Rectangle; +import java.awt.RenderingHints; +import java.awt.Stroke; +import java.awt.dnd.DnDConstants; +import java.awt.event.MouseEvent; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.util.UUID; +import java.util.concurrent.ExecutionException; + +/** + * Created by kerry on 2020-10-19 + * 商城组件块 + */ +public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock { + private boolean isMouseEnter = false; + private boolean downloading = false; + private static final Color COVER_COLOR = Color.decode("#333334"); + protected MouseEvent lastPressEvent; + private double process = 0D; + private static final BufferedImage WIDGET_INSTALLED_ICON = IOUtils.readImage("/com/fr/base/images/share/widget_installed.png"); + private static final BufferedImage WIDGET_DOWNLOAD_ICON = IOUtils.readImage("/com/fr/base/images/share/download.png"); + private static final BufferedImage WIDGET_DOWNLOADING_ICON = IOUtils.readImage("/com/fr/base/images/share/downloading.png"); + + public OnlineWidgetBlock(OnlineShareWidget widget, OnlineWidgetSelectPane parentPane) { + super(widget, parentPane); + this.add(createSouthPane(widget), BorderLayout.SOUTH); + new DragAndDropDragGestureListener(this, DnDConstants.ACTION_COPY_OR_MOVE); + } + + protected JPanel createSouthPane(OnlineShareWidget widget) { + JPanel southPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + UILabel label = new UILabel(widget.getName(), UILabel.CENTER); + label.setToolTipText(widget.getName()); + label.setHorizontalTextPosition(SwingConstants.LEFT); + southPane.add(label, BorderLayout.CENTER); + UILabel emptyLabel = new UILabel(); + emptyLabel.setPreferredSize(new Dimension(25, 20)); + southPane.add(emptyLabel, BorderLayout.EAST); + southPane.setBackground(Color.WHITE); + return southPane; + } + + @Override + public void mouseEntered(MouseEvent e) { + super.mouseEntered(e); + this.isMouseEnter = true; + this.repaint(); + } + + @Override + public void mouseExited(MouseEvent e) { + super.mouseExited(e); + this.isMouseEnter = false; + this.repaint(); + } + + @Override + public void mousePressed(MouseEvent e) { + super.mousePressed(e); + this.lastPressEvent = e; + } + + @Override + public void mouseClicked(MouseEvent e) { + super.mouseClicked(e); + if (!checkWidgetInstalled() && getDownloadIconRec().contains(e.getX(), e.getY())) { + downLoadWidget(); + } + } + + @Override + public void mouseDragged(MouseEvent e) { + if (DesignModeContext.isAuthorityEditing() || !checkWidgetInstalled()) { + return; + } + if (lastPressEvent == null) { + return; + } + Object source = e.getSource(); + Widget creatorSource; + String shareId; + if (source instanceof OnlineWidgetBlock) { + OnlineWidgetBlock no = (OnlineWidgetBlock) e.getSource(); + if (no == null) { + return; + } + shareId = widget.getUuid(); + creatorSource = ShareUtils.getElCaseEditorById(shareId); + if (creatorSource == null) { + ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Plugin_Component_Drag_Error_Info")); + return; + } + creatorSource.setWidgetID(UUID.randomUUID().toString()); + ((AbstractBorderStyleWidget) creatorSource).addWidgetAttrMark(new SharableAttrMark(true)); + SharableWidgetProvider bindInfo = ShareUtils.getElCaseBindInfoById(shareId); + //tab布局WCardMainBorderLayout通过反射出来的大小是960*480 + XCreator xCreator = ShareComponentUtils.createXCreator(creatorSource, shareId, bindInfo); + WidgetToolBarPane.getTarget().startDraggingBean(xCreator); + lastPressEvent = null; + this.setBorder(null); + } + } + + private void downLoadWidget() { + if (OnlineWidgetRepoPane.getInstance().isShowPackagePanel()) { + ComponentCollector.getInstance().collectDownloadPktNum(); + } + final WidgetDownloadProcess process = new WidgetDownloadProcess(); + downloading = true; + process.process(0.0D); + String userName = MarketConfig.getInstance().getBbsUsername(); + if (StringUtils.isEmpty(userName)) { + WebViewDlgHelper.createLoginDialog(); + downloading = false; + return; + } + + new SwingWorker() { + + @Override + protected Boolean doInBackground() { + String filePath; + try { + filePath = DownloadUtils.download(widget.getId(), widget.getName() + "." + widget.getUuid(), process); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + return false; + } + ShareComponentUtils.checkReadMe(); + //安装 + File file = new File(filePath); + try { + if (file.exists() && getDefaultGroup().installModule(file)) { + ShareUtils.recordInstallTime(file.getName(), System.currentTimeMillis()); + ComponentCollector.getInstance().collectCmpDownLoad(widget.getUuid()); + } + } catch (IOException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } finally { + //删掉下载组件的目录 + StableUtils.deleteFile(file); + } + return true; + + } + + @Override + protected void done() { + downloading = false; + OnlineWidgetBlock.this.process = 0.0D; + try { + if (get()) { + LocalWidgetRepoPane.getInstance().refreshShowPanel(); + } else { + ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Plugin_Component_Download_Failed")); + } + } catch (InterruptedException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + Thread.currentThread().interrupt(); + } catch (ExecutionException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + }.execute(); + + + } + + + @Override + public void mouseMoved(MouseEvent e) { + super.mouseMoved(e); + if (checkWidgetInstalled()) { + this.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); + } else if (getDownloadIconRec().contains(e.getX(), e.getY())) { + this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + } else { + this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } + } + + private Rectangle getDownloadIconRec() { + return new Rectangle(ShareComponentConstants.SHARE_THUMB_WIDTH / 2 - 12, ShareComponentConstants.SHARE_BLOCK_HEIGHT / 2 - 16, 24, 24); + } + + private boolean checkWidgetInstalled() { + return ShareUtils.getElCaseBindInfoById(widget.getUuid()) != null; + } + + private Group getDefaultGroup() { + return DefaultShareGroupManager.getInstance().getGroup(DefaultShareGroup.GROUP_NAME); + } + + public void paint(Graphics g) { + super.paint(g); + ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB); + int x = 0; + int y = 0; + int w = getWidth(); + int h = getHeight(); + if (process == 1 || checkWidgetInstalled()) { + Graphics2D g2d = (Graphics2D) g; + g2d.drawImage( + WIDGET_INSTALLED_ICON, + w - 20, + h - 20, + WIDGET_INSTALLED_ICON.getWidth(), + WIDGET_INSTALLED_ICON.getHeight(), + null, + this + ); + return; + } + //如果鼠标移动到布局内且布局不可编辑,画出编辑蒙层 + if (isMouseEnter || downloading) { + Graphics2D g2d = (Graphics2D) g; + Composite oldComposite = g2d.getComposite(); + //画白色的编辑层 + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 20 / 100.0F)); + g2d.setColor(COVER_COLOR); + g2d.fillRect(x, y, w, h); + g2d.setComposite(oldComposite); + //画编辑按钮图标 + BufferedImage image = (process > 0 || downloading) ? WIDGET_DOWNLOADING_ICON : WIDGET_DOWNLOAD_ICON; + g2d.drawImage( + image, + (x + w / 2 - 12), + (y + h / 2 - 16), + image.getWidth(), + image.getHeight(), + null, + this + ); + Stroke oldStroke = g2d.getStroke(); + g2d.setStroke(XCreatorConstants.STROKE); + g2d.setColor(Color.decode("#419BF9")); + double arcAngle = downloading ? (36 + 360 * 0.9 * process) : 0.0; + g2d.drawArc(x + w / 2 - 12, y + h / 2 - 16, 24, 24, 90, -(int) arcAngle); + g2d.setColor(Color.WHITE); + g2d.setStroke(oldStroke); + } + } + + + class WidgetDownloadProcess implements com.fr.design.extra.Process { + + @Override + public void process(Double aDouble) { + OnlineWidgetBlock.this.process = aDouble; + final Dimension dimension = OnlineWidgetBlock.this.getSize(); + UIUtil.invokeAndWaitIfNeeded(() -> OnlineWidgetBlock.this.paintImmediately(0, 0, dimension.width, dimension.height)); + } + } + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetPackageBlock.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetPackageBlock.java new file mode 100644 index 0000000000..f22ad5b83a --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetPackageBlock.java @@ -0,0 +1,57 @@ +package com.fr.design.mainframe.share.ui.block; + +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.share.ui.base.MouseClickListener; +import com.fr.design.mainframe.share.ui.online.widgetpackage.OnlineWidgetPackageSelectPane; +import com.fr.form.share.bean.OnlineShareWidget; +import com.fr.form.share.constants.ShareComponentConstants; + +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.event.MouseEvent; + +/** + * Created by kerry on 2020-10-21 + * 商城组件包块 + */ +public class OnlineWidgetPackageBlock extends AbstractOnlineWidgetBlock { + private static final int IMAGE_HEIGHT = 167; + private static final Color TEXT_COLOR = Color.decode("#419BF9"); + + protected JPanel createSouthPane(final OnlineShareWidget widget, final OnlineWidgetPackageSelectPane parentPane) { + JPanel southPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + southPane.setBackground(Color.WHITE); + UILabel label = new UILabel(widget.getName(), UILabel.CENTER); + label.setToolTipText(widget.getName()); + southPane.add(label, BorderLayout.CENTER); + UILabel detailLabel = new UILabel(Toolkit.i18nText("Fine-Plugin_Component_Online_Package_Detail")); + detailLabel.setForeground(TEXT_COLOR); + detailLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + detailLabel.addMouseListener(new MouseClickListener() { + @Override + public void mouseClicked(MouseEvent e) { + parentPane.showWidgetDetailPane(widget.getId()); + } + }); + southPane.add(detailLabel, BorderLayout.EAST); + return southPane; + } + + protected Dimension getCoverDimension() { + return new Dimension(ShareComponentConstants.SHARE_PACKAGE_BLOCK_WIDTH, IMAGE_HEIGHT); + } + + public OnlineWidgetPackageBlock(OnlineShareWidget widget, OnlineWidgetPackageSelectPane parentPane) { + super(widget, parentPane); + this.setPreferredSize(new Dimension(ShareComponentConstants.SHARE_PACKAGE_BLOCK_WIDTH, ShareComponentConstants.SHARE_PACKAGE_BLOCK_HEIGHT)); + this.add(createSouthPane(widget, parentPane), BorderLayout.SOUTH); + } + +} + + diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/PreviewWidgetBlock.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/PreviewWidgetBlock.java new file mode 100644 index 0000000000..8ad9e2b11c --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/PreviewWidgetBlock.java @@ -0,0 +1,138 @@ +package com.fr.design.mainframe.share.ui.block; + +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.form.share.constants.ShareComponentConstants; +import org.jetbrains.annotations.NotNull; + +import javax.swing.ImageIcon; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Image; +import java.awt.Rectangle; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; +import java.io.Serializable; + +/** + * Created by kerry on 2020-10-21 + */ +public abstract class PreviewWidgetBlock extends JPanel implements MouseListener, MouseMotionListener, Serializable { + protected T widget; + private boolean showing = false; + + public PreviewWidgetBlock(T widget) { + this.widget = widget; + initPane(); + this.addMouseListener(this); + this.addMouseMotionListener(this); + } + + protected void initPane() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.setPreferredSize(new Dimension(ShareComponentConstants.SHARE_THUMB_WIDTH, ShareComponentConstants.SHARE_BLOCK_HEIGHT)); + JPanel labelPane = new JPanel(new BorderLayout()); + Image image = getCoverImage(); + labelPane.add(initCoverLabel(image)); + labelPane.setBackground(Color.WHITE); + this.add(labelPane, BorderLayout.CENTER); + } + + protected UILabel initCoverLabel(Image image) { + return new UILabel(new ImageIcon(image)); + } + + public T getWidget() { + return widget; + } + + + @NotNull + protected abstract Image getCoverImage(); + + protected Dimension getCoverDimension() { + return new Dimension(ShareComponentConstants.SHARE_THUMB_WIDTH, ShareComponentConstants.SHARE_THUMB_HEIGHT); + } + + private void showPreviewPane() { + synchronized (this) { + if (!showing) { + showPreview(widget); + showing = true; + } + } + } + protected abstract String getWidgetUuid(); + + protected abstract void showPreview(T widget); + + protected abstract void hidePreview(); + + private void hidePreviewPane() { + if (showing) { + hidePreview(); + showing = false; + } + } + + public abstract Image getPreviewImage(); + + @Override + public void mouseClicked(MouseEvent e) { + this.hidePreviewPane(); + } + + @Override + public void mousePressed(MouseEvent e) { + + } + + @Override + public void mouseReleased(MouseEvent e) { + + } + + @Override + public void mouseEntered(MouseEvent e) { + + } + + @Override + public void mouseExited(MouseEvent e) { + this.hidePreviewPane(); + } + + @Override + public void mouseDragged(MouseEvent e) { + + } + + @Override + public void mouseMoved(MouseEvent e) { + Dimension dimension = getCoverDimension(); + Rectangle containerRec = new Rectangle(0, 0, dimension.width, dimension.height); + if (containerRec.contains(e.getX(), e.getY())) { + this.showPreviewPane(); + } else { + this.hidePreviewPane(); + } + } + + @Override + public void paint(Graphics g) { + Graphics2D g2d = (Graphics2D) g; + g2d.setColor(Color.WHITE); + g2d.fillRect(0, 0, getWidth(), getHeight()); + super.paint(g); + } + + protected void removeListener() { + this.removeMouseListener(this); + this.removeMouseMotionListener(this); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/SimpleWidgetBlock.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/SimpleWidgetBlock.java new file mode 100644 index 0000000000..cf5e948de9 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/SimpleWidgetBlock.java @@ -0,0 +1,17 @@ +package com.fr.design.mainframe.share.ui.block; + +import com.fr.design.mainframe.share.ui.online.OnlineWidgetSelectPane; +import com.fr.form.share.bean.OnlineShareWidget; + +/** + * @Author: Yuan.Wang + * @Date: 2020/12/22 + * 只能显示,无其他功能的组件块 + */ +public class SimpleWidgetBlock extends OnlineWidgetBlock { + public SimpleWidgetBlock(OnlineShareWidget widget, OnlineWidgetSelectPane parentPane) { + super(widget, parentPane); + this.removeListener(); + this.setFocusable(false); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/GroupPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/GroupPane.java new file mode 100644 index 0000000000..b652bd6fb9 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/GroupPane.java @@ -0,0 +1,380 @@ +package com.fr.design.mainframe.share.ui.local; + +import com.fr.design.actions.UpdateAction; +import com.fr.design.constants.UIConstants; +import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.imenu.UIPopupMenu; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.share.group.ui.GroupFileDialog; +import com.fr.design.mainframe.share.sort.WidgetSortType; +import com.fr.design.mainframe.share.ui.base.PopupMenuItem; +import com.fr.design.mainframe.share.ui.widgetfilter.LocalWidgetFilter; +import com.fr.design.mainframe.share.util.ShareUIUtils; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.form.share.SharableWidgetProvider; +import com.fr.form.share.group.DefaultShareGroupManager; +import com.fr.form.share.group.Group; +import com.fr.general.IOUtils; +import com.fr.stable.StringUtils; + +import javax.swing.Action; +import javax.swing.BorderFactory; +import javax.swing.Icon; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Yuan.Wang + * @Date: 2020/11/5 + */ +class GroupPane extends JPanel { + private static final Icon downIcon = IOUtils.readIcon("/com/fr/base/images/share/arrow_down.png"); + private static final Icon rightIcon = IOUtils.readIcon("/com/fr/base/images/share/arrow_right.png"); + private static final int DEFAULT_HEIGHT = 24; + private final Group group; + private LocalWidgetSelectPane contentPanel; + private UIHeaderPane headerPanel; + private final int headHeight; + //是否展开 + private boolean expendStatus; + private SharableWidgetProvider[] elCaseBindInfoList; + + private GroupPane(Group group) { + this(group, DEFAULT_HEIGHT, group.isDefaultExpend()); + } + + private GroupPane(Group group, boolean expendStatus) { + this(group, DEFAULT_HEIGHT, expendStatus); + } + + private GroupPane(Group group, int headHeight, boolean expendStatus) { + this.group = group; + this.headHeight = headHeight; + this.expendStatus = expendStatus; + initComponents(); + } + + public boolean isComponentEditable() { + return LocalWidgetRepoPane.getInstance().isEditable(); + } + + private void initComponents() { + this.setLayout(new BorderLayout()); + this.setOpaque(false); + + headerPanel = new UIHeaderPane(group.getGroupName(), headHeight); + JPanel head = new JPanel(new BorderLayout()); + head.add(headerPanel, BorderLayout.NORTH); + head.setPreferredSize(new Dimension(240, 24)); + this.add(head, BorderLayout.NORTH); + refreshShowPanel(); + } + + public void refreshShowPanel() { + this.setVisible(true); + refreshBindInfoList(); + + //按照筛选条件进行过滤 + elCaseBindInfoList = LocalWidgetFilter.getInstance().filter(elCaseBindInfoList); + boolean needExpendGroup = expendStatus || (isFiltering() && elCaseBindInfoList.length > 0); + if (elCaseBindInfoList.length == 0 && isFiltering()) { + this.setVisible(false); + } + + //刷新面板的时候可能还有查询条件,如果有的话走一遍查询的逻辑 + String keyWord = LocalWidgetRepoPane.getInstance().getKeyWord4Searching(); + if (StringUtils.isNotEmpty(keyWord)) { + searchByKeyword(keyWord); + return; + } + reCreateShowPane(elCaseBindInfoList); + expendGroup(needExpendGroup); + } + + public void reCreateShowPane(SharableWidgetProvider[] widgets) { + if (contentPanel != null) { + contentPanel.hidePreviewPane(); + GroupPane.this.remove(contentPanel); + } + contentPanel = new LocalWidgetSelectPane(group, widgets, isComponentEditable()); + GroupPane.this.add(contentPanel, BorderLayout.CENTER); + headerPanel.setMenuItemVisible(!isComponentEditable()); + validate(); + repaint(); + revalidate(); + } + + private void expendGroup(boolean expendStatus) { + headerPanel.showExpand(expendStatus); + contentPanel.setVisible(expendStatus); + } + + protected void setExpendStatus(boolean expendStatus) { + //在筛选或者搜索状态,调用这个方法直接返回 + if (isFiltering() || isSearching()) { + return; + } + this.expendStatus = expendStatus; + } + + public SharableWidgetProvider[] getAllBindInfoList() { + SharableWidgetProvider[] widgetProviders = group.getAllBindInfoList(); + if (widgetProviders == null) { + widgetProviders = new SharableWidgetProvider[0]; + } + WidgetSortType.INSTALL_TIME.sort(widgetProviders); + return widgetProviders; + } + + public void sortWidget(WidgetSortType sortType) { + sortType.sort(elCaseBindInfoList); + reCreateShowPane(elCaseBindInfoList); + } + + public void searchByKeyword(String text) { + this.setVisible(true); + SharableWidgetProvider[] sharableWidgetArr = elCaseBindInfoList; + List widgets = new ArrayList<>(); + if (StringUtils.isNotEmpty(text)) { + for (SharableWidgetProvider provider : elCaseBindInfoList) { + if (provider.getName().toLowerCase().contains(text)) { + widgets.add(provider); + } + } + sharableWidgetArr = widgets.toArray(new SharableWidgetProvider[widgets.size()]); + } + + boolean needExpendGroup = expendStatus || (isSearching() && sharableWidgetArr.length > 0); + if (isSearching() && sharableWidgetArr.length == 0) { + setVisible(false); + } + reCreateShowPane(sharableWidgetArr); + expendGroup(needExpendGroup); + } + + public void refreshBindInfoList() { + elCaseBindInfoList = getAllBindInfoList(); + } + + private boolean isFiltering() { + return LocalWidgetRepoPane.getInstance().isFiltering(); + } + + private boolean isSearching() { + return LocalWidgetRepoPane.getInstance().isSearching(); + } + + private class UIHeaderPane extends JPanel { + private static final long serialVersionUID = 1L; + + private final UILabel arrow; + private final UILabel menuItem; + private final UILabel titleLabel; + private final int headHeight; + private boolean pressed; + private boolean hover; + + private final MouseAdapter mouseAdapter = new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if (e.getButton() == MouseEvent.BUTTON3 && group.isEditable() && !GroupPane.this.isComponentEditable()) { + UIPopupMenu popupMenu = new UIPopupMenu(); + popupMenu.setOnlyText(true); + popupMenu.setBackground(UIConstants.DEFAULT_BG_RULER); + popupMenu.add(new PopupMenuItem(new RenameAction())); + popupMenu.add(new PopupMenuItem(new RemoveAction())); + + GUICoreUtils.showPopupMenu(popupMenu, UIHeaderPane.this, e.getX(), e.getY()); + } + } + + @Override + public void mousePressed(MouseEvent e) { + pressed = true; + } + + @Override + public void mouseReleased(MouseEvent e) { + if (pressed && hover) { + dealClickAction(e); + } + pressed = false; + } + + @Override + public void mouseEntered(MouseEvent e) { + hover = true; + } + + @Override + public void mouseExited(MouseEvent e) { + hover = false; + } + }; + + public UIHeaderPane(String title, int headHeight) { + this.setLayout(new BorderLayout()); + this.setBorder(BorderFactory.createEmptyBorder(0, 10, 1, 2)); + JPanel panel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + panel.setBackground(Color.decode("#EDEDEE")); + this.headHeight = headHeight; + arrow = new UILabel(downIcon); + arrow.setOpaque(false); + menuItem = createMenuItem(); + titleLabel = new UILabel(title); + titleLabel.setOpaque(false); + + JPanel leftPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + leftPanel.add(arrow); + leftPanel.add(titleLabel); + leftPanel.setOpaque(false); + + panel.add(leftPanel, BorderLayout.CENTER); + + if (group.isEditable()) { + panel.add(menuItem, BorderLayout.EAST); + } + add(panel, BorderLayout.CENTER); + addListener(); + } + + public void showExpand(boolean expend) { + Icon showIcon = expend ? downIcon : rightIcon; + arrow.setIcon(showIcon); + } + + @Override + public Dimension getPreferredSize() { + return new Dimension(this.getWidth(), headHeight); + } + + @Override + public Dimension getSize() { + return new Dimension(this.getWidth(), headHeight); + } + + public UILabel createMenuItem() { + UILabel label = new UILabel(IOUtils.readIcon("/com/fr/base/images/share/menu_item.png")); + label.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + UIPopupMenu popupMenu = new UIPopupMenu(); + popupMenu.setOnlyText(true); + popupMenu.setBackground(UIConstants.DEFAULT_BG_RULER); + popupMenu.add(new PopupMenuItem(new RenameAction())); + popupMenu.add(new PopupMenuItem(new RemoveAction())); + + GUICoreUtils.showPopupMenu(popupMenu, menuItem, 0, menuItem.getSize().height); + } + }); + label.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5)); + label.setOpaque(false); + return label; + } + + protected void setMenuItemVisible(boolean visible) { + menuItem.setVisible(visible); + } + + private void addListener() { + this.addMouseListener(mouseAdapter); + } + + /** + * 由鼠标释放时调用该方法来触发左键点击事件 + */ + private void dealClickAction(MouseEvent e) { + if (e.getButton() == MouseEvent.BUTTON1) { + boolean isShow = contentPanel.isShowing(); + contentPanel.setVisible(!isShow); + GroupPane.this.setExpendStatus(!isShow); + showExpand(!isShow); + + getParent().validate(); + getParent().repaint(); + } + } + + private class RenameAction extends UpdateAction { + public RenameAction() { + this.putValue(Action.SMALL_ICON, null); + this.setName(Toolkit.i18nText("Fine-Plugin_Component_Group_Rename")); + } + + @Override + public void actionPerformed(ActionEvent e) { + new GroupFileDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Plugin_Component_Group_Rename", group.getGroupName())) { + @Override + protected void confirmClose() { + this.dispose(); + String groupName = getFileName().replaceAll("[\\\\/:*?\"<>|]", StringUtils.EMPTY); + if (DefaultShareGroupManager.getInstance().renameGroup(group, groupName)) { + titleLabel.setText(groupName); + repaint(); + } else { + ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Plugin_Component_Group_Rename_Failure")); + } + } + + @Override + protected boolean isDuplicate(String fileName) { + return DefaultShareGroupManager.getInstance().exist(fileName); + } + }; + + } + } + + private class RemoveAction extends UpdateAction { + public RemoveAction() { + this.putValue(Action.SMALL_ICON, null); + this.setName(Toolkit.i18nText("Fine-Plugin_Component_Group_Remove")); + } + + @Override + public void actionPerformed(ActionEvent e) { + int rv = FineJOptionPane.showConfirmDialog( + DesignerContext.getDesignerFrame(), + Toolkit.i18nText("Fine-Plugin_Component_Group_Remove_Info"), + Toolkit.i18nText("Fine-Plugin_Component_Group_Confirm"), + FineJOptionPane.YES_NO_OPTION + ); + if (rv == FineJOptionPane.YES_OPTION) { + if (DefaultShareGroupManager.getInstance().removeGroup(group)) { + LocalWidgetRepoPane.getInstance().removeGroup(group.getGroupName()); + } else { + ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Plugin_Component_Group_Remove_Failure")); + } + } + } + } + } + + public enum GroupCreateStrategy { + DEFAULT { + @Override + public GroupPane creteGroupPane(Group group) { + return new GroupPane(group); + } + }, + CLOSURE { + @Override + public GroupPane creteGroupPane(Group group) { + return new GroupPane(group, false); + } + }; + + abstract public GroupPane creteGroupPane(Group group); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalPaneStatus.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalPaneStatus.java new file mode 100644 index 0000000000..9ad66d9e9b --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalPaneStatus.java @@ -0,0 +1,87 @@ +package com.fr.design.mainframe.share.ui.local; + +import com.fr.base.BaseUtils; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.share.ui.base.LoadingPane; +import com.fr.design.mainframe.share.ui.base.NoMatchPane; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; + +/** + * @Author: Yuan.Wang + * @Date: 2020/12/1 + */ +enum LocalPaneStatus { + + //无匹配 + NO_MATCH { + @Override + public JPanel getPanel() { + return new NoMatchPane(); + } + }, + + //正常 + NORMAL { + @Override + public JPanel getPanel() { + return new JPanel(); + } + }, + + //空 + EMPTY { + @Override + public JPanel getPanel() { + JPanel panel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + UILabel picLabel = new UILabel(); + picLabel.setIcon(BaseUtils.readIcon("com/fr/base/images/share/empty.png")); + picLabel.setHorizontalAlignment(SwingConstants.CENTER); + + panel.add(picLabel, BorderLayout.CENTER); + + JPanel labelPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + UILabel topLabel = new UILabel(Toolkit.i18nText("Fine-Plugin_Component_Empty_First"), SwingConstants.CENTER); + topLabel.setForeground(Color.GRAY); + UILabel bottomLabel = new UILabel(Toolkit.i18nText("Fine-Plugin_Component_Empty_Second"), SwingConstants.CENTER); + bottomLabel.setForeground(Color.GRAY); + labelPanel.add(topLabel, BorderLayout.CENTER); + labelPanel.add(bottomLabel, BorderLayout.SOUTH); + labelPanel.setPreferredSize(new Dimension(240, 40)); + panel.add(labelPanel, BorderLayout.SOUTH); + + panel.setPreferredSize(new Dimension(240, 180)); + + + JPanel emptyPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + emptyPanel.setBorder(BorderFactory.createEmptyBorder(100, 0, 0, 0)); + emptyPanel.add(panel, BorderLayout.NORTH); + return emptyPanel; + } + }, + + //加载 + LOADING { + @Override + public JPanel getPanel() { + return new LoadingPane(); + } + }, + + //安装 + INSTALLING { + @Override + public JPanel getPanel() { + return new LoadingPane(Toolkit.i18nText("Fine-Plugin_Component_installing")); + } + }; + + public abstract JPanel getPanel(); +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetRepoPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetRepoPane.java new file mode 100644 index 0000000000..061b630ff0 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetRepoPane.java @@ -0,0 +1,266 @@ +package com.fr.design.mainframe.share.ui.local; + +import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.layout.VerticalFlowLayout; +import com.fr.design.mainframe.share.sort.WidgetSortType; +import com.fr.design.mainframe.share.ui.widgetfilter.LocalWidgetFilter; +import com.fr.design.mainframe.share.util.InstallComponentHelper; +import com.fr.design.mainframe.share.util.ShareComponentUtils; +import com.fr.form.share.group.DefaultShareGroupManager; +import com.fr.form.share.group.Group; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.StringUtils; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.SwingWorker; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * Created by kerry on 2020-10-16 + */ +public class LocalWidgetRepoPane extends BasicPane { + + private JPanel centerPane; + private UIScrollPane groupsScrollPane; + private JPanel groupsPane; + private ManagePane managePane; + + private final Map groupPaneMap = new HashMap<>(); + private final AtomicBoolean isRefreshing = new AtomicBoolean(false); + private boolean editable; + private CardLayout cardLayout; + private String keyWord4Searching = StringUtils.EMPTY; + + private LocalWidgetRepoPane() { + setLayout(FRGUIPaneFactory.createBorderLayout()); + initPane(); + } + + public static LocalWidgetRepoPane getInstance() { + return HOLDER.singleton; + } + + private static class HOLDER { + private static final LocalWidgetRepoPane singleton = new LocalWidgetRepoPane(); + } + + public boolean isEditable() { + return editable; + } + + public String getKeyWord4Searching() { + return keyWord4Searching; + } + + /** + * 初始化 + */ + public void initPane() { + //新用户预装组件 + InstallComponentHelper.installPreComponent(); + JPanel componentLibPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + componentLibPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 15, 0)); + + ToolbarPane toolbarPane = new ToolbarPane(); + managePane = new ManagePane(); + + JPanel northPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + northPane.add(toolbarPane, BorderLayout.NORTH); + northPane.add(managePane, BorderLayout.CENTER); + + cardLayout = new CardLayout(); + centerPane = new JPanel(cardLayout); + centerPane.add(LocalPaneStatus.NO_MATCH.getPanel(), LocalPaneStatus.NO_MATCH.name()); + centerPane.add(LocalPaneStatus.EMPTY.getPanel(), LocalPaneStatus.EMPTY.name()); + centerPane.add(LocalPaneStatus.LOADING.getPanel(), LocalPaneStatus.LOADING.name()); + centerPane.add(LocalPaneStatus.INSTALLING.getPanel(), LocalPaneStatus.INSTALLING.name()); + + componentLibPanel.add(northPane, BorderLayout.NORTH); + componentLibPanel.add(centerPane, BorderLayout.CENTER); + add(componentLibPanel, BorderLayout.CENTER); + cardLayout.show(centerPane, LocalPaneStatus.LOADING.name()); + toolbarPane.addFilterPopupStateChangeListener(state -> setWidgetPaneScrollEnable(!state)); + + doRefresh(); + } + + public void refreshAllGroupPane() { + refreshAllGroupPane(GroupPane.GroupCreateStrategy.DEFAULT); + } + + public void refreshAllGroupPane(GroupPane.GroupCreateStrategy createStrategy) { + editable = false; + groupPaneMap.clear(); + if (groupsScrollPane != null) { + centerPane.remove(groupsScrollPane); + } + groupsPane = FRGUIPaneFactory.createVerticalFlowLayout_Pane(false, VerticalFlowLayout.TOP, 0, 5); + + Group[] groups = DefaultShareGroupManager.getInstance().getAllGroup(); + for (Group group : groups) { + GroupPane groupPane = createStrategy.creteGroupPane(group); + groupPaneMap.put(group.getGroupName(), groupPane); + groupsPane.add(groupPane, BorderLayout.NORTH); + } + groupsScrollPane = new UIScrollPane(groupsPane); + groupsScrollPane.setBorder(null); + groupsScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); + + centerPane.add(groupsScrollPane, LocalPaneStatus.NORMAL.name()); + switchPane(); + } + + public void refreshPane() { + managePane.switchPanel(false); + switchPane(LocalPaneStatus.LOADING); + doRefresh(); + } + + public void switch2InstallingPane() { + switchPane(LocalPaneStatus.INSTALLING); + } + + public void refreshShowPanel(boolean isEdit) { + this.editable = isEdit; + refreshShowPanel(); + } + + public void refreshShowPanel() { + for (GroupPane groupPane : groupPaneMap.values()) { + groupPane.refreshShowPanel(); + } + switchPane(); + } + + public void refreshShowPanel(Group group) { + if (groupPaneMap.containsKey(group.getGroupName())) { + groupPaneMap.get(group.getGroupName()).refreshShowPanel(); + } + switchPane(); + } + + public void setWidgetPaneScrollEnable(boolean enable) { + groupsScrollPane.setWheelScrollingEnabled(enable); + } + + public void setManageButtonEnable(boolean enable) { + managePane.setButtonEnable(enable); + } + + public void removeGroup(String groupName) { + JPanel jPanel = groupPaneMap.remove(groupName); + groupsPane.remove(jPanel); + switchPane(); + } + + public void addGroup(Group group) { + GroupPane groupPane = GroupPane.GroupCreateStrategy.DEFAULT.creteGroupPane(group); + groupPaneMap.put(group.getGroupName(), groupPane); + groupsPane.add(groupPane); + switchPane(); + } + + public void searchByKeyword(String text) { + keyWord4Searching = text; + for (GroupPane groupPane : groupPaneMap.values()) { + groupPane.searchByKeyword(text); + } + switchPane(); + } + + public void sortWidget(WidgetSortType sortType) { + for (GroupPane groupPane : groupPaneMap.values()) { + groupPane.sortWidget(sortType); + } + } + + + private void doRefresh() { + if (isRefreshing.get()) { + return; + } + new SwingWorker() { + @Override + protected Boolean doInBackground() throws Exception { + if (isRefreshing.compareAndSet(false, true)) { + boolean isRefresh = DefaultShareGroupManager.getInstance().refresh(); + if (isRefresh) { + ShareComponentUtils.checkReadMe(); + } + return isRefresh; + } + return false; + } + + @Override + public void done() { + try { + if (get()) { + refreshAllGroupPane(); + } + } catch (InterruptedException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + Thread.currentThread().interrupt(); + } catch (ExecutionException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } finally { + isRefreshing.set(false); + } + } + }.execute(); + } + + /** + * 切换为要显示的面板 + */ + private void switchPane() { + switchPane(getStatus()); + } + + private void switchPane(LocalPaneStatus status) { + cardLayout.show(centerPane, status.name()); + centerPane.validate(); + centerPane.repaint(); + } + + private LocalPaneStatus getStatus() { + return isEmpty() ? LocalPaneStatus.EMPTY : isNoMatch() ? LocalPaneStatus.NO_MATCH : LocalPaneStatus.NORMAL; + } + + public boolean isFiltering() { + return LocalWidgetFilter.getInstance().hasFilter(); + } + + public boolean isSearching() { + return StringUtils.isNotEmpty(keyWord4Searching); + } + + private boolean isNoMatch() { + for (GroupPane groupPane : groupPaneMap.values()) { + if (groupPane.isVisible()) { + return false; + } + } + return true; + } + + private boolean isEmpty() { + Group[] groups = DefaultShareGroupManager.getInstance().getAllGroup(); + return groups.length == 1 && groups[0].getAllBindInfoList().length == 0; + } + + @Override + protected String title4PopupWindow() { + return Toolkit.i18nText("Fine-Plugin_Component_Local_Widget"); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetSelectPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetSelectPane.java new file mode 100644 index 0000000000..73d6720f3c --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetSelectPane.java @@ -0,0 +1,113 @@ +package com.fr.design.mainframe.share.ui.local; + +import com.fr.design.mainframe.share.AbstractWidgetSelectPane; +import com.fr.design.mainframe.share.ui.block.LocalWidgetBlock; +import com.fr.form.share.DefaultSharableWidget; +import com.fr.form.share.SharableWidgetProvider; +import com.fr.form.share.constants.ShareComponentConstants; +import com.fr.form.share.group.Group; +import com.fr.form.share.record.ShareWidgetInfoManager; +import com.fr.general.ComparatorUtils; +import com.fr.stable.ArrayUtils; + +import javax.swing.BorderFactory; +import java.awt.AWTEvent; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Point; +import java.awt.event.AWTEventListener; +import java.awt.event.MouseEvent; + +/** + * created by Harrison on 2020/03/23 + **/ +public class LocalWidgetSelectPane extends AbstractWidgetSelectPane { + private LocalWidgetBlock selectedBlock; + private final Group group; + + public LocalWidgetSelectPane(Group group, SharableWidgetProvider[] providers, boolean isEdit) { + this.group = group; + // 表示Popup弹窗是否能被点击到 + AWTEventListener awtEventListener = new AWTEventListener() { + @Override + public void eventDispatched(AWTEvent event) { + if (event instanceof MouseEvent) { + MouseEvent mv = (MouseEvent) event; + if (isCanCancelSelect(mv, selectedBlock)) { + LocalWidgetSelectPane.this.selectedBlock = null; + LocalWidgetSelectPane.this.repaint(); + } + } + + } + + private boolean isCanCancelSelect(MouseEvent mv, LocalWidgetBlock selectedBlock) { + if (mv.getClickCount() < 1) { + return false; + } + // 表示Popup弹窗是否能被点击到 + boolean clickFlag = false; + if (selectedBlock != null) { + if (!selectedBlock.isShowing()) { + return false; + } + Point p = selectedBlock.getLocationOnScreen(); + Point clickPoint = mv.getLocationOnScreen(); + clickFlag = clickPoint.getX() >= p.getX() + && clickPoint.getY() >= p.getY() + && clickPoint.getX() <= selectedBlock.getWidth() + p.getX() + && clickPoint.getY() <= p.getY() + selectedBlock.getHeight(); + + } + return selectedBlock != null && !clickFlag && !ComparatorUtils.equals(mv.getSource(), selectedBlock); + } + }; + + java.awt.Toolkit.getDefaultToolkit().addAWTEventListener(awtEventListener, AWTEvent.MOUSE_EVENT_MASK); + + // 设置面板的边框 ,距离上、左、下、右 的距离 + this.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0)); + if (ArrayUtils.isNotEmpty(providers)) { + showComponent(providers, isEdit); + } else { + showEmpty(); + } + ShareWidgetInfoManager.getInstance().checkInstallCompInfo(providers); + } + + public Group getGroup() { + return group; + } + + private void showComponent(SharableWidgetProvider[] providers, boolean isEdit) { + + int rowCount = (providers.length + 1) / 2; + int vgap = 10; + this.setLayout(new FlowLayout(FlowLayout.LEFT, 5, vgap)); + for (SharableWidgetProvider provider : providers) { + LocalWidgetBlock widgetButton = new LocalWidgetBlock((DefaultSharableWidget) provider, this); + widgetButton.setElementCaseEdit(isEdit); + this.add(widgetButton); + } + this.setPreferredSize(new Dimension(240, rowCount * (ShareComponentConstants.SHARE_BLOCK_HEIGHT + vgap))); + } + + private void showEmpty() { + this.setPreferredSize(new Dimension(240, 0)); + } + + public void setSelectBlock(LocalWidgetBlock block) { + this.selectedBlock = block; + this.repaint(); + } + + public LocalWidgetBlock getSelectedBlock() { + return selectedBlock; + } + + @Override + protected Container getParentContainer() { + return this.getParent().getParent(); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ManagePane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ManagePane.java new file mode 100644 index 0000000000..41cae7489c --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ManagePane.java @@ -0,0 +1,245 @@ +package com.fr.design.mainframe.share.ui.local; + +import com.fr.design.constants.UIConstants; +import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.imenu.UIPopupMenu; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.share.action.CreateComponentAction; +import com.fr.design.mainframe.share.action.InstallComponentAction; +import com.fr.design.mainframe.share.action.ShareUIAspect; +import com.fr.design.mainframe.share.group.ui.GroupFileDialog; +import com.fr.design.mainframe.share.group.ui.GroupMoveDialog; +import com.fr.design.mainframe.share.ui.base.PopupMenuItem; +import com.fr.design.mainframe.share.util.ShareUIUtils; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.form.share.group.DefaultShareGroupManager; +import com.fr.form.share.group.Group; +import com.fr.general.IOUtils; +import com.fr.stable.StringUtils; + +import javax.swing.BorderFactory; +import javax.swing.Icon; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.event.ActionListener; + +/** + * @Author: Yuan.Wang + * @Date: 2020/10/29 + */ +class ManagePane extends JPanel implements ShareUIAspect { + private static final String NORMAL = "NORMAL"; + private static final String MANAGE = "MANAGE"; + private final UIButton addComponentButton; + + UIButton deleteSelectedButton; + UIButton moveGroupButton; + CardLayout cardLayout; + + public ManagePane() { + //添加组件 + addComponentButton = createAddComponentButton(); + //管理组件 + UIButton manageButton = createManageButton(); + //添加分组 + UIButton addGroupButton = createAddGroupButton(); + //删除选中 + deleteSelectedButton = createDeleteSelectedButton(); + //移动分组 + moveGroupButton = createMoveGroupButton(); + //取消 + UIButton cancelButton = createCancelButton(); + + deleteSelectedButton.setEnabled(false); + moveGroupButton.setEnabled(false); + + JPanel leftPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + leftPanel.add(addComponentButton); + + JPanel rightPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + rightPanel.add(manageButton); + rightPanel.add(addGroupButton); + + JPanel normalPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + normalPanel.add(leftPanel, BorderLayout.CENTER); + normalPanel.add(rightPanel, BorderLayout.EAST); + + JPanel managePanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 10, 5)); + managePanel.add(deleteSelectedButton); + managePanel.add(moveGroupButton); + managePanel.add(cancelButton); + + cardLayout = new CardLayout(); + this.setLayout(cardLayout); + this.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); + this.add(normalPanel, NORMAL); + this.add(managePanel, MANAGE); + } + + public void setButtonEnable(boolean enable) { + if (moveGroupButton.isEnabled() != enable) { + deleteSelectedButton.setEnabled(enable); + moveGroupButton.setEnabled(enable); + } + } + + /** + * 添加组件按钮 + */ + private UIButton createAddComponentButton() { + return createManageButton( + Toolkit.i18nText("Add"), + IOUtils.readIcon("/com/fr/base/images/share/filter_combo.png"), + e -> { + //创建组件和安装组件的弹窗 + UIPopupMenu popupMenu = new UIPopupMenu(); + popupMenu.setPreferredSize(new Dimension(74, 42)); + popupMenu.setOnlyText(true); + popupMenu.setBackground(UIConstants.DEFAULT_BG_RULER); + popupMenu.add(new PopupMenuItem(new CreateComponentAction(this))); + popupMenu.add(new PopupMenuItem(new InstallComponentAction())); + GUICoreUtils.showPopupMenu(popupMenu, addComponentButton, 0, addComponentButton.getSize().height); + } + ); + } + + /** + * 管理组件面板 + */ + private UIButton createManageButton() { + return createManageButton( + Toolkit.i18nText("Manage"), + e -> replacePanel(true) + ); + } + + /** + * 添加分组面板 + */ + private UIButton createAddGroupButton() { + return createManageButton( + Toolkit.i18nText("Group_Add"), + e -> new GroupFileDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Plugin_Component_Group_Add")) { + @Override + protected void confirmClose() { + this.dispose(); + // 处理不合法的文件夹名称 + String userInput = getFileName().replaceAll("[\\\\/:*?\"<>|]", StringUtils.EMPTY); + //新建分组,刷新显示 + if (DefaultShareGroupManager.getInstance().createGroup(userInput)) { + LocalWidgetRepoPane.getInstance().refreshAllGroupPane(GroupPane.GroupCreateStrategy.CLOSURE); + } else { + ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Design_Basic_Make_Failure")); + } + } + + @Override + protected boolean isDuplicate(String fileName) { + return DefaultShareGroupManager.getInstance().exist(fileName); + } + } + ); + } + + private UIButton createCancelButton() { + return createManageButton( + Toolkit.i18nText("Group_Cancel"), + e -> replacePanel(false) + ); + } + + /** + * 切换面板并刷新 + */ + public void replacePanel(boolean isEditing) { + switchPanel(isEditing); + LocalWidgetRepoPane.getInstance().refreshShowPanel(isEditing); + } + + /** + * 切换面板 + * + * @param isEditing 是否编辑 + */ + public void switchPanel(boolean isEditing) { + setButtonEnable(false); + WidgetSelectedManager.getInstance().clearSelect(); + cardLayout.show(this, isEditing ? MANAGE : NORMAL); + } + + private UIButton createDeleteSelectedButton() { + return createManageButton( + Toolkit.i18nText("Select_Remove"), + new Color(0xeb1d1f), + e -> { + int rv = FineJOptionPane.showConfirmDialog( + DesignerContext.getDesignerFrame(), + Toolkit.i18nText("Fine-Plugin_Component_Remove_Info"), + Toolkit.i18nText("Fine-Plugin_Component_Group_Confirm"), + FineJOptionPane.YES_NO_OPTION + ); + if (rv == FineJOptionPane.YES_OPTION) { + if (WidgetSelectedManager.getInstance().unInstallSelect()) { + //刷新界面的缓存 + FineJOptionPane.showMessageDialog(null, Toolkit.i18nText("Fine-Design_Form_Share_Module_Removed_Successful")); + replacePanel(false); + } else { + ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Design_Form_Share_Module_Removed_Failed")); + } + } + }); + } + + private UIButton createMoveGroupButton() { + return createManageButton( + Toolkit.i18nText("Group_Move"), + e -> new GroupMoveDialog(DesignerContext.getDesignerFrame()) { + @Override + protected void confirmClose() { + this.dispose(); + Group group = (Group) getSelectGroupBox().getSelectedItem(); + assert group != null; + if (WidgetSelectedManager.getInstance().moveSelect(group.getGroupName())) { + replacePanel(false); + } else { + LocalWidgetRepoPane.getInstance().refreshShowPanel(); + ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Plugin_Component_Group_Move_Fail_Message")); + } + } + + } + ); + } + + private UIButton createManageButton(String title, Icon icon, ActionListener actionListener) { + UIButton button = createManageButton(title, actionListener); + button.setIcon(icon); + button.setHorizontalTextPosition(SwingConstants.LEFT); + return button; + } + + private UIButton createManageButton(String title, ActionListener actionListener) { + return createManageButton(title, new Color(0x333334), actionListener); + } + + private UIButton createManageButton(String title, Color foregroundColor, ActionListener actionListener) { + UIButton button = new UIButton(title); + button.setBackground(Color.white); + button.setForeground(foregroundColor); + button.addActionListener(actionListener); + return button; + } + + @Override + public void afterOk() { + LocalWidgetRepoPane.getInstance().refreshShowPanel(false); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ToolbarPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ToolbarPane.java new file mode 100644 index 0000000000..2a7fcc50bf --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ToolbarPane.java @@ -0,0 +1,226 @@ +package com.fr.design.mainframe.share.ui.local; + +import com.fr.base.BaseUtils; +import com.fr.design.actions.UpdateAction; +import com.fr.design.constants.UIConstants; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.imenu.UIPopupMenu; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.share.sort.WidgetSortType; +import com.fr.design.mainframe.share.ui.base.MouseClickListener; +import com.fr.design.mainframe.share.ui.base.SortPopupMenuItem; +import com.fr.design.mainframe.share.ui.widgetfilter.FilterPane; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.IOUtils; +import com.fr.stable.StringUtils; + +import javax.swing.Action; +import javax.swing.BorderFactory; +import javax.swing.Icon; +import javax.swing.JPanel; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.awt.event.MouseEvent; + +/** + * @Author: Yuan.Wang + * @Date: 2020/10/29 + */ +class ToolbarPane extends JPanel { + private static final Color SEARCH_BORDER_COLOR = Color.decode("#F5F5F7"); + private static final Color SEARCH_BORDER_INPUT_COLOR = Color.decode("#419BF9"); + + private static final String NORMAL = "NORMAL"; + private static final String SEARCH = "SEARCH"; + + private UITextField searchTextField; + private final JPanel centerPane; + + //查询按钮 + private final UIButton searchButton; + //排序按钮 + private final UIButton sortButton; + //刷新按钮 + private final UIButton refreshButton; + + private final CardLayout cardLayout; + + private FilterPane filterPanel; + + public ToolbarPane() { + cardLayout = new CardLayout(); + centerPane = new JPanel(cardLayout); + + searchButton = createSearchButton(); + sortButton = createSortButton(); + refreshButton = createRefreshButton(); + filterPanel = createFilterPane(); + JPanel normalPanel = createNormalPanel(); + JPanel searchPanel = createSearchField(); + centerPane.add(normalPanel, NORMAL); + centerPane.add(searchPanel, SEARCH); + this.add(centerPane, BorderLayout.CENTER); + } + + public void addFilterPopupStateChangeListener(FilterPane.PopStateChangeListener listener) { + filterPanel.addPopupStateChangeListener(listener); + } + + private UIButton createSearchButton() { + return createToolButton( + IOUtils.readIcon("/com/fr/base/images/share/search_icon.png"), + Toolkit.i18nText("Fine-Plugin_Component_Search"), + e -> { + cardLayout.show(centerPane, SEARCH); + searchTextField.requestFocus(); + } + ); + } + + private UIButton createSortButton() { + return createToolButton( + IOUtils.readIcon("/com/fr/base/images/share/sort_icon.png"), + Toolkit.i18nText("Fine-Plugin_Component_Sort"), + e -> { + UIPopupMenu popupMenu = new UIPopupMenu(); + popupMenu.setOnlyText(true); + popupMenu.setBackground(UIConstants.DEFAULT_BG_RULER); + popupMenu.add(new SortPopupMenuItem(new SortAction(WidgetSortType.INSTALL_TIME))); + popupMenu.add(new SortPopupMenuItem(new SortAction(WidgetSortType.COMPONENT_NAME))); + + GUICoreUtils.showPopupMenu(popupMenu, sortButton, 0, sortButton.getSize().height); + } + ); + } + + private UIButton createRefreshButton() { + return createToolButton( + IOUtils.readIcon("/com/fr/base/images/share/refresh.png"), + Toolkit.i18nText("Fine-Design_Basic_Refresh"), + e -> { + filterPanel.reset(); + LocalWidgetRepoPane.getInstance().refreshPane(); + } + ); + } + + private FilterPane createFilterPane() { + filterPanel = FilterPane.createLocalFilterPane(); + filterPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 10)); + filterPanel.registerChangeListerner(e -> LocalWidgetRepoPane.getInstance().refreshShowPanel()); + return filterPanel; + } + + private JPanel createNormalPanel() { + JPanel panel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + JPanel buttonPane = new JPanel(new FlowLayout(FlowLayout.RIGHT, 0, 0)); + buttonPane.add(searchButton); + buttonPane.add(sortButton); + buttonPane.add(refreshButton); + panel.add(filterPanel, BorderLayout.CENTER); + panel.add(buttonPane, BorderLayout.EAST); + return panel; + } + + private JPanel createSearchField() { + final JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + jPanel.setPreferredSize(new Dimension(228, 10)); + jPanel.setBorder(BorderFactory.createLineBorder(SEARCH_BORDER_COLOR)); + jPanel.setBackground(Color.WHITE); + UILabel label = new UILabel(IOUtils.readIcon("/com/fr/base/images/share/search_icon.png")); + label.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0)); + jPanel.add(label, BorderLayout.WEST); + this.searchTextField = new UITextField(); + this.searchTextField.setBorderPainted(false); + this.searchTextField.setPlaceholder(Toolkit.i18nText("Fine-Design_Basic_Plugin_Search")); + this.searchTextField.addFocusListener(new FocusListener() { + @Override + public void focusGained(FocusEvent e) { + jPanel.setBorder(BorderFactory.createLineBorder(SEARCH_BORDER_INPUT_COLOR)); + jPanel.repaint(); + } + + @Override + public void focusLost(FocusEvent e) { + jPanel.setBorder(BorderFactory.createLineBorder(SEARCH_BORDER_COLOR)); + jPanel.repaint(); + } + }); + this.searchTextField.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + filterByName(); + } + + @Override + public void removeUpdate(DocumentEvent e) { + filterByName(); + } + + @Override + public void changedUpdate(DocumentEvent e) { + filterByName(); + } + }); + jPanel.add(this.searchTextField, BorderLayout.CENTER); + UILabel xLabel = new UILabel(BaseUtils.readIcon("/com/fr/design/images/buttonicon/close_icon.png")); + xLabel.addMouseListener(new MouseClickListener() { + @Override + public void mouseClicked(MouseEvent e) { + searchTextField.setText(StringUtils.EMPTY); + cardLayout.show(centerPane, NORMAL); + } + }); + xLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); + jPanel.add(xLabel, BorderLayout.EAST); + + return jPanel; + } + + private void filterByName() { + String text = searchTextField.getText(); + boolean searchStatus = !StringUtils.isEmpty(text); + sortButton.setEnabled(!searchStatus); + LocalWidgetRepoPane.getInstance().searchByKeyword(text); + } + + private static class SortAction extends UpdateAction { + private final WidgetSortType sortType; + + public SortAction(WidgetSortType sortType) { + this.putValue(Action.SMALL_ICON, null); + this.setName(sortType.getDisplayName()); + this.sortType = sortType; + } + + @Override + public void actionPerformed(ActionEvent e) { + LocalWidgetRepoPane.getInstance().sortWidget(sortType); + } + } + + /** + * 创建工具条按钮 + */ + private UIButton createToolButton(Icon icon, String toolTip, ActionListener actionListener) { + UIButton toolButton = new UIButton(); + toolButton.setIcon(icon); + toolButton.setToolTipText(toolTip); + toolButton.set4ToolbarButton(); + toolButton.addActionListener(actionListener); + return toolButton; + } + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/WidgetSelectedManager.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/WidgetSelectedManager.java new file mode 100644 index 0000000000..df4a586e6c --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/WidgetSelectedManager.java @@ -0,0 +1,121 @@ +package com.fr.design.mainframe.share.ui.local; + +import com.fr.form.share.group.DefaultShareGroupManager; +import com.fr.form.share.group.Group; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @Author: Yuan.Wang + * @Date: 2021/1/15 + */ +public class WidgetSelectedManager { + private final Map> selectedWidgetMap = new HashMap<>(); + + private WidgetSelectedManager() { + + } + + private static class Holder { + private static final WidgetSelectedManager INSTANCE = new WidgetSelectedManager(); + } + + public static WidgetSelectedManager getInstance() { + return Holder.INSTANCE; + } + + /** + * 添加选中组件 + */ + public synchronized void addSelect(String groupName, String uuid) { + if (selectedWidgetMap.containsKey(groupName)) { + selectedWidgetMap.get(groupName).add(uuid); + } else { + selectedWidgetMap.put(groupName, Stream.of(uuid).collect(Collectors.toList())); + } + } + + /** + * 删除选中组件 + */ + public synchronized void removeSelect(String groupName, String uuid) { + if (selectedWidgetMap.containsKey(groupName)) { + selectedWidgetMap.get(groupName).remove(uuid); + } + } + + /** + * 卸载单个选中组件 + */ + public synchronized boolean unInstallSelect(String groupName, String uuid) { + Group group = DefaultShareGroupManager.getInstance().getGroup(groupName); + return group != null && group.unInstallSelect(Stream.of(uuid).collect(Collectors.toList())); + } + + /** + * 卸载所有选中组件 + */ + public synchronized boolean unInstallSelect() { + boolean result = true; + for (String groupName : selectedWidgetMap.keySet()) { + Group group = DefaultShareGroupManager.getInstance().getGroup(groupName); + result &= group != null && group.unInstallSelect(selectedWidgetMap.get(groupName)); + } + selectedWidgetMap.clear(); + return result; + } + + /** + * 是否选中某组件 + */ + public synchronized boolean isSelected(String groupName, String uuid) { + return selectedWidgetMap.containsKey(groupName) && selectedWidgetMap.get(groupName).contains(uuid); + } + + /** + * 清空选中组件 + */ + public synchronized void clearSelect() { + selectedWidgetMap.clear(); + } + + /** + * 被选中是否为空 + */ + public synchronized boolean isSelectEmpty() { + return selectedWidgetMap.isEmpty() || selectedWidgetMap.values().stream().noneMatch(list -> (list.size() > 0)); + } + + /** + * 移动所有选中到某分组 + */ + public synchronized boolean moveSelect(String toGroupName) { + boolean result = true; + Group toGroup = DefaultShareGroupManager.getInstance().getGroup(toGroupName); + if (toGroup == null) { + return false; + } + for (String groupName : selectedWidgetMap.keySet()) { + Group fromGroup = DefaultShareGroupManager.getInstance().getGroup(groupName); + result &= fromGroup != null && fromGroup.moveModule(toGroup, selectedWidgetMap.get(groupName)); + } + selectedWidgetMap.clear(); + return result; + } + + /** + * 移动单独组件到某分组 + */ + public synchronized boolean moveSelect(String formGroupName, String toGroupName, String uuid) { + Group fromGroup = DefaultShareGroupManager.getInstance().getGroup(formGroupName); + Group toGroup = DefaultShareGroupManager.getInstance().getGroup(toGroupName); + if (fromGroup == null || toGroup == null) { + return false; + } + return fromGroup.moveModule(toGroup, Stream.of(uuid).collect(Collectors.toList())); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/SnapChatKeys.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/SnapChatKeys.java new file mode 100644 index 0000000000..cf563d2e84 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/SnapChatKeys.java @@ -0,0 +1,32 @@ +package com.fr.design.mainframe.share.ui.menu; + +import com.fr.design.notification.SnapChatKey; + +/** + * created by Harrison on 2020/03/24 + **/ +public enum SnapChatKeys implements SnapChatKey { + + /** + * 组件 + */ + COMPONENT("components"), + + /** + * 模板 + */ + TEMPLATE("template"); + + private String sign; + + private static final String PREFIX = "com.fr.component.share"; + + SnapChatKeys(String sign) { + this.sign = sign; + } + + @Override + public String calc() { + return PREFIX + "-" + sign; + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/TemplateStoreMenu.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/TemplateStoreMenu.java new file mode 100644 index 0000000000..c0fe1cbd08 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/TemplateStoreMenu.java @@ -0,0 +1,53 @@ +package com.fr.design.mainframe.share.ui.menu; + +import com.fr.base.BaseUtils; +import com.fr.design.actions.UpdateAction; +import com.fr.design.mainframe.share.collect.ComponentCollector; +import com.fr.design.menu.MenuKeySet; +import com.fr.design.utils.BrowseUtils; +import com.fr.general.CloudCenter; +import com.fr.locale.InterProviderFactory; + +import javax.swing.KeyStroke; +import java.awt.event.ActionEvent; + +/** + * created by Harrison on 2020/03/24 + **/ +public class TemplateStoreMenu extends UpdateAction { + + public TemplateStoreMenu() { + + this.setMenuKeySet(TEMPLATE); + this.setName(getMenuKeySet().getMenuName()); + this.setMnemonic(getMenuKeySet().getMnemonic()); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/base/images/share/template_store.png")); + } + + public static final MenuKeySet TEMPLATE = new MenuKeySet() { + + @Override + public String getMenuName() { + + return InterProviderFactory.getProvider().getLocText("Fine-Plugin_Template_Store"); + } + + @Override + public KeyStroke getKeyStroke() { + return null; + } + + @Override + public char getMnemonic() { + + return 'T'; + } + }; + + @Override + public void actionPerformed(ActionEvent e) { + ComponentCollector.getInstance().collectTepMenuEnterClick(); + String url = CloudCenter.getInstance().acquireUrlByKind("design.market.template"); + BrowseUtils.browser(url); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/AbstractOnlineWidgetShowPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/AbstractOnlineWidgetShowPane.java new file mode 100644 index 0000000000..5a5d432344 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/AbstractOnlineWidgetShowPane.java @@ -0,0 +1,269 @@ +package com.fr.design.mainframe.share.ui.online; + +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.share.sort.OnlineWidgetSortType; +import com.fr.design.mainframe.share.ui.base.FlexSearchFieldPane; +import com.fr.design.mainframe.share.ui.base.LoadingPane; +import com.fr.design.mainframe.share.ui.widgetfilter.FilterPane; +import com.fr.form.share.base.DataLoad; +import com.fr.form.share.bean.OnlineShareWidget; +import com.fr.form.share.utils.ShareUtils; +import com.fr.general.IOUtils; +import com.fr.stable.StringUtils; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.SwingWorker; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Color; +import java.awt.FlowLayout; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by kerry on 2020-10-19 + */ +public abstract class AbstractOnlineWidgetShowPane extends JPanel { + private static final String SEARCH_RESULT_PANE = "SEARCH_RESULT_PANE"; + private static final String MAIN_FILTER_TAB_PANE = "MAIN_FILTER_TAB_PANE"; + + private JPanel componentSelectPane; + private JPanel searchResultShowPane; + private JPanel mainCenterPane; + private FilterPane filterPane; + private JPanel centerPane; + private SortTabPane sortTabPane; + + private final JPanel loadingPane = new LoadingPane(); + + private OnlineShareWidget[] sharableWidgetProviders; + + //缓存一份用于搜索 + private final OnlineShareWidget[] sharableWidgetCache; + //主面板和搜索面板的cardLayout + private CardLayout mainCardLayout; + + + public AbstractOnlineWidgetShowPane(OnlineShareWidget[] sharableWidgetProviders) { + this.sharableWidgetCache = sharableWidgetProviders; + this.sharableWidgetProviders = sharableWidgetProviders; + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + JPanel contentPane = initContentPane(); + this.add(contentPane, BorderLayout.CENTER); + } + + protected JPanel initContentPane() { + JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + OnlineWidgetSortType.COMPOSITE.sort(sharableWidgetProviders); + componentSelectPane = createOnlineWidgetSelectPane(sharableWidgetProviders); + centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + centerPane.add(componentSelectPane, BorderLayout.CENTER); + filterPane = createFilterPane(); + filterPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 8)); + initFilterPaneListener(filterPane); + sortTabPane = new SortTabPane(); + initSortTabPane(sortTabPane); + FlexSearchFieldPane flexSearchPane = new FlexSearchFieldPane(filterPane); + initSearchTextFieldPaneListener(flexSearchPane); + + JPanel northPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + northPane.add(flexSearchPane, BorderLayout.CENTER); + northPane.add(sortTabPane, BorderLayout.SOUTH); + initNorthPane(jPanel, northPane); + + searchResultShowPane = createOnlineWidgetSelectPane(new OnlineShareWidget[]{}); + mainCardLayout = new CardLayout(); + mainCenterPane = new JPanel(mainCardLayout); + mainCenterPane.add(centerPane, MAIN_FILTER_TAB_PANE); + mainCenterPane.add(searchResultShowPane, SEARCH_RESULT_PANE); + jPanel.add(mainCenterPane, BorderLayout.CENTER); + + filterPane.addPopupStateChangeListener(state -> setWidgetPaneScrollEnable(!state)); + return jPanel; + } + + protected void initNorthPane(JPanel jPanel, JPanel northPane) { + jPanel.add(northPane, BorderLayout.NORTH); + } + + + protected OnlineWidgetSelectPane createOnlineWidgetSelectPane(OnlineShareWidget[] sharableWidgetProviders) { + return new OnlineWidgetSelectPane(sharableWidgetProviders, filterPane, 50); + } + + protected OnlineWidgetSelectPane createOnlineWidgetSelectPane(DataLoad dataLoad) { + return new OnlineWidgetSelectPane(dataLoad, filterPane, 50); + } + + protected FilterPane createFilterPane() { + return FilterPane.createOnlineFilterPane(); + } + + protected OnlineShareWidget[] getSharableWidgetProviders() { + return sharableWidgetProviders; + } + + public void searchByKeyword(String text) { + if (StringUtils.isEmpty(text)) { + this.mainCardLayout.show(mainCenterPane, MAIN_FILTER_TAB_PANE); + return; + } + List widgets = new ArrayList<>(); + if (StringUtils.isNotEmpty(text)) { + for (OnlineShareWidget provider : sharableWidgetCache) { + if (provider.getName().toLowerCase().contains(text)) { + widgets.add(provider); + } + } + } + + if (searchResultShowPane != null) { + mainCenterPane.remove(searchResultShowPane); + } + this.searchResultShowPane = createOnlineWidgetSelectPane(widgets.toArray(new OnlineShareWidget[widgets.size()])); + this.mainCenterPane.add(searchResultShowPane, SEARCH_RESULT_PANE); + this.mainCardLayout.show(mainCenterPane, SEARCH_RESULT_PANE); + this.validate(); + this.repaint(); + + } + + public void initFilterPaneListener(FilterPane filterPane) { + filterPane.registerChangeListerner(new ChangeListener() { + @Override + public void stateChanged(final ChangeEvent e) { + String filterStr = e.getSource().toString(); + centerPane.remove(componentSelectPane); + componentSelectPane = createOnlineWidgetSelectPane(() -> { + sharableWidgetProviders = new OnlineShareWidget[0]; + sharableWidgetProviders = ShareUtils.getFilterWidgets(filterStr); + return sharableWidgetProviders; + }); + centerPane.add(componentSelectPane, BorderLayout.CENTER); + AbstractOnlineWidgetShowPane.this.validate(); + AbstractOnlineWidgetShowPane.this.repaint(); + } + }); + } + + public void initSearchTextFieldPaneListener(FlexSearchFieldPane searchFieldPane) { + searchFieldPane.registerChangeListener(event -> { + Object object = event.getSource(); + if (object instanceof String) { + String text = (String) object; + sortTabPane.setVisible(StringUtils.isEmpty(text)); + searchByKeyword(text); + } + }); + } + + public void initSortTabPane(SortTabPane sortTabPane) { + + } + + private void setWidgetPaneScrollEnable(boolean enable) { + if (componentSelectPane instanceof OnlineWidgetSelectPane) { + ((OnlineWidgetSelectPane) componentSelectPane).setWidgetPaneScrollEnable(enable); + } + } + + public class SortTabPane extends JPanel { + private final Color BLUE = Color.decode("#419BF9"); + private int index; + private final UILabel[] labels; + private final Map recordMap; + private List mouseListeners = new ArrayList<>(); + + public SortTabPane() { + setLayout(new FlowLayout(FlowLayout.LEFT)); + setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 10)); + OnlineWidgetSortType[] sortTypes = OnlineWidgetSortType.values(); + recordMap = new HashMap<>(); + labels = new UILabel[sortTypes.length]; + int i = 0; + for (OnlineWidgetSortType sortType : sortTypes) { + labels[i] = createTab(sortType); + recordMap.put(sortType.getDisplayName(), i); + add(labels[i]); + i++; + if (i != sortTypes.length) { + add(createSeparator()); + } + } + setIndex(0); + } + + public void setIndex(int index) { + labels[this.index].setForeground(Color.black); + labels[index].setForeground(BLUE); + this.index = index; + repaint(); + } + + public int getIndex() { + return index; + } + + private UILabel createTab(OnlineWidgetSortType sortType) { + UILabel label = new UILabel(sortType.getDisplayName()); + label.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if (sharableWidgetProviders.length == 0) { + return; + } + String title = label.getText(); + if (index != recordMap.get(title)) { + setIndex(recordMap.get(title)); + } + if (componentSelectPane != null) { + centerPane.remove(componentSelectPane); + centerPane.add(loadingPane); + } + AbstractOnlineWidgetShowPane.this.validate(); + AbstractOnlineWidgetShowPane.this.repaint(); + new SwingWorker() { + @Override + protected Boolean doInBackground() { + sortType.sort(sharableWidgetProviders); + componentSelectPane = createOnlineWidgetSelectPane(sharableWidgetProviders); + return true; + } + + @Override + protected void done() { + centerPane.removeAll(); + centerPane.add(componentSelectPane, BorderLayout.CENTER); + AbstractOnlineWidgetShowPane.this.validate(); + AbstractOnlineWidgetShowPane.this.repaint(); + } + }.execute(); + + for (MouseListener listener : mouseListeners) { + listener.mouseClicked(e); + } + } + }); + return label; + } + + private UILabel createSeparator() { + UILabel label = new UILabel(IOUtils.readIcon("/com/fr/base/images/share/separator.png")); + label.setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 2)); + return label; + } + + public void registerSortTabMouseListener(MouseListener listener) { + mouseListeners.add(listener); + } + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineDownloadPackagePane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineDownloadPackagePane.java new file mode 100644 index 0000000000..e4f14a9f1d --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineDownloadPackagePane.java @@ -0,0 +1,253 @@ +package com.fr.design.mainframe.share.ui.online; + +import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.share.ui.base.DownloadProgressPane; +import com.fr.design.mainframe.share.ui.base.ImitationProgress; +import com.fr.design.mainframe.share.ui.base.MouseClickListener; +import com.fr.design.mainframe.share.ui.block.OnlineWidgetBlock; +import com.fr.design.mainframe.share.ui.block.SimpleWidgetBlock; +import com.fr.design.mainframe.share.ui.local.LocalWidgetRepoPane; +import com.fr.design.mainframe.share.ui.online.widgetpackage.OnlineWidgetPackagesShowPane; +import com.fr.design.mainframe.share.util.DownloadUtils; +import com.fr.design.mainframe.share.util.InstallUtils; +import com.fr.design.mainframe.share.util.ShareComponentUtils; +import com.fr.form.share.bean.OnlineShareWidget; +import com.fr.form.share.group.Group; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.StableUtils; +import org.jetbrains.annotations.Nullable; + +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.SwingWorker; +import java.awt.AlphaComposite; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Composite; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.event.MouseEvent; +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; + +/** + * @Author: Yuan.Wang + * @Date: 2020/12/22 + */ +public class OnlineDownloadPackagePane extends OnlineWidgetSelectPane { + private final String packageId; + private volatile double process; + + + private ImitationThread imitationThread; + private SwingWorker downloadWorker; + private DownloadProgressPane downloadProgressPane; + private final OnlineWidgetPackagesShowPane parentPane; + + + public OnlineDownloadPackagePane(OnlineWidgetPackagesShowPane parentPane, OnlineShareWidget[] providers, int widgetsPerNum) { + super(providers, widgetsPerNum); + this.parentPane = parentPane; + this.packageId = parentPane.getCurrentPackageId(); + } + + protected OnlineWidgetBlock createWidgetBlock(OnlineShareWidget provider) { + return new SimpleWidgetBlock(provider, this); + } + + protected void setScrollPaneStyle(UIScrollPane scrollPane) { + scrollPane.setBorder(null); + scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); + scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); + scrollPane.setWheelScrollingEnabled(false); + } + + @Override + protected boolean pagePaneEnable() { + return false; + } + + protected JPanel createWidgetPane() { + return new JPanel() { + @Override + public void paint(Graphics g) { + super.paint(g); + Graphics2D g2d = (Graphics2D) g; + Composite oldComposite = g2d.getComposite(); + AlphaComposite composite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.65f); + g2d.setComposite(composite); + g2d.setColor(Color.DARK_GRAY); + g2d.fillRect(0, 0, getWidth(), getHeight()); + g2d.setComposite(oldComposite); + } + }; + } + + protected JPanel createContentPane(JPanel widgetPane) { + JPanel panel = new JPanel() { + @Override + public void paint(Graphics g) { + for (int i = 0; i < getComponentCount(); i++) { + getComponent(i).setSize(getSize()); + } + super.paint(g); + } + }; + panel.setLayout(null); + downloadProgressPane = new DownloadProgressPane(new MouseClickListener() { + @Override + public void mouseClicked(MouseEvent e) { + int returnVal = FineJOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), + Toolkit.i18nText("Fine-Plugin_Component_Download_Cancel_Confirm"), Toolkit.i18nText("Fine-Plugin_Component_Group_Confirm"), + FineJOptionPane.OK_CANCEL_OPTION); + if (returnVal == FineJOptionPane.OK_OPTION) { + //取消下载线程 + imitationThread.interrupt(); + downloadWorker.cancel(false); + + //切换面板 + parentPane.resetWidgetDetailPane(packageId, getSharableWidgetProviders()); + } + } + }); + panel.add(downloadProgressPane); + panel.add(widgetPane, BorderLayout.CENTER); + return panel; + } + + public void downloadWidget(OnlineShareWidget onlineShareWidget) { + + final com.fr.design.extra.Process downloadProcess = aDouble -> { + OnlineDownloadPackagePane.this.process = 0.8 * aDouble; + downloadProgressPane.updateProgress(process); + }; + final com.fr.design.extra.Process installProcess = aDouble -> { + OnlineDownloadPackagePane.this.process = 0.8 + 0.2 * aDouble; + downloadProgressPane.updateProgress(process); + }; + + downloadProcess.process(0.0D); + + //假进度线程 + final ImitationProgress imitationProgress = new ImitationProgress(downloadProcess, getSharableWidgetNum()); + imitationThread = new ImitationThread(imitationProgress); + imitationThread.setName("Component-ImitationProcessThread"); + + //下载线程 + downloadWorker = new DownLoadSwingWorker(installProcess, onlineShareWidget); + + parallel(imitationThread, downloadWorker); + } + + private void parallel(Thread imitationProcessThread, SwingWorker worker) { + imitationProcessThread.start(); + worker.execute(); + } + + /** + * 假进度线程 + */ + private static class ImitationThread extends Thread { + + private final ImitationProgress imitationProgress; + + public ImitationThread(ImitationProgress progress) { + imitationProgress = progress; + } + + @Override + public void run() { + imitationProgress.start(); + } + + public void complete() { + imitationProgress.completed(); + this.interrupt(); + } + + public void stopThread() { + imitationProgress.stop(); + this.interrupt(); + } + } + + private class DownLoadSwingWorker extends SwingWorker { + final com.fr.design.extra.Process installProcess; + final OnlineShareWidget onlineShareWidget; + + public DownLoadSwingWorker(com.fr.design.extra.Process installProcess, OnlineShareWidget onlineShareWidget) { + this.installProcess = installProcess; + this.onlineShareWidget = onlineShareWidget; + } + + @Override + @Nullable + protected Group doInBackground() { + final String filePath; + List failureList = new ArrayList<>(); + try { + filePath = DownloadUtils.downloadPackage(onlineShareWidget.getId(), onlineShareWidget.getName(), DownLoadSwingWorker.this::isCancelled); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + imitationThread.stopThread(); + return null; + } + if (this.isCancelled()) { + imitationThread.stopThread(); + StableUtils.deleteFile(new File(filePath)); + return null; + } + + //等待假进度线程结束 + imitationThread.complete(); + try { + imitationThread.join(); + } catch (InterruptedException ignore) { + } + + //再判断一次 + if (this.isCancelled()) { + StableUtils.deleteFile(new File(filePath)); + return null; + } + ShareComponentUtils.checkReadMe(); + //安装 + File file = new File(filePath); + installProcess.process(0.0D); + downloadProgressPane.changeState(); + InstallUtils.InstallResult result = null; + try { + if (file.exists()) { + result = InstallUtils.installReusFile(file, System.currentTimeMillis(), failureList, installProcess); + } + } finally { + //删掉下载组件的目录 + StableUtils.deleteFile(file); + } + return result == null ? null : result.group; + } + + @Override + protected void done() { + OnlineDownloadPackagePane.this.process = 0.0D; + //替换面板,显示下载label + parentPane.resetWidgetDetailPane(packageId, getSharableWidgetProviders()); + parentPane.repaint(); + if (!isCancelled()) { + try { + Group group = get(); + if (group != null) { + LocalWidgetRepoPane.getInstance().addGroup(group); + } + } catch (InterruptedException | ExecutionException e) { + FineLoggerFactory.getLogger().error(e, e.getMessage()); + } + } + } + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineResourceManager.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineResourceManager.java new file mode 100644 index 0000000000..6a99209d31 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineResourceManager.java @@ -0,0 +1,53 @@ +package com.fr.design.mainframe.share.ui.online; + +import javax.swing.SwingWorker; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by kerry on 2020-12-10 + */ +public class OnlineResourceManager { + private static class HOLDER { + private static final OnlineResourceManager singleton = new OnlineResourceManager(); + } + + private OnlineResourceManager(){ + + } + + public static OnlineResourceManager getInstance() { + return HOLDER.singleton; + } + + private SwingWorker swingWorker; + + private final List loaderList = new ArrayList<>(); + + public void cancelLoad() { + if (swingWorker != null) { + swingWorker.cancel(true); + } + this.loaderList.clear(); + } + + public void addLoader(ResourceLoader loader) { + this.loaderList.add(loader); + } + + public void loadImage() { + swingWorker = new SwingWorker() { + @Override + protected Boolean doInBackground() { + for (ResourceLoader loader : loaderList) { + loader.load(); + } + return true; + } + }; + swingWorker.execute(); + + } + + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetRepoPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetRepoPane.java new file mode 100644 index 0000000000..aa94801770 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetRepoPane.java @@ -0,0 +1,189 @@ +package com.fr.design.mainframe.share.ui.online; + +import com.fr.base.BaseUtils; +import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.share.ui.base.LoadingPane; +import com.fr.design.mainframe.share.ui.base.MouseClickListener; +import com.fr.form.share.bean.OnlineShareWidget; +import com.fr.form.share.utils.ShareUtils; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.StringUtils; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import javax.swing.SwingWorker; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Color; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.event.MouseEvent; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; + + +/** + * Created by kerry on 2020-10-16 + */ +public class OnlineWidgetRepoPane extends BasicPane { + private static final String MARKET_URL = "https://market.fanruan.com/reuse"; + private OnlineWidgetTabPane componentTabPane; + private JPanel centerPane; + private boolean isShowPackagePanel = false; + private CardLayout cardLayout; + + enum Status {LOADING, DISCONNECTED, NORMAL} + + public static OnlineWidgetRepoPane getInstance() { + return OnlineWidgetRepoPane.HOLDER.singleton; + } + + private static class HOLDER { + private static final OnlineWidgetRepoPane singleton = new OnlineWidgetRepoPane(); + } + + @Override + protected String title4PopupWindow() { + return Toolkit.i18nText("Fine-Plugin_Component_Online"); + } + + public OnlineWidgetRepoPane() { + initPane(); + } + + public boolean isShowPackagePanel() { + return isShowPackagePanel; + } + + public void setShowPackagePanel(boolean showPackagePanel) { + isShowPackagePanel = showPackagePanel; + } + + private void initPane() { + cardLayout = new CardLayout(); + this.setLayout(cardLayout); + this.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0)); + this.centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + + this.add(new LoadingPane(), Status.LOADING.name()); + this.add(this.centerPane, Status.NORMAL.name()); + this.add(createInternetErrorPane(), Status.DISCONNECTED.name()); + + switchPane(Status.LOADING); + synchronizedLoadingContent(); + } + + private void addCenterPane() { + this.centerPane.removeAll(); + this.centerPane.add(this.componentTabPane, BorderLayout.CENTER); + this.switchPane(Status.NORMAL); + } + + public void switch2InternetErrorPane() { + switchPane(Status.DISCONNECTED); + } + + private void switchPane(Status status) { + cardLayout.show(this, status.name()); + } + + private void synchronizedLoadingContent() { + new SwingWorker() { + @Override + protected Boolean doInBackground() throws Exception { + return initContentPane(); + } + + @Override + protected void done() { + try { + if (get()) { + addCenterPane(); + } + } catch (InterruptedException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + Thread.currentThread().interrupt(); + } catch (ExecutionException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + }.execute(); + } + + private boolean initContentPane() { + List sharableWidgets = new ArrayList<>(); + List sharableWidgetPackage = new ArrayList<>(); + + try { + ShareUtils.getAllSharableWidgetsFromShop(sharableWidgets, sharableWidgetPackage); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + switchPane(Status.DISCONNECTED); + return false; + } + this.componentTabPane = new OnlineWidgetTabPane(sharableWidgets.toArray(new OnlineShareWidget[sharableWidgets.size()]), + sharableWidgetPackage.toArray(new OnlineShareWidget[sharableWidgetPackage.size()])); + + return true; + } + + private void reload() { + this.removeAll(); + initPane(); + this.validate(); + this.repaint(); + } + + private JPanel createInternetErrorPane() { + JPanel panel = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 5); + UILabel imagePanel = new UILabel(BaseUtils.readIcon("/com/fr/base/images/share/internet_error.png")); + imagePanel.setPreferredSize(new Dimension(240, 96)); + imagePanel.setHorizontalAlignment(SwingConstants.CENTER); + panel.add(imagePanel); + UILabel uiLabel = tipLabel(Toolkit.i18nText("Fine-Plugin_Component_Internet_Connect_Failed")); + uiLabel.setForeground(Color.decode("#8F8F92")); + UILabel reloadLabel = tipLabel(Toolkit.i18nText("Fine-Plugin_Component_Online_Reload")); + reloadLabel.setForeground(Color.decode("#419BF9")); + reloadLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + reloadLabel.addMouseListener(new MouseClickListener() { + @Override + public void mouseClicked(MouseEvent e) { + super.mouseClicked(e); + reload(); + } + }); + + + UILabel tipLabel1 = tipLabel(Toolkit.i18nText("Fine-Plugin_Component_Internet_Connect_Failed_Tip1")); + tipLabel1.setForeground(Color.decode("#8F8F92")); + UILabel tipLabel2 = tipLabel(Toolkit.i18nText("Fine-Plugin_Component_Internet_Connect_Failed_Tip2")); + tipLabel2.setForeground(Color.decode("#8F8F92")); + UILabel tipLabel3 = tipLabel(MARKET_URL); + tipLabel3.setForeground(Color.decode("#8F8F92")); + + + UILabel emptyLabel = tipLabel(StringUtils.EMPTY); + panel.add(uiLabel); + panel.add(reloadLabel); + panel.add(emptyLabel); + panel.add(tipLabel1); + panel.add(tipLabel2); + panel.add(tipLabel3); + panel.setBorder(BorderFactory.createEmptyBorder(240, 0, 0, 0)); + return panel; + } + + private UILabel tipLabel(String text) { + UILabel tipLabel = new UILabel(text); + tipLabel.setHorizontalAlignment(SwingConstants.CENTER); + tipLabel.setPreferredSize(new Dimension(240, 20)); + return tipLabel; + } + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetSelectPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetSelectPane.java new file mode 100644 index 0000000000..61e3ced831 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetSelectPane.java @@ -0,0 +1,225 @@ +package com.fr.design.mainframe.share.ui.online; + +import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.share.AbstractWidgetSelectPane; +import com.fr.design.mainframe.share.ui.base.LoadingPane; +import com.fr.design.mainframe.share.ui.base.NoMatchPane; +import com.fr.design.mainframe.share.ui.base.PagingFiledPane; +import com.fr.design.mainframe.share.ui.block.OnlineWidgetBlock; +import com.fr.design.mainframe.share.ui.block.PreviewWidgetBlock; +import com.fr.design.mainframe.share.ui.widgetfilter.FilterPane; +import com.fr.form.share.base.DataLoad; +import com.fr.form.share.bean.OnlineShareWidget; +import com.fr.form.share.constants.ShareComponentConstants; +import com.fr.form.share.utils.ShareUtils; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.ArrayUtils; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.SwingWorker; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.util.concurrent.ExecutionException; + +/** + * Created by kerry on 2020-10-19 + */ +public class OnlineWidgetSelectPane extends AbstractWidgetSelectPane { + protected static final int H_GAP = 5; + protected static final int V_GAP = 10; + + enum PaneStatue {NORMAL, NO_MATCH, LOADING, DISCONNECTED} + + private OnlineShareWidget[] sharableWidgetProviders; + private PagingFiledPane pagingFiledPane; + private JPanel contentPane; + private UIScrollPane scrollPane; + private FilterPane filterPane; + private final int widgetsPerNum; + private CardLayout cardLayout; + + public OnlineWidgetSelectPane(OnlineShareWidget[] providers, FilterPane filterPane, int widgetsPerNum) { + this(providers, widgetsPerNum); + this.filterPane = filterPane; + } + + public OnlineWidgetSelectPane(final DataLoad dataLoad, FilterPane filterPane, final int widgetsPerNum) { + this(dataLoad, widgetsPerNum); + this.filterPane = filterPane; + } + + public OnlineWidgetSelectPane(OnlineShareWidget[] providers, int widgetsPerNum) { + this.widgetsPerNum = widgetsPerNum; + sharableWidgetProviders = providers; + init(); + initPagingPane(); + switchPane(createComponents()); + } + + public OnlineWidgetSelectPane(final DataLoad dataLoad, final int widgetsPerNum) { + this.widgetsPerNum = widgetsPerNum; + init(); + //异步获取组件信息 + new SwingWorker() { + @Override + protected PaneStatue doInBackground() { + sharableWidgetProviders = dataLoad.load(); + initPagingPane(); + return createComponents(); + } + + @Override + protected void done() { + try { + switchPane(get()); + } catch (InterruptedException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + Thread.currentThread().interrupt(); + } catch (ExecutionException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + }.execute(); + } + + private void init() { + cardLayout = new CardLayout(); + this.setLayout(cardLayout); + // 设置面板的边框 ,距离上、左、下、右 的距离 + this.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0)); + contentPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + this.add(new LoadingPane(), PaneStatue.LOADING.name()); + this.add(new NoMatchPane(), PaneStatue.NO_MATCH.name()); + this.add(contentPane, PaneStatue.NORMAL.name()); + switchPane(PaneStatue.LOADING); + } + + public int getSharableWidgetNum() { + return sharableWidgetProviders == null ? 0 : sharableWidgetProviders.length; + } + + public OnlineShareWidget[] getSharableWidgetProviders() { + return sharableWidgetProviders; + } + + /** + * 切换需要显示的面板 + */ + private void switchPane(PaneStatue statue) { + if (statue == PaneStatue.DISCONNECTED) { + OnlineWidgetRepoPane.getInstance().switch2InternetErrorPane(); + return; + } + cardLayout.show(this, statue.name()); + if (statue == PaneStatue.NORMAL) { + //异步加载组件缩略图 + OnlineResourceManager.getInstance().loadImage(); + } + } + + private void synchronizedLoadingContent() { + new SwingWorker() { + @Override + protected PaneStatue doInBackground() { + return createComponents(); + } + + @Override + protected void done() { + try { + switchPane(get()); + } catch (InterruptedException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + Thread.currentThread().interrupt(); + } catch (ExecutionException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + }.execute(); + } + + private void initPagingPane() { + this.pagingFiledPane = new PagingFiledPane(sharableWidgetProviders.length, widgetsPerNum); + this.pagingFiledPane.registerChangeListener(event -> { + OnlineWidgetSelectPane.this.switchPane(PaneStatue.LOADING); + synchronizedLoadingContent(); + }); + pagingFiledPane.setEnable(pagePaneEnable()); + } + + private PaneStatue createComponents() { + if (ArrayUtils.isEmpty(sharableWidgetProviders)) { + return PaneStatue.NO_MATCH; + } + if (!ShareUtils.testConnection()) { + return PaneStatue.DISCONNECTED; + } + OnlineResourceManager.getInstance().cancelLoad(); + + contentPane.removeAll(); + scrollPane = createScrollPane(); + + contentPane.add(scrollPane, BorderLayout.CENTER); + contentPane.add(this.pagingFiledPane, BorderLayout.SOUTH); + return PaneStatue.NORMAL; + } + + private UIScrollPane createScrollPane() { + OnlineShareWidget[] showWidgets = this.pagingFiledPane.getShowItems(this.sharableWidgetProviders); + JPanel widgetPane = createWidgetPane(); + widgetPane.setLayout(new FlowLayout(FlowLayout.LEFT, H_GAP, V_GAP)); + for (OnlineShareWidget provider : showWidgets) { + PreviewWidgetBlock widgetButton = createWidgetBlock(provider); + widgetPane.add(widgetButton); + } + widgetPane.setPreferredSize(new Dimension(240, getPaneHeight(showWidgets.length))); + + UIScrollPane scrollPane = new UIScrollPane(createContentPane(widgetPane)); + setScrollPaneStyle(scrollPane); + return scrollPane; + } + + protected JPanel createWidgetPane() { + return new JPanel(); + } + + protected JPanel createContentPane(JPanel widgetPane) { + JPanel panel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + panel.add(widgetPane, BorderLayout.CENTER); + return panel; + } + + protected boolean pagePaneEnable() { + return true; + } + + protected void setScrollPaneStyle(UIScrollPane scrollPane) { + scrollPane.setBorder(null); + scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); + scrollPane.setWheelScrollingEnabled(filterPane == null || !filterPane.isShowPopup()); + } + + protected PreviewWidgetBlock createWidgetBlock(OnlineShareWidget provider) { + return new OnlineWidgetBlock(provider, this); + } + + protected int getPaneHeight(int count) { + return (count + 1) / 2 * (ShareComponentConstants.SHARE_BLOCK_HEIGHT + V_GAP); + } + + public void setWidgetPaneScrollEnable(boolean enable) { + if (scrollPane != null) { + scrollPane.setWheelScrollingEnabled(enable); + } + } + + protected Container getParentContainer() { + return this.getParent(); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetShowPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetShowPane.java new file mode 100644 index 0000000000..691defde77 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetShowPane.java @@ -0,0 +1,144 @@ +package com.fr.design.mainframe.share.ui.online; + +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.mainframe.share.collect.ComponentCollector; +import com.fr.design.mainframe.share.ui.base.FlexSearchFieldPane; +import com.fr.design.mainframe.share.ui.widgetfilter.FilterPane; +import com.fr.form.share.bean.OnlineShareWidget; +import com.fr.stable.StringUtils; + +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.text.BadLocationException; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; + + +/** + * Created by kerry on 2020-10-19 + */ +public class OnlineWidgetShowPane extends AbstractOnlineWidgetShowPane { + private String lastSearch = StringUtils.EMPTY; + private String lastFilter = StringUtils.EMPTY; + private int lastSortTabSelectedIndex = 0; + + public OnlineWidgetShowPane(OnlineShareWidget[] sharableWidgetProviders) { + super(sharableWidgetProviders); + } + + @Override + public void initSearchTextFieldPaneListener(FlexSearchFieldPane searchFieldPane) { + super.initSearchTextFieldPaneListener(searchFieldPane); + + searchFieldPane.registerSearchTextFieldFocusListener(new FocusAdapter() { + private KeyListener keyListener = new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_DELETE) { + collectSearchText(false); + } + } + }; + public void focusGained(FocusEvent e) { + searchFieldPane.addKeyListener(keyListener); + } + @Override + public void focusLost(FocusEvent e) { + searchFieldPane.removeKeyListener(keyListener); + collectSearchText(true); + + } + }); + + searchFieldPane.registerDeleteIconMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + collectSearchText(false); + } + }); + + searchFieldPane.registerFieldDocumentListener(new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + try { + lastSearch = e.getDocument().getText(0, e.getDocument().getLength()); + } catch (BadLocationException ex) { + ex.printStackTrace(); + } + } + @Override + public void removeUpdate(DocumentEvent e) { + textChanged(e); + } + + @Override + public void changedUpdate(DocumentEvent e) { + textChanged(e); + } + + public void textChanged(DocumentEvent e) {}; + }); + } + + @Override + public void initFilterPaneListener(FilterPane filterPane) { + super.initFilterPaneListener(filterPane); + filterPane.registerChangeListerner(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + lastFilter = e.getSource().toString(); + } + }); + filterPane.addPopupStateChangeListener(new FilterPane.PopStateChangeListener() { + @Override + public void stateChange(boolean state) { + if (!state) { + collectFilterContent(); + } + } + }); + } + + @Override + public void initSortTabPane(SortTabPane sortTabPane) { + super.initSortTabPane(sortTabPane); + lastSortTabSelectedIndex = sortTabPane.getIndex(); + sortTabPane.registerSortTabMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if (sortTabPane.getIndex() != lastSortTabSelectedIndex) { + collectSortType(((UILabel) e.getSource()).getText()); + lastSortTabSelectedIndex = sortTabPane.getIndex(); + } + } + }); + } + + private void collectSearchText(boolean isSaveInfo) { + if (StringUtils.isNotEmpty(lastSearch)) { + ComponentCollector.getInstance().collectSearchContent(this.lastSearch); + if (isSaveInfo) { + ComponentCollector.getInstance().saveInfo(); + } + lastSearch = StringUtils.EMPTY; + } + } + + private void collectFilterContent() { + if (StringUtils.isNotEmpty(lastFilter)) { + ComponentCollector.getInstance().collectFilterContent(lastFilter); + lastSearch = StringUtils.EMPTY; + } + } + + private void collectSortType(String sortType) { + ComponentCollector.getInstance().collectSortType(sortType); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetTabPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetTabPane.java new file mode 100644 index 0000000000..1ea4e85a43 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetTabPane.java @@ -0,0 +1,58 @@ +package com.fr.design.mainframe.share.ui.online; + +import com.fr.design.gui.ibutton.UITabGroup; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.share.collect.ComponentCollector; +import com.fr.design.mainframe.share.ui.online.widgetpackage.OnlineWidgetPackagesShowPane; +import com.fr.form.share.bean.OnlineShareWidget; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.CardLayout; + +/** + * Created by kerry on 2020-10-19 + */ +public class OnlineWidgetTabPane extends JPanel { + private static final String COMPONENT = com.fr.design.i18n.Toolkit.i18nText("Fine-Plugin_Component"); + private static final String COMPONENT_PACKAGE = com.fr.design.i18n.Toolkit.i18nText("Fine-Plugin_Component_Package"); + private CardLayout cardLayout; + private JPanel centerPane; + private boolean packagePaneCreated = false; + + public OnlineWidgetTabPane(OnlineShareWidget[] sharableWidgets, OnlineShareWidget[] sharableWidgetPackage) { + initPane(sharableWidgets, sharableWidgetPackage); + } + + private void initPane(OnlineShareWidget[] sharableWidgets, OnlineShareWidget[] sharableWidgetPackages) { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.cardLayout = new CardLayout(); + this.centerPane = new JPanel(cardLayout); + this.centerPane.add(new OnlineWidgetShowPane(sharableWidgets), COMPONENT); + //延迟组件包面板的初始化,防止组件面板里组件的缩略图和组件包面板里组件的缩略图一起加载 + UITabGroup headGroup = new UITabGroup(new String[]{COMPONENT, COMPONENT_PACKAGE}) { + public void tabChanged(int newSelectedIndex) { + OnlineWidgetRepoPane.getInstance().setShowPackagePanel(newSelectedIndex != 0); + if (newSelectedIndex == 0) { + cardLayout.show(centerPane, COMPONENT); + } else { + ComponentCollector.getInstance().collectCmpPktClick(); + //延迟组件包面板的初始化,防止组件面板里组件和缩略图和组件包面板里组件的缩略图一起加载 + if (!packagePaneCreated) { + centerPane.add(new OnlineWidgetPackagesShowPane(sharableWidgetPackages), COMPONENT_PACKAGE); + packagePaneCreated = true; + } + cardLayout.show(centerPane, COMPONENT_PACKAGE); + } + } + }; + headGroup.setSelectedIndex(0); + this.centerPane.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0)); + JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + jPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 10)); + jPanel.add(headGroup, BorderLayout.CENTER); + this.add(jPanel, BorderLayout.NORTH); + this.add(centerPane, BorderLayout.CENTER); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/ResourceLoader.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/ResourceLoader.java new file mode 100644 index 0000000000..a57a645881 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/ResourceLoader.java @@ -0,0 +1,13 @@ +package com.fr.design.mainframe.share.ui.online; + +/** + * Created by kerry on 2020-12-10 + * todo 后面看看能不能和DataLoad合并起来 + */ +public interface ResourceLoader { + /** + * 加载资源文件 + */ + void load(); + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/widgetpackage/OnlineWidgetPackageSelectPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/widgetpackage/OnlineWidgetPackageSelectPane.java new file mode 100644 index 0000000000..2271f0c89b --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/widgetpackage/OnlineWidgetPackageSelectPane.java @@ -0,0 +1,40 @@ +package com.fr.design.mainframe.share.ui.online.widgetpackage; + +import com.fr.design.mainframe.share.ui.block.OnlineWidgetPackageBlock; +import com.fr.design.mainframe.share.ui.block.PreviewWidgetBlock; +import com.fr.design.mainframe.share.ui.online.OnlineWidgetSelectPane; +import com.fr.form.share.base.DataLoad; +import com.fr.form.share.bean.OnlineShareWidget; +import com.fr.form.share.constants.ShareComponentConstants; + +/** + * Created by kerry on 2020-10-21 + */ +public class OnlineWidgetPackageSelectPane extends OnlineWidgetSelectPane { + private final OnlineWidgetPackagesShowPane parentPane; + + public OnlineWidgetPackageSelectPane(OnlineShareWidget[] providers, int widgetsPerNum, OnlineWidgetPackagesShowPane parentPane) { + super(providers, widgetsPerNum); + this.parentPane = parentPane; + + } + + public OnlineWidgetPackageSelectPane(DataLoad dataLoad, int widgetsPerNum, OnlineWidgetPackagesShowPane parentPane) { + super(dataLoad, widgetsPerNum); + this.parentPane = parentPane; + + } + + public void showWidgetDetailPane(String id) { + this.parentPane.showWidgetDetailPane(id); + } + + protected PreviewWidgetBlock createWidgetBlock(OnlineShareWidget provider) { + return new OnlineWidgetPackageBlock(provider, this); + } + + protected int getPaneHeight(int count) { + return count * (ShareComponentConstants.SHARE_PACKAGE_BLOCK_HEIGHT + V_GAP); + } + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/widgetpackage/OnlineWidgetPackagesShowPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/widgetpackage/OnlineWidgetPackagesShowPane.java new file mode 100644 index 0000000000..8dbdf6add3 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/widgetpackage/OnlineWidgetPackagesShowPane.java @@ -0,0 +1,183 @@ +package com.fr.design.mainframe.share.ui.online.widgetpackage; + + +import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.share.ui.base.MouseClickListener; +import com.fr.design.mainframe.share.ui.online.AbstractOnlineWidgetShowPane; +import com.fr.design.mainframe.share.ui.online.OnlineDownloadPackagePane; +import com.fr.design.mainframe.share.ui.online.OnlineWidgetSelectPane; +import com.fr.design.mainframe.share.ui.widgetfilter.FilterPane; +import com.fr.form.share.base.DataLoad; +import com.fr.form.share.bean.OnlineShareWidget; +import com.fr.form.share.utils.ShareUtils; +import com.fr.stable.StringUtils; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Color; +import java.awt.Cursor; +import java.awt.event.MouseEvent; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by kerry on 2020-10-19 + */ +public class OnlineWidgetPackagesShowPane extends AbstractOnlineWidgetShowPane { + private static final Color TEXT_COLOR = Color.decode("#419BF9"); + private static final String WIDGETS_INFO = "WIDGETS_INFO"; + private static final String WIDGET_DETAIL = "WIDGET_DETAIL"; + + private CardLayout cardLayout; + private JPanel centerPane; + private JPanel detailPane; + private String currentPackageId; + private OnlineWidgetSelectPane onlineWidgetSelectPane; + private UILabel downloadLabel; + private final Map cachePanelMap = new HashMap<>(); + + public OnlineWidgetPackagesShowPane(OnlineShareWidget[] sharableWidgetProviders) { + super(sharableWidgetProviders); + } + + protected JPanel initContentPane() { + JPanel firstPane = super.initContentPane(); + cardLayout = new CardLayout(); + centerPane = new JPanel(cardLayout); + centerPane.add(firstPane, WIDGETS_INFO); + + JPanel secondPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + UILabel backLabel = createLabel(Toolkit.i18nText("Fine-Design_Report_AlphaFine_Back"), new MouseClickListener() { + @Override + public void mouseClicked(MouseEvent e) { + cardLayout.show(centerPane, WIDGETS_INFO); + } + }); + downloadLabel = createLabel(Toolkit.i18nText("Fine-Plugin_Component_Download_All_Component"), new MouseClickListener() { + @Override + public void mouseClicked(MouseEvent e) { + String message = Toolkit.i18nText("Fine-Plugin_Component_Download_All_Component_Message") + + "\n" + + Toolkit.i18nText("Fine-Plugin_Component_Total") + + onlineWidgetSelectPane.getSharableWidgetNum() + + Toolkit.i18nText("Fine-Plugin_Component_Piece"); + int returnValue = FineJOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), message, Toolkit.i18nText("Fine-Design_Basic_Confirm"), FineJOptionPane.YES_NO_OPTION); + if (returnValue == FineJOptionPane.OK_OPTION && onlineWidgetSelectPane.getSharableWidgetNum() != 0) { + downLoadPackage(); + } + } + }); + + JPanel downloadPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + downloadPane.setBorder(BorderFactory.createEmptyBorder(0, 130, 0, 0)); + downloadPane.add(downloadLabel, BorderLayout.CENTER); + + JPanel labelPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + labelPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 10)); + labelPane.add(backLabel, BorderLayout.WEST); + labelPane.add(downloadPane, BorderLayout.CENTER); + + secondPane.add(labelPane, BorderLayout.NORTH); + detailPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + detailPane.add(new OnlineWidgetSelectPane(new OnlineShareWidget[]{}, 50), BorderLayout.CENTER); + secondPane.add(detailPane, BorderLayout.CENTER); + centerPane.add(secondPane, WIDGET_DETAIL); + cardLayout.show(centerPane, WIDGETS_INFO); + return centerPane; + } + + private void downLoadPackage() { + downloadLabel.setVisible(false); + detailPane.removeAll(); + OnlineDownloadPackagePane widgetSelectPane = new OnlineDownloadPackagePane(this, onlineWidgetSelectPane.getSharableWidgetProviders(), 50); + detailPane.add(widgetSelectPane, BorderLayout.CENTER); + cardLayout.show(centerPane, WIDGET_DETAIL); + + cachePanelMap.put(currentPackageId, widgetSelectPane); + + for (OnlineShareWidget onlineShareWidget : getSharableWidgetProviders()) { + if (StringUtils.equals(onlineShareWidget.getId(), currentPackageId)) { + widgetSelectPane.downloadWidget(onlineShareWidget); + break; + } + } + } + + private UILabel createLabel(String i18nText, MouseClickListener clickListener) { + UILabel label = new UILabel(i18nText); + label.setForeground(TEXT_COLOR); + label.addMouseListener(clickListener); + label.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + return label; + } + + protected void initNorthPane(JPanel jPanel, JPanel northPane) { + //暂时隐藏,以后会展示出来 + } + + + protected OnlineWidgetSelectPane createOnlineWidgetSelectPane(OnlineShareWidget[] sharableWidgetProviders) { + return new OnlineWidgetPackageSelectPane(filterPackageWidget(sharableWidgetProviders), 10, this); + } + + protected OnlineWidgetSelectPane createOnlineWidgetSelectPane(DataLoad dataLoad) { + return new OnlineWidgetPackageSelectPane(dataLoad, 10, this); + } + + private OnlineShareWidget[] filterPackageWidget(OnlineShareWidget[] sharableWidgetProviders) { + List onlineShareWidgets = new ArrayList<>(); + for (OnlineShareWidget widget : sharableWidgetProviders) { + if (widget.isWidgetPackage()) { + onlineShareWidgets.add(widget); + } + } + return onlineShareWidgets.toArray(new OnlineShareWidget[onlineShareWidgets.size()]); + } + + public void showWidgetDetailPane(final String id) { + currentPackageId = id; + boolean containsCache = cachePanelMap.containsKey(id); + onlineWidgetSelectPane = containsCache ? cachePanelMap.get(id) : new OnlineWidgetSelectPane(() -> ShareUtils.getPackageWidgets(id), 50); + downloadLabel.setVisible(!containsCache); + showWidgetDetailPane(onlineWidgetSelectPane); + } + + + public void resetWidgetDetailPane(String id, final OnlineShareWidget[] onlineShareWidgets) { + if (StringUtils.equals(id, currentPackageId)) { + showWidgetDetailPane(new OnlineWidgetSelectPane(onlineShareWidgets, 50)); + setDownloadLabelVisible(true); + } + removeCachePane(id); + } + + private void showWidgetDetailPane(OnlineWidgetSelectPane onlineWidgetSelectPane) { + detailPane.removeAll(); + detailPane.add(onlineWidgetSelectPane, BorderLayout.CENTER); + cardLayout.show(centerPane, WIDGET_DETAIL); + } + + public void setDownloadLabelVisible(boolean visible) { + downloadLabel.setVisible(visible); + } + + public String getCurrentPackageId() { + return currentPackageId; + } + + public void removeCachePane(String packageId) { + cachePanelMap.remove(packageId); + } + + protected FilterPane createFilterPane() { + return FilterPane.createOnlinePackageFilterPane(); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/FilterPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/FilterPane.java new file mode 100644 index 0000000000..552f81d387 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/FilterPane.java @@ -0,0 +1,235 @@ +package com.fr.design.mainframe.share.ui.widgetfilter; + +import com.fr.base.BaseUtils; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.share.ui.base.MouseClickListener; +import com.fr.form.share.bean.WidgetFilterTypeInfo; +import com.fr.form.share.utils.ShareUtils; +import com.fr.general.ComparatorUtils; +import com.fr.invoke.Reflect; + +import javax.swing.BorderFactory; +import javax.swing.Icon; +import javax.swing.JPanel; +import javax.swing.Popup; +import javax.swing.PopupFactory; +import javax.swing.SwingConstants; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.AWTEvent; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.Point; +import java.awt.event.AWTEventListener; +import java.awt.event.MouseEvent; +import java.util.ArrayList; +import java.util.EventListener; +import java.util.List; + +/** + * Created by kerry on 2020-10-21 + */ +public class FilterPane extends JPanel { + public static final String SOURCE_FILTER_KEY = "2@source"; + public static final String CHART_FILTER_KEY = "3@chart"; + public static final String REPORT_FILTER_KEY = "4@report"; + + private static final Icon FILTER_COMBO = BaseUtils.readIcon("/com/fr/base/images/share/filter_combo.png"); + private static final Icon FILTER_COMBO_UP = BaseUtils.readIcon("/com/fr/base/images/share/filter_combo_up.png"); + private final UILabel filterLabel; + private UILabel arrowButton; + private Popup popup; + private boolean showPopup = false; + private FilterPopupPane filterPopupPane; + private ChangeListener changeListener; + private final AWTEventListener awtEventListener; + List listenerList = new ArrayList<>(); + + private FilterPane() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + final JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + jPanel.setBorder(BorderFactory.createLineBorder(Color.decode("#D9DADD"))); + this.add(jPanel, BorderLayout.CENTER); + jPanel.setBackground(Color.WHITE); + this.filterLabel = new UILabel(Toolkit.i18nText("Fine-Plugin_Component_Online_No_Filter"), SwingConstants.LEFT); + filterLabel.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0)); + filterLabel.setPreferredSize(new Dimension(80, 20)); + filterLabel.setForeground(Color.decode("#8F8F92")); + filterLabel.addMouseListener(new MouseClickListener() { + @Override + public void mouseClicked(MouseEvent e) { + super.mouseClicked(e); + if (filterPopupPane != null) { + if (filterPopupPane.hasFilter()) { + filterPopupPane.reset(); + } else { + controlFilterPopUp(); + } + } + + } + }); + jPanel.addMouseListener( + new MouseClickListener() { + @Override + public void mouseClicked(MouseEvent e) { + super.mouseClicked(e); + controlFilterPopUp(); + } + } + ); + JPanel subPane = FRGUIPaneFactory.createLeftFlowZeroGapBorderPane(); + subPane.add(filterLabel); + subPane.setBackground(Color.WHITE); + jPanel.add(subPane, BorderLayout.CENTER); + arrowButton = new UILabel(FILTER_COMBO); + awtEventListener = event -> { + if (event instanceof MouseEvent) { + MouseEvent mv = (MouseEvent) event; + if (isCanHide(mv, jPanel)) { + hideFilterPopUp(); + } + } + + }; + jPanel.add(arrowButton, BorderLayout.EAST); + } + + public static FilterPane createLocalFilterPane() { + FilterPane pane = new FilterPane(); + pane.filterPopupPane = new LocalFilterPopupPane(pane, LocalWidgetFilterCategory.getLocalCategory()); + return pane; + } + + public static FilterPane createOnlineFilterPane() { + FilterPane pane = new FilterPane(); + pane.filterPopupPane = new OnlineFilterPopupPane(pane, pane.loadFilterCategories()); + return pane; + } + + public static FilterPane createOnlinePackageFilterPane() { + FilterPane pane = new FilterPane() { + @Override + protected List loadFilterCategories() { + List filterTypeInfos = super.loadFilterCategories(); + filterTypeInfos.removeIf(info -> ComparatorUtils.equals(FilterPane.CHART_FILTER_KEY, info.getKey()) + || ComparatorUtils.equals(FilterPane.REPORT_FILTER_KEY, info.getKey())); + return filterTypeInfos; + } + }; + pane.filterPopupPane = new LocalFilterPopupPane(pane, pane.loadFilterCategories()); + return pane; + } + + public void changeFilterButtonStatus(boolean hasFilter) { + if (hasFilter) { + switchToClearFilter(); + } else { + switchToNoFilter(); + } + } + + public boolean isShowPopup() { + return showPopup; + } + + private void controlFilterPopUp() { + if (!showPopup) { + showFilterPopUp(); + } else { + hideFilterPopUp(); + } + } + + private synchronized void showFilterPopUp() { + PopupFactory pf = PopupFactory.getSharedInstance(); + Point p = FilterPane.this.getLocationOnScreen(); + popup = pf.getPopup(FilterPane.this, filterPopupPane, p.x, p.y + FilterPane.this.getHeight()); + popup.show(); + filterPopupPane.setPreferredSize(new Dimension(228, filterPopupPane.getHeight())); + showPopup = true; + arrowButton.setIcon(FILTER_COMBO_UP); + firePopupStateChange(true); + java.awt.Toolkit.getDefaultToolkit().addAWTEventListener(awtEventListener, AWTEvent.MOUSE_EVENT_MASK); + } + + private void hideFilterPopUp() { + popup.hide(); + showPopup = false; + arrowButton.setIcon(FILTER_COMBO); + firePopupStateChange(false); + java.awt.Toolkit.getDefaultToolkit().removeAWTEventListener(awtEventListener); + } + + protected List loadFilterCategories() { + return ShareUtils.getWidgetFilterTypeInfos(); + } + + private boolean isCanHide(MouseEvent mv, JPanel jPanel) { + if (mv.getClickCount() < 1) { + return false; + } + // 表示Popup弹窗是否能被点击到 + boolean clickFlag = false; + if (popup != null && showPopup) { + Component component = Reflect.on(popup).call("getComponent").get(); + Point p = component.getLocationOnScreen(); + Point clickPoint = mv.getLocationOnScreen(); + clickFlag = clickPoint.getX() >= p.getX() + && clickPoint.getY() >= p.getY() + && clickPoint.getX() <= component.getWidth() + p.getX() + && clickPoint.getY() <= p.getY() + component.getHeight(); + + } + return popup != null && showPopup + && !clickFlag && !ComparatorUtils.equals(mv.getSource(), jPanel) + && !ComparatorUtils.equals(mv.getSource(), filterLabel); + } + + public void registerChangeListerner(ChangeListener changeListener) { + this.changeListener = changeListener; + } + + public void fireChangeListener(ChangeEvent e) { + this.changeListener.stateChanged(e); + } + + public void reset() { + if (filterPopupPane != null && filterPopupPane.hasFilter()) { + filterPopupPane.reset(); + } + switchToNoFilter(); + } + + private void switchToNoFilter() { + filterLabel.setText(Toolkit.i18nText("Fine-Plugin_Component_Online_No_Filter")); + filterLabel.setForeground(Color.decode("#8F8F92")); + filterLabel.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } + + private void switchToClearFilter() { + filterLabel.setText(Toolkit.i18nText("Fine-Plugin_Component_Online_Clear_Filter")); + filterLabel.setForeground(Color.decode("#419BF9")); + filterLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + } + + public void firePopupStateChange(boolean PopupState) { + for (PopStateChangeListener listener : listenerList) { + listener.stateChange(PopupState); + } + } + + public void addPopupStateChangeListener(PopStateChangeListener listener) { + listenerList.add(listener); + } + + public interface PopStateChangeListener extends EventListener { + void stateChange(boolean state); + } + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/FilterPopupPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/FilterPopupPane.java new file mode 100644 index 0000000000..e2bcd5344d --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/FilterPopupPane.java @@ -0,0 +1,201 @@ +package com.fr.design.mainframe.share.ui.widgetfilter; + +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.layout.VerticalFlowLayout; +import com.fr.form.share.bean.WidgetFilterInfo; +import com.fr.form.share.bean.WidgetFilterTypeInfo; +import com.fr.general.ComparatorUtils; +import com.fr.stable.StringUtils; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.event.ChangeEvent; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Font; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Yuan.Wang + * @Date: 2020/11/11 + */ +public abstract class FilterPopupPane extends JPanel { + private static final Color BORDER_COLOR = Color.decode("#D9DADD"); + private static final String FILTER_ALL_ID = "0"; + + FilterPane filterPane; + private List filterList = new ArrayList<>(); + private final List checkBoxList = new ArrayList<>(); + private boolean reset = false; + + + public FilterPopupPane(FilterPane filterPane, List widgetFilterCategories) { + this.filterPane = filterPane; + initPane(widgetFilterCategories); + } + + private void initPane(List widgetFilterCategories) { + this.setBackground(Color.WHITE); + this.setBorder(BorderFactory.createLineBorder(BORDER_COLOR)); + this.setForeground(Color.decode("#FFFFFF")); + this.setLayout(new BorderLayout()); + this.add(createVerticalFlowPane(widgetFilterCategories), BorderLayout.CENTER); + } + + public boolean hasFilter() { + return filterList.size() > 0; + } + + protected List getFilterList() { + return filterList; + } + + private JPanel createVerticalFlowPane(List widgetFilterCategories) { + + List topWidgetTypeFilter = new ArrayList<>(); + List widgetTypeFilter = new ArrayList<>(); + List otherWidgetTypeFilter = new ArrayList<>(); + + for (WidgetFilterTypeInfo info : widgetFilterCategories) { + if (ComparatorUtils.equals(FilterPane.CHART_FILTER_KEY, info.getKey()) + || ComparatorUtils.equals(FilterPane.REPORT_FILTER_KEY, info.getKey())) { + widgetTypeFilter.add(info); + } else if (ComparatorUtils.equals(FilterPane.SOURCE_FILTER_KEY, info.getKey())) { + topWidgetTypeFilter.add(info); + } else { + otherWidgetTypeFilter.add(info); + } + } + + JPanel verticalFlowPane = new JPanel(); + verticalFlowPane.setBackground(Color.WHITE); + VerticalFlowLayout layout = new VerticalFlowLayout(FlowLayout.LEADING, 0, 10); + layout.setAlignLeft(true); + verticalFlowPane.setLayout(layout); + + verticalFlowPane.setBackground(Color.WHITE); + verticalFlowPane.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); + + for (WidgetFilterTypeInfo info : topWidgetTypeFilter) { + verticalFlowPane.add(createOtherCategoryPane(info)); + } + if (widgetTypeFilter.size() > 0) { + verticalFlowPane.add(createWidgetTypeFilterPane(widgetTypeFilter)); + } + for (WidgetFilterTypeInfo info : otherWidgetTypeFilter) { + verticalFlowPane.add(createOtherCategoryPane(info)); + } + return verticalFlowPane; + } + + private JPanel createWidgetTypeFilterPane(List widgetTypeFilter) { + JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + jPanel.setBackground(Color.WHITE); + UILabel titleLabel = new UILabel(Toolkit.i18nText("Fine-Design_Basic_Type")); + titleLabel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); + titleLabel.setPreferredSize(new Dimension(226, 20)); + titleLabel.setOpaque(true); + titleLabel.setBackground(Color.decode("#EDEDEE")); + jPanel.add(titleLabel, BorderLayout.NORTH); + + JPanel contentPane = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 10); + contentPane.setBackground(Color.WHITE); + for (WidgetFilterTypeInfo info : widgetTypeFilter) { + contentPane.add(createTypeFilterPane(info)); + } + jPanel.add(contentPane, BorderLayout.CENTER); + return jPanel; + } + + private JPanel createTypeFilterPane(WidgetFilterTypeInfo widgetFilterTypeInfo) { + JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + jPanel.setBackground(Color.WHITE); + UILabel titleLabel = new UILabel(widgetFilterTypeInfo.getTitle() + ":"); + titleLabel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); + titleLabel.setFont(new Font(titleLabel.getFont().getName(), Font.BOLD, titleLabel.getFont().getSize())); + jPanel.add(titleLabel, BorderLayout.NORTH); + jPanel.add(createCategoryDetailPane(widgetFilterTypeInfo), BorderLayout.CENTER); + return jPanel; + } + + private JPanel createOtherCategoryPane(WidgetFilterTypeInfo filterTypeInfo) { + JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + jPanel.setBackground(Color.WHITE); + UILabel titleLabel = new UILabel(filterTypeInfo.getTitle()); + titleLabel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); + titleLabel.setPreferredSize(new Dimension(226, 20)); + titleLabel.setOpaque(true); + titleLabel.setBackground(Color.decode("#EDEDEE")); + jPanel.add(titleLabel, BorderLayout.NORTH); + jPanel.add(createCategoryDetailPane(filterTypeInfo), BorderLayout.CENTER); + return jPanel; + } + + private JPanel createCategoryDetailPane(WidgetFilterTypeInfo filterTypeInfo) { + JPanel contentPane = FRGUIPaneFactory.createNColumnGridInnerContainer_S_Pane(2); + contentPane.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0)); + contentPane.setBackground(Color.WHITE); + int displayCount = 0; + for (final WidgetFilterInfo filterInfo : filterTypeInfo.getFilterItems()) { + if (!ComparatorUtils.equals(FILTER_ALL_ID, filterInfo.getId())) { + displayCount++; + } + } + int contentPaneHeight = ((displayCount + 1) / 2) * 27; + contentPane.setPreferredSize(new Dimension(228, contentPaneHeight)); + for (final WidgetFilterInfo filterInfo : filterTypeInfo.getFilterItems()) { + if (ComparatorUtils.equals(FILTER_ALL_ID, filterInfo.getId())) { + continue; + } + final UICheckBox checkBox = new UICheckBox(filterInfo.getName()); + checkBox.setBackground(Color.WHITE); + + checkBox.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + if (reset) { + return; + } + if (checkBox.isSelected()) { + filterList.add(filterInfo); + } else if (filterList.contains(filterInfo)) { + filterList.remove(filterInfo); + } + checkFilterButtonStatus(); + filterPane.fireChangeListener(new ChangeEvent(assembleFilter())); + } + }); + + + checkBoxList.add(checkBox); + contentPane.add(checkBox); + } + return contentPane; + } + + protected abstract String assembleFilter(); + + private void checkFilterButtonStatus() { + filterPane.changeFilterButtonStatus(hasFilter()); + } + + public void reset() { + reset = true; + for (UICheckBox checkBox : checkBoxList) { + checkBox.setSelected(false); + } + filterList.clear(); + checkFilterButtonStatus(); + filterPane.fireChangeListener(new ChangeEvent(StringUtils.EMPTY)); + reset = false; + } + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/LocalFilterPopupPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/LocalFilterPopupPane.java new file mode 100644 index 0000000000..5a589d32c0 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/LocalFilterPopupPane.java @@ -0,0 +1,23 @@ +package com.fr.design.mainframe.share.ui.widgetfilter; + +import com.fr.form.share.bean.WidgetFilterTypeInfo; +import com.fr.stable.StringUtils; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Yuan.Wang + * @Date: 2020/11/11 + */ +public class LocalFilterPopupPane extends FilterPopupPane { + public LocalFilterPopupPane(FilterPane pane, List loadFilterCategories) { + super(pane, loadFilterCategories); + } + + @Override + protected String assembleFilter() { + LocalWidgetFilter.getInstance().setFilterList(getFilterList() == null ? new ArrayList<>() : getFilterList()); + return StringUtils.EMPTY; + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/LocalWidgetFilter.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/LocalWidgetFilter.java new file mode 100644 index 0000000000..47b2979c72 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/LocalWidgetFilter.java @@ -0,0 +1,139 @@ +package com.fr.design.mainframe.share.ui.widgetfilter; + +import com.fr.design.i18n.Toolkit; +import com.fr.form.share.DefaultSharableWidget; +import com.fr.form.share.SharableWidgetProvider; +import com.fr.form.share.bean.WidgetFilterInfo; +import com.fr.design.mainframe.share.constants.DisplayDevice; +import com.fr.stable.ArrayUtils; +import com.fr.stable.StringUtils; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Yuan.Wang + * @Date: 2020/11/11 + */ +public class LocalWidgetFilter { + private List filterList; + + private LocalWidgetFilter() { + filterList = new ArrayList<>(); + } + + private static class Holder { + private static final LocalWidgetFilter HOLDER = new LocalWidgetFilter(); + } + + public static LocalWidgetFilter getInstance() { + return Holder.HOLDER; + } + + public void setFilterList(List filterList) { + this.filterList = filterList; + } + + public boolean shouldShow(SharableWidgetProvider provider) { + if (filterList == null || filterList.size() == 0) { + return true; + } + if (provider instanceof DefaultSharableWidget) { + DefaultSharableWidget bindInfo = (DefaultSharableWidget) provider; + //类型,即图表类型或报表类型 + boolean sameType = true; + //展示终端,即PC端、移动端 + boolean sameDisplayDevice = true; + //价格,即免费或者付费 + boolean sameSource = true; + + //如果有筛选条件,先初始化为false + for (WidgetFilterInfo filterInfo : filterList) { + if (StringUtils.equals(filterInfo.getType(), "chart") | StringUtils.equals(filterInfo.getType(), "report")) { + sameType = false; + } + if (StringUtils.equals(filterInfo.getType(), "displayDevice")) { + sameDisplayDevice = false; + } + if (StringUtils.equals(filterInfo.getType(), "source")) { + sameSource = false; + } + } + //符合条件,设置为true + for (WidgetFilterInfo filterInfo : filterList) { + //类型 + sameType |= filterType(filterInfo, bindInfo); + //展示终端 + sameDisplayDevice |= filterDisplayDevice(filterInfo, bindInfo); + //来源 + sameSource |= filterSource(filterInfo, bindInfo); + } + return sameDisplayDevice & sameSource & sameType; + } + return false; + } + + public SharableWidgetProvider[] filter(SharableWidgetProvider[] elCaseBindInfoList) { + SharableWidgetProvider[] result = elCaseBindInfoList; + for (SharableWidgetProvider provider : result) { + if (!LocalWidgetFilter.getInstance().shouldShow(provider)) { + result = ArrayUtils.removeElement(result, provider); + } + } + return result; + } + + public boolean hasFilter() { + return filterList != null && filterList.size() != 0; + } + + private boolean filterType(WidgetFilterInfo filterInfo, DefaultSharableWidget bindInfo) { + //图表报表类型 + if (StringUtils.equals(filterInfo.getType(), "chart") | StringUtils.equals(filterInfo.getType(), "report")) { + //图表、报表类型改名之后的兼容 + if (sameType(filterInfo, bindInfo)) { + return true; + } + return StringUtils.equals(bindInfo.getChildClassify(), filterInfo.getName()); + } + return false; + } + + private boolean filterDisplayDevice(WidgetFilterInfo filterInfo, DefaultSharableWidget bindInfo) { + if (StringUtils.equals(filterInfo.getType(), "displayDevice")) { + boolean sameMobile = StringUtils.equals(filterInfo.getName(), "移动端") & DisplayDevice.supportMobile(bindInfo.getDisplayDevice()); + boolean samePC = StringUtils.equals(filterInfo.getName(), "PC端") & DisplayDevice.supportPC(bindInfo.getDisplayDevice()); + //filterInfo的设备信息 = bindInfo的设备信息,为true + return sameMobile | samePC; + } + return false; + } + + private boolean filterSource(WidgetFilterInfo filterInfo, DefaultSharableWidget bindInfo) { + if (StringUtils.equals(filterInfo.getType(), "source")) { + boolean sameMarket = StringUtils.equals(filterInfo.getName(), "商城") && StringUtils.equals(bindInfo.getSource(), DefaultSharableWidget.MARKET); + boolean sameLocal = StringUtils.equals(filterInfo.getName(), "本地") && StringUtils.equals(bindInfo.getSource(), DefaultSharableWidget.LOCAL); + return sameMarket | sameLocal; + } + return false; + } + + private boolean sameType(WidgetFilterInfo filterInfo, DefaultSharableWidget bindInfo) { + //旧:其他 新:其它图表 + boolean other = StringUtils.equals(filterInfo.getName(), Toolkit.i18nText("Fine-Plugin_Component_Type_Chart_Other")) + && (StringUtils.equals(bindInfo.getChildClassify(), Toolkit.i18nText("Fine-Plugin_Component_Type_Chart_Other")) + || StringUtils.equals(bindInfo.getChildClassify(), Toolkit.i18nText("Fine-Plugin_Component_Type_Others"))); + + //旧:移动维度切换 新:多维度切换 + boolean dimensionChange = StringUtils.equals(filterInfo.getName(), Toolkit.i18nText("Fine-Plugin_Component_Type_Dimension_Change")) + && (StringUtils.equals(bindInfo.getChildClassify(), Toolkit.i18nText("Fine-Plugin_Component_Type_Mobile_Dimension_Change")) + || StringUtils.equals(bindInfo.getChildClassify(), Toolkit.i18nText("Fine-Plugin_Component_Type_Dimension_Change"))); + + //旧:移动填报 新:填报 + boolean fill = StringUtils.equals(filterInfo.getName(), Toolkit.i18nText("Fine-Plugin_Component_Type_Fill")) + && (StringUtils.equals(bindInfo.getChildClassify(), Toolkit.i18nText("Fine-Plugin_Component_Type_Fill")) + || StringUtils.equals(bindInfo.getChildClassify(), Toolkit.i18nText("Fine-Plugin_Component_Type_Mobile_Fill"))); + + return other | dimensionChange | fill; + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/LocalWidgetFilterCategory.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/LocalWidgetFilterCategory.java new file mode 100644 index 0000000000..9e5d4f34ec --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/LocalWidgetFilterCategory.java @@ -0,0 +1,82 @@ +package com.fr.design.mainframe.share.ui.widgetfilter; + +import com.fr.form.share.bean.WidgetFilterInfo; +import com.fr.form.share.bean.WidgetFilterTypeInfo; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Yuan.Wang + * @Date: 2020/11/12 + */ +public class LocalWidgetFilterCategory { + + public static List getLocalCategory() { + List category = new ArrayList<>(); + + WidgetFilterTypeInfo source = new WidgetFilterTypeInfo(); + source.setTitle("来源"); + source.setKey("2@source"); + source.addFilterItem(new WidgetFilterInfo("本地", "1", "source")); + source.addFilterItem(new WidgetFilterInfo("商城", "2", "source")); + source.addFilterItem(new WidgetFilterInfo("全部", "0", "source")); + + WidgetFilterTypeInfo displayDevice = new WidgetFilterTypeInfo(); + displayDevice.setTitle("展示终端"); + displayDevice.setKey("1@displayDevice"); + displayDevice.addFilterItem(new WidgetFilterInfo("PC端", "1", "displayDevice")); + displayDevice.addFilterItem(new WidgetFilterInfo("移动端", "2", "displayDevice")); + displayDevice.addFilterItem(new WidgetFilterInfo("全部", "0", "displayDevice")); + + WidgetFilterTypeInfo fee = new WidgetFilterTypeInfo(); + fee.setTitle("价格"); + fee.setKey("2@fee"); + fee.addFilterItem(new WidgetFilterInfo("付费", "2", "fee")); + fee.addFilterItem(new WidgetFilterInfo("免费", "1", "fee")); + fee.addFilterItem(new WidgetFilterInfo("全部", "0", "fee")); + + WidgetFilterTypeInfo chart = new WidgetFilterTypeInfo(); + chart.setTitle("基础元素"); + chart.setKey("3@chart"); + chart.addFilterItem(new WidgetFilterInfo("柱形图/条形图", "1", "chart")); + chart.addFilterItem(new WidgetFilterInfo("折线图", "3", "chart")); + chart.addFilterItem(new WidgetFilterInfo("组合图", "4", "chart")); + chart.addFilterItem(new WidgetFilterInfo("饼图", "2", "chart")); + chart.addFilterItem(new WidgetFilterInfo("仪表盘", "5", "chart")); + chart.addFilterItem(new WidgetFilterInfo("地图", "6", "chart")); + chart.addFilterItem(new WidgetFilterInfo("其他图表", "7", "chart")); + chart.addFilterItem(new WidgetFilterInfo("明细表", "8", "chart")); + chart.addFilterItem(new WidgetFilterInfo("基础控件", "9", "chart")); + chart.addFilterItem(new WidgetFilterInfo("全部", "0", "chart")); + + WidgetFilterTypeInfo report = new WidgetFilterTypeInfo(); + report.setTitle("综合应用"); + report.setKey("4@report"); + report.addFilterItem(new WidgetFilterInfo("指标卡", "1", "report")); + report.addFilterItem(new WidgetFilterInfo("标题头", "2", "report")); + report.addFilterItem(new WidgetFilterInfo("特殊功能卡", "4", "report")); + report.addFilterItem(new WidgetFilterInfo("多维度切换", "5", "report")); + report.addFilterItem(new WidgetFilterInfo("移动目录导航", "6", "report")); + report.addFilterItem(new WidgetFilterInfo("填报", "8", "report")); + report.addFilterItem(new WidgetFilterInfo("全部", "0", "report")); + + WidgetFilterTypeInfo style = new WidgetFilterTypeInfo(); + style.setTitle("风格"); + style.setKey("5@style"); + style.addFilterItem(new WidgetFilterInfo("简约清新", "1", "style")); + style.addFilterItem(new WidgetFilterInfo("商务稳重", "2", "style")); + style.addFilterItem(new WidgetFilterInfo("活泼绚丽", "3", "style")); + style.addFilterItem(new WidgetFilterInfo("酷炫科技", "4", "style")); + style.addFilterItem(new WidgetFilterInfo("其他风格", "5", "style")); + style.addFilterItem(new WidgetFilterInfo("全部", "0", "style")); + + category.add(displayDevice); + category.add(source); + category.add(chart); + category.add(report); + return category; + + } + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/OnlineFilterPopupPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/OnlineFilterPopupPane.java new file mode 100644 index 0000000000..2543b4a774 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/OnlineFilterPopupPane.java @@ -0,0 +1,23 @@ +package com.fr.design.mainframe.share.ui.widgetfilter; + +import com.fr.form.share.bean.WidgetFilterTypeInfo; +import com.fr.form.share.utils.ShareUtils; + +import java.util.List; + +/** + * @Author: Yuan.Wang + * @Date: 2020/11/11 + */ +public class OnlineFilterPopupPane extends FilterPopupPane { + + public OnlineFilterPopupPane(FilterPane filterPane, List widgetFilterCategories) { + super(filterPane, widgetFilterCategories); + } + + protected String assembleFilter() { + return ShareUtils.assembleFilter(getFilterList()); + } + + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java new file mode 100644 index 0000000000..93a8f73b0f --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java @@ -0,0 +1,143 @@ +package com.fr.design.mainframe.share.util; + +import com.fr.config.MarketConfig; +import com.fr.design.extra.PluginConstants; +import com.fr.form.share.base.CancelCheck; +import com.fr.form.share.constants.ShareComponentConstants; +import com.fr.general.CloudCenter; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.ProductConstants; +import com.fr.stable.StableUtils; +import com.fr.third.org.apache.http.HttpEntity; +import com.fr.third.org.apache.http.HttpException; +import com.fr.third.org.apache.http.HttpStatus; +import com.fr.third.org.apache.http.client.config.CookieSpecs; +import com.fr.third.org.apache.http.client.config.RequestConfig; +import com.fr.third.org.apache.http.client.methods.CloseableHttpResponse; +import com.fr.third.org.apache.http.client.methods.HttpUriRequest; +import com.fr.third.org.apache.http.client.methods.RequestBuilder; +import com.fr.third.org.apache.http.impl.client.BasicCookieStore; +import com.fr.third.org.apache.http.impl.client.CloseableHttpClient; +import com.fr.third.org.apache.http.impl.client.HttpClients; +import org.jetbrains.annotations.NotNull; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; + +/** + * created by Harrison on 2020/05/27 + **/ +public class DownloadUtils { + private static final String MARKET_LOGIN_URL = CloudCenter.getInstance().acquireUrlByKind("market.login"); + private static final String REUSES_URL = CloudCenter.getInstance().acquireUrlByKind("af.reuseInfo") + "file/"; + private static final String PACKAGE_REUSES_URL = CloudCenter.getInstance().acquireUrlByKind("af.reuseInfo") + "package/download/"; + + + public static boolean login(CloseableHttpClient client) throws Exception { + + HttpUriRequest login = RequestBuilder.post() + .setUri(MARKET_LOGIN_URL) + .setHeader("User-Agent", "Mozilla/5.0") + .addParameter("username", MarketConfig.getInstance().getBbsUsername()) + .addParameter("password", MarketConfig.getInstance().getBbsPassword()) + .build(); + CloseableHttpResponse loginResponse = client.execute(login); + return loginResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK; + } + + private static CloseableHttpClient createClient() { + + BasicCookieStore cookieStore = new BasicCookieStore(); + return HttpClients.custom() + .setDefaultRequestConfig(RequestConfig.custom() + .setCookieSpec(CookieSpecs.STANDARD).build()) + .setDefaultCookieStore(cookieStore) + .build(); + } + + @NotNull + public static String download(String id, String fileName, com.fr.design.extra.Process process) throws Exception { + CloseableHttpResponse fileRes = getHttpResponse(REUSES_URL, id); + if (fileRes.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + + String realPath = StableUtils.pathJoin(ProductConstants.getEnvHome(), ShareComponentConstants.PLUGIN_CACHE, ShareComponentConstants.DOWNLOAD_SHARE); + String filePath; + + HttpEntity entity = fileRes.getEntity(); + long totalSize = entity.getContentLength(); + + InputStream content = entity.getContent(); + filePath = StableUtils.pathJoin(realPath, fileName + ".reu"); + StableUtils.makesureFileExist(new File(filePath)); + FileOutputStream writer = new FileOutputStream(filePath); + byte[] data = new byte[PluginConstants.BYTES_NUM]; + int bytesRead; + int totalBytesRead = 0; + + while ((bytesRead = content.read(data)) > 0) { + writer.write(data, 0, bytesRead); + data = new byte[PluginConstants.BYTES_NUM]; + totalBytesRead += bytesRead; + process.process(totalBytesRead / (double) totalSize); + } + content.close(); + writer.flush(); + writer.close(); + FineLoggerFactory.getLogger().info("download widget{} success", id); + return filePath; + } else { + FineLoggerFactory.getLogger().info("download widget{} failed", id); + throw new HttpException(); + } + } + + public static String downloadPackage(String id, String fileName, CancelCheck cancelCheck) throws Exception { + + CloseableHttpResponse fileRes = getHttpResponse(PACKAGE_REUSES_URL, id); + + String realPath = StableUtils.pathJoin(ProductConstants.getEnvHome(), ShareComponentConstants.PLUGIN_CACHE, ShareComponentConstants.DOWNLOAD_PACKAGE_SHARE); + String filePath; + if (fileRes.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + HttpEntity entity = fileRes.getEntity(); + filePath = StableUtils.pathJoin(realPath, fileName + ".reus"); + StableUtils.makesureFileExist(new File(filePath)); + + InputStream content = entity.getContent(); + FileOutputStream writer = new FileOutputStream(filePath); + + byte[] data = new byte[PluginConstants.BYTES_NUM * 20]; + int bytesRead; + + while (!cancelCheck.isCanceled() && (bytesRead = content.read(data)) > 0) { + writer.write(data, 0, bytesRead); + data = new byte[PluginConstants.BYTES_NUM * 20]; + } + + content.close(); + writer.flush(); + writer.close(); + if (cancelCheck.isCanceled()) { + FineLoggerFactory.getLogger().info("download widget{} canceled", id); + } else { + FineLoggerFactory.getLogger().info("download widget{} failed", id); + } + return filePath; + } else { + FineLoggerFactory.getLogger().info("download widget{} failed", id); + throw new HttpException(); + } + } + + private static CloseableHttpResponse getHttpResponse(String url, String id) throws Exception { + //先登录一下。不然可能失败 + CloseableHttpClient client = createClient(); + FineLoggerFactory.getLogger().info("login fr-market"); + login(client); + FineLoggerFactory.getLogger().info("start download widget {}", id); + HttpUriRequest file = RequestBuilder.get() + .setUri(url + id) + .build(); + return client.execute(file); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallComponentHelper.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallComponentHelper.java new file mode 100644 index 0000000000..8e4de49f32 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallComponentHelper.java @@ -0,0 +1,64 @@ +package com.fr.design.mainframe.share.util; + +import com.fr.design.mainframe.share.ui.menu.SnapChatKeys; +import com.fr.design.notification.SnapChat; +import com.fr.design.notification.SnapChatFactory; +import com.fr.form.share.constants.ComponentPath; +import com.fr.form.share.group.filter.DirFilter; +import com.fr.form.share.group.filter.ReuFilter; +import com.fr.io.utils.ResourceIOUtils; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.ArrayUtils; +import com.fr.stable.StableUtils; +import com.fr.workspace.WorkContext; + +import java.io.InputStream; + +/** + * @Author: Yuan.Wang + * @Date: 2020/12/4 + */ +public class InstallComponentHelper { + + private static final String PRE_INSTALL_PATH = "/com/fr/form/share/components"; + private static final String[] PRE_INSTALL_COMPONENTS = new String[]{ + "大屏标题-蓝白.739e7afd-ce1d-40ea-b272-3c96eacc27f8.reu", + "单数据指标卡-绿色.48ea0497-1c7f-4894-a927-0f18fe4d2f27.reu", + "单数据指标卡-蓝色.d158c9d6-66be-410a-8697-47b19a8f9565.reu", + "分类对比竖向仪表板-浅色.a90a7b81-26fd-4461-8a39-ce1c07a16ad0.reu", + "分层雷达图-浅色.d2cd7a40-c14c-4a79-a30e-25d2ba555479.reu", + "进度表格-浅色.8aafad8b-d85c-4921-b45d-1acb4c226ca2.reu" + }; + + public static void installPreComponent() { + if (needPreInstallComponent()) { + for (String componentPath : PRE_INSTALL_COMPONENTS) { + try { + InputStream inputStream = InstallComponentHelper.class.getResourceAsStream(StableUtils.pathJoin(PRE_INSTALL_PATH, componentPath)); + byte[] data = ResourceIOUtils.inputStream2Bytes(inputStream); + WorkContext.getWorkResource().write(StableUtils.pathJoin(ComponentPath.SHARE_PATH.path(), componentPath), data); + } catch (Exception e) { + FineLoggerFactory.getLogger().error("install Component filed" + e.getMessage(), e); + } + } + } + + } + + private static boolean needPreInstallComponent() { + //老用户或者组件库里已有组件,不预装组件 + SnapChat snapChat = SnapChatFactory.createSnapChat(false, SnapChatKeys.COMPONENT); + return !snapChat.hasRead() && !hasComponentInstalled(); + } + + /** + * 判断是否已有组件被安装 + */ + private static boolean hasComponentInstalled() { + String sharePath = ComponentPath.SHARE_PATH.path(); + String[] components = WorkContext.getWorkResource().list(sharePath, new ReuFilter()); + String[] dirs = WorkContext.getWorkResource().list(sharePath, new DirFilter()); + return components != null && ArrayUtils.isNotEmpty(components) + || (dirs != null && ArrayUtils.isNotEmpty(dirs)); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallUtils.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallUtils.java new file mode 100644 index 0000000000..4d297e29d6 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallUtils.java @@ -0,0 +1,150 @@ +package com.fr.design.mainframe.share.util; + +import com.fr.form.share.group.DefaultShareGroup; +import com.fr.form.share.group.DefaultShareGroupManager; +import com.fr.form.share.group.Group; +import com.fr.form.share.group.TempFileOperator; +import com.fr.form.share.utils.ReuxUtils; +import com.fr.form.share.utils.ShareUtils; +import com.fr.io.repository.base.fs.FileSystemRepository; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.ProductConstants; +import com.fr.stable.StableUtils; +import com.fr.stable.project.ProjectConstants; +import org.jetbrains.annotations.Nullable; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: Yuan.Wang + * @Date: 2020/12/21 + */ +public class InstallUtils { + + private static final String DOT = "."; + + /** + * 安装组件包 + */ + public static boolean installReusFile(File chosenFile, long installTime, List list) { + return installReusFile(chosenFile, installTime, list, o -> { + //do nothing + }).installStatus; + } + + /** + * 安装组件包 + */ + public static InstallResult installReusFile(File chosenFile, long installTime, List list, com.fr.design.extra.Process process) { + Group group = createComponentGroup(chosenFile.getName()); + if (group == null) { + return new InstallResult(false, null); + } + int totalFileNum; + int installedFileNum = 0; + try (TempFileOperator tempFilOperator = new TempFileOperator(getUnZipCacheDir())) { + File[] files = unZipReuxsFile(chosenFile, tempFilOperator.getTempFilePath()); + totalFileNum = files.length; + boolean installStatus = true; + for (File file : files) { + boolean success = installReuFile(group, file, installTime); + if (!success) { + list.add(getFilePrefix(chosenFile) + ": " + getFilePrefix(file)); + } + installedFileNum++; + process.process(installedFileNum / (double) totalFileNum); + installStatus &= success; + } + return new InstallResult(installStatus, group); + } catch (Exception e) { + process.process(1.0); + FineLoggerFactory.getLogger().error(e.getMessage(), e); + return new InstallResult(false, group); + } + + } + + /** + * 安装组件 + */ + public static boolean installReuFile(File chosenFile, long installTime, List list) { + Group defaultGroup = DefaultShareGroupManager.getInstance().getGroup(DefaultShareGroup.GROUP_NAME); + if (defaultGroup == null) { + return false; + } + boolean success = installReuFile(defaultGroup, chosenFile, installTime); + if (!success) { + list.add(getFilePrefix(chosenFile)); + } + return success; + } + + @Nullable + private static Group createComponentGroup(String fileName) { + String groupName = fileName.substring(0, fileName.indexOf(DOT + ReuxUtils.REUS_SUFFIX)); + + //有重名分组则加后缀 + if (DefaultShareGroupManager.getInstance().getGroup(groupName) != null) { + int suffix = 1; + while (DefaultShareGroupManager.getInstance().getGroup(groupName + suffix) != null) { + suffix++; + } + groupName = groupName + suffix; + } + + if (!DefaultShareGroupManager.getInstance().createGroup(groupName)) { + return null; + } + return DefaultShareGroupManager.getInstance().getGroup(groupName); + } + + private static boolean installReuFile(Group group, File chosenFile, long installTime) { + try { + if (!group.installModule(chosenFile)) { + return false; + } + ShareUtils.recordInstallTime(chosenFile.getName(), installTime); + return true; + } catch (IOException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + return false; + } + } + + private static File[] unZipReuxsFile(File chosenFile, String tempFilePath) throws IOException { + List files = new ArrayList<>(); + ReuxUtils.unzipRueFile(chosenFile, tempFilePath); + String[] components = FileSystemRepository.getSingleton().list(tempFilePath, s -> s.endsWith(ProjectConstants.REU)); + for (String component : components) { + files.add(new File(StableUtils.pathJoin(tempFilePath, component))); + } + return files.toArray(new File[files.size()]); + } + + private static String getUnZipCacheDir() { + return StableUtils.pathJoin(ProductConstants.getEnvHome(), "plugin_cache", "reu_share_temp"); + } + + private static String getFilePrefix(File file) { + String fileName = file.getName(); + return fileName.contains(DOT) ? fileName.substring(0, fileName.indexOf(DOT)) : fileName; + } + + /** + * 安装的返回结果 + */ + public static class InstallResult { + public final boolean installStatus; + public final Group group; + + public InstallResult(boolean installStatus, Group group) { + this.installStatus = installStatus; + this.group = group; + } + } + + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareComponentUtils.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareComponentUtils.java new file mode 100644 index 0000000000..fe92fc517b --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareComponentUtils.java @@ -0,0 +1,93 @@ +package com.fr.design.mainframe.share.util; + +import com.fr.base.io.IOFile; +import com.fr.base.iofile.attr.ExtendSharableAttrMark; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XCreatorUtils; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.file.HistoryTemplateListCache; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.FormSelection; +import com.fr.design.mainframe.JForm; +import com.fr.design.mainframe.JTemplate; +import com.fr.form.share.SharableWidgetProvider; +import com.fr.form.share.bean.ShareLayoutWidget; +import com.fr.form.share.constants.ComponentPath; +import com.fr.form.ui.Widget; +import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; +import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; +import com.fr.workspace.WorkContext; +import org.jetbrains.annotations.NotNull; + +import java.awt.Dimension; +import java.awt.Rectangle; + +/** + * Coder: zack + * Date: 2016/9/20 + * Time: 12:00 + */ +public class ShareComponentUtils { + + @NotNull + public static XCreator createXCreator(Widget creatorSource, String shareId, SharableWidgetProvider provider) { + + XCreator xCreator; + if (creatorSource instanceof WCardMainBorderLayout) { + xCreator = XCreatorUtils.createXCreator(creatorSource, new Dimension(500, 300)); + } else if (creatorSource instanceof ShareLayoutWidget) { + xCreator = XCreatorUtils.createXCreator(((ShareLayoutWidget) creatorSource).getWidget(), new Dimension(provider.getWidth(), provider.getHeight())); + } else { + xCreator = XCreatorUtils.createXCreator(creatorSource, new Dimension(provider.getWidth(), provider.getHeight())); + } + xCreator.setBackupBound(new Rectangle(provider.getWidth(), provider.getHeight())); + xCreator.setShareId(shareId); + return xCreator; + } + + /** + * 检查readme.txt文件 + */ + public static void checkReadMe() { + String shareDir = ComponentPath.SHARE_PATH.path(); + String readmePath = StableUtils.pathJoin(shareDir, "readme.txt"); + if (WorkContext.getWorkResource().exist(readmePath)) { + return; + } + String msg = Toolkit.i18nText("Fine-Plugin_Component_Share_Read_Me_Tip"); + WorkContext.getWorkResource().write(readmePath, msg.getBytes()); + } + + public static String getWidgetId(Widget widget) { + if (StringUtils.isEmpty(widget.getWidgetID())) { + // 做下兼容处理,之前的插件创建的组件没有对应的widgetId + return widget.getWidgetName(); + } + return widget.getWidgetID(); + } + + public static String getCurrentTemplateID() { + JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + IOFile target = (IOFile) jt.getTarget(); + return target.getTemplateID(); + } + + public static boolean isShareWidget(XCreator xCreator) { + if (xCreator == null) { + return false; + } + if (xCreator.isShared()) { + return true; + } + if (xCreator instanceof XLayoutContainer) { + XLayoutContainer xLayoutContainer = (XLayoutContainer) xCreator; + ExtendSharableAttrMark sharableAttrMark = xLayoutContainer.toData().getWidgetAttrMark(ExtendSharableAttrMark.XML_TAG); + return sharableAttrMark != null && StringUtils.isNotEmpty(sharableAttrMark.getShareId()); + } + return false; + } + + + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareUIUtils.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareUIUtils.java new file mode 100644 index 0000000000..78bab07ad9 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareUIUtils.java @@ -0,0 +1,189 @@ +package com.fr.design.mainframe.share.util; + +import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.DesignerContext; +import com.fr.invoke.Reflect; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.ArrayUtils; +import com.fr.third.net.sf.cglib.proxy.Callback; +import com.fr.third.net.sf.cglib.proxy.CallbackFilter; +import com.fr.third.net.sf.cglib.proxy.Enhancer; +import com.fr.third.net.sf.cglib.proxy.MethodInterceptor; +import com.fr.third.net.sf.cglib.proxy.MethodProxy; +import com.fr.third.net.sf.cglib.proxy.NoOp; +import org.jetbrains.annotations.NotNull; + +import javax.swing.AbstractButton; +import javax.swing.JComponent; +import javax.swing.SwingConstants; +import javax.swing.plaf.ComponentUI; +import java.awt.Graphics; +import java.awt.event.ActionEvent; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; + +/** + * created by Harrison on 2020/04/20 + **/ +public class ShareUIUtils { + + private static final String PAINT_METHOD = "paint"; + + private static final String widthStyle = "%s"; + + /** + * 停止当前线程 xx s + * + * @param limit 限制 + * @throws InterruptedException 中断异常 + */ + public static void wait(int limit) throws InterruptedException { + + long start = System.currentTimeMillis(); + while (System.currentTimeMillis() - start < limit) { + Thread.sleep(50); + } + } + + public static String formatWidthString(String msg, int width) { + + return String.format(widthStyle, width, msg); + } + + public static UILabel createTipsLabel(String msg) { + + String tips = "" + msg + ""; + return new UILabel(tips); + } + + public static UILabel createTopRightUILabel(String msg) { + + UILabel label = new UILabel(msg, SwingConstants.RIGHT); + label.setVerticalAlignment(SwingConstants.TOP); + return label; + } + + public static UILabel createCenterRightUILabel(String msg) { + + UILabel label = new UILabel(msg, SwingConstants.RIGHT); + label.setVerticalAlignment(SwingConstants.CENTER); + return label; + } + + public static UILabel createHyperlinkLabel(String msg) { + + String hyperlink = ("") + msg + ""; + return new UILabel(hyperlink); + } + + public static String convertStateChange(int stateChange) { + + return String.valueOf(stateChange); + } + + public static void simulateAction(AbstractButton button) { + + ActionEvent event = new ActionEvent(button, + ActionEvent.ACTION_PERFORMED, + button.getActionCommand()); + button.dispatchEvent(event); + } + + public static T wrapUI(final ComponentUI newUI, final T component, Object... constructArgs) { + + try { + return warpUI0(newUI, component, constructArgs); + } catch (Exception e) { + //虽然没渲染上,但是不影响使用。 使用 warn 吧 + FineLoggerFactory.getLogger().warn(e.getMessage(), e); + return component; + } + } + + @SuppressWarnings("unchecked") + private static T warpUI0(final ComponentUI newUI, final T component, Object... constructArgs) throws NoSuchMethodException { + + Enhancer enhancer = new Enhancer(); + enhancer.setSuperclass(component.getClass()); + enhancer.setCallbacks(new Callback[]{ + NoOp.INSTANCE, + new MethodInterceptor() { + @Override + public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { + + Object value = methodProxy.invokeSuper(o, objects); + newUI.paint((Graphics) objects[0], component); + return value; + } + } + }); + enhancer.setCallbackFilter(new CallbackFilter() { + @Override + public int accept(Method method) { + return method.getName().equals(PAINT_METHOD) ? 1 : 0; + } + }); + + + Constructor constructor = constructor(component.getClass(), constructArgs); + if (constructArgs.length == 0 || constructor == null) { + return (T) enhancer.create(); + } + return (T) enhancer.create(constructor.getParameterTypes(), constructArgs); + } + + + public static Constructor constructor(Class type, Object... args) { + + Class[] types = argumentTypes(args); + try { + return type.getDeclaredConstructor(types); + } catch (NoSuchMethodException e) { + for (Constructor constructor : type.getDeclaredConstructors()) { + if (match(constructor.getParameterTypes(), types)) { + return constructor; + } + } + } + return null; + } + + public static void showErrorMessageDialog(String message) { + FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), + message, + Toolkit.i18nText("Fine-Plugin_Component_Dialog_Message"), + FineJOptionPane.ERROR_MESSAGE); + } + + private static boolean match(Class[] declaredTypes, Class[] actualTypes) { + if (declaredTypes.length == actualTypes.length) { + for (int i = 0; i < actualTypes.length; i++) { + if (Reflect.wrapper(declaredTypes[i]).isAssignableFrom(Reflect.wrapper(actualTypes[i]))) { + continue; + } + return false; + } + return true; + } else { + return false; + } + } + + @NotNull + private static Class[] argumentTypes(Object[] constructArgs) { + + if (ArrayUtils.isEmpty(constructArgs)) { + return new Class[0]; + } + int length = constructArgs.length; + Class[] classes = new Class[length]; + for (int i = 0; i < length; i++) { + classes[i] = constructArgs[i].getClass(); + } + return classes; + } + + +} diff --git a/designer-form/src/test/java/com/fr/design/mainframe/ShareWidgetButtonTest.java b/designer-form/src/test/java/com/fr/design/mainframe/ShareWidgetButtonTest.java deleted file mode 100644 index 50f8afc189..0000000000 --- a/designer-form/src/test/java/com/fr/design/mainframe/ShareWidgetButtonTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.fr.design.mainframe; - -import com.fr.chart.chartattr.ChartCollection; -import com.fr.design.designer.creator.XCreator; -import com.fr.form.share.SharableWidgetProvider; -import com.fr.form.ui.ChartEditor; -import com.fr.general.ImageWithSuffix; -import com.fr.invoke.Reflect; -import org.easymock.EasyMock; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.powermock.core.classloader.annotations.PowerMockIgnore; -import org.powermock.modules.junit4.PowerMockRunner; - -@RunWith(PowerMockRunner.class) -@PowerMockIgnore({"com.fr.jvm.assist.*", "javax.swing.*"}) -public class ShareWidgetButtonTest { - - @Test - public void testCreateXCreator() throws Exception { - - SharableWidgetProvider provider = EasyMock.mock(SharableWidgetProvider.class); - EasyMock.expect(provider.getWidth()).andReturn(300).anyTimes(); - EasyMock.expect(provider.getHeight()).andReturn(400).anyTimes(); - EasyMock.expect(provider.getName()).andReturn("test-drag").anyTimes(); - EasyMock.expect(provider.getCover()).andReturn(new ImageWithSuffix("utf-8")).anyTimes(); - EasyMock.replay(provider); - - ShareWidgetButton.ShareWidgetUI ui = new ShareWidgetButton.ShareWidgetUI(); - - ChartEditor editor = new ChartEditor(); - Reflect.on(editor).set("chartCollection", new ChartCollection()); - XCreator xCreator = ui.createXCreator(editor, "333", provider); - Assert.assertEquals(300, xCreator.getWidth()); - Assert.assertEquals(400, xCreator.getHeight()); - } -} \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/design/share/effect/BaseEffectItem.java b/designer-realize/src/main/java/com/fr/design/share/effect/BaseEffectItem.java new file mode 100644 index 0000000000..20d562621b --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/effect/BaseEffectItem.java @@ -0,0 +1,115 @@ +package com.fr.design.share.effect; + +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.gui.controlpane.NameableCreator; +import com.fr.design.share.effect.source.SourceNode; +import com.fr.stable.StringUtils; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; + +public class BaseEffectItem implements EffectItem{ + private String name = StringUtils.EMPTY; + private String description = StringUtils.EMPTY; + private NameableCreator creator; + private T object; + private SourceNode sourceNode; + + @Override + public SourceNode getSourceNode() { + return sourceNode; + } + + @Override + public String getConfigPath() { + return getSourceNode().toString(); + } + + public void setSourceNode(SourceNode sourceNode) { + this.sourceNode = sourceNode; + } + + @Override + public String getName() { + return name; + } + + @Override + public void setName(String name) { + this.name = name; + } + + @Override + public String getDescription() { + return description; + } + + @Override + public void setDescription(String description) { + this.description = description; + } + + + @Override + public void save() { + + } + + @Override + public Object getPopulateBean(){ + return getObject(); + } + + @Override + public void updateBean(Object bean) { + + } + + @Override + public T getObject() { + return object; + } + + @Override + public void setObject(T ob) { + this.object = ob; + } + + @Override + public NameableCreator creator() { + return this.creator; + } + + public void setNameableCreator(NameableCreator creator) { + this.creator = creator; + } + + @Override + public BasicBeanPane createPaneByCreators(NameableCreator creator) { + try { + return creator.getUpdatePane().newInstance(); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + @Override + public BasicBeanPane createPaneByCreators(NameableCreator creator, String string) { + Constructor constructor; + try { + constructor = creator.getUpdatePane().getDeclaredConstructor(new Class[]{String.class}); + constructor.setAccessible(true); + return (BasicBeanPane) constructor.newInstance(string); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/effect/ConditionEffectItem.java b/designer-realize/src/main/java/com/fr/design/share/effect/ConditionEffectItem.java new file mode 100644 index 0000000000..ea50960853 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/effect/ConditionEffectItem.java @@ -0,0 +1,86 @@ +package com.fr.design.share.effect; + +import com.fr.chart.chartattr.Plot; +import com.fr.chart.chartglyph.ConditionAttr; +import com.fr.design.ChartTypeInterfaceManager; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.condition.ConditionAttributesPane; +import com.fr.design.gui.controlpane.NameObjectCreator; +import com.fr.design.gui.controlpane.NameableCreator; +import com.fr.design.share.effect.source.SourceNode; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; + +public class ConditionEffectItem extends BaseEffectItem { + private ConditionAttr condition; + private Plot plot; + public ConditionEffectItem(ConditionAttr condition, SourceNode sourceNode, Plot plot) { + this.condition = condition; + this.plot = plot; + this.setSourceNode(sourceNode); + init(); + } + + private void init() { + ConditionAttr object; + try { + object = (ConditionAttr) condition.clone(); + } catch (CloneNotSupportedException e) { + object = new ConditionAttr(); + object.setName(condition.getName()); + object.setCondition(condition.getCondition()); + for (int i = 0; i < condition.getDataSeriesConditionCount(); i++) { + object.addDataSeriesCondition(condition.getDataSeriesCondition(i)); + } + } + setObject(object); + this.setName(condition.getName()); + this.setNameableCreator(new NameObjectCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Condition_Attributes"), ConditionAttr.class, getPlotConditionPane(this.plot))); + } + + private Class getPlotConditionPane(Plot plot) { + return ChartTypeInterfaceManager.getInstance().getPlotConditionPane(plot).getClass(); + } + + @Override + public void setName(String name) { + super.setName(name); + getObject().setName(name); + } + + @Override + public BasicBeanPane createPaneByCreators(NameableCreator creator) { + Constructor constructor = null; + try { + constructor = creator.getUpdatePane().getConstructor(Plot.class); + return constructor.newInstance(this.plot); + + } catch (InstantiationException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + return null; + } + + @Override + public void updateBean(Object bean) { + ConditionAttr conditionAttr = (ConditionAttr) bean; + conditionAttr.setName(this.getName()); + setObject(conditionAttr); + } + + public void save() { + condition.setName(getObject().getName()); + condition.setCondition(getObject().getCondition()); + condition.removeAll(); + for (int i = 0; i < getObject().getDataSeriesConditionCount(); i++) { + condition.addDataSeriesCondition(getObject().getDataSeriesCondition(i)); + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/effect/EffectItem.java b/designer-realize/src/main/java/com/fr/design/share/effect/EffectItem.java new file mode 100644 index 0000000000..33bfe7fe56 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/effect/EffectItem.java @@ -0,0 +1,32 @@ +package com.fr.design.share.effect; + +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.gui.controlpane.NameableCreator; +import com.fr.design.share.effect.source.SourceNode; +import com.fr.stable.Nameable; + +public interface EffectItem extends Nameable { + SourceNode getSourceNode(); + + String getConfigPath(); + + String getDescription(); + + void setDescription(String description); + + T getObject(); + + void setObject(T ob); + + Object getPopulateBean(); + + void save(); + + void updateBean(Object bean); + + NameableCreator creator(); + + BasicBeanPane createPaneByCreators(NameableCreator creator); + + BasicBeanPane createPaneByCreators(NameableCreator creator, String string); +} diff --git a/designer-realize/src/main/java/com/fr/design/share/effect/EffectItemGroup.java b/designer-realize/src/main/java/com/fr/design/share/effect/EffectItemGroup.java new file mode 100644 index 0000000000..923c200d16 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/effect/EffectItemGroup.java @@ -0,0 +1,279 @@ +package com.fr.design.share.effect; + +import com.fr.chart.chartattr.Chart; +import com.fr.chart.chartattr.ChartCollection; +import com.fr.chart.chartattr.Plot; +import com.fr.chart.chartglyph.ConditionCollection; +import com.fr.chartx.attr.ChartProvider; +import com.fr.design.share.effect.source.SourceNode; +import com.fr.design.share.effect.source.SourceNodeUtils; +import com.fr.form.FormElementCaseProvider; +import com.fr.form.event.Listener; +import com.fr.form.ui.ChartEditor; +import com.fr.form.ui.ElementCaseEditor; +import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WTitleLayout; +import com.fr.js.NameJavaScript; +import com.fr.js.NameJavaScriptGroup; +import com.fr.plugin.chart.attr.axis.VanChartAlertValue; +import com.fr.plugin.chart.attr.axis.VanChartAxis; +import com.fr.plugin.chart.attr.plot.VanChartPlot; +import com.fr.plugin.chart.attr.plot.VanChartRectanglePlot; +import com.fr.plugin.chart.custom.VanChartCustomPlot; +import com.fr.report.cell.DefaultTemplateCellElement; +import com.fr.report.cell.cellattr.highlight.DefaultHighlight; +import com.fr.report.cell.cellattr.highlight.HighlightGroup; +import com.fr.report.web.util.ReportEngineEventMapping; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; + +public class EffectItemGroup { + private List conditionEffectItems = new ArrayList(); + private List highlightEffectItems = new ArrayList(); + private List hyperlinkEffectItems = new ArrayList(); + private List listenerEffectItems = new ArrayList(); + private List stackAndAxisConditionEffectItems = new ArrayList(); + private List vanChartAlertValueEffectItems = new ArrayList(); + private List effectItems = new ArrayList(); + private LinkedHashMap> effectItemsMap; + private Widget widget; + + public EffectItemGroup() { + + } + + public EffectItemGroup(Widget widget) { + this.widget = widget; + initListener(widget); + if (widget instanceof WTitleLayout) { + WTitleLayout wTitleLayout = (WTitleLayout) widget; + this.widget = wTitleLayout.getBodyBoundsWidget().getWidget(); + if (this.widget instanceof ElementCaseEditor) { + initElementCase(); + } else if (this.widget instanceof ChartEditor) { + initChartEditor(); + } + } + } + + public Widget getWidget() { + return widget; + } + + private void initListener(Widget widget) { + int listenerSize = widget.getListenerSize(); + for (int index = 0; index < listenerSize; index ++) { + Listener listener = widget.getListener(index); + SourceNode sourceNode = SourceNodeUtils.createSourceNode(widget, null); + String eventName = switchLang(listener.getEventName()) + (index + 1); + this.add(new ListenerEffectItem(listener, sourceNode, eventName)); + } + } + + private String switchLang(String eventName) { + // 在 properties 文件中找到相应的 key 值 + String localeKey = ReportEngineEventMapping.getLocaleName(eventName); + return com.fr.design.i18n.Toolkit.i18nText(localeKey); + } + + private void initElementCase() { + ElementCaseEditor editor = (ElementCaseEditor) this.widget; + FormElementCaseProvider elementCase = editor.getElementCase(); + Iterator cellIterator = elementCase.cellIterator(); + + while(cellIterator.hasNext()) { + DefaultTemplateCellElement cellElement = (DefaultTemplateCellElement) cellIterator.next(); + SourceNode cellSourceNode = SourceNodeUtils.createSourceNode(cellElement, null); + + // 条件属性 + if (cellElement.getHighlightGroup() != null) { + HighlightGroup highlightGroup = cellElement.getHighlightGroup(); + for (int index = 0; index < highlightGroup.size(); index ++) { + DefaultHighlight highlight=(DefaultHighlight) highlightGroup.getHighlight(index); + this.add(new HighlightEffectItem(highlight, cellSourceNode)); + } + } + + // 超链 + if (cellElement.getNameHyperlinkGroup() != null) { + NameJavaScriptGroup nameHyperlinkGroup = cellElement.getNameHyperlinkGroup(); + for (int index = 0; index < nameHyperlinkGroup.size(); index ++) { + NameJavaScript nameJavaScript = nameHyperlinkGroup.getNameHyperlink(index); + this.add(new HyperlinkEffectItem(nameJavaScript, cellSourceNode)); + } + } + + // 图表内部 + Object value = cellElement.getValue(); + if (value instanceof ChartCollection) { + ChartCollection chartCollection = (ChartCollection) value; + for (int index = 0; index < chartCollection.getChartCount(); index++) { + Chart chart= (Chart) chartCollection.getChart(index, ChartProvider.class); + SourceNode chartSourceNode = SourceNodeUtils.createSourceNode(chart.getPlot(), chartCollection.getChartName(index), cellSourceNode); + Plot plot = chart.getPlot(); + initChartPlot(plot, chartSourceNode, false); + } + + } + } + + } + + private void initChartEditor() { + ChartEditor editor = (ChartEditor) this.widget; + ChartCollection chartCollection = (ChartCollection) editor.getChartCollection(); + for (int index = 0; index < chartCollection.getChartCount(); index++) { + Chart chart= (Chart) chartCollection.getChart(index, ChartProvider.class); + SourceNode plotSourceNode = SourceNodeUtils.createSourceNode(chart.getPlot(), chartCollection.getChartName(index), null); + Plot plot = chart.getPlot(); + initChartPlot(plot, plotSourceNode, false); + } + + } + + private void initChartPlot(Plot plot, SourceNode sourceNode, boolean isSubChart) { + if (plot.getConditionCollection() != null) { + // 图表条件属性 + ConditionCollection conditionCollection = plot.getConditionCollection(); + for (int j = 0; j < conditionCollection.getConditionAttrSize(); j ++) { + this.add(new ConditionEffectItem(conditionCollection.getConditionAttr(j), sourceNode, plot)); + } + } + + if (plot.getHotHyperLink() != null) { + // 图表超链 + NameJavaScriptGroup nameHyperlinkGroup = plot.getHotHyperLink(); + for (int j = 0; j < nameHyperlinkGroup.size(); j ++) { + NameJavaScript nameJavaScript = nameHyperlinkGroup.getNameHyperlink(j); + this.add(new HyperlinkEffectItem(nameJavaScript, sourceNode)); + } + } + + if (plot instanceof VanChartRectanglePlot) { + VanChartRectanglePlot rectanglePlot = (VanChartRectanglePlot) plot; + // 堆积和坐标轴 + ConditionCollection stackAndAxisCondition= rectanglePlot.getStackAndAxisCondition(); + + for(int index = 0; index < stackAndAxisCondition.getConditionAttrSize(); index ++) { + this.add(new StackAndAxisConditionEffectItem(stackAndAxisCondition.getConditionAttr(index), sourceNode, (VanChartRectanglePlot) plot)); + } + if (!isSubChart) { + // 警戒线 + List xAxisList = rectanglePlot.getXAxisList(); + List yAxisList = rectanglePlot.getYAxisList(); + for(VanChartAxis axis : xAxisList) { + for(VanChartAlertValue alertValue: axis.getAlertValues()) { + this.add(new VanChartAlertValueEffectItem(alertValue, sourceNode, (VanChartRectanglePlot) plot)); + } + } + for(VanChartAxis axis : yAxisList) { + for(VanChartAlertValue alertValue: axis.getAlertValues()) { + this.add(new VanChartAlertValueEffectItem(alertValue, sourceNode, (VanChartRectanglePlot) plot)); + } + } + } + } + + if (plot instanceof VanChartCustomPlot) { + VanChartCustomPlot customPlot = (VanChartCustomPlot) plot; + List plotList= customPlot.getCustomPlotList(); + for(VanChartPlot innerPlot : plotList) { + initChartPlot(innerPlot, SourceNodeUtils.createSourceNode(innerPlot, sourceNode), true); + } + } + } + + public List getConditionEffectItems() { + return conditionEffectItems; + } + + public List getHighlightEffectItems() { + return highlightEffectItems; + } + + public List getHyperlinkEffectItems() { + return hyperlinkEffectItems; + } + + public List getListenerEffectItems() { + return listenerEffectItems; + } + + public List getStackAndAxisConditionEffectItems() { + return stackAndAxisConditionEffectItems; + } + + public List getVanChartAlertLineEffectItems() { + return vanChartAlertValueEffectItems; + } + + public List getEffectItems() { + return effectItems; + } + + public void add(ConditionEffectItem conditionEffectItem) { + conditionEffectItems.add(conditionEffectItem); + effectItems.add(conditionEffectItem); + } + + public void add(HighlightEffectItem highlightEffectItem) { + highlightEffectItems.add(highlightEffectItem); + effectItems.add(highlightEffectItem); + } + + public void add(HyperlinkEffectItem hyperlinkEffectItem) { + hyperlinkEffectItems.add(hyperlinkEffectItem); + effectItems.add(hyperlinkEffectItem); + } + + public void add(ListenerEffectItem listenerEffectItem) { + listenerEffectItems.add(listenerEffectItem); + effectItems.add(listenerEffectItem); + } + + public void add(StackAndAxisConditionEffectItem stackAndAxisConditionEffectItem) { + stackAndAxisConditionEffectItems.add(stackAndAxisConditionEffectItem); + effectItems.add(stackAndAxisConditionEffectItem); + } + + public void add(VanChartAlertValueEffectItem vanChartAlertLineEffectItem) { + vanChartAlertValueEffectItems.add(vanChartAlertLineEffectItem); + effectItems.add(vanChartAlertLineEffectItem); + } + + public LinkedHashMap> getEffectItemsWithClassify() { + if (effectItemsMap != null) { + return effectItemsMap; + } + effectItemsMap = new LinkedHashMap>(); + + if (listenerEffectItems.size() > 0) { + effectItemsMap.put(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Event"), listenerEffectItems); + } + if (highlightEffectItems.size() > 0 || conditionEffectItems.size() > 0) { + List tmpEffectItems = new ArrayList<>(); + tmpEffectItems.addAll(highlightEffectItems); + tmpEffectItems.addAll(conditionEffectItems); + effectItemsMap.put(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Condition_Attributes"), tmpEffectItems); + } + if (hyperlinkEffectItems.size() > 0) { + effectItemsMap.put(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Hyperlink"), hyperlinkEffectItems); + } + if (vanChartAlertValueEffectItems.size() > 0 || stackAndAxisConditionEffectItems.size() > 0) { + List tmpEffectItems = new ArrayList<>(); + tmpEffectItems.addAll(vanChartAlertValueEffectItems); + tmpEffectItems.addAll(stackAndAxisConditionEffectItems); + effectItemsMap.put(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Other"), tmpEffectItems); + } + return effectItemsMap; + } + + public void save() { + for (EffectItem effectItem : this.effectItems) { + effectItem.save(); + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/effect/HighlightEffectItem.java b/designer-realize/src/main/java/com/fr/design/share/effect/HighlightEffectItem.java new file mode 100644 index 0000000000..806e2e51a8 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/effect/HighlightEffectItem.java @@ -0,0 +1,56 @@ +package com.fr.design.share.effect; + +import com.fr.design.condition.HighLightConditionAttributesPane; +import com.fr.design.gui.controlpane.NameObjectCreator; +import com.fr.design.share.effect.source.SourceNode; +import com.fr.report.cell.cellattr.highlight.DefaultHighlight; + +public class HighlightEffectItem extends BaseEffectItem{ + private DefaultHighlight highlight; + + public HighlightEffectItem(DefaultHighlight highlight, SourceNode sourceNode) { + this.highlight = highlight; + this.setSourceNode(sourceNode); + this.init(); + } + + private void init() { + DefaultHighlight object; + try { + object = (DefaultHighlight) highlight.clone(); + } catch (CloneNotSupportedException e) { + object = new DefaultHighlight(); + object.setName(highlight.getName()); + object.setCondition(highlight.getCondition()); + for (int i = 0; i < highlight.actionCount(); i++) { + object.addHighlightAction(highlight.getHighlightAction(i)); + } + } + setObject(object); + + this.setName(highlight.getName()); + this.setNameableCreator(new NameObjectCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Condition_Attributes"), DefaultHighlight.class, HighLightConditionAttributesPane.class)); + } + + public void setName(String name) { + super.setName(name); + getObject().setName(name); + } + + @Override + public void updateBean(Object bean) { + DefaultHighlight highlight = (DefaultHighlight) bean; + highlight.setName(this.getName()); + setObject(highlight); + } + + @Override + public void save() { + highlight.setCondition(getObject().getCondition()); + highlight.setName(getObject().getName()); + highlight.removeActions(); + for (int i = 0; i < getObject().actionCount(); i++) { + highlight.addHighlightAction(getObject().getHighlightAction(i)); + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/effect/HyperlinkEffectItem.java b/designer-realize/src/main/java/com/fr/design/share/effect/HyperlinkEffectItem.java new file mode 100644 index 0000000000..d7a572664b --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/effect/HyperlinkEffectItem.java @@ -0,0 +1,93 @@ +package com.fr.design.share.effect; + +import com.fr.design.ExtraDesignClassManager; +import com.fr.design.form.javascript.FormEmailPane; +import com.fr.design.fun.HyperlinkProvider; +import com.fr.design.gui.controlpane.NameObjectCreator; +import com.fr.design.gui.controlpane.NameableCreator; +import com.fr.design.module.DesignModuleFactory; +import com.fr.design.share.effect.source.SourceNode; +import com.fr.general.ComparatorUtils; +import com.fr.js.EmailJavaScript; +import com.fr.js.JavaScript; +import com.fr.js.NameJavaScript; +import com.fr.stable.ListMap; + +import java.util.Map; +import java.util.Set; + +public class HyperlinkEffectItem extends BaseEffectItem{ + private NameJavaScript javaScript; + + public HyperlinkEffectItem(NameJavaScript javaScript, SourceNode sourceNode) { + this.javaScript = javaScript; + this.setSourceNode(sourceNode); + this.init(); + } + + private void init() { + NameJavaScript object; + try { + object = (NameJavaScript) javaScript.clone(); + } catch (CloneNotSupportedException e) { + object = new NameJavaScript(javaScript.getName(), javaScript.getJavaScript()); + } + setObject(object); + + this.setName(this.javaScript.getName()); + NameableCreator[] creators = createNameableCreator(); + for (NameableCreator creator : creators) { + if (creator.acceptObject2Populate(javaScript.getJavaScript()) != null) { + this.setNameableCreator(creator); + return; + } + } + } + + public void setName(String name) { + super.setName(name); + getObject().setName(name); + } + + private NameableCreator[] createNameableCreator() { + Map nameCreators = new ListMap<>(); + NameableCreator[] creators = DesignModuleFactory.getHyperlinkGroupType().getHyperlinkCreators(); + for (NameableCreator creator : creators) { + nameCreators.put(creator.menuName(), creator); + } + Set providers = ExtraDesignClassManager.getInstance().getArray(HyperlinkProvider.XML_TAG); + for (HyperlinkProvider provider : providers) { + NameableCreator nc = provider.createHyperlinkCreator(); + nameCreators.put(nc.menuName(), nc); + } + + creators = nameCreators.values().toArray(new NameableCreator[nameCreators.size()]); + for (int i = 0; i < creators.length; i++) { + if (ComparatorUtils.equals(creators[i].menuName(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Email"))) { + creators[i] = new NameObjectCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Email"), EmailJavaScript.class, FormEmailPane.class); + break; + } + } + + return creators; + } + + @Override + public Object getPopulateBean() { + return getObject().getObject(); + } + + @Override + public void updateBean(Object bean) { + JavaScript javaScript = (JavaScript) bean; + getObject().setJavaScript(javaScript); + getObject().setObject(bean); + } + + @Override + public void save() { + javaScript.setName(getObject().getName()); + javaScript.setObject(getObject().getObject()); + javaScript.setJavaScript(getObject().getJavaScript()); + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/effect/ListenerEffectItem.java b/designer-realize/src/main/java/com/fr/design/share/effect/ListenerEffectItem.java new file mode 100644 index 0000000000..38d635424e --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/effect/ListenerEffectItem.java @@ -0,0 +1,41 @@ +package com.fr.design.share.effect; + +import com.fr.design.designer.properties.EventPropertyTable; +import com.fr.design.share.effect.source.SourceNode; +import com.fr.design.widget.EventCreator; +import com.fr.form.event.Listener; +import com.fr.form.ui.Widget; + +public class ListenerEffectItem extends BaseEffectItem { + private Listener listener; + + public ListenerEffectItem(Listener listener, SourceNode sourceNode, String name) { + this.listener = listener; + this.setSourceNode(sourceNode); + this.setName(name); + init(); + } + + private void init() { + Listener object; + try { + object = (Listener) listener.clone(); + } catch (CloneNotSupportedException e) { + object = new Listener(listener.getTargetWidget(), listener.getEventName(), listener.getAction(), listener.isInvokeOnce()); + } + setObject(object); + this.setNameableCreator(new EventCreator(Widget.EVENT_STATECHANGE, EventPropertyTable.WidgetEventListenerUpdatePane.class)); + } + + @Override + public void updateBean(Object bean) { + setObject((Listener) bean); + } + + public void save() { + listener.setEventName(getObject().getEventName()); + listener.setAction(getObject().getAction()); + listener.setInvokeOnce(getObject().isInvokeOnce()); + listener.setTargetWidget(getObject().getTargetWidget()); + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/effect/StackAndAxisConditionEffectItem.java b/designer-realize/src/main/java/com/fr/design/share/effect/StackAndAxisConditionEffectItem.java new file mode 100644 index 0000000000..a4b8804aec --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/effect/StackAndAxisConditionEffectItem.java @@ -0,0 +1,73 @@ +package com.fr.design.share.effect; + +import com.fr.chart.chartglyph.ConditionAttr; +import com.fr.design.share.effect.source.SourceNode; +import com.fr.plugin.chart.attr.DefaultAxisHelper; +import com.fr.plugin.chart.attr.plot.VanChartRectanglePlot; +import com.fr.plugin.chart.base.AttrSeriesStackAndAxis; +import com.fr.van.chart.column.VanChartCustomStackAndAxisConditionPane; +import com.fr.van.chart.designer.style.series.StackedAndAxisNameObjectCreator; + +public class StackAndAxisConditionEffectItem extends BaseEffectItem { + private ConditionAttr condition; + private VanChartRectanglePlot plot; + + public StackAndAxisConditionEffectItem(ConditionAttr condition, SourceNode sourceNode, VanChartRectanglePlot plot) { + this.condition = condition; + this.plot = plot; + this.setSourceNode(sourceNode); + + init(); + } + + private void init() { + setAxisNamesArray(condition); + + ConditionAttr object; + try { + object = (ConditionAttr) condition.clone(); + } catch (CloneNotSupportedException e) { + object = new ConditionAttr(); + object.setName(condition.getName()); + object.setCondition(condition.getCondition()); + for (int i = 0; i < condition.getDataSeriesConditionCount(); i++) { + object.addDataSeriesCondition(condition.getDataSeriesCondition(i)); + } + } + setObject(object); + + this.setName(condition.getName()); + this.setNameableCreator(new StackedAndAxisNameObjectCreator(new AttrSeriesStackAndAxis(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Stack_And_Series"), ConditionAttr.class, VanChartCustomStackAndAxisConditionPane.class)); + } + + @Override + public void setName(String name) { + super.setName(name); + getObject().setName(name); + } + + @Override + public void updateBean(Object bean) { + ConditionAttr conditionAttr = (ConditionAttr) bean; + conditionAttr.setName(getName()); + setAxisNamesArray(conditionAttr); + setObject(conditionAttr); + } + + public void save() { + condition.setName(getObject().getName()); + condition.setCondition(getObject().getCondition()); + condition.removeAll(); + for (int i = 0; i < getObject().getDataSeriesConditionCount(); i++) { + condition.addDataSeriesCondition(getObject().getDataSeriesCondition(i)); + } + } + + private void setAxisNamesArray(ConditionAttr conditionAttr) { + String[] axisXNames = DefaultAxisHelper.getXAxisNames(plot); + String[] axisYNames = DefaultAxisHelper.getYAxisNames(plot); + AttrSeriesStackAndAxis stackAndAxis = (AttrSeriesStackAndAxis) conditionAttr.getExisted(AttrSeriesStackAndAxis.class); + stackAndAxis.setXAxisNamesArray(axisXNames); + stackAndAxis.setYAxisNameArray(axisYNames); + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/effect/VanChartAlertValueEffectItem.java b/designer-realize/src/main/java/com/fr/design/share/effect/VanChartAlertValueEffectItem.java new file mode 100644 index 0000000000..349ec91eb3 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/effect/VanChartAlertValueEffectItem.java @@ -0,0 +1,94 @@ +package com.fr.design.share.effect; + +import com.fr.design.share.effect.source.SourceNode; +import com.fr.plugin.chart.attr.DefaultAxisHelper; +import com.fr.plugin.chart.attr.axis.VanChartAlertValue; +import com.fr.plugin.chart.attr.axis.VanChartAxis; +import com.fr.plugin.chart.attr.plot.VanChartRectanglePlot; +import com.fr.van.chart.designer.style.background.ChartNameObjectCreator; +import com.fr.van.chart.designer.style.background.VanChartAlertValuePane; + +import java.util.List; + +public class VanChartAlertValueEffectItem extends BaseEffectItem { + private VanChartAlertValue alertValue; + private VanChartRectanglePlot plot; + + public VanChartAlertValueEffectItem(VanChartAlertValue alertValue, SourceNode sourceNode, VanChartRectanglePlot plot) { + this.alertValue = alertValue; + this.plot = plot; + this.setSourceNode(sourceNode); + init(); + } + + private void init() { + List xAxisList = plot.getXAxisList(); + List yAxisList = plot.getYAxisList(); + String[] axisNames = DefaultAxisHelper.getAllAxisNames(plot); + for (VanChartAxis axis : xAxisList) { + List values = axis.getAlertValues(); + for (VanChartAlertValue alertValue : values) { + alertValue.setAxisNamesArray(axisNames); + alertValue.setAxisName(plot.getXAxisName(axis)); + } + } + for (VanChartAxis axis : yAxisList) { + List values = axis.getAlertValues(); + for (VanChartAlertValue alertValue : values) { + alertValue.setAxisNamesArray(axisNames); + alertValue.setAxisName(plot.getYAxisName(axis)); + } + } + + VanChartAlertValue object; + try{ + object = (VanChartAlertValue) alertValue.clone(); + }catch (CloneNotSupportedException e) { + object = new VanChartAlertValue(); + object.setAxisNamesArray(alertValue.getAxisNamesArray()); + object.setAxisName(alertValue.getAxisName()); + object.setAlertContentFormula(alertValue.getAlertContentFormula()); + object.setAlertContent(alertValue.getAlertContent()); + object.setAlertPosition(alertValue.getAlertPosition()); + object.setAlertValueFormula(alertValue.getAlertValueFormula()); + object.setAlertFont(alertValue.getAlertFont()); + object.setAlertLineAlpha(alertValue.getAlertLineAlpha()); + object.setAlertPaneSelectName(alertValue.getAlertPaneSelectName()); + object.setLineColor(alertValue.getLineColor()); + object.setLineStyle(alertValue.getLineStyle()); + } + setObject(object); + + this.setName(alertValue.getAlertPaneSelectName()); + this.setNameableCreator(new ChartNameObjectCreator(axisNames, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Alert_Line"), VanChartAlertValue.class, VanChartAlertValuePane.class)); + } + + @Override + public void setName(String name) { + super.setName(name); + getObject().setAlertPaneSelectName(name); + } + + @Override + public void updateBean(Object bean) { + VanChartAlertValue alertValue = (VanChartAlertValue) bean; + alertValue.setAlertPaneSelectName(getName()); + setObject(alertValue); + } + + @Override + public void save() { + VanChartAlertValue object = getObject(); + alertValue.setAxisNamesArray(object.getAxisNamesArray()); + alertValue.setAxisName(object.getAxisName()); + alertValue.setAlertContentFormula(object.getAlertContentFormula()); + alertValue.setAlertContent(object.getAlertContent()); + alertValue.setAlertPosition(object.getAlertPosition()); + alertValue.setAlertValueFormula(object.getAlertValueFormula()); + alertValue.setAlertFont(object.getAlertFont()); + alertValue.setAlertLineAlpha(object.getAlertLineAlpha()); + alertValue.setAlertPaneSelectName(object.getAlertPaneSelectName()); + alertValue.setLineColor(object.getLineColor()); + alertValue.setLineStyle(object.getLineStyle()); + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/effect/source/BaseSourceNode.java b/designer-realize/src/main/java/com/fr/design/share/effect/source/BaseSourceNode.java new file mode 100644 index 0000000000..feac2413bd --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/effect/source/BaseSourceNode.java @@ -0,0 +1,42 @@ +package com.fr.design.share.effect.source; + +public class BaseSourceNode implements SourceNode { + private String path; + private SourceNode parent; + private T target; + + @Override + public String toString() { + if (getParent() != null) { + return getParent().toString() + "-" + path; + } + return path; + } + + @Override + public T getTarget() { + return target; + } + + public void setTarget(T target) { + this.target = target; + } + + @Override + public SourceNode getParent() { + return parent; + } + + @Override + public void setParent(SourceNode parent) { + this.parent = parent; + } + + public void setPath(String path) { + this.path = path; + } + + public String getPath() { + return path; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/effect/source/CellSourceNode.java b/designer-realize/src/main/java/com/fr/design/share/effect/source/CellSourceNode.java new file mode 100644 index 0000000000..52cff52516 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/effect/source/CellSourceNode.java @@ -0,0 +1,21 @@ +package com.fr.design.share.effect.source; + + +import com.fr.report.cell.DefaultTemplateCellElement; + +public class CellSourceNode extends BaseSourceNode { + + public CellSourceNode(DefaultTemplateCellElement cellElement) { + this(cellElement, null); + } + + public CellSourceNode(DefaultTemplateCellElement cellElement, SourceNode parent) { + this(cellElement, cellElement.toString(), parent); + } + + public CellSourceNode(DefaultTemplateCellElement cellElement, String path, SourceNode parent) { + this.setTarget(cellElement); + this.setPath(path); + this.setParent(parent); + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/effect/source/EventSourceNode.java b/designer-realize/src/main/java/com/fr/design/share/effect/source/EventSourceNode.java new file mode 100644 index 0000000000..7f30a2d8ae --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/effect/source/EventSourceNode.java @@ -0,0 +1,25 @@ +package com.fr.design.share.effect.source; + +import com.fr.form.ui.Widget; + +public class EventSourceNode extends BaseSourceNode { + static final private String DEFAULT_PATH = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Event"); + + public EventSourceNode(Widget widget) { + this(widget, DEFAULT_PATH, null); + } + + public EventSourceNode(Widget widget, String path) { + this(widget, path, null); + } + + public EventSourceNode(Widget widget, SourceNode parent) { + this(widget, DEFAULT_PATH, parent); + } + + public EventSourceNode(Widget widget, String path, SourceNode parent) { + this.setTarget(widget); + this.setPath(path); + this.setParent(parent); + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/effect/source/PlotSourceNode.java b/designer-realize/src/main/java/com/fr/design/share/effect/source/PlotSourceNode.java new file mode 100644 index 0000000000..c4698fd240 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/effect/source/PlotSourceNode.java @@ -0,0 +1,31 @@ +package com.fr.design.share.effect.source; + +import com.fr.chart.chartattr.Plot; +import com.fr.design.ChartTypeInterfaceManager; +import com.fr.stable.StringUtils; + +public class PlotSourceNode extends BaseSourceNode { + + public PlotSourceNode(Plot plot) { + this(plot, StringUtils.EMPTY, null); + } + + public PlotSourceNode(Plot plot, SourceNode parent) { + this(plot, StringUtils.EMPTY, parent); + } + + public PlotSourceNode(Plot plot, String chartName) { + this(plot, chartName, null); + } + + public PlotSourceNode(Plot plot, String chartName, SourceNode parent) { + String path = ChartTypeInterfaceManager.getInstance().getName(plot.getPlotID()); + if (StringUtils.isNotEmpty(chartName)) { + path = path + "-" + chartName; + } + this.setPath(path); + this.setTarget(plot); + this.setParent(parent); + } + +} diff --git a/designer-realize/src/main/java/com/fr/design/share/effect/source/SourceNode.java b/designer-realize/src/main/java/com/fr/design/share/effect/source/SourceNode.java new file mode 100644 index 0000000000..7094a69595 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/effect/source/SourceNode.java @@ -0,0 +1,14 @@ +package com.fr.design.share.effect.source; + + + +public interface SourceNode { + String toString(); + + T getTarget(); + + SourceNode getParent(); + + void setParent(SourceNode parent); +} + diff --git a/designer-realize/src/main/java/com/fr/design/share/effect/source/SourceNodeUtils.java b/designer-realize/src/main/java/com/fr/design/share/effect/source/SourceNodeUtils.java new file mode 100644 index 0000000000..9d988710f5 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/effect/source/SourceNodeUtils.java @@ -0,0 +1,34 @@ +package com.fr.design.share.effect.source; + +import com.fr.chart.chartattr.Plot; +import com.fr.form.ui.Widget; +import com.fr.report.cell.DefaultTemplateCellElement; + +public class SourceNodeUtils { + static public SourceNode createSourceNode(Widget widget, SourceNode parent) { + return new EventSourceNode(widget, parent); + } + + static public SourceNode createSourceNode(DefaultTemplateCellElement cellElement, SourceNode parent) { + return new CellSourceNode(cellElement, parent); + } + + + static public SourceNode createSourceNode(Plot plot, SourceNode parent) { + return new PlotSourceNode(plot, parent); + } + + static public SourceNode createSourceNode(Plot plot, String chartName, SourceNode parent) { + return new PlotSourceNode(plot, chartName, parent); + } + + static public SourceNode getCellSourceNode(SourceNode sourceNode) { + if (sourceNode instanceof CellSourceNode) { + return sourceNode; + } + if (sourceNode.getParent() != null) { + return getCellSourceNode(sourceNode.getParent()); + } + return null; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigContentPane.java b/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigContentPane.java new file mode 100644 index 0000000000..8a3406e0f7 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigContentPane.java @@ -0,0 +1,175 @@ +package com.fr.design.share.ui.config; + +import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.layout.VerticalFlowLayout; +import com.fr.design.mainframe.share.ui.base.PlaceholderTextArea; +import com.fr.design.share.effect.EffectItem; +import com.fr.design.share.effect.EffectItemGroup; +import com.fr.design.share.effect.source.SourceNode; +import com.fr.design.share.effect.source.SourceNodeUtils; +import com.fr.design.share.ui.config.table.ExpandEffectTable; +import com.fr.design.share.ui.effect.PreviewPane; +import com.fr.form.ui.Widget; +import com.fr.grid.selection.CellSelection; +import com.fr.locale.InterProviderFactory; +import com.fr.report.cell.DefaultTemplateCellElement; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.JTable; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.event.ComponentEvent; +import java.awt.event.ComponentListener; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class ShareConfigContentPane extends JPanel { + private EffectItemGroup effectItemGroup; + private PreviewPane previewPane; + private String info; + private List expandEffectTables = new ArrayList<>(); + + public ShareConfigContentPane(EffectItemGroup effectItemGroup, String info) { + this.effectItemGroup = effectItemGroup; + this.info = info; + initComponent(); + } + + private void initComponent() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + JPanel leftPane = createLeftPane(); + JPanel rightPane = createRightPane(); + this.add(leftPane, BorderLayout.WEST); + this.add(rightPane, BorderLayout.CENTER); + } + + private JPanel createLeftPane() { + JPanel leftPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + leftPane.add(createPreviewPane(), BorderLayout.NORTH); + leftPane.add(createInfoPane(), BorderLayout.CENTER); + return leftPane; + } + + private JPanel createRightPane() { + JPanel rightPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + rightPane.setBorder(BorderFactory.createEmptyBorder(0, 3, 0, 0)); + rightPane.add(createEffectPane(), BorderLayout.CENTER); + return rightPane; + } + + private JPanel createPreviewPane() { + + JPanel pane= FRGUIPaneFactory.createTitledBorderPane(Toolkit.i18nText(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Preview"))); + previewPane = new PreviewPane(getWidget()); + pane.add(previewPane, BorderLayout.CENTER); + return pane; + } + + private JPanel createInfoPane() { + JPanel infoPane = FRGUIPaneFactory.createTitledBorderPane(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Introduce")); + PlaceholderTextArea textArea = new PlaceholderTextArea(); + textArea.setText(this.info); + textArea.setPlaceholder(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_No_Introduction")); + textArea.setEditable(false); + UIScrollPane scrollPane = new UIScrollPane(textArea); + scrollPane.setPreferredSize(new Dimension(373, 176)); + infoPane.add(scrollPane, BorderLayout.CENTER); + return infoPane; + } + + private JPanel createEffectPane() { + JPanel effectPane = FRGUIPaneFactory.createTitledBorderPane(Toolkit.i18nText(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Effects"))); + JPanel effectContainer = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, VerticalFlowLayout.TOP,0, 0); + + EffectItemGroup effectItemGroup = getEffectItemGroup(); + LinkedHashMap> effectItemsMap = effectItemGroup.getEffectItemsWithClassify(); + + Set>> entrySet = effectItemsMap.entrySet(); + Iterator>> iterator = entrySet.iterator(); + + expandEffectTables.clear(); + while (iterator.hasNext()) { + Map.Entry> entry= iterator.next(); + String title = entry.getKey(); + List effectItems = entry.getValue(); + ExpandEffectTable expandEffectTable= new ExpandEffectTable(effectItems, title); + expandEffectTables.add(expandEffectTable); + JTable table = expandEffectTable.getTable(); + if (previewPane.isElementCaseEditor()) { + table.getSelectionModel().addListSelectionListener(new ListSelectionListener() { + @Override + public void valueChanged(ListSelectionEvent e) { + if (table.getSelectedRow() >= 0) { + EffectItem effectItem= effectItems.get(table.getSelectedRow()); + SourceNode cellSourceNode = SourceNodeUtils.getCellSourceNode(effectItem.getSourceNode()); + if (cellSourceNode != null) { + DefaultTemplateCellElement cellElement = (DefaultTemplateCellElement) cellSourceNode.getTarget(); + previewPane.getElementCasePane().setSelection(new CellSelection(cellElement.getColumn(), cellElement.getRow(), cellElement.getColumnSpan(), cellElement.getRowSpan())); + } + } + } + }); + } + effectContainer.add(expandEffectTable); + + } + + UIScrollPane scrollPane = new UIScrollPane(effectContainer); + scrollPane.setPreferredSize(new Dimension(465, 545)); + scrollPane.getViewport().addComponentListener(new ComponentListener() { + @Override + public void componentResized(ComponentEvent e) { + Component component = e.getComponent(); + if (component != null) { + for(ExpandEffectTable expandEffectTable : expandEffectTables) { + for(Component co : expandEffectTable.getComponents()) { + co.setPreferredSize(new Dimension(component.getWidth(), co.getHeight())); + co.setSize(new Dimension(component.getWidth(), co.getHeight())); + } + } + } + } + @Override + public void componentMoved(ComponentEvent e) { + + } + @Override + public void componentShown(ComponentEvent e) { + + } + @Override + public void componentHidden(ComponentEvent e) { + + } + }); + scrollPane.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0)); + + effectPane.add(scrollPane, BorderLayout.CENTER); + return effectPane; + } + + private Widget getWidget() { + return getEffectItemGroup().getWidget(); + } + + private EffectItemGroup getEffectItemGroup() { + return effectItemGroup; + } + + public void reset() { + if (previewPane.isElementCaseEditor() && (previewPane.getElementCasePane() != null)) { + previewPane.getElementCasePane().setSelection(new CellSelection(0, 0, 0, 0)); + } + } + +} diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigPane.java b/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigPane.java new file mode 100644 index 0000000000..e430686504 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigPane.java @@ -0,0 +1,238 @@ +package com.fr.design.share.ui.config; + +import com.fr.design.constants.UIConstants; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.BasicPane; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.file.HistoryTemplateListCache; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ibutton.UIButtonUI; +import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.layout.VerticalFlowLayout; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.DesignerFrame; +import com.fr.design.mainframe.share.collect.ComponentCollector; +import com.fr.design.mainframe.share.ui.base.PlaceholderTextArea; +import com.fr.design.mainframe.share.util.ShareComponentUtils; +import com.fr.design.share.effect.EffectItemGroup; +import com.fr.design.share.utils.EffectItemUtils; +import com.fr.design.share.utils.ShareDialogUtils; +import com.fr.design.utils.gui.GUIPaintUtils; +import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WTitleLayout; +import com.fr.locale.InterProviderFactory; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.border.Border; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Graphics2D; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.HashMap; +import java.util.List; + +public class ShareConfigPane extends BasicPane { + private static final Dimension DIALOG_SIZE = new Dimension(900, 680); + private static final Border DIALOG_BORDER = BorderFactory.createEmptyBorder(0, 6, 4, 6); + private static final Color EMPTY_TEXT_COLOR = new Color(51, 51, 51, 128); + + private Widget widget; + private List effectItemGroups; + private HashMap quickConfigContentPaneMap = new HashMap(); + + private BasicDialog dialog; + private int selectIndex = 0; + private CardLayout cardLayout; + private JPanel contentPane; + private UILabel nameLabel; + private UIButton preButton; + private UIButton nextButton; + + + + public ShareConfigPane(Widget widget) { + this.widget = widget; + effectItemGroups = EffectItemUtils.getEffectItemGroupsByWidget(widget); + initComponent(); + } + + private void initComponent() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.setBorder(DIALOG_BORDER); + this.setPreferredSize(DIALOG_SIZE); + + if (effectItemGroups.size() > 0) { + this.add(createNaviPane(), BorderLayout.NORTH); + this.add(createContentPane(), BorderLayout.CENTER); + } else { + this.add(createInfoPane(), BorderLayout.WEST); + this.add(createEffectEmptyPane(), BorderLayout.EAST); + } + + } + + private JPanel createNaviPane() { + JPanel naviPane = new JPanel(); + naviPane.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0)); + naviPane.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); + + preButton = new UIButton(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Prev")); + preButton.setPreferredSize(new Dimension(62, 20)); + preButton.setUI(disabledUIButtonUI); + preButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + quickConfigContentPaneMap.get(getSelectWidget().getWidgetName()).reset(); + selectIndex--; + TogglePage(); + } + }); + preButton.setEnabled(hasPreview()); + + nextButton = new UIButton(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Next")); + nextButton.setPreferredSize(new Dimension(62, 20)); + nextButton.setUI(disabledUIButtonUI); + nextButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + quickConfigContentPaneMap.get(getSelectWidget().getWidgetName()).reset(); + selectIndex++; + TogglePage(); + } + }); + nextButton.setEnabled(hasNext()); + + nameLabel = new UILabel(""); + nameLabel.setPreferredSize(new Dimension(nameLabel.getFont().getSize() * 20, 15)); + + naviPane.add(preButton); + naviPane.add(nextButton); + naviPane.add(nameLabel); + + return naviPane; + } + + private JPanel createContentPane() { + contentPane = new JPanel(); + cardLayout = new CardLayout(); + contentPane.setLayout(cardLayout); + addContent(); + return contentPane; + } + + private void addContent() { + ShareConfigContentPane content = new ShareConfigContentPane(getSelectEffectItemGroup(), getDescription()); + contentPane.add(getSelectWidget().getWidgetName(), content); + quickConfigContentPaneMap.put(getSelectWidget().getWidgetName(), content); + updateContent(); + } + + private void updateContent() { + cardLayout.show(contentPane, getSelectWidget().getWidgetName()); + nameLabel.setText(getSelectWidget().getWidgetName()); + nameLabel.setToolTipText(getSelectWidget().getWidgetName()); + } + + private void TogglePage() { + preButton.setEnabled(hasPreview()); + nextButton.setEnabled(hasNext()); + if (quickConfigContentPaneMap.containsKey(getSelectWidget().getWidgetName())) { + updateContent(); + } else { + addContent(); + } + } + + private JPanel createInfoPane() { + JPanel infoPane = FRGUIPaneFactory.createTitledBorderPane(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Introduce")); + PlaceholderTextArea textArea = new PlaceholderTextArea(); + textArea.setText(this.widget.getDescription()); + textArea.setPlaceholder(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_No_Introduction")); + textArea.setEditable(false); + UIScrollPane scrollPane = new UIScrollPane(textArea); + scrollPane.setPreferredSize(new Dimension(373, 176)); + infoPane.add(scrollPane, BorderLayout.CENTER); + return infoPane; + } + + private String getDescription() { + if (this.widget instanceof WTitleLayout) { + return ((WTitleLayout) this.widget).getBodyBoundsWidget().getWidget().getDescription(); + } + return this.widget.getDescription(); + } + + private JPanel createEffectEmptyPane() { + JPanel effectPane = FRGUIPaneFactory.createTitledBorderPane(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Effects")); + effectPane.setLayout(new VerticalFlowLayout(FlowLayout.CENTER,0 , 0)); + effectPane.setPreferredSize(new Dimension(480, 545)); + UILabel label = new UILabel(InterProviderFactory.getProvider().getLocText(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Empty"))); + label.setAlignmentX(Component.CENTER_ALIGNMENT); + label.setPreferredSize(new Dimension(480, 22)); + label.setHorizontalAlignment(UILabel.CENTER); + label.setForeground(EMPTY_TEXT_COLOR); + effectPane.add(label); + return effectPane; + } + + @Override + protected String title4PopupWindow() { + return InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Help_Settings"); + } + + public void show() { + final DesignerFrame designerFrame = DesignerContext.getDesignerFrame(); + dialog = this.showWindowWithCustomSize(designerFrame, null, DIALOG_SIZE); + ShareDialogUtils.getInstance().setConfigDialog(dialog); + dialog.addDialogActionListener(new DialogActionAdapter() { + @Override + public void doOk() { + for(EffectItemGroup effectItemGroup : effectItemGroups) { + effectItemGroup.save(); + } + HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().saveTemplate(); + ComponentCollector.getInstance().setHelpConfigUseInfo(ShareComponentUtils.getCurrentTemplateID(), ShareComponentUtils.getWidgetId(widget)); + } + }); + dialog.setVisible(true); + } + + private boolean hasPreview() { + return selectIndex > 0; + } + + private boolean hasNext() { + return selectIndex < effectItemGroups.size() - 1; + } + + private Widget getSelectWidget() { + return getSelectEffectItemGroup().getWidget(); + } + + private EffectItemGroup getSelectEffectItemGroup() { + return effectItemGroups.get(selectIndex); + } + + private UIButtonUI disabledUIButtonUI = new UIButtonUI() { + protected void doExtraPainting(UIButton b, Graphics2D g2d, int w, int h, String selectedRoles) { + if (!b.isEnabled()) { + GUIPaintUtils.fillPaint(g2d, 0, 0, w, h, b.isRoundBorder(), b.getRectDirection(), new Color(240, 240, 241), UIConstants.ARC); + } else if (isPressed(b) && b.isPressedPainted()) { + GUIPaintUtils.fillPressed(g2d, 0, 0, w, h, b.isRoundBorder(), b.getRectDirection(), b.isDoneAuthorityEdited(selectedRoles)); + } else if (isRollOver(b)) { + GUIPaintUtils.fillRollOver(g2d, 0, 0, w, h, b.isRoundBorder(), b.getRectDirection(), b.isDoneAuthorityEdited(selectedRoles), b.isPressedPainted()); + } else if (b.isNormalPainted()) { + GUIPaintUtils.fillNormal(g2d, 0, 0, w, h, b.isRoundBorder(), b.getRectDirection(), b.isDoneAuthorityEdited(selectedRoles), b.isPressedPainted()); + } + } + }; + +} diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/config/table/ConfigItemRender.java b/designer-realize/src/main/java/com/fr/design/share/ui/config/table/ConfigItemRender.java new file mode 100644 index 0000000000..8a34f705c1 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/ui/config/table/ConfigItemRender.java @@ -0,0 +1,86 @@ +package com.fr.design.share.ui.config.table; + +import com.fr.base.BaseUtils; +import com.fr.locale.InterProviderFactory; +import com.fr.stable.StringUtils; + +import javax.swing.BorderFactory; +import javax.swing.Icon; +import javax.swing.JComponent; +import javax.swing.JTable; +import javax.swing.border.Border; +import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Color; +import java.awt.Component; +import java.awt.Cursor; + +public class ConfigItemRender extends DefaultTableCellRenderer { + static final private Color PLACEHOLDER_COLOR = new Color(193, 193, 193); + static final private Color NO_EDITABLE_BG = new Color(240, 240, 241); + + static final private Border DEFAULT_NO_FOCUS_BORDER = BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(1, 5, 1, 5), BorderFactory.createEmptyBorder(0, 4, 0, 4)); + static final private Border SELECTED_BORDER = BorderFactory.createLineBorder(new Color(160,190,240)); + + private final Icon editIcon = BaseUtils.readIcon("com/fr/base/images/share/edit.png"); + + public ConfigItemRender() { + super(); + setBorder(DEFAULT_NO_FOCUS_BORDER); + } + + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + setText(StringUtils.EMPTY); + setToolTipText(null); + setBorder(DEFAULT_NO_FOCUS_BORDER); + setBackground(null); + setForeground(null); + setIcon(null); + setAlignmentX(JComponent.LEFT_ALIGNMENT); + + if (column == 2) { + setIcon(editIcon); + setAlignmentX(JComponent.CENTER_ALIGNMENT); + return this; + } + + if (value == null) { + return this; + } + + if (StringUtils.isNotEmpty(value.toString())) { + setValue(value); + } + setForeground(Color.black); + + if (column == 1) { + if (!table.isCellEditable(row, column)) { + setForeground(PLACEHOLDER_COLOR); + setBackground(NO_EDITABLE_BG); + setToolTipText(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Not_Support_Rename")); + } + if (StringUtils.isEmpty(value.toString())) { + setValue(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Need_Rename")); + setForeground(PLACEHOLDER_COLOR); + } + } + + if (table.getSelectedRow() == row && table.getSelectedColumn() == column && table.isCellEditable(row, column) ) { + setBorder(SELECTED_BORDER); + setBackground(null); + table.setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR)); + } else { + if (isSelected) { + setBackground(table.getSelectionBackground()); + } + table.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } + + return this; + } + + + public void setValue(Object value) { + super.setValue(value); + setToolTipText((value == null) ? null : value.toString()); + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/config/table/ConfigTableModel.java b/designer-realize/src/main/java/com/fr/design/share/ui/config/table/ConfigTableModel.java new file mode 100644 index 0000000000..29fe8e125b --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/ui/config/table/ConfigTableModel.java @@ -0,0 +1,70 @@ +package com.fr.design.share.ui.config.table; + +import com.fr.design.share.effect.EffectItem; +import com.fr.design.share.effect.ListenerEffectItem; + +import javax.swing.table.AbstractTableModel; +import java.util.List; + +public class ConfigTableModel extends AbstractTableModel { + private Object[] columnNames; + private List effectItems; + + public ConfigTableModel(List effectItems, Object[] columnNames) { + this.effectItems = effectItems; + this.columnNames = columnNames; + } + @Override + public int getRowCount() { + return this.effectItems.size(); + } + + @Override + public int getColumnCount() { + return this.columnNames.length; + } + + @Override + public String getColumnName(int columnIndex) { + if (columnNames == null) { + return null; + } + return columnNames[columnIndex].toString(); + } + + @Override + public Class getColumnClass(int columnIndex) { + return ConfigTableModel.class; + } + + @Override + public boolean isCellEditable(int rowIndex, int columnIndex) { + EffectItem effectItem = effectItems.get(rowIndex); + return columnIndex == 1 && !(effectItem instanceof ListenerEffectItem); + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + if (rowIndex >= getRowCount() || columnIndex >= getColumnCount()) { + return null; + } + EffectItem effectItem = effectItems.get(rowIndex); + if (columnIndex == 0) { + return effectItem.getConfigPath(); + } else if (columnIndex == 1) { + return effectItem.getName(); + } + return null; + } + + @Override + public void setValueAt(Object aValue, int rowIndex, int columnIndex) { + if (rowIndex >= effectItems.size() || columnIndex >= getColumnCount()) { + return; + } + EffectItem effectItem = effectItems.get(rowIndex); + if (columnIndex == 1) { + effectItem.setName(aValue.toString()); + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/config/table/ExpandEffectTable.java b/designer-realize/src/main/java/com/fr/design/share/ui/config/table/ExpandEffectTable.java new file mode 100644 index 0000000000..9ba6be0cf3 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/ui/config/table/ExpandEffectTable.java @@ -0,0 +1,163 @@ +package com.fr.design.share.ui.config.table; + +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.layout.VerticalFlowLayout; +import com.fr.design.share.effect.EffectItem; +import com.fr.design.share.ui.effect.EffectControlUpdatePane; +import com.fr.design.share.ui.effect.EffectPopupEditDialog; +import com.fr.design.share.ui.table.EffectItemEditor; +import com.fr.design.share.utils.ShareDialogUtils; +import com.fr.general.IOUtils; +import com.fr.locale.InterProviderFactory; + +import javax.swing.BorderFactory; +import javax.swing.Icon; +import javax.swing.JPanel; +import javax.swing.JTable; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Toolkit; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseMotionAdapter; +import java.util.List; + +public class ExpandEffectTable extends JPanel { + private static final Icon downIcon = IOUtils.readIcon("com/fr/base/images/share/arrow_down.png"); + private static final Icon rightIcon = IOUtils.readIcon("com/fr/base/images/share/arrow_left.png"); + private static final int WIDTH = 460; + private List effectItems; + private String title; + private boolean expand; + private UILabel arrow; + private JPanel contentPane; + private EffectPopupEditDialog effectPopupEditDialog; + private EffectControlUpdatePane effectControlUpdatePane; + private JTable table; + + public ExpandEffectTable(List effectItems, String title) { + this.effectItems = effectItems; + this.title = title; + + initComponent(); + } + + private void initComponent() { + VerticalFlowLayout layout = new VerticalFlowLayout(VerticalFlowLayout.TOP, 0, 4); + this.setLayout(layout); + this.expand = true; + + JPanel headerPane = createHeader(); + contentPane = createContent(); + + this.add(headerPane); + this.add(contentPane); + + this.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + setExpand(!expand); + } + }); + } + + private JPanel createHeader() { + JPanel headerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + headerPane.setPreferredSize(new Dimension(WIDTH, 24)); + headerPane.setBackground(new Color(232,232,232)); + UILabel headerTitle = new UILabel(this.title); + headerTitle.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0)); + + arrow = new UILabel(downIcon); + arrow.setOpaque(false); + arrow.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5)); + + headerPane.add(headerTitle, BorderLayout.WEST); + headerPane.add(arrow, BorderLayout.EAST); + return headerPane; + } + + + private JPanel createContent() { + JPanel content = FRGUIPaneFactory.createBorderLayout_S_Pane(); + + // 效果列表 + Object[] columnNames = { + InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_From"), + InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Rename"), + InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Edit") + }; + ConfigTableModel tableModel = new ConfigTableModel(effectItems, columnNames); + table = new JTable(tableModel); + + table.setRowHeight(24); + table.getColumnModel().getColumn(0).setPreferredWidth(180); + table.getColumnModel().getColumn(1).setPreferredWidth(252); + table.getColumnModel().getColumn(2).setPreferredWidth(33); + + table.setDefaultEditor(ConfigTableModel.class, new EffectItemEditor(table)); + table.setDefaultRenderer(ConfigTableModel.class, new ConfigItemRender()); + table.getTableHeader().setResizingAllowed(false); + table.getTableHeader().setReorderingAllowed(false); + table.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + int selectColumn = table.getSelectedColumn(); + if (selectColumn == 2) { + int selectRow = table.getSelectedRow(); + EffectItem selectEffectItem = effectItems.get(selectRow); + + effectControlUpdatePane = EffectControlUpdatePane.newInstance(selectEffectItem); + effectControlUpdatePane.populate(); + effectPopupEditDialog = EffectPopupEditDialog.newInstance(ShareDialogUtils.getInstance().getConfigDialog(), effectControlUpdatePane); + effectPopupEditDialog.setTitle(selectEffectItem.getName()); + Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); + effectPopupEditDialog.setLocation((d.width - effectPopupEditDialog.getSize().width) / 2, (d.height - effectPopupEditDialog.getSize().height) / 2); + effectPopupEditDialog.setVisible(true); + effectPopupEditDialog.addDialogActionListener(new DialogActionAdapter() { + @Override + public void doOk() { + effectControlUpdatePane.update(); + } + }); + } + } + public void mouseExited(MouseEvent e) { + int row = table.rowAtPoint(e.getPoint()); + int col = table.columnAtPoint(e.getPoint()); + if ((e.getPoint().getY() < 0) || row < 0 || col < 0) { + table.clearSelection(); + } + } + }); + table.addMouseMotionListener(new MouseMotionAdapter() { + @Override + public void mouseMoved(MouseEvent e) { + int row = table.rowAtPoint(e.getPoint()); + int col = table.columnAtPoint(e.getPoint()); + table.setRowSelectionInterval(row, row); + table.setColumnSelectionInterval(col, col); + } + }); + content.add(table.getTableHeader(), BorderLayout.NORTH); + content.add(table,BorderLayout.CENTER); + return content; + } + + public void setExpand(boolean isExpand) { + this.expand = isExpand; + arrow.setIcon(isExpand ? downIcon : rightIcon); + contentPane.setVisible(isExpand); + } + + public JTable getTable() { + return table; + } + + public boolean isExpand() { + return expand; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/effect/EffectControlUpdatePane.java b/designer-realize/src/main/java/com/fr/design/share/ui/effect/EffectControlUpdatePane.java new file mode 100644 index 0000000000..46a9de7fb0 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/ui/effect/EffectControlUpdatePane.java @@ -0,0 +1,85 @@ +package com.fr.design.share.ui.effect; + +import com.fr.design.DesignerEnvManager; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.data.tabledata.tabledatapane.GlobalMultiTDTableDataPane; +import com.fr.design.data.tabledata.tabledatapane.GlobalTreeTableDataPane; +import com.fr.design.data.tabledata.tabledatapane.MultiTDTableDataPane; +import com.fr.design.data.tabledata.tabledatapane.TreeTableDataPane; +import com.fr.design.env.DesignerWorkspaceInfo; +import com.fr.design.env.RemoteDesignerWorkspaceInfo; +import com.fr.design.gui.controlpane.NameableCreator; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.share.effect.EffectItem; +import com.fr.general.ComparatorUtils; +import com.fr.log.FineLoggerFactory; + +import javax.swing.JPanel; +import java.awt.BorderLayout; + +public class EffectControlUpdatePane extends JPanel { + private EffectItem effectItem; + private BasicBeanPane updatePane; + + private EffectControlUpdatePane(EffectItem effectItem) { + this.effectItem = effectItem; + initUpdatePane(); + } + + public static EffectControlUpdatePane newInstance(EffectItem effectItem) { + return new EffectControlUpdatePane(effectItem); + } + + private void initUpdatePane() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + NameableCreator creator = effectItem.creator(); + if (creator == null) { + return; + } else { + if (isMulti(creator.getUpdatePane()) || isTree(creator.getUpdatePane())) { + updatePane = effectItem.createPaneByCreators(creator, effectItem.getName()); + } else { + updatePane = effectItem.createPaneByCreators(creator); + } + this.add(updatePane, BorderLayout.CENTER); + } + } + + public void populate() { + try{ + updatePane.populateBean(effectItem.getPopulateBean()); + }catch (Exception e){ + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + + + public boolean isMulti(Class _class) { + return ComparatorUtils.equals(_class, GlobalMultiTDTableDataPane.class) || ComparatorUtils.equals(_class, MultiTDTableDataPane.class); + } + + public boolean isTree(Class _class) { + return ComparatorUtils.equals(_class, GlobalTreeTableDataPane.class) || ComparatorUtils.equals(_class, TreeTableDataPane.class); + } + + public void update() { + BasicBeanPane pane = updatePane; + if (pane != null && pane.isVisible()) { + Object bean = pane.updateBean(); + try { + if (bean instanceof RemoteDesignerWorkspaceInfo) { + DesignerWorkspaceInfo info = DesignerEnvManager.getEnvManager().getWorkspaceInfo(effectItem.getName()); + String remindTime = info.getRemindTime(); + ((RemoteDesignerWorkspaceInfo) bean).setRemindTime(remindTime); + } + }catch (Exception e){ + FineLoggerFactory.getLogger().info("remindTime is not exist"); + } + effectItem.updateBean(bean); + } + } + + public void checkValid() throws Exception { + updatePane.checkValid(); + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/effect/EffectPopupEditDialog.java b/designer-realize/src/main/java/com/fr/design/share/ui/effect/EffectPopupEditDialog.java new file mode 100644 index 0000000000..9abd9ba61c --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/ui/effect/EffectPopupEditDialog.java @@ -0,0 +1,206 @@ +package com.fr.design.share.ui.effect; + +import com.fr.design.constants.UIConstants; +import com.fr.design.dialog.UIDialog; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.stable.StringUtils; + +import javax.swing.BorderFactory; +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JPanel; +import javax.swing.border.EmptyBorder; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Cursor; +import java.awt.Dialog; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Font; +import java.awt.GraphicsEnvironment; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Toolkit; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; + +public class EffectPopupEditDialog extends UIDialog { + private JComponent editPane; + private PopupToolPane popupToolPane; + private UIButton okButton; + private static final int WIDTH = 570; + private static final int HEIGHT = 510; + + public EffectPopupEditDialog(Dialog parent, JComponent pane) { + super(parent); + setUndecorated(true); + pane.setBorder(BorderFactory.createEmptyBorder(20, 10, 10, 10)); + + this.editPane = pane; + JPanel editPaneWrapper = new JPanel(new BorderLayout()); + popupToolPane = new PopupToolPane(this); + editPaneWrapper.add(popupToolPane, BorderLayout.NORTH); + editPaneWrapper.add(editPane, BorderLayout.CENTER); + editPaneWrapper.setBorder(BorderFactory.createLineBorder(UIConstants.POP_DIALOG_BORDER, 1)); + editPaneWrapper.add(this.createControlButtonPane(), BorderLayout.SOUTH); + this.getContentPane().add(editPaneWrapper, BorderLayout.CENTER); + + setSize(WIDTH, HEIGHT); +// pack(); + this.setVisible(false); + } + + public static EffectPopupEditDialog newInstance(Dialog parent, JComponent pane) { + return new EffectPopupEditDialog(parent, pane); + } + + + @Override + public void setTitle(String title) { + popupToolPane.setTitle(title); + } + + + @Override + public void checkValid() throws Exception { + + } + + // 移动弹出编辑面板的工具条 + private class PopupToolPane extends JPanel { + private JDialog parentDialog; // 如果不在对话框中,值为null + private Color originColor; // 初始背景 + private JPanel contentPane; + private UILabel titleLabel; + private Point mouseDownCompCoords; // 存储按下左键的位置,移动对话框时会用到 + + private static final int MIN_X = -150; + private static final int MAX_X_SHIFT = 50; + private static final int MAX_Y_SHIFT = 50; + + private MouseListener mouseListener = new MouseAdapter() { + @Override + public void mouseExited(MouseEvent e) { + setCursor(Cursor.getDefaultCursor()); + if (mouseDownCompCoords == null) { + contentPane.setBackground(originColor); + } + repaint(); + } + + @Override + public void mouseReleased(MouseEvent e) { + mouseDownCompCoords = null; + if (!getBounds().contains(e.getPoint())) { + contentPane.setBackground(originColor); + } + } + + @Override + public void mousePressed(MouseEvent e) { + mouseDownCompCoords = e.getPoint(); + } + }; + + private MouseMotionListener mouseMotionListener = new MouseMotionListener() { + @Override + public void mouseMoved(MouseEvent e) { + setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); + contentPane.setBackground(UIConstants.POPUP_TITLE_BACKGROUND); + repaint(); + } + + @Override + public void mouseDragged(MouseEvent e) { + if (mouseDownCompCoords != null) { + Point currCoords = e.getLocationOnScreen(); + int x = currCoords.x - mouseDownCompCoords.x; + int y = currCoords.y - mouseDownCompCoords.y; + //屏幕可用区域 + Rectangle screen = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds(); + + int minY = screen.y; + int maxX = Toolkit.getDefaultToolkit().getScreenSize().width - MAX_X_SHIFT; + int maxY = Toolkit.getDefaultToolkit().getScreenSize().height - MAX_Y_SHIFT; + if (x < MIN_X) { + x = MIN_X; + } else if (x > maxX) { + x = maxX; + } + if (y < minY) { + y = minY; + } else if (y > maxY) { + y = maxY; + } + // 移动到屏幕边缘时,需要校正位置 + parentDialog.setLocation(x, y); + } + } + }; + + PopupToolPane(JDialog parentDialog) { + this(StringUtils.EMPTY, parentDialog); + } + + PopupToolPane(String title, JDialog parentDialog) { + super(); + this.parentDialog = parentDialog; + originColor = UIConstants.DIALOG_TITLEBAR_BACKGROUND; + + contentPane = new JPanel(); + contentPane.setBackground(originColor); + contentPane.setLayout(new BorderLayout()); + titleLabel = new UILabel(title); + Font font = new Font("SimSun", Font.PLAIN, 12); + titleLabel.setFont(font); + contentPane.add(titleLabel, BorderLayout.WEST); + contentPane.setBorder(new EmptyBorder(5, 14, 6, 0)); + + setLayout(new BorderLayout()); + add(contentPane, BorderLayout.CENTER); + setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, UIConstants.TOOLBAR_BORDER_COLOR)); + + addMouseListener(mouseListener); + addMouseMotionListener(mouseMotionListener); + } + + public void setTitle(String title) { + titleLabel.setText(title); + } + + @Override + public Dimension getPreferredSize() { + return new Dimension(super.getPreferredSize().width, 28); + } + } + + private JPanel createControlButtonPane() { + JPanel controlPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + + JPanel buttonsPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 5)); + controlPane.add(buttonsPane, BorderLayout.EAST); + + //确定 + addOkButton(buttonsPane); + + return controlPane; + } + + private void addOkButton(JPanel buttonsPane) { + okButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_OK")); + okButton.setName(OK_BUTTON); + okButton.setMnemonic('O'); + buttonsPane.add(okButton); + okButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + doOK(); + } + }); + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/effect/PreviewPane.java b/designer-realize/src/main/java/com/fr/design/share/ui/effect/PreviewPane.java new file mode 100644 index 0000000000..68cd025e30 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/ui/effect/PreviewPane.java @@ -0,0 +1,356 @@ +package com.fr.design.share.ui.effect; + +import com.fr.base.BaseUtils; +import com.fr.base.DynamicUnitList; +import com.fr.base.ScreenResolution; +import com.fr.base.chart.BaseChartCollection; +import com.fr.base.chart.chartdata.CallbackEvent; +import com.fr.common.inputevent.InputEventBaseOnOS; +import com.fr.design.cell.bar.DynamicScrollBar; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.file.HistoryTemplateListCache; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.ElementCasePane; +import com.fr.design.mainframe.FormSelection; +import com.fr.design.mainframe.JForm; +import com.fr.design.mainframe.JTemplate; +import com.fr.design.mainframe.form.FormElementCaseDesigner; +import com.fr.design.mainframe.share.ui.base.ChartIcon; +import com.fr.design.utils.DesignUtils; +import com.fr.form.main.Form; +import com.fr.form.ui.ChartEditor; +import com.fr.form.ui.ElementCaseEditor; +import com.fr.form.ui.Widget; +import com.fr.general.IOUtils; +import com.fr.grid.Grid; +import com.fr.grid.GridUtils; +import com.fr.grid.selection.CellSelection; +import com.fr.report.ReportHelper; +import com.fr.report.worksheet.FormElementCase; + +import javax.swing.BorderFactory; +import javax.swing.Icon; +import javax.swing.ImageIcon; +import javax.swing.JPanel; +import javax.swing.JScrollBar; +import javax.swing.SwingConstants; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Image; +import java.awt.Point; +import java.awt.Toolkit; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseMotionAdapter; +import java.awt.event.MouseWheelEvent; +import java.awt.event.MouseWheelListener; +import java.awt.image.BufferedImage; + +public class PreviewPane extends JPanel implements CallbackEvent{ + public static final Cursor SCALE_CURSOR = Toolkit.getDefaultToolkit().createCustomCursor( + IOUtils.readImage("com/fr/base/images/share/scale.png"), + new Point(16, 16), "ScaleCursor"); + private static final Icon PLUS_ICON = BaseUtils.readIcon("com/fr/base/images/share/add.png"); + private static final Icon PLUS_CLICK_ICON = BaseUtils.readIcon("com/fr/base/images/share/add_click.png"); + private static final Icon PLUS_HOVER_ICON = BaseUtils.readIcon("com/fr/base/images/share/add_hover.png"); + private static final Icon PLUS_DISABLED_ICON = BaseUtils.readIcon("com/fr/base/images/share/add_disabled.png"); + private static final Icon MINUS_CLICK_ICON = BaseUtils.readIcon("com/fr/base/images/share/minus_click.png"); + private static final Icon MINUS_HOVER_ICON = BaseUtils.readIcon("com/fr/base/images/share/minus_hover.png"); + private static final Icon MINUS_ICON = BaseUtils.readIcon("com/fr/base/images/share/minus.png"); + private static final Icon MINUS_DISABLED_ICON = BaseUtils.readIcon("com/fr/base/images/share/minus_disabled.png"); + private static final Dimension BUTTON_SIZE = new Dimension(20, 20); + private static final Dimension PREVIEW_SIZE = new Dimension(373, 310); + private static final int MAX = 400; + private static final int HUND = 100; + private static final int MIN = 10; + private static final int DIR = 10; + private static final double MIN_TIME = 0.4; + + private Widget widget; + private UIButton plusButton; + private UIButton minusButton; + private JPanel preview; + private int scaleValue = 100; + private ElementCasePane elementCasePane; + private Image previewImage; + private int resolution; + private Dimension previewSize; + private boolean enabled; + + public PreviewPane(Widget widget) { + this(widget, PREVIEW_SIZE, true); + } + + public PreviewPane(Widget widget, Dimension previewSize, boolean enabled) { + this.widget = widget; + + this.enabled = enabled; + this.previewSize = previewSize; + this.resolution = ScreenResolution.getScreenResolution(); + initComponent(); + } + + + private void initComponent() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + + if (enabled) { + this.add(createTopToolbarPane(), BorderLayout.NORTH); + } else { + this.add(createRightToolbarPane(), BorderLayout.EAST); + } + this.add(createViewPane(), BorderLayout.CENTER); + + } + + private JPanel createTopToolbarPane() { + JPanel toolbarPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); + FlowLayout layout = new FlowLayout(FlowLayout.RIGHT, 10 ,0); + toolbarPane.setLayout(layout); + toolbarPane.setPreferredSize(new Dimension(previewSize.width, 22)); + addScaleButton(toolbarPane); + return toolbarPane; + } + + private JPanel createRightToolbarPane() { + JPanel toolbarPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); + FlowLayout layout = new FlowLayout(FlowLayout.LEFT, 10 ,0); + toolbarPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 0, 0)); + toolbarPane.setLayout(layout); + addScaleButton(toolbarPane); + return toolbarPane; + } + + private void addScaleButton(JPanel toolbarPane) { + if (isElementCaseEditor()) { + plusButton = new UIButton(PLUS_ICON); + plusButton.setDisabledIcon(PLUS_DISABLED_ICON); + plusButton.setPressedIcon(PLUS_CLICK_ICON); + plusButton.setRolloverIcon(PLUS_HOVER_ICON); + plusButton.setPreferredSize(BUTTON_SIZE); + plusButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + addScale(10); + } + }); + + minusButton = new UIButton(MINUS_ICON); + minusButton.setDisabledIcon(MINUS_DISABLED_ICON); + minusButton.setPressedIcon(MINUS_CLICK_ICON); + minusButton.setRolloverIcon(MINUS_HOVER_ICON); + minusButton.setPreferredSize(BUTTON_SIZE); + minusButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + addScale(-10); + } + }); + + toolbarPane.add(minusButton); + toolbarPane.add(plusButton); + } + } + + private JPanel createViewPane() { + preview = FRGUIPaneFactory.createBorderLayout_S_Pane(); + preview.setBorder(BorderFactory.createEmptyBorder(5, 0 , 0 , 0)); + preview.setPreferredSize(this.previewSize); + preview.setSize(previewSize); + + if (isElementCaseEditor()) { + elementCasePreview(); + } else if (isChartEditor()) { + chartPreview(); + } else { + widgetPreview(); + } + + return preview; + } + + private void elementCasePreview() { + ElementCaseEditor editor = (ElementCaseEditor) widget; + FormElementCase elementCase = (FormElementCase) editor.getElementCase(); + FormElementCaseDesigner designer = new FormElementCaseDesigner(elementCase, new Form()); + designer.setForeground(Color.BLACK); + designer.setBackground(new Color(245, 245, 247)); + designer.setFont(DesignUtils.getDefaultGUIFont().applySize(12)); + elementCasePane = designer.getEditingElementCasePane(); + + elementCasePane.setPreferredSize(new Dimension(previewSize.width, getInnerPreviewSize().height)); + elementCasePane.setSelection(new CellSelection(0, 0, 0, 0)); + + Grid grid = elementCasePane.getGrid(); + grid.setEditable(false); + grid.removeMouseWheelListener(grid.getGridMouseAdapter()); + grid.removeMouseMotionListener(grid.getGridMouseAdapter()); + grid.removeMouseListener(grid.getGridMouseAdapter()); + + grid.addMouseWheelListener(new MouseWheelListener() { + @Override + public void mouseWheelMoved(MouseWheelEvent e) { + if (!InputEventBaseOnOS.isControlDown(e)) { + ElementCasePane reportPane = grid.getElementCasePane(); + if (reportPane.isVerticalScrollBarVisible()) { + JScrollBar scrollBar = reportPane.getVerticalScrollBar(); + int maxValue = scrollBar.getModel().getMaximum(); + int newValue = reportPane.getVerticalScrollBar().getValue() + e.getWheelRotation(); + int extendValue = GridUtils.getExtentValue(newValue, elementCase.getRowHeightList_DEC(), grid.getHeight(), getResolution()); + if (extendValue <= maxValue) { + reportPane.getVerticalScrollBar().setValue(newValue); + } + } + } else { + int dir = e.getWheelRotation(); + addScale( - dir * DIR); + grid.setCursor(SCALE_CURSOR); + } + } + }); + + grid.addMouseMotionListener(new MouseMotionAdapter() { + @Override + public void mouseMoved(MouseEvent e) { + grid.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } + }); + + elementCasePane.getGridColumn().setEnabled(false); + elementCasePane.getGridRow().setEnabled(false); + + preview.add(designer, BorderLayout.CENTER); + preview.add(elementCasePane.getHorizontalScrollBar(), BorderLayout.SOUTH); + } + + private Dimension getInnerPreviewSize() { + if (isElementCaseEditor()) { + int width = previewSize.width - (enabled ? elementCasePane.getVerticalScrollBar().getPreferredSize().width : 0); + int height = previewSize.height - (enabled ? elementCasePane.getHorizontalScrollBar().getPreferredSize().height : 0); + return new Dimension(width, height); + } + return previewSize; + } + + private void chartPreview() { + ChartEditor editor = (ChartEditor) widget; + BaseChartCollection chartCollection = editor.getChartCollection(); + ChartIcon chartIcon = new ChartIcon(chartCollection, previewSize.width, previewSize.height); + chartIcon.registerCallBackEvent(PreviewPane.this); + UILabel label = new UILabel(chartIcon); + preview.add(label, BorderLayout.CENTER); + } + + private void widgetPreview(){ + JPanel widgetView = new JPanel(FRGUIPaneFactory.createBorderLayout()); + widgetView.setPreferredSize(previewSize); + widgetView.setBackground(Color.WHITE); + + XCreator xCreator = getWidgetXCreator(); + if (xCreator != null) { + previewImage = new BufferedImage(xCreator.getWidth(), xCreator.getHeight(), BufferedImage.TYPE_INT_RGB); + xCreator.paint(previewImage.getGraphics()); + Icon icon = new ImageIcon(previewImage); + UILabel label = new UILabel(icon); + label.setAlignmentY(SwingConstants.CENTER); + widgetView.add(label, BorderLayout.CENTER); + } + + preview.add(widgetView, BorderLayout.CENTER); + } + + private XCreator getWidgetXCreator() { + JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + FormSelection selection = ((JForm) jt).getFormDesign().getSelectionModel().getSelection(); + XCreator[] xCreators = selection.getSelectedCreators(); + return getWidgetXCreator(xCreators, widget); + } + private XCreator getWidgetXCreator(Component[] components, Widget widget) { + for (Component component : components) { + if (component instanceof XCreator) { + XCreator xCreator = (XCreator) component; + if (xCreator.toData().getWidgetName() == widget.getWidgetName()) { + return xCreator; + } + XCreator subXCreator = getWidgetXCreator(xCreator.getComponents(), widget); + if (subXCreator != null) { + return subXCreator; + } + } + } + return null; + } + + @Override + public void callback() { + this.repaint(); + } + + private void setScale(int resolution) { + //网格线 + if (resolution < ScreenResolution.getScreenResolution() * MIN_TIME) { + elementCasePane.getGrid().setShowGridLine(false); + } else { + elementCasePane.getGrid().setShowGridLine(true); + } + elementCasePane.setResolution(resolution); + elementCasePane.getGrid().getGridMouseAdapter().setResolution(resolution); + elementCasePane.getGrid().setResolution(resolution); + //更新Grid + Grid grid = elementCasePane.getGrid(); + DynamicUnitList rowHeightList = ReportHelper.getRowHeightList(elementCasePane.getEditingElementCase()); + DynamicUnitList columnWidthList = ReportHelper.getColumnWidthList(elementCasePane.getEditingElementCase()); + grid.setVerticalExtent(GridUtils.getExtentValue(0, rowHeightList, grid.getHeight(), resolution)); + grid.setHorizontalExtent(GridUtils.getExtentValue(0, columnWidthList, grid.getWidth(), resolution)); + elementCasePane.getGrid().updateUI(); + //更新Column和Row + ((DynamicScrollBar) elementCasePane.getVerticalScrollBar()).setDpi(resolution); + ((DynamicScrollBar) elementCasePane.getHorizontalScrollBar()).setDpi(resolution); + elementCasePane.getGridColumn().setResolution(resolution); + elementCasePane.getGridColumn().updateUI(); + elementCasePane.getGridRow().setResolution(resolution); + elementCasePane.getGridRow().updateUI(); + elementCasePane.repaint(); + } + + private void addScale(int step) { + scaleValue += step; + scaleValue = fixedScale(scaleValue); + plusButton.setEnabled(scaleValue < MAX); + minusButton.setEnabled(scaleValue > MIN); + setScale(getResolution()); + } + + private int fixedScale(int value) { + if (value < MIN) { + value = MIN; + } + if (value > MAX) { + value = MAX; + } + return value; + } + + private int getResolution() { + return (int) (resolution * scaleValue / HUND); + } + + public boolean isElementCaseEditor() { + return widget instanceof ElementCaseEditor; + } + + public boolean isChartEditor() { + return widget instanceof ChartEditor; + } + + public ElementCasePane getElementCasePane() { + return elementCasePane; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/CoverUploadPane.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/CoverUploadPane.java new file mode 100644 index 0000000000..21656e15dc --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/CoverUploadPane.java @@ -0,0 +1,59 @@ +package com.fr.design.share.ui.generate; + +import com.fr.base.background.ImageBackground; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.share.ui.base.ImageBackgroundPane; +import com.fr.locale.InterProviderFactory; +import com.fr.log.FineLoggerFactory; + +import javax.swing.BorderFactory; +import javax.swing.border.Border; +import javax.swing.border.MatteBorder; +import javax.swing.plaf.ColorUIResource; +import java.awt.BorderLayout; +import java.awt.Image; + +/** + * 上传封面的面板 + * Coder: zack + * Date: 2016/10/11 + * Time: 21:36 + */ +public class CoverUploadPane extends BasicBeanPane { + private static final ColorUIResource BORDER_COLOR = new ColorUIResource(168, 172, 180); + private static final Border DIALOG_BORDER = BorderFactory.createEmptyBorder(0, 6, 4, 6); + private ImageBackgroundPane backgroundPane; + + @Override + protected String title4PopupWindow() { + return InterProviderFactory.getProvider().getLocText("Fine-Plugin_Select_Upload_Cover"); + } + + public CoverUploadPane() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + backgroundPane = new ImageBackgroundPane(); + backgroundPane.setBorder(new MatteBorder(1, 1, 1, 1, BORDER_COLOR)); + this.add(backgroundPane, BorderLayout.CENTER); + this.setBorder(DIALOG_BORDER); + } + + @Override + public void populateBean(Image ob) { + if (ob != null) { + backgroundPane.populate(new ImageBackground(ob)); + } + } + + @Override + public Image updateBean() { + ImageBackground imageBackground = new ImageBackground(); + try { + imageBackground = (ImageBackground) backgroundPane.update(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + //返回原图 + return imageBackground.getImage(); + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/EffectContent.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/EffectContent.java new file mode 100644 index 0000000000..6c3766d7bb --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/EffectContent.java @@ -0,0 +1,169 @@ +package com.fr.design.share.ui.generate; + +import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.share.effect.EffectItem; +import com.fr.design.share.effect.EffectItemGroup; +import com.fr.design.share.ui.effect.PreviewPane; +import com.fr.design.share.ui.effect.EffectControlUpdatePane; +import com.fr.design.share.ui.effect.EffectPopupEditDialog; +import com.fr.design.share.ui.generate.table.EffectItemRender; +import com.fr.design.share.ui.generate.table.EffectTableModel; +import com.fr.design.share.ui.table.EffectItemEditor; +import com.fr.design.share.utils.ShareDialogUtils; +import com.fr.form.ui.Widget; +import com.fr.locale.InterProviderFactory; + +import javax.swing.BorderFactory; +import javax.swing.JComponent; +import javax.swing.JPanel; +import javax.swing.JTable; +import javax.swing.JTree; +import javax.swing.event.TreeSelectionListener; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Toolkit; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseMotionAdapter; +import java.util.List; + +public class EffectContent extends JPanel { + static final private Dimension PREVIEW_SIZE = new Dimension(340, 120); + + private EffectItemGroup effectItemGroup; + private EffectPopupEditDialog effectPopupEditDialog; + private EffectControlUpdatePane effectControlUpdatePane; + + public EffectContent(EffectItemGroup effectItemGroup) { + this.effectItemGroup = effectItemGroup; + this.init(); + } + + private void init() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + + if (getEffectItems().size() > 0) { + // 预览图 + JPanel imageContainer = FRGUIPaneFactory.createLeftFlowZeroGapBorderPane(); + PreviewPane previewPane = new PreviewPane(getWidget(), PREVIEW_SIZE, false); + imageContainer.add(previewPane); + this.add(imageContainer, BorderLayout.NORTH); + + // 效果列表 + Object[] columnNames = {InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_From"), InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Rename")}; + JTable table = new JTable(new EffectTableModel(effectItemGroup, columnNames)); + table.setRowHeight(25); + table.getColumnModel().getColumn(0).setPreferredWidth(235); + table.getColumnModel().getColumn(1).setPreferredWidth(325); + + + table.setDefaultEditor(EffectTableModel.class, new EffectItemEditor(table)); + table.setDefaultRenderer(EffectTableModel.class, new EffectItemRender()); + table.getTableHeader().setResizingAllowed(false); + table.getTableHeader().setReorderingAllowed(false); + table.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + int selectColumn = table.getSelectedColumn(); + if (selectColumn == 0) { + int selectRow = table.getSelectedRow(); + EffectItem selectEffectItem = getEffectItems().get(selectRow); + effectControlUpdatePane = EffectControlUpdatePane.newInstance(selectEffectItem); + effectControlUpdatePane.populate(); + setPaneDisabled(effectControlUpdatePane); + effectPopupEditDialog = EffectPopupEditDialog.newInstance(ShareDialogUtils.getInstance().getShareDialog(), effectControlUpdatePane); + effectPopupEditDialog.setTitle(selectEffectItem.getName()); + Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); + effectPopupEditDialog.setLocation((d.width - effectPopupEditDialog.getSize().width) / 2, (d.height - effectPopupEditDialog.getSize().height) / 2); + effectPopupEditDialog.setVisible(true); + } + } + public void mouseExited(MouseEvent e) { + int tableContentHeight = table.getParent().getHeight() - table.getTableHeader().getHeight(); + if ((e.getPoint().getY() < 0) || (e.getPoint().getY() > tableContentHeight)) { + table.clearSelection(); + } + int row = table.rowAtPoint(e.getPoint()); + int col = table.columnAtPoint(e.getPoint()); + if (row < 0 || col < 0) { + table.clearSelection(); + } + } + }); + table.addMouseMotionListener(new MouseMotionAdapter() { + @Override + public void mouseMoved(MouseEvent e) { + int row = table.rowAtPoint(e.getPoint()); + int col = table.columnAtPoint(e.getPoint()); + table.setRowSelectionInterval(row, row); + table.setColumnSelectionInterval(col, col); + } + }); + +// if (previewPane.isElementCaseEditor()) { +// table.getSelectionModel().addListSelectionListener(new ListSelectionListener() { +// @Override +// public void valueChanged(ListSelectionEvent e) { +// if (table.getSelectedRow() >= 0) { +// EffectItem effectItem= getEffectItems().get(table.getSelectedRow()); +// SourceNode cellSourceNode = SourceNodeUtils.getCellSourceNode(effectItem.getSourceNode()); +// if (cellSourceNode != null) { +// DefaultTemplateCellElement cellElement = (DefaultTemplateCellElement) cellSourceNode.getTarget(); +// previewPane.getElementCasePane().setSelection(new CellSelection(cellElement.getColumn(), cellElement.getRow(), cellElement.getColumnSpan(), cellElement.getRowSpan())); +// } +// } +// } +// }); +// } + + JPanel tableContainer = FRGUIPaneFactory.createBorderLayout_S_Pane(); + tableContainer.setBorder(BorderFactory.createEmptyBorder(10,0,5,0)); + if (getEffectItems().size() > 5) { + UIScrollPane scrollPane = new UIScrollPane(table); + scrollPane.setPreferredSize(new Dimension(550, 160)); + tableContainer.add(scrollPane, BorderLayout.CENTER); + } else { + JPanel tablePane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + tablePane.add(table.getTableHeader(), BorderLayout.NORTH); + tablePane.add(table, BorderLayout.CENTER); + tableContainer.add(tablePane, BorderLayout.CENTER); + } + this.add(tableContainer, BorderLayout.CENTER); + + } + } + + private List getEffectItems() { + return effectItemGroup.getEffectItems(); + } + + private Widget getWidget() { + return effectItemGroup.getWidget(); + } + + private void setPaneDisabled(Component component) { + if (component instanceof UIScrollPane) { + UIScrollPane pane = (UIScrollPane) component; + setPaneDisabled(pane.getViewport().getView()); + return; + } + if (component instanceof JTree) { + JTree tree = (JTree) component; + TreeSelectionListener[] treeSelectionListeners = tree.getTreeSelectionListeners(); + for (TreeSelectionListener treeSelectionListener : treeSelectionListeners) { + tree.removeTreeSelectionListener(treeSelectionListener); + } + return; + } + component.setEnabled(false); + if (component instanceof JComponent) { + Component[] components = ((JComponent) component).getComponents(); + for (Component co : components) { + setPaneDisabled(co); + } + } + } + +} diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/EffectPane.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/EffectPane.java new file mode 100644 index 0000000000..f5ebd5edcd --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/EffectPane.java @@ -0,0 +1,147 @@ +package com.fr.design.share.ui.generate; + +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.share.ui.base.PageableButton; +import com.fr.design.share.effect.EffectItemGroup; +import com.fr.form.ui.Widget; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import javax.swing.plaf.basic.BasicArrowButton; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.ArrayList; +import java.util.List; + + +public class EffectPane extends JPanel { + private List effectItemGroups; + private JPanel contentPane; + private int selectIndex = 0; + private BasicArrowButton previewButton; + private BasicArrowButton nextButton; + private UILabel nameLabel; + private List contents = new ArrayList<>(); + + + public EffectPane(List effectItemGroups) { + this.effectItemGroups = effectItemGroups; + if (effectItemGroups.size() > 0) { + initComponent(); + } + } + + private void initComponent() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + createContentPane(); + + JPanel rightPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + + JPanel headerPane = createHeaderPane(); + contentPane = createContentPane(); + addContent(); + rightPane.add(headerPane, BorderLayout.NORTH); + rightPane.add(contentPane, BorderLayout.CENTER); + this.add(rightPane, BorderLayout.CENTER); + } + + private JPanel createHeaderPane() { + JPanel headerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + JPanel naviPane = createNaviPane(); + headerPane.add(naviPane, BorderLayout.EAST); + return headerPane; + } + + private JPanel createNaviPane() { + JPanel naviPane = new JPanel(FRGUIPaneFactory.createRightFlowLayout()); + nameLabel = new UILabel(""); + nameLabel.setPreferredSize(new Dimension(nameLabel.getFont().getSize() * 20, 15)); + nameLabel.setHorizontalAlignment(SwingConstants.RIGHT); + + previewButton = new PageableButton(SwingConstants.WEST) { + @Override + public Dimension getPreferredSize() { + return new Dimension(15, 15); + } + }; + previewButton.setEnabled(hasPreview()); + previewButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + selectIndex--; + EffectPane.this.TogglePage(); + } + }); + + nextButton = new PageableButton(SwingConstants.EAST) { + @Override + public Dimension getPreferredSize() { + return new Dimension(15, 15); + } + }; + nextButton.setEnabled(hasNext()); + nextButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + selectIndex++; + EffectPane.this.TogglePage(); + } + }); + + naviPane.add(nameLabel); + naviPane.add(previewButton); + naviPane.add(nextButton); + return naviPane; + } + + private JPanel createContentPane() { + JPanel contentPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + contentPane.setBorder(BorderFactory.createEmptyBorder(10, 0 , 0, 0)); + return contentPane; + } + + private void addContent() { + JPanel content = new EffectContent(getSelectEffectItemGroup()); + contents.add(selectIndex, content); + updateContent(); + } + + private Widget getSelectWidget() { + return getSelectEffectItemGroup().getWidget(); + } + + private EffectItemGroup getSelectEffectItemGroup() { + return effectItemGroups.get(selectIndex); + } + + private boolean hasPreview() { + return selectIndex > 0; + } + + private boolean hasNext() { + return selectIndex < effectItemGroups.size() - 1; + } + + private void TogglePage() { + previewButton.setEnabled(hasPreview()); + nextButton.setEnabled(hasNext()); + if (selectIndex < contents.size()) { + updateContent(); + } else { + addContent(); + } + } + + private void updateContent() { + // 添加contentPane + contentPane.removeAll(); + contentPane.add(contents.get(selectIndex)); + nameLabel.setText(getSelectWidget().getWidgetName()); + nameLabel.setToolTipText(getSelectWidget().getWidgetName()); + this.repaint(); + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/PriceExpectPane.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/PriceExpectPane.java new file mode 100644 index 0000000000..6c3188ae12 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/PriceExpectPane.java @@ -0,0 +1,87 @@ +package com.fr.design.share.ui.generate; + +import com.fr.design.gui.ibutton.UIRadioButton; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.stable.StringUtils; + +import javax.swing.ButtonGroup; +import javax.swing.JPanel; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +/** + * Created by kerry on 2020-06-23 + */ +public class PriceExpectPane extends JPanel { + private static final int TEXT_FILED_WIDTH = 160; + private static final int TEXT_FILED_HEIGHT = 20; + private static final String FREE_PRICE = "0"; + private static final String PRICE_FORMAT = "%.2f"; + private UITextField priceFiled; + private UIRadioButton freeRadio; + private UIRadioButton chargeRadio; + + public PriceExpectPane() { + freeRadio = new UIRadioButton(Toolkit.i18nText("Fine-Plugin_Component_Price_Free")); + chargeRadio = new UIRadioButton(Toolkit.i18nText("Fine-Plugin_Component_Price_Charge")); + priceFiled = new UITextField(); + priceFiled.setPlaceholder(Toolkit.i18nText("Fine-Plugin_Component_Price_Charge_Tip")); + ButtonGroup radioGroup = new ButtonGroup(); + radioGroup.add(freeRadio); + radioGroup.add(chargeRadio); + this.setLayout(FRGUIPaneFactory.createBoxFlowLayout()); + this.add(freeRadio); + this.add(chargeRadio); + final JPanel panel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + panel.add(priceFiled); + this.add(panel); + panel.setPreferredSize(new Dimension(TEXT_FILED_WIDTH, TEXT_FILED_HEIGHT)); + panel.setVisible(false); + this.freeRadio.setSelected(true); + freeRadio.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + panel.setVisible(false); + + } + }); + chargeRadio.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + panel.setVisible(true); + } + }); + } + + public String getPrice() { + if (this.freeRadio.isSelected()) { + return FREE_PRICE; + } + float priceNumber = Float.parseFloat(this.priceFiled.getText()); + return String.format(PRICE_FORMAT, priceNumber); + } + + + public boolean check() { + if (freeRadio.isSelected()) { + return true; + } + String price = this.priceFiled.getText(); + if (StringUtils.isEmpty(price)) { + return false; + } + try { + float priceNumber = Float.parseFloat(price); + if (priceNumber <= 0) { + return false; + } + } catch (NumberFormatException e) { + return false; + } + return true; + } + +} diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareGeneratePane.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareGeneratePane.java new file mode 100644 index 0000000000..76cff2046c --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareGeneratePane.java @@ -0,0 +1,309 @@ +package com.fr.design.share.ui.generate; + +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.BasicPane; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.DesignerFrame; +import com.fr.design.mainframe.JTemplate; +import com.fr.design.mainframe.share.Bean.ComponentGenerateInfo; +import com.fr.design.mainframe.share.action.ShareUIAspect; +import com.fr.design.mainframe.share.collect.ComponentCollector; +import com.fr.design.mainframe.share.exception.LackOfValueException; +import com.fr.design.mainframe.share.generate.ComponentGeneratorCenter; +import com.fr.form.share.exception.NetWorkFailedException; +import com.fr.form.share.group.DefaultShareGroup; +import com.fr.design.mainframe.share.util.ShareUIUtils; +import com.fr.design.share.effect.EffectItemGroup; +import com.fr.design.share.utils.EffectItemUtils; +import com.fr.design.share.utils.ShareDialogUtils; +import com.fr.form.share.DefaultSharableWidget; +import com.fr.form.share.config.ComponentReuseConfigManager; +import com.fr.form.share.group.DefaultShareGroupManager; +import com.fr.form.share.group.Group; +import com.fr.form.share.record.ShareWidgetInfoManager; +import com.fr.form.ui.Widget; +import com.fr.locale.InterProviderFactory; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.StringUtils; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.SwingWorker; +import javax.swing.UIManager; +import javax.swing.border.Border; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Dimension; +import java.awt.Image; +import java.awt.Rectangle; +import java.awt.event.ItemEvent; +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static javax.swing.JOptionPane.ERROR_MESSAGE; + +/** + * created by Harrison on 2020/04/20 + **/ +public class ShareGeneratePane extends BasicPane { + + private static final Dimension DIALOG_SIZE = new Dimension(670, 740); + private static final Dimension DIALOG_NORMAL_SIZE = new Dimension(660, 610); + private static final Border DIALOG_BORDER = BorderFactory.createEmptyBorder(0, 6, 4, 6); + + private JPanel mainPane = null; + private ShareMainPane uploadPane = null; + private ShareMainPane simplePane = null; + + private UICheckBox uploadCheckbox = null; + + private BasicDialog dialog; + + private final JTemplate jt; + //报表块控件 + private final Widget shareWidget; + //报表块数据集相关的参数 + private final HashMap paraMap; + + private List effectItemGroups; + + private final ShareUIAspect aspect; + + private final boolean supportUpload = ComponentReuseConfigManager.getInstance().supportUploadReu(); + + public ShareGeneratePane(JTemplate jt, Widget shareWidget, Rectangle rec, Image shareCover, HashMap paraMap, ShareUIAspect aspect) { + this.jt = jt; + this.shareWidget = shareWidget; + effectItemGroups = EffectItemUtils.getEffectItemGroupsByWidget(shareWidget); + this.paraMap = paraMap; + this.aspect = aspect; + + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.setBorder(DIALOG_BORDER); + this.setPreferredSize(getDialogSize()); + + JPanel guidePane = initGuidePane(shareCover, rec); + this.add(guidePane, BorderLayout.CENTER); + } + + private JPanel initGuidePane(Image shareCover, Rectangle rec) { + + JPanel pane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + + this.mainPane = FRGUIPaneFactory.createCardLayout_S_Pane(); + this.simplePane = new ShareMainPane(shareCover, rec, false, effectItemGroups); + this.uploadPane = new ShareMainPane(shareCover, rec, true, effectItemGroups); + //暂时换一下,目前不用上传 + this.mainPane.add(simplePane, ShareUIUtils.convertStateChange(ItemEvent.DESELECTED)); + this.mainPane.add(uploadPane, ShareUIUtils.convertStateChange(ItemEvent.SELECTED)); + + simplePane.getNameField().getDocument().addDocumentListener(new DocumentListener() { + + @Override + public void changedUpdate(DocumentEvent e) { + validInput(); + } + + @Override + public void insertUpdate(DocumentEvent e) { + validInput(); + } + + @Override + public void removeUpdate(DocumentEvent e) { + validInput(); + } + }); + + uploadPane.getNameField().getDocument().addDocumentListener(new DocumentListener() { + + @Override + public void changedUpdate(DocumentEvent e) { + validInput(); + } + + @Override + public void insertUpdate(DocumentEvent e) { + validInput(); + } + + @Override + public void removeUpdate(DocumentEvent e) { + validInput(); + } + }); + + //后面创建,因为需要依赖 mainPane 的创建 + JPanel uploadCheckBox = createUploadCheckBox(); + if (supportUpload) { + pane.add(uploadCheckBox, BorderLayout.NORTH); + } + pane.add(mainPane, BorderLayout.CENTER); + return pane; + } + + private void validInput() { + String userInput = getSelectMainPane().getNameField().getText().trim(); + + if (StringUtils.isEmpty(userInput)) { + dialog.setButtonEnabled(false); + } else { + dialog.setButtonEnabled(true); + } + } + + private JPanel createUploadCheckBox() { + + JPanel panel = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); + String label = Toolkit.i18nText("Fine-Plugin_Upload_Meanwhile"); + this.uploadCheckbox = new UICheckBox(label); + uploadCheckbox.addItemListener(e -> { + int stateChange = e.getStateChange(); + CardLayout cl = (CardLayout) (mainPane.getLayout()); + cl.show(mainPane, ShareUIUtils.convertStateChange(stateChange)); + repaint(); + }); + uploadCheckbox.setSelected(false); + + UILabel tipsLabel = ShareUIUtils.createTipsLabel(Toolkit.i18nText("Fine-Plugin_Upload_Meanwhile_Tips")); + panel.add(uploadCheckbox); + panel.add(tipsLabel); + panel.setPreferredSize(new Dimension(585, 30)); + return panel; + } + + /* show 相关 */ + @Override + public void show() { + final DesignerFrame designerFrame = DesignerContext.getDesignerFrame(); + dialog = this.showWindowWithCustomSize(designerFrame, null, getDialogSize()); + dialog.setButtonEnabled(false); + ShareDialogUtils.getInstance().setShareDialog(dialog); + dialog.addDialogActionListener(new DialogActionAdapter() { + + @Override + public void doOk() { + ShareMainPane mainPane = getSelectMainPane(); + if (doCheck(mainPane)) { + dialog.setVisible(false); + doOk0(mainPane); + } else { + // 抛出,从而防止页面关闭 + throw new LackOfValueException(); + } + } + }); + dialog.setVisible(true); + } + + private ShareMainPane getSelectMainPane() { + + ShareMainPane mainPane; + if (uploadCheckbox.isSelected()) { + mainPane = uploadPane; + } else { + mainPane = simplePane; + } + return mainPane; + } + + private boolean doCheck(ShareMainPane mainPane) { + + return mainPane.check(); + } + + private void doOk0(final ShareMainPane mainPane) { + for(EffectItemGroup effectItemGroup : effectItemGroups) { + effectItemGroup.save(); + } + SwingWorker worker = new SwingWorker() { + @Override + protected Void doInBackground() throws Exception { + DefaultSharableWidget provider = mainPane.generate(); + Group selectGroup = mainPane.getSelectGroup(); + boolean success = false; + try { + success = generateModule(provider); + if (success) { + //先读文件然后移动到指定分组 + Group defaultGroup = DefaultShareGroupManager.getInstance().getGroup(DefaultShareGroup.GROUP_NAME); + if (defaultGroup != null) { + defaultGroup.loadModule(provider.getFileName()); + defaultGroup.moveModule(selectGroup, Stream.of(provider.getId()).collect(Collectors.toList())); + } + collect(provider); + ShareWidgetInfoManager.getInstance().addCompCreateInfo(provider); + } + } catch (NetWorkFailedException exception) { + FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), ShareUIUtils.formatWidthString(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_NetWorkError"), 200), + Toolkit.i18nText("Fine-Design_Basic_Error"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon")); + return null; + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } finally { + //成功失败,都要处理 + aspect.afterOk(); + } + if (!success) { + FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), InterProviderFactory.getProvider().getLocText("FR-Plugin_Share_Module_Failed"), + Toolkit.i18nText("Fine-Design_Basic_Error"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon")); + } + return null; + } + }; + worker.execute(); + } + + private void collect(DefaultSharableWidget provider) { + + ComponentCollector.getInstance().collectGenerateCmpNumber(); + ComponentCollector.getInstance().collectGenerateCmpRecord(provider); + if (uploadCheckbox.isSelected()) { + ComponentCollector.getInstance().collectUploadCmpNumber(); + } + } + + private boolean generateModule(DefaultSharableWidget info) throws Exception { + + DefaultSharableWidget transformInfo = transform(info); + ComponentGenerateInfo generateInfo = new ComponentGenerateInfo(uploadCheckbox.isSelected(), jt, paraMap, shareWidget, transformInfo); + ComponentGeneratorCenter center = new ComponentGeneratorCenter(generateInfo); + return center.generate(); + } + + private DefaultSharableWidget transform(DefaultSharableWidget info) { + + //先屏蔽 + //if (shareWidget instanceof AbstractBorderStyleWidget) { + // AbstractBorderStyleWidget styleWidget = (AbstractBorderStyleWidget) shareWidget; + // ExtendSharableAttrMark attrMark = styleWidget.getWidgetAttrMark(ExtendSharableAttrMark.XML_TAG); + // if (attrMark != null) { + // String shareId = attrMark.getShareId(); + // info.setId(shareId); + // } + //} + return info; + } + + + @Override + protected String title4PopupWindow() { + return InterProviderFactory.getProvider().getLocText("Fine-Plugin_Share_Module_Msg"); + } + + private Dimension getDialogSize() { + return effectItemGroups.size() > 0 ? DIALOG_SIZE : DIALOG_NORMAL_SIZE; + } + + +} diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareLoginLabel.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareLoginLabel.java new file mode 100644 index 0000000000..14ad32415e --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareLoginLabel.java @@ -0,0 +1,50 @@ +package com.fr.design.share.ui.generate; + +import com.fr.config.MarketConfig; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.mainframe.bbs.UserInfoPane; +import com.fr.stable.StringUtils; + +import javax.swing.JPanel; + +/** + * created by Harrison on 2020/04/20 + **/ +public class ShareLoginLabel extends UILabel { + + private JPanel vendorPane; + + private UILabel unLoginLabel; + + private UILabel loginLabel; + + public ShareLoginLabel(JPanel vendorPane, UILabel unLoginLabel, UILabel loginLabel) { + this.vendorPane = vendorPane; + this.unLoginLabel = unLoginLabel; + this.loginLabel = loginLabel; + setVisible(false); + } + + @Override + public void setText(String text) { + super.setText(text); + if (StringUtils.isNotEmpty(text)) { + tryGetLogin(); + } + } + + private void tryGetLogin() { + + String bbsUsername = MarketConfig.getInstance().getBbsUsername(); + if (StringUtils.isNotEmpty(bbsUsername)) { + vendorPane.remove(unLoginLabel); + loginLabel.setText(bbsUsername); + vendorPane.add(loginLabel); + // 像这种 remove , 再 add 的, 需要 validate() + vendorPane.validate(); + vendorPane.repaint(); + //同步刷新页面 + UserInfoPane.getInstance().updateBBSUserInfo(); + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java new file mode 100644 index 0000000000..4302871e8a --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java @@ -0,0 +1,703 @@ +package com.fr.design.share.ui.generate; + +import com.fr.config.MarketConfig; +import com.fr.design.constants.LayoutConstants; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.extra.LoginWebBridge; +import com.fr.design.extra.WebViewDlgHelper; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.icombobox.UIComboBox; +import com.fr.design.gui.icombocheckbox.UIComboCheckBox; +import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.share.constants.ComponentType; +import com.fr.design.mainframe.share.constants.ComponentTypes; +import com.fr.design.mainframe.share.constants.DisplayDevice; +import com.fr.design.mainframe.share.constants.StyleTheme; +import com.fr.design.mainframe.share.ui.base.DictionaryComboCheckBox; +import com.fr.design.mainframe.share.ui.base.LeftWordsTextArea; +import com.fr.design.mainframe.share.ui.base.PlaceholderTextArea; +import com.fr.design.mainframe.share.ui.base.ui.PlaceHolderUI; +import com.fr.design.mainframe.share.util.ShareUIUtils; +import com.fr.design.share.effect.EffectItemGroup; +import com.fr.design.share.utils.ShareDialogUtils; +import com.fr.form.share.DefaultSharableWidget; +import com.fr.form.share.bean.StyleThemeBean; +import com.fr.form.share.constants.ShareComponentConstants; +import com.fr.form.share.group.DefaultShareGroupManager; +import com.fr.form.share.group.Group; +import com.fr.locale.InterProviderFactory; +import com.fr.plugin.context.PluginContext; +import com.fr.plugin.manage.PluginFilter; +import com.fr.plugin.manage.PluginManager; +import com.fr.stable.ArrayUtils; +import com.fr.stable.ProductConstants; +import com.fr.stable.StringUtils; +import com.fr.stable.collections.combination.Pair; +import com.fr.stable.pinyin.PinyinHelper; +import org.jetbrains.annotations.NotNull; + +import javax.swing.BorderFactory; +import javax.swing.Icon; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.UIManager; +import javax.swing.border.MatteBorder; +import javax.swing.text.AttributeSet; +import javax.swing.text.BadLocationException; +import javax.swing.text.PlainDocument; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dialog; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Image; +import java.awt.ItemSelectable; +import java.awt.Rectangle; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.LinkedList; +import java.util.List; +import java.util.UUID; + +import static javax.swing.JOptionPane.ERROR_MESSAGE; + +/** + * created by Harrison on 2020/04/20 + **/ +public class ShareMainPane extends JPanel { + + private static final int COLUMN_ITEM_SIZE = 60; + private static final int COLUMN_FIELD_WIDTH = 560; + private static final int TEXT_FIELD_WIDTH = 160; + private static final int TEXT_FIELD_HEIGHT = 21; + private static final int NAME_MAX_LENGTH = 50; + private static final int GROUP_WIDTH = 160; + private static final int COMBO_WIDTH = 90; + private static final int COMBO_WIDTH_PLUS = 150; + private static final int COMBO_HEIGHT = 20; + private static final int BTN_WIDTH = 70; + private static final int BTN_HEIGHT = 20; + private static final int BASEPANE_VERTICAL_GAP = 2; + + private UIScrollPane mainPane = null; + + private UICheckBox pluginCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Plugin_Component_Make_Relate_To_Plugin")); + private PriceExpectPane priceExpectPane = null; + + private UIComboBox parentClassify = null; + private UIComboBox childClassify = null; + + private UIComboBox localGroup = null; + + private UILabel loginLabel = ShareUIUtils.createCenterRightUILabel(StringUtils.EMPTY); + + private UICheckBox pc = new UICheckBox(Toolkit.i18nText("Fine-Plugin_PC_Device")); + private UICheckBox mobile = new UICheckBox(Toolkit.i18nText("Fine-Plugin_Mobile_Device")); + + private UIComboCheckBox pluginComboCheckBox = null; + + private UIComboBox styleComboBox = null; + + private UITextField nameField = new UITextField(); + + private PlaceholderTextArea content = new LeftWordsTextArea(); + + private PlaceholderTextArea help = new PlaceholderTextArea(); + private UILabel cover; + private UIButton uploadBtn; + //控件的缩略图 + private Image shareCover; + private Rectangle rec; + private boolean upload; + + private List effectItemGroups; + + public ShareMainPane(Image shareCover, Rectangle rec, boolean upload, List effectItemGroups) { + + this.shareCover = shareCover; + this.rec = rec; + this.upload = upload; + this.effectItemGroups = effectItemGroups; + + initCover(shareCover); + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.setBorder(BorderFactory.createEmptyBorder()); + + this.mainPane = createMainPane(upload); + this.add(this.mainPane, BorderLayout.CENTER); + } + + private void initCover(Image shareCover) { + this.cover = new UILabel(getShowIcon(shareCover)); + MatteBorder matteBorder = BorderFactory.createMatteBorder(3, 3, 3, 3, Color.WHITE); + this.cover.setBorder(matteBorder); + this.cover.setHorizontalAlignment(JLabel.CENTER); + } + + private Icon getShowIcon(Image image) { + Image scaleImage = image.getScaledInstance(ShareComponentConstants.SHARE_THUMB_WIDTH, ShareComponentConstants.SHARE_THUMB_HEIGHT, Image.SCALE_SMOOTH); + return new ImageIcon(scaleImage); + } + + + @NotNull + private UIScrollPane createMainPane(boolean upload) { + JPanel mainPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + UIScrollPane scrollPane = new UIScrollPane(mainPane); + JPanel overviewPane = createOverviewPane(upload); + JPanel basePane = createBasePane(upload); + mainPane.add(basePane, BorderLayout.NORTH); + mainPane.add(overviewPane, BorderLayout.CENTER); + return scrollPane; + } + + private JPanel createOverviewPane(boolean upload) { + JPanel componentPane = createComponentOverviewPane(upload); + String title = Toolkit.i18nText("Fine-Plugin_Component_Overview"); + JPanel overviewPane = FRGUIPaneFactory.createTitledBorderPane(title); + overviewPane.add(componentPane, BorderLayout.CENTER); + + return overviewPane; + + } + + private JPanel createBasePane(boolean upload) { + // 提示 + UILabel tipsLabel = ShareUIUtils.createTipsLabel(Toolkit.i18nText("Fine-Plugin_Component_Generate_Help_Tips")); + tipsLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); + // 组件名称 + UILabel nameLabel = ShareUIUtils.createTopRightUILabel(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Name")); + JPanel symbolTextField = createNameFiledPane(); + //显示封面 + UILabel coverLabel = ShareUIUtils.createTopRightUILabel(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Show_Cover")); + JPanel coverImagePane = getCoverImagePane(); + //制作者 + UILabel vendorLabel = ShareUIUtils.createCenterRightUILabel(Toolkit.i18nText("Fine-Plugin_Component_Share_Vendor")); + JPanel vendorPane = createVendorPane(); + //适用终端 + UILabel deviceLabel = ShareUIUtils.createCenterRightUILabel(Toolkit.i18nText("Fine-Plugin_Component_Device")); + JPanel devicePane = createDevicePane(); + //组件分类 + UILabel classifyLabel = ShareUIUtils.createCenterRightUILabel(Toolkit.i18nText("Fine-Plugin_Component_Classify")); + JPanel classifyPane = createClassifyPane(); + + //样式风格 + UILabel styleThemeLabel = ShareUIUtils.createCenterRightUILabel(Toolkit.i18nText("Fine-Plugin_Component_Style_Theme")); + JPanel styleThemePane = createStyleThemePane(); + //本地分组 + UILabel localGroupLabel = ShareUIUtils.createCenterRightUILabel(Toolkit.i18nText("Fine-Plugin_Component_Local_Group")); + JPanel localGroupPane = createLocalGroupPane(); + //使用插件 + UILabel pluginLabel = ShareUIUtils.createCenterRightUILabel(Toolkit.i18nText("Fine-Plugin_Component_Use_Plugin")); + JPanel pluginPane = createPluginPane(); + //期望价格 + UILabel priceLabel = ShareUIUtils.createCenterRightUILabel(Toolkit.i18nText("Fine-Plugin_Component_Expect_Price")); + JPanel pricePane = createPricePane(); + + double p = TableLayout.PREFERRED; + + JPanel innerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + JPanel infoPane; + if (upload) { + Component[][] components = new Component[][]{ + new Component[]{nameLabel, symbolTextField}, + new Component[]{coverLabel, coverImagePane}, + new Component[]{vendorLabel, vendorPane}, + new Component[]{deviceLabel, devicePane}, + new Component[]{classifyLabel, classifyPane}, + new Component[]{styleThemeLabel, styleThemePane}, + new Component[]{pluginLabel, pluginPane}, + new Component[]{priceLabel, pricePane}, + }; + double[] rowSize = {p, p, p, p, p, p, p, p}; + double[] columnSize = {COLUMN_ITEM_SIZE, p}; + int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1},{1, 1}, {1, 1}}; + infoPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.HGAP_SMALL, BASEPANE_VERTICAL_GAP); + } else { + Component[][] components = new Component[][]{ + new Component[]{nameLabel, symbolTextField}, + new Component[]{coverLabel, coverImagePane}, + new Component[]{deviceLabel, devicePane}, + new Component[]{classifyLabel, classifyPane}, + new Component[]{localGroupLabel, localGroupPane} + }; + double[] rowSize = {p, p, p, p, p}; + double[] columnSize = {COLUMN_ITEM_SIZE, p}; + int[][] rowCount = {{1, 1}, {1, 1}, {1, 1},{1, 1}, {1, 1}}; + infoPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.HGAP_SMALL, BASEPANE_VERTICAL_GAP); + } + + String title = Toolkit.i18nText("Fine-Plugin_Component_Base_Info"); + JPanel overviewPane = FRGUIPaneFactory.createTitledBorderPane(title); + + innerPane.add(tipsLabel, BorderLayout.NORTH); + innerPane.add(infoPane, BorderLayout.CENTER); + overviewPane.add(innerPane, BorderLayout.CENTER); + + return overviewPane; + } + + private JPanel createEffectPane(List effectItemGroups) { + return new EffectPane(effectItemGroups); + } + + private JPanel createPricePane() { + + JPanel pane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); + this.priceExpectPane = new PriceExpectPane(); + pane.add(priceExpectPane); + return pane; + } + + private JPanel createStyleThemePane() { + JPanel pane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); + PlaceHolderUI placeHolderUI = new PlaceHolderUI( + Toolkit.i18nText("Fine-Plugin_Component_Style_Theme_Place_Holder")) { + @Override + protected boolean validate(UIComboBox uiComboBox) { + return styleComboBox.getSelectedItem() != null; + } + }; + this.styleComboBox = ShareUIUtils.wrapUI(placeHolderUI, new UIComboBox()); + this.styleComboBox.refreshBoxItems(StyleTheme.getStyleThemeTypeInfo()); + styleComboBox.setPreferredSize(new Dimension(COMBO_WIDTH, COMBO_HEIGHT)); + pane.add(styleComboBox); + return pane; + } + + private JPanel createPluginPane() { + + JPanel pane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); + + List contexts = PluginManager.getContexts(new PluginFilter() { + @Override + public boolean accept(PluginContext pluginContext) { + + return pluginContext.isRunning(); + } + }); + String[] displays = new String[contexts.size()]; + String[] values = new String[contexts.size()]; + Pair[] pairs = new Pair[contexts.size()]; + for (int i = 0; i < contexts.size(); i++) { + PluginContext context = contexts.get(i); + String display = context.getName(); + String value = context.getID() + "-" + context.getVersion(); + pairs[i] = new Pair<>(display, value); + } + //按照顺序展示 + //转换一下中文为拼音 + Arrays.sort(pairs, new Comparator>() { + @Override + public int compare(Pair pair1, Pair pair2) { + String o1 = pair1.getFirst(); + String o2 = pair2.getFirst(); + String pinyin1 = PinyinHelper.getShortPinyin(o1); + String pinyin2 = PinyinHelper.getShortPinyin(o2); + return pinyin1.compareToIgnoreCase(pinyin2); + } + }); + for (int i = 0; i < pairs.length; i++) { + displays[i] = pairs[i].getFirst(); + values[i] = pairs[i].getSecond(); + } + this.pluginComboCheckBox = new DictionaryComboCheckBox(values, displays, "Fine-Plugin_Select_Plugin"); + + pluginComboCheckBox.setPopupMaxDisplayNumber(10); + pluginComboCheckBox.setVisible(false); + + pluginCheckBox.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + int stateChange = e.getStateChange(); + pluginComboCheckBox.setVisible(stateChange == ItemEvent.SELECTED); + pluginComboCheckBox.repaint(); + } + }); + + pane.add(pluginCheckBox); + pane.add(pluginComboCheckBox); + return pane; + } + + private JPanel createClassifyPane() { + + JPanel pane = new JPanel(); + //距离远一点 + pane.setLayout(new FlowLayout(FlowLayout.LEFT, 2, 5)); + this.parentClassify = new UIComboBox(ComponentTypes.values()); + this.parentClassify.setPreferredSize(new Dimension(COMBO_WIDTH, COMBO_HEIGHT)); + + List children = ComponentTypes.CHART.children(-1); + final String placeHolderText = Toolkit.i18nText("Fine-Plugin_Select_Type"); + PlaceHolderUI placeHolderUI = new PlaceHolderUI(placeHolderText) { + @Override + protected boolean validate(UIComboBox comboBox) { + return childClassify.getSelectedItem() != null; + } + }; + this.childClassify = ShareUIUtils.wrapUI(placeHolderUI, new UIComboBox()); + this.childClassify.refreshBoxItems(children); + this.childClassify.setPreferredSize(new Dimension(COMBO_WIDTH_PLUS, COMBO_HEIGHT)); + this.childClassify.setBorder(BorderFactory.createEmptyBorder()); + + parentClassify.addItemListener(new ItemListener() { + + @Override + public void itemStateChanged(ItemEvent e) { + + ItemSelectable itemSelectable = e.getItemSelectable(); + ComponentType selectedItem = (ComponentType) ((UIComboBox) itemSelectable).getSelectedItem(); + if (selectedItem != null) { + int device = displayDevice(); + List children = selectedItem.children(device); + childClassify.clearBoxItems(); + childClassify.refreshBoxItems(children); + } + } + }); + + //设置默认值 + this.parentClassify.setSelectedItem(ComponentTypes.CHART); + + pane.add(parentClassify); + pane.add(childClassify); + return pane; + } + + private JPanel createLocalGroupPane() { + + JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT, 2, 2)); + this.localGroup = new UIComboBox(DefaultShareGroupManager.getInstance().getAllGroup()); + this.localGroup.setPreferredSize(new Dimension(GROUP_WIDTH, COMBO_HEIGHT)); + + panel.add(localGroup); + return panel; + } + + private JPanel createDevicePane() { + + JPanel pane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); + pc.setSelected(true); + mobile.setSelected(true); + + ItemListener parentClassifyRefresh = new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + parentClassify.setSelectedItem(ComponentTypes.CHART); + } + }; + + pc.addItemListener(parentClassifyRefresh); + + mobile.addItemListener(parentClassifyRefresh); + pane.add(pc); + pane.add(mobile); + return pane; + } + + @NotNull + private JPanel createVendorPane() { + + final JPanel vendorPane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); + + String bbsUsername = MarketConfig.getInstance().getBbsUsername(); + if (StringUtils.isEmpty(bbsUsername)) { + UILabel unLoginLabel = ShareUIUtils.createHyperlinkLabel(Toolkit.i18nText("Fine-Plugin_Click_Login")); + + final UILabel hidden = new ShareLoginLabel(vendorPane, unLoginLabel, loginLabel); + + unLoginLabel.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + LoginWebBridge.getHelper().setUILabel(hidden); + Dialog shareDialog = ShareDialogUtils.getInstance().getShareDialog(); + //必须这样创建,不然窗口优先级不对 + WebViewDlgHelper.createLoginDialog(shareDialog); + } + }); + vendorPane.add(unLoginLabel); + } else { + loginLabel.setText(bbsUsername); + vendorPane.add(loginLabel); + } + + return vendorPane; + } + + @NotNull + private JPanel createComponentOverviewPane(boolean upload) { + //功能介绍 + UILabel effectLabel = ShareUIUtils.createTopRightUILabel(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Special_Effects")); + JPanel effectPane = createEffectPane(effectItemGroups); + + content.setDocument( + new LimitedDocument(200, 500) + ); + String contentTip = Toolkit.i18nText("Fine-Plugin_Content_Introduction_Placeholder"); + content.setAutoscrolls(true); + content.setPlaceholder(contentTip); + UIScrollPane contentPane = new UIScrollPane(content); + contentPane.setPreferredSize(new Dimension(COLUMN_FIELD_WIDTH, 50)); + contentPane.setBorder(null); + + help.setDocument( + new LimitedDocument(1000) + ); + String helpTip = Toolkit.i18nText("Fine-Plugin_Help_Msg_Placeholder"); + help.setPlaceholder(helpTip); + UIScrollPane helpPane = new UIScrollPane(help); + helpPane.setPreferredSize(new Dimension(COLUMN_FIELD_WIDTH, 50)); + helpPane.setBorder(null); + + UILabel helpLabel = ShareUIUtils.createTopRightUILabel(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Help_Msg")); + UILabel contentLabel = ShareUIUtils.createTopRightUILabel(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Content_Introduction")); + + + double p = TableLayout.PREFERRED; + int[] row = {1, 1}; + double[] columnSize = {COLUMN_ITEM_SIZE, p}; + List componentList= new LinkedList(); + List rowSizeList = new LinkedList(); + List rowCountList = new LinkedList(); + + if (effectItemGroups.size() > 0 ) { + componentList.add(new Component[]{effectLabel, effectPane}); + } + + componentList.add(new Component[]{helpLabel, helpPane}); + + if (upload) { + componentList.add(new Component[]{contentLabel, contentPane}); + } + for (int i = 0; i < componentList.size(); i++) { + rowSizeList.add(p); + rowCountList.add(row); + } + + return TableLayoutHelper.createGapTableLayoutPane( + componentList.toArray(new Component[componentList.size()][]), + ArrayUtils.toPrimitive(rowSizeList.toArray(new Double[rowSizeList.size()])), + columnSize, + rowCountList.toArray(new int[rowCountList.size()][]), + LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); + } + + private JPanel createNameFiledPane() { + LimitedDocument nameLimited = new LimitedDocument(NAME_MAX_LENGTH); + nameField.setPlaceholder(Toolkit.i18nText("Fine-Plugin_Component_Name_Placeholder")); + nameField.setPreferredSize(new Dimension(TEXT_FIELD_WIDTH, TEXT_FIELD_HEIGHT)); + nameField.setDocument(nameLimited); + JPanel symbolTextFiled = FRGUIPaneFactory.createBorderLayout_S_Pane(); + UILabel validSymbol = new UILabel(" *"); + symbolTextFiled.add(nameField, BorderLayout.CENTER); + symbolTextFiled.add(validSymbol, BorderLayout.EAST); + + return symbolTextFiled; + } + + + private void initUploadCoverBtn() { + + this.uploadBtn = new UIButton(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Select_Upload_Cover")); + this.uploadBtn.setPreferredSize(new Dimension(BTN_WIDTH, BTN_HEIGHT)); + uploadBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + final CoverUploadPane pane = new CoverUploadPane(); + BasicDialog basicDialog = pane.showWindow(DesignerContext.getDesignerFrame(), true); + pane.setSize(BasicDialog.MEDIUM); + pane.populateBean(shareCover); + basicDialog.addDialogActionListener(new DialogActionAdapter() { + @Override + public void doOk() { + shareCover = pane.updateBean(); + cover.setIcon(getShowIcon(shareCover)); + cover.repaint(); + } + }); + basicDialog.setVisible(true); + } + }); + } + + private JPanel getCoverImagePane() { + + initUploadCoverBtn(); + JPanel coverImagePane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); + cover.setPreferredSize(new Dimension(ShareComponentConstants.SHARE_THUMB_WIDTH, ShareComponentConstants.SHARE_THUMB_HEIGHT)); + coverImagePane.add(cover); + + JPanel uploadBtnPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + uploadBtnPane.setPreferredSize(new Dimension(BTN_WIDTH, ShareComponentConstants.SHARE_THUMB_HEIGHT)); + uploadBtnPane.add(uploadBtn, BorderLayout.SOUTH); + coverImagePane.add(uploadBtnPane); + + return coverImagePane; + + } + + /* 校验 */ + + public boolean check() { + + Dialog shareDialog = ShareDialogUtils.getInstance().getShareDialog(); + String name = nameField.getText(); + if (StringUtils.isEmpty(name)) { + FineJOptionPane.showMessageDialog(shareDialog, Toolkit.i18nText("Fine-Plugin_Lack_Name"), + Toolkit.i18nText("Fine-Design_Basic_Error"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon")); + return false; + } + if (upload && StringUtils.isEmpty(content.getText())) { + FineJOptionPane.showMessageDialog(shareDialog, Toolkit.i18nText("Fine-Plugin_Lack_Content"), + Toolkit.i18nText("Fine-Design_Basic_Error"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon")); + return false; + } + if (upload && StringUtils.isEmpty(loginLabel.getText())) { + FineJOptionPane.showMessageDialog(shareDialog, Toolkit.i18nText("Fine-Plugin_Lack_Login"), + Toolkit.i18nText("Fine-Design_Basic_Error"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon")); + return false; + } + if (upload && styleComboBox.getSelectedItem() == null) { + FineJOptionPane.showMessageDialog(shareDialog, Toolkit.i18nText("Fine-Plugin_Component_Style_Theme_Tip"), + Toolkit.i18nText("Fine-Design_Basic_Error"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon")); + return false; + } + if (!pc.isSelected() && !mobile.isSelected()) { + FineJOptionPane.showMessageDialog(shareDialog, Toolkit.i18nText("Fine-Plugin_Lack_Device"), + Toolkit.i18nText("Fine-Design_Basic_Error"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon")); + return false; + } + if (pluginCheckBox.isSelected() && ArrayUtils.isEmpty(pluginComboCheckBox.getSelectedValues())) { + FineJOptionPane.showMessageDialog(shareDialog, Toolkit.i18nText("Fine-Plugin_Lack_Plugins"), + Toolkit.i18nText("Fine-Design_Basic_Error"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon")); + return false; + } + if (!priceExpectPane.check()) { + FineJOptionPane.showMessageDialog(shareDialog, Toolkit.i18nText("Fine-Plugin_Lack_Price"), + Toolkit.i18nText("Fine-Design_Basic_Error"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon")); + return false; + } + return true; + } + + /* 生成 */ + + public DefaultSharableWidget generate() { + + String uuid = UUID.randomUUID().toString(); + DefaultSharableWidget provider = new DefaultSharableWidget(uuid, nameField.getText(), help.getText(), shareCover, rec.width, rec.height); + provider.setDisplayDevice(displayDevice()); + provider.setParentClassify(classify(parentClassify.getSelectedItem())); + provider.setChildClassify(classify(childClassify.getSelectedItem())); + provider.setDesignerVersion(ProductConstants.VERSION); + provider.setVendor(loginLabel.getText()); + provider.setFileName(provider.getNameWithID()); + + if (upload) { + provider.setSummary(content.getText()); + Object selectStyle = styleComboBox.getSelectedItem(); + provider.setStyleTheme(selectStyle == null ? null : ((StyleThemeBean) selectStyle).getId()); + provider.setInvolvePlugins(pluginComboCheckBox.getText()); + provider.setPriceExpect(priceExpectPane.getPrice()); + } + + return provider; + } + + public Group getSelectGroup() { + return (Group) localGroup.getSelectedItem(); + } + + public UITextField getNameField() { + return nameField; + } + + private String classify(Object classify) { + + return classify == null ? StringUtils.EMPTY : classify.toString(); + } + + private int displayDevice() { + + List types = new ArrayList<>(8); + if (pc.isSelected()) { + types.add(DisplayDevice.PC); + } + if (mobile.isSelected()) { + types.add(DisplayDevice.MOBILE); + } + return DisplayDevice.buildDevice(types); + } + + private class LimitedDocument extends PlainDocument { + private static final long serialVersionUID = 1L; + private int maxLength = -1;// 允许的最大长度 + private int errorLength = -1; + private int loop = 5; + private String allowCharAsString = null;// 允许的字符串格式(0123456789) + + public LimitedDocument(int maxLength) { + this(-1, maxLength); + } + + public LimitedDocument(int errorLength, int maxLength) { + super(); + this.errorLength = errorLength; + this.maxLength = maxLength; + } + + @Override + public void insertString(int offset, String str, AttributeSet attrSet) throws BadLocationException { + if (str == null) { + return; + } + if (allowCharAsString != null && str.length() == 1) { + if (allowCharAsString.indexOf(str) == -1) { + java.awt.Toolkit.getDefaultToolkit().beep();// 发出一个警告声 + return;// 不是所要求的字符格式,就直接返回,不进行下面的添加 + } + } + char[] charVal = str.toCharArray(); + String strOldValue = getText(0, getLength()); + char[] tmp = strOldValue.toCharArray(); + int currentLength = tmp.length + charVal.length; + if (errorLength != -1 && currentLength > errorLength && ++loop >= 5) { + this.loop = 0; + FineJOptionPane.showMessageDialog(ShareDialogUtils.getInstance().getShareDialog(), + ShareUIUtils.formatWidthString(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Input_Errors", String.valueOf(errorLength)), 200), + Toolkit.i18nText("Fine-Design_Basic_Error"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon")); + //只提示,不报错 + } + if (maxLength != -1 && (currentLength > maxLength)) { + java.awt.Toolkit.getDefaultToolkit().beep();// 发出一个警告声 + return;// 长度大于指定的长度maxLength,也直接返回,不进行下面的添加 + } + super.insertString(offset, str, attrSet); + } + + public void setAllowChar(String str) { + allowCharAsString = str; + } + } + +} diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/table/EffectItemRender.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/table/EffectItemRender.java new file mode 100644 index 0000000000..1655e17bd5 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/table/EffectItemRender.java @@ -0,0 +1,117 @@ +package com.fr.design.share.ui.generate.table; + +import com.fr.base.BaseUtils; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.locale.InterProviderFactory; +import com.fr.stable.StringUtils; + +import javax.swing.BorderFactory; +import javax.swing.ImageIcon; +import javax.swing.JPanel; +import javax.swing.JTable; +import javax.swing.border.Border; +import javax.swing.table.DefaultTableCellRenderer; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Image; +import java.awt.Rectangle; + +public class EffectItemRender extends DefaultTableCellRenderer { + static final private Color HEADER_COLOR = new Color(221, 221, 221); + static final private Color PLACEHOLDER_COLOR = new Color(193, 193, 193); + static final private Color NO_EDITABLE_BG = new Color(240, 240, 241); + static final private Border DEFAULT_NO_FOCUS_BORDER = BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(1, 5, 1, 5), BorderFactory.createEmptyBorder(0, 4, 0, 4)); + static final private Border SELECTED_BORDER = BorderFactory.createLineBorder(new Color(160,190,240)); + + private PreviewPanel preViewPanel; + + public EffectItemRender() { + setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 10)); + setLayout(new FlowLayout()); + preViewPanel = new PreviewPanel(StringUtils.EMPTY); + } + + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + setText(StringUtils.EMPTY); + setToolTipText(null); + setBorder(DEFAULT_NO_FOCUS_BORDER); + setBackground(null); + if (column > 0) { + if (StringUtils.isNotEmpty(value.toString())) { + setValue(value); + setToolTipText(value); + if (!table.isCellEditable(row, column)) { + setForeground(PLACEHOLDER_COLOR); + setBackground(NO_EDITABLE_BG); + setToolTipText(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Not_Support_Rename")); + } else { + setForeground(Color.black); + } + + if (table.getSelectedRow() == row && table.getSelectedColumn() == column && table.isCellEditable(row, column) ) { + setBorder(SELECTED_BORDER); + setBackground(null); + table.setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR)); + } else { + if (isSelected) { + setBackground(table.getSelectionBackground()); + } + + table.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } + } else { + setValue(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Need_Rename")); + setForeground(PLACEHOLDER_COLOR); + } + return this; + } else { + Rectangle rect = table.getCellRect(row, column, false); + preViewPanel.populate(value.toString()); + preViewPanel.getTextLabel().setPreferredSize(new Dimension(rect.width - preViewPanel.ICON_SIZE - 20, rect.height)); + return preViewPanel; + } + } + + public void setValue(Object value) { + setText((value == null) ? "" : value.toString()); + } + + private void setToolTipText(Object value) { setToolTipText((value == null) ? "" : value.toString()); } + + private class PreviewPanel extends JPanel { + public static final int ICON_SIZE = 10; + private UILabel textLabel; + + public PreviewPanel(String text) { + init(text); + } + + private void init(String text) { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.setBackground(HEADER_COLOR); + textLabel = new UILabel(text); + textLabel.setToolTipText(text); + textLabel.setBorder(BorderFactory.createEmptyBorder(0,5,0,0)); + Image image = BaseUtils.readImage("com/fr/base/images/share/view.png"); + image.getScaledInstance(ICON_SIZE, ICON_SIZE, Image.SCALE_DEFAULT); + UILabel imageLabel = new UILabel(new ImageIcon(image)); + imageLabel.setBorder(BorderFactory.createEmptyBorder(0,10,0,10)); + this.add(textLabel, BorderLayout.WEST); + this.add(imageLabel, BorderLayout.EAST); + } + + public UILabel getTextLabel() { + return textLabel; + } + + public void populate(String text) { + textLabel.setText(text); + this.setToolTipText(text); + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/table/EffectTableModel.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/table/EffectTableModel.java new file mode 100644 index 0000000000..042159c691 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/table/EffectTableModel.java @@ -0,0 +1,76 @@ +package com.fr.design.share.ui.generate.table; + +import com.fr.design.share.effect.EffectItem; +import com.fr.design.share.effect.EffectItemGroup; +import com.fr.design.share.effect.ListenerEffectItem; + +import javax.swing.table.AbstractTableModel; +import java.util.List; + +public class EffectTableModel extends AbstractTableModel { + private Object[] columnNames; + private List effectItems; + + public EffectTableModel(EffectItemGroup itemGroup, Object[] columnNames) { + if (itemGroup == null) { + this.effectItems = new EffectItemGroup().getEffectItems(); + } else { + this.effectItems = itemGroup.getEffectItems(); + } + this.columnNames = columnNames; + } + @Override + public int getRowCount() { + return this.effectItems.size(); + } + + @Override + public int getColumnCount() { + return this.columnNames.length; + } + + @Override + public String getColumnName(int columnIndex) { + if (columnNames == null) { + return null; + } + return columnNames[columnIndex].toString(); + } + + @Override + public Class getColumnClass(int columnIndex) { + return EffectTableModel.class; + } + + @Override + public boolean isCellEditable(int rowIndex, int columnIndex) { + EffectItem effectItem = effectItems.get(rowIndex); + return columnIndex == 1 && !(effectItem instanceof ListenerEffectItem); + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + + if (rowIndex >= getRowCount() || columnIndex >= getColumnCount()) { + return null; + } + EffectItem effectItem = effectItems.get(rowIndex); + if (columnIndex == 0) { + return effectItem.getConfigPath(); + } else if (columnIndex == 1) { + return effectItem.getName(); + } + return null; + } + + @Override + public void setValueAt(Object aValue, int rowIndex, int columnIndex) { + if (rowIndex >= effectItems.size() || columnIndex >= getColumnCount()) { + return; + } + EffectItem effectItem = effectItems.get(rowIndex); + if (columnIndex == 1) { + effectItem.setName(aValue.toString()); + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/table/EffectItemEditor.java b/designer-realize/src/main/java/com/fr/design/share/ui/table/EffectItemEditor.java new file mode 100644 index 0000000000..8fc0464e2e --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/ui/table/EffectItemEditor.java @@ -0,0 +1,65 @@ +package com.fr.design.share.ui.table; + +import com.fr.design.gui.itextfield.UITextField; + +import javax.swing.AbstractCellEditor; +import javax.swing.JTable; +import javax.swing.table.TableCellEditor; +import java.awt.Component; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseMotionAdapter; + +public class EffectItemEditor extends AbstractCellEditor implements TableCellEditor { + private UITextField textField; + + public EffectItemEditor(JTable table) { + textField = new UITextField(); + textField.addMouseListener(new MouseAdapter() { + public void mouseClicked(MouseEvent e) { + table.setRowSelectionInterval(table.getEditingRow(), table.getEditingRow()); + table.setColumnSelectionInterval(table.getEditingColumn(), table.getEditingColumn()); + } + @Override + public void mouseExited(MouseEvent e) { + table.clearSelection(); + } + + }); + textField.addMouseMotionListener(new MouseMotionAdapter() { + @Override + public void mouseMoved(MouseEvent e) { + table.setRowSelectionInterval(table.getEditingRow(), table.getEditingRow()); + table.setColumnSelectionInterval(table.getEditingColumn(), table.getEditingColumn()); + } + }); + textField.addFocusListener(new FocusAdapter() { + public void focusGained(FocusEvent e) { + table.setRowSelectionInterval(table.getEditingRow(), table.getEditingRow()); + table.setColumnSelectionInterval(table.getEditingColumn(), table.getEditingColumn()); + } + @Override + public void focusLost(FocusEvent e) { + if ((table.getSelectedRow() < 0) || (table.getSelectedColumn() < 0)) { + table.getCellEditor().stopCellEditing(); + } + } + }); + } + @Override + public Object getCellEditorValue() { + return textField.getText(); + } + + private void setValue(Object value) { + textField.setText((value != null) ? value.toString() : ""); + } + + @Override + public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { + setValue(value); + return textField; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/utils/EffectItemUtils.java b/designer-realize/src/main/java/com/fr/design/share/utils/EffectItemUtils.java new file mode 100644 index 0000000000..010828cf1f --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/utils/EffectItemUtils.java @@ -0,0 +1,22 @@ +package com.fr.design.share.utils; + +import com.fr.design.share.effect.EffectItemGroup; +import com.fr.form.share.utils.ShareUtils; +import com.fr.form.ui.Widget; + +import java.util.ArrayList; +import java.util.List; + +public class EffectItemUtils { + public static List getEffectItemGroupsByWidget(Widget widget) { + List widgetList = ShareUtils.getAllLeafWidget(widget); + List effectItemGroupList = new ArrayList(); + for (Widget w : widgetList) { + EffectItemGroup effectItemGroup = new EffectItemGroup(w); + if (effectItemGroup.getEffectItems().size() > 0) { + effectItemGroupList.add(effectItemGroup); + } + } + return effectItemGroupList; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/utils/ShareDialogUtils.java b/designer-realize/src/main/java/com/fr/design/share/utils/ShareDialogUtils.java new file mode 100644 index 0000000000..4b7cfb845e --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/utils/ShareDialogUtils.java @@ -0,0 +1,36 @@ +package com.fr.design.share.utils; + +import java.awt.Dialog; + +public class ShareDialogUtils { + private static class InstanceHolder { + + private static ShareDialogUtils helper = new ShareDialogUtils(); + } + + public static ShareDialogUtils getInstance() { + + return InstanceHolder.helper; + } + + private Dialog shareDialog; + private Dialog ConfigDialog; + + public void setShareDialog(Dialog shareDialog) { + + this.shareDialog = shareDialog; + } + + public Dialog getShareDialog() { + + return this.shareDialog; + } + + public void setConfigDialog(Dialog configDialog) { + ConfigDialog = configDialog; + } + + public Dialog getConfigDialog() { + return ConfigDialog; + } +} diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java index eb3f577cc9..44d3628961 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java @@ -54,12 +54,15 @@ import com.fr.design.mainframe.form.FormECDesignerProvider; import com.fr.design.mainframe.form.FormElementCaseDesigner; import com.fr.design.mainframe.form.FormReportComponentComposite; import com.fr.design.mainframe.loghandler.DesignerLogAppender; +import com.fr.design.mainframe.share.constants.ShareEntryKey; import com.fr.design.mainframe.socketio.DesignerSocketIO; import com.fr.design.module.DesignModuleFactory; import com.fr.design.os.impl.SupportOSImpl; import com.fr.design.parameter.FormParameterReader; import com.fr.design.parameter.ParameterPropertyPane; import com.fr.design.parameter.WorkBookParameterReader; +import com.fr.design.share.ui.config.ShareConfigPane; +import com.fr.design.share.ui.generate.ShareGeneratePane; import com.fr.design.update.actions.RecoverForDesigner; import com.fr.design.update.push.DesignerPushUpdateManager; import com.fr.design.widget.ui.btn.FormSubmitButtonDetailPane; @@ -382,6 +385,8 @@ public class DesignerActivator extends Activator { private static void registerData4Form() { StableFactory.registerMarkedClass(FormECDesignerProvider.XML_TAG, FormElementCaseDesigner.class); StableFactory.registerMarkedClass(FormECCompositeProvider.XML_TAG, FormReportComponentComposite.class); + StableFactory.registerMarkedClass(ShareEntryKey.SHARE_GENERATE, ShareGeneratePane.class); + StableFactory.registerMarkedClass(ShareEntryKey.SHARE_CONFIG, ShareConfigPane.class); DesignModuleFactory.registerParameterReader(new WorkBookParameterReader()); } From cc4b438cfb65a96a21964a8b0f16fdf887495548 Mon Sep 17 00:00:00 2001 From: kerry Date: Mon, 17 May 2021 20:03:23 +0800 Subject: [PATCH 006/148] =?UTF-8?q?REPORT-52151=20=E6=8E=A7=E4=BB=B6?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E6=94=AF=E6=8C=81=E9=87=8D=E5=91=BD=E5=90=8D?= =?UTF-8?q?=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controlpane/CommonShortCutHandlers.java | 38 +- .../controlpane/ListControlPaneHelper.java | 144 ++++- .../design/gui/controlpane/UIControlPane.java | 12 +- .../gui/controlpane/UIListControlPane.java | 130 +---- .../UINameableListCellRenderer.java | 24 +- .../design/os/impl/PopupDialogSaveAction.java | 6 +- .../com/fr/design/widget/EventCreator.java | 14 +- .../ListControlPaneHelperTest.java | 41 ++ .../gui/controlpane/EventPropertyPane.java | 533 ++++++++++++++++++ .../design/mainframe/WidgetPropertyPane.java | 11 +- 10 files changed, 777 insertions(+), 176 deletions(-) create mode 100644 designer-base/src/test/java/com/fr/design/gui/controlpane/ListControlPaneHelperTest.java create mode 100644 designer-form/src/main/java/com/fr/design/gui/controlpane/EventPropertyPane.java diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/CommonShortCutHandlers.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/CommonShortCutHandlers.java index c5d2a51dd9..094ef1c22f 100644 --- a/designer-base/src/main/java/com/fr/design/gui/controlpane/CommonShortCutHandlers.java +++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/CommonShortCutHandlers.java @@ -21,11 +21,9 @@ import java.util.Comparator; */ public class CommonShortCutHandlers { ListControlPaneProvider listControlPane; - JNameEdList nameableList; private CommonShortCutHandlers(ListControlPaneProvider listControlPane) { this.listControlPane = listControlPane; - this.nameableList = listControlPane.getNameableList(); } public static CommonShortCutHandlers newInstance(ListControlPaneProvider listControlPane) { @@ -43,19 +41,19 @@ public class CommonShortCutHandlers { public void onRemoveItem() { try { - nameableList.getCellEditor() + listControlPane.getNameableList().getCellEditor() .stopCellEditing(); } catch (Exception ignored) { } if (GUICoreUtils.removeJListSelectedNodes(SwingUtilities - .getWindowAncestor((Component) listControlPane), nameableList)) { + .getWindowAncestor((Component) listControlPane), listControlPane.getNameableList())) { listControlPane.checkButtonEnabled(); } } public void onCopyItem() { // p:选中的值. - ListModelElement selectedValue = (ListModelElement) nameableList.getSelectedValue(); + ListModelElement selectedValue = (ListModelElement) listControlPane.getNameableList().getSelectedValue(); if (selectedValue == null) { return; } @@ -76,47 +74,51 @@ public class CommonShortCutHandlers { } public void onMoveUpItem() { - int selectedIndex = nameableList.getSelectedIndex(); + int selectedIndex = listControlPane.getNameableList().getSelectedIndex(); if (selectedIndex == -1) { return; } // 上移 if (selectedIndex > 0) { - DefaultListModel listModel = (DefaultListModel) nameableList.getModel(); + DefaultListModel listModel = (DefaultListModel) listControlPane.getNameableList().getModel(); Object selecteObj1 = listModel.get(selectedIndex - 1); listModel.set(selectedIndex - 1, listModel.get(selectedIndex)); listModel.set(selectedIndex, selecteObj1); - nameableList.setSelectedIndex(selectedIndex - 1); - nameableList.ensureIndexIsVisible(selectedIndex - 1); + listControlPane.getNameableList().setSelectedIndex(selectedIndex - 1); + listControlPane.getNameableList().ensureIndexIsVisible(selectedIndex - 1); } } public void onMoveDownItem() { - int selectedIndex = nameableList.getSelectedIndex(); + int selectedIndex = listControlPane.getNameableList().getSelectedIndex(); if (selectedIndex == -1) { return; } - if (selectedIndex < nameableList.getModel().getSize() - 1) { - DefaultListModel listModel = (DefaultListModel) nameableList + if (selectedIndex < listControlPane.getNameableList().getModel().getSize() - 1) { + DefaultListModel listModel = (DefaultListModel) listControlPane.getNameableList() .getModel(); Object selecteObj1 = listModel.get(selectedIndex + 1); listModel.set(selectedIndex + 1, listModel.get(selectedIndex)); listModel.set(selectedIndex, selecteObj1); - nameableList.setSelectedIndex(selectedIndex + 1); - nameableList.ensureIndexIsVisible(selectedIndex + 1); + listControlPane.getNameableList().setSelectedIndex(selectedIndex + 1); + listControlPane.getNameableList().ensureIndexIsVisible(selectedIndex + 1); } } public void onSortItem(boolean isAtoZ) { + onSortItem(isAtoZ, listControlPane.getNameableList()); + } + + public void onSortItem(boolean isAtoZ, JNameEdList nameEdList) { // p:选中的值. - Object selectedValue = nameableList.getSelectedValue(); + Object selectedValue = nameEdList.getSelectedValue(); - DefaultListModel listModel = (DefaultListModel) nameableList + DefaultListModel listModel = (DefaultListModel) nameEdList .getModel(); Nameable[] nameableArray = new Nameable[listModel.getSize()]; if (nameableArray.length <= 0) { @@ -156,12 +158,12 @@ public class CommonShortCutHandlers { // p:需要选中以前的那个值. if (selectedValue != null) { - nameableList.setSelectedValue(selectedValue, true); + nameEdList.setSelectedValue(selectedValue, true); } listControlPane.checkButtonEnabled(); // p:需要repaint. - nameableList.repaint(); + nameEdList.repaint(); } private String createUnrepeatedCopyName(String suffix) { diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/ListControlPaneHelper.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/ListControlPaneHelper.java index 76255d96b7..7fe1a27efe 100644 --- a/designer-base/src/main/java/com/fr/design/gui/controlpane/ListControlPaneHelper.java +++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/ListControlPaneHelper.java @@ -4,18 +4,41 @@ import com.fr.design.beans.BasicBeanPane; import com.fr.design.dialog.FineJOptionPane; import com.fr.design.gui.ilist.JNameEdList; import com.fr.design.gui.ilist.ListModelElement; +import com.fr.design.gui.ilist.UINameEdList; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.os.impl.PopupDialogSaveAction; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.form.event.Listener; +import com.fr.general.NameObject; import com.fr.stable.Nameable; import com.fr.stable.StringUtils; +import com.fr.stable.os.support.OSSupportCenter; import javax.swing.DefaultListModel; -import javax.swing.JOptionPane; +import javax.swing.JList; +import javax.swing.JPopupMenu; +import javax.swing.SwingUtilities; import java.awt.Component; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Toolkit; +import java.awt.Window; +import java.awt.event.InputEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * 存放一些公用的方法 * Created by plough on 2018/8/13. */ class ListControlPaneHelper { + private static final int EDIT_RANGE = 25; // 编辑按钮的x坐标范围 + private ListControlPaneProvider listControlPane; private ListControlPaneHelper(ListControlPaneProvider listControlPane) { @@ -110,4 +133,123 @@ class ListControlPaneHelper { } + protected void popupEditDialog(Point mousePos, UINameEdList nameableList, UIControlPane controlPane) { + int editingIndex = nameableList.getSelectedIndex(); + Rectangle currentCellBounds = nameableList.getCellBounds(editingIndex, editingIndex); + if (editingIndex < 0 || (mousePos != null && !currentCellBounds.contains(mousePos))) { + return; + } + Window popupEditDialog = controlPane.getPopupEditDialog(); + popupEditDialog.setLocation(getPopupDialogLocation(nameableList, popupEditDialog)); + if (popupEditDialog instanceof UIControlPane.PopupEditDialog) { + ((UIControlPane.PopupEditDialog) popupEditDialog).setTitle(getSelectedName()); + } + popupEditDialog.setVisible(true); + PopupDialogSaveAction osBasedAction = OSSupportCenter.getAction(PopupDialogSaveAction.class); + osBasedAction.register(controlPane, popupEditDialog); + } + + private Point getPopupDialogLocation(UINameEdList nameableList, Window popupEditDialog) { + Point resultPos = new Point(0, 0); + Point listPos = nameableList.getLocationOnScreen(); + resultPos.x = listPos.x - popupEditDialog.getWidth(); + resultPos.y = listPos.y + (nameableList.getSelectedIndex() - 1) * EDIT_RANGE; + + // 当对象在屏幕上的位置比较靠下时,往下移动弹窗至与属性面板平齐 + Window frame = DesignerContext.getDesignerFrame(); + // 不能太低 + int maxY = frame.getLocationOnScreen().y + frame.getHeight() - popupEditDialog.getHeight(); + if (resultPos.y > maxY) { + resultPos.y = maxY; + } + // 也不能太高 + int minY = frame.getLocationOnScreen().y + EDIT_RANGE; + if (resultPos.y < minY) { + resultPos.y = minY; + } + + // 当在左侧显示不下时,在右侧弹出弹窗 + if (resultPos.x < 0) { + resultPos.x = listPos.x + nameableList.getParent().getWidth(); + } + // 如果右侧显示不下,可以向左移动 + int maxX = frame.getLocationOnScreen().x + frame.getWidth() - popupEditDialog.getWidth() - EDIT_RANGE; + if (resultPos.x > maxX) { + resultPos.x = maxX; + } + + return resultPos; + } + + /* + * UINameEdList的鼠标事件 + */ + protected MouseListener getListMouseListener(UINameEdList nameableList, UIControlPane controlPane) { + return new MouseAdapter() { + @Override + public void mouseReleased(MouseEvent evt) { + nameableList.stopEditing(); + if (evt.getClickCount() >= 2 + && SwingUtilities.isLeftMouseButton(evt) && evt.getX() > EDIT_RANGE) { + nameableList.editItemAt(nameableList.getSelectedIndex()); + } else if (SwingUtilities.isLeftMouseButton(evt) && evt.getX() <= EDIT_RANGE) { + popupEditDialog(evt.getPoint(), nameableList, controlPane); + } + + // peter:处理右键的弹出菜单 + if (!SwingUtilities.isRightMouseButton(evt)) { + return; + } + + // peter: 注意,在checkButtonEnabled()方法里面,设置了所有的Action的Enabled. + checkButtonEnabled(); + + // p:右键菜单. + JPopupMenu popupMenu = new JPopupMenu(); + + for (ShortCut4JControlPane sj : listControlPane.getShorts()) { + sj.getShortCut().intoJPopupMenu(popupMenu); + } + + // peter: 只有弹出菜单有子菜单的时候,才需要弹出来. + GUICoreUtils.showPopupMenu(popupMenu, nameableList, evt.getX() - 1, + evt.getY() - 1); + } + + @Override + public void mouseClicked(MouseEvent e) { + JList list = (JList) e.getSource(); + if (list.locationToIndex(e.getPoint()) == -1 && !e.isShiftDown() + && !isMenuShortcutKeyDown(e)) { + list.clearSelection(); + } + } + + private boolean isMenuShortcutKeyDown(InputEvent event) { + return (event.getModifiers() & Toolkit.getDefaultToolkit() + .getMenuShortcutKeyMask()) != 0; + } + + @Override + public void mouseMoved(MouseEvent e) { + + } + }; + } + + public Map> processCatalog(List nameObjectList) { + Map> map = new HashMap<>(); + for (NameObject nameObject : nameObjectList) { + Listener listener = (Listener) nameObject.getObject(); + if (StringUtils.isNotEmpty(listener.getName())) { + nameObject.setName(listener.getName()); + } + List list = map.computeIfAbsent(listener.getEventName(), k -> new ArrayList<>()); + list.add(nameObject); + } + return map; + } + + + } diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIControlPane.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIControlPane.java index 04427b3378..b15b9eab92 100644 --- a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIControlPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIControlPane.java @@ -49,7 +49,7 @@ import java.awt.event.WindowEvent; /** * Created by plough on 2017/7/21. */ -abstract class UIControlPane extends JControlPane { +public abstract class UIControlPane extends JControlPane { private UIToolbar topToolBar; protected Window popupEditDialog; private static final int TOP_TOOLBAR_HEIGHT = 20; @@ -78,7 +78,7 @@ abstract class UIControlPane extends JControlPane { initCardPane(); if (isNewStyle()) { - getPopupEditDialog(cardPane); + createPopupEditDialog(cardPane); this.add(getLeftPane(), BorderLayout.CENTER); this.setBorder(BorderFactory.createEmptyBorder(10, 10, 15, 10)); } else { @@ -100,7 +100,11 @@ abstract class UIControlPane extends JControlPane { this.checkButtonEnabled(); } - private void getPopupEditDialog(JPanel cardPane) { + protected Window getPopupEditDialog(){ + return this.popupEditDialog; + } + + private void createPopupEditDialog(JPanel cardPane) { popupEditDialog = new PopupEditDialog(cardPane); } @@ -400,4 +404,4 @@ abstract class UIControlPane extends JControlPane { return new Dimension(super.getPreferredSize().width, 28); } } -} \ No newline at end of file +} diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListControlPane.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListControlPane.java index ec76f5bf79..b7b8674be7 100644 --- a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListControlPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListControlPane.java @@ -6,32 +6,18 @@ import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.ilist.JNameEdList; import com.fr.design.gui.ilist.ListModelElement; import com.fr.design.gui.ilist.UINameEdList; -import com.fr.design.mainframe.DesignerContext; -import com.fr.design.os.impl.PopupDialogSaveAction; -import com.fr.design.utils.gui.GUICoreUtils; import com.fr.stable.ArrayUtils; import com.fr.stable.Nameable; -import com.fr.stable.os.support.OSSupportCenter; import javax.swing.DefaultListModel; -import javax.swing.JList; import javax.swing.JPanel; -import javax.swing.JPopupMenu; import javax.swing.ListSelectionModel; -import javax.swing.SwingUtilities; import javax.swing.event.ListDataEvent; import javax.swing.event.ListDataListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import java.awt.BorderLayout; import java.awt.Point; -import java.awt.Rectangle; -import java.awt.Toolkit; -import java.awt.Window; -import java.awt.event.InputEvent; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; @@ -41,11 +27,8 @@ import java.lang.reflect.InvocationTargetException; public abstract class UIListControlPane extends UIControlPane implements ListControlPaneProvider { private static final String LIST_NAME = "UIControl_List"; - private static final int EDIT_RANGE = 25; // 编辑按钮的x坐标范围 protected UINameEdList nameableList; - private int editingIndex; - protected String selectedName; protected boolean isPopulating = false; private CommonShortCutHandlers commonHandlers; private ListControlPaneHelper helper; @@ -93,7 +76,7 @@ public abstract class UIListControlPane extends UIControlPane implements ListCon nameableList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); - nameableList.addMouseListener(getListMouseListener()); + nameableList.addMouseListener(getHelper().getListMouseListener(nameableList, this)); nameableList.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent evt) { // richie:避免多次update和populate大大降低效率 @@ -139,7 +122,7 @@ public abstract class UIListControlPane extends UIControlPane implements ListCon saveSettings(); } }; - nameEdList.setCellRenderer(new UINameableListCellRenderer(this)); + nameEdList.setCellRenderer(new UINameableListCellRenderer(this.isNewStyle(), this.creators)); return nameEdList; } @@ -181,13 +164,6 @@ public abstract class UIListControlPane extends UIControlPane implements ListCon } - /** - * 获取选中的名字 - */ - public String getSelectedName() { - return getHelper().getSelectedName(); - } - /** * 添加 Nameable * @@ -209,51 +185,10 @@ public abstract class UIListControlPane extends UIControlPane implements ListCon protected void popupEditDialog(Point mousePos) { if (isNewStyle()) { - Rectangle currentCellBounds = nameableList.getCellBounds(editingIndex, editingIndex); - if (editingIndex < 0 || (mousePos != null && !currentCellBounds.contains(mousePos))) { - return; - } - popupEditDialog.setLocation(getPopupDialogLocation()); - if (popupEditDialog instanceof PopupEditDialog) { - ((PopupEditDialog)popupEditDialog).setTitle(getSelectedName()); - } - popupEditDialog.setVisible(true); - PopupDialogSaveAction osBasedAction = OSSupportCenter.getAction(PopupDialogSaveAction.class); - osBasedAction.register(this, popupEditDialog); + getHelper().popupEditDialog(mousePos, nameableList, this); } } - private Point getPopupDialogLocation() { - Point resultPos = new Point(0, 0); - Point listPos = nameableList.getLocationOnScreen(); - resultPos.x = listPos.x - popupEditDialog.getWidth(); - resultPos.y = listPos.y + (nameableList.getSelectedIndex() - 1) * EDIT_RANGE; - - // 当对象在屏幕上的位置比较靠下时,往下移动弹窗至与属性面板平齐 - Window frame = DesignerContext.getDesignerFrame(); - // 不能太低 - int maxY = frame.getLocationOnScreen().y + frame.getHeight() - popupEditDialog.getHeight(); - if (resultPos.y > maxY) { - resultPos.y = maxY; - } - // 也不能太高 - int minY = frame.getLocationOnScreen().y + EDIT_RANGE; - if (resultPos.y < minY) { - resultPos.y = minY; - } - - // 当在左侧显示不下时,在右侧弹出弹窗 - if (resultPos.x < 0) { - resultPos.x = listPos.x + nameableList.getParent().getWidth(); - } - // 如果右侧显示不下,可以向左移动 - int maxX = frame.getLocationOnScreen().x + frame.getWidth() - popupEditDialog.getWidth() - EDIT_RANGE; - if (resultPos.x > maxX) { - resultPos.x = maxX; - } - - return resultPos; - } /** * 生成不重复的名字 @@ -301,65 +236,6 @@ public abstract class UIListControlPane extends UIControlPane implements ListCon return getModel().getSize() > 0 && nameableList.getSelectedIndex() != -1; } - /* - * UINameEdList的鼠标事件 - */ - private MouseListener getListMouseListener() { - return new MouseAdapter() { - @Override - public void mouseReleased(MouseEvent evt) { - nameableList.stopEditing(); - if (evt.getClickCount() >= 2 - && SwingUtilities.isLeftMouseButton(evt) && evt.getX() > EDIT_RANGE) { - editingIndex = nameableList.getSelectedIndex(); - selectedName = nameableList.getNameAt(editingIndex); - nameableList.editItemAt(nameableList.getSelectedIndex()); - } else if (SwingUtilities.isLeftMouseButton(evt) && evt.getX() <= EDIT_RANGE) { - editingIndex = nameableList.getSelectedIndex(); - selectedName = nameableList.getNameAt(editingIndex); - popupEditDialog(evt.getPoint()); - } - - // peter:处理右键的弹出菜单 - if (!SwingUtilities.isRightMouseButton(evt)) { - return; - } - - // peter: 注意,在checkButtonEnabled()方法里面,设置了所有的Action的Enabled. - checkButtonEnabled(); - - // p:右键菜单. - JPopupMenu popupMenu = new JPopupMenu(); - - for (ShortCut4JControlPane sj : getShorts()) { - sj.getShortCut().intoJPopupMenu(popupMenu); - } - - // peter: 只有弹出菜单有子菜单的时候,才需要弹出来. - GUICoreUtils.showPopupMenu(popupMenu, nameableList, evt.getX() - 1, - evt.getY() - 1); - } - - @Override - public void mouseClicked(MouseEvent e) { - JList list = (JList) e.getSource(); - if (list.locationToIndex(e.getPoint()) == -1 && !e.isShiftDown() - && !isMenuShortcutKeyDown(e)) { - list.clearSelection(); - } - } - - private boolean isMenuShortcutKeyDown(InputEvent event) { - return (event.getModifiers() & Toolkit.getDefaultToolkit() - .getMenuShortcutKeyMask()) != 0; - } - - @Override - public void mouseMoved(MouseEvent e) { - - } - }; - } /** * 检查按钮可用状态 Check button enabled. diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/UINameableListCellRenderer.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/UINameableListCellRenderer.java index b66ee1ef23..40d8d98fa7 100644 --- a/designer-base/src/main/java/com/fr/design/gui/controlpane/UINameableListCellRenderer.java +++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/UINameableListCellRenderer.java @@ -1,12 +1,8 @@ package com.fr.design.gui.controlpane; -import com.fr.base.BaseUtils; import com.fr.design.constants.UIConstants; -import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilist.ListModelElement; -import com.fr.design.gui.itextfield.UITextField; -import com.fr.design.utils.gui.GUICoreUtils; import com.fr.stable.Nameable; import sun.swing.DefaultLookup; @@ -14,8 +10,6 @@ import javax.swing.*; import javax.swing.border.Border; import javax.swing.border.EmptyBorder; import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; /** * Nameable的ListCellRenerer @@ -32,12 +26,14 @@ public class UINameableListCellRenderer extends private static final int BUTTON_WIDTH = 25; private UILabel editButton; // "编辑按钮",实际上是一个 UILabel,由列表项(UIListControlPane)统一处理点击事件 private UILabel label; - private UIListControlPane listControlPane; + private boolean isNewStyle; + private NameableCreator[] creators; private Color initialLabelForeground; - public UINameableListCellRenderer(UIListControlPane listControlPane) { + public UINameableListCellRenderer( boolean isNewStyle, NameableCreator[] creators) { super(); - this.listControlPane = listControlPane; + this.isNewStyle = isNewStyle; + this.creators = creators; initComponents(); setOpaque(true); setBorder(getNoFocusBorder()); @@ -50,7 +46,7 @@ public class UINameableListCellRenderer extends return new Dimension(BUTTON_WIDTH, BUTTON_WIDTH); } }; - editButton.setIcon(listControlPane.isNewStyle() ? UIConstants.LIST_EDIT_ICON : UIConstants.CPT_ICON); + editButton.setIcon(isNewStyle ? UIConstants.LIST_EDIT_ICON : UIConstants.CPT_ICON); editButton.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 1, UIConstants.LIST_ITEM_SPLIT_LINE)); editButton.setHorizontalAlignment(SwingConstants.CENTER); label = new UILabel(); @@ -92,7 +88,7 @@ public class UINameableListCellRenderer extends setBackground(bg == null ? list.getSelectionBackground() : bg); setForeground(fg == null ? list.getSelectionForeground() : fg); label.setForeground(Color.WHITE); - if (listControlPane.isNewStyle()) { + if (isNewStyle) { editButton.setIcon(UIConstants.LIST_EDIT_WHITE_ICON); } } @@ -100,7 +96,7 @@ public class UINameableListCellRenderer extends setBackground(list.getBackground()); setForeground(list.getForeground()); label.setForeground(initialLabelForeground); - if (listControlPane.isNewStyle()) { + if (isNewStyle) { editButton.setIcon(UIConstants.LIST_EDIT_ICON); } } @@ -114,7 +110,7 @@ public class UINameableListCellRenderer extends Nameable wrappee = ((ListModelElement) value).wrapper; this.setText(((ListModelElement) value).wrapper.getName()); - for (NameableCreator creator : listControlPane.creators()) { + for (NameableCreator creator : creators) { if (creator.menuIcon() != null && creator.acceptObject2Populate(wrappee) != null) { this.setToolTipText(creator.createTooltip()); break; @@ -124,4 +120,4 @@ public class UINameableListCellRenderer extends return this; } -} \ No newline at end of file +} diff --git a/designer-base/src/main/java/com/fr/design/os/impl/PopupDialogSaveAction.java b/designer-base/src/main/java/com/fr/design/os/impl/PopupDialogSaveAction.java index 019ee3d97e..c0b0600054 100644 --- a/designer-base/src/main/java/com/fr/design/os/impl/PopupDialogSaveAction.java +++ b/designer-base/src/main/java/com/fr/design/os/impl/PopupDialogSaveAction.java @@ -1,6 +1,6 @@ package com.fr.design.os.impl; -import com.fr.design.gui.controlpane.UIListControlPane; +import com.fr.design.gui.controlpane.UIControlPane; import com.fr.stable.os.OperatingSystem; import com.fr.stable.os.support.OSBasedAction; @@ -15,7 +15,7 @@ import java.awt.*; */ public class PopupDialogSaveAction implements OSBasedAction { - private UIListControlPane currentControlPane; + private UIControlPane currentControlPane; private Window popupDialog; @Override @@ -26,7 +26,7 @@ public class PopupDialogSaveAction implements OSBasedAction { } } - public void register(UIListControlPane currentControlPane, Window popupDialog) { + public void register(UIControlPane currentControlPane, Window popupDialog) { this.currentControlPane = currentControlPane; this.popupDialog = popupDialog; } diff --git a/designer-base/src/main/java/com/fr/design/widget/EventCreator.java b/designer-base/src/main/java/com/fr/design/widget/EventCreator.java index 4fdfd7ed80..63d40515cd 100644 --- a/designer-base/src/main/java/com/fr/design/widget/EventCreator.java +++ b/designer-base/src/main/java/com/fr/design/widget/EventCreator.java @@ -18,6 +18,10 @@ public class EventCreator extends NameableSelfCreator { this.eventName = eventName; } + public String getEventName() { + return eventName; + } + @Override public Nameable createNameable(UnrepeatedNameHelper helper) { return new NameObject(helper.createUnrepeatedName(this.menuName()),new Listener(this.eventName)) ; @@ -47,13 +51,17 @@ public class EventCreator extends NameableSelfCreator { return eventName; } } + @Override - public void saveUpdatedBean(ListModelElement wrapper, Object bean) { - ((NameObject)wrapper.wrapper).setObject(bean); + public void saveUpdatedBean(ListModelElement element, Object bean) { + if (bean instanceof Listener){ + ((Listener)bean).setName(element.wrapper.getName()); + } + ((NameObject)element.wrapper).setObject(bean); } @Override public String createTooltip() { return null; } -} \ No newline at end of file +} diff --git a/designer-base/src/test/java/com/fr/design/gui/controlpane/ListControlPaneHelperTest.java b/designer-base/src/test/java/com/fr/design/gui/controlpane/ListControlPaneHelperTest.java new file mode 100644 index 0000000000..8f113089e5 --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/gui/controlpane/ListControlPaneHelperTest.java @@ -0,0 +1,41 @@ +package com.fr.design.gui.controlpane; + +import com.fr.form.event.Listener; +import com.fr.general.NameObject; +import org.easymock.EasyMock; +import org.junit.Assert; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * Created by kerry on 5/17/21 + */ +public class ListControlPaneHelperTest { + + @Test + public void testProcessCatalog() { + ListControlPaneHelper helper = ListControlPaneHelper.newInstance(EasyMock.mock(ListControlPaneProvider.class)); + List nameObjectList = new ArrayList<>(); + Listener listener1 = new Listener(); + listener1.setEventName("click"); + Listener listener2 = new Listener(); + listener2.setEventName("afterInit"); + Listener listener3 = new Listener(); + listener3.setEventName("click"); + Listener listener4 = new Listener(); + listener4.setEventName("afterInit"); + listener4.setName("test"); + nameObjectList.add(new NameObject("click", listener1)); + nameObjectList.add(new NameObject("afterInit", listener2)); + nameObjectList.add(new NameObject("click", listener3)); + nameObjectList.add(new NameObject("afterInit", listener4)); + Map> map = helper.processCatalog(nameObjectList); + Assert.assertEquals(2, map.size()); + Assert.assertEquals(2, map.get("afterInit").size()); + Assert.assertEquals(2, map.get("click").size()); + + } +} diff --git a/designer-form/src/main/java/com/fr/design/gui/controlpane/EventPropertyPane.java b/designer-form/src/main/java/com/fr/design/gui/controlpane/EventPropertyPane.java new file mode 100644 index 0000000000..cc3f346690 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/gui/controlpane/EventPropertyPane.java @@ -0,0 +1,533 @@ +package com.fr.design.gui.controlpane; + + +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.constants.UIConstants; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.properties.EventPropertyTable; +import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.ilist.JNameEdList; +import com.fr.design.gui.ilist.ListModelElement; +import com.fr.design.gui.ilist.ModNameActionListener; +import com.fr.design.gui.ilist.UINameEdList; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.FormDesigner; +import com.fr.design.widget.EventCreator; +import com.fr.form.event.Listener; +import com.fr.form.ui.Widget; +import com.fr.general.NameObject; +import com.fr.report.web.util.ReportEngineEventMapping; +import com.fr.stable.ArrayUtils; +import com.fr.stable.Nameable; +import javax.swing.BorderFactory; +import javax.swing.DefaultListModel; +import javax.swing.JPanel; +import javax.swing.ListSelectionModel; +import javax.swing.event.ListDataEvent; +import javax.swing.event.ListDataListener; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +/** + * Created by kerry on 5/17/21 + */ +public class EventPropertyPane extends UIControlPane implements ListControlPaneProvider { + private XCreator creator; + private boolean isPopulating = false; + private UINameEdList selectNameEdList; + + private Map nameEdListMap = new HashMap<>(); + + private CommonShortCutHandlers commonHandlers; + + private ListControlPaneHelper helper; + + private JPanel contentPane; + + private FormDesigner designer; + + + private ListControlPaneHelper getHelper() { + if (helper == null) { + helper = ListControlPaneHelper.newInstance(this); + } + return helper; + } + + private CommonShortCutHandlers getCommonHandlers() { + if (commonHandlers == null) { + commonHandlers = CommonShortCutHandlers.newInstance(this); + } + return commonHandlers; + } + + + public EventPropertyPane(FormDesigner designer) { + super(); + this.designer = designer; + } + + + @Override + protected void initLeftPane(JPanel leftPane) { + leftPane.add(new UIScrollPane(contentPane = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 0)), BorderLayout.CENTER); + } + + /** + * 刷新 + */ + public void refresh() { + int selectionSize = designer.getSelectionModel().getSelection().size(); + if (selectionSize == 0 || selectionSize == 1) { + this.creator = selectionSize == 0 ? designer.getRootComponent() : designer.getSelectionModel() + .getSelection().getSelectedCreator(); + } else { + this.creator = null; + contentPane.removeAll(); + checkButtonEnabled(); + return; + } + Widget widget = creator.toData(); + + refreshContentPane(widget.supportedEvents()); + refreshNameableCreator(EventCreator.createEventCreator(widget.supportedEvents(), EventPropertyTable.WidgetEventListenerUpdatePane.class)); + populateNameObjects(); + } + + + private void refreshContentPane(String[] supportedEvents) { + for (String event : supportedEvents) { + if (nameEdListMap.containsKey(event)) { + continue; + } + UINameEdList list = createJNameList(event); + EventListWrapperPane wrapperPane = new EventListWrapperPane(switchLang(event), list); + if (this.selectNameEdList == null) { + this.selectNameEdList = wrapperPane.getNameEdList(); + } + contentPane.add(wrapperPane); + nameEdListMap.put(event, wrapperPane); + } + } + + public void populateNameObjects() { + Widget widget = creator.toData(); + + ArrayList nameObjectList = new ArrayList<>(); + for (int i = 0, size = widget.getListenerSize(); i < size; i++) { + Listener listener = widget.getListener(i); + if (!listener.isDefault()) { + nameObjectList.add(i, new NameObject(switchLang(listener.getEventName()) + (i + 1), listener)); + } + } + populate(getHelper().processCatalog(nameObjectList)); + checkButtonEnabled(); + this.repaint(); + } + + public void populate(Map> map) { + isPopulating = true; // 加一个标识位,避免切换单元格时,触发 saveSettings + Iterator>> iterator = map.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry> entry = iterator.next(); + List valueList = entry.getValue(); + EventListWrapperPane eventListWrapperPane = nameEdListMap.get(entry.getKey()); + populateChildNameList(eventListWrapperPane.getNameEdList(), valueList.toArray(new NameObject[valueList.size()])); + } + this.checkButtonEnabled(); + refreshEventListWrapperPane(); + isPopulating = false; + } + + private void refreshEventListWrapperPane() { + Iterator> iterator = nameEdListMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + EventListWrapperPane eventListWrapperPane = entry.getValue(); + UINameEdList nameEdList = eventListWrapperPane.getNameEdList(); + int listSize = nameEdList.getModel().getSize(); + if (this.selectNameEdList.getModel().getSize() == 0 && listSize > 0) { + this.selectNameEdList = nameEdList; + } + eventListWrapperPane.setVisible(listSize > 0); + } + this.selectNameEdList.setSelectedIndex(0); + this.repaint(); + } + + + private void populateChildNameList(UINameEdList nameableList, Nameable[] nameableArray) { + nameableList.getCellEditor().stopCellEditing(); + DefaultListModel listModel = (DefaultListModel) nameableList.getModel(); + listModel.removeAllElements(); + if (ArrayUtils.isEmpty(nameableArray)) { + isPopulating = false; + return; + } + + listModel.setSize(nameableArray.length); + for (int i = 0; i < nameableArray.length; i++) { + listModel.set(i, new ListModelElement(nameableArray[i])); + } + + } + + + protected UINameEdList createJNameList(String text) { + UINameEdList nameEdList = new UINameEdList(new DefaultListModel()) { + @Override + protected void doAfterLostFocus() { + ((JControlUpdatePane) controlUpdatePane).update(); + } + + @Override + protected void doAfterStopEditing() { + saveSettings(); + } + }; + + nameEdList.setCellRenderer(new UINameableListCellRenderer(true, this.creators)); + nameEdList.setName(text); + nameEdList.setSelectionBackground(UIConstants.ATTRIBUTE_PRESS); + nameEdList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); + nameEdList.addMouseListener(getHelper().getListMouseListener(nameEdList, this)); + nameEdList.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + selectNameEdList = nameEdList; + updateUINameListSelect(); + } + }); + nameEdList.addModNameActionListener(new ModNameActionListener() { + @Override + public void nameModed(int index, String oldName, String newName) { + saveSettings(); + } + }); + nameEdList.addListSelectionListener(new ListSelectionListener() { + public void valueChanged(ListSelectionEvent evt) { + // richie:避免多次update和populate大大降低效率 + if (!evt.getValueIsAdjusting() && !isPopulating) { + // shoc 切换的时候加检验 + if (hasInvalid(false)) { + return; + } + ((JControlUpdatePane) EventPropertyPane.this.controlUpdatePane).update(); + ((JControlUpdatePane) EventPropertyPane.this.controlUpdatePane).populate(); + EventPropertyPane.this.checkButtonEnabled(); + } + } + }); + nameEdList.getModel().addListDataListener(new ListDataListener() { + @Override + public void intervalAdded(ListDataEvent e) { + saveSettings(); + } + + @Override + public void intervalRemoved(ListDataEvent e) { + saveSettings(); + } + + @Override + public void contentsChanged(ListDataEvent e) { + saveSettings(); + } + }); + return nameEdList; + } + + private void updateUINameListSelect() { + Iterator> iterator = nameEdListMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + UINameEdList nameEdList = entry.getValue().getNameEdList(); + if (nameEdList != selectNameEdList) { + nameEdList.clearSelection(); + } + } + } + + @Override + public void checkButtonEnabled() { + getHelper().checkButtonEnabled(); + } + + + + private String switchLang(String eventName) { + // 在 properties 文件中找到相应的 key 值 + String localeKey = ReportEngineEventMapping.getLocaleName(eventName); + return com.fr.design.i18n.Toolkit.i18nText(localeKey); + } + + /** + * 更新控件事件 + * + * @param creator 控件 + */ + public void updateWidgetListener(XCreator creator) { + (creator.toData()).clearListeners(); + Nameable[] res = this.update(); + for (int i = 0; i < res.length; i++) { + NameObject nameObject = (NameObject) res[i]; + (creator.toData()).addListener((Listener) nameObject.getObject()); + } + + designer.fireTargetModified(); + checkButtonEnabled(); + } + + + /** + * 生成不重复的名字 + * + * @param prefix 名字前缀 + * @return 名字 + */ + @Override + public String createUnrepeatedName(String prefix) { + return getCommonHandlers().createUnrepeatedName(prefix); + } + + private void updateSelectedNameList(NameableCreator creator) { + String eventName = ((EventCreator) creator).getEventName(); + EventListWrapperPane wrapperPane = nameEdListMap.get(eventName); + wrapperPane.setVisible(true); + setSelectNameEdList(wrapperPane.getNameEdList()); + } + + private void setSelectNameEdList(UINameEdList nameEdList) { + if (this.selectNameEdList != null) { + this.selectNameEdList.clearSelection(); + } + this.selectNameEdList = nameEdList; + } + + @Override + public void onAddItem(NameableCreator creator) { + updateSelectedNameList(creator); + getCommonHandlers().onAddItem(creator); + } + + @Override + public void onRemoveItem() { + getCommonHandlers().onRemoveItem(); + refreshEventListWrapperPane(); + } + + @Override + public void onCopyItem() { + getCommonHandlers().onCopyItem(); + } + + @Override + public void onMoveUpItem() { + getCommonHandlers().onMoveUpItem(); + } + + @Override + public void onMoveDownItem() { + getCommonHandlers().onMoveDownItem(); + } + + @Override + public void onSortItem(boolean isAtoZ) { + Iterator> iterator = nameEdListMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + UINameEdList nameEdList = entry.getValue().getNameEdList(); + getCommonHandlers().onSortItem(isAtoZ, nameEdList); + } + + } + + @Override + public boolean isItemSelected() { + return getModel().getSize() > 0 && getSelectedIndex() != -1; + } + + + @Override + protected JPanel createControlUpdatePane() { + return JControlUpdatePane.newInstance(this); + } + + + @Override + public Nameable[] update() { + java.util.List res = new java.util.ArrayList(); + getControlUpdatePane().update(); + Iterator> iterator = nameEdListMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + UINameEdList nameEdList = entry.getValue().getNameEdList(); + DefaultListModel listModel = (DefaultListModel) nameEdList.getModel(); + for (int i = 0, len = listModel.getSize(); i < len; i++) { + res.add(((ListModelElement) listModel.getElementAt(i)).wrapper); + } + } + return res.toArray(new Nameable[0]); + } + + + @Override + public NameableCreator[] createNameableCreators() { + return new NameableCreator[]{ + new EventCreator(Widget.EVENT_STATECHANGE, EventPropertyTable.WidgetEventListenerUpdatePane.class) + }; + } + + @Override + public void saveSettings() { + if (isPopulating) { + return; + } + updateWidgetListener(creator); + } + + @Override + protected String title4PopupWindow() { + return "Event"; + } + + @Override + public String getAddItemText() { + return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Add_Event"); + } + + public BasicBeanPane createPaneByCreators(NameableCreator creator) { + try { + return creator.getUpdatePane().newInstance(); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + public BasicBeanPane createPaneByCreators(NameableCreator creator, String string) { + Constructor constructor = null; + try { + constructor = creator.getUpdatePane().getDeclaredConstructor(new Class[]{String.class}); + constructor.setAccessible(true); + return (BasicBeanPane) constructor.newInstance(string); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } + } + + @Override + public DefaultListModel getModel() { + if (this.selectNameEdList == null) { + return new DefaultListModel(); + } + return (DefaultListModel) this.selectNameEdList.getModel(); + } + + /** + * 检查是否符合规范 + * + * @throws Exception + */ + @Override + public void checkValid() throws Exception { + ((JControlUpdatePane) this.controlUpdatePane).checkValid(); + } + + @Override + public boolean hasInvalid(boolean isAdd) { + return getHelper().hasInvalid(isAdd); + } + + public void addNameable(Nameable nameable, int index) { + getHelper().addNameable(nameable, index); + popupEditDialog(); + } + + + /** + * 设置选中项 + * + * @param index 选中项的序列号 + */ + public void setSelectedIndex(int index) { + if (this.selectNameEdList != null) { + this.selectNameEdList.setSelectedIndex(index); + + } + } + + @Override + public int getSelectedIndex() { + if (this.selectNameEdList == null) { + return -1; + } + return this.selectNameEdList.getSelectedIndex(); + } + + + @Override + public ListModelElement getSelectedValue() { + if (this.selectNameEdList == null) { + return null; + } + return (ListModelElement) this.selectNameEdList.getSelectedValue(); + } + + @Override + public JControlUpdatePane getControlUpdatePane() { + return (JControlUpdatePane) controlUpdatePane; + } + + @Override + public JNameEdList getNameableList() { + return this.selectNameEdList; + } + + private void popupEditDialog() { + getHelper().popupEditDialog(null, this.selectNameEdList, this); + } + + + private class EventListWrapperPane extends JPanel { + private UINameEdList nameEdList; + + public EventListWrapperPane(String labelText, UINameEdList nameEdList) { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + UILabel label = new UILabel(labelText + Toolkit.i18nText("Fine-Design_Report_Event")); + label.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0)); + label.setBackground(Color.decode("#FFFFFF")); + label.setPreferredSize(new Dimension(226, 26)); + this.nameEdList = nameEdList; + this.add(label, BorderLayout.NORTH); + this.add(this.nameEdList, BorderLayout.CENTER); + } + + public UINameEdList getNameEdList() { + return this.nameEdList; + } + + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/WidgetPropertyPane.java b/designer-form/src/main/java/com/fr/design/mainframe/WidgetPropertyPane.java index c37b4ba9aa..fd64d3aabd 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/WidgetPropertyPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/WidgetPropertyPane.java @@ -6,13 +6,12 @@ import com.fr.design.constants.UIConstants; import com.fr.design.designer.beans.events.DesignerEditListener; import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.creator.*; -import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout; import com.fr.design.designer.creator.cardlayout.XWCardTagLayout; -import com.fr.design.designer.properties.EventPropertyTable; import com.fr.design.designer.properties.mobile.MobileBookMarkPropertyUI; import com.fr.design.designer.properties.mobile.MobileStylePropertyUI; import com.fr.design.form.util.FormDesignerUtils; import com.fr.design.fun.WidgetPropertyUIProvider; +import com.fr.design.gui.controlpane.EventPropertyPane; import com.fr.design.gui.ibutton.UIHeadGroup; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.ilable.UILabel; @@ -38,7 +37,7 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper private static final int PADDING = 10; private static final int PADDING_M = 12; private FormWidgetCardPane formWidgetCardPane; // 控件的属性表 - private EventPropertyTable eventTable; // 控件的事件表 + private EventPropertyPane eventTable; // 控件的事件表 private List widgetPropertyTables; // 这个变量应该是保存控件拓展的属性tab private List mobileExtraPropertyPanes; // 保存9.0设计器下移动端拓展的属性tab,舍弃JTable private FormDesigner designer; // 当前designer @@ -141,7 +140,7 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper * 创建事件表(事件选项卡不是JTable) */ private void createEventTable() { - eventTable = new EventPropertyTable(designer); + eventTable = new EventPropertyPane(designer); designer.addDesignerEditListener(new EventPropertyDesignerAdapter(eventTable)); } @@ -337,9 +336,9 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper * 事件表监听界面事件(编辑,选中) */ private class EventPropertyDesignerAdapter implements DesignerEditListener { - EventPropertyTable propertyTable; + EventPropertyPane propertyTable; - EventPropertyDesignerAdapter(EventPropertyTable eventTable) { + EventPropertyDesignerAdapter(EventPropertyPane eventTable) { this.propertyTable = eventTable; } From 12c8a86f3ad939a851fb07816df6c8e4fbfdf19a Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Mon, 17 May 2021 20:12:50 +0800 Subject: [PATCH 007/148] =?UTF-8?q?REPORT-51678=20=E5=A4=8D=E7=94=A8?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=90=88=E5=B9=B6=E4=B8=BBjar=E5=9B=BD?= =?UTF-8?q?=E9=99=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/CoverReportPane.java | 4 +- .../share/action/CreateComponentAction.java | 8 +-- .../share/action/InstallComponentAction.java | 4 +- .../share/constants/ComponentTypes.java | 34 +++++----- .../mainframe/share/constants/StyleTheme.java | 10 +-- .../share/exception/LackOfValueException.java | 2 +- .../share/generate/task/ComponentCreator.java | 2 +- .../generate/task/ComponentDesensitize.java | 2 +- .../share/generate/task/ComponentEncrypt.java | 2 +- .../task/ComponentGenerateComplete.java | 2 +- .../task/ComponentUploadComplete.java | 2 +- .../generate/task/ComponentUploader.java | 2 +- .../share/group/ui/GroupFileDialog.java | 4 +- .../share/group/ui/GroupMoveDialog.java | 4 +- .../select/ComponentTransformerImpl.java | 2 +- .../share/sort/OnlineWidgetSortType.java | 8 +-- .../mainframe/share/sort/WidgetSortType.java | 4 +- .../share/ui/base/DownloadProgressPane.java | 6 +- .../share/ui/base/FailureMessagePane.java | 4 +- .../mainframe/share/ui/base/LoadingPane.java | 2 +- .../mainframe/share/ui/base/NoMatchPane.java | 2 +- .../share/ui/block/LocalWidgetBlock.java | 14 ++-- .../share/ui/block/OnlineWidgetBlock.java | 4 +- .../ui/block/OnlineWidgetPackageBlock.java | 2 +- .../mainframe/share/ui/local/GroupPane.java | 14 ++-- .../share/ui/local/LocalPaneStatus.java | 6 +- .../share/ui/local/LocalWidgetRepoPane.java | 2 +- .../mainframe/share/ui/local/ManagePane.java | 20 +++--- .../mainframe/share/ui/local/ToolbarPane.java | 4 +- .../share/ui/menu/TemplateStoreMenu.java | 4 +- .../ui/online/OnlineDownloadPackagePane.java | 2 +- .../share/ui/online/OnlineWidgetRepoPane.java | 10 +-- .../share/ui/online/OnlineWidgetTabPane.java | 4 +- .../OnlineWidgetPackagesShowPane.java | 8 +-- .../share/ui/widgetfilter/FilterPane.java | 6 +- .../ui/widgetfilter/LocalWidgetFilter.java | 18 ++--- .../share/util/ShareComponentUtils.java | 2 +- .../mainframe/share/util/ShareUIUtils.java | 2 +- .../ui/config/ShareConfigContentPane.java | 8 +-- .../share/ui/config/ShareConfigPane.java | 15 ++-- .../ui/config/table/ConfigItemRender.java | 5 +- .../ui/config/table/ExpandEffectTable.java | 6 +- .../share/ui/generate/CoverUploadPane.java | 4 +- .../share/ui/generate/EffectContent.java | 2 +- .../share/ui/generate/PriceExpectPane.java | 6 +- .../share/ui/generate/ShareGeneratePane.java | 10 +-- .../share/ui/generate/ShareMainPane.java | 68 +++++++++---------- .../ui/generate/table/EffectItemRender.java | 6 +- 48 files changed, 181 insertions(+), 181 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/CoverReportPane.java b/designer-form/src/main/java/com/fr/design/mainframe/CoverReportPane.java index c71070ac1a..14b8aed7a3 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/CoverReportPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/CoverReportPane.java @@ -2,9 +2,9 @@ package com.fr.design.mainframe; import com.fr.base.BaseUtils; import com.fr.design.dialog.BasicPane; +import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.share.constants.ShareEntryKey; import com.fr.form.ui.Widget; -import com.fr.locale.InterProviderFactory; import com.fr.stable.Constants; import com.fr.stable.bridge.StableFactory; @@ -47,7 +47,7 @@ public class CoverReportPane extends CoverPane{ // 画配置文字 g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - g2d.drawString(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Help_Settings"),x + 30, 17); + g2d.drawString(Toolkit.i18nText("Fine-Design_Share_Help_Settings"),x + 30, 17); // 画图标 BufferedImage image = BaseUtils.readImage("com/fr/base/images/share/config.png"); g2d.drawImage(image, x + 10, 5, image.getWidth(), image.getHeight(), null); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/action/CreateComponentAction.java b/designer-form/src/main/java/com/fr/design/mainframe/share/action/CreateComponentAction.java index 4d714b1622..1baac868ff 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/action/CreateComponentAction.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/action/CreateComponentAction.java @@ -21,7 +21,6 @@ import com.fr.design.mainframe.DesignerFrame; import com.fr.design.mainframe.FormSelection; import com.fr.design.mainframe.JForm; import com.fr.design.mainframe.JTemplate; -import com.fr.design.mainframe.form.FormECCompositeProvider; import com.fr.design.mainframe.share.constants.ShareEntryKey; import com.fr.design.mainframe.share.select.ComponentTransformerFactory; import com.fr.design.parameter.ParameterInputPane; @@ -36,7 +35,6 @@ import com.fr.form.ui.DictionaryContainer; import com.fr.form.ui.ElementCaseEditor; import com.fr.form.ui.Widget; import com.fr.general.IOUtils; -import com.fr.locale.InterProviderFactory; import com.fr.log.FineLoggerFactory; import com.fr.report.cell.DefaultTemplateCellElement; import com.fr.report.cell.cellattr.core.group.DSColumn; @@ -95,7 +93,7 @@ public class CreateComponentAction extends UpdateAction { public CreateComponentAction(ShareUIAspect aspect) { this.putValue(Action.SMALL_ICON, null); - this.setName(Toolkit.i18nText("Fine-Plugin_Component_Create")); + this.setName(Toolkit.i18nText("Fine-Design_Share_Create")); this.aspect = aspect; } @@ -116,7 +114,7 @@ public class CreateComponentAction extends UpdateAction { // 获取选中的组件 Triple sharedTriple = ComponentTransformerFactory.getInstance().transform(selection); if (sharedTriple == null) { - FineJOptionPane.showMessageDialog(designerFrame, InterProviderFactory.getProvider().getLocText("Fine-Plugin_Select_Error_Tip"), + FineJOptionPane.showMessageDialog(designerFrame, Toolkit.i18nText("Fine-Design_Share_Select_Error_Tip"), Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"), ERROR_MESSAGE, IOUtils.readIcon("/com/fr/base/images/share/Information_Icon_warning_normal_32x32.png")); return; } @@ -149,7 +147,7 @@ public class CreateComponentAction extends UpdateAction { // ShareGuidePane moduleGuidePane = new ShareGuidePane(jt, widget, sharedTriple.getRight(), coverImage, parameterMap, aspect); ShareGuidePane.show(); } catch (Exception e) { - FineJOptionPane.showMessageDialog(designerFrame, InterProviderFactory.getProvider().getLocText("Fine-Plugin_Create_Share_Pane_Failed"), + FineJOptionPane.showMessageDialog(designerFrame, Toolkit.i18nText("Fine-Design_Share_Create_Share_Pane_Failed"), Toolkit.i18nText("Fine-Design_Basic_Error"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon")); FineLoggerFactory.getLogger().error(e.getMessage(), e); } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/action/InstallComponentAction.java b/designer-form/src/main/java/com/fr/design/mainframe/share/action/InstallComponentAction.java index 35e22964d9..d3173e36bf 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/action/InstallComponentAction.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/action/InstallComponentAction.java @@ -37,7 +37,7 @@ public class InstallComponentAction extends UpdateAction { public InstallComponentAction() { this.putValue(Action.SMALL_ICON, null); - this.setName(Toolkit.i18nText("Fine-Plugin_Component_Install")); + this.setName(Toolkit.i18nText("Fine-Design_Share_Install")); } @Override @@ -116,7 +116,7 @@ public class InstallComponentAction extends UpdateAction { }); dialog.setVisible(true); } else { - ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Plugin_Component_Share_Module_Install_Error")); + ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Design_Share_Share_Module_Install_Error")); } } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/constants/ComponentTypes.java b/designer-form/src/main/java/com/fr/design/mainframe/share/constants/ComponentTypes.java index f1d9ffaa0c..e7f30c7a28 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/constants/ComponentTypes.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/constants/ComponentTypes.java @@ -12,7 +12,7 @@ import java.util.Set; **/ public enum ComponentTypes implements ComponentType { - CHART("Fine-Plugin_Component_Type_Basic_Element") { + CHART("Fine-Design_Share_Type_Basic_Element") { @Override public List children(int device) { @@ -29,7 +29,7 @@ public enum ComponentTypes implements ComponentType { } }, - REPORT("Fine-Plugin_Component_Type_Report") { + REPORT("Fine-Design_Share_Type_Report") { @Override public List children(int device) { @@ -81,18 +81,18 @@ public enum ComponentTypes implements ComponentType { private enum ReportChildTypes { - INDICATOR_CARD("Fine-Plugin_Component_Type_Indicator_Card"), + INDICATOR_CARD("Fine-Design_Share_Type_Indicator_Card"), - TITLE("Fine-Plugin_Component_Type_Title"), + TITLE("Fine-Design_Share_Type_Title"), - DIMENSION_CHANGE("Fine-Plugin_Component_Type_Dimension_Change"), + DIMENSION_CHANGE("Fine-Design_Share_Type_Dimension_Change"), - FILL("Fine-Plugin_Component_Type_Fill", DisplayDevice.MOBILE), + FILL("Fine-Design_Share_Type_Fill", DisplayDevice.MOBILE), - Directory_Navigation("Fine-Plugin_Component_Type_Mobile_Directory_Navigation", DisplayDevice.MOBILE), + Directory_Navigation("Fine-Design_Share_Type_Mobile_Directory_Navigation", DisplayDevice.MOBILE), - SPECIAL_CARD("Fine-Plugin_Component_Type_Special_Card"); + SPECIAL_CARD("Fine-Design_Share_Type_Special_Card"); private String locale; @@ -135,23 +135,23 @@ public enum ComponentTypes implements ComponentType { private enum ChartChildTypes { - COLUMN_CHART("File-Plugin_Component_Type_Chart_Column"), + COLUMN_CHART("Fine-Design_Share_Type_Chart_Column"), - PIE_CHART("Fine-Plugin_Component_Type_Chart_Pie"), + PIE_CHART("Fine-Design_Share_Type_Chart_Pie"), - FOLD_LINE_CHART("Fine-Plugin_Component_Type_Chart_Fold_Line"), + FOLD_LINE_CHART("Fine-Design_Share_Type_Chart_Fold_Line"), - COMBINE_CHART("Fine-Plugin_Component_Type_Chart_Combine"), + COMBINE_CHART("Fine-Design_Share_Type_Chart_Combine"), - METER_CHART("Fine-Plugin_Component_Type_Chart_Meter"), + METER_CHART("Fine-Design_Share_Type_Chart_Meter"), - MAP_CHART("Fine-Plugin_Component_Type_Chart_Map"), + MAP_CHART("Fine-Design_Share_Type_Chart_Map"), - OTHERS("Fine-Plugin_Component_Type_Chart_Other"), + OTHERS("Fine-Design_Share_Type_Chart_Other"), - DETAIL_LIST("Fine-Plugin_Component_Type_Detail_List"), + DETAIL_LIST("Fine-Design_Share_Type_Detail_List"), - BASIC_WIDGET("Fine-Plugin_Component_Type_Basic_Widget"); + BASIC_WIDGET("Fine-Design_Share_Type_Basic_Widget"); private String locale; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/constants/StyleTheme.java b/designer-form/src/main/java/com/fr/design/mainframe/share/constants/StyleTheme.java index a3712f83c5..1738eb5cb6 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/constants/StyleTheme.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/constants/StyleTheme.java @@ -17,11 +17,11 @@ import java.util.List; */ public enum StyleTheme { - SIMPLE_FRESH("Fine-Plugin_Component_Style_Theme_Simple", "1"), - BUSINESS_STABLE("Fine-Plugin_Component_Style_Theme_Business", "2"), - LIVE_GORGEOUS("Fine-Plugin_Component_Style_Theme_Live", "3"), - COOL_TECHNOLOGY("Fine-Plugin_Component_Style_Theme_Cool", "4"), - OTHER_THEME("Fine-Plugin_Component_Style_Theme_Other", "5"); + SIMPLE_FRESH("Fine-Design_Share_Style_Theme_Simple", "1"), + BUSINESS_STABLE("Fine-Design_Share_Style_Theme_Business", "2"), + LIVE_GORGEOUS("Fine-Design_Share_Style_Theme_Live", "3"), + COOL_TECHNOLOGY("Fine-Design_Share_Style_Theme_Cool", "4"), + OTHER_THEME("Fine-Design_Share_Style_Theme_Other", "5"); private final String local; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/exception/LackOfValueException.java b/designer-form/src/main/java/com/fr/design/mainframe/share/exception/LackOfValueException.java index 04c6b9b49a..53d0b1258c 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/exception/LackOfValueException.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/exception/LackOfValueException.java @@ -9,6 +9,6 @@ public class LackOfValueException extends RuntimeException{ public LackOfValueException() { - super(Toolkit.i18nText("Fine-Plugin_Lack_Val")); + super(Toolkit.i18nText("Fine-Design_Share_Lack_Val")); } } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentCreator.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentCreator.java index e675d7025f..3d95be0102 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentCreator.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentCreator.java @@ -72,7 +72,7 @@ public class ComponentCreator extends AbstractComponentCreatorProcessor { @Override public String getLoadingText() { - return Toolkit.i18nText("Fine-Plugin_Component_Generate_Ing"); + return Toolkit.i18nText("Fine-Design_Share_Generate_Ing"); } /** diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentDesensitize.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentDesensitize.java index c08a132b7d..5c12877eee 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentDesensitize.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentDesensitize.java @@ -39,6 +39,6 @@ public class ComponentDesensitize implements ComponentBanner { @Override public String getLoadingText() { - return Toolkit.i18nText("Fine-Plugin_Component_Desensitize"); + return Toolkit.i18nText("Fine-Design_Share_Desensitize"); } } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentEncrypt.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentEncrypt.java index be959aac8c..b0cd6ef574 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentEncrypt.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentEncrypt.java @@ -23,6 +23,6 @@ public class ComponentEncrypt implements ComponentBanner { @Override public String getLoadingText() { - return Toolkit.i18nText("Fine-Plugin_Component_Encrypt"); + return Toolkit.i18nText("Fine-Design_Share_Encrypt"); } } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentGenerateComplete.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentGenerateComplete.java index 1e3b905adc..47909b849f 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentGenerateComplete.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentGenerateComplete.java @@ -14,6 +14,6 @@ public class ComponentGenerateComplete implements ComponentBanner { @Override public String getLoadingText() { - return Toolkit.i18nText("Fine-Plugin_Component_Generate_Success"); + return Toolkit.i18nText("Fine-Design_Share_Generate_Success"); } } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentUploadComplete.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentUploadComplete.java index 5113b8684f..289e2074c0 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentUploadComplete.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentUploadComplete.java @@ -14,6 +14,6 @@ public class ComponentUploadComplete implements ComponentBanner { @Override public String getLoadingText() { - return Toolkit.i18nText("Fine-Plugin_Component_Upload_Success"); + return Toolkit.i18nText("Fine-Design_Share_Upload_Success"); } } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentUploader.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentUploader.java index 8e044f7a35..ef74d34208 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentUploader.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentUploader.java @@ -74,7 +74,7 @@ public class ComponentUploader implements ComponentBanner { @Override public String getLoadingText() { - return Toolkit.i18nText("Fine-Plugin_Component_Encrypt"); + return Toolkit.i18nText("Fine-Design_Share_Encrypt"); } private boolean upload0(String path) throws Exception { diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/group/ui/GroupFileDialog.java b/designer-form/src/main/java/com/fr/design/mainframe/share/group/ui/GroupFileDialog.java index 33a6824f4b..f4b79944ea 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/group/ui/GroupFileDialog.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/group/ui/GroupFileDialog.java @@ -100,7 +100,7 @@ abstract public class GroupFileDialog extends BaseGroupDialog { if (isDuplicate(name)) { nameField.selectAll(); // 如果文件名已存在,则灰掉确认按钮 - warnLabel.setText(Toolkit.i18nText("Fine-Plugin_Component_Group_Repeat_Name_Info")); + warnLabel.setText(Toolkit.i18nText("Fine-Design_Share_Group_Repeat_Name_Info")); warnLabel.setVisible(true); confirmButton.setEnabled(false); } else { @@ -122,7 +122,7 @@ abstract public class GroupFileDialog extends BaseGroupDialog { private UILabel creteNewNameLabel() { // 输入框前提示 - UILabel newNameLabel = new UILabel(Toolkit.i18nText("Fine-Plugin_Component_Group_Enter_New_Folder_Name")); + UILabel newNameLabel = new UILabel(Toolkit.i18nText("Fine-Design_Share_Group_Enter_New_Folder_Name")); newNameLabel.setHorizontalAlignment(SwingConstants.RIGHT); newNameLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 10)); newNameLabel.setPreferredSize(new Dimension(84, 16)); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/group/ui/GroupMoveDialog.java b/designer-form/src/main/java/com/fr/design/mainframe/share/group/ui/GroupMoveDialog.java index 64dae45da4..c39f195a0e 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/group/ui/GroupMoveDialog.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/group/ui/GroupMoveDialog.java @@ -26,7 +26,7 @@ abstract public class GroupMoveDialog extends BaseGroupDialog { this.setLayout(new BorderLayout()); this.setModal(true); - setTitle(Toolkit.i18nText("Fine-Plugin_Component_Group_Move")); + setTitle(Toolkit.i18nText("Fine-Design_Share_Group_Move")); // 标签 UILabel newNameLabel = creteNewNameLabel(); // 输入框 @@ -65,7 +65,7 @@ abstract public class GroupMoveDialog extends BaseGroupDialog { private UILabel creteNewNameLabel() { // 输入框前提示 - UILabel newNameLabel = new UILabel(Toolkit.i18nText("Fine-Plugin_Component_Group_Select")); + UILabel newNameLabel = new UILabel(Toolkit.i18nText("Fine-Design_Share_Group_Select")); newNameLabel.setHorizontalAlignment(SwingConstants.RIGHT); newNameLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 10)); newNameLabel.setPreferredSize(new Dimension(60, 16)); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/select/ComponentTransformerImpl.java b/designer-form/src/main/java/com/fr/design/mainframe/share/select/ComponentTransformerImpl.java index a7b23a994f..af86126083 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/select/ComponentTransformerImpl.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/select/ComponentTransformerImpl.java @@ -109,7 +109,7 @@ public class ComponentTransformerImpl implements ComponentTransformer { selectedWidget = (Widget) selectedWidget.clone(); } catch (CloneNotSupportedException e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); - FineJOptionPane.showMessageDialog(null, Inter.getLocText("FR-Plugin_Share_Module_Failed")); + FineJOptionPane.showMessageDialog(null, Inter.getLocText("Fine-Design_Share_Module_Failed")); } return new ImmutableTriple<>(selectedWidget, selectedCreator, selectedTriple); } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/sort/OnlineWidgetSortType.java b/designer-form/src/main/java/com/fr/design/mainframe/share/sort/OnlineWidgetSortType.java index 94a17d8553..437835662a 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/sort/OnlineWidgetSortType.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/sort/OnlineWidgetSortType.java @@ -75,7 +75,7 @@ public enum OnlineWidgetSortType implements SortType { @Override public String getDisplayName() { - return Toolkit.i18nText("Fine-Plugin_Component_Composite"); + return Toolkit.i18nText("Fine-Design_Share_Composite"); } }, @@ -99,7 +99,7 @@ public enum OnlineWidgetSortType implements SortType { @Override public String getDisplayName() { - return Toolkit.i18nText("Fine-Plugin_Component_Sale"); + return Toolkit.i18nText("Fine-Design_Share_Sale"); } }, @@ -122,7 +122,7 @@ public enum OnlineWidgetSortType implements SortType { @Override public String getDisplayName() { - return Toolkit.i18nText("Fine-Plugin_Component_New_Product"); + return Toolkit.i18nText("Fine-Design_Share_New_Product"); } } //现在不用,以后可能会用,先注释掉 @@ -146,7 +146,7 @@ public enum OnlineWidgetSortType implements SortType { @Override public String getDisplayName() { - return Toolkit.i18nText("Fine-Plugin_Component_Price"); + return Toolkit.i18nText("Fine-Design_Share_Price"); } };*/ diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/sort/WidgetSortType.java b/designer-form/src/main/java/com/fr/design/mainframe/share/sort/WidgetSortType.java index a4df3ac41a..a6b8d49b2b 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/sort/WidgetSortType.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/sort/WidgetSortType.java @@ -33,7 +33,7 @@ public enum WidgetSortType implements SortType { @Override public String getDisplayName() { - return Toolkit.i18nText("Fine-Plugin_Component_Install_Time"); + return Toolkit.i18nText("Fine-Design_Share_Install_Time"); } }, COMPONENT_NAME { @@ -49,7 +49,7 @@ public enum WidgetSortType implements SortType { @Override public String getDisplayName() { - return Toolkit.i18nText("Fine-Plugin_Component_Sort_Name"); + return Toolkit.i18nText("Fine-Design_Share_Sort_Name"); } } } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/DownloadProgressPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/DownloadProgressPane.java index c25eab1fda..c7f09f453b 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/DownloadProgressPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/DownloadProgressPane.java @@ -48,7 +48,7 @@ public class DownloadProgressPane extends JPanel { labelPane.add(closeLabel, BorderLayout.EAST); labelPane.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 7)); - UILabel downloadTipLabel = new UILabel(Toolkit.i18nText("Fine-Plugin_Component_Package_Downloading_Tip")); + UILabel downloadTipLabel = new UILabel(Toolkit.i18nText("Fine-Design_Share_Package_Downloading_Tip")); downloadTipLabel.setPreferredSize(new Dimension(240, 90)); downloadTipLabel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); downloadTipLabel.setForeground(Color.WHITE); @@ -103,8 +103,8 @@ public class DownloadProgressPane extends JPanel { private enum ProcessState { - DOWNLOADING(Toolkit.i18nText("Fine-Plugin_Component_Package_Downloading")), - INSTALLING(Toolkit.i18nText("Fine-Plugin_Component_Package_Installing")); + DOWNLOADING(Toolkit.i18nText("Fine-Design_Share_Package_Downloading")), + INSTALLING(Toolkit.i18nText("Fine-Design_Share_Package_Installing")); private final String tip; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/FailureMessagePane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/FailureMessagePane.java index 7a2f9f6ab9..52a57ed4bd 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/FailureMessagePane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/FailureMessagePane.java @@ -22,7 +22,7 @@ import java.awt.FlowLayout; public class FailureMessagePane extends BasicPane { public FailureMessagePane(String str) { UILabel imageLabel = new UILabel(IOUtils.readIcon("/com/fr/base/images/share/error_icon.png")); - UILabel label = new UILabel(Toolkit.i18nText("Fine-Plugin_Component_Share_Modules_Error")); + UILabel label = new UILabel(Toolkit.i18nText("Fine-Design_Share_Share_Modules_Error")); UITextPane textPane = new UITextPane(); UIScrollPane jScrollPane = new UIScrollPane(textPane); JPanel panel = new JPanel(); @@ -52,7 +52,7 @@ public class FailureMessagePane extends BasicPane { @Override protected String title4PopupWindow() { - return Toolkit.i18nText("Fine-Plugin_Component_Dialog_Message"); + return Toolkit.i18nText("Fine-Design_Share_Dialog_Message"); } } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/LoadingPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/LoadingPane.java index 6504b85769..ee0f377741 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/LoadingPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/LoadingPane.java @@ -17,7 +17,7 @@ import java.awt.Dimension; public class LoadingPane extends JPanel { public LoadingPane() { - this(Toolkit.i18nText("Fine-Plugin_Component_Online_Loading")); + this(Toolkit.i18nText("Fine-Design_Share_Online_Loading")); } public LoadingPane(String message) { diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/NoMatchPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/NoMatchPane.java index e36d4d02ec..856bfd2991 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/NoMatchPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/NoMatchPane.java @@ -27,7 +27,7 @@ public class NoMatchPane extends JPanel { picLabel.setIcon(BaseUtils.readIcon("com/fr/base/images/share/no_match_icon.png")); picLabel.setHorizontalAlignment(SwingConstants.CENTER); picLabel.setPreferredSize(new Dimension(240, 100)); - UILabel label = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Plugin_Component_No_Match_Result"), SwingConstants.CENTER); + UILabel label = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Share_No_Match_Result"), SwingConstants.CENTER); label.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0)); label.setForeground(Color.gray); label.setPreferredSize(new Dimension(240, 20)); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/LocalWidgetBlock.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/LocalWidgetBlock.java index b72f5c5856..55daa46ee1 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/LocalWidgetBlock.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/LocalWidgetBlock.java @@ -203,7 +203,7 @@ public class LocalWidgetBlock extends PreviewWidgetBlock shareId = no.getBindInfo().getId(); creatorSource = getGroup().getElCaseEditorById(shareId); if (creatorSource == null) { - ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Plugin_Component_Drag_Error_Info")); + ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Design_Share_Drag_Error_Info")); return; } creatorSource.setWidgetID(UUID.randomUUID().toString()); @@ -265,7 +265,7 @@ public class LocalWidgetBlock extends PreviewWidgetBlock private class MoveGroupAction extends UpdateAction { public MoveGroupAction() { this.putValue(Action.SMALL_ICON, null); - this.setName(Toolkit.i18nText("Fine-Plugin_Component_Group_Move")); + this.setName(Toolkit.i18nText("Fine-Design_Share_Group_Move")); } @Override @@ -280,7 +280,7 @@ public class LocalWidgetBlock extends PreviewWidgetBlock ShareWidgetInfoManager.getInstance().saveXmlInfo(); LocalWidgetRepoPane.getInstance().refreshShowPanel(false); } else { - ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Plugin_Component_Group_Move_Fail_Message")); + ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Design_Share_Group_Move_Fail_Message")); } } @@ -291,19 +291,19 @@ public class LocalWidgetBlock extends PreviewWidgetBlock private class RemoveAction extends UpdateAction { public RemoveAction() { this.putValue(Action.SMALL_ICON, null); - this.setName(Toolkit.i18nText("Fine-Plugin_Component_Remove")); + this.setName(Toolkit.i18nText("Fine-Design_Share_Remove")); } @Override public void actionPerformed(ActionEvent e) { int rv = FineJOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), - Toolkit.i18nText("Fine-Plugin_Component_Remove_Info"), - Toolkit.i18nText("Fine-Plugin_Component_Group_Confirm"), + Toolkit.i18nText("Fine-Design_Share_Remove_Info"), + Toolkit.i18nText("Fine-Design_Share_Group_Confirm"), FineJOptionPane.YES_NO_OPTION ); if (rv == FineJOptionPane.YES_OPTION) { if (!WidgetSelectedManager.getInstance().unInstallSelect(getGroup().getGroupName(), getWidget().getId())) { - FineJOptionPane.showMessageDialog(null, Toolkit.i18nText("Fine-Plugin_Component_Remove_Failure")); + FineJOptionPane.showMessageDialog(null, Toolkit.i18nText("Fine-Design_Share_Remove_Failure")); } LocalWidgetRepoPane.getInstance().refreshShowPanel(getGroup()); } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java index 0249673f01..84b490731d 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java @@ -134,7 +134,7 @@ public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock { shareId = widget.getUuid(); creatorSource = ShareUtils.getElCaseEditorById(shareId); if (creatorSource == null) { - ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Plugin_Component_Drag_Error_Info")); + ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Design_Share_Drag_Error_Info")); return; } creatorSource.setWidgetID(UUID.randomUUID().toString()); @@ -199,7 +199,7 @@ public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock { if (get()) { LocalWidgetRepoPane.getInstance().refreshShowPanel(); } else { - ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Plugin_Component_Download_Failed")); + ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Design_Share_Download_Failed")); } } catch (InterruptedException e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetPackageBlock.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetPackageBlock.java index f22ad5b83a..4b84585940 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetPackageBlock.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetPackageBlock.java @@ -29,7 +29,7 @@ public class OnlineWidgetPackageBlock extends AbstractOnlineWidgetBlock { UILabel label = new UILabel(widget.getName(), UILabel.CENTER); label.setToolTipText(widget.getName()); southPane.add(label, BorderLayout.CENTER); - UILabel detailLabel = new UILabel(Toolkit.i18nText("Fine-Plugin_Component_Online_Package_Detail")); + UILabel detailLabel = new UILabel(Toolkit.i18nText("Fine-Design_Share_Online_Package_Detail")); detailLabel.setForeground(TEXT_COLOR); detailLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); detailLabel.addMouseListener(new MouseClickListener() { diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/GroupPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/GroupPane.java index b652bd6fb9..7f9317b9d5 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/GroupPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/GroupPane.java @@ -309,12 +309,12 @@ class GroupPane extends JPanel { private class RenameAction extends UpdateAction { public RenameAction() { this.putValue(Action.SMALL_ICON, null); - this.setName(Toolkit.i18nText("Fine-Plugin_Component_Group_Rename")); + this.setName(Toolkit.i18nText("Fine-Design_Share_Group_Rename")); } @Override public void actionPerformed(ActionEvent e) { - new GroupFileDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Plugin_Component_Group_Rename", group.getGroupName())) { + new GroupFileDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Share_Group_Rename", group.getGroupName())) { @Override protected void confirmClose() { this.dispose(); @@ -323,7 +323,7 @@ class GroupPane extends JPanel { titleLabel.setText(groupName); repaint(); } else { - ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Plugin_Component_Group_Rename_Failure")); + ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Design_Share_Group_Rename_Failure")); } } @@ -339,22 +339,22 @@ class GroupPane extends JPanel { private class RemoveAction extends UpdateAction { public RemoveAction() { this.putValue(Action.SMALL_ICON, null); - this.setName(Toolkit.i18nText("Fine-Plugin_Component_Group_Remove")); + this.setName(Toolkit.i18nText("Fine-Design_Share_Group_Remove")); } @Override public void actionPerformed(ActionEvent e) { int rv = FineJOptionPane.showConfirmDialog( DesignerContext.getDesignerFrame(), - Toolkit.i18nText("Fine-Plugin_Component_Group_Remove_Info"), - Toolkit.i18nText("Fine-Plugin_Component_Group_Confirm"), + Toolkit.i18nText("Fine-Design_Share_Group_Remove_Info"), + Toolkit.i18nText("Fine-Design_Share_Group_Confirm"), FineJOptionPane.YES_NO_OPTION ); if (rv == FineJOptionPane.YES_OPTION) { if (DefaultShareGroupManager.getInstance().removeGroup(group)) { LocalWidgetRepoPane.getInstance().removeGroup(group.getGroupName()); } else { - ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Plugin_Component_Group_Remove_Failure")); + ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Design_Share_Group_Remove_Failure")); } } } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalPaneStatus.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalPaneStatus.java index 9ad66d9e9b..d568072452 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalPaneStatus.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalPaneStatus.java @@ -48,9 +48,9 @@ enum LocalPaneStatus { panel.add(picLabel, BorderLayout.CENTER); JPanel labelPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); - UILabel topLabel = new UILabel(Toolkit.i18nText("Fine-Plugin_Component_Empty_First"), SwingConstants.CENTER); + UILabel topLabel = new UILabel(Toolkit.i18nText("Fine-Design_Share_Empty_First"), SwingConstants.CENTER); topLabel.setForeground(Color.GRAY); - UILabel bottomLabel = new UILabel(Toolkit.i18nText("Fine-Plugin_Component_Empty_Second"), SwingConstants.CENTER); + UILabel bottomLabel = new UILabel(Toolkit.i18nText("Fine-Design_Share_Empty_Second"), SwingConstants.CENTER); bottomLabel.setForeground(Color.GRAY); labelPanel.add(topLabel, BorderLayout.CENTER); labelPanel.add(bottomLabel, BorderLayout.SOUTH); @@ -79,7 +79,7 @@ enum LocalPaneStatus { INSTALLING { @Override public JPanel getPanel() { - return new LoadingPane(Toolkit.i18nText("Fine-Plugin_Component_installing")); + return new LoadingPane(Toolkit.i18nText("Fine-Design_Share_installing")); } }; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetRepoPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetRepoPane.java index 061b630ff0..d190ca7363 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetRepoPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetRepoPane.java @@ -261,6 +261,6 @@ public class LocalWidgetRepoPane extends BasicPane { @Override protected String title4PopupWindow() { - return Toolkit.i18nText("Fine-Plugin_Component_Local_Widget"); + return Toolkit.i18nText("Fine-Design_Share_Local_Widget"); } } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ManagePane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ManagePane.java index 41cae7489c..4e0cd9aa4e 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ManagePane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ManagePane.java @@ -96,7 +96,7 @@ class ManagePane extends JPanel implements ShareUIAspect { */ private UIButton createAddComponentButton() { return createManageButton( - Toolkit.i18nText("Add"), + Toolkit.i18nText("Fine-Design_Share_Add"), IOUtils.readIcon("/com/fr/base/images/share/filter_combo.png"), e -> { //创建组件和安装组件的弹窗 @@ -116,7 +116,7 @@ class ManagePane extends JPanel implements ShareUIAspect { */ private UIButton createManageButton() { return createManageButton( - Toolkit.i18nText("Manage"), + Toolkit.i18nText("Fine-Design_Share_Manage"), e -> replacePanel(true) ); } @@ -126,8 +126,8 @@ class ManagePane extends JPanel implements ShareUIAspect { */ private UIButton createAddGroupButton() { return createManageButton( - Toolkit.i18nText("Group_Add"), - e -> new GroupFileDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Plugin_Component_Group_Add")) { + Toolkit.i18nText("Fine-Design_Share_Group_Add"), + e -> new GroupFileDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Share_Group_Add")) { @Override protected void confirmClose() { this.dispose(); @@ -151,7 +151,7 @@ class ManagePane extends JPanel implements ShareUIAspect { private UIButton createCancelButton() { return createManageButton( - Toolkit.i18nText("Group_Cancel"), + Toolkit.i18nText("Fine-Design_Share_Group_Cancel"), e -> replacePanel(false) ); } @@ -177,13 +177,13 @@ class ManagePane extends JPanel implements ShareUIAspect { private UIButton createDeleteSelectedButton() { return createManageButton( - Toolkit.i18nText("Select_Remove"), + Toolkit.i18nText("Fine-Design_Share_Select_Remove"), new Color(0xeb1d1f), e -> { int rv = FineJOptionPane.showConfirmDialog( DesignerContext.getDesignerFrame(), - Toolkit.i18nText("Fine-Plugin_Component_Remove_Info"), - Toolkit.i18nText("Fine-Plugin_Component_Group_Confirm"), + Toolkit.i18nText("Fine-Design_Share_Remove_Info"), + Toolkit.i18nText("Fine-Design_Share_Group_Confirm"), FineJOptionPane.YES_NO_OPTION ); if (rv == FineJOptionPane.YES_OPTION) { @@ -200,7 +200,7 @@ class ManagePane extends JPanel implements ShareUIAspect { private UIButton createMoveGroupButton() { return createManageButton( - Toolkit.i18nText("Group_Move"), + Toolkit.i18nText("Fine-Design_Share_Group_Move"), e -> new GroupMoveDialog(DesignerContext.getDesignerFrame()) { @Override protected void confirmClose() { @@ -211,7 +211,7 @@ class ManagePane extends JPanel implements ShareUIAspect { replacePanel(false); } else { LocalWidgetRepoPane.getInstance().refreshShowPanel(); - ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Plugin_Component_Group_Move_Fail_Message")); + ShareUIUtils.showErrorMessageDialog(Toolkit.i18nText("Fine-Design_Share_Group_Move_Fail_Message")); } } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ToolbarPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ToolbarPane.java index 2a7fcc50bf..4a32b149ed 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ToolbarPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ToolbarPane.java @@ -81,7 +81,7 @@ class ToolbarPane extends JPanel { private UIButton createSearchButton() { return createToolButton( IOUtils.readIcon("/com/fr/base/images/share/search_icon.png"), - Toolkit.i18nText("Fine-Plugin_Component_Search"), + Toolkit.i18nText("Fine-Design_Share_Search"), e -> { cardLayout.show(centerPane, SEARCH); searchTextField.requestFocus(); @@ -92,7 +92,7 @@ class ToolbarPane extends JPanel { private UIButton createSortButton() { return createToolButton( IOUtils.readIcon("/com/fr/base/images/share/sort_icon.png"), - Toolkit.i18nText("Fine-Plugin_Component_Sort"), + Toolkit.i18nText("Fine-Design_Share_Sort"), e -> { UIPopupMenu popupMenu = new UIPopupMenu(); popupMenu.setOnlyText(true); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/TemplateStoreMenu.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/TemplateStoreMenu.java index c0fe1cbd08..7346cb1f5a 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/TemplateStoreMenu.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/TemplateStoreMenu.java @@ -2,11 +2,11 @@ package com.fr.design.mainframe.share.ui.menu; import com.fr.base.BaseUtils; import com.fr.design.actions.UpdateAction; +import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.share.collect.ComponentCollector; import com.fr.design.menu.MenuKeySet; import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; -import com.fr.locale.InterProviderFactory; import javax.swing.KeyStroke; import java.awt.event.ActionEvent; @@ -29,7 +29,7 @@ public class TemplateStoreMenu extends UpdateAction { @Override public String getMenuName() { - return InterProviderFactory.getProvider().getLocText("Fine-Plugin_Template_Store"); + return Toolkit.i18nText("Fine-Design_Share_Template_Store"); } @Override diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineDownloadPackagePane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineDownloadPackagePane.java index e4f14a9f1d..1bfac26374 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineDownloadPackagePane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineDownloadPackagePane.java @@ -103,7 +103,7 @@ public class OnlineDownloadPackagePane extends OnlineWidgetSelectPane { @Override public void mouseClicked(MouseEvent e) { int returnVal = FineJOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), - Toolkit.i18nText("Fine-Plugin_Component_Download_Cancel_Confirm"), Toolkit.i18nText("Fine-Plugin_Component_Group_Confirm"), + Toolkit.i18nText("Fine-Design_Share_Download_Cancel_Confirm"), Toolkit.i18nText("Fine-Design_Share_Group_Confirm"), FineJOptionPane.OK_CANCEL_OPTION); if (returnVal == FineJOptionPane.OK_OPTION) { //取消下载线程 diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetRepoPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetRepoPane.java index aa94801770..af329cde8b 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetRepoPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetRepoPane.java @@ -50,7 +50,7 @@ public class OnlineWidgetRepoPane extends BasicPane { @Override protected String title4PopupWindow() { - return Toolkit.i18nText("Fine-Plugin_Component_Online"); + return Toolkit.i18nText("Fine-Design_Share_Online"); } public OnlineWidgetRepoPane() { @@ -146,9 +146,9 @@ public class OnlineWidgetRepoPane extends BasicPane { imagePanel.setPreferredSize(new Dimension(240, 96)); imagePanel.setHorizontalAlignment(SwingConstants.CENTER); panel.add(imagePanel); - UILabel uiLabel = tipLabel(Toolkit.i18nText("Fine-Plugin_Component_Internet_Connect_Failed")); + UILabel uiLabel = tipLabel(Toolkit.i18nText("Fine-Design_Share_Internet_Connect_Failed")); uiLabel.setForeground(Color.decode("#8F8F92")); - UILabel reloadLabel = tipLabel(Toolkit.i18nText("Fine-Plugin_Component_Online_Reload")); + UILabel reloadLabel = tipLabel(Toolkit.i18nText("Fine-Design_Share_Online_Reload")); reloadLabel.setForeground(Color.decode("#419BF9")); reloadLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); reloadLabel.addMouseListener(new MouseClickListener() { @@ -160,9 +160,9 @@ public class OnlineWidgetRepoPane extends BasicPane { }); - UILabel tipLabel1 = tipLabel(Toolkit.i18nText("Fine-Plugin_Component_Internet_Connect_Failed_Tip1")); + UILabel tipLabel1 = tipLabel(Toolkit.i18nText("Fine-Design_Share_Internet_Connect_Failed_Tip1")); tipLabel1.setForeground(Color.decode("#8F8F92")); - UILabel tipLabel2 = tipLabel(Toolkit.i18nText("Fine-Plugin_Component_Internet_Connect_Failed_Tip2")); + UILabel tipLabel2 = tipLabel(Toolkit.i18nText("Fine-Design_Share_Internet_Connect_Failed_Tip2")); tipLabel2.setForeground(Color.decode("#8F8F92")); UILabel tipLabel3 = tipLabel(MARKET_URL); tipLabel3.setForeground(Color.decode("#8F8F92")); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetTabPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetTabPane.java index 1ea4e85a43..96837fd3c1 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetTabPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetTabPane.java @@ -15,8 +15,8 @@ import java.awt.CardLayout; * Created by kerry on 2020-10-19 */ public class OnlineWidgetTabPane extends JPanel { - private static final String COMPONENT = com.fr.design.i18n.Toolkit.i18nText("Fine-Plugin_Component"); - private static final String COMPONENT_PACKAGE = com.fr.design.i18n.Toolkit.i18nText("Fine-Plugin_Component_Package"); + private static final String COMPONENT = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Share"); + private static final String COMPONENT_PACKAGE = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Share_Package"); private CardLayout cardLayout; private JPanel centerPane; private boolean packagePaneCreated = false; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/widgetpackage/OnlineWidgetPackagesShowPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/widgetpackage/OnlineWidgetPackagesShowPane.java index 8dbdf6add3..d9697495b4 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/widgetpackage/OnlineWidgetPackagesShowPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/widgetpackage/OnlineWidgetPackagesShowPane.java @@ -61,14 +61,14 @@ public class OnlineWidgetPackagesShowPane extends AbstractOnlineWidgetShowPane { cardLayout.show(centerPane, WIDGETS_INFO); } }); - downloadLabel = createLabel(Toolkit.i18nText("Fine-Plugin_Component_Download_All_Component"), new MouseClickListener() { + downloadLabel = createLabel(Toolkit.i18nText("Fine-Design_Share_Download_All_Component"), new MouseClickListener() { @Override public void mouseClicked(MouseEvent e) { - String message = Toolkit.i18nText("Fine-Plugin_Component_Download_All_Component_Message") + String message = Toolkit.i18nText("Fine-Design_Share_Download_All_Component_Message") + "\n" - + Toolkit.i18nText("Fine-Plugin_Component_Total") + + Toolkit.i18nText("Fine-Design_Share_Total") + onlineWidgetSelectPane.getSharableWidgetNum() - + Toolkit.i18nText("Fine-Plugin_Component_Piece"); + + Toolkit.i18nText("Fine-Design_Share_Piece"); int returnValue = FineJOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), message, Toolkit.i18nText("Fine-Design_Basic_Confirm"), FineJOptionPane.YES_NO_OPTION); if (returnValue == FineJOptionPane.OK_OPTION && onlineWidgetSelectPane.getSharableWidgetNum() != 0) { downLoadPackage(); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/FilterPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/FilterPane.java index 552f81d387..ce976e2171 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/FilterPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/FilterPane.java @@ -56,7 +56,7 @@ public class FilterPane extends JPanel { jPanel.setBorder(BorderFactory.createLineBorder(Color.decode("#D9DADD"))); this.add(jPanel, BorderLayout.CENTER); jPanel.setBackground(Color.WHITE); - this.filterLabel = new UILabel(Toolkit.i18nText("Fine-Plugin_Component_Online_No_Filter"), SwingConstants.LEFT); + this.filterLabel = new UILabel(Toolkit.i18nText("Fine-Design_Share_Online_No_Filter"), SwingConstants.LEFT); filterLabel.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0)); filterLabel.setPreferredSize(new Dimension(80, 20)); filterLabel.setForeground(Color.decode("#8F8F92")); @@ -207,13 +207,13 @@ public class FilterPane extends JPanel { } private void switchToNoFilter() { - filterLabel.setText(Toolkit.i18nText("Fine-Plugin_Component_Online_No_Filter")); + filterLabel.setText(Toolkit.i18nText("Fine-Design_Share_Online_No_Filter")); filterLabel.setForeground(Color.decode("#8F8F92")); filterLabel.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } private void switchToClearFilter() { - filterLabel.setText(Toolkit.i18nText("Fine-Plugin_Component_Online_Clear_Filter")); + filterLabel.setText(Toolkit.i18nText("Fine-Design_Share_Online_Clear_Filter")); filterLabel.setForeground(Color.decode("#419BF9")); filterLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/LocalWidgetFilter.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/LocalWidgetFilter.java index 47b2979c72..259e6fcc9b 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/LocalWidgetFilter.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/LocalWidgetFilter.java @@ -120,19 +120,19 @@ public class LocalWidgetFilter { private boolean sameType(WidgetFilterInfo filterInfo, DefaultSharableWidget bindInfo) { //旧:其他 新:其它图表 - boolean other = StringUtils.equals(filterInfo.getName(), Toolkit.i18nText("Fine-Plugin_Component_Type_Chart_Other")) - && (StringUtils.equals(bindInfo.getChildClassify(), Toolkit.i18nText("Fine-Plugin_Component_Type_Chart_Other")) - || StringUtils.equals(bindInfo.getChildClassify(), Toolkit.i18nText("Fine-Plugin_Component_Type_Others"))); + boolean other = StringUtils.equals(filterInfo.getName(), Toolkit.i18nText("Fine-Design_Share_Type_Chart_Other")) + && (StringUtils.equals(bindInfo.getChildClassify(), Toolkit.i18nText("Fine-Design_Share_Type_Chart_Other")) + || StringUtils.equals(bindInfo.getChildClassify(), Toolkit.i18nText("Fine-Design_Share_Type_Others"))); //旧:移动维度切换 新:多维度切换 - boolean dimensionChange = StringUtils.equals(filterInfo.getName(), Toolkit.i18nText("Fine-Plugin_Component_Type_Dimension_Change")) - && (StringUtils.equals(bindInfo.getChildClassify(), Toolkit.i18nText("Fine-Plugin_Component_Type_Mobile_Dimension_Change")) - || StringUtils.equals(bindInfo.getChildClassify(), Toolkit.i18nText("Fine-Plugin_Component_Type_Dimension_Change"))); + boolean dimensionChange = StringUtils.equals(filterInfo.getName(), Toolkit.i18nText("Fine-Design_Share_Type_Dimension_Change")) + && (StringUtils.equals(bindInfo.getChildClassify(), Toolkit.i18nText("Fine-Design_Share_Type_Mobile_Dimension_Change")) + || StringUtils.equals(bindInfo.getChildClassify(), Toolkit.i18nText("Fine-Design_Share_Type_Dimension_Change"))); //旧:移动填报 新:填报 - boolean fill = StringUtils.equals(filterInfo.getName(), Toolkit.i18nText("Fine-Plugin_Component_Type_Fill")) - && (StringUtils.equals(bindInfo.getChildClassify(), Toolkit.i18nText("Fine-Plugin_Component_Type_Fill")) - || StringUtils.equals(bindInfo.getChildClassify(), Toolkit.i18nText("Fine-Plugin_Component_Type_Mobile_Fill"))); + boolean fill = StringUtils.equals(filterInfo.getName(), Toolkit.i18nText("Fine-Design_Share_Type_Fill")) + && (StringUtils.equals(bindInfo.getChildClassify(), Toolkit.i18nText("Fine-Design_Share_Type_Fill")) + || StringUtils.equals(bindInfo.getChildClassify(), Toolkit.i18nText("Fine-Design_Share_Type_Mobile_Fill"))); return other | dimensionChange | fill; } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareComponentUtils.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareComponentUtils.java index fe92fc517b..abd2c54507 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareComponentUtils.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareComponentUtils.java @@ -55,7 +55,7 @@ public class ShareComponentUtils { if (WorkContext.getWorkResource().exist(readmePath)) { return; } - String msg = Toolkit.i18nText("Fine-Plugin_Component_Share_Read_Me_Tip"); + String msg = Toolkit.i18nText("Fine-Design_Share_Share_Read_Me_Tip"); WorkContext.getWorkResource().write(readmePath, msg.getBytes()); } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareUIUtils.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareUIUtils.java index 78bab07ad9..204553f1d2 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareUIUtils.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareUIUtils.java @@ -153,7 +153,7 @@ public class ShareUIUtils { public static void showErrorMessageDialog(String message) { FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), message, - Toolkit.i18nText("Fine-Plugin_Component_Dialog_Message"), + Toolkit.i18nText("Fine-Design_Share_Dialog_Message"), FineJOptionPane.ERROR_MESSAGE); } diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigContentPane.java b/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigContentPane.java index 8a3406e0f7..fefb5649d9 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigContentPane.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigContentPane.java @@ -69,17 +69,17 @@ public class ShareConfigContentPane extends JPanel { private JPanel createPreviewPane() { - JPanel pane= FRGUIPaneFactory.createTitledBorderPane(Toolkit.i18nText(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Preview"))); + JPanel pane= FRGUIPaneFactory.createTitledBorderPane(Toolkit.i18nText(Toolkit.i18nText("Fine-Design_Share_Preview"))); previewPane = new PreviewPane(getWidget()); pane.add(previewPane, BorderLayout.CENTER); return pane; } private JPanel createInfoPane() { - JPanel infoPane = FRGUIPaneFactory.createTitledBorderPane(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Introduce")); + JPanel infoPane = FRGUIPaneFactory.createTitledBorderPane(Toolkit.i18nText("Fine-Design_Share_Introduce")); PlaceholderTextArea textArea = new PlaceholderTextArea(); textArea.setText(this.info); - textArea.setPlaceholder(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_No_Introduction")); + textArea.setPlaceholder(Toolkit.i18nText("Fine-Design_Share_No_Introduction")); textArea.setEditable(false); UIScrollPane scrollPane = new UIScrollPane(textArea); scrollPane.setPreferredSize(new Dimension(373, 176)); @@ -88,7 +88,7 @@ public class ShareConfigContentPane extends JPanel { } private JPanel createEffectPane() { - JPanel effectPane = FRGUIPaneFactory.createTitledBorderPane(Toolkit.i18nText(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Effects"))); + JPanel effectPane = FRGUIPaneFactory.createTitledBorderPane(Toolkit.i18nText(Toolkit.i18nText("Fine-Design_Share_Effects"))); JPanel effectContainer = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, VerticalFlowLayout.TOP,0, 0); EffectItemGroup effectItemGroup = getEffectItemGroup(); diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigPane.java b/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigPane.java index e430686504..9b55dc1220 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigPane.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigPane.java @@ -9,6 +9,7 @@ import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIButtonUI; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.VerticalFlowLayout; import com.fr.design.mainframe.DesignerContext; @@ -84,7 +85,7 @@ public class ShareConfigPane extends BasicPane { naviPane.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0)); naviPane.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); - preButton = new UIButton(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Prev")); + preButton = new UIButton(Toolkit.i18nText("Fine-Design_Share_Prev")); preButton.setPreferredSize(new Dimension(62, 20)); preButton.setUI(disabledUIButtonUI); preButton.addActionListener(new ActionListener() { @@ -97,7 +98,7 @@ public class ShareConfigPane extends BasicPane { }); preButton.setEnabled(hasPreview()); - nextButton = new UIButton(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Next")); + nextButton = new UIButton(Toolkit.i18nText("Fine-Design_Share_Next")); nextButton.setPreferredSize(new Dimension(62, 20)); nextButton.setUI(disabledUIButtonUI); nextButton.addActionListener(new ActionListener() { @@ -152,10 +153,10 @@ public class ShareConfigPane extends BasicPane { } private JPanel createInfoPane() { - JPanel infoPane = FRGUIPaneFactory.createTitledBorderPane(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Introduce")); + JPanel infoPane = FRGUIPaneFactory.createTitledBorderPane(Toolkit.i18nText("Fine-Design_Share_Introduce")); PlaceholderTextArea textArea = new PlaceholderTextArea(); textArea.setText(this.widget.getDescription()); - textArea.setPlaceholder(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_No_Introduction")); + textArea.setPlaceholder(Toolkit.i18nText("Fine-Design_Share_No_Introduction")); textArea.setEditable(false); UIScrollPane scrollPane = new UIScrollPane(textArea); scrollPane.setPreferredSize(new Dimension(373, 176)); @@ -171,10 +172,10 @@ public class ShareConfigPane extends BasicPane { } private JPanel createEffectEmptyPane() { - JPanel effectPane = FRGUIPaneFactory.createTitledBorderPane(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Effects")); + JPanel effectPane = FRGUIPaneFactory.createTitledBorderPane(Toolkit.i18nText("Fine-Design_Share_Effects")); effectPane.setLayout(new VerticalFlowLayout(FlowLayout.CENTER,0 , 0)); effectPane.setPreferredSize(new Dimension(480, 545)); - UILabel label = new UILabel(InterProviderFactory.getProvider().getLocText(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Empty"))); + UILabel label = new UILabel(Toolkit.i18nText("Fine-Design_Share_Empty")); label.setAlignmentX(Component.CENTER_ALIGNMENT); label.setPreferredSize(new Dimension(480, 22)); label.setHorizontalAlignment(UILabel.CENTER); @@ -185,7 +186,7 @@ public class ShareConfigPane extends BasicPane { @Override protected String title4PopupWindow() { - return InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Help_Settings"); + return Toolkit.i18nText("Fine-Design_Share_Help_Settings"); } public void show() { diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/config/table/ConfigItemRender.java b/designer-realize/src/main/java/com/fr/design/share/ui/config/table/ConfigItemRender.java index 8a34f705c1..1d8874afac 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/config/table/ConfigItemRender.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/config/table/ConfigItemRender.java @@ -1,6 +1,7 @@ package com.fr.design.share.ui.config.table; import com.fr.base.BaseUtils; +import com.fr.design.i18n.Toolkit; import com.fr.locale.InterProviderFactory; import com.fr.stable.StringUtils; @@ -56,10 +57,10 @@ public class ConfigItemRender extends DefaultTableCellRenderer { if (!table.isCellEditable(row, column)) { setForeground(PLACEHOLDER_COLOR); setBackground(NO_EDITABLE_BG); - setToolTipText(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Not_Support_Rename")); + setToolTipText(Toolkit.i18nText("Fine-Design_Share_Not_Support_Rename")); } if (StringUtils.isEmpty(value.toString())) { - setValue(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Need_Rename")); + setValue(Toolkit.i18nText("Fine-Design_Share_Need_Rename")); setForeground(PLACEHOLDER_COLOR); } } diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/config/table/ExpandEffectTable.java b/designer-realize/src/main/java/com/fr/design/share/ui/config/table/ExpandEffectTable.java index 9ba6be0cf3..1479d8437b 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/config/table/ExpandEffectTable.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/config/table/ExpandEffectTable.java @@ -86,9 +86,9 @@ public class ExpandEffectTable extends JPanel { // 效果列表 Object[] columnNames = { - InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_From"), - InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Rename"), - InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Edit") + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Share_From"), + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Share_Rename"), + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Share_Edit") }; ConfigTableModel tableModel = new ConfigTableModel(effectItems, columnNames); table = new JTable(tableModel); diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/CoverUploadPane.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/CoverUploadPane.java index 21656e15dc..01d0c06a0c 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/generate/CoverUploadPane.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/CoverUploadPane.java @@ -2,9 +2,9 @@ package com.fr.design.share.ui.generate; import com.fr.base.background.ImageBackground; import com.fr.design.beans.BasicBeanPane; +import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.share.ui.base.ImageBackgroundPane; -import com.fr.locale.InterProviderFactory; import com.fr.log.FineLoggerFactory; import javax.swing.BorderFactory; @@ -27,7 +27,7 @@ public class CoverUploadPane extends BasicBeanPane { @Override protected String title4PopupWindow() { - return InterProviderFactory.getProvider().getLocText("Fine-Plugin_Select_Upload_Cover"); + return Toolkit.i18nText("Fine-Design_Share_Select_Upload_Cover"); } public CoverUploadPane() { diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/EffectContent.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/EffectContent.java index 6c3766d7bb..63098ffd51 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/generate/EffectContent.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/EffectContent.java @@ -52,7 +52,7 @@ public class EffectContent extends JPanel { this.add(imageContainer, BorderLayout.NORTH); // 效果列表 - Object[] columnNames = {InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_From"), InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Rename")}; + Object[] columnNames = {com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Share_From"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Share_Rename")}; JTable table = new JTable(new EffectTableModel(effectItemGroup, columnNames)); table.setRowHeight(25); table.getColumnModel().getColumn(0).setPreferredWidth(235); diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/PriceExpectPane.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/PriceExpectPane.java index 6c3188ae12..7371c8e53e 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/generate/PriceExpectPane.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/PriceExpectPane.java @@ -25,10 +25,10 @@ public class PriceExpectPane extends JPanel { private UIRadioButton chargeRadio; public PriceExpectPane() { - freeRadio = new UIRadioButton(Toolkit.i18nText("Fine-Plugin_Component_Price_Free")); - chargeRadio = new UIRadioButton(Toolkit.i18nText("Fine-Plugin_Component_Price_Charge")); + freeRadio = new UIRadioButton(Toolkit.i18nText("Fine-Design_Share_Price_Free")); + chargeRadio = new UIRadioButton(Toolkit.i18nText("Fine-Design_Share_Price_Charge")); priceFiled = new UITextField(); - priceFiled.setPlaceholder(Toolkit.i18nText("Fine-Plugin_Component_Price_Charge_Tip")); + priceFiled.setPlaceholder(Toolkit.i18nText("Fine-Design_Share_Price_Charge_Tip")); ButtonGroup radioGroup = new ButtonGroup(); radioGroup.add(freeRadio); radioGroup.add(chargeRadio); diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareGeneratePane.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareGeneratePane.java index 76cff2046c..eb09338c5e 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareGeneratePane.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareGeneratePane.java @@ -165,7 +165,7 @@ public class ShareGeneratePane extends BasicPane { private JPanel createUploadCheckBox() { JPanel panel = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); - String label = Toolkit.i18nText("Fine-Plugin_Upload_Meanwhile"); + String label = Toolkit.i18nText("Fine-Design_Share_Upload_Meanwhile"); this.uploadCheckbox = new UICheckBox(label); uploadCheckbox.addItemListener(e -> { int stateChange = e.getStateChange(); @@ -175,7 +175,7 @@ public class ShareGeneratePane extends BasicPane { }); uploadCheckbox.setSelected(false); - UILabel tipsLabel = ShareUIUtils.createTipsLabel(Toolkit.i18nText("Fine-Plugin_Upload_Meanwhile_Tips")); + UILabel tipsLabel = ShareUIUtils.createTipsLabel(Toolkit.i18nText("Fine-Design_Share_Upload_Meanwhile_Tips")); panel.add(uploadCheckbox); panel.add(tipsLabel); panel.setPreferredSize(new Dimension(585, 30)); @@ -245,7 +245,7 @@ public class ShareGeneratePane extends BasicPane { ShareWidgetInfoManager.getInstance().addCompCreateInfo(provider); } } catch (NetWorkFailedException exception) { - FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), ShareUIUtils.formatWidthString(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_NetWorkError"), 200), + FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), ShareUIUtils.formatWidthString(Toolkit.i18nText("Fine-Design_Share_NetWorkError"), 200), Toolkit.i18nText("Fine-Design_Basic_Error"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon")); return null; } catch (Exception e) { @@ -255,7 +255,7 @@ public class ShareGeneratePane extends BasicPane { aspect.afterOk(); } if (!success) { - FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), InterProviderFactory.getProvider().getLocText("FR-Plugin_Share_Module_Failed"), + FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Share_Module_Failed"), Toolkit.i18nText("Fine-Design_Basic_Error"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon")); } return null; @@ -298,7 +298,7 @@ public class ShareGeneratePane extends BasicPane { @Override protected String title4PopupWindow() { - return InterProviderFactory.getProvider().getLocText("Fine-Plugin_Share_Module_Msg"); + return Toolkit.i18nText("Fine-Design_Share_Module_Msg"); } private Dimension getDialogSize() { diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java index 4302871e8a..329b3b31d8 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java @@ -100,7 +100,7 @@ public class ShareMainPane extends JPanel { private UIScrollPane mainPane = null; - private UICheckBox pluginCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Plugin_Component_Make_Relate_To_Plugin")); + private UICheckBox pluginCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Share_Make_Relate_To_Plugin")); private PriceExpectPane priceExpectPane = null; private UIComboBox parentClassify = null; @@ -110,8 +110,8 @@ public class ShareMainPane extends JPanel { private UILabel loginLabel = ShareUIUtils.createCenterRightUILabel(StringUtils.EMPTY); - private UICheckBox pc = new UICheckBox(Toolkit.i18nText("Fine-Plugin_PC_Device")); - private UICheckBox mobile = new UICheckBox(Toolkit.i18nText("Fine-Plugin_Mobile_Device")); + private UICheckBox pc = new UICheckBox(Toolkit.i18nText("Fine-Design_Share_PC_Device")); + private UICheckBox mobile = new UICheckBox(Toolkit.i18nText("Fine-Design_Share_Mobile_Device")); private UIComboCheckBox pluginComboCheckBox = null; @@ -172,7 +172,7 @@ public class ShareMainPane extends JPanel { private JPanel createOverviewPane(boolean upload) { JPanel componentPane = createComponentOverviewPane(upload); - String title = Toolkit.i18nText("Fine-Plugin_Component_Overview"); + String title = Toolkit.i18nText("Fine-Design_Share_Overview"); JPanel overviewPane = FRGUIPaneFactory.createTitledBorderPane(title); overviewPane.add(componentPane, BorderLayout.CENTER); @@ -182,35 +182,35 @@ public class ShareMainPane extends JPanel { private JPanel createBasePane(boolean upload) { // 提示 - UILabel tipsLabel = ShareUIUtils.createTipsLabel(Toolkit.i18nText("Fine-Plugin_Component_Generate_Help_Tips")); + UILabel tipsLabel = ShareUIUtils.createTipsLabel(Toolkit.i18nText("Fine-Design_Share_Generate_Help_Tips")); tipsLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); // 组件名称 - UILabel nameLabel = ShareUIUtils.createTopRightUILabel(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Name")); + UILabel nameLabel = ShareUIUtils.createTopRightUILabel(Toolkit.i18nText("Fine-Design_Share_Name")); JPanel symbolTextField = createNameFiledPane(); //显示封面 - UILabel coverLabel = ShareUIUtils.createTopRightUILabel(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Show_Cover")); + UILabel coverLabel = ShareUIUtils.createTopRightUILabel(Toolkit.i18nText("Fine-Design_Share_Show_Cover")); JPanel coverImagePane = getCoverImagePane(); //制作者 - UILabel vendorLabel = ShareUIUtils.createCenterRightUILabel(Toolkit.i18nText("Fine-Plugin_Component_Share_Vendor")); + UILabel vendorLabel = ShareUIUtils.createCenterRightUILabel(Toolkit.i18nText("Fine-Design_Share_Share_Vendor")); JPanel vendorPane = createVendorPane(); //适用终端 - UILabel deviceLabel = ShareUIUtils.createCenterRightUILabel(Toolkit.i18nText("Fine-Plugin_Component_Device")); + UILabel deviceLabel = ShareUIUtils.createCenterRightUILabel(Toolkit.i18nText("Fine-Design_Share_Device")); JPanel devicePane = createDevicePane(); //组件分类 - UILabel classifyLabel = ShareUIUtils.createCenterRightUILabel(Toolkit.i18nText("Fine-Plugin_Component_Classify")); + UILabel classifyLabel = ShareUIUtils.createCenterRightUILabel(Toolkit.i18nText("Fine-Design_Share_Classify")); JPanel classifyPane = createClassifyPane(); //样式风格 - UILabel styleThemeLabel = ShareUIUtils.createCenterRightUILabel(Toolkit.i18nText("Fine-Plugin_Component_Style_Theme")); + UILabel styleThemeLabel = ShareUIUtils.createCenterRightUILabel(Toolkit.i18nText("Fine-Design_Share_Style_Theme")); JPanel styleThemePane = createStyleThemePane(); //本地分组 - UILabel localGroupLabel = ShareUIUtils.createCenterRightUILabel(Toolkit.i18nText("Fine-Plugin_Component_Local_Group")); + UILabel localGroupLabel = ShareUIUtils.createCenterRightUILabel(Toolkit.i18nText("Fine-Design_Share_Local_Group")); JPanel localGroupPane = createLocalGroupPane(); //使用插件 - UILabel pluginLabel = ShareUIUtils.createCenterRightUILabel(Toolkit.i18nText("Fine-Plugin_Component_Use_Plugin")); + UILabel pluginLabel = ShareUIUtils.createCenterRightUILabel(Toolkit.i18nText("Fine-Design_Share_Use_Plugin")); JPanel pluginPane = createPluginPane(); //期望价格 - UILabel priceLabel = ShareUIUtils.createCenterRightUILabel(Toolkit.i18nText("Fine-Plugin_Component_Expect_Price")); + UILabel priceLabel = ShareUIUtils.createCenterRightUILabel(Toolkit.i18nText("Fine-Design_Share_Expect_Price")); JPanel pricePane = createPricePane(); double p = TableLayout.PREFERRED; @@ -246,7 +246,7 @@ public class ShareMainPane extends JPanel { infoPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.HGAP_SMALL, BASEPANE_VERTICAL_GAP); } - String title = Toolkit.i18nText("Fine-Plugin_Component_Base_Info"); + String title = Toolkit.i18nText("Fine-Design_Share_Base_Info"); JPanel overviewPane = FRGUIPaneFactory.createTitledBorderPane(title); innerPane.add(tipsLabel, BorderLayout.NORTH); @@ -271,7 +271,7 @@ public class ShareMainPane extends JPanel { private JPanel createStyleThemePane() { JPanel pane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); PlaceHolderUI placeHolderUI = new PlaceHolderUI( - Toolkit.i18nText("Fine-Plugin_Component_Style_Theme_Place_Holder")) { + Toolkit.i18nText("Fine-Design_Share_Style_Theme_Place_Holder")) { @Override protected boolean validate(UIComboBox uiComboBox) { return styleComboBox.getSelectedItem() != null; @@ -320,7 +320,7 @@ public class ShareMainPane extends JPanel { displays[i] = pairs[i].getFirst(); values[i] = pairs[i].getSecond(); } - this.pluginComboCheckBox = new DictionaryComboCheckBox(values, displays, "Fine-Plugin_Select_Plugin"); + this.pluginComboCheckBox = new DictionaryComboCheckBox(values, displays, "Fine-Design_Share_Select_Plugin"); pluginComboCheckBox.setPopupMaxDisplayNumber(10); pluginComboCheckBox.setVisible(false); @@ -348,7 +348,7 @@ public class ShareMainPane extends JPanel { this.parentClassify.setPreferredSize(new Dimension(COMBO_WIDTH, COMBO_HEIGHT)); List children = ComponentTypes.CHART.children(-1); - final String placeHolderText = Toolkit.i18nText("Fine-Plugin_Select_Type"); + final String placeHolderText = Toolkit.i18nText("Fine-Design_Share_Select_Type"); PlaceHolderUI placeHolderUI = new PlaceHolderUI(placeHolderText) { @Override protected boolean validate(UIComboBox comboBox) { @@ -422,7 +422,7 @@ public class ShareMainPane extends JPanel { String bbsUsername = MarketConfig.getInstance().getBbsUsername(); if (StringUtils.isEmpty(bbsUsername)) { - UILabel unLoginLabel = ShareUIUtils.createHyperlinkLabel(Toolkit.i18nText("Fine-Plugin_Click_Login")); + UILabel unLoginLabel = ShareUIUtils.createHyperlinkLabel(Toolkit.i18nText("Fine-Design_Share_Click_Login")); final UILabel hidden = new ShareLoginLabel(vendorPane, unLoginLabel, loginLabel); @@ -447,13 +447,13 @@ public class ShareMainPane extends JPanel { @NotNull private JPanel createComponentOverviewPane(boolean upload) { //功能介绍 - UILabel effectLabel = ShareUIUtils.createTopRightUILabel(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Special_Effects")); + UILabel effectLabel = ShareUIUtils.createTopRightUILabel(Toolkit.i18nText("Fine-Design_Share_Special_Effects")); JPanel effectPane = createEffectPane(effectItemGroups); content.setDocument( new LimitedDocument(200, 500) ); - String contentTip = Toolkit.i18nText("Fine-Plugin_Content_Introduction_Placeholder"); + String contentTip = Toolkit.i18nText("Fine-Design_Share_Content_Introduction_Placeholder"); content.setAutoscrolls(true); content.setPlaceholder(contentTip); UIScrollPane contentPane = new UIScrollPane(content); @@ -463,14 +463,14 @@ public class ShareMainPane extends JPanel { help.setDocument( new LimitedDocument(1000) ); - String helpTip = Toolkit.i18nText("Fine-Plugin_Help_Msg_Placeholder"); + String helpTip = Toolkit.i18nText("Fine-Design_Share_Help_Msg_Placeholder"); help.setPlaceholder(helpTip); UIScrollPane helpPane = new UIScrollPane(help); helpPane.setPreferredSize(new Dimension(COLUMN_FIELD_WIDTH, 50)); helpPane.setBorder(null); - UILabel helpLabel = ShareUIUtils.createTopRightUILabel(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Help_Msg")); - UILabel contentLabel = ShareUIUtils.createTopRightUILabel(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Content_Introduction")); + UILabel helpLabel = ShareUIUtils.createTopRightUILabel(Toolkit.i18nText("Fine-Design_Share_Help_Msg")); + UILabel contentLabel = ShareUIUtils.createTopRightUILabel(Toolkit.i18nText("Fine-Design_Share_Content_Introduction")); double p = TableLayout.PREFERRED; @@ -504,7 +504,7 @@ public class ShareMainPane extends JPanel { private JPanel createNameFiledPane() { LimitedDocument nameLimited = new LimitedDocument(NAME_MAX_LENGTH); - nameField.setPlaceholder(Toolkit.i18nText("Fine-Plugin_Component_Name_Placeholder")); + nameField.setPlaceholder(Toolkit.i18nText("Fine-Design_Share_Name_Placeholder")); nameField.setPreferredSize(new Dimension(TEXT_FIELD_WIDTH, TEXT_FIELD_HEIGHT)); nameField.setDocument(nameLimited); JPanel symbolTextFiled = FRGUIPaneFactory.createBorderLayout_S_Pane(); @@ -518,7 +518,7 @@ public class ShareMainPane extends JPanel { private void initUploadCoverBtn() { - this.uploadBtn = new UIButton(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Select_Upload_Cover")); + this.uploadBtn = new UIButton(Toolkit.i18nText("Fine-Design_Share_Select_Upload_Cover")); this.uploadBtn.setPreferredSize(new Dimension(BTN_WIDTH, BTN_HEIGHT)); uploadBtn.addActionListener(new ActionListener() { @Override @@ -563,37 +563,37 @@ public class ShareMainPane extends JPanel { Dialog shareDialog = ShareDialogUtils.getInstance().getShareDialog(); String name = nameField.getText(); if (StringUtils.isEmpty(name)) { - FineJOptionPane.showMessageDialog(shareDialog, Toolkit.i18nText("Fine-Plugin_Lack_Name"), + FineJOptionPane.showMessageDialog(shareDialog, Toolkit.i18nText("Fine-Design_Share_Lack_Name"), Toolkit.i18nText("Fine-Design_Basic_Error"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon")); return false; } if (upload && StringUtils.isEmpty(content.getText())) { - FineJOptionPane.showMessageDialog(shareDialog, Toolkit.i18nText("Fine-Plugin_Lack_Content"), + FineJOptionPane.showMessageDialog(shareDialog, Toolkit.i18nText("Fine-Design_Share_Lack_Content"), Toolkit.i18nText("Fine-Design_Basic_Error"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon")); return false; } if (upload && StringUtils.isEmpty(loginLabel.getText())) { - FineJOptionPane.showMessageDialog(shareDialog, Toolkit.i18nText("Fine-Plugin_Lack_Login"), + FineJOptionPane.showMessageDialog(shareDialog, Toolkit.i18nText("Fine-Design_Share_Lack_Login"), Toolkit.i18nText("Fine-Design_Basic_Error"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon")); return false; } if (upload && styleComboBox.getSelectedItem() == null) { - FineJOptionPane.showMessageDialog(shareDialog, Toolkit.i18nText("Fine-Plugin_Component_Style_Theme_Tip"), + FineJOptionPane.showMessageDialog(shareDialog, Toolkit.i18nText("Fine-Design_Share_Style_Theme_Tip"), Toolkit.i18nText("Fine-Design_Basic_Error"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon")); return false; } if (!pc.isSelected() && !mobile.isSelected()) { - FineJOptionPane.showMessageDialog(shareDialog, Toolkit.i18nText("Fine-Plugin_Lack_Device"), + FineJOptionPane.showMessageDialog(shareDialog, Toolkit.i18nText("Fine-Design_Share_Lack_Device"), Toolkit.i18nText("Fine-Design_Basic_Error"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon")); return false; } if (pluginCheckBox.isSelected() && ArrayUtils.isEmpty(pluginComboCheckBox.getSelectedValues())) { - FineJOptionPane.showMessageDialog(shareDialog, Toolkit.i18nText("Fine-Plugin_Lack_Plugins"), + FineJOptionPane.showMessageDialog(shareDialog, Toolkit.i18nText("Fine-Design_Share_Lack_Plugins"), Toolkit.i18nText("Fine-Design_Basic_Error"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon")); return false; } if (!priceExpectPane.check()) { - FineJOptionPane.showMessageDialog(shareDialog, Toolkit.i18nText("Fine-Plugin_Lack_Price"), + FineJOptionPane.showMessageDialog(shareDialog, Toolkit.i18nText("Fine-Design_Share_Lack_Price"), Toolkit.i18nText("Fine-Design_Basic_Error"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon")); return false; } @@ -684,7 +684,7 @@ public class ShareMainPane extends JPanel { if (errorLength != -1 && currentLength > errorLength && ++loop >= 5) { this.loop = 0; FineJOptionPane.showMessageDialog(ShareDialogUtils.getInstance().getShareDialog(), - ShareUIUtils.formatWidthString(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Input_Errors", String.valueOf(errorLength)), 200), + ShareUIUtils.formatWidthString(Toolkit.i18nText("Fine-Design_Share_Input_Errors", String.valueOf(errorLength)), 200), Toolkit.i18nText("Fine-Design_Basic_Error"), ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon")); //只提示,不报错 } diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/table/EffectItemRender.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/table/EffectItemRender.java index 1655e17bd5..f31169da12 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/generate/table/EffectItemRender.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/table/EffectItemRender.java @@ -2,8 +2,8 @@ package com.fr.design.share.ui.generate.table; import com.fr.base.BaseUtils; import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.locale.InterProviderFactory; import com.fr.stable.StringUtils; import javax.swing.BorderFactory; @@ -48,7 +48,7 @@ public class EffectItemRender extends DefaultTableCellRenderer { if (!table.isCellEditable(row, column)) { setForeground(PLACEHOLDER_COLOR); setBackground(NO_EDITABLE_BG); - setToolTipText(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Not_Support_Rename")); + setToolTipText(Toolkit.i18nText("Fine-Design_Share_Not_Support_Rename")); } else { setForeground(Color.black); } @@ -65,7 +65,7 @@ public class EffectItemRender extends DefaultTableCellRenderer { table.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } } else { - setValue(InterProviderFactory.getProvider().getLocText("Fine-Plugin_Component_Need_Rename")); + setValue(Toolkit.i18nText("Fine-Design_Share_Need_Rename")); setForeground(PLACEHOLDER_COLOR); } return this; From f055c56eb522aa018a00866d774a79bb2819da65 Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Mon, 17 May 2021 21:14:55 +0800 Subject: [PATCH 008/148] =?UTF-8?q?REPORT-51678=20=E5=A4=8D=E7=94=A8?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E6=8F=92=E4=BB=B6=E5=90=88=E5=B9=B6=E4=B8=BB?= =?UTF-8?q?jar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/share/collect/ComponentCollector.java | 2 +- .../mainframe/share/generate/task/ComponentCreator.java | 4 ++-- .../fr/design/mainframe/share/ui/block/LocalWidgetBlock.java | 2 +- .../fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java | 2 +- .../com/fr/design/mainframe/share/ui/local/GroupPane.java | 2 +- .../design/mainframe/share/ui/local/LocalWidgetRepoPane.java | 2 +- .../mainframe/share/ui/local/LocalWidgetSelectPane.java | 2 +- .../com/fr/design/mainframe/share/ui/local/ManagePane.java | 2 +- .../mainframe/share/ui/local/WidgetSelectedManager.java | 2 +- .../mainframe/share/ui/online/OnlineDownloadPackagePane.java | 2 +- .../java/com/fr/design/mainframe/share/util/InstallUtils.java | 2 +- .../com/fr/design/share/ui/generate/ShareGeneratePane.java | 3 +-- .../java/com/fr/design/share/ui/generate/ShareMainPane.java | 3 +-- 13 files changed, 14 insertions(+), 16 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java b/designer-form/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java index 69bd1d8077..a2c4ba5d99 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java @@ -7,7 +7,7 @@ import com.fr.form.share.DefaultSharableWidget; import com.fr.form.share.SharableWidgetProvider; import com.fr.form.share.constants.ComponentPath; import com.fr.form.share.group.DefaultShareGroupManager; -import com.fr.form.share.group.Group; +import com.fr.form.share.Group; import com.fr.form.share.group.filter.DirFilter; import com.fr.form.share.group.filter.ReuFilter; import com.fr.general.ComparatorUtils; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentCreator.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentCreator.java index 3d95be0102..f93e28426b 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentCreator.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentCreator.java @@ -8,7 +8,7 @@ import com.fr.design.mainframe.share.generate.impl.AbstractComponentCreatorProce import com.fr.form.main.Form; import com.fr.form.main.WidgetGatherAdapter; import com.fr.form.share.DefaultSharableWidget; -import com.fr.form.share.EmbeddedConverter; +import com.fr.form.share.ShareEmbeddedConverter; import com.fr.form.share.bean.ComponentReuBean; import com.fr.form.share.editor.DefaultSharableEditor; import com.fr.form.share.editor.PlainSharableEditor; @@ -92,7 +92,7 @@ public class ComponentCreator extends AbstractComponentCreatorProcessor { } // //内置数据集 - EmbeddedConverter embeddedConverter = WorkContext.getCurrent().get(EmbeddedConverter.class); + ShareEmbeddedConverter embeddedConverter = WorkContext.getCurrent().get(ShareEmbeddedConverter.class); embeddedConverter.convertToEmbeddedTableData(tpl, paraMap); return tpl; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/LocalWidgetBlock.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/LocalWidgetBlock.java index 55daa46ee1..862616fa40 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/LocalWidgetBlock.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/LocalWidgetBlock.java @@ -24,7 +24,7 @@ import com.fr.design.utils.gui.GUICoreUtils; import com.fr.form.share.DefaultSharableWidget; import com.fr.form.share.SharableWidgetProvider; import com.fr.form.share.constants.ShareComponentConstants; -import com.fr.form.share.group.Group; +import com.fr.form.share.Group; import com.fr.form.share.record.ShareWidgetInfoManager; import com.fr.form.ui.AbstractBorderStyleWidget; import com.fr.form.ui.Widget; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java index 84b490731d..15ebebd6d9 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java @@ -23,7 +23,7 @@ import com.fr.form.share.SharableWidgetProvider; import com.fr.form.share.bean.OnlineShareWidget; import com.fr.form.share.constants.ShareComponentConstants; import com.fr.form.share.group.DefaultShareGroupManager; -import com.fr.form.share.group.Group; +import com.fr.form.share.Group; import com.fr.form.share.utils.ShareUtils; import com.fr.form.ui.AbstractBorderStyleWidget; import com.fr.form.ui.Widget; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/GroupPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/GroupPane.java index 7f9317b9d5..94d24a3d5b 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/GroupPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/GroupPane.java @@ -16,7 +16,7 @@ import com.fr.design.mainframe.share.util.ShareUIUtils; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.form.share.SharableWidgetProvider; import com.fr.form.share.group.DefaultShareGroupManager; -import com.fr.form.share.group.Group; +import com.fr.form.share.Group; import com.fr.general.IOUtils; import com.fr.stable.StringUtils; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetRepoPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetRepoPane.java index d190ca7363..487a414e51 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetRepoPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetRepoPane.java @@ -10,7 +10,7 @@ import com.fr.design.mainframe.share.ui.widgetfilter.LocalWidgetFilter; import com.fr.design.mainframe.share.util.InstallComponentHelper; import com.fr.design.mainframe.share.util.ShareComponentUtils; import com.fr.form.share.group.DefaultShareGroupManager; -import com.fr.form.share.group.Group; +import com.fr.form.share.Group; import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetSelectPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetSelectPane.java index 73d6720f3c..8c6a9a6c3a 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetSelectPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetSelectPane.java @@ -5,7 +5,7 @@ import com.fr.design.mainframe.share.ui.block.LocalWidgetBlock; import com.fr.form.share.DefaultSharableWidget; import com.fr.form.share.SharableWidgetProvider; import com.fr.form.share.constants.ShareComponentConstants; -import com.fr.form.share.group.Group; +import com.fr.form.share.Group; import com.fr.form.share.record.ShareWidgetInfoManager; import com.fr.general.ComparatorUtils; import com.fr.stable.ArrayUtils; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ManagePane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ManagePane.java index 4e0cd9aa4e..67e2efe3f4 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ManagePane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ManagePane.java @@ -16,7 +16,7 @@ import com.fr.design.mainframe.share.ui.base.PopupMenuItem; import com.fr.design.mainframe.share.util.ShareUIUtils; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.form.share.group.DefaultShareGroupManager; -import com.fr.form.share.group.Group; +import com.fr.form.share.Group; import com.fr.general.IOUtils; import com.fr.stable.StringUtils; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/WidgetSelectedManager.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/WidgetSelectedManager.java index df4a586e6c..d211887f56 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/WidgetSelectedManager.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/WidgetSelectedManager.java @@ -1,7 +1,7 @@ package com.fr.design.mainframe.share.ui.local; import com.fr.form.share.group.DefaultShareGroupManager; -import com.fr.form.share.group.Group; +import com.fr.form.share.Group; import java.util.HashMap; import java.util.List; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineDownloadPackagePane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineDownloadPackagePane.java index 1bfac26374..59a09c466c 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineDownloadPackagePane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineDownloadPackagePane.java @@ -15,7 +15,7 @@ import com.fr.design.mainframe.share.util.DownloadUtils; import com.fr.design.mainframe.share.util.InstallUtils; import com.fr.design.mainframe.share.util.ShareComponentUtils; import com.fr.form.share.bean.OnlineShareWidget; -import com.fr.form.share.group.Group; +import com.fr.form.share.Group; import com.fr.log.FineLoggerFactory; import com.fr.stable.StableUtils; import org.jetbrains.annotations.Nullable; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallUtils.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallUtils.java index 4d297e29d6..c25f53f515 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallUtils.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallUtils.java @@ -2,7 +2,7 @@ package com.fr.design.mainframe.share.util; import com.fr.form.share.group.DefaultShareGroup; import com.fr.form.share.group.DefaultShareGroupManager; -import com.fr.form.share.group.Group; +import com.fr.form.share.Group; import com.fr.form.share.group.TempFileOperator; import com.fr.form.share.utils.ReuxUtils; import com.fr.form.share.utils.ShareUtils; diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareGeneratePane.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareGeneratePane.java index eb09338c5e..d52cf1ef6b 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareGeneratePane.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareGeneratePane.java @@ -25,10 +25,9 @@ import com.fr.design.share.utils.ShareDialogUtils; import com.fr.form.share.DefaultSharableWidget; import com.fr.form.share.config.ComponentReuseConfigManager; import com.fr.form.share.group.DefaultShareGroupManager; -import com.fr.form.share.group.Group; +import com.fr.form.share.Group; import com.fr.form.share.record.ShareWidgetInfoManager; import com.fr.form.ui.Widget; -import com.fr.locale.InterProviderFactory; import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java index 329b3b31d8..3cd8653538 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java @@ -34,8 +34,7 @@ import com.fr.form.share.DefaultSharableWidget; import com.fr.form.share.bean.StyleThemeBean; import com.fr.form.share.constants.ShareComponentConstants; import com.fr.form.share.group.DefaultShareGroupManager; -import com.fr.form.share.group.Group; -import com.fr.locale.InterProviderFactory; +import com.fr.form.share.Group; import com.fr.plugin.context.PluginContext; import com.fr.plugin.manage.PluginFilter; import com.fr.plugin.manage.PluginManager; From 53388c1024e6ce3334dc09ef2503bd7cb71fad03 Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Wed, 19 May 2021 20:53:39 +0800 Subject: [PATCH 009/148] =?UTF-8?q?REPORT-51678=20=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=A4=8D=E7=94=A8=E6=8F=92=E4=BB=B6=E4=BB=A3=E7=A0=81=E5=90=88?= =?UTF-8?q?=E5=B9=B6--=E8=A1=A5=E5=85=85SnapChat=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/EastRegionContainerPane.java | 41 ++++- .../mainframe/reuse/ReuseGuideDialog.java | 167 ++++++++++++++++++ .../design/mainframe/reuse}/SnapChatKeys.java | 2 +- .../share/util/InstallComponentHelper.java | 2 +- 4 files changed, 201 insertions(+), 11 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/reuse/ReuseGuideDialog.java rename {designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu => designer-base/src/main/java/com/fr/design/mainframe/reuse}/SnapChatKeys.java (91%) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java index 346902a0d8..541cb8e0f8 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java @@ -13,8 +13,11 @@ import com.fr.design.gui.ibutton.UIButtonUI; import com.fr.design.gui.icontainer.UIEastResizableContainer; import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.VerticalFlowLayout; +import com.fr.design.mainframe.reuse.ReuseGuideDialog; +import com.fr.design.mainframe.reuse.SnapChatKeys; import com.fr.design.menu.SnapChatUtil; import com.fr.design.notification.SnapChat; +import com.fr.design.notification.SnapChatFactory; import com.fr.design.ui.util.UIUtil; import com.fr.design.utils.DesignUtils; import com.fr.design.utils.gui.GUICoreUtils; @@ -297,14 +300,20 @@ public class EastRegionContainerPane extends UIEastResizableContainer { "hyperlink", new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_PARA, PropertyMode.REPORT_PARA_WIDGET, PropertyMode.REPORT_FLOAT, PropertyMode.POLY, PropertyMode.POLY_CHART}, new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_FLOAT, PropertyMode.FORM_REPORT, PropertyMode.POLY_REPORT}); // 组件库 - PropertyItem widgetLib = new PropertyItem(KEY_WIDGET_LIB, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Widget_Library"), - "widgetlib", new PropertyMode[]{PropertyMode.FORM}, - new PropertyMode[]{PropertyMode.FORM}, new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - ComponentReuseNotifyUtil.enterWidgetLibExtraAction(); - } - }); + PropertyItem widgetLib = new PropertyItem( + KEY_WIDGET_LIB, + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Widget_Library"), + "widgetlib", + new PropertyMode[]{PropertyMode.FORM}, + new PropertyMode[]{PropertyMode.FORM}, + getWidgetLibSnapChat(), + getWidgetLibPromptWindow(), + new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + ComponentReuseNotifyUtil.enterWidgetLibExtraAction(); + } + }); // 权限编辑 PropertyItem authorityEdition = new PropertyItem(KEY_AUTHORITY_EDITION, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Permissions_Edition"), "authorityedit", new PropertyMode[]{PropertyMode.AUTHORITY_EDITION_DISABLED}, @@ -519,6 +528,17 @@ public class EastRegionContainerPane extends UIEastResizableContainer { propertyItemMap.get(KEY_WIDGET_LIB).replaceContentPane(pane); } + public SnapChat getWidgetLibSnapChat() { + return SnapChatFactory.createSnapChat(false, SnapChatKeys.COMPONENT); + } + + public PromptWindow getWidgetLibPromptWindow() { + if (getWidgetLibSnapChat().hasRead()) { + return new ReuseGuideDialog(DesignerContext.getDesignerFrame()); + } + return null; + } + public JComponent getWidgetLibPane() { return propertyItemMap.get(KEY_WIDGET_LIB).getContentPane(); } @@ -726,11 +746,14 @@ public class EastRegionContainerPane extends UIEastResizableContainer { this(name, title, btnIconName, ICON_BASE_DIR, visibleModes, enableModes, null, null); } + public PropertyItem(String name, String title, String btnIconName, PropertyMode[] visibleModes, PropertyMode[] enableModes, SnapChat snapChat, PromptWindow promptWindow, ActionListener actionListener) { + this(name, title, btnIconName, ICON_BASE_DIR, visibleModes, enableModes, snapChat, promptWindow, actionListener); + } + public PropertyItem(String name, String title, String btnIconName, PropertyMode[] visibleModes, PropertyMode[] enableModes, ActionListener actionListener) { this(name, title, btnIconName, ICON_BASE_DIR, visibleModes, enableModes, null, null, actionListener); } - public PropertyItem(String name, String title, String btnIconName, String iconBaseDir, PropertyMode[] visibleModes, PropertyMode[] enableModes, SnapChat snapChat, PromptWindow promptWindow) { this(name, title, btnIconName, iconBaseDir, visibleModes, enableModes, snapChat, promptWindow, null); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/reuse/ReuseGuideDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/reuse/ReuseGuideDialog.java new file mode 100644 index 0000000000..8157f9d16c --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/reuse/ReuseGuideDialog.java @@ -0,0 +1,167 @@ +package com.fr.design.mainframe.reuse; + +import com.fr.base.background.ColorBackground; +import com.fr.design.dialog.UIDialog; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.PromptWindow; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.IOUtils; + +import javax.swing.BorderFactory; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dialog; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Font; +import java.awt.Frame; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Image; +import java.awt.RenderingHints; +import java.awt.geom.RoundRectangle2D; + +public class ReuseGuideDialog extends UIDialog implements PromptWindow { + InnerDialog innerDialog; + private static final Dimension DEFAULT = new Dimension(735, 510); + + public ReuseGuideDialog(Frame parent) { + super(parent); + } + + @Override + public void showWindow() { + innerDialog = new InnerDialog(this); + JPanel backGroundPane = new JPanel() { + @Override + protected void paintComponent(Graphics g) { + Image icon = IOUtils.readImage("com/fr/plugin/form/images/background.png");// 003.jpg是测试图片在项目的根目录下 + g.drawImage(icon, 0, 0, getSize().width, getSize().height, this);// 图片会自动缩放 + } + }; + add(backGroundPane, BorderLayout.CENTER); + initStyle(); + innerDialog.showWindow(); + } + + private void initStyle() { + setSize(DEFAULT); + setUndecorated(true); + setBackground(new Color(0, 0, 0, 0)); + GUICoreUtils.centerWindow(this); + } + + @Override + public void hideWindow() { + this.setVisible(false); + if (innerDialog != null) { + innerDialog.setVisible(false); + innerDialog.dispose(); + innerDialog = null; + } + this.dispose(); + } + + @Override + public void checkValid() { + + } + + class InnerDialog extends UIDialog { + private final Dimension DEFAULT = new Dimension(700, 475); + private static final int TITLE_FONT_SIZE = 20; + + public InnerDialog(Dialog dialog) { + super(dialog); + } + + public void showWindow() { + add(createCenterPanel(), BorderLayout.CENTER); + add(createSouthPanel(), BorderLayout.SOUTH); + add(createNorthPanel(), BorderLayout.NORTH); + showDialog(); + } + + private JPanel createNorthPanel() { + JPanel northPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + + //右上角关闭按钮 + JButton button = new JButton(new ImageIcon(IOUtils.readImage("/com/fr/plugin/form/images/close.png").getScaledInstance(15, 15, Image.SCALE_SMOOTH))); + button.setBorder(null); + button.setOpaque(false); + button.addActionListener(e -> ReuseGuideDialog.this.hideWindow()); + + northPanel.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 15)); + northPanel.setOpaque(false); + northPanel.add(button); + return northPanel; + } + + private JPanel createCenterPanel() { + JPanel centerPanel = new JPanel(new BorderLayout()); + + UILabel titleLabel = new UILabel(Toolkit.i18nText("Fine-Plugin_Component_Drag_And_Make_Component")); + UILabel imageLabel = new UILabel(new ImageIcon(IOUtils.readImage("com/fr/plugin/form/images/guide.png").getScaledInstance(DEFAULT.width, DEFAULT.height, Image.SCALE_SMOOTH))); + titleLabel.setFont(new Font(titleLabel.getFont().getName(), Font.BOLD, TITLE_FONT_SIZE)); + titleLabel.setBorder(BorderFactory.createEmptyBorder()); + + JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + panel.setOpaque(false); + panel.add(titleLabel); + + centerPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); + centerPanel.setOpaque(false); + centerPanel.add(imageLabel, BorderLayout.CENTER); + centerPanel.add(panel, BorderLayout.NORTH); + return centerPanel; + } + + private JPanel createSouthPanel() { + JPanel southPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + + JButton button = new JButton(Toolkit.i18nText("Fine-Plugin_Component_Try_Drag")) { + @Override + public void paint(Graphics g) { + ColorBackground buttonBackground = ColorBackground.getInstance(Color.decode("#419BF9")); + Graphics2D g2d = (Graphics2D) g; + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + buttonBackground.paint(g2d, new RoundRectangle2D.Double(0, 0, getWidth(), getHeight(), 8, 8)); + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); + super.paint(g); + } + }; + button.setBorder(null); + button.setForeground(Color.WHITE); + button.setOpaque(false); + button.addActionListener(e -> ReuseGuideDialog.this.hideWindow()); + + southPanel.setBorder(BorderFactory.createEmptyBorder(0, 290, 19, 290)); + southPanel.setPreferredSize(new Dimension(DEFAULT.width, 51)); + southPanel.setOpaque(false); + southPanel.add(button); + return southPanel; + } + + /** + * 显示窗口 + */ + private void showDialog() { + setSize(DEFAULT); + setUndecorated(true); + GUICoreUtils.centerWindow(this); + setModalityType(ModalityType.APPLICATION_MODAL); + ReuseGuideDialog.this.setVisible(true); + setVisible(true); + } + + @Override + public void checkValid() { + + } + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/SnapChatKeys.java b/designer-base/src/main/java/com/fr/design/mainframe/reuse/SnapChatKeys.java similarity index 91% rename from designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/SnapChatKeys.java rename to designer-base/src/main/java/com/fr/design/mainframe/reuse/SnapChatKeys.java index cf563d2e84..8f07f503be 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/SnapChatKeys.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/reuse/SnapChatKeys.java @@ -1,4 +1,4 @@ -package com.fr.design.mainframe.share.ui.menu; +package com.fr.design.mainframe.reuse; import com.fr.design.notification.SnapChatKey; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallComponentHelper.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallComponentHelper.java index 8e4de49f32..ecf8be2b02 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallComponentHelper.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallComponentHelper.java @@ -1,6 +1,6 @@ package com.fr.design.mainframe.share.util; -import com.fr.design.mainframe.share.ui.menu.SnapChatKeys; +import com.fr.design.mainframe.reuse.SnapChatKeys; import com.fr.design.notification.SnapChat; import com.fr.design.notification.SnapChatFactory; import com.fr.form.share.constants.ComponentPath; From 51a80eab8dcd672f48629466bdad7184e35ecf99 Mon Sep 17 00:00:00 2001 From: kerry Date: Thu, 20 May 2021 10:43:32 +0800 Subject: [PATCH 010/148] =?UTF-8?q?REPORT-51244=20=E3=80=9010.0.17?= =?UTF-8?q?=E3=80=91=E5=A4=8D=E7=94=A8=E7=BB=84=E4=BB=B6=E6=8E=A5=E8=A7=A6?= =?UTF-8?q?=E7=82=B9=E4=BC=98=E5=8C=96=20-=20=E5=8A=9F=E8=83=BD=E8=A1=A5?= =?UTF-8?q?=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/ComponentReuseNotifyUtil.java | 9 ++- .../mainframe/EastRegionContainerPane.java | 3 - .../reuse/ComponentReuseNotificationInfo.java | 20 +++++- .../treeview/ComponentTreeCellRenderer.java | 2 +- .../design/mainframe/FormParaWidgetPane.java | 6 +- .../mainframe/FormWidgetDetailPane.java | 12 +++- .../mainframe/ReuseTriggerPointManager.java | 7 +- .../share/collect/ComponentCollector.java | 70 ++++++++++++++++++- .../share/ui/block/LocalWidgetBlock.java | 2 + .../share/ui/block/OnlineWidgetBlock.java | 1 + .../share/util/InstallComponentHelper.java | 12 ++-- 11 files changed, 123 insertions(+), 21 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/ComponentReuseNotifyUtil.java b/designer-base/src/main/java/com/fr/design/mainframe/ComponentReuseNotifyUtil.java index 8541ffa66e..abad05eb19 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/ComponentReuseNotifyUtil.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/ComponentReuseNotifyUtil.java @@ -1,5 +1,6 @@ package com.fr.design.mainframe; +import com.fr.design.DesignerEnvManager; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.reuse.ComponentReuseNotificationInfo; import com.fr.design.mainframe.toast.DesignerToastMsgUtil; @@ -17,11 +18,6 @@ public class ComponentReuseNotifyUtil { } - public static void enterWidgetLib() { - EastRegionContainerPane.getInstance().switchTabTo(EastRegionContainerPane.KEY_WIDGET_LIB); - enterWidgetLibExtraAction(); - } - public static void enterWidgetLibExtraAction() { if (ComponentReuseNotificationInfo.getInstance().isClickedWidgetLib()) { return; @@ -35,5 +31,8 @@ public class ComponentReuseNotifyUtil { if (snapChat.hasRead()) { DesignerToastMsgUtil.toastPrompt(Toolkit.i18nText("Fine-Design_Component_Reuse_Merge_Prompt")); } + ComponentReuseNotificationInfo.getInstance().setClickedWidgetLib(true); + DesignerEnvManager.getEnvManager().saveXMLFile(); } + } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java index 346902a0d8..8b9b1cf3ab 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java @@ -942,9 +942,6 @@ public class EastRegionContainerPane extends UIEastResizableContainer { @Override public void paintComponent(Graphics g) { super.paintComponent(g); - if (snapChat != null && !snapChat.hasRead()) { - SnapChatUtil.paintPropertyItemPoint(g, getBounds()); - } } }; button.setDisabledIcon(IconUtils.readIcon(getIconBaseDir() + btnIconName + ICON_SUFFIX_DISABLED)); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/reuse/ComponentReuseNotificationInfo.java b/designer-base/src/main/java/com/fr/design/mainframe/reuse/ComponentReuseNotificationInfo.java index d819c18762..0ec6f26ad4 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/reuse/ComponentReuseNotificationInfo.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/reuse/ComponentReuseNotificationInfo.java @@ -1,5 +1,6 @@ package com.fr.design.mainframe.reuse; +import com.fr.design.DesignerEnvManager; import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLable; import com.fr.stable.xml.XMLableReader; @@ -22,6 +23,8 @@ public class ComponentReuseNotificationInfo implements XMLable { private boolean clickedWidgetLib = false; + private long lastGuidePopUpTime = 0; + public long getLastNotifyTime() { return lastNotifyTime; } @@ -46,11 +49,25 @@ public class ComponentReuseNotificationInfo implements XMLable { this.clickedWidgetLib = clickedWidgetLib; } + public long getLastGuidePopUpTime() { + return lastGuidePopUpTime; + } + + public void setLastGuidePopUpTime(long lastGuidePopUpTime) { + this.lastGuidePopUpTime = lastGuidePopUpTime; + } + + public void updateLastGuidePopUpTime() { + this.setLastGuidePopUpTime(System.currentTimeMillis()); + DesignerEnvManager.getEnvManager().saveXMLFile(); + } + @Override public void readXML(XMLableReader reader) { this.setLastNotifyTime(reader.getAttrAsLong("lastNotifyTime", 0L)); this.setNotifiedNumber(reader.getAttrAsInt("notifiedNumber", 0)); this.setClickedWidgetLib(reader.getAttrAsBoolean("clickedWidgetLib", false)); + this.setLastGuidePopUpTime(reader.getAttrAsLong("lastGuidePopUpTime", 0L)); } @Override @@ -58,7 +75,8 @@ public class ComponentReuseNotificationInfo implements XMLable { writer.startTAG("ComponentReuseNotificationInfo"); writer.attr("lastNotifyTime", this.lastNotifyTime) .attr("notifiedNumber", this.notifiedNumber) - .attr("clickedWidgetLib", this.clickedWidgetLib); + .attr("clickedWidgetLib", this.clickedWidgetLib) + .attr("lastGuidePopUpTime", this.lastGuidePopUpTime); writer.end(); } diff --git a/designer-form/src/main/java/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java b/designer-form/src/main/java/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java index e4bfcfaf10..f310adc42f 100644 --- a/designer-form/src/main/java/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java +++ b/designer-form/src/main/java/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java @@ -18,7 +18,7 @@ import java.awt.Graphics; public class ComponentTreeCellRenderer extends DefaultTreeCellRenderer { private boolean needAddShareIcon = false; - private static final Icon SHARE_ICON = BaseUtils.readIcon("/com/fr/design/images/toast/icon_reuse.png"); + private static final Icon SHARE_ICON = BaseUtils.readIcon("/com/fr/design/images/toast/reuse_icon.png"); public ComponentTreeCellRenderer() { } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormParaWidgetPane.java b/designer-form/src/main/java/com/fr/design/mainframe/FormParaWidgetPane.java index b5722e9da9..81b4e7b61d 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormParaWidgetPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormParaWidgetPane.java @@ -16,6 +16,7 @@ import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.share.collect.ComponentCollector; import com.fr.design.module.DesignModuleFactory; import com.fr.design.utils.gui.LayoutUtils; import com.fr.form.ui.UserDefinedWidgetConfig; @@ -32,6 +33,7 @@ import com.fr.plugin.observer.PluginEvent; import com.fr.plugin.observer.PluginEventListener; import com.fr.stable.ArrayUtils; +import javax.swing.BorderFactory; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JSeparator; @@ -244,10 +246,12 @@ public class FormParaWidgetPane extends JPanel { private JPanel createComponentReuseToolPane() { JPanel jPanel = new JPanel(new BorderLayout(17, 10)); UILabel uiLabel = new UILabel(BaseUtils.readIcon("/com/fr/design/images/form/designer/widget_apply_icon.png")); + uiLabel.setBorder(BorderFactory.createEmptyBorder(5, 0 ,5, 0)); jPanel.addMouseListener(new MouseListener() { @Override public void mouseClicked(MouseEvent e) { - ComponentReuseNotifyUtil.enterWidgetLib(); + FormWidgetDetailPane.getInstance().enterWidgetLib(); + ComponentCollector.getInstance().collectToolbarJump(); } @Override diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java b/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java index fdad24577e..dd0cce25b6 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java @@ -23,7 +23,10 @@ import java.util.List; * Time: 下午8:18 */ public class FormWidgetDetailPane extends FormDockView{ + private static final int ONLINE_TAB = 1; + private JPanel centerPane; + private UIHeadGroup headGroup; private List paneList; public static FormWidgetDetailPane getInstance() { @@ -78,7 +81,7 @@ public class FormWidgetDetailPane extends FormDockView{ paneNames[i] = title; centerPane.add(paneList.get(i), title); } - UIHeadGroup headGroup = new UIHeadGroup(paneNames) { + headGroup = new UIHeadGroup(paneNames) { protected void tabChanged(int newSelectedIndex) { if (newSelectedIndex == 1) { ComponentCollector.getInstance().collectMarkerClick(); @@ -91,6 +94,7 @@ public class FormWidgetDetailPane extends FormDockView{ this.add(centerPane, BorderLayout.CENTER); } + /** * 清除数据 */ @@ -101,6 +105,12 @@ public class FormWidgetDetailPane extends FormDockView{ } + public void enterWidgetLib() { + EastRegionContainerPane.getInstance().switchTabTo(EastRegionContainerPane.KEY_WIDGET_LIB); + headGroup.setSelectedIndex(ONLINE_TAB); + ComponentReuseNotifyUtil.enterWidgetLibExtraAction(); + } + /** * 定位 * diff --git a/designer-form/src/main/java/com/fr/design/mainframe/ReuseTriggerPointManager.java b/designer-form/src/main/java/com/fr/design/mainframe/ReuseTriggerPointManager.java index c4bdc8bf74..beb779be8c 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/ReuseTriggerPointManager.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/ReuseTriggerPointManager.java @@ -14,6 +14,7 @@ import com.fr.design.mainframe.adaptve.config.impl.CellStyleTriggerPoint; import com.fr.design.mainframe.adaptve.config.impl.CellValueImageChangeTriggerPoint; import com.fr.design.mainframe.adaptve.config.ReuseNotifyInfo; import com.fr.design.mainframe.reuse.ComponentReuseNotificationInfo; +import com.fr.design.mainframe.share.collect.ComponentCollector; import com.fr.design.mainframe.toast.DesignerToastMsgUtil; import com.fr.event.Event; import com.fr.event.EventDispatcher; @@ -81,7 +82,7 @@ public class ReuseTriggerPointManager { } - private boolean hasNotifiedTwice() { + public boolean hasNotifiedTwice() { return ComponentReuseNotificationInfo.getInstance().getNotifiedNumber() >= 2; } @@ -147,6 +148,7 @@ public class ReuseTriggerPointManager { JTemplate currentJTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); DesignerToastMsgUtil.toastPrompt(createReusePrompt((JForm) currentJTemplate)); ReuseTriggerPointManager.getInstance().writeTriggerInfo2xml(); + ComponentCollector.getInstance().collectPromptJumpWhenShow(); } } @@ -180,7 +182,8 @@ public class ReuseTriggerPointManager { @Override public void mouseClicked(MouseEvent e) { jForm.tabChanged(0); - ComponentReuseNotifyUtil.enterWidgetLib(); + FormWidgetDetailPane.getInstance().enterWidgetLib(); + ComponentCollector.getInstance().collectPromptJumpWhenJump(); } @Override diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java b/designer-form/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java index a2c4ba5d99..1fa2b993e7 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java @@ -3,6 +3,7 @@ package com.fr.design.mainframe.share.collect; import com.fr.base.io.XMLReadHelper; import com.fr.config.MarketConfig; import com.fr.design.DesignerEnvManager; +import com.fr.design.mainframe.reuse.ComponentReuseNotificationInfo; import com.fr.form.share.DefaultSharableWidget; import com.fr.form.share.SharableWidgetProvider; import com.fr.form.share.constants.ComponentPath; @@ -44,6 +45,12 @@ import java.util.Iterator; * created by Harrison on 2020/03/25 **/ public class ComponentCollector implements XMLable { + private static final long ONE_MINUTE = 60 * 1000L; + + private static final int REUSE_INFO_FIRST_POPUP = 1; + + private static final int REUSE_INFO_SECOND_POPUP = 2; + private static final String SIMPLE_DATE_PATTERN = "yyyy-MM-dd"; private static final String XML = "ComponentCollector"; @@ -90,8 +97,13 @@ public class ComponentCollector implements XMLable { private static final String MARKET_CLICK = "marketClick"; + private static final String PROMPT_JUMP = "promptJump"; + + private static final String TOOLBAR_JUMP = "toolbarJump"; + + private static final String POPUP_JUMP = "popupJump"; + private static final String uuid = DesignerEnvManager.getEnvManager().getUUID(); - private static ComponentCollector instance; private int localCmpNumber = 0; @@ -103,6 +115,12 @@ public class ComponentCollector implements XMLable { private int cmpBoardClick = 0; + private int promptJump = 0; + + private int toolbarJump = 0; + + private int popupJump = 0; + private JSONArray activateRecord = JSONFactory.createJSON(JSON.ARRAY); private JSONArray generateCmpRecord = JSONFactory.createJSON(JSON.ARRAY); @@ -314,6 +332,41 @@ public class ComponentCollector implements XMLable { saveInfo(); } + public void collectPromptJumpWhenJump(){ + if (ComponentReuseNotificationInfo.getInstance().getNotifiedNumber() == REUSE_INFO_FIRST_POPUP) { + this.promptJump = 1; + saveInfo(); + }else if(ComponentReuseNotificationInfo.getInstance().getNotifiedNumber() == REUSE_INFO_SECOND_POPUP){ + this.promptJump = 2; + saveInfo(); + } + } + + + public void collectPromptJumpWhenShow() { + if (ComponentReuseNotificationInfo.getInstance().getNotifiedNumber() == REUSE_INFO_SECOND_POPUP) { + this.promptJump = -1; + saveInfo(); + } + } + + public void collectToolbarJump() { + if (this.toolbarJump == 0) { + this.toolbarJump = 1; + saveInfo(); + } + + } + + public void collectPopupJump() { + long currentTime = System.currentTimeMillis(); + long lastGuidePopUpTime = ComponentReuseNotificationInfo.getInstance().getLastGuidePopUpTime(); + if (currentTime - lastGuidePopUpTime <= ONE_MINUTE && this.popupJump == 0) { + this.popupJump = 1; + saveInfo(); + } + } + public void clearSortType() { sortType = JSONFactory.createJSON(JSON.ARRAY); } @@ -419,6 +472,9 @@ public class ComponentCollector implements XMLable { this.searchContent = parseJSONArray(reader.getAttrAsString(SEARCH_CONTENT,StringUtils.EMPTY)); this.filterContent = parseJSONArray(reader.getAttrAsString(FILTER_CONTENT, StringUtils.EMPTY)); this.sortType = parseJSONArray(reader.getAttrAsString(SORT_TYPE, StringUtils.EMPTY)); + this.promptJump = reader.getAttrAsInt(PROMPT_JUMP, 0); + this.toolbarJump = reader.getAttrAsInt(TOOLBAR_JUMP, 0); + this.popupJump = reader.getAttrAsInt(POPUP_JUMP, 0); } } @@ -453,6 +509,9 @@ public class ComponentCollector implements XMLable { .attr(SEARCH_CONTENT, searchContent.toString()) .attr(FILTER_CONTENT, filterContent.toString()) .attr(SORT_TYPE, sortType.toString()) + .attr(PROMPT_JUMP, promptJump) + .attr(TOOLBAR_JUMP, toolbarJump) + .attr(POPUP_JUMP, popupJump) .end(); } @@ -477,6 +536,15 @@ public class ComponentCollector implements XMLable { jo.put(SEARCH_CONTENT, searchContent.toString()); jo.put(FILTER_CONTENT, filterContent.toString()); jo.put(SORT_TYPE, sortType.toString()); + jo.put("guideInfo", assembleGuideInfo()); + return jo.toString(); + } + + private String assembleGuideInfo() { + JSONObject jo = JSONFactory.createJSON(JSON.OBJECT); + jo.put(PROMPT_JUMP, promptJump) + .put(TOOLBAR_JUMP, toolbarJump) + .put(POPUP_JUMP, popupJump); return jo.toString(); } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/LocalWidgetBlock.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/LocalWidgetBlock.java index 862616fa40..911ff7b772 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/LocalWidgetBlock.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/LocalWidgetBlock.java @@ -13,6 +13,7 @@ import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.WidgetToolBarPane; +import com.fr.design.mainframe.share.collect.ComponentCollector; import com.fr.design.mainframe.share.group.ui.GroupMoveDialog; import com.fr.design.mainframe.share.ui.base.PopupMenuItem; import com.fr.design.mainframe.share.ui.local.LocalWidgetRepoPane; @@ -192,6 +193,7 @@ public class LocalWidgetBlock extends PreviewWidgetBlock return; } hidePreview(); + ComponentCollector.getInstance().collectPopupJump(); Object source = e.getSource(); Widget creatorSource; String shareId; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java index 15ebebd6d9..4b5c9c0cb5 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java @@ -123,6 +123,7 @@ public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock { if (lastPressEvent == null) { return; } + ComponentCollector.getInstance().collectPopupJump(); Object source = e.getSource(); Widget creatorSource; String shareId; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallComponentHelper.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallComponentHelper.java index 8e4de49f32..3f41afe36d 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallComponentHelper.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallComponentHelper.java @@ -22,12 +22,12 @@ public class InstallComponentHelper { private static final String PRE_INSTALL_PATH = "/com/fr/form/share/components"; private static final String[] PRE_INSTALL_COMPONENTS = new String[]{ - "大屏标题-蓝白.739e7afd-ce1d-40ea-b272-3c96eacc27f8.reu", - "单数据指标卡-绿色.48ea0497-1c7f-4894-a927-0f18fe4d2f27.reu", - "单数据指标卡-蓝色.d158c9d6-66be-410a-8697-47b19a8f9565.reu", - "分类对比竖向仪表板-浅色.a90a7b81-26fd-4461-8a39-ce1c07a16ad0.reu", - "分层雷达图-浅色.d2cd7a40-c14c-4a79-a30e-25d2ba555479.reu", - "进度表格-浅色.8aafad8b-d85c-4921-b45d-1acb4c226ca2.reu" + "单行指标卡.f3df58b3-4302-4cab-ab77-caaf225de60a.reu", + "分层雷达图-深色.49f8397c-e6a6-482a-acc7-46d8cec353a4.reu", + "红绿灯表格-浅色.d0466992-328a-4ccf-ad67-6cbc844d669c.reu", + "进度表格-深色.de4141ce-5c25-4506-9424-f5aa15fbf6d0.reu", + "三列指标卡.61a83d18-a162-4dc3-aa57-3b954edaf82e.reu", + "透明按钮切换图表.e373e13a-3da0-4c29-91bc-9ae804241023.reu" }; public static void installPreComponent() { From 722d32f6db066aa04ce4825ecb78cc151f3b388b Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Thu, 20 May 2021 13:35:17 +0800 Subject: [PATCH 011/148] =?UTF-8?q?REPORT-51678=20promptWindow=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E5=8F=8D=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mainframe/EastRegionContainerPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java index 541cb8e0f8..cb290e49ef 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java @@ -533,7 +533,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { } public PromptWindow getWidgetLibPromptWindow() { - if (getWidgetLibSnapChat().hasRead()) { + if (!getWidgetLibSnapChat().hasRead()) { return new ReuseGuideDialog(DesignerContext.getDesignerFrame()); } return null; From 72b00b8298a4e353111fd211090e41f79bfdb7b9 Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Thu, 20 May 2021 15:03:53 +0800 Subject: [PATCH 012/148] =?UTF-8?q?REPORT-52490=20=E7=A4=BE=E5=8C=BA?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E6=B7=BB=E5=8A=A0=E6=A8=A1=E6=9D=BF=E5=95=86?= =?UTF-8?q?=E5=9F=8E=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/actions/community/TemplateStoreAction.java | 9 ++++----- .../design/mainframe/share/collect/CollectorManager.java | 0 .../mainframe/share/collect/ComponentCollector.java | 0 .../design/mainframe/share/collect/ComponentSender.java | 0 .../com/fr/design/mainframe/toolbar/ToolBarMenuDock.java | 1 + 5 files changed, 5 insertions(+), 5 deletions(-) rename designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/TemplateStoreMenu.java => designer-base/src/main/java/com/fr/design/actions/community/TemplateStoreAction.java (83%) rename {designer-form => designer-base}/src/main/java/com/fr/design/mainframe/share/collect/CollectorManager.java (100%) rename {designer-form => designer-base}/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java (100%) rename {designer-form => designer-base}/src/main/java/com/fr/design/mainframe/share/collect/ComponentSender.java (100%) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/TemplateStoreMenu.java b/designer-base/src/main/java/com/fr/design/actions/community/TemplateStoreAction.java similarity index 83% rename from designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/TemplateStoreMenu.java rename to designer-base/src/main/java/com/fr/design/actions/community/TemplateStoreAction.java index 7346cb1f5a..6a01b3f1c4 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/TemplateStoreMenu.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/TemplateStoreAction.java @@ -1,8 +1,7 @@ -package com.fr.design.mainframe.share.ui.menu; +package com.fr.design.actions.community; import com.fr.base.BaseUtils; import com.fr.design.actions.UpdateAction; -import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.share.collect.ComponentCollector; import com.fr.design.menu.MenuKeySet; import com.fr.design.utils.BrowseUtils; @@ -14,9 +13,9 @@ import java.awt.event.ActionEvent; /** * created by Harrison on 2020/03/24 **/ -public class TemplateStoreMenu extends UpdateAction { +public class TemplateStoreAction extends UpdateAction { - public TemplateStoreMenu() { + public TemplateStoreAction() { this.setMenuKeySet(TEMPLATE); this.setName(getMenuKeySet().getMenuName()); @@ -29,7 +28,7 @@ public class TemplateStoreMenu extends UpdateAction { @Override public String getMenuName() { - return Toolkit.i18nText("Fine-Design_Share_Template_Store"); + return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Share_Template_Store"); } @Override diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/collect/CollectorManager.java b/designer-base/src/main/java/com/fr/design/mainframe/share/collect/CollectorManager.java similarity index 100% rename from designer-form/src/main/java/com/fr/design/mainframe/share/collect/CollectorManager.java rename to designer-base/src/main/java/com/fr/design/mainframe/share/collect/CollectorManager.java diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java similarity index 100% rename from designer-form/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java rename to designer-base/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/collect/ComponentSender.java b/designer-base/src/main/java/com/fr/design/mainframe/share/collect/ComponentSender.java similarity index 100% rename from designer-form/src/main/java/com/fr/design/mainframe/share/collect/ComponentSender.java rename to designer-base/src/main/java/com/fr/design/mainframe/share/collect/ComponentSender.java diff --git a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java index 3dbdac0948..d6cdbd8e3f 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -591,6 +591,7 @@ public abstract class ToolBarMenuDock { shortCuts.add(new TechSolutionAction()); shortCuts.add(SeparatorDef.DEFAULT); + shortCuts.add(new TemplateStoreAction()); LocaleCenter.buildAction(new LocaleAction() { @Override From 03fe02e702eae08fc8ea00ee917bcb817ab6409e Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Thu, 20 May 2021 15:04:38 +0800 Subject: [PATCH 013/148] =?UTF-8?q?REPORT-52364=20SnapChat=E5=BC=B9?= =?UTF-8?q?=E7=AA=97=E8=B5=84=E6=BA=90=E8=B7=AF=E5=BE=84=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=B8=8E=E5=9B=BD=E9=99=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/EastRegionContainerPane.java | 4 +++- .../fr/design/mainframe/reuse/ReuseGuideDialog.java | 10 +++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java index cb290e49ef..5053efbe0c 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java @@ -100,6 +100,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { private JPanel defaultPane; // "无可用配置项"面板 private JPanel defaultAuthorityPane; // "该元素不支持权限编辑" private PropertyItem selectedItem; // 当前被选中的属性配置项 + private SnapChat widgetLibSnapChat; public enum PropertyMode { REPORT, // 报表 @@ -300,6 +301,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { "hyperlink", new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_PARA, PropertyMode.REPORT_PARA_WIDGET, PropertyMode.REPORT_FLOAT, PropertyMode.POLY, PropertyMode.POLY_CHART}, new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_FLOAT, PropertyMode.FORM_REPORT, PropertyMode.POLY_REPORT}); // 组件库 + widgetLibSnapChat = SnapChatFactory.createSnapChat(false, SnapChatKeys.COMPONENT); PropertyItem widgetLib = new PropertyItem( KEY_WIDGET_LIB, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Widget_Library"), @@ -529,7 +531,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { } public SnapChat getWidgetLibSnapChat() { - return SnapChatFactory.createSnapChat(false, SnapChatKeys.COMPONENT); + return widgetLibSnapChat; } public PromptWindow getWidgetLibPromptWindow() { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/reuse/ReuseGuideDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/reuse/ReuseGuideDialog.java index 8157f9d16c..98e149e0c1 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/reuse/ReuseGuideDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/reuse/ReuseGuideDialog.java @@ -40,7 +40,7 @@ public class ReuseGuideDialog extends UIDialog implements PromptWindow { JPanel backGroundPane = new JPanel() { @Override protected void paintComponent(Graphics g) { - Image icon = IOUtils.readImage("com/fr/plugin/form/images/background.png");// 003.jpg是测试图片在项目的根目录下 + Image icon = IOUtils.readImage("com/fr/base/images/share/background.png");// 003.jpg是测试图片在项目的根目录下 g.drawImage(icon, 0, 0, getSize().width, getSize().height, this);// 图片会自动缩放 } }; @@ -91,7 +91,7 @@ public class ReuseGuideDialog extends UIDialog implements PromptWindow { JPanel northPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); //右上角关闭按钮 - JButton button = new JButton(new ImageIcon(IOUtils.readImage("/com/fr/plugin/form/images/close.png").getScaledInstance(15, 15, Image.SCALE_SMOOTH))); + JButton button = new JButton(new ImageIcon(IOUtils.readImage("/com/fr/base/images/share/close.png").getScaledInstance(15, 15, Image.SCALE_SMOOTH))); button.setBorder(null); button.setOpaque(false); button.addActionListener(e -> ReuseGuideDialog.this.hideWindow()); @@ -105,8 +105,8 @@ public class ReuseGuideDialog extends UIDialog implements PromptWindow { private JPanel createCenterPanel() { JPanel centerPanel = new JPanel(new BorderLayout()); - UILabel titleLabel = new UILabel(Toolkit.i18nText("Fine-Plugin_Component_Drag_And_Make_Component")); - UILabel imageLabel = new UILabel(new ImageIcon(IOUtils.readImage("com/fr/plugin/form/images/guide.png").getScaledInstance(DEFAULT.width, DEFAULT.height, Image.SCALE_SMOOTH))); + UILabel titleLabel = new UILabel(Toolkit.i18nText("Fine-Design_Share_Drag_And_Make_Component")); + UILabel imageLabel = new UILabel(new ImageIcon(IOUtils.readImage("com/fr/base/images/share/guide.png").getScaledInstance(DEFAULT.width, DEFAULT.height, Image.SCALE_SMOOTH))); titleLabel.setFont(new Font(titleLabel.getFont().getName(), Font.BOLD, TITLE_FONT_SIZE)); titleLabel.setBorder(BorderFactory.createEmptyBorder()); @@ -124,7 +124,7 @@ public class ReuseGuideDialog extends UIDialog implements PromptWindow { private JPanel createSouthPanel() { JPanel southPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); - JButton button = new JButton(Toolkit.i18nText("Fine-Plugin_Component_Try_Drag")) { + JButton button = new JButton(Toolkit.i18nText("Fine-Design_Share_Try_Drag")) { @Override public void paint(Graphics g) { ColorBackground buttonBackground = ColorBackground.getInstance(Color.decode("#419BF9")); From 4f70159da57d5a2e3731f8fa9040a5872f677b36 Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Thu, 20 May 2021 15:13:14 +0800 Subject: [PATCH 014/148] =?UTF-8?q?REPORT-51678=20=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E9=83=A8=E5=88=86=E6=8F=92=E4=BB=B6=E4=BF=AE=E5=A4=8D=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/share/ui/local/ToolbarPane.java | 2 +- .../share/ui/online/AbstractOnlineWidgetShowPane.java | 2 +- .../share/ui/online/OnlineWidgetShowPane.java | 2 +- .../mainframe/share/ui/widgetfilter/FilterPane.java | 10 ++++++---- .../com/fr/design/share/ui/config/ShareConfigPane.java | 2 +- .../com/fr/design/share/ui/generate/EffectContent.java | 5 +++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ToolbarPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ToolbarPane.java index 4a32b149ed..c720e7f9cc 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ToolbarPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ToolbarPane.java @@ -119,7 +119,7 @@ class ToolbarPane extends JPanel { private FilterPane createFilterPane() { filterPanel = FilterPane.createLocalFilterPane(); filterPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 10)); - filterPanel.registerChangeListerner(e -> LocalWidgetRepoPane.getInstance().refreshShowPanel()); + filterPanel.registerChangeListener(e -> LocalWidgetRepoPane.getInstance().refreshShowPanel()); return filterPanel; } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/AbstractOnlineWidgetShowPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/AbstractOnlineWidgetShowPane.java index 5a5d432344..fc2390d619 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/AbstractOnlineWidgetShowPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/AbstractOnlineWidgetShowPane.java @@ -138,7 +138,7 @@ public abstract class AbstractOnlineWidgetShowPane extends JPanel { } public void initFilterPaneListener(FilterPane filterPane) { - filterPane.registerChangeListerner(new ChangeListener() { + filterPane.registerChangeListener(new ChangeListener() { @Override public void stateChanged(final ChangeEvent e) { String filterStr = e.getSource().toString(); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetShowPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetShowPane.java index 691defde77..2325fb1300 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetShowPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetShowPane.java @@ -90,7 +90,7 @@ public class OnlineWidgetShowPane extends AbstractOnlineWidgetShowPane { @Override public void initFilterPaneListener(FilterPane filterPane) { super.initFilterPaneListener(filterPane); - filterPane.registerChangeListerner(new ChangeListener() { + filterPane.registerChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { lastFilter = e.getSource().toString(); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/FilterPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/FilterPane.java index ce976e2171..4e8f9ffc5f 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/FilterPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/FilterPane.java @@ -46,7 +46,7 @@ public class FilterPane extends JPanel { private Popup popup; private boolean showPopup = false; private FilterPopupPane filterPopupPane; - private ChangeListener changeListener; + private List changeListenerList = new ArrayList<>(); private final AWTEventListener awtEventListener; List listenerList = new ArrayList<>(); @@ -191,12 +191,14 @@ public class FilterPane extends JPanel { && !ComparatorUtils.equals(mv.getSource(), filterLabel); } - public void registerChangeListerner(ChangeListener changeListener) { - this.changeListener = changeListener; + public void registerChangeListener(ChangeListener changeListener) { + changeListenerList.add(changeListener); } public void fireChangeListener(ChangeEvent e) { - this.changeListener.stateChanged(e); + for (ChangeListener changeListener : changeListenerList) { + changeListener.stateChanged(e); + } } public void reset() { diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigPane.java b/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigPane.java index 9b55dc1220..fa5606fe8f 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigPane.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigPane.java @@ -155,7 +155,7 @@ public class ShareConfigPane extends BasicPane { private JPanel createInfoPane() { JPanel infoPane = FRGUIPaneFactory.createTitledBorderPane(Toolkit.i18nText("Fine-Design_Share_Introduce")); PlaceholderTextArea textArea = new PlaceholderTextArea(); - textArea.setText(this.widget.getDescription()); + textArea.setText(getDescription()); textArea.setPlaceholder(Toolkit.i18nText("Fine-Design_Share_No_Introduction")); textArea.setEditable(false); UIScrollPane scrollPane = new UIScrollPane(textArea); diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/EffectContent.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/EffectContent.java index 63098ffd51..4fef5f51a4 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/generate/EffectContent.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/EffectContent.java @@ -17,6 +17,7 @@ import com.fr.locale.InterProviderFactory; import javax.swing.BorderFactory; import javax.swing.JComponent; import javax.swing.JPanel; +import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTree; import javax.swing.event.TreeSelectionListener; @@ -144,8 +145,8 @@ public class EffectContent extends JPanel { } private void setPaneDisabled(Component component) { - if (component instanceof UIScrollPane) { - UIScrollPane pane = (UIScrollPane) component; + if (component instanceof JScrollPane) { + JScrollPane pane = (JScrollPane) component; setPaneDisabled(pane.getViewport().getView()); return; } From 2e2b119c31693288936868caa9580c418b6ac669 Mon Sep 17 00:00:00 2001 From: kerry Date: Thu, 20 May 2021 16:40:54 +0800 Subject: [PATCH 015/148] =?UTF-8?q?REPORT-51244=E3=80=9010.0.17=E3=80=91?= =?UTF-8?q?=E5=A4=8D=E7=94=A8=E7=BB=84=E4=BB=B6=E6=8E=A5=E8=A7=A6=E7=82=B9?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mainframe/reuse/ReuseGuideDialog.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/reuse/ReuseGuideDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/reuse/ReuseGuideDialog.java index 98e149e0c1..4e0bb3143f 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/reuse/ReuseGuideDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/reuse/ReuseGuideDialog.java @@ -6,6 +6,7 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.PromptWindow; +import com.fr.design.mainframe.share.collect.ComponentCollector; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.IOUtils; @@ -58,6 +59,7 @@ public class ReuseGuideDialog extends UIDialog implements PromptWindow { @Override public void hideWindow() { + ComponentReuseNotificationInfo.getInstance().updateLastGuidePopUpTime(); this.setVisible(false); if (innerDialog != null) { innerDialog.setVisible(false); From c69fefe8e73b9d3320f860c98bff4ba2075f538c Mon Sep 17 00:00:00 2001 From: "Henry.Wang" Date: Thu, 20 May 2021 22:33:22 +0800 Subject: [PATCH 016/148] =?UTF-8?q?REPORT-51992=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E6=80=A7=E8=83=BD=E6=8F=90=E5=8D=87-=E7=BC=A9?= =?UTF-8?q?=E7=95=A5=E5=9B=BE=E5=8D=A0=E5=86=85=E5=AD=98=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../layout/FRAbsoluteLayoutAdapter.java | 2 +- .../design/designer/creator/XElementCase.java | 637 +++++++++--------- .../designer/creator/XWAbsoluteLayout.java | 2 + .../design/designer/creator/XWFitLayout.java | 3 + 4 files changed, 334 insertions(+), 310 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java b/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java index 932338a3fd..5326e6f6c2 100644 --- a/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java +++ b/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java @@ -298,7 +298,7 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { WAbsoluteLayout wabs = (WAbsoluteLayout)container.toData(); fix(creator,creator.getX(),creator.getY()); wabs.setBounds(creator.toData(),creator.getBounds()); - + XElementCase.updateECImage(creator); XWAbsoluteLayout layout = (XWAbsoluteLayout) container; layout.updateBoundsWidget(creator); } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java b/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java index 6aafc8c6e1..fc2b1d0468 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java @@ -32,313 +32,332 @@ import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.util.Set; -public class XElementCase extends XBorderStyleWidgetCreator implements FormElementCaseContainerProvider{ - private UILabel imageLable; - private FormDesigner designer; - private static BufferedImage DEFAULT_BACKGROUND; - private boolean isHovering = false; - - static{ - try{ - DEFAULT_BACKGROUND = BaseUtils.readImageWithCache("com/fr/base/images/report/elementcase.png"); - }catch (Throwable e) { - //IBM jdk 1.5.0_22 并发下读取图片有时会异常(EOFException), 这个图片反正只有设计器用到, 捕获住 - DEFAULT_BACKGROUND = CoreGraphHelper.createBufferedImage(0, 0); - } - } - - public XElementCase(ElementCaseEditor widget, Dimension initSize) { - super(widget, initSize); - - - } - - protected void initXCreatorProperties() { - super.initXCreatorProperties(); - - // 报表块初始化时要加载对应的borderStyle - initBorderStyle(); - } - - /** - * 是否支持设置标题 - * @return 是返回true - */ - public boolean hasTitleStyle() { - return true; - } - - /** - * 返回组件属性值 - * @return 返回组件属性值 - * @throws IntrospectionException 异常 - */ - public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { - - CRPropertyDescriptor[] propertyTableEditor = new CRPropertyDescriptor[]{ - new CRPropertyDescriptor("widgetName", this.data.getClass()) - .setI18NName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Form_Widget_Name")), - new CRPropertyDescriptor("visible", this.data.getClass()).setI18NName( - com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Visible")).setPropertyChangeListener(new PropertyChangeAdapter() { - - @Override - public void propertyChange() { - makeVisible(toData().isVisible()); - } - }), - new CRPropertyDescriptor("borderStyle", this.data.getClass()).setEditorClass( - WLayoutBorderStyleEditor.class).setI18NName( - com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Style")).putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Fine-Design_Basic_Advanced") - .setPropertyChangeListener(new PropertyChangeAdapter() { - - @Override - public void propertyChange() { - initStyle(); - } - }), - new CRPropertyDescriptor("margin", this.data.getClass()).setEditorClass(PaddingMarginEditor.class) - .setI18NName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Layout_Padding")) - .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Fine-Design_Basic_Advanced"), - new CRPropertyDescriptor("toolBars", this.data.getClass()).setEditorClass(ElementCaseToolBarEditor.class) - .setI18NName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_EC_Toolbar")) - .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Fine-Design_Basic_Advanced") - - - }; - CRPropertyDescriptor[] extraTableEditor = getExtraTableEditor(); - return ArrayUtils.addAll(propertyTableEditor, extraTableEditor); - } - - - public CRPropertyDescriptor[] getExtraTableEditor(){ - CRPropertyDescriptor[] extraTableEditor = resolveCompatible(); - CRPropertyDescriptor reportFitEditor = getReportFitEditor(); - if (reportFitEditor == null) { - return extraTableEditor; - } - return ArrayUtils.add(extraTableEditor, reportFitEditor); - } - - @Override - public boolean supportMobileStyle() { - return false; - } - - private CRPropertyDescriptor getReportFitEditor() { - this.designer = WidgetPropertyPane.getInstance().getEditingFormDesigner(); - FitProvider wbTpl = designer.getTarget(); - ReportFitAttr fitAttr = wbTpl.getReportFitAttr(); - ElementCaseEditor editor = this.toData(); - //兼容之前报表块(之前三个选项为:默认 横向 双向 现在是:横向 双向 不自适应) - if (editor.getFitStateInPC() == 0) { - editor.setReportFitAttr(null); - } - ReportFitAttr reportFit = editor.getReportFitAttr(); - if(fitAttr != null){ - reportFit = fitAttr.fitInBrowser() ? editor.getReportFitAttr() : fitAttr; - } - ReportFitAttr reportFitAttr = editor.getReportFitAttr() == null ? fitAttr : reportFit; - BrowserFitPropertyEditor browserFitPropertyEditor = new BrowserFitPropertyEditor(); - CRPropertyDescriptor extraEditor = browserFitPropertyEditor.createPropertyDescriptor(this.data.getClass(), reportFitAttr); - if (editor.getReportFitAttr() == null) { - editor.setReportFitInPc(browserFitPropertyEditor.getFitStateInPC(fitAttr)); - } - return extraEditor; - } - - - private CRPropertyDescriptor[] resolveCompatible() { - CRPropertyDescriptor[] extraProperty = new CRPropertyDescriptor[0]; - //这边有个插件兼容问题,之后还是要改回process才行 - Set set = ExtraDesignClassManager.getInstance().getArray(AbstractFormElementCaseEditorProvider.MARK_STRING); - for (FormElementCaseEditorProvider provider : set) { - if (provider == null) { - continue; - } - this.designer = WidgetPropertyPane.getInstance().getEditingFormDesigner(); - FormProvider formProvider = designer.getTarget(); - ElementCaseEditorProvider elementCaseEditorProvider = this.toData(); - PropertyDescriptor[] extraEditor = provider.createPropertyDescriptor(this.data.getClass(), formProvider, elementCaseEditorProvider); - extraProperty = (CRPropertyDescriptor[]) ArrayUtils.addAll(extraProperty, extraEditor); - } - return extraProperty; - } - - @Override - protected String getIconName() { - return "text_field_16.png"; - } - - /** - * 返回组件默认名 - * @return 组件类名(小写) - */ - public String createDefaultName() { - return "report"; - } - - @Override - protected JComponent initEditor() { - if (editor == null) { - setBorder(DEFALUTBORDER); - editor = new JPanel(); - editor.setBackground(null); - editor.setLayout(null); - imageLable = initImageBackground(); - - coverPanel = new CoverReportPane(); - coverPanel.setPreferredSize(imageLable.getPreferredSize()); - coverPanel.setBounds(imageLable.getBounds()); - - editor.add(coverPanel); - coverPanel.setVisible(false); - editor.add(imageLable); - } - return editor; - } - - /** - * 从data中获取到图片背景, 并设置到Label上 - */ - private UILabel initImageBackground(){ - UILabel imageLable = new UILabel(); - BufferedImage image = toData().getECImage(); - if (image == null) { - image = DEFAULT_BACKGROUND; - } - setLabelBackground(image, imageLable); - - return imageLable; - } - - /** - * 设置指定Label的背景 - */ - private void setLabelBackground(Image image, UILabel imageLable){ - ImageIcon icon = new ImageIcon(image); - imageLable.setIcon(icon); - imageLable.setOpaque(true); - imageLable.setLayout(null); - imageLable.setBounds(0, 0, icon.getIconWidth(), icon.getIconHeight()); - } - - @Override - public void paintBorder(Graphics g, Rectangle bounds){ - if (!isHovering) { - super.paintBorder(g, bounds); - } - } - - - /** - * 初始化大小 - * @return 尺寸 - */ - public Dimension initEditorSize() { - return BORDER_PREFERRED_SIZE; - } - - /** - * 是否是报表块 - * @return 是 - */ - public boolean isReport() { - return true; - } - - /** - * 该组件是否可以拖入参数面板 - * @return 是则返回true - */ - public boolean canEnterIntoParaPane(){ - return false; - } - - /** - * 返回报表块对应的widget - * @return 返回ElementCaseEditor - */ - public ElementCaseEditor toData() { - return ((ElementCaseEditor) data); - } - - public FormElementCaseProvider getElementCase() { - return toData().getElementCase(); - } - - public String getElementCaseContainerName() { - return toData().getWidgetName(); - } - - public void setElementCase(FormElementCaseProvider el) { - toData().setElementCase(el); - } - - public void setBackground(BufferedImage image){ - toData().setECImage(image); - setEditorIcon(image); - } - - private void setEditorIcon(BufferedImage image){ - setLabelBackground(image, imageLable); - } - - public Dimension getSize(){ - return new Dimension(this.getWidth(), this.getHeight()); - } - - /** - * 响应点击事件 - * @param editingMouseListener 事件处理器 - * @param e 点击事件 - */ - public void respondClick(EditingMouseListener editingMouseListener,MouseEvent e){ - super.respondClick(editingMouseListener, e); - editingMouseListener.refreshTopXCreator(); - if (this.isShareConfigButtonFocus()) { - CoverReportPane.showShareConfig(((XCreator)this.getParent()).toData()); - } else { - switchTab(e, editingMouseListener); - } - } - - - private void switchTab(MouseEvent e,EditingMouseListener editingMouseListener){ - FormDesigner designer = editingMouseListener.getDesigner(); - if (e.getButton() == MouseEvent.BUTTON1 && - (e.getClickCount() == 2 || designer.getCursor().getType() == Cursor.HAND_CURSOR)){ - FormElementCaseContainerProvider component = (FormElementCaseContainerProvider) designer.getComponentAt(e); - //切换设计器 - designer.switchTab(component); - } - } - - @Override - public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { - return new WidgetPropertyUIProvider[]{ new ElementCasePropertyUI(this)}; - } - - /** - * data属性改变触发其他操作 - * - */ - public void firePropertyChange(){ - initStyle(); - } - - /** - * 是否支持设置可用 - * return boolean - */ - public boolean supportSetEnable(){ - return false; - } - - /** - * 是否支持共享-现只支持报表块、图表、tab块、绝对布局 - * @return - */ - public boolean isSupportShared() { - return true; - } +public class XElementCase extends XBorderStyleWidgetCreator implements FormElementCaseContainerProvider { + private UILabel imageLable; + private FormDesigner designer; + private static BufferedImage DEFAULT_BACKGROUND; + private boolean isHovering = false; + + static { + try { + DEFAULT_BACKGROUND = BaseUtils.readImageWithCache("com/fr/base/images/report/elementcase.png"); + } catch (Throwable e) { + //IBM jdk 1.5.0_22 并发下读取图片有时会异常(EOFException), 这个图片反正只有设计器用到, 捕获住 + DEFAULT_BACKGROUND = CoreGraphHelper.createBufferedImage(0, 0); + } + } + + public XElementCase(ElementCaseEditor widget, Dimension initSize) { + super(widget, initSize); + + + } + + protected void initXCreatorProperties() { + super.initXCreatorProperties(); + + // 报表块初始化时要加载对应的borderStyle + initBorderStyle(); + } + + /** + * 是否支持设置标题 + * @return 是返回true + */ + public boolean hasTitleStyle() { + return true; + } + + /** + * 返回组件属性值 + * @return 返回组件属性值 + * @throws IntrospectionException 异常 + */ + public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { + + CRPropertyDescriptor[] propertyTableEditor = new CRPropertyDescriptor[]{ + new CRPropertyDescriptor("widgetName", this.data.getClass()) + .setI18NName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Form_Widget_Name")), + new CRPropertyDescriptor("visible", this.data.getClass()).setI18NName( + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Visible")).setPropertyChangeListener(new PropertyChangeAdapter() { + + @Override + public void propertyChange() { + makeVisible(toData().isVisible()); + } + }), + new CRPropertyDescriptor("borderStyle", this.data.getClass()).setEditorClass( + WLayoutBorderStyleEditor.class).setI18NName( + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Style")).putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Fine-Design_Basic_Advanced") + .setPropertyChangeListener(new PropertyChangeAdapter() { + + @Override + public void propertyChange() { + initStyle(); + } + }), + new CRPropertyDescriptor("margin", this.data.getClass()).setEditorClass(PaddingMarginEditor.class) + .setI18NName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Layout_Padding")) + .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Fine-Design_Basic_Advanced"), + new CRPropertyDescriptor("toolBars", this.data.getClass()).setEditorClass(ElementCaseToolBarEditor.class) + .setI18NName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_EC_Toolbar")) + .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Fine-Design_Basic_Advanced") + + + }; + CRPropertyDescriptor[] extraTableEditor = getExtraTableEditor(); + return ArrayUtils.addAll(propertyTableEditor, extraTableEditor); + } + + + public CRPropertyDescriptor[] getExtraTableEditor() { + CRPropertyDescriptor[] extraTableEditor = resolveCompatible(); + CRPropertyDescriptor reportFitEditor = getReportFitEditor(); + if (reportFitEditor == null) { + return extraTableEditor; + } + return ArrayUtils.add(extraTableEditor, reportFitEditor); + } + + @Override + public boolean supportMobileStyle() { + return false; + } + + private CRPropertyDescriptor getReportFitEditor() { + this.designer = WidgetPropertyPane.getInstance().getEditingFormDesigner(); + FitProvider wbTpl = designer.getTarget(); + ReportFitAttr fitAttr = wbTpl.getReportFitAttr(); + ElementCaseEditor editor = this.toData(); + //兼容之前报表块(之前三个选项为:默认 横向 双向 现在是:横向 双向 不自适应) + if (editor.getFitStateInPC() == 0) { + editor.setReportFitAttr(null); + } + ReportFitAttr reportFit = editor.getReportFitAttr(); + if (fitAttr != null) { + reportFit = fitAttr.fitInBrowser() ? editor.getReportFitAttr() : fitAttr; + } + ReportFitAttr reportFitAttr = editor.getReportFitAttr() == null ? fitAttr : reportFit; + BrowserFitPropertyEditor browserFitPropertyEditor = new BrowserFitPropertyEditor(); + CRPropertyDescriptor extraEditor = browserFitPropertyEditor.createPropertyDescriptor(this.data.getClass(), reportFitAttr); + if (editor.getReportFitAttr() == null) { + editor.setReportFitInPc(browserFitPropertyEditor.getFitStateInPC(fitAttr)); + } + return extraEditor; + } + + + private CRPropertyDescriptor[] resolveCompatible() { + CRPropertyDescriptor[] extraProperty = new CRPropertyDescriptor[0]; + //这边有个插件兼容问题,之后还是要改回process才行 + Set set = ExtraDesignClassManager.getInstance().getArray(AbstractFormElementCaseEditorProvider.MARK_STRING); + for (FormElementCaseEditorProvider provider : set) { + if (provider == null) { + continue; + } + this.designer = WidgetPropertyPane.getInstance().getEditingFormDesigner(); + FormProvider formProvider = designer.getTarget(); + ElementCaseEditorProvider elementCaseEditorProvider = this.toData(); + PropertyDescriptor[] extraEditor = provider.createPropertyDescriptor(this.data.getClass(), formProvider, elementCaseEditorProvider); + extraProperty = (CRPropertyDescriptor[]) ArrayUtils.addAll(extraProperty, extraEditor); + } + return extraProperty; + } + + @Override + protected String getIconName() { + return "text_field_16.png"; + } + + /** + * 返回组件默认名 + * @return 组件类名(小写) + */ + public String createDefaultName() { + return "report"; + } + + @Override + protected JComponent initEditor() { + if (editor == null) { + setBorder(DEFALUTBORDER); + editor = new JPanel(); + editor.setBackground(null); + editor.setLayout(null); + imageLable = initImageBackground(); + + coverPanel = new CoverReportPane(); + coverPanel.setPreferredSize(imageLable.getPreferredSize()); + coverPanel.setBounds(imageLable.getBounds()); + + editor.add(coverPanel); + coverPanel.setVisible(false); + editor.add(imageLable); + } + return editor; + } + + /** + * 从data中获取到图片背景, 并设置到Label上 + */ + private UILabel initImageBackground() { + UILabel imageLable = new UILabel(); + BufferedImage image = toData().getECImage(); + if (image == null) { + image = DEFAULT_BACKGROUND; + } + setLabelBackground(image, imageLable); + + return imageLable; + } + + /** + * 设置指定Label的背景 + */ + private void setLabelBackground(Image image, UILabel imageLable) { + ImageIcon icon = new ImageIcon(image); + imageLable.setIcon(icon); + imageLable.setOpaque(true); + imageLable.setLayout(null); + imageLable.setBounds(0, 0, icon.getIconWidth(), icon.getIconHeight()); + } + + @Override + public void paintBorder(Graphics g, Rectangle bounds) { + if (!isHovering) { + super.paintBorder(g, bounds); + } + } + + + /** + * 初始化大小 + * @return 尺寸 + */ + public Dimension initEditorSize() { + return BORDER_PREFERRED_SIZE; + } + + /** + * 是否是报表块 + * @return 是 + */ + public boolean isReport() { + return true; + } + + /** + * 该组件是否可以拖入参数面板 + * @return 是则返回true + */ + public boolean canEnterIntoParaPane() { + return false; + } + + /** + * 返回报表块对应的widget + * @return 返回ElementCaseEditor + */ + public ElementCaseEditor toData() { + return ((ElementCaseEditor) data); + } + + public FormElementCaseProvider getElementCase() { + return toData().getElementCase(); + } + + public String getElementCaseContainerName() { + return toData().getWidgetName(); + } + + public void setElementCase(FormElementCaseProvider el) { + toData().setElementCase(el); + } + + public void setBackground(BufferedImage image) { + toData().getElementCaseImage().adjustImageBytes(image); + setEditorIcon(toData().getECImage() == null ? DEFAULT_BACKGROUND : toData().getECImage()); + } + + public static void updateECImage(XCreator creator) { + if (creator instanceof XWTitleLayout) { + XWTitleLayout xwTitleLayout = (XWTitleLayout) creator; + for (int i = 0; i < xwTitleLayout.getComponentCount(); i++) { + Component component = xwTitleLayout.getComponent(i); + if (component instanceof XElementCase) { + XElementCase xElementCase = (XElementCase) component; + xElementCase.toData().getElementCaseImage().updateImage(() -> { + xElementCase.setEditorIcon(xElementCase.toData().getECImage() == null ? DEFAULT_BACKGROUND : xElementCase.toData().getECImage()); + if (xElementCase.designer != null) { + xElementCase.designer.repaint(); + } + }); + } + } + } + } + + + private void setEditorIcon(BufferedImage image) { + setLabelBackground(image, imageLable); + } + + public Dimension getSize() { + return new Dimension(this.getWidth(), this.getHeight()); + } + + /** + * 响应点击事件 + * @param editingMouseListener 事件处理器 + * @param e 点击事件 + */ + public void respondClick(EditingMouseListener editingMouseListener, MouseEvent e) { + super.respondClick(editingMouseListener, e); + editingMouseListener.refreshTopXCreator(); + if (this.isShareConfigButtonFocus()) { + CoverReportPane.showShareConfig(((XCreator) this.getParent()).toData()); + } else { + switchTab(e, editingMouseListener); + } + } + + + private void switchTab(MouseEvent e, EditingMouseListener editingMouseListener) { + FormDesigner designer = editingMouseListener.getDesigner(); + if (e.getButton() == MouseEvent.BUTTON1 && + (e.getClickCount() == 2 || designer.getCursor().getType() == Cursor.HAND_CURSOR)) { + FormElementCaseContainerProvider component = (FormElementCaseContainerProvider) designer.getComponentAt(e); + //切换设计器 + designer.switchTab(component); + } + } + + @Override + public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { + return new WidgetPropertyUIProvider[]{new ElementCasePropertyUI(this)}; + } + + /** + * data属性改变触发其他操作 + * + */ + public void firePropertyChange() { + initStyle(); + } + + /** + * 是否支持设置可用 + * return boolean + */ + public boolean supportSetEnable() { + return false; + } + + /** + * 是否支持共享-现只支持报表块、图表、tab块、绝对布局 + * @return + */ + public boolean isSupportShared() { + return true; + } } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteLayout.java index 32273ca08a..7bab26973b 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteLayout.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteLayout.java @@ -21,6 +21,7 @@ import com.fr.design.mainframe.FormArea; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.WidgetPropertyPane; import com.fr.form.ui.Connector; +import com.fr.form.ui.ElementCaseImage; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; @@ -335,6 +336,7 @@ public class XWAbsoluteLayout extends XLayoutContainer { for (int i = 0, count = abs.getWidgetCount(); i < count; i++) { BoundsWidget bw = (BoundsWidget) abs.getWidget(i); if (bw != null) { + ElementCaseImage.adjustImageSize(bw); Rectangle bounds = bw.getBounds(); XWidgetCreator comp = (XWidgetCreator) XCreatorUtils.createXCreator(bw.getWidget()); if (!comp.acceptType(XWParameterLayout.class)) { diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java index 6d7aa5d9ff..d6cec98e92 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java @@ -12,6 +12,7 @@ import com.fr.design.mainframe.FormArea; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.WidgetPropertyPane; import com.fr.design.utils.gui.LayoutUtils; +import com.fr.form.ui.ElementCaseImage; import com.fr.form.ui.PaddingMargin; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; @@ -683,6 +684,7 @@ public class XWFitLayout extends XLayoutContainer { for (int i=0, num=layout.getWidgetCount(); i Date: Fri, 21 May 2021 10:00:39 +0800 Subject: [PATCH 017/148] =?UTF-8?q?REPORT-52538=20=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=A4=8D=E7=94=A8-=E5=90=88=E5=85=A5=E4=B8=BB=E7=89=88?= =?UTF-8?q?=E6=9C=AC-=E4=BA=8B=E4=BB=B6=E7=9A=84=E5=B8=B8=E8=A7=84?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=A4=84=EF=BC=8C=E5=88=87=E6=8D=A2=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E5=90=8E=E5=86=8D=E6=9F=A5=E7=9C=8B=EF=BC=8C=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=E8=AE=BE=E7=BD=AE=E9=9D=A2=E6=9D=BF=E5=B0=B1=E4=B8=8D?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=86=85=E5=AE=B9=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/gui/controlpane/EventPropertyPane.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/gui/controlpane/EventPropertyPane.java b/designer-form/src/main/java/com/fr/design/gui/controlpane/EventPropertyPane.java index cc3f346690..1cebe463f3 100644 --- a/designer-form/src/main/java/com/fr/design/gui/controlpane/EventPropertyPane.java +++ b/designer-form/src/main/java/com/fr/design/gui/controlpane/EventPropertyPane.java @@ -205,14 +205,14 @@ public class EventPropertyPane extends UIControlPane implements ListControlPaneP nameEdList.setName(text); nameEdList.setSelectionBackground(UIConstants.ATTRIBUTE_PRESS); nameEdList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); - nameEdList.addMouseListener(getHelper().getListMouseListener(nameEdList, this)); nameEdList.addMouseListener(new MouseAdapter() { @Override - public void mouseClicked(MouseEvent e) { + public void mouseReleased(MouseEvent e) { selectNameEdList = nameEdList; updateUINameListSelect(); } }); + nameEdList.addMouseListener(getHelper().getListMouseListener(nameEdList, this)); nameEdList.addModNameActionListener(new ModNameActionListener() { @Override public void nameModed(int index, String oldName, String newName) { @@ -222,7 +222,7 @@ public class EventPropertyPane extends UIControlPane implements ListControlPaneP nameEdList.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent evt) { // richie:避免多次update和populate大大降低效率 - if (!evt.getValueIsAdjusting() && !isPopulating) { + if (!evt.getValueIsAdjusting()) { // shoc 切换的时候加检验 if (hasInvalid(false)) { return; From 46d77e489323f9f03c4e78e80f6df664603c35dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=B2=B3?= <445798420@qq.com> Date: Fri, 21 May 2021 13:49:55 +0800 Subject: [PATCH 018/148] =?UTF-8?q?CHART-19306=20=E4=BB=AA=E8=A1=A8?= =?UTF-8?q?=E7=9B=98=E9=85=8D=E8=89=B2=E9=9D=A2=E6=9D=BF=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../series/ColorPickerPaneWithMaxMin.java | 121 +++++++++ .../gui/style/series/UIColorPickerPane.java | 35 +-- .../component/VanChartBeautyPane.java | 6 +- .../VanChartAbstractPlotSeriesPane.java | 2 +- .../series/VanChartColorValueSeriesPane.java | 104 ++------ .../series/VanChartMultiColorSeriesPane.java | 92 +++++++ .../chart/gauge/VanChartGaugeBeautyPane.java | 113 +++++++++ .../chart/gauge/VanChartGaugeSeriesPane.java | 230 +++++++++++++----- 8 files changed, 547 insertions(+), 156 deletions(-) create mode 100644 designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/series/ColorPickerPaneWithMaxMin.java create mode 100644 designer-chart/src/main/java/com/fr/van/chart/designer/style/series/VanChartMultiColorSeriesPane.java create mode 100644 designer-chart/src/main/java/com/fr/van/chart/gauge/VanChartGaugeBeautyPane.java diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/series/ColorPickerPaneWithMaxMin.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/series/ColorPickerPaneWithMaxMin.java new file mode 100644 index 0000000000..5a0846a188 --- /dev/null +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/series/ColorPickerPaneWithMaxMin.java @@ -0,0 +1,121 @@ +package com.fr.design.mainframe.chart.gui.style.series; + +import com.fr.base.BaseFormula; +import com.fr.chart.chartglyph.MapHotAreaColor; +import com.fr.design.formula.TinyFormulaPane; +import com.fr.design.gui.frpane.AbstractAttrNoScrollPane; + +import javax.swing.JComponent; +import javax.swing.JPanel; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.Color; + +/** + * @author Bjorn + * @version 10.0 + * Created by Bjorn on 2021-05-18 + */ +public class ColorPickerPaneWithMaxMin extends ColorPickerPaneWithFormula { + + private double MAX = Double.MAX_VALUE / 2; + private double MIN = -(Double.MAX_VALUE / 2); + private BaseFormula[] valueArray; + private JPanel autoPane; + + public ColorPickerPaneWithMaxMin(AbstractAttrNoScrollPane container, String meterString) { + this(container, meterString, null); + } + + public ColorPickerPaneWithMaxMin(AbstractAttrNoScrollPane container, String meterString, JPanel autoPane) { + super(container, meterString); + if (autoPane == null) { + return; + } + this.autoPane = autoPane; + this.getDesignTypeButtonGroup().addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + checkAutoPane(); + } + }); + } + + private void checkAutoPane() { + if (getDesignTypeButtonGroup().getSelectedIndex() == 0) { + autoPane.setVisible(true); + } else { + autoPane.setVisible(false); + } + } + + public void refreshGroupPane(Color[] colorArray, BaseFormula[] valueArray) { + this.valueArray = valueArray; + super.refreshGroupPane(colorArray, valueArray); + } + + protected void setTextValue4Index(int index, String value) { + TinyFormulaPane tinyFormulaPane = (TinyFormulaPane) textFieldList.get(index); + setTextState(tinyFormulaPane, index, textFieldList.size() - 1, value); + } + + protected JComponent getNewTextFieldComponent(int i, String value) { + TinyFormulaPane textField = new TinyFormulaPaneWithEnable(); + textField.setBounds(0, i * 2 * TEXTFIELD_HEIGHT, TEXTFIELD_WIDTH, TEXTFIELD_HEIGHT); + setTextState(textField, i, valueArray.length - 1, value); + return textField; + } + + protected String getValue4Index(int i) { + if (i == 0) { + return String.valueOf(MAX); + } + if (i == textFieldList.size() - 1) { + return String.valueOf(MIN); + } + return ((TinyFormulaPane) textFieldList.get(i)).getUITextField().getText(); + } + + protected BaseFormula[] getValueArray(int count) { + BaseFormula[] valueArray = new BaseFormula[count + 1]; + valueArray[0] = BaseFormula.createFormulaBuilder().build(MAX); + valueArray[count] = BaseFormula.createFormulaBuilder().build(MIN); + for (int i = 1; i < count; i++) { + if (i >= textFieldList.size() - 1) { + valueArray[i] = BaseFormula.createFormulaBuilder().build((count - i) * VALUE); + } else { + valueArray[i] = BaseFormula.createFormulaBuilder().build(getValue4Index(i)); + } + } + return valueArray; + } + + private void setTextState(TinyFormulaPane tinyFormulaPane, int index, int maxIndex, String value) { + boolean enable = false; + if (index == 0) { + value = "∞"; + } else if (index == maxIndex) { + value = "-∞"; + } else { + enable = true; + } + tinyFormulaPane.getUITextField().setText(value); + tinyFormulaPane.setEnabled(enable); + } + + public void populateBean(MapHotAreaColor hotAreaColor) { + super.populateBean(hotAreaColor); + if (autoPane != null) { + checkAutoPane(); + } + } + + public class TinyFormulaPaneWithEnable extends TinyFormulaPane { + @Override + public void setEnabled(boolean enabled) { + super.setEnabled(enabled); + formulaTextField.setEnabled(enabled); + formulaTextFieldButton.setEnabled(enabled); + } + } +} diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/series/UIColorPickerPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/series/UIColorPickerPane.java index 25b8760339..fb2d1c31ad 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/series/UIColorPickerPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/series/UIColorPickerPane.java @@ -13,6 +13,7 @@ import com.fr.design.gui.frpane.UINumberDragPane; import com.fr.design.gui.ibutton.UIButtonGroup; import com.fr.design.gui.ilable.BoldFontTextLabel; import com.fr.design.gui.ipoppane.PopupHider; +import com.fr.design.i18n.Toolkit; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.style.color.ColorControlWindow; @@ -53,7 +54,7 @@ public class UIColorPickerPane extends BasicPane implements UIObserver { protected static final int TEXTFIELD_WIDTH = 130; protected static final int UPCONTROLPANE_WIDTH = 230; private static final int LAYOUR_DET = 6; - private static final double VALUE = 100; + public static final double VALUE = 100; protected ArrayList textFieldList; private List colorRecList = new ArrayList(); @@ -171,7 +172,7 @@ public class UIColorPickerPane extends BasicPane implements UIObserver { regionNumPane.updateBean().intValue()), getValueArray(regionNumPane.updateBean().intValue())); } }); - designTypeButtonGroup = new UIButtonGroup(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Mode_Auto"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Mode_Custom")}, new Integer[]{0, 1}); + designTypeButtonGroup = new UIButtonGroup<>(new String[]{Toolkit.i18nText("Fine-Design_Chart_Mode_Auto"), Toolkit.i18nText("Fine-Design_Chart_Mode_Custom")}, new Integer[]{0, 1}); designTypeButtonGroup.setSelectedIndex(0); designTypeButtonGroup.addChangeListener(new ChangeListener() { @Override @@ -201,11 +202,11 @@ public class UIColorPickerPane extends BasicPane implements UIObserver { }; double p = TableLayout.PREFERRED; - double e = getEditAreaWidth (); - double d = TableLayout4VanChartHelper.DESCRIPTION_AREA_WIDTH; + double e = getEditAreaWidth(); + double d = getDescriptionWidth(); double[] columnSize = {d, e}; double[] rowSize = {p}; - Component[][] tmpComp = new Component[][]{new Component[]{new BoldFontTextLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Value_Divided_Stage")), regionNumPane}}; + Component[][] tmpComp = new Component[][]{new Component[]{new BoldFontTextLabel(Toolkit.i18nText("Fine-Design_Chart_Value_Divided_Stage")), regionNumPane}}; stagePanel = TableLayout4VanChartHelper.createGapTableLayoutPane(tmpComp, rowSize, columnSize); @@ -226,10 +227,14 @@ public class UIColorPickerPane extends BasicPane implements UIObserver { refreshGroupPane(colors, getValueArray(number)); } - protected double getEditAreaWidth () { + protected double getEditAreaWidth() { return TableLayout4VanChartHelper.EDIT_AREA_WIDTH; } + protected double getDescriptionWidth() { + return TableLayout4VanChartHelper.DESCRIPTION_AREA_WIDTH; + } + protected ArrayList getTextFieldList(){ return new ArrayList(); } @@ -272,11 +277,11 @@ public class UIColorPickerPane extends BasicPane implements UIObserver { */ public Dimension getPreferredSize() { if (designTypeButtonGroup.getSelectedIndex() == 0) { - return new Dimension(colorGroup.getPreferredSize().width + textGroup.getPreferredSize().width, upControlPane.getPreferredSize().height + MARGIN_TOP); + return new Dimension(colorGroup.getPreferredSize().width + textGroup.getPreferredSize().width, upControlPane.getPreferredSize().height + getBoundY()); } else { - int extra = stagePanel == null ? 0 : stagePanel.getPreferredSize().height + MARGIN_TOP; + int extra = stagePanel == null ? 0 : stagePanel.getPreferredSize().height + getBoundY(); return new Dimension(colorGroup.getPreferredSize().width + textGroup.getPreferredSize().width, - extra + textGroup.getPreferredSize().height + upControlPane.getPreferredSize().height + OFF_HEIGHT + MARGIN_TOP); + extra + textGroup.getPreferredSize().height + upControlPane.getPreferredSize().height + OFF_HEIGHT + getBoundY()); } } @@ -604,10 +609,10 @@ public class UIColorPickerPane extends BasicPane implements UIObserver { @Override public void layoutContainer(Container parent) { - upControlPane.setBounds(MARGIN_LEFT, MARGIN_TOP, UPCONTROLPANE_WIDTH, upControlPane.getPreferredSize().height + MARGIN_TOP); - stagePanel.setBounds(MARGIN_LEFT, upControlPane.getPreferredSize().height + LAYOUR_DET + MARGIN_TOP, UPCONTROLPANE_WIDTH, stagePanel.getPreferredSize().height); - colorGroup.setBounds( getColorgroupMarginLeft (), 2 * MARGIN_TOP + upControlPane.getPreferredSize().height + stagePanel.getPreferredSize().height + 2 * LAYOUR_DET, colorGroup.getPreferredSize().width, colorGroup.getPreferredSize().height + upControlPane.getPreferredSize().height); - textGroup.setBounds(colorGroup.getPreferredSize().width + getColorgroupMarginLeft (), upControlPane.getPreferredSize().height + stagePanel.getPreferredSize().height + 2 * LAYOUR_DET + MARGIN_TOP, textGroup.getPreferredSize().width, textGroup.getPreferredSize().height); + upControlPane.setBounds(getBoundX(), getBoundY(), UPCONTROLPANE_WIDTH, upControlPane.getPreferredSize().height + MARGIN_TOP); + stagePanel.setBounds(getBoundX(), upControlPane.getPreferredSize().height + LAYOUR_DET + getBoundY(), UPCONTROLPANE_WIDTH, stagePanel.getPreferredSize().height); + colorGroup.setBounds( getColorgroupMarginLeft (), 2 * getBoundY() + upControlPane.getPreferredSize().height + stagePanel.getPreferredSize().height + 2 * LAYOUR_DET, colorGroup.getPreferredSize().width, colorGroup.getPreferredSize().height + upControlPane.getPreferredSize().height); + textGroup.setBounds(colorGroup.getPreferredSize().width + getColorgroupMarginLeft (), upControlPane.getPreferredSize().height + stagePanel.getPreferredSize().height + 2 * LAYOUR_DET + getBoundY(), textGroup.getPreferredSize().width, textGroup.getPreferredSize().height); } @Override @@ -693,7 +698,7 @@ public class UIColorPickerPane extends BasicPane implements UIObserver { refreshPane(); } - private void initContainerLister(){ + protected void initContainerLister(){ this.container.initAllListeners(); } @@ -761,7 +766,7 @@ public class UIColorPickerPane extends BasicPane implements UIObserver { return ChartBaseUtils.createColorsWithHSB(color, sum); } - private BaseFormula[] getValueArray(int count) { + protected BaseFormula[] getValueArray(int count) { BaseFormula[] valueArray = new BaseFormula[count + 1]; for (int i = 0; i < valueArray.length; i++) { if (i >= textFieldList.size()) { diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartBeautyPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartBeautyPane.java index 7725d9a0c7..0fefa406e0 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartBeautyPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartBeautyPane.java @@ -44,7 +44,7 @@ public class VanChartBeautyPane extends BasicBeanPane { double[] rowSize = {p}; Component[][] components = new Component[][]{ - new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Gradient_Style")), gradientTypeBox}, + new Component[]{new UILabel(labelName()), gradientTypeBox}, }; return TableLayout4VanChartHelper.createGapTableLayoutPane(components, rowSize, columnSize); @@ -57,6 +57,10 @@ public class VanChartBeautyPane extends BasicBeanPane { }; } + protected String labelName() { + return Toolkit.i18nText("Fine-Design_Chart_Gradient_Style"); + } + public void populateBean(GradientStyle gradientStyle) { gradientTypeBox.setSelectedIndex(this.convertGradientTypeToIndex(gradientStyle.getGradientType())); } diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/series/VanChartAbstractPlotSeriesPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/series/VanChartAbstractPlotSeriesPane.java index 5188912bfb..849507e059 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/series/VanChartAbstractPlotSeriesPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/series/VanChartAbstractPlotSeriesPane.java @@ -147,7 +147,7 @@ public abstract class VanChartAbstractPlotSeriesPane extends AbstractPlotSeriesP } } - private void checkFillStylePane(GradientStyle gradientStyle) { + protected void checkFillStylePane(GradientStyle gradientStyle) { if (vanChartFillStylePane != null) { vanChartFillStylePane.setVisible(gradientStyle.getGradientType() != GradientType.CUSTOM); } diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/series/VanChartColorValueSeriesPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/series/VanChartColorValueSeriesPane.java index 34f86d0200..78bc206677 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/series/VanChartColorValueSeriesPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/series/VanChartColorValueSeriesPane.java @@ -2,42 +2,27 @@ package com.fr.van.chart.designer.style.series; import com.fr.chart.chartattr.Plot; import com.fr.design.gui.ibutton.UIButtonGroup; -import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; -import com.fr.design.layout.TableLayout; -import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.chart.gui.ChartStylePane; -import com.fr.design.widget.FRWidgetFactory; import com.fr.plugin.chart.range.VanChartRangeLegend; import com.fr.plugin.chart.type.LegendType; -import com.fr.van.chart.designer.TableLayout4VanChartHelper; import com.fr.van.chart.designer.component.VanChartBeautyPane; import com.fr.van.chart.designer.component.VanChartValueColorPane; import com.fr.van.chart.designer.style.VanChartStylePane; -import javax.swing.BorderFactory; import javax.swing.JPanel; -import java.awt.BorderLayout; import java.awt.CardLayout; -import java.awt.Component; import java.awt.Dimension; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; /** * @author Bjorn * @version 10.0 * Created by Bjorn on 2020-08-03 */ -public abstract class VanChartColorValueSeriesPane extends VanChartAbstractPlotSeriesPane { - - //颜色划分切换 - private UIButtonGroup colorDivideButton; +public abstract class VanChartColorValueSeriesPane extends VanChartMultiColorSeriesPane { private VanChartValueColorPane vanChartValueColorPane; - private JPanel colorDividePane; - public VanChartColorValueSeriesPane(ChartStylePane parent, Plot plot) { super(parent, plot); } @@ -51,79 +36,36 @@ public abstract class VanChartColorValueSeriesPane extends VanChartAbstractPlotS this.vanChartValueColorPane = vanChartValueColorPane; } - //获取颜色面板 - protected JPanel getColorPane() { - JPanel panel = new JPanel(new BorderLayout()); - JPanel colorChoosePane = createColorChoosePane(); - if (colorChoosePane != null) { - panel.add(colorChoosePane, BorderLayout.CENTER); - } - - stylePane = createStylePane(); - setColorPaneContent(panel); - JPanel colorPane = TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Color"), panel); - panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 0)); - return panel.getComponentCount() == 0 ? null : colorPane; - } - protected JPanel createColorChoosePane() { vanChartFillStylePane = getVanChartFillStylePane(); if (vanChartFillStylePane != null) { - JPanel divideButtonPane = initDivideButtonPane(); - vanChartValueColorPane = new VanChartValueColorPane((VanChartStylePane) parentPane); - - colorDividePane = new JPanel(new CardLayout()) { - @Override - public Dimension getPreferredSize() { - if (colorDivideButton.getSelectedIndex() == 0) { - return vanChartFillStylePane.getPreferredSize(); - } else { - return vanChartValueColorPane.getPreferredSize(); - } - } - }; - colorDividePane.add(vanChartFillStylePane, "series"); - colorDividePane.add(vanChartValueColorPane, "value"); - - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; - double[] col = {f}; - double[] row = {p, p, p}; - Component[][] components = new Component[][]{ - new Component[]{divideButtonPane}, - new Component[]{colorDividePane} - }; - return TableLayoutHelper.createCommonTableLayoutPane(components, row, col, 0); + return super.createColorChoosePane(); } return null; } - private JPanel initDivideButtonPane() { - colorDivideButton = new UIButtonGroup<>(new String[]{ + protected UIButtonGroup createDivideButton() { + return new UIButtonGroup<>(new String[]{ Toolkit.i18nText("Fine-Design_Chart_Series"), Toolkit.i18nText("Fine-Design_Chart_Use_Value") }, new String[]{"series", "value"}); - colorDivideButton.addActionListener(new ActionListener() { + } + + protected JPanel createColorDividePane() { + vanChartValueColorPane = new VanChartValueColorPane((VanChartStylePane) parentPane); + JPanel colorDividePane = new JPanel(new CardLayout()) { @Override - public void actionPerformed(ActionEvent e) { - checkCardPane(); + public Dimension getPreferredSize() { + if (getColorDivideButton().getSelectedIndex() == 0) { + return vanChartFillStylePane.getPreferredSize(); + } else { + return vanChartValueColorPane.getPreferredSize(); + } } - }); - colorDivideButton.setSelectedIndex(0); - UILabel label = FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Chart_Color_Divide")); - Component[][] labelComponent = new Component[][]{ - new Component[]{label, colorDivideButton}, }; - JPanel gapTableLayoutPane = TableLayout4VanChartHelper.createGapTableLayoutPane(labelComponent); - gapTableLayoutPane.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0)); - return gapTableLayoutPane; - } - - private void checkCardPane() { - CardLayout cardLayout = (CardLayout) colorDividePane.getLayout(); - cardLayout.show(colorDividePane, colorDivideButton.getSelectedItem()); - colorDividePane.validate(); - colorDividePane.repaint(); + colorDividePane.add(vanChartFillStylePane, "series"); + colorDividePane.add(vanChartValueColorPane, "value"); + return colorDividePane; } //风格 @@ -139,9 +81,9 @@ public abstract class VanChartColorValueSeriesPane extends VanChartAbstractPlotS return; } super.updateBean(plot); - if (colorDivideButton != null) { + if (getColorDivideButton() != null) { VanChartRangeLegend legend = (VanChartRangeLegend) plot.getLegend(); - int selectedIndex = colorDivideButton.getSelectedIndex(); + int selectedIndex = getColorDivideButton().getSelectedIndex(); if (selectedIndex == 0) { legend.setLegendType(LegendType.ORDINARY); } else { @@ -158,13 +100,13 @@ public abstract class VanChartColorValueSeriesPane extends VanChartAbstractPlotS return; } super.populateBean(plot); - if (colorDivideButton != null) { + if (getColorDivideButton() != null) { VanChartRangeLegend legend = (VanChartRangeLegend) plot.getLegend(); LegendType legendType = legend.getLegendType(); if (legendType == LegendType.ORDINARY) { - colorDivideButton.setSelectedIndex(0); + getColorDivideButton().setSelectedIndex(0); } else { - colorDivideButton.setSelectedIndex(1); + getColorDivideButton().setSelectedIndex(1); } vanChartValueColorPane.populateBean(legend); checkCardPane(); diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/series/VanChartMultiColorSeriesPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/series/VanChartMultiColorSeriesPane.java new file mode 100644 index 0000000000..ec87d3675f --- /dev/null +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/series/VanChartMultiColorSeriesPane.java @@ -0,0 +1,92 @@ +package com.fr.van.chart.designer.style.series; + +import com.fr.chart.chartattr.Plot; +import com.fr.design.gui.ibutton.UIButtonGroup; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.chart.gui.ChartStylePane; +import com.fr.design.widget.FRWidgetFactory; +import com.fr.van.chart.designer.TableLayout4VanChartHelper; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Component; + +/** + * @author Bjorn + * @version 10.0 + * Created by Bjorn on 2021-05-19 + */ +public abstract class VanChartMultiColorSeriesPane extends VanChartAbstractPlotSeriesPane { + + //颜色划分切换 + private UIButtonGroup colorDivideButton; + + private JPanel colorDividePane; + + public VanChartMultiColorSeriesPane(ChartStylePane parent, Plot plot) { + super(parent, plot); + } + + public UIButtonGroup getColorDivideButton() { + return colorDivideButton; + } + + //获取颜色面板 + protected JPanel getColorPane() { + JPanel panel = new JPanel(new BorderLayout()); + JPanel colorChoosePane = createColorChoosePane(); + if (colorChoosePane != null) { + panel.add(colorChoosePane, BorderLayout.CENTER); + } + + stylePane = createStylePane(); + setColorPaneContent(panel); + JPanel colorPane = TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Color"), panel); + panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 0)); + return panel.getComponentCount() == 0 ? null : colorPane; + } + + protected JPanel createColorChoosePane() { + JPanel divideButtonPane = initDivideButtonPane(); + colorDividePane = createColorDividePane(); + + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] col = {f}; + double[] row = {p, p, p, p}; + Component[][] components = new Component[][]{ + new Component[]{divideButtonPane}, + new Component[]{colorDividePane} + }; + return TableLayoutHelper.createCommonTableLayoutPane(components, row, col, 0); + } + + private JPanel initDivideButtonPane() { + colorDivideButton = createDivideButton(); + colorDivideButton.addActionListener(e -> checkCardPane()); + colorDivideButton.setSelectedIndex(0); + UILabel label = FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Chart_Color_Divide")); + Component[][] labelComponent = new Component[][]{ + new Component[]{label, colorDivideButton}, + }; + JPanel gapTableLayoutPane = TableLayout4VanChartHelper.createGapTableLayoutPane(labelComponent); + gapTableLayoutPane.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0)); + return gapTableLayoutPane; + } + + protected abstract UIButtonGroup createDivideButton(); + + protected abstract JPanel createColorDividePane(); + + protected void checkCardPane() { + CardLayout cardLayout = (CardLayout) colorDividePane.getLayout(); + cardLayout.show(colorDividePane, String.valueOf(colorDivideButton.getSelectedItem())); + colorDividePane.validate(); + colorDividePane.repaint(); + } +} diff --git a/designer-chart/src/main/java/com/fr/van/chart/gauge/VanChartGaugeBeautyPane.java b/designer-chart/src/main/java/com/fr/van/chart/gauge/VanChartGaugeBeautyPane.java new file mode 100644 index 0000000000..9f4f0ecb73 --- /dev/null +++ b/designer-chart/src/main/java/com/fr/van/chart/gauge/VanChartGaugeBeautyPane.java @@ -0,0 +1,113 @@ +package com.fr.van.chart.gauge; + +import com.fr.chart.base.GradientStyle; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.TableLayout; +import com.fr.design.style.background.gradient.FixedGradientBar; +import com.fr.plugin.chart.type.GradientType; +import com.fr.van.chart.designer.TableLayout4VanChartHelper; +import com.fr.van.chart.designer.component.VanChartBeautyPane; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +/** + * @author Bjorn + * @version 10.0 + * Created by Bjorn on 2021-05-20 + */ +public class VanChartGaugeBeautyPane extends VanChartBeautyPane { + + private FixedGradientBar colorGradient; + private JPanel gradientBarPane; + + public VanChartGaugeBeautyPane() { + super(); + this.add(initGradientBarPane(), BorderLayout.SOUTH); + this.setBorder(BorderFactory.createEmptyBorder(0, 0, 5, 0)); + initListener(); + } + + private JPanel initGradientBarPane() { + colorGradient = new FixedGradientBar(4, 140); + + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH; + double[] columnSize = {f, e}; + double[] rowSize = {p, p}; + Component[][] components = new Component[][]{ + new Component[]{null, null}, + new Component[]{null, colorGradient}, + }; + + gradientBarPane = TableLayout4VanChartHelper.createGapTableLayoutPane(components, rowSize, columnSize); + return gradientBarPane; + } + + private void initListener() { + getGradientTypeBox().addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + checkGradientBarVisible(); + } + }); + } + + protected String labelName() { + return Toolkit.i18nText("Fine-Design_Chart_Color_Style"); + } + + private void checkGradientBarVisible() { + gradientBarPane.setVisible(getGradientTypeBox().getSelectedIndex() == 1); + } + + protected String[] getNameArray() { + return new String[]{ + Toolkit.i18nText("Fine-Design_Chart_Solid_Color"), + Toolkit.i18nText("Fine-Design_Chart_Legend_Gradual"), + }; + } + + public void populateBean(GradientStyle gradientStyle) { + super.populateBean(gradientStyle); + + if (gradientStyle.getGradientType() == GradientType.CUSTOM) { + colorGradient.updateColor(gradientStyle.getStartColor(), gradientStyle.getEndColor()); + } + + checkGradientBarVisible(); + } + + @Override + public GradientStyle updateBean() { + GradientStyle gradientStyle = super.updateBean(); + + if (gradientStyle.getGradientType() == GradientType.CUSTOM) { + gradientStyle.setStartColor(colorGradient.getSelectColorPointBtnP1().getColorInner()); + gradientStyle.setEndColor(colorGradient.getSelectColorPointBtnP2().getColorInner()); + } + return gradientStyle; + } + + protected int convertGradientTypeToIndex(GradientType gradientType) { + switch (gradientType) { + case CUSTOM: + return 1; + default: + return 0; + } + } + + protected GradientType convertIndexToGradientType(int index) { + switch (index) { + case 1: + return GradientType.CUSTOM; + default: + return GradientType.AUTO; + } + } +} diff --git a/designer-chart/src/main/java/com/fr/van/chart/gauge/VanChartGaugeSeriesPane.java b/designer-chart/src/main/java/com/fr/van/chart/gauge/VanChartGaugeSeriesPane.java index aab8f3cf2c..afdd2d4ca9 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/gauge/VanChartGaugeSeriesPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/gauge/VanChartGaugeSeriesPane.java @@ -1,5 +1,7 @@ package com.fr.van.chart.gauge; +import com.fr.chart.base.AttrFillStyle; +import com.fr.chart.base.GradientStyle; import com.fr.chart.chartattr.Plot; import com.fr.chart.chartglyph.ConditionAttr; import com.fr.design.gui.frpane.UINumberDragPane; @@ -12,7 +14,7 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.chart.gui.ChartStylePane; -import com.fr.design.mainframe.chart.gui.style.series.ColorPickerPaneWithFormula; +import com.fr.design.mainframe.chart.gui.style.series.ColorPickerPaneWithMaxMin; import com.fr.design.mainframe.chart.gui.style.series.UIColorPickerPane; import com.fr.design.style.color.ColorSelectBox; import com.fr.general.ComparatorUtils; @@ -21,15 +23,17 @@ import com.fr.plugin.chart.base.AttrLabel; import com.fr.plugin.chart.base.AttrLabelDetail; import com.fr.plugin.chart.gauge.VanChartGaugePlot; import com.fr.plugin.chart.type.GaugeStyle; +import com.fr.plugin.chart.type.GradientType; import com.fr.stable.Constants; import com.fr.van.chart.designer.TableLayout4VanChartHelper; -import com.fr.van.chart.designer.component.VanChartBeautyPane; -import com.fr.van.chart.designer.style.series.VanChartAbstractPlotSeriesPane; +import com.fr.van.chart.designer.component.VanChartFillStylePane; +import com.fr.van.chart.designer.style.series.VanChartMultiColorSeriesPane; import javax.swing.JPanel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.BorderLayout; +import java.awt.CardLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.event.ActionEvent; @@ -38,7 +42,7 @@ import java.awt.event.ActionListener; /** * Created by Mitisky on 15/11/27. */ -public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane { +public class VanChartGaugeSeriesPane extends VanChartMultiColorSeriesPane { private static final long serialVersionUID = -4414343926082129759L; private UIButtonGroup gaugeLayout;//布局:横向、纵向 @@ -61,6 +65,10 @@ public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane { private UISpinner thermometerWidth; private UINumberDragPane chutePercent; + private VanChartFillStylePane valueFillStylePane; + + private JPanel colorChoosePane; + public VanChartGaugeSeriesPane(ChartStylePane parent, Plot plot) { super(parent, plot); } @@ -71,16 +79,86 @@ public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane { double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH; double[] columnSize = {f}; //TODO Bjorn - double[] rowSize = {p,p,p,p,p,p,p}; + double[] rowSize = {p, p, p, p, p, p, p}; Component[][] components = new Component[][]{ new Component[]{createGaugeLayoutPane()}, - new Component[]{createGaugeStylePane(rowSize, new double[]{f,e})}, + new Component[]{createGaugeStylePane(rowSize, new double[]{f, e})}, new Component[]{createGaugeBandsPane()} }; return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); } + protected JPanel createColorChoosePane() { + vanChartFillStylePane = getVanChartFillStylePane(); + GaugeStyle style = getGaugeStyle(); + switch (style) { + case RING: + case SLOT: + case THERMOMETER: + colorChoosePane = super.createColorChoosePane(); + break; + default: + colorChoosePane = vanChartFillStylePane; + break; + } + return colorChoosePane; + } + + protected void checkFillStylePane(GradientStyle gradientStyle) { + if (colorChoosePane != null) { + colorChoosePane.setVisible(gradientStyle.getGradientType() != GradientType.CUSTOM); + } + } + + protected UIButtonGroup createDivideButton() { + return new UIButtonGroup<>(new String[]{ + Toolkit.i18nText("Fine-Design_Chart_Style_Category"), + Toolkit.i18nText("Fine-Design_Chart_Use_Value") + }, new String[]{"category", "value"}); + } + + protected JPanel createColorDividePane() { + JPanel panel = new JPanel(new BorderLayout(0, 0)); + valueFillStylePane = getVanChartFillStylePane(); + JPanel stylePane = valueFillStylePane == null ? new JPanel() : valueFillStylePane; + + colorPickerPane = new ColorPickerPaneWithMaxMin(parentPane, "meterString", valueFillStylePane) { + protected int getBoundX() { + return 0; + } + + protected int getBoundY() { + return 10; + } + + protected double getDescriptionWidth() { + double descriptionWidth = super.getDescriptionWidth(); + if (valueFillStylePane == null) { + descriptionWidth += 3; + } + return descriptionWidth; + } + }; + panel.add(colorPickerPane, BorderLayout.NORTH); + panel.add(stylePane, BorderLayout.CENTER); + + JPanel categoryFillPane = vanChartFillStylePane == null ? new JPanel() : vanChartFillStylePane; + JPanel colorDividePane = new JPanel(new CardLayout()) { + @Override + public Dimension getPreferredSize() { + if (getColorDivideButton().getSelectedIndex() == 0) { + return categoryFillPane.getPreferredSize(); + } else { + return panel.getPreferredSize(); + } + } + }; + colorDividePane.add(categoryFillPane, "category"); + colorDividePane.add(panel, "value"); + return colorDividePane; + } + private JPanel createGaugeLayoutPane() { gaugeLayout = new UIButtonGroup(new String[]{Toolkit.i18nText("Fine-Design_Chart_Direction_Horizontal"), Toolkit.i18nText("Fine-Design_Chart_Direction_Vertical")}); @@ -105,20 +183,20 @@ public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane { } private void changeLabelPosition() { - if(plot instanceof VanChartGaugePlot){ - VanChartGaugePlot gaugePlot = (VanChartGaugePlot)plot; - if (ComparatorUtils.equals(gaugePlot.getGaugeStyle(), GaugeStyle.THERMOMETER)){ + if (plot instanceof VanChartGaugePlot) { + VanChartGaugePlot gaugePlot = (VanChartGaugePlot) plot; + if (ComparatorUtils.equals(gaugePlot.getGaugeStyle(), GaugeStyle.THERMOMETER)) { ConditionAttr attrList = gaugePlot.getConditionCollection().getDefaultAttr(); - AttrLabel attrLabel = (AttrLabel)attrList.getExisted(AttrLabel.class); - if(attrLabel == null){ + AttrLabel attrLabel = (AttrLabel) attrList.getExisted(AttrLabel.class); + if (attrLabel == null) { return; } AttrLabelDetail attrLabelDetail = attrLabel.getAttrLabelDetail(); - if(attrLabelDetail == null || attrLabelDetail.getTextAttr() == null){ + if (attrLabelDetail == null || attrLabelDetail.getTextAttr() == null) { return; } attrLabelDetail.getTextAttr().setFRFont(VanChartGaugePlot.THERMOMETER_LABEL_FONT); - if(gaugeLayout.getSelectedIndex() == 0){ + if (gaugeLayout.getSelectedIndex() == 0) { attrLabel.getAttrLabelDetail().setPosition(Constants.LEFT); attrLabel.getGaugeValueLabelDetail().setPosition(Constants.LEFT); } else { @@ -133,7 +211,7 @@ public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane { JPanel panel = new JPanel(new BorderLayout(0, 6)); JPanel centerPanel = TableLayoutHelper.createTableLayoutPane(getDiffComponentsWithGaugeStyle(), row, col); panel.add(centerPanel, BorderLayout.CENTER); - if(rotate != null){ + if (rotate != null) { JPanel panel1 = TableLayout4VanChartHelper.createGapTableLayoutPane(Toolkit.i18nText("Fine-Design_Chart_Rotation_Direction"), rotate); panel.add(panel1, BorderLayout.NORTH); } @@ -141,7 +219,7 @@ public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane { } private Component[][] getDiffComponentsWithGaugeStyle() { - GaugeStyle style = plot == null ? GaugeStyle.POINTER : ((VanChartGaugePlot)plot).getGaugeStyle(); + GaugeStyle style = getGaugeStyle(); switch (style) { //TODO Bjorn 仪表盘样式自动逻辑 case RING: @@ -149,8 +227,8 @@ public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane { return new Component[][]{ new Component[]{null, null}, getPaneBackgroundColor(), - /* getPaneBackgroundColorAuto(), - new Component[]{null, paneBackgroundColor},*/ + /* getPaneBackgroundColorAuto(), + new Component[]{null, paneBackgroundColor},*/ getInnerPaneBackgroundColor(), new Component[]{createRadiusPane(Toolkit.i18nText("Fine-Design_Chart_Radius_Set")), null}, getChutePercent() @@ -160,8 +238,8 @@ public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane { new Component[]{null, null}, getNeedleColor(), getSlotBackgroundColor(), - /* getSlotBackgroundColorAuto(), - new Component[]{null, slotBackgroundColor},*/ + /* getSlotBackgroundColorAuto(), + new Component[]{null, slotBackgroundColor},*/ new Component[]{createRadiusPane(Toolkit.i18nText("Fine-Design_Chart_Radius_Set")), null}, getChutePercent() }; @@ -179,13 +257,13 @@ public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane { return new Component[][]{ new Component[]{null, null}, getHingeColor(), - /* getHingeColorAuto(), - new Component[]{null, hingeColor},*/ + /* getHingeColorAuto(), + new Component[]{null, hingeColor},*/ getHingeBackgroundColor(), getNeedleColor(), getPaneBackgroundColor(), - /* getPaneBackgroundColorAuto(), - new Component[]{null, paneBackgroundColor},*/ + /* getPaneBackgroundColorAuto(), + new Component[]{null, paneBackgroundColor},*/ new Component[]{createRadiusPane(Toolkit.i18nText("Fine-Design_Chart_Radius_Set")), null} }; } @@ -212,12 +290,12 @@ public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane { private Component[] getHingeBackgroundColor() { hingeBackgroundColor = new ColorSelectBox(120); - return new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Hinge_Background")),hingeBackgroundColor}; + return new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Hinge_Background")), hingeBackgroundColor}; } private Component[] getNeedleColor() { needleColor = new ColorSelectBox(120); - return new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Needle")),needleColor}; + return new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Needle")), needleColor}; } private Component[] getPaneBackgroundColorAuto() { @@ -236,7 +314,7 @@ public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane { private Component[] getPaneBackgroundColor() { paneBackgroundColor = new ColorSelectBox(120); - return new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Pane_Background")),paneBackgroundColor}; + return new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Pane_Background")), paneBackgroundColor}; } private Component[] getSlotBackgroundColorAuto() { @@ -255,17 +333,17 @@ public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane { private Component[] getSlotBackgroundColor() { slotBackgroundColor = new ColorSelectBox(120); - return new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Slot_Background")),slotBackgroundColor}; + return new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Slot_Background")), slotBackgroundColor}; } private Component[] getThermometerWidth() { thermometerWidth = new UISpinnerWithPx(0, Double.MAX_VALUE, 0.1, 10); - return new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Thermometer_Width")),thermometerWidth}; + return new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Thermometer_Width")), thermometerWidth}; } private Component[] getChutePercent() { chutePercent = new UINumberDragPaneWithPercent(0, 100, 1); - return new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Chute_Percent")),chutePercent}; + return new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Chute_Percent")), chutePercent}; } private void initRotate() { @@ -274,12 +352,16 @@ public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane { private Component[] getInnerPaneBackgroundColor() { innerPaneBackgroundColor = new ColorSelectBox(120); - return new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Inner_Pane_Background")),innerPaneBackgroundColor}; + return new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Inner_Pane_Background")), innerPaneBackgroundColor}; } private JPanel createGaugeBandsPane() { - colorPickerPane = new ColorPickerPaneWithFormula(parentPane, "meterString"); - return TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Range"), colorPickerPane); + GaugeStyle gaugeStyle = getGaugeStyle(); + if (gaugeStyle == GaugeStyle.POINTER || gaugeStyle == GaugeStyle.POINTER_SEMI) { + colorPickerPane = new ColorPickerPaneWithMaxMin(parentPane, "meterString"); + return TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Range"), colorPickerPane); + } + return null; } private void checkHingeColorAutoButton() { @@ -298,12 +380,12 @@ public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane { } public void populateBean(Plot plot) { - if(plot == null) { + if (plot == null) { return; } super.populateBean(plot); - if(plot instanceof VanChartGaugePlot){ - VanChartGaugePlot gaugePlot = (VanChartGaugePlot)plot; + if (plot instanceof VanChartGaugePlot) { + VanChartGaugePlot gaugePlot = (VanChartGaugePlot) plot; GaugeDetailStyle detailStyle = gaugePlot.getGaugeDetailStyle(); gaugeLayout.setSelectedIndex(detailStyle.isHorizontalLayout() ? 0 : 1); @@ -319,46 +401,53 @@ public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane { slotBackgroundColorAuto.setSelectedIndex(detailStyle.isSlotBackgroundColorAuto() ? 0 : 1); checkSlotBackgroundColorAutoButton(); } - if(hingeColor != null){ + if (hingeColor != null) { hingeColor.setSelectObject(detailStyle.getHingeColor()); } - if(hingeBackgroundColor != null){ + if (hingeBackgroundColor != null) { hingeBackgroundColor.setSelectObject(detailStyle.getHingeBackgroundColor()); } - if(needleColor != null){ + if (needleColor != null) { needleColor.setSelectObject(detailStyle.getNeedleColor()); } - if(paneBackgroundColor != null){ + if (paneBackgroundColor != null) { paneBackgroundColor.setSelectObject(detailStyle.getPaneBackgroundColor()); } - if(slotBackgroundColor != null){ + if (slotBackgroundColor != null) { slotBackgroundColor.setSelectObject(detailStyle.getSlotBackgroundColor()); } - if(rotate != null){ + if (rotate != null) { rotate.setSelectedIndex(detailStyle.isAntiClockWise() ? 0 : 1); } - if(innerPaneBackgroundColor != null){ + if (innerPaneBackgroundColor != null) { innerPaneBackgroundColor.setSelectObject(detailStyle.getInnerPaneBackgroundColor()); } - if(thermometerWidth != null){ + if (thermometerWidth != null) { thermometerWidth.setValue(detailStyle.getThermometerWidth()); } - if(chutePercent != null){ + if (chutePercent != null) { chutePercent.populateBean(detailStyle.getChutePercent()); } + if (getColorDivideButton() != null) { + getColorDivideButton().setSelectedIndex(detailStyle.isColorUseCategory() ? 0 : 1); + checkCardPane(); + } colorPickerPane.populateBean(detailStyle.getHotAreaColor()); + if (valueFillStylePane != null) { + valueFillStylePane.populateBean(plot.getPlotFillStyle()); + } } } @Override public void updateBean(Plot plot) { - if(plot == null){ + if (plot == null) { return; } super.updateBean(plot); - if(plot instanceof VanChartGaugePlot){ - VanChartGaugePlot gaugePlot = (VanChartGaugePlot)plot; + if (plot instanceof VanChartGaugePlot) { + VanChartGaugePlot gaugePlot = (VanChartGaugePlot) plot; GaugeDetailStyle detailStyle = gaugePlot.getGaugeDetailStyle(); detailStyle.setHorizontalLayout(gaugeLayout.getSelectedIndex() == 0); @@ -372,40 +461,65 @@ public class VanChartGaugeSeriesPane extends VanChartAbstractPlotSeriesPane { if (slotBackgroundColorAuto != null) { detailStyle.setSlotBackgroundColorAuto(slotBackgroundColorAuto.getSelectedIndex() == 0); } - if(hingeColor != null){ + if (hingeColor != null) { detailStyle.setHingeColor(hingeColor.getSelectObject()); } - if(hingeBackgroundColor != null){ + if (hingeBackgroundColor != null) { detailStyle.setHingeBackgroundColor(hingeBackgroundColor.getSelectObject()); } - if(needleColor != null){ + if (needleColor != null) { detailStyle.setNeedleColor(needleColor.getSelectObject()); } - if(paneBackgroundColor != null){ + if (paneBackgroundColor != null) { detailStyle.setPaneBackgroundColor(paneBackgroundColor.getSelectObject()); } - if(slotBackgroundColor != null){ + if (slotBackgroundColor != null) { detailStyle.setSlotBackgroundColor(slotBackgroundColor.getSelectObject()); } - if(rotate != null){ + if (rotate != null) { detailStyle.setAntiClockWise(rotate.getSelectedIndex() == 0); } - if(innerPaneBackgroundColor != null){ + if (innerPaneBackgroundColor != null) { detailStyle.setInnerPaneBackgroundColor(innerPaneBackgroundColor.getSelectObject()); } - if(thermometerWidth != null){ + if (thermometerWidth != null) { detailStyle.setThermometerWidth(thermometerWidth.getValue()); } - if(chutePercent != null){ + if (chutePercent != null) { detailStyle.setChutePercent(chutePercent.updateBean()); } colorPickerPane.updateBean(detailStyle.getHotAreaColor()); + if (getColorDivideButton() != null) { + int selectedIndex = getColorDivideButton().getSelectedIndex(); + detailStyle.setColorUseCategory(selectedIndex == 0); + } + if (!detailStyle.isColorUseCategory()) { + if (valueFillStylePane != null) { + AttrFillStyle plotFillStyle = plot.getPlotFillStyle(); + if (plotFillStyle == null) { + plotFillStyle = new AttrFillStyle(); + plot.setPlotFillStyle(plotFillStyle); + } + valueFillStylePane.updateBean(plotFillStyle); + } + } } } @Override - protected VanChartBeautyPane createStylePane() { - return null; + protected VanChartGaugeBeautyPane createStylePane() { + GaugeStyle gaugeStyle = getGaugeStyle(); + switch (gaugeStyle) { + case POINTER: + case POINTER_SEMI: + return null; + default: + return new VanChartGaugeBeautyPane(); + } + } + + private GaugeStyle getGaugeStyle() { + return plot == null ? GaugeStyle.POINTER : ((VanChartGaugePlot) plot).getGaugeStyle(); } } \ No newline at end of file From a7cd43294ebeabadc1e48d890ea8f225e5782b24 Mon Sep 17 00:00:00 2001 From: "Henry.Wang" Date: Fri, 21 May 2021 15:43:23 +0800 Subject: [PATCH 019/148] =?UTF-8?q?REPORT-51992=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E6=80=A7=E8=83=BD=E6=8F=90=E5=8D=87-=E7=BC=A9?= =?UTF-8?q?=E7=95=A5=E5=9B=BE=E5=8D=A0=E5=86=85=E5=AD=98=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../layout/FRAbsoluteLayoutAdapter.java | 2 +- .../design/designer/creator/XElementCase.java | 22 ++++++----------- .../designer/creator/XWAbsoluteLayout.java | 2 -- .../design/designer/creator/XWFitLayout.java | 3 --- .../fr/design/mainframe/FormSelection.java | 24 +++++++++++++++++++ 5 files changed, 32 insertions(+), 21 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java b/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java index 5326e6f6c2..c18f4f753d 100644 --- a/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java +++ b/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java @@ -298,7 +298,7 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { WAbsoluteLayout wabs = (WAbsoluteLayout)container.toData(); fix(creator,creator.getX(),creator.getY()); wabs.setBounds(creator.toData(),creator.getBounds()); - XElementCase.updateECImage(creator); + //XElementCase.updateECImage2(creator); XWAbsoluteLayout layout = (XWAbsoluteLayout) container; layout.updateBoundsWidget(creator); } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java b/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java index fc2b1d0468..9c459e9868 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java @@ -279,22 +279,14 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme setEditorIcon(toData().getECImage() == null ? DEFAULT_BACKGROUND : toData().getECImage()); } - public static void updateECImage(XCreator creator) { - if (creator instanceof XWTitleLayout) { - XWTitleLayout xwTitleLayout = (XWTitleLayout) creator; - for (int i = 0; i < xwTitleLayout.getComponentCount(); i++) { - Component component = xwTitleLayout.getComponent(i); - if (component instanceof XElementCase) { - XElementCase xElementCase = (XElementCase) component; - xElementCase.toData().getElementCaseImage().updateImage(() -> { - xElementCase.setEditorIcon(xElementCase.toData().getECImage() == null ? DEFAULT_BACKGROUND : xElementCase.toData().getECImage()); - if (xElementCase.designer != null) { - xElementCase.designer.repaint(); - } - }); - } + public void updateECImage() { + XElementCase self = this; + self.toData().getElementCaseImage().updateImage(() -> { + self.setEditorIcon(self.toData().getECImage() == null ? DEFAULT_BACKGROUND : self.toData().getECImage()); + if (self.designer != null) { + self.designer.repaint(); } - } + }); } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteLayout.java index 7bab26973b..32273ca08a 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteLayout.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteLayout.java @@ -21,7 +21,6 @@ import com.fr.design.mainframe.FormArea; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.WidgetPropertyPane; import com.fr.form.ui.Connector; -import com.fr.form.ui.ElementCaseImage; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; @@ -336,7 +335,6 @@ public class XWAbsoluteLayout extends XLayoutContainer { for (int i = 0, count = abs.getWidgetCount(); i < count; i++) { BoundsWidget bw = (BoundsWidget) abs.getWidget(i); if (bw != null) { - ElementCaseImage.adjustImageSize(bw); Rectangle bounds = bw.getBounds(); XWidgetCreator comp = (XWidgetCreator) XCreatorUtils.createXCreator(bw.getWidget()); if (!comp.acceptType(XWParameterLayout.class)) { diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java index d6cec98e92..6d7aa5d9ff 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java @@ -12,7 +12,6 @@ import com.fr.design.mainframe.FormArea; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.WidgetPropertyPane; import com.fr.design.utils.gui.LayoutUtils; -import com.fr.form.ui.ElementCaseImage; import com.fr.form.ui.PaddingMargin; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; @@ -684,7 +683,6 @@ public class XWFitLayout extends XLayoutContainer { for (int i=0, num=layout.getWidgetCount(); i Date: Fri, 21 May 2021 15:46:25 +0800 Subject: [PATCH 020/148] =?UTF-8?q?REPORT-51992=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E6=80=A7=E8=83=BD=E6=8F=90=E5=8D=87-=E7=BC=A9?= =?UTF-8?q?=E7=95=A5=E5=9B=BE=E5=8D=A0=E5=86=85=E5=AD=98=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../beans/adapters/layout/FRAbsoluteLayoutAdapter.java | 2 +- .../src/main/java/com/fr/start/module/DesignerActivator.java | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java b/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java index c18f4f753d..932338a3fd 100644 --- a/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java +++ b/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java @@ -298,7 +298,7 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { WAbsoluteLayout wabs = (WAbsoluteLayout)container.toData(); fix(creator,creator.getX(),creator.getY()); wabs.setBounds(creator.toData(),creator.getBounds()); - //XElementCase.updateECImage2(creator); + XWAbsoluteLayout layout = (XWAbsoluteLayout) container; layout.updateBoundsWidget(creator); } diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java index 44d3628961..5c7a20efca 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java @@ -40,7 +40,6 @@ import com.fr.design.javascript.JavaScriptImplPane; import com.fr.design.javascript.ParameterJavaScriptPane; import com.fr.design.javascript.ProcessTransitionAdapter; import com.fr.design.mainframe.BaseJForm; -import com.fr.design.mainframe.ElementCaseThumbnail; import com.fr.design.mainframe.FormHierarchyTreePane; import com.fr.design.mainframe.InformationCollector; import com.fr.design.mainframe.JForm; @@ -404,8 +403,6 @@ public class DesignerActivator extends Activator { DesignModuleFactory.registerParameterReader(new FormParameterReader()); StableFactory.registerMarkedClass(BaseJForm.XML_TAG, JForm.class); - - StableFactory.registerMarkedObject(ElementCaseThumbnailProcessor.MARK_STRING, new ElementCaseThumbnail()); } private static void storePassport() { From 316caa136976b9ab79fb62ac9b79fc13197ba182 Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Mon, 24 May 2021 11:54:03 +0800 Subject: [PATCH 021/148] =?UTF-8?q?REPORT-52539=20=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E7=94=9F=E6=88=90=E9=9D=A2=E6=9D=BF=E5=87=BA=E7=8E=B0=E6=A8=AA?= =?UTF-8?q?=E5=90=91=E6=BB=9A=E5=8A=A8=E6=9D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/share/ui/generate/ShareGeneratePane.java | 2 +- .../java/com/fr/design/share/ui/generate/ShareMainPane.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareGeneratePane.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareGeneratePane.java index d52cf1ef6b..82eb60f08a 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareGeneratePane.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareGeneratePane.java @@ -57,7 +57,7 @@ import static javax.swing.JOptionPane.ERROR_MESSAGE; public class ShareGeneratePane extends BasicPane { private static final Dimension DIALOG_SIZE = new Dimension(670, 740); - private static final Dimension DIALOG_NORMAL_SIZE = new Dimension(660, 610); + private static final Dimension DIALOG_NORMAL_SIZE = new Dimension(670, 610); private static final Border DIALOG_BORDER = BorderFactory.createEmptyBorder(0, 6, 4, 6); private JPanel mainPane = null; diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java index 3cd8653538..e9b5a25e22 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java @@ -85,7 +85,7 @@ import static javax.swing.JOptionPane.ERROR_MESSAGE; public class ShareMainPane extends JPanel { private static final int COLUMN_ITEM_SIZE = 60; - private static final int COLUMN_FIELD_WIDTH = 560; + private static final int COLUMN_FIELD_WIDTH = 555; private static final int TEXT_FIELD_WIDTH = 160; private static final int TEXT_FIELD_HEIGHT = 21; private static final int NAME_MAX_LENGTH = 50; From 21f61d5e9239a05138e5ecd9dd427c8cd54f565d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=B2=B3?= <445798420@qq.com> Date: Mon, 24 May 2021 14:00:43 +0800 Subject: [PATCH 022/148] =?UTF-8?q?CHART-19306=20=E5=85=AC=E5=BC=8F?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=AD=89=E4=BA=8E=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chart/gui/style/series/ColorPickerPaneWithMaxMin.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/series/ColorPickerPaneWithMaxMin.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/series/ColorPickerPaneWithMaxMin.java index 5a0846a188..c6ac36a0cc 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/series/ColorPickerPaneWithMaxMin.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/style/series/ColorPickerPaneWithMaxMin.java @@ -93,9 +93,9 @@ public class ColorPickerPaneWithMaxMin extends ColorPickerPaneWithFormula { private void setTextState(TinyFormulaPane tinyFormulaPane, int index, int maxIndex, String value) { boolean enable = false; if (index == 0) { - value = "∞"; + value = "=∞"; } else if (index == maxIndex) { - value = "-∞"; + value = "=-∞"; } else { enable = true; } From 678bff7a07c604a463ce484d2fb68b4d382587e2 Mon Sep 17 00:00:00 2001 From: kerry Date: Mon, 24 May 2021 14:04:27 +0800 Subject: [PATCH 023/148] =?UTF-8?q?REPORT-52699=20=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=A4=8D=E7=94=A8-=E5=90=88=E5=85=A5=E4=B8=BB=E7=89=88?= =?UTF-8?q?=E6=9C=AC-feature=E4=B8=BBjar=EF=BC=8C=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E7=AC=AC=E4=B8=89=E6=96=B9=E6=8F=92=E4=BB=B6=E6=8E=A7=E4=BB=B6?= =?UTF-8?q?=EF=BC=8C=E5=8F=B3=E4=BE=A7=E7=82=B9=E5=87=BB=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?/=E7=A7=BB=E5=8A=A8=E7=AB=AF=EF=BC=8C=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E7=9A=84=E8=BF=98=E6=98=AF=E5=B1=9E=E6=80=A7=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/gui/controlpane/EventPropertyPane.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/designer-form/src/main/java/com/fr/design/gui/controlpane/EventPropertyPane.java b/designer-form/src/main/java/com/fr/design/gui/controlpane/EventPropertyPane.java index 1cebe463f3..25cefe3af3 100644 --- a/designer-form/src/main/java/com/fr/design/gui/controlpane/EventPropertyPane.java +++ b/designer-form/src/main/java/com/fr/design/gui/controlpane/EventPropertyPane.java @@ -166,7 +166,9 @@ public class EventPropertyPane extends UIControlPane implements ListControlPaneP } eventListWrapperPane.setVisible(listSize > 0); } - this.selectNameEdList.setSelectedIndex(0); + if (this.selectNameEdList != null) { + this.selectNameEdList.setSelectedIndex(0); + } this.repaint(); } From 1e7065f9690de99b24cb55ac0cc6531570755f72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=B2=B3?= <445798420@qq.com> Date: Mon, 24 May 2021 14:21:55 +0800 Subject: [PATCH 024/148] =?UTF-8?q?CHART-19306=20=20=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E6=B8=90=E5=8F=98=E8=89=B2=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/van/chart/gauge/VanChartGaugeBeautyPane.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/designer-chart/src/main/java/com/fr/van/chart/gauge/VanChartGaugeBeautyPane.java b/designer-chart/src/main/java/com/fr/van/chart/gauge/VanChartGaugeBeautyPane.java index 9f4f0ecb73..4f2831b227 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/gauge/VanChartGaugeBeautyPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/gauge/VanChartGaugeBeautyPane.java @@ -1,5 +1,6 @@ package com.fr.van.chart.gauge; +import com.fr.chart.base.ChartConstants; import com.fr.chart.base.GradientStyle; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.TableLayout; @@ -46,6 +47,7 @@ public class VanChartGaugeBeautyPane extends VanChartBeautyPane { }; gradientBarPane = TableLayout4VanChartHelper.createGapTableLayoutPane(components, rowSize, columnSize); + colorGradient.updateColor(ChartConstants.GRADIENT_START, ChartConstants.GRADIENT_END); return gradientBarPane; } From cd40cde35e57e3f277dc213e211153f22d98ea98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=B2=B3?= <445798420@qq.com> Date: Mon, 24 May 2021 14:43:55 +0800 Subject: [PATCH 025/148] =?UTF-8?q?=E9=A2=9C=E8=89=B2=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/van/chart/gauge/VanChartGaugeBeautyPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-chart/src/main/java/com/fr/van/chart/gauge/VanChartGaugeBeautyPane.java b/designer-chart/src/main/java/com/fr/van/chart/gauge/VanChartGaugeBeautyPane.java index 4f2831b227..61a1fc5e31 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/gauge/VanChartGaugeBeautyPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/gauge/VanChartGaugeBeautyPane.java @@ -47,7 +47,7 @@ public class VanChartGaugeBeautyPane extends VanChartBeautyPane { }; gradientBarPane = TableLayout4VanChartHelper.createGapTableLayoutPane(components, rowSize, columnSize); - colorGradient.updateColor(ChartConstants.GRADIENT_START, ChartConstants.GRADIENT_END); + colorGradient.updateColor(ChartConstants.GRADIENT_END, ChartConstants.GRADIENT_START); return gradientBarPane; } From b087607a94580062c3a2d80eb16d39b3ee7d538c Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Mon, 24 May 2021 17:38:45 +0800 Subject: [PATCH 026/148] =?UTF-8?q?REPORT-52512=20=E5=85=B1=E4=BA=AB?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=88=A0=E9=99=A4=E5=90=8E=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E5=AF=B9=E5=BA=94=E7=9A=84=E6=95=B0=E6=8D=AE=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mainframe/JForm.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/JForm.java b/designer-form/src/main/java/com/fr/design/mainframe/JForm.java index 54db2ec1ab..a78c532704 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/JForm.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/JForm.java @@ -4,6 +4,7 @@ import com.fr.base.BaseUtils; import com.fr.base.PaperSize; import com.fr.base.Parameter; import com.fr.base.extension.FileExtension; +import com.fr.base.iofile.attr.ExtendSharableAttrMark; import com.fr.base.vcs.DesignerMode; import com.fr.design.DesignModelAdapter; import com.fr.design.DesignState; @@ -64,6 +65,11 @@ import com.fr.file.filter.ChooseFileFilter; import com.fr.form.FormElementCaseContainerProvider; import com.fr.form.FormElementCaseProvider; import com.fr.form.main.Form; +import com.fr.form.main.WidgetGatherAdapter; +import com.fr.form.share.SharableWidgetProvider; +import com.fr.form.share.editor.SharableEditorProvider; +import com.fr.form.share.utils.ShareUtils; +import com.fr.form.ui.AbstractBorderStyleWidget; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WBorderLayout; import com.fr.form.ui.container.WLayout; @@ -77,6 +83,7 @@ import com.fr.report.worksheet.FormElementCase; import com.fr.stable.ArrayUtils; import com.fr.stable.Constants; import com.fr.stable.ProductConstants; +import com.fr.stable.StringUtils; import com.fr.stable.bridge.StableFactory; import com.fr.web.controller.ViewRequestConstants; @@ -96,6 +103,7 @@ import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import javax.swing.tree.TreePath; @@ -305,6 +313,7 @@ public class JForm extends JTemplate implements BaseJForm implements BaseJForm Date: Mon, 24 May 2021 18:16:17 +0800 Subject: [PATCH 027/148] =?UTF-8?q?REPORT-52629=20=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E6=8E=92=E5=BA=8F=E9=80=BB=E8=BE=91=E7=9A=84?= =?UTF-8?q?=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/share/ui/local/GroupPane.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/GroupPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/GroupPane.java index 94d24a3d5b..bfa6343e06 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/GroupPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/GroupPane.java @@ -9,6 +9,7 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.share.group.ui.GroupFileDialog; +import com.fr.design.mainframe.share.sort.SortType; import com.fr.design.mainframe.share.sort.WidgetSortType; import com.fr.design.mainframe.share.ui.base.PopupMenuItem; import com.fr.design.mainframe.share.ui.widgetfilter.LocalWidgetFilter; @@ -49,6 +50,7 @@ class GroupPane extends JPanel { //是否展开 private boolean expendStatus; private SharableWidgetProvider[] elCaseBindInfoList; + private SortType sortType = WidgetSortType.INSTALL_TIME; private GroupPane(Group group) { this(group, DEFAULT_HEIGHT, group.isDefaultExpend()); @@ -133,11 +135,12 @@ class GroupPane extends JPanel { if (widgetProviders == null) { widgetProviders = new SharableWidgetProvider[0]; } - WidgetSortType.INSTALL_TIME.sort(widgetProviders); + sortType.sort(widgetProviders); return widgetProviders; } public void sortWidget(WidgetSortType sortType) { + this.sortType = sortType; sortType.sort(elCaseBindInfoList); reCreateShowPane(elCaseBindInfoList); } From 8efb51bcdde6f07feb238c97f6a596bb74ab056b Mon Sep 17 00:00:00 2001 From: kerry Date: Tue, 25 May 2021 19:11:39 +0800 Subject: [PATCH 028/148] =?UTF-8?q?REPORT-52843=20&&=20REPORT-52844=20?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=A4=8D=E7=94=A8-=E5=90=88=E5=85=A5?= =?UTF-8?q?=E4=B8=BB=E7=89=88=E6=9C=AC-read=E5=92=8Cclicked=E9=83=BD?= =?UTF-8?q?=E6=98=AFfalse=E6=97=B6=EF=BC=8C=E7=82=B9=E5=87=BB=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E7=9A=84=E7=BB=84=E4=BB=B6=E5=A4=8D=E7=94=A8=E8=93=9D?= =?UTF-8?q?=E5=AD=97=EF=BC=8C=E5=BC=B9=E5=87=BA=E6=96=B0=E6=89=8B=E5=BC=95?= =?UTF-8?q?=E5=AF=BC=EF=BC=8C=E5=85=B3=E9=97=AD=E5=BC=95=E5=AF=BC=E5=90=8E?= =?UTF-8?q?=EF=BC=8C=E5=BC=B9=E5=87=BA=E4=BA=86=E5=B7=B2=E5=90=88=E5=85=A5?= =?UTF-8?q?=E4=B8=BB=E7=89=88=E6=9C=AC=E7=9A=84=E6=8F=90=E7=A4=BA;=20=20?= =?UTF-8?q?=20=E7=BB=84=E4=BB=B6=E5=A4=8D=E7=94=A8-=E5=90=88=E5=85=A5?= =?UTF-8?q?=E4=B8=BB=E7=89=88=E6=9C=AC-=E9=BC=A0=E6=A0=87=E6=82=AC?= =?UTF-8?q?=E6=B5=AE=E5=B7=A5=E5=85=B7=E6=A0=8F=E5=A5=97=E7=94=A8=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E6=97=B6=EF=BC=8Ctooltip=E6=98=BE=E7=A4=BA=E2=80=9C?= =?UTF-8?q?=E5=A5=97=E7=94=A8=E7=BB=84=E4=BB=B6=E2=80=9D=EF=BC=8C=E4=BA=A4?= =?UTF-8?q?=E4=BA=92=E6=96=87=E6=A1=A3=E4=BB=A5=E5=8F=8A=E5=92=8C=E4=BA=A4?= =?UTF-8?q?=E4=BA=92=E7=A1=AE=E8=AE=A4=E4=BA=86=E4=B8=8B=EF=BC=8C=E5=BA=94?= =?UTF-8?q?=E8=AF=A5=E6=98=AF=E2=80=9C=E5=A4=8D=E7=94=A8=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/ComponentReuseNotifyUtil.java | 5 +++-- .../com/fr/design/mainframe/EastRegionContainerPane.java | 2 +- .../java/com/fr/design/mainframe/FormParaWidgetPane.java | 2 +- .../java/com/fr/design/mainframe/FormWidgetDetailPane.java | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/ComponentReuseNotifyUtil.java b/designer-base/src/main/java/com/fr/design/mainframe/ComponentReuseNotifyUtil.java index abad05eb19..4ab10194ce 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/ComponentReuseNotifyUtil.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/ComponentReuseNotifyUtil.java @@ -18,7 +18,7 @@ public class ComponentReuseNotifyUtil { } - public static void enterWidgetLibExtraAction() { + public static void enterWidgetLibExtraAction(boolean needValidRead) { if (ComponentReuseNotificationInfo.getInstance().isClickedWidgetLib()) { return; } @@ -28,11 +28,12 @@ public class ComponentReuseNotifyUtil { return COMPONENT_SNAP_CHAT_KEY; } }); - if (snapChat.hasRead()) { + if (snapChat.hasRead() && needValidRead) { DesignerToastMsgUtil.toastPrompt(Toolkit.i18nText("Fine-Design_Component_Reuse_Merge_Prompt")); } ComponentReuseNotificationInfo.getInstance().setClickedWidgetLib(true); DesignerEnvManager.getEnvManager().saveXMLFile(); } + } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java index 94d79b2d10..1bffe08428 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java @@ -313,7 +313,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - ComponentReuseNotifyUtil.enterWidgetLibExtraAction(); + ComponentReuseNotifyUtil.enterWidgetLibExtraAction(true); } }); // 权限编辑 diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormParaWidgetPane.java b/designer-form/src/main/java/com/fr/design/mainframe/FormParaWidgetPane.java index 81b4e7b61d..b8f3ff6380 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormParaWidgetPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormParaWidgetPane.java @@ -277,7 +277,7 @@ public class FormParaWidgetPane extends JPanel { jPanel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); jPanel.add(uiLabel, BorderLayout.NORTH); jPanel.add(new UILabel(Toolkit.i18nText("Fine-Design_Component_Reuse_Apply_Widget")), BorderLayout.CENTER); - jPanel.setToolTipText(Toolkit.i18nText("Fine-Design_Component_Reuse_Apply_Widget")); + jPanel.setToolTipText(Toolkit.i18nText("Fine-Design_Share_Component")); return jPanel; } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java b/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java index dd0cce25b6..f77e68e15e 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java @@ -108,7 +108,7 @@ public class FormWidgetDetailPane extends FormDockView{ public void enterWidgetLib() { EastRegionContainerPane.getInstance().switchTabTo(EastRegionContainerPane.KEY_WIDGET_LIB); headGroup.setSelectedIndex(ONLINE_TAB); - ComponentReuseNotifyUtil.enterWidgetLibExtraAction(); + ComponentReuseNotifyUtil.enterWidgetLibExtraAction(false); } /** From ab113ab438b6b8044e81416d7d292e5d7c608225 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=B2=B3?= <445798420@qq.com> Date: Wed, 26 May 2021 11:06:44 +0800 Subject: [PATCH 029/148] =?UTF-8?q?CHART-18965=20=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89html=E6=A1=86=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/VanChartHtmlLabelPane.java | 51 ++++++++++++------- ...artHtmlLabelPaneWithOutWidthAndHeight.java | 2 +- 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPane.java index 40f85dcb49..0e9cc416f9 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPane.java @@ -11,9 +11,9 @@ import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.gui.syntax.ui.rsyntaxtextarea.RSyntaxTextArea; import com.fr.design.gui.syntax.ui.rsyntaxtextarea.SyntaxConstants; +import com.fr.design.i18n.Toolkit; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; - import com.fr.design.utils.gui.UIComponentUtils; import com.fr.plugin.chart.base.VanChartHtmlLabel; import com.fr.van.chart.designer.style.VanChartStylePane; @@ -32,7 +32,7 @@ import java.awt.event.ActionListener; /** * Created by Mitisky on 16/2/19. */ -public class VanChartHtmlLabelPane extends JPanel{ +public class VanChartHtmlLabelPane extends JPanel { private static final long serialVersionUID = -5512128966013558611L; private static final int JS_HEIGHT = 100; @@ -47,7 +47,9 @@ public class VanChartHtmlLabelPane extends JPanel{ private VanChartStylePane parent; - public void setCustomFormatterText(String text){ + private JPanel widthAndHeightPane; + + public void setCustomFormatterText(String text) { contentTextArea.setText(text); } @@ -56,24 +58,28 @@ public class VanChartHtmlLabelPane extends JPanel{ } public VanChartHtmlLabelPane() { - useHtml = new UIToggleButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Html")); + useHtml = new UIToggleButton(Toolkit.i18nText("Fine-Design_Chart_Html")); UIComponentUtils.setLineWrap(useHtml); - JPanel widthAndHeightPane = createWidthAndHeightPane(); + useHtml.addChangeListener(e -> checkWidthAndHeightPane()); + widthAndHeightPane = createWidthAndHeightPane(); double p = TableLayout.PREFERRED; double f = TableLayout.FILL; double[] columnSize = {f}; - double[] rowSize = {p, p, p}; + double[] rowSize = {p, p, p, p}; - Component[][] components = new Component[][]{ + Component[][] components = new Component[][]{ new Component[]{createJSContentPane()}, new Component[]{useHtml}, - new Component[]{widthAndHeightPane} + new Component[]{null, null}, }; JPanel contentPane = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); this.setLayout(new BorderLayout()); - this.add(contentPane, BorderLayout.CENTER); + this.add(contentPane, BorderLayout.NORTH); + if (widthAndHeightPane != null) { + this.add(widthAndHeightPane, BorderLayout.CENTER); + } } private JComponent createJSContentPane() { @@ -112,7 +118,7 @@ public class VanChartHtmlLabelPane extends JPanel{ ac.setTriggerKey(KeyStroke.getKeyStroke(shortCuts.replace("+", "pressed"))); ac.install(contentTextArea); - return new UIScrollPane(contentTextArea){ + return new UIScrollPane(contentTextArea) { @Override public Dimension getPreferredSize() { return new Dimension(super.getPreferredSize().width, JS_HEIGHT); @@ -121,15 +127,15 @@ public class VanChartHtmlLabelPane extends JPanel{ } private void fireJSChange() { - if(parent != null){ + if (parent != null) { parent.attributeChanged(); } } protected JPanel createWidthAndHeightPane() { - isCustomWidth = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Custom_Width")); + isCustomWidth = new UICheckBox(Toolkit.i18nText("Fine-Design_Chart_Custom_Width")); customWidth = new UITextField(6); - isCustomHeight = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Custom_Height")); + isCustomHeight = new UICheckBox(Toolkit.i18nText("Fine-Design_Chart_Custom_Height")); customHeight = new UITextField(6); isCustomWidth.addActionListener(new ActionListener() { @@ -147,13 +153,13 @@ public class VanChartHtmlLabelPane extends JPanel{ }); double p = TableLayout.PREFERRED; double f = TableLayout.FILL; - double[] columnSize = { p, f }; + double[] columnSize = {p, f}; double[] rowSize = {p, p, p}; - Component[][] components = new Component[][]{ + Component[][] components = new Component[][]{ new Component[]{isCustomWidth, customWidth}, new Component[]{isCustomHeight, customHeight}, - new Component[] {null, null} + new Component[]{null, null} }; return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); } @@ -171,8 +177,14 @@ public class VanChartHtmlLabelPane extends JPanel{ checkWidth(); } - public void populate(VanChartHtmlLabel htmlLabel){ - if(htmlLabel == null){ + private void checkWidthAndHeightPane() { + if (widthAndHeightPane != null) { + widthAndHeightPane.setVisible(useHtml.isSelected()); + } + } + + public void populate(VanChartHtmlLabel htmlLabel) { + if (htmlLabel == null) { return; } setCustomFormatterText(htmlLabel.getCustomText()); @@ -186,10 +198,11 @@ public class VanChartHtmlLabelPane extends JPanel{ isCustomHeight.setSelected(htmlLabel.isCustomHeight()); customHeight.setText(htmlLabel.getHeight()); checkBoxUse(); + checkWidthAndHeightPane(); } public void update(VanChartHtmlLabel htmlLabel) { - if(htmlLabel == null){ + if (htmlLabel == null) { return; } htmlLabel.setCustomText(contentTextArea.getText()); diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPaneWithOutWidthAndHeight.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPaneWithOutWidthAndHeight.java index 48cc423c87..37a52fa16d 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPaneWithOutWidthAndHeight.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPaneWithOutWidthAndHeight.java @@ -12,7 +12,7 @@ public class VanChartHtmlLabelPaneWithOutWidthAndHeight extends VanChartHtmlLabe private static final long serialVersionUID = -9213286452724939880L; protected JPanel createWidthAndHeightPane() { - return new JPanel(); + return null; } protected void populateWidthAndHeight(VanChartHtmlLabel htmlLabel) { From a8583b97c78b1ac4763f8c49477ed8fecf7e9015 Mon Sep 17 00:00:00 2001 From: kerry Date: Wed, 26 May 2021 15:55:18 +0800 Subject: [PATCH 030/148] =?UTF-8?q?=20REPORT-51678=20=20=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/FormWidgetDetailPane.java | 6 +++--- .../share/ui/online/AbstractOnlineWidgetShowPane.java | 6 +++++- .../mainframe/share/ui/online/OnlineWidgetShowPane.java | 8 ++++++++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java b/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java index f77e68e15e..170704aa6f 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java @@ -89,7 +89,7 @@ public class FormWidgetDetailPane extends FormDockView{ cardLayout.show(centerPane, paneList.get(newSelectedIndex).getTitle()); } }; - headGroup.setSelectedIndex(0); + headGroup.setSelectedIndex(ONLINE_TAB); this.add(headGroup, BorderLayout.NORTH); this.add(centerPane, BorderLayout.CENTER); } @@ -105,12 +105,12 @@ public class FormWidgetDetailPane extends FormDockView{ } - public void enterWidgetLib() { + public void enterWidgetLib() { EastRegionContainerPane.getInstance().switchTabTo(EastRegionContainerPane.KEY_WIDGET_LIB); - headGroup.setSelectedIndex(ONLINE_TAB); ComponentReuseNotifyUtil.enterWidgetLibExtraAction(false); } + /** * 定位 * diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/AbstractOnlineWidgetShowPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/AbstractOnlineWidgetShowPane.java index fc2390d619..7c090cac39 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/AbstractOnlineWidgetShowPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/AbstractOnlineWidgetShowPane.java @@ -145,7 +145,7 @@ public abstract class AbstractOnlineWidgetShowPane extends JPanel { centerPane.remove(componentSelectPane); componentSelectPane = createOnlineWidgetSelectPane(() -> { sharableWidgetProviders = new OnlineShareWidget[0]; - sharableWidgetProviders = ShareUtils.getFilterWidgets(filterStr); + sharableWidgetProviders = getSharableWidgetArr(filterStr); return sharableWidgetProviders; }); centerPane.add(componentSelectPane, BorderLayout.CENTER); @@ -155,6 +155,10 @@ public abstract class AbstractOnlineWidgetShowPane extends JPanel { }); } + protected OnlineShareWidget[] getSharableWidgetArr( String filterStr){ + return ShareUtils.getFilterWidgets(filterStr); + } + public void initSearchTextFieldPaneListener(FlexSearchFieldPane searchFieldPane) { searchFieldPane.registerChangeListener(event -> { Object object = event.getSource(); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetShowPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetShowPane.java index 2325fb1300..a599980ce1 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetShowPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetShowPane.java @@ -2,9 +2,11 @@ package com.fr.design.mainframe.share.ui.online; import com.fr.design.gui.ilable.UILabel; import com.fr.design.mainframe.share.collect.ComponentCollector; +import com.fr.design.mainframe.share.sort.OnlineWidgetSortType; import com.fr.design.mainframe.share.ui.base.FlexSearchFieldPane; import com.fr.design.mainframe.share.ui.widgetfilter.FilterPane; import com.fr.form.share.bean.OnlineShareWidget; +import com.fr.form.share.utils.ShareUtils; import com.fr.stable.StringUtils; import javax.swing.event.ChangeEvent; @@ -106,6 +108,12 @@ public class OnlineWidgetShowPane extends AbstractOnlineWidgetShowPane { }); } + protected OnlineShareWidget[] getSharableWidgetArr( String filterStr){ + OnlineShareWidget[] onlineShareWidgets = ShareUtils.getFilterWidgets(filterStr); + OnlineWidgetSortType.values()[lastSortTabSelectedIndex].sort(onlineShareWidgets); + return onlineShareWidgets; + } + @Override public void initSortTabPane(SortTabPane sortTabPane) { super.initSortTabPane(sortTabPane); From da041999be00618c333c724b4685281d6c3c58e8 Mon Sep 17 00:00:00 2001 From: vito Date: Wed, 26 May 2021 20:17:41 +0800 Subject: [PATCH 031/148] =?UTF-8?q?REPORT-51962=E3=80=9010.0.17=E3=80=91?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E4=BF=A1=E6=81=AF=E4=BC=98=E5=8C=96=E4=B9=8B?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E7=BC=BA=E5=A4=B1=E6=8F=92=E4=BB=B6=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E6=8F=90=E7=A4=BA=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/bridge/exec/JSExecutor.java | 7 + .../com/fr/design/dialog/UIExpandDialog.java | 328 ++++++++++++++++++ .../exe/callback/InstallOnlineCallback.java | 20 +- .../exe/callback/ModifyStatusCallback.java | 13 +- .../mainframe/app/AbstractWorkBookApp.java | 85 ++++- 5 files changed, 432 insertions(+), 21 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/dialog/UIExpandDialog.java diff --git a/designer-base/src/main/java/com/fr/design/bridge/exec/JSExecutor.java b/designer-base/src/main/java/com/fr/design/bridge/exec/JSExecutor.java index 1efa613abc..a3135c15fa 100644 --- a/designer-base/src/main/java/com/fr/design/bridge/exec/JSExecutor.java +++ b/designer-base/src/main/java/com/fr/design/bridge/exec/JSExecutor.java @@ -7,5 +7,12 @@ public interface JSExecutor { String CALLBACK_FUNCTION_NAME = "action"; + JSExecutor DEFAULT = new JSExecutor() { + @Override + public void executor(String newValue) { + // do nothing + } + }; + void executor(String newValue); } diff --git a/designer-base/src/main/java/com/fr/design/dialog/UIExpandDialog.java b/designer-base/src/main/java/com/fr/design/dialog/UIExpandDialog.java new file mode 100644 index 0000000000..60ee096c3d --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/dialog/UIExpandDialog.java @@ -0,0 +1,328 @@ +package com.fr.design.dialog; + +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itextarea.UITextArea; +import com.fr.design.i18n.Toolkit; +import com.fr.design.utils.gui.GUICoreUtils; + +import javax.swing.BorderFactory; +import javax.swing.Icon; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.UIManager; +import java.awt.BorderLayout; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Frame; +import java.awt.Insets; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; + +/** + * 可展开对话框 + * + *
+ *  UIExpandDialog.Builder()
+ *                  .owner(jf)
+ *                  .title("title")
+ *                  .messageType(UIExpandDialog.WARNING_MESSAGE)
+ *                  .message("message text")
+ *                  .detail("detail")
+ *                  .expand(false)
+ *                  .modal(false)
+ *                  .dialogActionListener(new DialogActionAdapter(){
+ *                      public void doOk() {
+ *                          System.out.println("OK");
+ *                      }
+ *                  }).build().setVisible(true);
+ *  
+ * + * @author vito + * @version 10.0 + * Created by vito on 2021/5/19 + */ +public class UIExpandDialog extends UIDialog { + public static final int MARGIN = 10; + public static final int TEXT_AREA_ROW = 5; + public static final int GAP = 5; + + public static final int ERROR_MESSAGE = 0; + public static final int INFORMATION_MESSAGE = 1; + public static final int WARNING_MESSAGE = 2; + public static final int QUESTION_MESSAGE = 3; + + public static final String HTML_TAG_1 = ""; + public static final String HTML_TAG_2 = ""; + + private final JPanel foldBar = new JPanel(); + private final JPanel expandableContentPane = new JPanel(); + private final UILabel narrow = new UILabel(); + private final UILabel narrowHit = new UILabel(); + private final UIButton buttonOK; + private final UIButton buttonCancel; + private JLabel msg; + private final UITextArea textArea = new UITextArea(); + + public UIExpandDialog(Frame owner, String title, boolean isModal, + int messageType, String message, String detail, + String okText, String cancelText, boolean isExpand) { + super(owner); + buttonOK = new UIButton(okText); + buttonCancel = new UIButton(cancelText); + setTitle(title); + setModal(isModal); + initComponents(messageType, message, detail, isModal, isExpand, null); + } + + public UIExpandDialog(Builder builder) { + super(builder.owner); + buttonOK = new UIButton(builder.okText); + buttonCancel = new UIButton(builder.cancelText); + setTitle(builder.title); + setModal(builder.modal); + initComponents(builder.messageType, builder.message, builder.detail, + builder.modal, builder.expand, builder.dialogActionListener); + } + + public void initComponents(int messageType, String message, String detail, + boolean isModal, boolean isExpand, DialogActionListener l) { + + setLayout(new BorderLayout(GAP, GAP)); + setResizable(false); + setModal(isModal); + getRootPane().setDefaultButton(buttonOK); + + // 标题面板 + UILabel icon = new UILabel(getIconForType(messageType)); + msg = new JLabel(HTML_TAG_1 + message + HTML_TAG_2); + msg.setPreferredSize(new Dimension(300, 50)); + JPanel mainMsg = new JPanel(); + mainMsg.setLayout(new FlowLayout(FlowLayout.LEFT, MARGIN, MARGIN)); + mainMsg.setPreferredSize(new Dimension(380, 60)); + mainMsg.add(icon); + mainMsg.add(msg); + add(mainMsg, BorderLayout.NORTH); + + // 内容面板 + JPanel contentPanel = new JPanel(); + contentPanel.setLayout(new BorderLayout(GAP, GAP)); + foldBar.setLayout(new FlowLayout(FlowLayout.LEFT, MARGIN, 0)); + foldBar.add(narrow); + foldBar.add(narrowHit); + contentPanel.add(foldBar, BorderLayout.NORTH); + + textArea.setEditable(false); + textArea.setRows(TEXT_AREA_ROW); + textArea.setMargin(new Insets(GAP, GAP, GAP, GAP)); + textArea.setEditable(false); + textArea.setText(detail); + UIScrollPane scrollPane = new UIScrollPane(textArea); + expandableContentPane.setLayout(new BorderLayout()); + expandableContentPane.setBorder(BorderFactory.createEmptyBorder(0, MARGIN, 0, MARGIN)); + expandableContentPane.add(scrollPane, BorderLayout.CENTER); + changeExpand(isExpand); + contentPanel.add(expandableContentPane, BorderLayout.CENTER); + add(contentPanel, BorderLayout.CENTER); + + + // 操作面板 + JPanel actionPanel = new JPanel(); + actionPanel.setLayout(new FlowLayout(FlowLayout.CENTER, MARGIN, MARGIN)); + actionPanel.add(buttonCancel); + actionPanel.add(buttonOK); + add(actionPanel, BorderLayout.SOUTH); + + initListener(); + if (l != null) { + addDialogActionListener(l); + } + pack(); + if (getOwner() != null) { + GUICoreUtils.setWindowCenter(getOwner(), this); + } + + } + + private void changeExpand(boolean isExpand) { + if (isExpand) { + expandableContentPane.setVisible(true); + narrow.setIcon(UIManager.getIcon("OptionPane.narrow.down")); + narrowHit.setText(Toolkit.i18nText("Fine_Designer_Hide_Detail")); + } else { + expandableContentPane.setVisible(false); + narrow.setIcon(UIManager.getIcon("OptionPane.narrow.right")); + narrowHit.setText(Toolkit.i18nText("Fine_Designer_Look_Detail")); + } + } + + private void initListener() { + + foldBar.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + changeExpand(!expandableContentPane.isShowing()); + pack(); + } + + @Override + public void mouseEntered(MouseEvent e) { + foldBar.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + } + + @Override + public void mouseExited(MouseEvent e) { + foldBar.setCursor(Cursor.getDefaultCursor()); + } + }); + buttonOK.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + doOK(); + } + }); + + buttonCancel.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + doCancel(); + } + }); + } + + protected Icon getIconForType(int messageType) { + if (messageType < 0 || messageType > 3) + return null; + String propertyName; + switch (messageType) { + case 0: + propertyName = "OptionPane.errorIcon"; + break; + case 1: + default: + propertyName = "OptionPane.informationIcon"; + break; + case 2: + propertyName = "OptionPane.warningIcon"; + break; + case 3: + propertyName = "OptionPane.questionIcon"; + break; + } + return UIManager.getIcon(propertyName); + } + + /** + * 设置对话框主消息 + * + * @param message 消息内容 + */ + public void setMessage(String message) { + msg.setText(HTML_TAG_1 + message + HTML_TAG_2); + } + + /** + * 设置对话框消息详情 + * + * @param detail 消息详情 + */ + public void setDetail(String detail) { + textArea.setText(detail); + } + + /** + * 设置详情面板展开关闭 + * + * @param expand 展开或关闭 + */ + public void setExpand(boolean expand) { + changeExpand(expand); + } + + @Override + public void setVisible(boolean b) { + super.setVisible(b); + } + + public static Builder Builder() { + return new UIExpandDialog.Builder(); + } + + public static final class Builder { + + public int messageType = ERROR_MESSAGE; + public String title; + public String message; + public String detail; + public String okText = Toolkit.i18nText("Fine-Design_Report_OK"); + public String cancelText = Toolkit.i18nText("Fine-Design_Basic_Cancel"); + public boolean modal = true; + public boolean expand = true; + public Frame owner = null; + public DialogActionListener dialogActionListener = null; + + private Builder() { + } + + public UIExpandDialog build() { + return new UIExpandDialog(this); + } + + public Builder owner(Frame owner) { + this.owner = owner; + return this; + } + + public Builder messageType(int messageType) { + this.messageType = messageType; + return this; + } + + public Builder title(String title) { + this.title = title; + return this; + } + + public Builder message(String message) { + this.message = message; + return this; + } + + public Builder detail(String detail) { + this.detail = detail; + return this; + } + + public Builder okText(String okText) { + this.okText = okText; + return this; + } + + public Builder cancelText(String cancelText) { + this.cancelText = cancelText; + return this; + } + + public Builder modal(boolean modal) { + this.modal = modal; + return this; + } + + public Builder expand(boolean expand) { + this.expand = expand; + return this; + } + + public Builder dialogActionListener(DialogActionListener dialogActionListener) { + this.dialogActionListener = dialogActionListener; + return this; + } + } + + @Override + public void checkValid() throws Exception { + + } +} diff --git a/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallOnlineCallback.java b/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallOnlineCallback.java index 4c94a9f42c..0b1eb33fb9 100644 --- a/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallOnlineCallback.java +++ b/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallOnlineCallback.java @@ -1,6 +1,7 @@ package com.fr.design.extra.exe.callback; import com.fr.design.bridge.exec.JSCallback; +import com.fr.design.bridge.exec.JSExecutor; import com.fr.design.dialog.FineJOptionPane; import com.fr.design.extra.PluginOperateUtils; import com.fr.design.i18n.Toolkit; @@ -17,17 +18,22 @@ import com.fr.plugin.manage.control.PluginTaskResult; * Created by ibm on 2017/5/26. */ public class InstallOnlineCallback extends AbstractDealPreTaskCallback { - protected JSCallback jsCallback; + protected JSCallback jsCallback = new JSCallback(JSExecutor.DEFAULT); + private static int HUNDRED_PERCENT = 100; - public InstallOnlineCallback(PluginTask pluginTask, JSCallback jsCallback){ + public InstallOnlineCallback(PluginTask pluginTask) { + super(pluginTask); + } + + public InstallOnlineCallback(PluginTask pluginTask, JSCallback jsCallback) { super(pluginTask); this.jsCallback = jsCallback; } @Override public void updateProgress(String description, double aProgress) { - jsCallback.execute(String.valueOf(aProgress * HUNDRED_PERCENT + "%")); + jsCallback.execute(aProgress * HUNDRED_PERCENT + "%"); } @@ -37,10 +43,10 @@ public class InstallOnlineCallback extends AbstractDealPreTaskCallback { if (result.isSuccess()) { String switchedInfo = PluginOperateUtils.getSwitchedInfo(result); jsCallback.execute("success"); - String successInfo = pluginInfo + Toolkit.i18nText("Fine-Design_Basic_Plugin_Install_Success") + switchedInfo; + String successInfo = pluginInfo + Toolkit.i18nText("Fine-Design_Basic_Plugin_Install_Success") + switchedInfo; FineLoggerFactory.getLogger().info(successInfo); FineJOptionPane.showMessageDialog(null, successInfo); - } else if(result.errorCode() == PluginErrorCode.HasLowerPluginWhenInstall){ + } else if (result.errorCode() == PluginErrorCode.HasLowerPluginWhenInstall) { int rv = FineJOptionPane.showConfirmDialog( null, Toolkit.i18nText("Fine-Design_Basic_Plugin_Has_Install_Lower"), @@ -51,8 +57,7 @@ public class InstallOnlineCallback extends AbstractDealPreTaskCallback { if (rv == FineJOptionPane.OK_OPTION) { PluginMarker pluginMarker = result.getCurrentTask().getMarker(); PluginOperateUtils.updatePluginOnline(pluginMarker, jsCallback); - } - else { + } else { jsCallback.execute("success"); } } else { @@ -63,5 +68,4 @@ public class InstallOnlineCallback extends AbstractDealPreTaskCallback { } - } diff --git a/designer-base/src/main/java/com/fr/design/extra/exe/callback/ModifyStatusCallback.java b/designer-base/src/main/java/com/fr/design/extra/exe/callback/ModifyStatusCallback.java index 78e338f8c1..434be685db 100644 --- a/designer-base/src/main/java/com/fr/design/extra/exe/callback/ModifyStatusCallback.java +++ b/designer-base/src/main/java/com/fr/design/extra/exe/callback/ModifyStatusCallback.java @@ -1,6 +1,7 @@ package com.fr.design.extra.exe.callback; import com.fr.design.bridge.exec.JSCallback; +import com.fr.design.bridge.exec.JSExecutor; import com.fr.design.dialog.FineJOptionPane; import com.fr.design.extra.PluginOperateUtils; import com.fr.design.i18n.Toolkit; @@ -15,14 +16,20 @@ import javax.swing.JOptionPane; /** * Created by ibm on 2017/5/27. */ -public class ModifyStatusCallback implements PluginTaskCallback{ +public class ModifyStatusCallback implements PluginTaskCallback { private boolean isActive; - private JSCallback jsCallback; + private JSCallback jsCallback = new JSCallback(JSExecutor.DEFAULT); + ; - public ModifyStatusCallback (boolean isActive, JSCallback jsCallback){ + public ModifyStatusCallback(boolean isActive) { + this.isActive = isActive; + } + + public ModifyStatusCallback(boolean isActive, JSCallback jsCallback) { this.isActive = isActive; this.jsCallback = jsCallback; } + @Override public void done(PluginTaskResult result) { String pluginInfo = PluginOperateUtils.getSuccessInfo(result); diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/app/AbstractWorkBookApp.java b/designer-realize/src/main/java/com/fr/design/mainframe/app/AbstractWorkBookApp.java index 3fd12d81a3..4f22528c7e 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/app/AbstractWorkBookApp.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/app/AbstractWorkBookApp.java @@ -1,29 +1,45 @@ package com.fr.design.mainframe.app; import com.fr.base.Parameter; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.dialog.UIExpandDialog; +import com.fr.design.extra.exe.callback.InstallOnlineCallback; +import com.fr.design.extra.exe.callback.ModifyStatusCallback; +import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.App; +import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.JWorkBook; import com.fr.design.worker.open.OpenResult; import com.fr.design.worker.open.OpenWorker; import com.fr.file.FILE; +import com.fr.io.TemplateIOErrorUtils; import com.fr.log.FineLoggerFactory; import com.fr.main.impl.WorkBook; +import com.fr.plugin.context.PluginMarker; +import com.fr.plugin.context.PluginMarkerAdapter; +import com.fr.plugin.manage.PluginManager; +import com.fr.plugin.manage.control.PluginControllerHelper; +import com.fr.plugin.manage.control.PluginTask; import com.fr.report.worksheet.WorkSheet; +import com.fr.third.guava.collect.Multimap; +import com.fr.workspace.WorkContext; + +import java.util.Collection; import java.util.concurrent.Callable; /** * Created by juhaoyu on 2018/6/27. */ abstract class AbstractWorkBookApp implements App { - - + + @Override public int currentAPILevel() { - + return CURRENT_LEVEL; } - + @Override public JTemplate openTemplate(FILE tplFile) { JWorkBook emptyTemplate = new JWorkBook(new WorkBook(new WorkSheet()), tplFile); @@ -32,6 +48,7 @@ abstract class AbstractWorkBookApp implements App { @Override public OpenResult call() { WorkBook workBook = asIOFile(tplFile); + dealWithTemplateIOError(tplFile.getPath()); return new OpenResult<>(workBook, workBook.getParameters()); } }, emptyTemplate); @@ -50,20 +67,68 @@ abstract class AbstractWorkBookApp implements App { } return emptyTemplate; } - + + private void dealWithTemplateIOError(String path) { + // 试图获取多行读取错误提示并缓存待处理列表 + String detail = TemplateIOErrorUtils.dealWithErrorDetailMultiLineAndCache(path); + if (detail.length() > 0) { + if (WorkContext.getCurrent().isLocal()) { + UIExpandDialog.Builder() + .owner(DesignerContext.getDesignerFrame()) + .title(Toolkit.i18nText("Fine-Design_Basic_Tool_Tips")) + .message(Toolkit.i18nText("Fine-Design_Template_Plugin_Error_Message_Local")) + .detail(detail) + .okText(Toolkit.i18nText("Fine-Design_Template_Plugin_Error_OK_Btn")) + .cancelText(Toolkit.i18nText("Fine-Design_Template_Plugin_Error_Cancel_Btn")) + .dialogActionListener(new DialogActionAdapter() { + public void doOk() { + installAndEnablePlugin(path); + } + + @Override + public void doCancel() { + TemplateIOErrorUtils.invalidatePlugins(path); + } + }).build().setVisible(true); + } else { + UIExpandDialog.Builder().owner(DesignerContext.getDesignerFrame()) + .title(Toolkit.i18nText("Fine-Design_Basic_Tool_Tips")) + .message(Toolkit.i18nText("Fine-Design_Template_Plugin_Error_Message_Remote")) + .detail(detail) + .build() + .setVisible(true); + } + + } + } + + public void installAndEnablePlugin(String key) { + Multimap stringPluginMarkerAdapterMultimap = TemplateIOErrorUtils.popPluginInfoMap(key); + Collection disablePlugins = stringPluginMarkerAdapterMultimap.get(TemplateIOErrorUtils.DISABLE_PLUGIN); + for (PluginMarkerAdapter disablePlugin : disablePlugins) { + PluginManager.getController().enable(disablePlugin, new ModifyStatusCallback(false)); + } + + Collection uninstallPlugins = stringPluginMarkerAdapterMultimap.get(TemplateIOErrorUtils.NOT_INSTALLED_PLUGIN); + for (PluginMarker uninstallPlugin : uninstallPlugins) { + PluginTask pluginTask = PluginTask.installTask(uninstallPlugin); + PluginControllerHelper.installOnline(uninstallPlugin, new InstallOnlineCallback(pluginTask)); + } + } + @Override public String mark4Provider() { - + return getClass().getName(); } - + @Override public void process() { - + } - + @Override public void undo() { - + } } \ No newline at end of file From 7c14f0e2eede5aa75f525cb0bce0e6fc4934c0f7 Mon Sep 17 00:00:00 2001 From: yaohwu Date: Thu, 27 May 2021 14:35:08 +0800 Subject: [PATCH 032/148] =?UTF-8?q?REPORT-51361=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E6=A8=A1=E6=9D=BF=E7=BB=B4=E5=BA=A6=E8=A1=A8=E7=A7=BB?= =?UTF-8?q?=E8=87=B3=E4=BA=91=E7=AB=AF=E8=BF=90=E7=BB=B4=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/DesktopCardPane.java | 8 +- .../com/fr/design/mainframe/JTemplate.java | 121 ++++++--- .../burying/point/AbstractPointCollector.java | 2 + .../burying/point/AbstractPointInfo.java | 2 + .../burying/point/BasePointCollector.java | 2 + .../burying/point/BasePointInfo.java | 2 + .../chart/info/ChartInfoCollector.java | 20 +- .../mainframe/template/info/TemplateInfo.java | 253 ------------------ .../template/info/TemplateInfoCollector.java | 210 --------------- .../template/info/TemplateOperate.java | 2 + .../template/info/TemplateProcessInfo.java | 29 +- .../template/info/TimeConsumeTimer.java | 2 + .../template/info/SendHelperTest.java | 31 --- .../info/TemplateInfoCollectorTest.java | 252 ----------------- .../template/info/TemplateInfoTest.java | 143 ---------- .../design/form/util/FormDesignerUtils.java | 9 + .../java/com/fr/design/mainframe/JForm.java | 1 + .../template/info/JFormProcessInfo.java | 5 +- .../mainframe/InformationCollector.java | 130 ++------- .../info/JPolyWorkBookProcessInfo.java | 3 + .../template/info/JWorkBookProcessInfo.java | 3 + 21 files changed, 167 insertions(+), 1063 deletions(-) delete mode 100644 designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java delete mode 100644 designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java delete mode 100644 designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java delete mode 100644 designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoTest.java diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesktopCardPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesktopCardPane.java index 8361016ca5..f540832d0d 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesktopCardPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesktopCardPane.java @@ -11,10 +11,10 @@ import com.fr.design.dialog.BasicPane; import com.fr.design.event.TargetModifiedEvent; import com.fr.design.event.TargetModifiedListener; -import java.awt.BorderLayout; -import java.awt.Component; import javax.swing.JComponent; import javax.swing.JLayeredPane; +import java.awt.BorderLayout; +import java.awt.Component; /** @@ -53,12 +53,11 @@ public class DesktopCardPane extends BasicPane implements TargetModifiedListener // 判断是否切换设计器状态到禁止拷贝剪切 if (jt.getTarget().getAttrMark(DesignBanCopyAttrMark.XML_TAG) != null) { DesignModeContext.switchTo(DesignerMode.BAN_COPY_AND_CUT); - } else if (!DesignModeContext.isVcsMode() && !DesignModeContext.isAuthorityEditing()){ + } else if (!DesignModeContext.isVcsMode() && !DesignModeContext.isAuthorityEditing()) { DesignModeContext.switchTo(DesignerMode.NORMAL); } DesignerFrameFileDealerPane.getInstance().setCurrentEditingTemplate(jt); if (component != null) { - component.onLostFocus(); layeredPane.remove(component); } component = jt; @@ -69,7 +68,6 @@ public class DesktopCardPane extends BasicPane implements TargetModifiedListener repaint(); revalidate(); component.requestGridFocus(); - component.onGetFocus(); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java index 6c64e1eb60..2f5245051e 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java @@ -39,7 +39,6 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.chart.info.ChartInfoCollector; import com.fr.design.mainframe.check.CheckButton; -import com.fr.design.mainframe.template.info.TemplateInfoCollector; import com.fr.design.mainframe.template.info.TemplateProcessInfo; import com.fr.design.mainframe.template.info.TimeConsumeTimer; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; @@ -79,7 +78,6 @@ import com.fr.stable.core.UUID; import com.fr.workspace.WorkContext; import com.fr.workspace.server.lock.TplOperator; -import java.util.concurrent.Callable; import javax.swing.BorderFactory; import javax.swing.Icon; import javax.swing.JComponent; @@ -91,6 +89,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Set; +import java.util.concurrent.Callable; /** * 报表设计和表单设计的编辑区域(设计器编辑的IO文件) @@ -107,11 +106,24 @@ public abstract class JTemplate> protected U undoState; protected U authorityUndoState = null; protected T template; // 当前模板 - protected TemplateProcessInfo processInfo; // 模板过程的相关信息 + /** + * 模板过程的相关信息 + * + * @deprecated move to cloud ops plugin,left only for compatible + */ + @Deprecated + protected TemplateProcessInfo processInfo; + private JComponent centerPane; private static short currentIndex = 0;// 此变量用于多次新建模板时,让名字不重复 private DesignModelAdapter designModel; private PreviewProvider previewType; + /** + * 统计模板制作耗时 + * + * @deprecated move to cloud ops plugin,left only for compatible + */ + @Deprecated protected TimeConsumeTimer consumeTimer = new TimeConsumeTimer(); private volatile boolean saving = false; private volatile boolean opening = false; @@ -161,7 +173,6 @@ public abstract class JTemplate> addCenterPane(); this.undoState = createUndoState(); - consumeTimer.setEnabled(shouldInitForCollectInfo(isNewFile)); initAndStartPlugin(); } @@ -206,21 +217,22 @@ public abstract class JTemplate> } + /** + * @deprecated move to cloud ops plugin,left only for compatible + */ + @Deprecated void onGetFocus() { consumeTimer.start(); } + /** + * @deprecated move to cloud ops plugin,left only for compatible + */ + @Deprecated void onLostFocus() { consumeTimer.stop(); } - private boolean shouldInitForCollectInfo(boolean isNewFile) { - if (isNewFile) { - return true; - } - // 不是新建模板,但是已经在收集列表中 - return TemplateInfoCollector.getInstance().contains(template.getTemplateID()); - } // 刷新右侧属性面板 public abstract void refreshEastPropertiesPane(); @@ -229,30 +241,33 @@ public abstract class JTemplate> public abstract JComponent getCurrentReportComponentPane(); - // 为收集模版信息作准备 - private void initForCollect() { + /** + * 为另存的模板创建新的模板id + */ + private void generateNewTemplateIdForSaveAs() { generateTemplateId(); - consumeTimer.setEnabled(true); - consumeTimer.start(); } - private void collectInfo() { // 执行收集操作 - collectInfo(StringUtils.EMPTY); + /** + * 收集图表信息 + */ + private void collectInfo() { + ChartInfoCollector.getInstance().collectInfo(template.getTemplateID(), StringUtils.EMPTY, getProcessInfo(), 0); } - private void collectInfo(String originID) { // 执行收集操作 + /** + * 另存模板时收集图表信息 + * + * @param originID 原始模板id + */ + private void collectInfoWhenSaveAs(String originID) { ChartInfoCollector.getInstance().collectInfo(template.getTemplateID(), originID, getProcessInfo(), 0); - if (!consumeTimer.isEnabled()) { - return; - } - try { - int timeConsume = consumeTimer.popTime(); - TemplateInfoCollector.getInstance().collectInfo(template.getTemplateID(), originID, getProcessInfo(), timeConsume); - } catch (Throwable th) { // 不管收集过程中出现任何异常,都不应该影响模版保存 - } - consumeTimer.start(); // 准备下一次计算 } + /** + * @deprecated move to cloud ops plugin + */ + @Deprecated public abstract TemplateProcessInfo getProcessInfo(); public U getUndoState() { @@ -347,7 +362,7 @@ public abstract class JTemplate> /** * 刷新内部资源 - * + *

* 刷新资源的同时。 * CenterPane 负责监听改动。 * 所以需要同步处理 @@ -415,7 +430,7 @@ public abstract class JTemplate> protected abstract DesignModelAdapter createDesignModel(); - protected DesignModelAdapter createDesignModel(Parameter[] parameters) { + protected DesignModelAdapter createDesignModel(Parameter[] parameters) { // 空实现 兼容下 return null; } @@ -675,6 +690,7 @@ public abstract class JTemplate> /** * Web预览的时候需要隐藏掉除“报表运行环境”外的路径(C盘D盘等) isShowLoc = false + * 被云端运维插件修改用于收集埋点 * * @param isShowLoc 是否本地 * @return 保存成功返回true @@ -767,20 +783,24 @@ public abstract class JTemplate> } - // 保存新模板时会进入此方法(新建模板直接保存,或者另存为) + /** + * 保存新模板时会进入此方法(新建模板直接保存,或者另存为) + * 被云端运维插件修改用于收集埋点 + */ protected boolean saveNewFile(FILE editingFILE, String oldName) { String originID = StringUtils.EMPTY; - if (StringUtils.isNotEmpty(this.template.getTemplateID())) { - originID = this.template.getTemplateID(); + String currentId = this.template.getTemplateID(); + if (StringUtils.isNotEmpty(currentId)) { + originID = currentId; } // 在保存之前,初始化 templateID - initForCollect(); + generateNewTemplateIdForSaveAs(); this.editingFILE = editingFILE; boolean result = this.saveToNewFile(oldName); if (result) { DesignerFrameFileDealerPane.getInstance().refresh(); - collectInfo(originID); + collectInfoWhenSaveAs(originID); } return result; } @@ -792,7 +812,7 @@ public abstract class JTemplate> result = result || provider.saveToNewFile(this.editingFILE.getPath(), this); } if (!result) { - result = result || this.saveFile(); + result = this.saveFile(); //更换最近打开 DesignerEnvManager.getEnvManager().replaceRecentOpenedFilePath(oldName, this.getPath()); this.refreshToolArea(); @@ -871,10 +891,10 @@ public abstract class JTemplate> } /** + * @return java.lang.Integer WorkBook11.cpt则返回11,如果没有找到index返回null * @Description 返回文件名中的index * @param: prefix 前缀 * @param: fileName 文件名称全名 - * @return java.lang.Integer WorkBook11.cpt则返回11,如果没有找到index返回null * @Author Henry.Wang * @Date 2021/4/9 11:13 **/ @@ -1411,8 +1431,7 @@ public abstract class JTemplate> CallbackSaveWorker worker = new CallbackSaveWorker(new Callable() { @Override public Boolean call() throws Exception { - collectInfo(); - return JTemplate.this.saveRealFile(); + return saveRealFileByWorker(); } }, this); @@ -1426,6 +1445,14 @@ public abstract class JTemplate> return worker; } + /** + * 被云端运维插件修改用于收集埋点 + */ + private boolean saveRealFileByWorker() throws Exception { + collectInfo(); + return saveRealFile(); + } + private void callBackForSave() { JTemplate.this.saved = true; JTemplate.this.authoritySaved = true; @@ -1482,7 +1509,7 @@ public abstract class JTemplate> callBackForSave(); // 当前打开的是正在保存的模板才刷新 if (ComparatorUtils.equals(JTemplate.this.template.getTemplateID(), - HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().template.getTemplateID())) { + HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().template.getTemplateID())) { refreshToolArea(); } DesignerFrameFileDealerPane.getInstance().refresh(); @@ -1511,13 +1538,23 @@ public abstract class JTemplate> } } + /** + * 另存为时在 save worker 中保存实际的文件; + * 被云端运维插件修改用于收集埋点 + */ private boolean saveNewRealFile(FILE editingFILE, String oldName) throws Exception { - consumeTimer.setEnabled(true); - consumeTimer.start(); + + String originID = StringUtils.EMPTY; + String currentId = this.template.getTemplateID(); + if (StringUtils.isNotEmpty(currentId)) { + originID = currentId; + } + // 在保存之前,初始化 templateID + generateNewTemplateIdForSaveAs(); this.editingFILE = editingFILE; boolean result = this.saveToNewRealFile(oldName); if (result) { - collectInfo(this.template.getTemplateID()); + collectInfoWhenSaveAs(originID); } return result; } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/burying/point/AbstractPointCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/burying/point/AbstractPointCollector.java index 15291211cb..bd91a0b428 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/burying/point/AbstractPointCollector.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/burying/point/AbstractPointCollector.java @@ -29,7 +29,9 @@ import java.util.concurrent.ConcurrentHashMap; * @author Bjorn * @version 10.0 * Created by Bjorn on 2020-02-21 + * @deprecated moved to Cloud Ops plugin */ +@Deprecated public abstract class AbstractPointCollector implements BasePointCollector { protected Map pointInfoMap; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/burying/point/AbstractPointInfo.java b/designer-base/src/main/java/com/fr/design/mainframe/burying/point/AbstractPointInfo.java index 11058af5cb..a1806981b8 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/burying/point/AbstractPointInfo.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/burying/point/AbstractPointInfo.java @@ -6,7 +6,9 @@ import java.util.List; * @author Bjorn * @version 10.0 * Created by Bjorn on 2020-02-21 + * @deprecated moved to Cloud Ops plugin */ +@Deprecated public abstract class AbstractPointInfo implements BasePointInfo { protected int idleDayCount; // 到现在为止,埋点闲置的天数 diff --git a/designer-base/src/main/java/com/fr/design/mainframe/burying/point/BasePointCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/burying/point/BasePointCollector.java index f10f1682e0..254d2344de 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/burying/point/BasePointCollector.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/burying/point/BasePointCollector.java @@ -8,7 +8,9 @@ import com.fr.stable.xml.XMLWriter; * @author Bjorn * @version 10.0 * Created by Bjorn on 2020-02-21 + * @deprecated moved to Cloud Ops plugin */ +@Deprecated public interface BasePointCollector extends XMLReadable, XMLWriter { /** diff --git a/designer-base/src/main/java/com/fr/design/mainframe/burying/point/BasePointInfo.java b/designer-base/src/main/java/com/fr/design/mainframe/burying/point/BasePointInfo.java index b45f1cb6a7..43d24108c6 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/burying/point/BasePointInfo.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/burying/point/BasePointInfo.java @@ -10,7 +10,9 @@ import java.util.Map; * @author Bjorn * @version 10.0 * Created by Bjorn on 2020-02-21 + * @deprecated moved to Cloud Ops plugin */ +@Deprecated public interface BasePointInfo extends XMLReadable, XMLWriter { /** diff --git a/designer-base/src/main/java/com/fr/design/mainframe/chart/info/ChartInfoCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/chart/info/ChartInfoCollector.java index 1b34722e6f..7c19278c20 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/chart/info/ChartInfoCollector.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/chart/info/ChartInfoCollector.java @@ -5,7 +5,6 @@ import com.fr.chartx.attr.ChartProvider; import com.fr.chartx.config.info.AbstractConfig; import com.fr.chartx.config.info.constant.ConfigType; import com.fr.design.mainframe.burying.point.AbstractPointCollector; -import com.fr.design.mainframe.template.info.TemplateInfo; import com.fr.design.mainframe.template.info.TemplateProcessInfo; import com.fr.general.ComparatorUtils; import com.fr.stable.StringUtils; @@ -31,6 +30,9 @@ public class ChartInfoCollector extends AbstractPointCollector { private static final String XML_CHART_INFO_LIST = "ChartInfoList"; private static final String XML_FILE_NAME = "chart.info"; + private static final int VALID_CELL_COUNT = 5; // 有效报表模板的格子数 + private static final int VALID_WIDGET_COUNT = 5; // 有效报表模板的控件数 + private static ChartInfoCollector instance; private Map chartInfoCacheMap; @@ -217,10 +219,10 @@ public class ChartInfoCollector extends AbstractPointCollector { int floatCount = processInfo.getFloatCount(); int blockCount = processInfo.getBlockCount(); int widgetCount = processInfo.getWidgetCount(); - - return TemplateInfo.isTestTemplate(reportType, cellCount, floatCount, blockCount, widgetCount); + return isTestTemplate(reportType, cellCount, floatCount, blockCount, widgetCount); } + /** * 更新 day_count:打开设计器却未编辑图表的连续日子 */ @@ -282,4 +284,16 @@ public class ChartInfoCollector extends AbstractPointCollector { writer.end(); } + + private boolean isTestTemplate(int reportType, int cellCount, int floatCount, int blockCount, int widgetCount) { + boolean isTestTemplate; + if (reportType == 0) { // 普通报表 + isTestTemplate = cellCount <= VALID_CELL_COUNT && floatCount <= 1 && widgetCount <= VALID_WIDGET_COUNT; + } else if (reportType == 1) { // 聚合报表 + isTestTemplate = blockCount <= 1 && widgetCount <= VALID_WIDGET_COUNT; + } else { // 表单(reportType == 2) + isTestTemplate = widgetCount <= 1; + } + return isTestTemplate; + } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java deleted file mode 100644 index 78eddb00f4..0000000000 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java +++ /dev/null @@ -1,253 +0,0 @@ -package com.fr.design.mainframe.template.info; - -import com.fr.config.MarketConfig; -import com.fr.design.DesignerEnvManager; -import com.fr.design.mainframe.burying.point.AbstractPointInfo; -import com.fr.general.CloudCenter; -import com.fr.json.JSON; -import com.fr.json.JSONFactory; -import com.fr.json.JSONObject; -import com.fr.stable.StringUtils; -import com.fr.stable.xml.XMLPrintWriter; -import com.fr.stable.xml.XMLableReader; -import com.fr.third.joda.time.DateTime; - -import java.util.HashMap; -import java.util.Map; - -/** - * 对应一张模版的记录 - * Created by plough on 2019/4/18. - */ -public class TemplateInfo extends AbstractPointInfo { - static final String XML_TAG = "TemplateInfo"; - private static final String SIMPLE_DATE_PATTRN = "yyyy-MM-dd HH:mm"; - - private static final String CONSUMING_URL = CloudCenter.getInstance().acquireUrlByKind("tempinfo.consuming") + "/single"; - private static final String PROCESS_URL = CloudCenter.getInstance().acquireUrlByKind("tempinfo.process") + "/single"; - - private static final String XML_PROCESS_MAP = "processMap"; - private static final String XML_CONSUMING_MAP = "consumingMap"; - private static final String ATTR_DAY_COUNT = "day_count"; - private static final String ATTR_TEMPLATE_ID = "templateID"; - private static final String ATTR_ORIGIN_ID = "originID"; - private static final String ATTR_PROCESS = "process"; - private static final String ATTR_FLOAT_COUNT = "float_count"; - private static final String ATTR_WIDGET_COUNT = "widget_count"; - private static final String ATTR_CELL_COUNT = "cell_count"; - private static final String ATTR_BLOCK_COUNT = "block_count"; - private static final String ATTR_REPORT_TYPE = "report_type"; - private static final String ATTR_CREATE_TIME = "create_time"; - private static final String ATTR_UUID = "uuid"; - private static final String ATTR_UID = "uid"; - private static final String ATTR_SAVE_RECORD = "saveRecord"; - private static final String ATTR_PARA_APPLY = "paraApply"; - private static final String ATTR_COMPONENTS_INFO = "components_info"; - private static final String ATTR_REUSE_CMP_LIST = "reuseCmptList"; - - - private static final String TEST_TEMPLATE_FLAG = "test_template"; - private static final int VALID_CELL_COUNT = 5; // 有效报表模板的格子数 - private static final int VALID_WIDGET_COUNT = 5; // 有效报表模板的控件数 - - private String templateID = StringUtils.EMPTY; - private String originID = StringUtils.EMPTY; - // todo: processMap 和 consumingMap 还可以再拆解为小类,以后继续重构 - private Map processMap = new HashMap<>(); - private Map consumingMap = new HashMap<>(); - - private TemplateInfo() { - } - - private TemplateInfo(String templateID, String originID) { - this.templateID = templateID; - this.originID = originID; - } - - @Override - protected String key() { - return templateID; - } - - public static TemplateInfo newInstanceByRead(XMLableReader reader) { - TemplateInfo templateInfo = new TemplateInfo(); - reader.readXMLObject(templateInfo); - return templateInfo; - } - - public static TemplateInfo newInstance(String templateID) { - return newInstance(templateID, StringUtils.EMPTY, StringUtils.EMPTY, StringUtils.EMPTY); - } - - public static TemplateInfo newInstance(String templateID, String originID, String saveRecord) { - String createTime = DateTime.now().toString(SIMPLE_DATE_PATTRN); - return newInstance(templateID, originID, saveRecord, createTime); - } - - public static TemplateInfo newInstance(String templateID, String originID, String saveRecord, String createTime) { - HashMap consumingMap = new HashMap<>(); - - String uuid = DesignerEnvManager.getEnvManager().getUUID(); - MarketConfig config = MarketConfig.getInstance(); - consumingMap.put(ATTR_UUID, uuid); - consumingMap.put(ATTR_TEMPLATE_ID, templateID); - consumingMap.put(ATTR_ORIGIN_ID, originID); - consumingMap.put(ATTR_CREATE_TIME, createTime); - consumingMap.put(ATTR_UID, config.getBBSAttr().getBbsUid()); - consumingMap.put(ATTR_SAVE_RECORD, saveRecord); - - TemplateInfo templateInfo = new TemplateInfo(templateID, originID); - templateInfo.consumingMap = consumingMap; - - return templateInfo; - } - - String getTemplateID() { - return templateID; - } - - public String getTemplateInfoID() { - return templateID + "_" + getSaveTime(); - } - - public long getSaveTime() { - String saveRecord = (String) consumingMap.get(ATTR_SAVE_RECORD); - JSONObject jo = JSONFactory.createJSON(JSON.OBJECT, saveRecord); - return jo.getLong("time"); - } - - public String getTemplateCreateTime() { - return (String) consumingMap.get(ATTR_CREATE_TIME); - } - - - @Override - public void writeXML(XMLPrintWriter writer) { - writer.startTAG(XML_TAG); - if (StringUtils.isNotEmpty(templateID)) { - writer.attr(ATTR_TEMPLATE_ID, this.templateID); - } - if (StringUtils.isNotEmpty(originID)) { - writer.attr(ATTR_ORIGIN_ID, this.originID); - } - if (idleDayCount >= 0) { - writer.attr(ATTR_DAY_COUNT, this.idleDayCount); - } - writer.attr(TEST_TEMPLATE_FLAG, this.testTemplate); - writeProcessMap(writer); - writeConsumingMap(writer); - - writer.end(); - } - - private void writeProcessMap(XMLPrintWriter writer) { - writer.startTAG(XML_PROCESS_MAP); - writer.attr(ATTR_PROCESS, (String) processMap.get(ATTR_PROCESS)); - writer.attr(ATTR_FLOAT_COUNT, (int) processMap.get(ATTR_FLOAT_COUNT)); - writer.attr(ATTR_WIDGET_COUNT, (int) processMap.get(ATTR_WIDGET_COUNT)); - writer.attr(ATTR_CELL_COUNT, (int) processMap.get(ATTR_CELL_COUNT)); - writer.attr(ATTR_BLOCK_COUNT, (int) processMap.get(ATTR_BLOCK_COUNT)); - writer.attr(ATTR_REPORT_TYPE, (int) processMap.get(ATTR_REPORT_TYPE)); - writer.attr(ATTR_PARA_APPLY, (int) processMap.get(ATTR_PARA_APPLY)); - writer.attr(ATTR_COMPONENTS_INFO, (String) processMap.get(ATTR_COMPONENTS_INFO)); - writer.attr(ATTR_REUSE_CMP_LIST, (String) processMap.get(ATTR_REUSE_CMP_LIST)); - writer.end(); - } - - private void writeConsumingMap(XMLPrintWriter writer) { - writer.startTAG(XML_CONSUMING_MAP); - writer.attr(ATTR_CREATE_TIME, (String) consumingMap.get(ATTR_CREATE_TIME)); - writer.attr(ATTR_UUID, (String) consumingMap.get(ATTR_UUID)); - writer.attr(ATTR_UID, (int) consumingMap.get(ATTR_UID)); - writer.attr(ATTR_SAVE_RECORD, (String) consumingMap.get(ATTR_SAVE_RECORD)); - writer.end(); - } - - @Override - public void readXML(XMLableReader reader) { - if (!reader.isChildNode()) { - idleDayCount = reader.getAttrAsInt(ATTR_DAY_COUNT, 0); - testTemplate = reader.getAttrAsBoolean(TEST_TEMPLATE_FLAG, false); - templateID = reader.getAttrAsString(ATTR_TEMPLATE_ID, StringUtils.EMPTY); - originID = reader.getAttrAsString(ATTR_ORIGIN_ID, StringUtils.EMPTY); - } else { - try { - String name = reader.getTagName(); - if (XML_PROCESS_MAP.equals(name)) { - processMap.put(ATTR_PROCESS, reader.getAttrAsString(ATTR_PROCESS, StringUtils.EMPTY)); - processMap.put(ATTR_FLOAT_COUNT, reader.getAttrAsInt(ATTR_FLOAT_COUNT, 0)); - processMap.put(ATTR_WIDGET_COUNT, reader.getAttrAsInt(ATTR_WIDGET_COUNT, 0)); - processMap.put(ATTR_CELL_COUNT, reader.getAttrAsInt(ATTR_CELL_COUNT, 0)); - processMap.put(ATTR_BLOCK_COUNT, reader.getAttrAsInt(ATTR_BLOCK_COUNT, 0)); - processMap.put(ATTR_REPORT_TYPE, reader.getAttrAsInt(ATTR_REPORT_TYPE, 0)); - processMap.put(ATTR_PARA_APPLY, reader.getAttrAsInt(ATTR_PARA_APPLY, 0)); - processMap.put(ATTR_COMPONENTS_INFO, reader.getAttrAsString(ATTR_COMPONENTS_INFO, StringUtils.EMPTY)); - processMap.put(ATTR_REUSE_CMP_LIST, reader.getAttrAsString(ATTR_REUSE_CMP_LIST, StringUtils.EMPTY)); - processMap.put(ATTR_TEMPLATE_ID, templateID); - } else if (XML_CONSUMING_MAP.equals(name)) { - consumingMap.put(ATTR_CREATE_TIME, reader.getAttrAsString(ATTR_CREATE_TIME, StringUtils.EMPTY)); - consumingMap.put(ATTR_TEMPLATE_ID, templateID); - consumingMap.put(ATTR_ORIGIN_ID, originID); - consumingMap.put(ATTR_UUID, reader.getAttrAsString(ATTR_UUID, StringUtils.EMPTY)); - consumingMap.put(ATTR_UID, reader.getAttrAsInt(ATTR_UID, 0)); - consumingMap.put(ATTR_SAVE_RECORD, reader.getAttrAsString(ATTR_SAVE_RECORD, StringUtils.EMPTY)); - } - } catch (Exception ex) { - // 什么也不做,使用默认值 - } - } - } - - @Override - public boolean isTestTemplate() { - return testTemplate; - } - - public static boolean isTestTemplate(int reportType, int cellCount, int floatCount, int blockCount, int widgetCount) { - boolean isTestTemplate; - if (reportType == 0) { // 普通报表 - isTestTemplate = cellCount <= VALID_CELL_COUNT && floatCount <= 1 && widgetCount <= VALID_WIDGET_COUNT; - } else if (reportType == 1) { // 聚合报表 - isTestTemplate = blockCount <= 1 && widgetCount <= VALID_WIDGET_COUNT; - } else { // 表单(reportType == 2) - isTestTemplate = widgetCount <= 1; - } - return isTestTemplate; - } - - @Override - protected boolean isComplete() { - return true; - } - - @Override - public Map getSendInfo() { - Map sendMap = new HashMap<>(); - sendMap.put(CONSUMING_URL, JSONFactory.createJSON(JSON.OBJECT, consumingMap).toString()); - sendMap.put(PROCESS_URL, JSONFactory.createJSON(JSON.OBJECT, processMap).toString()); - return sendMap; - } - - - void updateProcessMap(TemplateProcessInfo processInfo) { - HashMap processMap = new HashMap<>(); - - // 暂不支持模版制作过程的收集 - processMap.put(ATTR_PROCESS, StringUtils.EMPTY); - - processMap.put(ATTR_REPORT_TYPE, processInfo.getReportType()); - processMap.put(ATTR_CELL_COUNT, processInfo.getCellCount()); - processMap.put(ATTR_FLOAT_COUNT, processInfo.getFloatCount()); - processMap.put(ATTR_BLOCK_COUNT, processInfo.getBlockCount()); - processMap.put(ATTR_WIDGET_COUNT, processInfo.getWidgetCount()); - processMap.put(ATTR_PARA_APPLY, processInfo.useParaPane() ? 1 : 0); - processMap.put(ATTR_COMPONENTS_INFO, processInfo.getComponentsInfo().toString()); - processMap.put(ATTR_REUSE_CMP_LIST, processInfo.getReuseCmpList().toString()); - this.processMap = processMap; - } - - - int getIdleDayCount() { - return this.idleDayCount; - } -} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java deleted file mode 100644 index 23c07ea3a5..0000000000 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.fr.design.mainframe.template.info; - -import com.fr.design.mainframe.burying.point.AbstractPointCollector; -import com.fr.design.mainframe.burying.point.AbstractPointInfo; -import com.fr.json.JSON; -import com.fr.json.JSONFactory; -import com.fr.json.JSONObject; -import com.fr.stable.StringUtils; -import com.fr.stable.xml.XMLPrintWriter; -import com.fr.stable.xml.XMLableReader; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -/** - * 做模板的过程和耗时收集,辅助类 - * Created by plough on 2017/2/21. - */ -public class TemplateInfoCollector extends AbstractPointCollector { - private static final String XML_TAG = "TplInfo"; - private static final String XML_TEMPLATE_INFO_LIST = "TemplateInfoList"; - private static final String XML_FILE_NAME = "tpl.info"; - private static TemplateInfoCollector instance; - private DesignerOpenHistory designerOpenHistory = DesignerOpenHistory.getInstance(); - //记录指定模板最新的模板耗时信息ID - private Map latestTemplateInfo; - - private TemplateInfoCollector() { - super(); - } - - public static TemplateInfoCollector getInstance() { - if (instance == null) { - instance = new TemplateInfoCollector(); - } - return instance; - } - - /** - * 根据模板ID是否在收集列表中,判断是否需要收集当前模板的信息 - */ - public boolean contains(String templateID) { - return StringUtils.isNotEmpty(templateID) && latestTemplateInfo.containsKey(templateID); - } - - /** - * 收集模板信息。如果之前没有记录,则新增;如果已有记录,则更新。 - * 同时将最新数据保存到文件中。 - * - * @param templateID 模版id - * @param originID 模版的原始id,仅对另存为的模版有效,对于非另存为的模版,值总是为空 - * @param processInfo 包含模版的一些基本信息(如模版类型、包含控件数量等) - * @param timeConsume 本次制作耗时,单位为 s - */ - @Override - public void collectInfo(String templateID, String originID, TemplateProcessInfo processInfo, int timeConsume) { - if (!shouldCollectInfo()) { - return; - } - long saveTime = System.currentTimeMillis(); - - TemplateInfo templateInfo = createTemplateInfo(templateID, originID, saveTime, timeConsume); - - pointInfoMap.put(templateInfo.getTemplateInfoID(), templateInfo); - - //更新下此模板最新保存记录 - updateLatestTemplateInfo(templateID, saveTime); - - // 收集模版基本信息 - templateInfo.updateProcessMap(processInfo); - //设置是否是测试模板 - templateInfo.setTestTemplate(processInfo.isTestTemplate()); - // 刷新闲置日计数器 - templateInfo.resetIdleDayCount(); - - - // 每次更新之后,都同步到暂存文件中 - saveInfo(); - } - - private TemplateInfo createTemplateInfo(String templateID, String originID, long saveTime, int timeConsume){ - JSONObject saveRecord = JSONFactory.createJSON(JSON.OBJECT); - saveRecord.put("time", saveTime); - saveRecord.put("consume", timeConsume); - if (this.contains(templateID)){ - return TemplateInfo.newInstance(templateID, originID, saveRecord.toString(), getTemplateCreateTime(templateID)); - } - return TemplateInfo.newInstance(templateID, originID, saveRecord.toString()); - } - - private String getTemplateCreateTime(String templateID) { - long latestSaveTime = latestTemplateInfo.get(templateID); - TemplateInfo latestTemplateInfo = pointInfoMap.get(templateID + "_" + latestSaveTime); - return latestTemplateInfo.getTemplateCreateTime(); - } - - /** - * 更新 day_count:打开设计器却未编辑模板的连续日子 - */ - @Override - protected void addIdleDayCount() { - // 判断今天是否第一次打开设计器,为了防止同一天内,多次 addIdleDayCount - if (designerOpenHistory.hasOpenedToday()) { - return; - } - for (TemplateInfo templateInfo : pointInfoMap.values()) { - templateInfo.addIdleDayCountByOne(); - } - designerOpenHistory.update(); - } - - private void updateLatestTemplateInfo(TemplateInfo templateInfo) { - String templateID = templateInfo.getTemplateID(); - if (latestTemplateInfo.containsKey(templateID)) { - long latestSaveTime = latestTemplateInfo.get(templateID); - updateLatestTemplateInfo(templateID, Math.max(latestSaveTime, templateInfo.getSaveTime())); - } else { - updateLatestTemplateInfo(templateID, templateInfo.getSaveTime()); - } - } - - private void updateLatestTemplateInfo(String templateID, long saveTime) { - latestTemplateInfo.put(templateID, saveTime); - } - - @Override - public void readXML(XMLableReader reader) { - if (reader.isChildNode()) { - try { - String name = reader.getTagName(); - if (DesignerOpenHistory.XML_TAG.equals(name)) { - if (designerOpenHistory == null) { - designerOpenHistory = DesignerOpenHistory.getInstance(); - } - reader.readXMLObject(designerOpenHistory); - } else if (TemplateInfo.XML_TAG.equals(name)) { - TemplateInfo templateInfo = TemplateInfo.newInstanceByRead(reader); - updateLatestTemplateInfo(templateInfo); - pointInfoMap.put(templateInfo.getTemplateInfoID(), templateInfo); - } - } catch (Exception ex) { - // 什么也不做,使用默认值 - } - } - } - - @Override - public void writeXML(XMLPrintWriter writer) { - writer.startTAG(XML_TAG); - - designerOpenHistory.writeXML(writer); - - writer.startTAG(XML_TEMPLATE_INFO_LIST); - for (TemplateInfo templateInfo : pointInfoMap.values()) { - templateInfo.writeXML(writer); - } - writer.end(); - - writer.end(); - } - - /** - * 获取缓存文件存放路径 - */ - @Override - protected String getInfoFilePath() { - return XML_FILE_NAME; - } - - @Override - public void sendPointInfo() { - addIdleDayCount(); - List removeList = new ArrayList<>(); - List sendList = new ArrayList<>(); - for (String latestTemplateInfokey : latestTemplateInfo.keySet()) { - AbstractPointInfo pointInfo = pointInfoMap.get(latestTemplateInfokey + "_" + latestTemplateInfo.get(latestTemplateInfokey)); - if (pointInfo.isTestTemplate()) { - continue; - } - for (String key : pointInfoMap.keySet()) { - if (key.startsWith(latestTemplateInfokey)) { - sendList.add(key); - } - } - } - // 发送记录 - for (String key : sendList) { - if (SendHelper.sendPointInfo(pointInfoMap.get(key))) { - removeList.add(key); - } - } - - // 清空记录 - for (String key : removeList) { - pointInfoMap.remove(key); - } - - saveInfo(); - } - - - @Override - protected void loadFromFile() { - latestTemplateInfo = new ConcurrentHashMap<>(); - super.loadFromFile(); - } - -} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateOperate.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateOperate.java index 5c2cfb0711..be8eeaba24 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateOperate.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateOperate.java @@ -4,7 +4,9 @@ import com.fr.json.JSONObject; /** * Created by kerry on 2020-05-08 + * @deprecated moved to Cloud Ops plugin */ +@Deprecated public interface TemplateOperate { /** * 获取模板操作类型 diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateProcessInfo.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateProcessInfo.java index ea484e5324..81f1b6a107 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateProcessInfo.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateProcessInfo.java @@ -8,11 +8,11 @@ import com.fr.json.JSONArray; /** * Created by plough on 2017/3/17. + * + * @deprecated moved to cloud ops plugin */ -// todo: 重构 -// 1. 命名不好,表意不清晰。 -// 2. 逻辑混乱,到底是一个 Info 类,还是一个 InfoCollector 类? -// 3. 耦合太强,用组合替代继承 + +@Deprecated public abstract class TemplateProcessInfo { protected T template; @@ -35,31 +35,28 @@ public abstract class TemplateProcessInfo { // 获取模板控件数 public abstract int getWidgetCount(); - + //是否是测试模板 public abstract boolean isTestTemplate(); - + //是否使用参数面板 public abstract boolean useParaPane(); - + //获取组件信息 public abstract JSONArray getComponentsInfo(); - + //获取重用组件数 public abstract JSONArray getReuseCmpList(); - - + + public abstract void updateTemplateOperationInfo(TemplateOperate templateOption); - - + + protected boolean isTestCell(Object value, Style style) { if (value instanceof ChartCollection && isTestChartCollection((ChartCollection) value)) { return true; } - if (value == null && Style.getInstance().equals(style)) { - return true; - } - return false; + return value == null && Style.getInstance().equals(style); } protected boolean isTestChartCollection(ChartCollection chartCollection) { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TimeConsumeTimer.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TimeConsumeTimer.java index 527341411b..edef80f6c9 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TimeConsumeTimer.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TimeConsumeTimer.java @@ -2,7 +2,9 @@ package com.fr.design.mainframe.template.info; /** * Created by plough on 2019/4/19. + * @deprecated moved to Cloud Ops plugin */ +@Deprecated public class TimeConsumeTimer { private static final int ONE_THOUSAND = 1000; private enum State { diff --git a/designer-base/src/test/java/com/fr/design/mainframe/template/info/SendHelperTest.java b/designer-base/src/test/java/com/fr/design/mainframe/template/info/SendHelperTest.java index 8da46557c6..d2dd2f6695 100644 --- a/designer-base/src/test/java/com/fr/design/mainframe/template/info/SendHelperTest.java +++ b/designer-base/src/test/java/com/fr/design/mainframe/template/info/SendHelperTest.java @@ -1,38 +1,7 @@ package com.fr.design.mainframe.template.info; -import com.fr.invoke.Reflect; -import com.fr.json.JSONObject; -import com.fr.stable.xml.XMLableReader; -import com.fr.third.javax.xml.stream.XMLStreamException; - -import java.io.StringReader; -import java.util.Map; - -import static org.junit.Assert.assertTrue; - /** * Created by plough on 2019/4/25. */ public class SendHelperTest { - private static final String CONSUMING_URL = "http://cloud.fanruan.com/api/monitor/record_of_reports_consuming/single"; - private static final String PROCESS_URL = "http://cloud.fanruan.com/api/monitor/record_of_reports_process/single"; - - private static final String NORMAL_INFO = "\n" + - "\n" + - "\n" + - ""; - - // 只在调试的时候运行,不需要每次都自动运行 - public static void main(String[] args) throws XMLStreamException { - StringReader sr = new StringReader(NORMAL_INFO); - XMLableReader xmlReader = XMLableReader.createXMLableReader(sr); - TemplateInfo templateInfo = TemplateInfo.newInstanceByRead(xmlReader); - Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); - Map processMap = Reflect.on(templateInfo).field("processMap").get(); - boolean res = Reflect.on(SendHelper.class).call("sendSinglePointInfo", CONSUMING_URL, new JSONObject(consumingMap).toString()).get(); - assertTrue(res); - - boolean res2 = Reflect.on(SendHelper.class).call("sendSinglePointInfo", PROCESS_URL, new JSONObject(processMap).toString()).get(); - assertTrue(res2); - } } diff --git a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java deleted file mode 100644 index 9395ef5b3d..0000000000 --- a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java +++ /dev/null @@ -1,252 +0,0 @@ -package com.fr.design.mainframe.template.info; - -import com.fr.config.MarketConfig; -import com.fr.design.DesignerEnvManager; -import com.fr.invoke.Reflect; -import com.fr.json.JSON; -import com.fr.json.JSONArray; -import com.fr.json.JSONFactory; -import com.fr.stable.ProductConstants; -import com.fr.stable.StringUtils; -import com.fr.third.org.apache.commons.io.FileUtils; -import org.easymock.EasyMock; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.powermock.api.easymock.PowerMock; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor; -import org.powermock.modules.junit4.PowerMockRunner; - -import java.io.File; -import java.io.IOException; -import java.util.Map; - -import static com.fr.design.mainframe.template.info.TemplateInfoTestHelper.assertJsonStringEquals; -import static com.fr.design.mainframe.template.info.TemplateInfoTestHelper.setUpMockForNewInstance; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -/** - * Created by plough on 2019/4/18. - */ -@RunWith(PowerMockRunner.class) -@PrepareForTest({ProductConstants.class, MarketConfig.class, DesignerEnvManager.class}) -@SuppressStaticInitializationFor({"com.fr.jvm.assist.FineAssist"}) -public class TemplateInfoCollectorTest { - private String filePath; - private String initialFileContent; - private TemplateProcessInfo mockProcessInfo; - - @Before - public void setUp() throws IOException { - PowerMock.mockStatic(ProductConstants.class); - - filePath = getClass().getResource("tpl.info").getPath(); - String dirPath = filePath.substring(0, filePath.indexOf("tpl.info")); - EasyMock.expect(ProductConstants.getEnvHome()).andReturn(dirPath).anyTimes(); - EasyMock.replay(); - PowerMock.replayAll(); - - mockProcessInfo = EasyMock.mock(TemplateProcessInfo.class); - EasyMock.expect(mockProcessInfo.getBlockCount()).andReturn(3).anyTimes(); - EasyMock.expect(mockProcessInfo.getCellCount()).andReturn(13).anyTimes(); - EasyMock.expect(mockProcessInfo.getFloatCount()).andReturn(1).anyTimes(); - EasyMock.expect(mockProcessInfo.getReportType()).andReturn(0).anyTimes(); - EasyMock.expect(mockProcessInfo.getWidgetCount()).andReturn(0).anyTimes(); - EasyMock.expect(mockProcessInfo.useParaPane()).andReturn(false).anyTimes(); - EasyMock.expect(mockProcessInfo.getComponentsInfo()).andReturn(new JSONArray()).anyTimes(); - EasyMock.expect(mockProcessInfo.isTestTemplate()).andReturn(true).anyTimes(); - EasyMock.expect(mockProcessInfo.getReuseCmpList()).andReturn(JSONArray.create().add("reuse-id-1")).anyTimes(); - EasyMock.replay(mockProcessInfo); - - // 缓存 tpl.info - initialFileContent = FileUtils.readFileToString(new File(filePath), "utf-8"); - - Reflect.on(TemplateInfoCollector.class).set("instance", null); - // 后执行 testReadXML 用例时,之前保留的单例会造成影响 - Reflect.on(DesignerOpenHistory.class).set("singleton", null); - } - - @After - public void tearDown() throws IOException { - // 恢复 tpl.info - FileUtils.writeStringToFile(new File(filePath), initialFileContent, "utf-8"); - } - - @Test - public void testReadXML() { - assertEquals(",,", DesignerOpenHistory.getInstance().toString()); - - TemplateInfoCollector collector = TemplateInfoCollector.getInstance(); - - assertEquals("2020-05-07,2020-05-06,2020-04-30", DesignerOpenHistory.getInstance().toString()); - } - - @Test - public void testCollectInfo() throws Exception { - setUpMockForNewInstance(); - TemplateInfoCollector collector = TemplateInfoCollector.getInstance(); - - String templateID = "e5d7dbb2-d1df-43d4-b974-67acb5ecbffa"; - int timeConsume = 200; - - collector.collectInfo(templateID, StringUtils.EMPTY, mockProcessInfo, timeConsume); - - // 检查是否写入成功 - Reflect.on(collector).call("loadFromFile"); - TemplateInfo templateInfo = getTemplateInfoByID(templateID); - - Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); - Map processMap = Reflect.on(templateInfo).field("processMap").get(); - - assertJsonStringEquals("{\"process\":\"\",\"float_count\":1,\"widget_count\":0," + - "\"cell_count\":13,\"paraApply\":0,\"block_count\":3,\"report_type\":0,\"components_info\":\"[]\"," + - "\"templateID\":\"e5d7dbb2-d1df-43d4-b974-67acb5ecbffa\",\"reuseCmptList\":\"[\\\"reuse-id-1\\\"]\"" + - "}", - JSONFactory.createJSON(JSON.OBJECT, processMap).toString()); - - Assert.assertEquals(71113, consumingMap.get("uid")); - Assert.assertEquals("2020-05-07 17:25", consumingMap.get("create_time")); - Assert.assertEquals("e5d7dbb2-d1df-43d4-b974-67acb5ecbffa", consumingMap.get("templateID")); - Assert.assertEquals("6b6699ff-ec63-43b0-9deb-b580a5f10411", consumingMap.get("uuid")); - } - - @Test - public void testCollectInfoForNewTemplate() throws Exception { - setUpMockForNewInstance(); - - TemplateInfoCollector collector = TemplateInfoCollector.getInstance(); - - String templateID = "e5d7dbb2-d1df-43d4-b974-67acb5ecbffa"; - int timeConsume = 200; - - collector.collectInfo(templateID, StringUtils.EMPTY, mockProcessInfo, timeConsume); - - // 检查是否写入成功 - Reflect.on(collector).call("loadFromFile"); - assertTrue(collector.contains(templateID)); - - TemplateInfo templateInfo = getTemplateInfoByID(templateID); - Map processMap = Reflect.on(templateInfo).field("processMap").get(); - - assertEquals(templateID, templateInfo.getTemplateID()); - - assertJsonStringEquals("{\"process\":\"\",\"float_count\":1,\"widget_count\":0," + - "\"cell_count\":13,\"paraApply\":0,\"block_count\":3,\"report_type\":0,\"components_info\":\"[]\"," + - "\"templateID\":\"e5d7dbb2-d1df-43d4-b974-67acb5ecbffa\",\"reuseCmptList\":\"[\\\"reuse-id-1\\\"]\"" + - "}", JSONFactory.createJSON(JSON.OBJECT, processMap).toString()); - - Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); - Assert.assertEquals(71113, consumingMap.get("uid")); - Assert.assertEquals("2020-05-07 17:25", consumingMap.get("create_time")); - Assert.assertEquals("e5d7dbb2-d1df-43d4-b974-67acb5ecbffa", consumingMap.get("templateID")); - Assert.assertEquals("6b6699ff-ec63-43b0-9deb-b580a5f10411", consumingMap.get("uuid")); - } - - @Test - public void testCollectInfoWhenSaveAs() throws Exception { - setUpMockForNewInstance(); - - TemplateInfoCollector collector = TemplateInfoCollector.getInstance(); - - String templateID = "e5d7dbb2-d1df-43d4-b974-67acb5ecbffa"; - String originID = "16a988ce-8529-42f5-b17c-2ee849355071"; - int timeConsume = 200; - - collector.collectInfo(templateID, originID, mockProcessInfo, timeConsume); - - // 检查是否写入成功 - Reflect.on(collector).call("loadFromFile"); - TemplateInfo templateInfo = getTemplateInfoByID(templateID); - Map processMap = Reflect.on(templateInfo).field("processMap").get(); - - assertJsonStringEquals("{\"process\":\"\",\"float_count\":1,\"widget_count\":0," + - "\"cell_count\":13,\"paraApply\":0,\"block_count\":3,\"report_type\":0,\"components_info\":\"[]\"," + - "\"templateID\":\"e5d7dbb2-d1df-43d4-b974-67acb5ecbffa\",\"reuseCmptList\":\"[\\\"reuse-id-1\\\"]\"" + - "}", JSONFactory.createJSON(JSON.OBJECT, processMap).toString()); - - Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); - Assert.assertEquals(71113, consumingMap.get("uid")); - Assert.assertEquals("2020-05-07 17:25", consumingMap.get("create_time")); - Assert.assertEquals("e5d7dbb2-d1df-43d4-b974-67acb5ecbffa", consumingMap.get("templateID")); - Assert.assertEquals("6b6699ff-ec63-43b0-9deb-b580a5f10411", consumingMap.get("uuid")); - Assert.assertEquals("16a988ce-8529-42f5-b17c-2ee849355071", consumingMap.get("originID")); - } - - @Test - public void testCollectInfoWhenSaveAsWithNoTrackOriginID() throws Exception { - setUpMockForNewInstance(); - - TemplateInfoCollector collector = TemplateInfoCollector.getInstance(); - - String templateID = "e5d7dbb2-d1df-43d4-b974-67acb5ecbffa"; - String originID = "3kha8jcs-31xw-42f5-h2ww-2ee84935312z"; - int timeConsume = 200; - - collector.collectInfo(templateID, originID, mockProcessInfo, timeConsume); - - TemplateInfo templateInfo = getTemplateInfoByID(templateID); - assertEquals(templateID, templateInfo.getTemplateID()); - - Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); - Assert.assertEquals(71113, consumingMap.get("uid")); - Assert.assertEquals("2020-05-07 17:25", consumingMap.get("create_time")); - Assert.assertEquals("e5d7dbb2-d1df-43d4-b974-67acb5ecbffa", consumingMap.get("templateID")); - Assert.assertEquals("6b6699ff-ec63-43b0-9deb-b580a5f10411", consumingMap.get("uuid")); - Assert.assertEquals("3kha8jcs-31xw-42f5-h2ww-2ee84935312z", consumingMap.get("originID")); - } - - @Test - public void testAddIdleDateCount() { - String templateID = "e5d7dbb2-d1df-43d4-b974-67acb5ecbffa"; - TemplateInfoCollector collecter = TemplateInfoCollector.getInstance(); - TemplateInfo templateInfo = getTemplateInfoByID(templateID); - - assertEquals(0, templateInfo.getIdleDayCount()); - - Reflect.on(collecter).call("addIdleDayCount"); - assertEquals(1, templateInfo.getIdleDayCount()); - - // 同一天内多次调用无效 - Reflect.on(collecter).call("addIdleDayCount"); - assertEquals(1, templateInfo.getIdleDayCount()); - } - - @Test - public void testContains() { - TemplateInfoCollector collector = TemplateInfoCollector.getInstance(); - String templateID1 = "e5d7dbb2-d1df-43d4-b974-67acb5ecbffa"; - Assert.assertTrue(collector.contains(templateID1)); - String templateID2 = "e5d7dbb2-d1df-43d4-b974-67acb5ecbffb"; - Assert.assertFalse(collector.contains(templateID2)); - } - - @Test - public void testGetTemplateCreateTime() throws Exception { - setUpMockForNewInstance(); - TemplateInfoCollector collector = TemplateInfoCollector.getInstance(); - String templateID = "e5d7dbb2-d1df-43d4-b974-67acb5ecbffa"; - String createTime = Reflect.on(collector).call("getTemplateCreateTime", templateID).get(); - Assert.assertEquals("2020-05-07 17:25", createTime); - - templateID = "2521d03c-b238-41a5-9a1d-2498efff3a97"; - createTime = Reflect.on(collector).call("getTemplateCreateTime", templateID).get(); - Assert.assertEquals("2020-05-07 17:45", createTime); - } - - - private TemplateInfo getTemplateInfoByID(String templateID) { - TemplateInfoCollector collector = TemplateInfoCollector.getInstance(); - Map latestTemplateInfo = Reflect.on(collector).field("latestTemplateInfo").get(); - Map pointInfoMap = Reflect.on(collector).field("pointInfoMap").get(); - if (latestTemplateInfo.containsKey(templateID)) { - long latestSaveTime = latestTemplateInfo.get(templateID); - return pointInfoMap.get(templateID + "_" + latestSaveTime); - } else { - return TemplateInfo.newInstance(templateID); - } - } -} diff --git a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoTest.java b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoTest.java deleted file mode 100644 index 1808736f30..0000000000 --- a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoTest.java +++ /dev/null @@ -1,143 +0,0 @@ -package com.fr.design.mainframe.template.info; - -import com.fr.config.MarketConfig; -import com.fr.design.DesignerEnvManager; -import com.fr.invoke.Reflect; -import com.fr.json.JSON; -import com.fr.json.JSONFactory; -import com.fr.json.JSONObject; -import com.fr.stable.StringUtils; -import com.fr.stable.xml.XMLableReader; -import com.fr.third.javax.xml.stream.XMLStreamException; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -import java.io.StringReader; -import java.util.Map; - -import static com.fr.design.mainframe.template.info.TemplateInfoTestHelper.assertJsonStringEquals; -import static com.fr.design.mainframe.template.info.TemplateInfoTestHelper.setUpMockForNewInstance; -import static org.junit.Assert.assertEquals; - -/** - * Created by plough on 2019/4/19. - */ -@RunWith(PowerMockRunner.class) -@PrepareForTest({MarketConfig.class, DesignerEnvManager.class}) -public class TemplateInfoTest { - - private static final String NORMAL_INFO = "\n" + - "\n" + - "\n" + - ""; - - private static final String SAVE_AS_INFO = "\n" + - "\n" + - "\n" + - ""; - - private TemplateInfo templateInfo; - private TemplateInfo templateInfoSaveAs; // 另存为的模版记录 - - @Before - public void setUp() throws XMLStreamException { - templateInfo = createTemplateInfo(NORMAL_INFO); - templateInfoSaveAs = createTemplateInfo(SAVE_AS_INFO); - } - - @Test - public void testNewInstance() throws Exception { - setUpMockForNewInstance(); - - String templateID = "24avc8n2-1iq8-iuj2-wx24-8yy0i8132302"; - TemplateInfo templateInfo = TemplateInfo.newInstance(templateID); - assertEquals(templateID, templateInfo.getTemplateID()); - assertEquals(StringUtils.EMPTY, Reflect.on(templateInfo).field("originID").get()); - assertEquals(0, (int) Reflect.on(templateInfo).field("idleDayCount").get()); - assertEquals(false, templateInfo.isTestTemplate()); - - Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); - assertEquals(templateID, consumingMap.get("templateID")); - assertEquals(StringUtils.EMPTY, consumingMap.get("originID")); - assertEquals("6b6699ff-ec63-43b0-9deb-b580a5f10411", consumingMap.get("uuid")); - assertEquals(71113, consumingMap.get("uid")); - assertEquals(StringUtils.EMPTY, consumingMap.get("saveRecord")); - } - - @Test - public void testNewInstanceWithMoreArgs() throws Exception { - setUpMockForNewInstance(); - - String templateID = "24121212-u2c8-ncd2-82nx-8ud0i8138888"; - String originID = "24avc8n2-1iq8-iuj2-wx24-8yy0i8132302"; - String saveRecord = "{\"time\";:1588843629000,\"consume\":81}"; - String createTime = "2020-05-07 17:25"; - TemplateInfo templateInfo = TemplateInfo.newInstance(templateID, originID, saveRecord, createTime); - assertEquals(templateID, templateInfo.getTemplateID()); - assertEquals(originID, Reflect.on(templateInfo).field("originID").get()); - assertEquals(0, (int) Reflect.on(templateInfo).field("idleDayCount").get()); - assertEquals(false, templateInfo.isTestTemplate()); - - Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); - assertEquals(templateID, consumingMap.get("templateID")); - assertEquals(originID, consumingMap.get("originID")); - assertEquals("6b6699ff-ec63-43b0-9deb-b580a5f10411", consumingMap.get("uuid")); - assertEquals(71113, consumingMap.get("uid")); - assertEquals(saveRecord, consumingMap.get("saveRecord")); - assertEquals(createTime, consumingMap.get("create_time")); - } - - @Test - public void testGetTemplateID() { - assertEquals("aac1139e-018b-4481-867a-a18fc6d6f3e6", templateInfo.getTemplateID()); - assertEquals("2521d03c-b238-41a5-9a1d-2498efff3a97", templateInfoSaveAs.getTemplateID()); - } - - @Test - public void testGetSendInfo() { - - Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); - Map processMap = Reflect.on(templateInfo).field("processMap").get(); - Map consumingMap1 = Reflect.on(templateInfoSaveAs).field("consumingMap").get(); - Map processMap1 = Reflect.on(templateInfoSaveAs).field("processMap").get(); - assertJsonStringEquals("{\"uid\":71113,\"originID\":\"\",\"create_time\":\"2020-05-07 17:28\"," + - "\"saveRecord\":\"{\\\"time\\\":1588843693000,\\\"consume\\\":4}\"," + - "\"templateID\":\"aac1139e-018b-4481-867a-a18fc6d6f3e6\"," + - "\"uuid\":\"6b6699ff-ec63-43b0-9deb-b580a5f10411\"}", JSONFactory.createJSON(JSON.OBJECT, consumingMap).toString()); - - assertJsonStringEquals("{\"uid\":71113,\"originID\":\"aac1139e-018b-4481-867a-a18fc6d6f3e6\"," + - "\"create_time\":\"2020-05-07 17:45\",\"saveRecord\":\"{\\\"time\\\":1588844751000,\\\"consume\\\":1058}\"," + - "\"templateID\":\"2521d03c-b238-41a5-9a1d-2498efff3a97\"," + - "\"uuid\":\"6b6699ff-ec63-43b0-9deb-b580a5f10411\"}", JSONFactory.createJSON(JSON.OBJECT, consumingMap1).toString()); - assertJsonStringEquals("{\"process\":\"\",\"float_count\":0,\"widget_count\":0,\"cell_count\":3," + - "\"paraApply\":0,\"block_count\":0,\"report_type\":0,\"components_info\":\"[]\"," + - "\"templateID\":\"aac1139e-018b-4481-867a-a18fc6d6f3e6\"}", JSONFactory.createJSON(JSON.OBJECT, processMap).toString()); - assertJsonStringEquals("{\"process\":\"\",\"float_count\":0,\"widget_count\":0,\"cell_count\":3," + - "\"paraApply\":0,\"block_count\":0,\"report_type\":0,\"components_info\":\"[]\"," + - "\"templateID\":\"2521d03c-b238-41a5-9a1d-2498efff3a97\"}", JSONFactory.createJSON(JSON.OBJECT, processMap1).toString()); - } - - private TemplateInfo createTemplateInfo(String xmlContent) throws XMLStreamException { - StringReader sr = new StringReader(xmlContent); - XMLableReader xmlReader = XMLableReader.createXMLableReader(sr); - return TemplateInfo.newInstanceByRead(xmlReader); - } - - @Test - public void testGetSaveTime() { - Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); - String saveRecord = (String) consumingMap.get("saveRecord"); - JSONObject object = JSONFactory.createJSON(JSON.OBJECT, saveRecord); - Assert.assertEquals(1588843693000L, object.optLong("time")); - } - - @Test - public void testGetTemplateCreateTime() { - Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); - Assert.assertEquals("2020-05-07 17:28", (String) consumingMap.get("create_time")); - } -} diff --git a/designer-form/src/main/java/com/fr/design/form/util/FormDesignerUtils.java b/designer-form/src/main/java/com/fr/design/form/util/FormDesignerUtils.java index 3e248f3bae..ded4e7c994 100644 --- a/designer-form/src/main/java/com/fr/design/form/util/FormDesignerUtils.java +++ b/designer-form/src/main/java/com/fr/design/form/util/FormDesignerUtils.java @@ -11,6 +11,7 @@ import com.fr.design.mainframe.template.info.ComponentCreateOperate; import com.fr.design.mainframe.template.info.ComponentDeleteOperate; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WFitLayout; + import java.awt.Container; @@ -40,11 +41,19 @@ public class FormDesignerUtils { } + /** + * 添加控件 + * 被云端运维插件修改用于收集埋点 + */ public static void addWidgetProcessInfo(Widget widget) { JTemplate jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); jTemplate.getProcessInfo().updateTemplateOperationInfo(new ComponentCreateOperate(widget)); } + /** + * 删除控件 + * 被云端运维插件修改用于收集埋点 + */ public static void removeWidgetProcessInfo(Widget widget) { JTemplate jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); jTemplate.getProcessInfo().updateTemplateOperationInfo(new ComponentDeleteOperate(widget)); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/JForm.java b/designer-form/src/main/java/com/fr/design/mainframe/JForm.java index a78c532704..2a130dad49 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/JForm.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/JForm.java @@ -182,6 +182,7 @@ public class JForm extends JTemplate implements BaseJForm getProcessInfo() { //这边需要判空,图表的埋点信息收集时可能没有初始化processInfo if (processInfo == null) { diff --git a/designer-form/src/main/java/com/fr/design/mainframe/template/info/JFormProcessInfo.java b/designer-form/src/main/java/com/fr/design/mainframe/template/info/JFormProcessInfo.java index c8d52dae70..6d37ba136f 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/template/info/JFormProcessInfo.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/template/info/JFormProcessInfo.java @@ -1,7 +1,6 @@ package com.fr.design.mainframe.template.info; import com.fr.base.iofile.attr.ExtendSharableAttrMark; - import com.fr.chart.chartattr.ChartCollection; import com.fr.form.FormElementCaseProvider; import com.fr.form.main.Form; @@ -21,6 +20,7 @@ import com.fr.general.ComparatorUtils; import com.fr.json.JSONArray; import com.fr.json.JSONObject; import com.fr.report.cell.DefaultTemplateCellElement; + import java.util.Iterator; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -30,7 +30,10 @@ import java.util.regex.Pattern; /** * Created by plough on 2017/3/17. + * + * @deprecated moved to cloud ops plugin */ +@Deprecated public class JFormProcessInfo extends TemplateProcessInfo

{ private static final String REGEX = "^" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Title") + "\\d+$"; diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java b/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java index cb11ad0fb2..615ee2a96b 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java @@ -1,26 +1,16 @@ -/** - * - */ package com.fr.design.mainframe; import com.fr.base.FRContext; +import com.fr.common.annotations.Compatible; import com.fr.concurrent.NamedThreadFactory; -import com.fr.config.MarketConfig; import com.fr.design.DesignerEnvManager; import com.fr.design.mainframe.chart.info.ChartInfoCollector; import com.fr.design.mainframe.errorinfo.ErrorInfoUploader; import com.fr.design.mainframe.messagecollect.impl.FocusPointMessageUploader; import com.fr.design.mainframe.messagecollect.solid.SolidCollector; -import com.fr.design.mainframe.template.info.TemplateInfoCollector; -import com.fr.general.CloudCenter; -import com.fr.general.ComparatorUtils; import com.fr.general.DateUtils; import com.fr.general.DesUtils; -import com.fr.general.GeneralUtils; import com.fr.general.IOUtils; -import com.fr.general.http.HttpToolbox; -import com.fr.json.JSONArray; -import com.fr.json.JSONObject; import com.fr.log.FineLoggerFactory; import com.fr.stable.EncodeConstants; import com.fr.stable.ProductConstants; @@ -32,7 +22,6 @@ import com.fr.stable.xml.XMLTools; import com.fr.stable.xml.XMLWriter; import com.fr.stable.xml.XMLableReader; import com.fr.third.javax.xml.stream.XMLStreamException; -import com.sun.management.OperatingSystemMXBean; import java.io.BufferedWriter; import java.io.ByteArrayInputStream; @@ -46,12 +35,10 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; -import java.lang.management.ManagementFactory; import java.nio.charset.StandardCharsets; import java.text.DateFormat; import java.util.ArrayList; import java.util.Date; -import java.util.HashMap; import java.util.List; import java.util.Objects; import java.util.concurrent.Executors; @@ -60,8 +47,9 @@ import java.util.concurrent.TimeUnit; /** * @author neil - * @date: 2015-4-8-下午5:11:46 + * @date 2015-4-8-下午5:11:46 */ +@Compatible public class InformationCollector implements XMLReadable, XMLWriter { /** @@ -69,35 +57,26 @@ public class InformationCollector implements XMLReadable, XMLWriter { */ private static final long DELTA = 24 * 3600 * 1000L; private static final long SEND_DELAY = 300 * 1000L; - private static final int BYTE_TO_MB = 1024 * 1024; private static final String FILE_NAME = "fr.info"; private static final String XML_START_STOP_LIST = "StartStopList"; private static final String XML_START_STOP = "StartStop"; private static final String XML_LAST_TIME = "LastTime"; private static final String ATTR_START = "start"; private static final String ATTR_STOP = "stop"; - private static final String XML_JAR = "JarInfo"; - private static final String XML_VERSION = "Version"; - private static final String XML_USERNAME = "Username"; - private static final String XML_UUID = "UUID"; - private static final String XML_KEY = "ActiveKey"; - private static final String XML_OS = "OS"; - private static final String XML_ARCH = "arch"; - private static final String XML_AVAILABLE_PROCESSORS = "cpu"; - private static final String XML_PHYSICAL_MEMORY = "systemMemory"; private static InformationCollector collector; /** * 启动时间与关闭时间列表 */ - private List startStop = new ArrayList(); + private final List startStop = new ArrayList(); /** * 上一次的发送时间 */ private String lastTime; - private StartStopTime current = new StartStopTime(); + + private final StartStopTime current = new StartStopTime(); public static InformationCollector getInstance() { if (collector == null) { @@ -125,11 +104,7 @@ public class InformationCollector implements XMLReadable, XMLWriter { xmlReader.readXMLObject(xmlReadable); } xmlInputStream.close(); - } catch (FileNotFoundException e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } catch (IOException e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } catch (XMLStreamException e) { + } catch (IOException | XMLStreamException e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } @@ -143,77 +118,24 @@ public class InformationCollector implements XMLReadable, XMLWriter { private long getLastTimeMillis() { if (StringUtils.isEmpty(this.lastTime)) { - return 0; + return 0L; } - try { return Objects.requireNonNull(DateUtils.string2Date(this.lastTime, true)).getTime(); } catch (Exception e) { - return -1; + return -1L; } - } - private JSONObject getJSONContentAsByte() { - JSONObject content = new JSONObject(); - JSONArray startStopArray = new JSONArray(); - for (StartStopTime startStopTime : startStop) { - JSONObject jo = new JSONObject(); - jo.put(ATTR_START, startStopTime.getStartDate()); - jo.put(ATTR_STOP, startStopTime.getStopDate()); - startStopArray.put(jo); - } - DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); - content.put(XML_START_STOP, startStopArray); - content.put(XML_UUID, envManager.getUUID()); - content.put(XML_JAR, GeneralUtils.readBuildNO()); - content.put(XML_VERSION, ProductConstants.RELEASE_VERSION); - content.put(XML_USERNAME, MarketConfig.getInstance().getBbsUsername()); - content.put(XML_KEY, envManager.getActivationKey()); - content.put(XML_OS, System.getProperty("os.name")); - content.put(XML_ARCH, System.getProperty("os.arch")); - content.put(XML_AVAILABLE_PROCESSORS, Runtime.getRuntime().availableProcessors()); - content.put(XML_PHYSICAL_MEMORY, getTotalPhysicalMemorySize()); - return content; - } - - /** - * 获取物理内存,单位GB - * - * @return 物理内存 - */ - private static long getTotalPhysicalMemorySize() { - OperatingSystemMXBean bean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); - return bean.getTotalPhysicalMemorySize() / BYTE_TO_MB; - } - - - private void sendUserInfo() { + private void sendInfoSuccessCallback() { long currentTime = System.currentTimeMillis(); long lastTime = getLastTimeMillis(); if (currentTime - lastTime <= DELTA) { return; } - JSONObject content = getJSONContentAsByte(); - String url = CloudCenter.getInstance().acquireUrlByKind("user.info.v10"); - if (StringUtils.isBlank(url)) { - return; - } - boolean success = false; - try { - HashMap para = new HashMap<>(); - para.put("token", SiteCenterToken.generateToken()); - para.put("content", content); - String res = HttpToolbox.post(url, para); - success = ComparatorUtils.equals(new JSONObject(res).get("status"), "success"); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - if (success) { - this.reset(); - } + this.reset(); } /** @@ -221,27 +143,22 @@ public class InformationCollector implements XMLReadable, XMLWriter { */ public void collectStartTime() { this.current.setStartDate(dateToString()); - - sendUserInfoInOtherThread(); + sendInfo(); } - private void sendUserInfoInOtherThread() { + private void sendInfo() { if (!DesignerEnvManager.getEnvManager().isJoinProductImprove() || !FRContext.isChineseEnv()) { return; } ScheduledExecutorService service = Executors .newSingleThreadScheduledExecutor(new NamedThreadFactory("InformationCollector")); - service.schedule(new Runnable() { - @Override - public void run() { - SolidCollector.getInstance().sendToCloudCenterAndDeleteFile(); - sendUserInfo(); - FocusPointMessageUploader.getInstance().sendToCloudCenter(); - TemplateInfoCollector.getInstance().sendPointInfo(); - ChartInfoCollector.getInstance().sendPointInfo(); - ErrorInfoUploader.getInstance().sendErrorInfo(); - } + service.schedule(() -> { + SolidCollector.getInstance().sendToCloudCenterAndDeleteFile(); + FocusPointMessageUploader.getInstance().sendToCloudCenter(); + ChartInfoCollector.getInstance().sendPointInfo(); + ErrorInfoUploader.getInstance().sendErrorInfo(); + sendInfoSuccessCallback(); }, SEND_DELAY, TimeUnit.MILLISECONDS); service.shutdown(); } @@ -306,7 +223,7 @@ public class InformationCollector implements XMLReadable, XMLWriter { //启停信息 writeStartStopList(writer); //上一次更新的时间 - writeTag(XML_LAST_TIME, this.lastTime, writer); + writeLastTime(this.lastTime, writer); writer.end(); } @@ -320,12 +237,11 @@ public class InformationCollector implements XMLReadable, XMLWriter { writer.end(); } - private void writeTag(String tag, String content, XMLPrintWriter writer) { + private void writeLastTime(String content, XMLPrintWriter writer) { if (StringUtils.isEmpty(content)) { return; } - - writer.startTAG(tag); + writer.startTAG(InformationCollector.XML_LAST_TIME); writer.textNode(content); writer.end(); } @@ -364,7 +280,7 @@ public class InformationCollector implements XMLReadable, XMLWriter { }); } - private class StartStopTime implements XMLReadable, XMLWriter { + private static class StartStopTime implements XMLReadable, XMLWriter { private String startDate; private String stopDate; diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/template/info/JPolyWorkBookProcessInfo.java b/designer-realize/src/main/java/com/fr/design/mainframe/template/info/JPolyWorkBookProcessInfo.java index ec5d05c7f0..6b79bf78fd 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/template/info/JPolyWorkBookProcessInfo.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/template/info/JPolyWorkBookProcessInfo.java @@ -11,7 +11,10 @@ import java.util.Iterator; /** * Created by kerry on 2020-05-06 + * + * @deprecated moved to plugin ops plugin */ +@Deprecated public class JPolyWorkBookProcessInfo extends JWorkBookProcessInfo { public JPolyWorkBookProcessInfo(WorkBook template) { super(template); diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/template/info/JWorkBookProcessInfo.java b/designer-realize/src/main/java/com/fr/design/mainframe/template/info/JWorkBookProcessInfo.java index c23a03f1c3..5d127954f3 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/template/info/JWorkBookProcessInfo.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/template/info/JWorkBookProcessInfo.java @@ -17,7 +17,10 @@ import java.util.Iterator; /** * Created by plough on 2017/3/17. + * + * @deprecated moved to cloud ops plugin */ +@Deprecated public class JWorkBookProcessInfo extends TemplateProcessInfo { public JWorkBookProcessInfo(WorkBook wb) { From 25293200a50269c0cad89b3adedd5af0a9a12aaa Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Thu, 27 May 2021 16:04:30 +0800 Subject: [PATCH 033/148] =?UTF-8?q?REPORT-52819=20=E5=8A=A0=E5=AF=86?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=8A=A0=E8=BD=BD=E7=9B=B8=E5=85=B3=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E8=A1=A5=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...orManager.java => SharableCollectorManager.java} | 6 +++--- .../mainframe/share/util/SharableXMLUtils.java | 13 +++++++++++++ .../com/fr/design/share/SharableInitManager.java | 11 +++++++++++ .../java/com/fr/start/module/DesignerActivator.java | 3 ++- 4 files changed, 29 insertions(+), 4 deletions(-) rename designer-base/src/main/java/com/fr/design/mainframe/share/collect/{CollectorManager.java => SharableCollectorManager.java} (92%) create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/util/SharableXMLUtils.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/SharableInitManager.java diff --git a/designer-base/src/main/java/com/fr/design/mainframe/share/collect/CollectorManager.java b/designer-base/src/main/java/com/fr/design/mainframe/share/collect/SharableCollectorManager.java similarity index 92% rename from designer-base/src/main/java/com/fr/design/mainframe/share/collect/CollectorManager.java rename to designer-base/src/main/java/com/fr/design/mainframe/share/collect/SharableCollectorManager.java index 3ccb624297..1248a74c75 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/share/collect/CollectorManager.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/share/collect/SharableCollectorManager.java @@ -14,7 +14,7 @@ import java.util.concurrent.TimeUnit; /** * created by Harrison on 2020/03/25 **/ -public class CollectorManager { +public class SharableCollectorManager { /** * 1 天 @@ -32,10 +32,10 @@ public class CollectorManager { private ScheduledExecutorService service; private static class ConfigManagerHolder { - private static CollectorManager instance = new CollectorManager(); + private static SharableCollectorManager instance = new SharableCollectorManager(); } - public static CollectorManager getInstance() { + public static SharableCollectorManager getInstance() { return ConfigManagerHolder.instance; } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/SharableXMLUtils.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/SharableXMLUtils.java new file mode 100644 index 0000000000..baacf42722 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/SharableXMLUtils.java @@ -0,0 +1,13 @@ +package com.fr.design.mainframe.share.util; + +import com.fr.form.share.encrypt.engine.SharableReadHelper; +import com.fr.stable.xml.XMLConf; +import com.fr.stable.xml.helper.XMLReadHelper; + +public class SharableXMLUtils { + public static synchronized void registerSharableReadHelper() { + XMLReadHelper readHelper = XMLConf.getReadHelper(); + XMLReadHelper helper = new SharableReadHelper(readHelper); + XMLConf.registerXMLHelper(helper); + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/SharableInitManager.java b/designer-realize/src/main/java/com/fr/design/share/SharableInitManager.java new file mode 100644 index 0000000000..42870535b3 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/SharableInitManager.java @@ -0,0 +1,11 @@ +package com.fr.design.share; + +import com.fr.design.mainframe.share.collect.SharableCollectorManager; +import com.fr.design.mainframe.share.util.SharableXMLUtils; + +public class SharableInitManager { + public static void start() { + SharableXMLUtils.registerSharableReadHelper(); + SharableCollectorManager.getInstance().execute(); + } +} diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java index 5c7a20efca..43c0e720fe 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java @@ -60,12 +60,12 @@ import com.fr.design.os.impl.SupportOSImpl; import com.fr.design.parameter.FormParameterReader; import com.fr.design.parameter.ParameterPropertyPane; import com.fr.design.parameter.WorkBookParameterReader; +import com.fr.design.share.SharableInitManager; import com.fr.design.share.ui.config.ShareConfigPane; import com.fr.design.share.ui.generate.ShareGeneratePane; import com.fr.design.update.actions.RecoverForDesigner; import com.fr.design.update.push.DesignerPushUpdateManager; import com.fr.design.widget.ui.btn.FormSubmitButtonDetailPane; -import com.fr.form.stable.ElementCaseThumbnailProcessor; import com.fr.general.GeneralContext; import com.fr.general.xml.GeneralXMLTools; import com.fr.js.EmailJavaScript; @@ -205,6 +205,7 @@ public class DesignerActivator extends Activator { designerRegister(); InformationCollector.getInstance().collectStartTime(); + SharableInitManager.start(); } private void createPluginListener() { From bb828b6e089b8a45854b2f4c388bc16ba794dc4e Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Thu, 27 May 2021 16:21:11 +0800 Subject: [PATCH 034/148] =?UTF-8?q?REPORT-52816=20=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E6=A1=86=E5=AF=B9=E9=BD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/share/ui/generate/ShareMainPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java index e9b5a25e22..504d95be95 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java @@ -498,7 +498,7 @@ public class ShareMainPane extends JPanel { ArrayUtils.toPrimitive(rowSizeList.toArray(new Double[rowSizeList.size()])), columnSize, rowCountList.toArray(new int[rowCountList.size()][]), - LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); + LayoutConstants.HGAP_SMALL, LayoutConstants.VGAP_MEDIUM); } private JPanel createNameFiledPane() { From e6bcb5a99a6549f38c4de8785ed87b818f465731 Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Thu, 27 May 2021 16:30:28 +0800 Subject: [PATCH 035/148] =?UTF-8?q?REPORT-52818=20=E5=9B=BE=E8=A1=A8?= =?UTF-8?q?=E5=9D=97=E7=82=B9=E5=87=BB=E5=BF=AB=E6=8D=B7=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E8=A7=A6=E5=8F=91=E4=BA=86=E7=BC=96=E8=BE=91=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/designer/creator/XChartEditor.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XChartEditor.java b/designer-form/src/main/java/com/fr/design/designer/creator/XChartEditor.java index 24bea01776..682dcc4d47 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XChartEditor.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XChartEditor.java @@ -255,6 +255,10 @@ public class XChartEditor extends XBorderStyleWidgetCreator { * @param e 鼠标点击事件 */ public void respondClick(EditingMouseListener editingMouseListener, MouseEvent e) { + if (this.isShareConfigButtonFocus()) { + CoverReportPane.showShareConfig(((XCreator) this.getParent()).toData()); + return; + } FormDesigner designer = editingMouseListener.getDesigner(); SelectionModel selectionModel = editingMouseListener.getSelectionModel(); isEditing = e.getButton() == MouseEvent.BUTTON1 && @@ -272,11 +276,6 @@ public class XChartEditor extends XBorderStyleWidgetCreator { } } } - if (this.isShareConfigButtonFocus()) { - CoverReportPane.showShareConfig(((XCreator) this.getParent()).toData()); - } - - } @Override From 84fc8a1cd314eb6fbedc2f98ce5ad681ffb1d770 Mon Sep 17 00:00:00 2001 From: yaohwu Date: Thu, 27 May 2021 16:42:34 +0800 Subject: [PATCH 036/148] =?UTF-8?q?REPORT-51361=20=E5=AE=9E=E9=99=85?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E5=8F=A6=E5=AD=98=E6=97=B6=E6=89=8D=E4=BA=A7?= =?UTF-8?q?=E7=94=9F=E6=96=B0=E7=9A=84=E6=A8=A1=E6=9D=BFid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/mainframe/JTemplate.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java index 2f5245051e..3c62f3b583 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java @@ -1493,7 +1493,8 @@ public abstract class JTemplate> } //收集和生成templateID 因为是另存为操作 无论怎么样都需要重新生成templateID - initForCollect(); + // TODO Hades https://work.fineres.com/browse/REPORT-52936 + // initForCollect(); FILE finalEditingFILE = editingFILE; CallbackSaveWorker worker = new CallbackSaveWorker(new Callable() { From 8169f88c6c7f5ce25844f60220471ef8c0ff6499 Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Thu, 27 May 2021 19:21:18 +0800 Subject: [PATCH 037/148] =?UTF-8?q?REPORT-52895=20=E9=83=A8=E5=88=86?= =?UTF-8?q?=E5=9F=8B=E7=82=B9=E6=B2=A1=E6=9C=89=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/EastRegionContainerPane.java | 2 ++ .../design/mainframe/share/collect/ComponentCollector.java | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java index 1bffe08428..3047ca99ca 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java @@ -15,6 +15,7 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.VerticalFlowLayout; import com.fr.design.mainframe.reuse.ReuseGuideDialog; import com.fr.design.mainframe.reuse.SnapChatKeys; +import com.fr.design.mainframe.share.collect.ComponentCollector; import com.fr.design.menu.SnapChatUtil; import com.fr.design.notification.SnapChat; import com.fr.design.notification.SnapChatFactory; @@ -313,6 +314,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { new ActionListener() { @Override public void actionPerformed(ActionEvent e) { + ComponentCollector.getInstance().collectCmpBoardClick(); ComponentReuseNotifyUtil.enterWidgetLibExtraAction(true); } }); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java index 1fa2b993e7..3ea805deb0 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java @@ -12,6 +12,7 @@ import com.fr.form.share.Group; import com.fr.form.share.group.filter.DirFilter; import com.fr.form.share.group.filter.ReuFilter; import com.fr.general.ComparatorUtils; +import com.fr.general.GeneralUtils; import com.fr.json.JSON; import com.fr.json.JSONArray; import com.fr.json.JSONException; @@ -371,7 +372,7 @@ public class ComponentCollector implements XMLable { sortType = JSONFactory.createJSON(JSON.ARRAY); } - private int cmpBoardClickDaily() { + private int cmpBoardClickDaily() { DateTime dateTime = DateTime.parse(startTime); DateTime currTime = DateTime.now(); @@ -524,7 +525,7 @@ public class ComponentCollector implements XMLable { jo.put("userId", MarketConfig.getInstance().getBBSAttr().getBbsUid()); jo.put("uuid", uuid); jo.put("cmpBoardClickDaily", cmpBoardClickDaily()); - jo.put("pluginVersion", PluginContexts.currentContext().getVersion()); + jo.put("pluginVersion", GeneralUtils.readBuildNO()); jo.put("localCmpNumber", localCmpNumber); jo.put("remoteCmpNumber", remoteCmpNumber); jo.put("uploadCmpNumber", uploadCmpNumber); From b5f3394fa77a00d76deaad9505c648f7675418ca Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Thu, 27 May 2021 19:56:10 +0800 Subject: [PATCH 038/148] =?UTF-8?q?REPORT-52928=20=E9=83=A8=E5=88=86?= =?UTF-8?q?=E5=9F=8B=E7=82=B9=E6=B2=A1=E6=9C=89=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../collect/SharableCollectorManager.java | 2 +- .../java/com/fr/design/mainframe/JForm.java | 25 +++++++++++++++++++ .../share/util/ShareComponentUtils.java | 18 ++++++++++++- 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/share/collect/SharableCollectorManager.java b/designer-base/src/main/java/com/fr/design/mainframe/share/collect/SharableCollectorManager.java index 1248a74c75..2ea9820016 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/share/collect/SharableCollectorManager.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/share/collect/SharableCollectorManager.java @@ -43,7 +43,7 @@ public class SharableCollectorManager { public void execute() { service = Executors - .newSingleThreadScheduledExecutor(new NamedThreadFactory("plugin-CollectorManager", true)); + .newSingleThreadScheduledExecutor(new NamedThreadFactory("SharableComponentCollectorManager", true)); service.scheduleAtFixedRate(new Runnable() { @Override public void run() { diff --git a/designer-form/src/main/java/com/fr/design/mainframe/JForm.java b/designer-form/src/main/java/com/fr/design/mainframe/JForm.java index 2a130dad49..c67280caa1 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/JForm.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/JForm.java @@ -45,6 +45,8 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.form.FormECCompositeProvider; import com.fr.design.mainframe.form.FormECDesignerProvider; +import com.fr.design.mainframe.share.collect.ComponentCollector; +import com.fr.design.mainframe.share.util.ShareComponentUtils; import com.fr.design.mainframe.template.info.JFormProcessInfo; import com.fr.design.mainframe.template.info.TemplateProcessInfo; import com.fr.design.mainframe.toolbar.ToolBarMenuDock; @@ -74,6 +76,7 @@ import com.fr.form.ui.Widget; import com.fr.form.ui.container.WBorderLayout; import com.fr.form.ui.container.WLayout; import com.fr.general.ComparatorUtils; +import com.fr.json.JSONArray; import com.fr.log.FineLoggerFactory; import com.fr.page.PaperSettingProvider; import com.fr.plugin.observer.PluginEventListener; @@ -337,6 +340,28 @@ public class JForm extends JTemplate implements BaseJForm jt) { + if (jt == null) { + return; + } + int useCount = 0; + if (!jt.getProcessInfo().isTestTemplate()) { + JForm jForm = (JForm) jt; + XLayoutContainer root = jForm.getFormDesign().getRootComponent(); + List xCreators = ShareComponentUtils.getHelpConfigXCreatorList(root); + JSONArray helpConfigUseInfo = ComponentCollector.getInstance().getHelpConfigUseInfoWithTemplate(jt.getTarget().getTemplateID()); + for (XCreator xCreator : xCreators) { + if (helpConfigUseInfo.contains(ShareComponentUtils.getWidgetId(xCreator.toData()))) { + useCount++; + } + } + ComponentCollector.getInstance().collectHelpConfigInfo(jt.getTarget().getTemplateID(), xCreators.size(), useCount); + } + + } + }); return tabCenterPane; } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareComponentUtils.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareComponentUtils.java index abd2c54507..485c44149b 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareComponentUtils.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareComponentUtils.java @@ -20,8 +20,11 @@ import com.fr.stable.StringUtils; import com.fr.workspace.WorkContext; import org.jetbrains.annotations.NotNull; +import java.awt.Component; import java.awt.Dimension; import java.awt.Rectangle; +import java.util.ArrayList; +import java.util.List; /** * Coder: zack @@ -89,5 +92,18 @@ public class ShareComponentUtils { } - + public static List getHelpConfigXCreatorList(XCreator root) { + List helpConfigXCreatorList = new ArrayList<>(); + if (isShareWidget(root)) { + helpConfigXCreatorList.add(root); + return helpConfigXCreatorList; + } + Component[] components = root.getComponents(); + for (Component component : components) { + if (component instanceof XCreator) { + helpConfigXCreatorList.addAll(getHelpConfigXCreatorList((XCreator) component)); + } + } + return helpConfigXCreatorList; + } } From 61c6ac4fb10d7a26375c5a75cc9bdb31fb4cb107 Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Thu, 27 May 2021 20:27:27 +0800 Subject: [PATCH 039/148] =?UTF-8?q?REPORT-51678=20=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E9=A1=B9=E6=94=AF=E6=8C=81=E9=87=8D=E5=91=BD?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/share/effect/EffectItemGroup.java | 3 +-- .../fr/design/share/effect/ListenerEffectItem.java | 11 +++++++++-- .../share/ui/config/table/ConfigTableModel.java | 3 +-- .../share/ui/generate/table/EffectTableModel.java | 3 +-- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/share/effect/EffectItemGroup.java b/designer-realize/src/main/java/com/fr/design/share/effect/EffectItemGroup.java index 923c200d16..a07478c9d9 100644 --- a/designer-realize/src/main/java/com/fr/design/share/effect/EffectItemGroup.java +++ b/designer-realize/src/main/java/com/fr/design/share/effect/EffectItemGroup.java @@ -68,8 +68,7 @@ public class EffectItemGroup { for (int index = 0; index < listenerSize; index ++) { Listener listener = widget.getListener(index); SourceNode sourceNode = SourceNodeUtils.createSourceNode(widget, null); - String eventName = switchLang(listener.getEventName()) + (index + 1); - this.add(new ListenerEffectItem(listener, sourceNode, eventName)); + this.add(new ListenerEffectItem(listener, sourceNode)); } } diff --git a/designer-realize/src/main/java/com/fr/design/share/effect/ListenerEffectItem.java b/designer-realize/src/main/java/com/fr/design/share/effect/ListenerEffectItem.java index 38d635424e..55b53ad72b 100644 --- a/designer-realize/src/main/java/com/fr/design/share/effect/ListenerEffectItem.java +++ b/designer-realize/src/main/java/com/fr/design/share/effect/ListenerEffectItem.java @@ -9,10 +9,9 @@ import com.fr.form.ui.Widget; public class ListenerEffectItem extends BaseEffectItem { private Listener listener; - public ListenerEffectItem(Listener listener, SourceNode sourceNode, String name) { + public ListenerEffectItem(Listener listener, SourceNode sourceNode) { this.listener = listener; this.setSourceNode(sourceNode); - this.setName(name); init(); } @@ -24,6 +23,8 @@ public class ListenerEffectItem extends BaseEffectItem { object = new Listener(listener.getTargetWidget(), listener.getEventName(), listener.getAction(), listener.isInvokeOnce()); } setObject(object); + + setName(listener.getName()); this.setNameableCreator(new EventCreator(Widget.EVENT_STATECHANGE, EventPropertyTable.WidgetEventListenerUpdatePane.class)); } @@ -32,7 +33,13 @@ public class ListenerEffectItem extends BaseEffectItem { setObject((Listener) bean); } + public void setName(String name) { + super.setName(name); + getObject().setName(name); + } + public void save() { + listener.setName(getObject().getName()); listener.setEventName(getObject().getEventName()); listener.setAction(getObject().getAction()); listener.setInvokeOnce(getObject().isInvokeOnce()); diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/config/table/ConfigTableModel.java b/designer-realize/src/main/java/com/fr/design/share/ui/config/table/ConfigTableModel.java index 29fe8e125b..b9b3f15d24 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/config/table/ConfigTableModel.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/config/table/ConfigTableModel.java @@ -39,8 +39,7 @@ public class ConfigTableModel extends AbstractTableModel { @Override public boolean isCellEditable(int rowIndex, int columnIndex) { - EffectItem effectItem = effectItems.get(rowIndex); - return columnIndex == 1 && !(effectItem instanceof ListenerEffectItem); + return columnIndex == 1; } @Override diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/table/EffectTableModel.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/table/EffectTableModel.java index 042159c691..f9d4ecb2b1 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/generate/table/EffectTableModel.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/table/EffectTableModel.java @@ -44,8 +44,7 @@ public class EffectTableModel extends AbstractTableModel { @Override public boolean isCellEditable(int rowIndex, int columnIndex) { - EffectItem effectItem = effectItems.get(rowIndex); - return columnIndex == 1 && !(effectItem instanceof ListenerEffectItem); + return columnIndex == 1; } @Override From fd6832105343d5142ec7cfa9bf6b25c07691869d Mon Sep 17 00:00:00 2001 From: vito Date: Thu, 27 May 2021 22:42:12 +0800 Subject: [PATCH 040/148] =?UTF-8?q?REPORT-52942=20=E5=A4=84=E7=90=86?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E6=8F=90=E5=88=B0=E5=85=AC=E5=85=B1=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E7=A8=8D=E5=90=8E=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/app/AbstractWorkBookApp.java | 65 +-------------- .../mainframe/app/DesignerAppUtils.java | 83 +++++++++++++++++++ .../com/fr/design/mainframe/app/FormApp.java | 1 + 3 files changed, 85 insertions(+), 64 deletions(-) create mode 100644 designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/app/AbstractWorkBookApp.java b/designer-realize/src/main/java/com/fr/design/mainframe/app/AbstractWorkBookApp.java index 4f22528c7e..60ce295a35 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/app/AbstractWorkBookApp.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/app/AbstractWorkBookApp.java @@ -1,31 +1,16 @@ package com.fr.design.mainframe.app; import com.fr.base.Parameter; -import com.fr.design.dialog.DialogActionAdapter; -import com.fr.design.dialog.UIExpandDialog; -import com.fr.design.extra.exe.callback.InstallOnlineCallback; -import com.fr.design.extra.exe.callback.ModifyStatusCallback; -import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.App; -import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.JWorkBook; import com.fr.design.worker.open.OpenResult; import com.fr.design.worker.open.OpenWorker; import com.fr.file.FILE; -import com.fr.io.TemplateIOErrorUtils; import com.fr.log.FineLoggerFactory; import com.fr.main.impl.WorkBook; -import com.fr.plugin.context.PluginMarker; -import com.fr.plugin.context.PluginMarkerAdapter; -import com.fr.plugin.manage.PluginManager; -import com.fr.plugin.manage.control.PluginControllerHelper; -import com.fr.plugin.manage.control.PluginTask; import com.fr.report.worksheet.WorkSheet; -import com.fr.third.guava.collect.Multimap; -import com.fr.workspace.WorkContext; -import java.util.Collection; import java.util.concurrent.Callable; /** @@ -48,7 +33,7 @@ abstract class AbstractWorkBookApp implements App { @Override public OpenResult call() { WorkBook workBook = asIOFile(tplFile); - dealWithTemplateIOError(tplFile.getPath()); + DesignerAppUtils.dealWithTemplateIOError(tplFile.getPath()); return new OpenResult<>(workBook, workBook.getParameters()); } }, emptyTemplate); @@ -68,54 +53,6 @@ abstract class AbstractWorkBookApp implements App { return emptyTemplate; } - private void dealWithTemplateIOError(String path) { - // 试图获取多行读取错误提示并缓存待处理列表 - String detail = TemplateIOErrorUtils.dealWithErrorDetailMultiLineAndCache(path); - if (detail.length() > 0) { - if (WorkContext.getCurrent().isLocal()) { - UIExpandDialog.Builder() - .owner(DesignerContext.getDesignerFrame()) - .title(Toolkit.i18nText("Fine-Design_Basic_Tool_Tips")) - .message(Toolkit.i18nText("Fine-Design_Template_Plugin_Error_Message_Local")) - .detail(detail) - .okText(Toolkit.i18nText("Fine-Design_Template_Plugin_Error_OK_Btn")) - .cancelText(Toolkit.i18nText("Fine-Design_Template_Plugin_Error_Cancel_Btn")) - .dialogActionListener(new DialogActionAdapter() { - public void doOk() { - installAndEnablePlugin(path); - } - - @Override - public void doCancel() { - TemplateIOErrorUtils.invalidatePlugins(path); - } - }).build().setVisible(true); - } else { - UIExpandDialog.Builder().owner(DesignerContext.getDesignerFrame()) - .title(Toolkit.i18nText("Fine-Design_Basic_Tool_Tips")) - .message(Toolkit.i18nText("Fine-Design_Template_Plugin_Error_Message_Remote")) - .detail(detail) - .build() - .setVisible(true); - } - - } - } - - public void installAndEnablePlugin(String key) { - Multimap stringPluginMarkerAdapterMultimap = TemplateIOErrorUtils.popPluginInfoMap(key); - Collection disablePlugins = stringPluginMarkerAdapterMultimap.get(TemplateIOErrorUtils.DISABLE_PLUGIN); - for (PluginMarkerAdapter disablePlugin : disablePlugins) { - PluginManager.getController().enable(disablePlugin, new ModifyStatusCallback(false)); - } - - Collection uninstallPlugins = stringPluginMarkerAdapterMultimap.get(TemplateIOErrorUtils.NOT_INSTALLED_PLUGIN); - for (PluginMarker uninstallPlugin : uninstallPlugins) { - PluginTask pluginTask = PluginTask.installTask(uninstallPlugin); - PluginControllerHelper.installOnline(uninstallPlugin, new InstallOnlineCallback(pluginTask)); - } - } - @Override public String mark4Provider() { diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java b/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java new file mode 100644 index 0000000000..4ac1a273a4 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java @@ -0,0 +1,83 @@ +package com.fr.design.mainframe.app; + +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.dialog.UIExpandDialog; +import com.fr.design.extra.exe.callback.InstallOnlineCallback; +import com.fr.design.extra.exe.callback.ModifyStatusCallback; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.ui.util.UIUtil; +import com.fr.io.TemplateIOErrorUtils; +import com.fr.plugin.context.PluginMarker; +import com.fr.plugin.context.PluginMarkerAdapter; +import com.fr.plugin.manage.PluginManager; +import com.fr.plugin.manage.control.PluginControllerHelper; +import com.fr.plugin.manage.control.PluginTask; +import com.fr.third.guava.collect.Multimap; +import com.fr.workspace.WorkContext; + +import java.util.Collection; + +/** + * 设计器app共用工具类 + * + * @author vito + * @version 10.0 + * Created by vito on 2021/5/27 + */ +public class DesignerAppUtils { + + /** + * 处理模板读取时的异常 + * + * @param path 模板路径 + */ + public static void dealWithTemplateIOError(String path) { + // 试图获取多行读取错误提示并缓存待处理列表 + String detail = TemplateIOErrorUtils.dealWithErrorDetailMultiLineAndCache(path); + if (detail.length() > 0) { + UIUtil.invokeLaterIfNeeded(() -> { + if (WorkContext.getCurrent().isLocal()) { + UIExpandDialog.Builder() + .owner(DesignerContext.getDesignerFrame()) + .title(Toolkit.i18nText("Fine-Design_Basic_Tool_Tips")) + .message(Toolkit.i18nText("Fine-Design_Template_Plugin_Error_Message_Local")) + .detail(detail) + .okText(Toolkit.i18nText("Fine-Design_Template_Plugin_Error_OK_Btn")) + .cancelText(Toolkit.i18nText("Fine-Design_Template_Plugin_Error_Cancel_Btn")) + .dialogActionListener(new DialogActionAdapter() { + public void doOk() { + installAndEnablePlugin(path); + } + + @Override + public void doCancel() { + TemplateIOErrorUtils.invalidatePlugins(path); + } + }).build().setVisible(true); + } else { + UIExpandDialog.Builder().owner(DesignerContext.getDesignerFrame()) + .title(Toolkit.i18nText("Fine-Design_Basic_Tool_Tips")) + .message(Toolkit.i18nText("Fine-Design_Template_Plugin_Error_Message_Remote")) + .detail(detail) + .build() + .setVisible(true); + } + }); + } + } + + private static void installAndEnablePlugin(String key) { + Multimap stringPluginMarkerAdapterMultimap = TemplateIOErrorUtils.popPluginInfoMap(key); + Collection disablePlugins = stringPluginMarkerAdapterMultimap.get(TemplateIOErrorUtils.DISABLE_PLUGIN); + for (PluginMarkerAdapter disablePlugin : disablePlugins) { + PluginManager.getController().enable(disablePlugin, new ModifyStatusCallback(false)); + } + + Collection uninstallPlugins = stringPluginMarkerAdapterMultimap.get(TemplateIOErrorUtils.NOT_INSTALLED_PLUGIN); + for (PluginMarker uninstallPlugin : uninstallPlugins) { + PluginTask pluginTask = PluginTask.installTask(uninstallPlugin); + PluginControllerHelper.installOnline(uninstallPlugin, new InstallOnlineCallback(pluginTask)); + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/app/FormApp.java b/designer-realize/src/main/java/com/fr/design/mainframe/app/FormApp.java index 5d828713fa..511c98e62d 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/app/FormApp.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/app/FormApp.java @@ -63,6 +63,7 @@ class FormApp extends AbstractAppProvider { @Override public OpenResult call() throws Exception { Form form = asIOFile(tplFile); + DesignerAppUtils.dealWithTemplateIOError(tplFile.getPath()); return new OpenResult<>(form, form.getParameters()); } }, emptyForm); From cd09065f92ff8beaef7bee2b95d71482f640000c Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Fri, 28 May 2021 14:02:38 +0800 Subject: [PATCH 041/148] =?UTF-8?q?REPORT-51678=20=E7=A7=BB=E6=A4=8D?= =?UTF-8?q?=E5=8A=A0=E5=AF=86=E7=BB=84=E4=BB=B6=E5=89=AA=E5=88=87=E5=A4=8D?= =?UTF-8?q?=E5=88=B6=E7=B2=98=E8=B4=B4=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/clipboard/ClipboardFilter.java | 22 +++- .../base/clipboard/ClipboardHandler.java | 35 ++++++ .../designer/beans/models/SelectionModel.java | 1 + .../AbstractCrossClipBoardState.java | 62 ++++++++++ .../clipboard/CrossClipboardHandler.java | 79 ++++++++++++ .../clipboard/CrossClipboardState.java | 22 ++++ .../clipboard/RestrictTemplateSet.java | 72 +++++++++++ .../TemplateStateListenerProvider.java | 116 ++++++++++++++++++ .../impl/CrossLayoutClipBoardState.java | 86 +++++++++++++ .../impl/CrossTemplateClipBoardState.java | 32 +++++ .../impl/CrossWidgetClipBoardState.java | 68 ++++++++++ .../EncryptSelectionClipboardHandler.java | 31 +++++ .../EncryptTransferableClipboardHandler.java | 32 +++++ .../fr/design/share/SharableInitManager.java | 5 + 14 files changed, 660 insertions(+), 3 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/base/clipboard/ClipboardHandler.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/AbstractCrossClipBoardState.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/CrossClipboardHandler.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/CrossClipboardState.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/RestrictTemplateSet.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/TemplateStateListenerProvider.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/CrossLayoutClipBoardState.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/CrossTemplateClipBoardState.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/CrossWidgetClipBoardState.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/EncryptSelectionClipboardHandler.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/EncryptTransferableClipboardHandler.java diff --git a/designer-base/src/main/java/com/fr/design/base/clipboard/ClipboardFilter.java b/designer-base/src/main/java/com/fr/design/base/clipboard/ClipboardFilter.java index e9b6b3e0f3..140a46579d 100644 --- a/designer-base/src/main/java/com/fr/design/base/clipboard/ClipboardFilter.java +++ b/designer-base/src/main/java/com/fr/design/base/clipboard/ClipboardFilter.java @@ -4,6 +4,7 @@ import com.fr.design.ExtraDesignClassManager; import com.fr.design.fun.ClipboardHandlerProvider; import com.fr.plugin.injectable.PluginModule; +import java.util.HashSet; import java.util.Set; /** @@ -11,11 +12,25 @@ import java.util.Set; **/ @SuppressWarnings({"rawtypes", "unchecked"}) public abstract class ClipboardFilter { + public static Set clipboardHandlerProviders = new HashSet(); + + public static void registerClipboardHandler(ClipboardHandlerProvider provider) { + if (!clipboardHandlerProviders.contains(provider)) { + clipboardHandlerProviders.add(provider); + } + } + + public static void removeClipboardHandler(ClipboardHandlerProvider provider) { + if (clipboardHandlerProviders.contains(provider)) { + clipboardHandlerProviders.remove(provider); + } + } public static T cut(T selection) { - + ExtraDesignClassManager manager = PluginModule.getAgent(PluginModule.ExtraDesign); Set providers = manager.getArray(ClipboardHandlerProvider.XML_TAG); + providers.addAll(clipboardHandlerProviders); for (ClipboardHandlerProvider provider : providers) { if (provider.support(selection)) { selection = ((ClipboardHandlerProvider) provider).cut(selection); @@ -25,9 +40,9 @@ public abstract class ClipboardFilter { } public static T copy(T selection) { - ExtraDesignClassManager manager = PluginModule.getAgent(PluginModule.ExtraDesign); Set providers = manager.getArray(ClipboardHandlerProvider.XML_TAG); + providers.addAll(clipboardHandlerProviders); for (ClipboardHandlerProvider provider : providers) { if (provider.support(selection)) { selection = ((ClipboardHandlerProvider) provider).copy(selection); @@ -37,9 +52,10 @@ public abstract class ClipboardFilter { } public static T paste(T selection) { - ExtraDesignClassManager manager = PluginModule.getAgent(PluginModule.ExtraDesign); Set providers = manager.getArray(ClipboardHandlerProvider.XML_TAG); + providers.addAll(clipboardHandlerProviders); + for (ClipboardHandlerProvider provider : providers) { if (provider.support(selection)) { selection = ((ClipboardHandlerProvider) provider).paste(selection); diff --git a/designer-base/src/main/java/com/fr/design/base/clipboard/ClipboardHandler.java b/designer-base/src/main/java/com/fr/design/base/clipboard/ClipboardHandler.java new file mode 100644 index 0000000000..25ab24a32a --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/base/clipboard/ClipboardHandler.java @@ -0,0 +1,35 @@ +package com.fr.design.base.clipboard; + +public interface ClipboardHandler { + /** + * 剪切 + * + * @param selection 选中 + * @return 处理后的内容 + */ + T cut(T selection); + + /** + * 复制 + * + * @param selection 选中 + * @return 处理后的内容 + */ + T copy(T selection); + + /** + * 粘贴 + * + * @param selection 选中 + * @return 处理后的内容 + */ + T paste(T selection); + + /** + * 支持的类型 + * + * @param selection 内容 + * @return 是否 + */ + boolean support(Object selection); +} diff --git a/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java b/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java index dc74087c40..d105aaf487 100644 --- a/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java @@ -25,6 +25,7 @@ import com.fr.design.fun.FormWidgetOptionProvider; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormSelection; import com.fr.design.mainframe.FormSelectionUtils; +import com.fr.design.mainframe.share.encrypt.clipboard.impl.EncryptSelectionClipboardHandler; import com.fr.design.utils.ComponentUtils; import com.fr.design.utils.gui.LayoutUtils; import com.fr.general.ComparatorUtils; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/AbstractCrossClipBoardState.java b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/AbstractCrossClipBoardState.java new file mode 100644 index 0000000000..f99349134c --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/AbstractCrossClipBoardState.java @@ -0,0 +1,62 @@ +package com.fr.design.mainframe.share.encrypt.clipboard; + +import com.fr.stable.StringUtils; + +import java.util.concurrent.atomic.AtomicReference; + +/** + * 跨模版禁用 + *

+ * created by Harrison on 2020/05/14 + **/ +public abstract class AbstractCrossClipBoardState implements CrossClipboardState { + private final AtomicReference sourceId = new AtomicReference<>(); + + @Override + public synchronized boolean isBan() { + + String sourceId = this.sourceId.get(); + if (StringUtils.isEmpty(sourceId)) { + return false; + } + //这里只获取新的,不能更新 + //因为新的模板可能不是限制模板,然而剪贴板中的内容没有清空。 + //所以,直接在新的模板中再一次粘贴,就可以避过限制 + String targetId = get(); + return isCross(sourceId, targetId) && isRestrict(sourceId); + } + + protected boolean isRestrict(String sourceId) { + + return true; + } + + @Override + public synchronized void mark() { + + update(); + } + + private String get() { + + return currentId(); + } + + private void update() { + + String templateId = currentId(); + sourceId.set(templateId); + } + + private boolean isCross(String sourceId, String targetId) { + + //源 id 不等于 null + //如果源 id 等于 null , 两种情况 + //1-之前没有 + //2-是从其他地方,复制过来,这样的话,直接通过就好了。 + return StringUtils.isNotEmpty(sourceId) + && !StringUtils.equals(sourceId, targetId); + } + + protected abstract String currentId(); +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/CrossClipboardHandler.java b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/CrossClipboardHandler.java new file mode 100644 index 0000000000..f00ab8302f --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/CrossClipboardHandler.java @@ -0,0 +1,79 @@ +package com.fr.design.mainframe.share.encrypt.clipboard; + +import com.fr.design.fun.impl.AbstractClipboardHandlerProvider; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * created by Harrison on 2020/05/14 + **/ +public abstract class CrossClipboardHandler extends AbstractClipboardHandlerProvider { + + private List states = new ArrayList<>(8); + + public CrossClipboardHandler(CrossClipboardState... states) { + + init(states); + } + + private void init(CrossClipboardState... states) { + + if (states == null) { + return; + } + Collections.addAll(this.states, states); + } + + @Override + public T cut(T selection) { + + mark(); + return cut0(selection); + } + + protected T cut0(T selection) { + + return selection; + } + + @Override + public T copy(T selection) { + + mark(); + return copy0(selection); + } + + protected T copy0(T selection) { + + return selection; + } + + @Override + public T paste(T selection) { + + return isBan() ? null : paste0(selection); + } + + protected T paste0(T selection) { + + return selection; + } + + private void mark() { + + for (CrossClipboardState state : states) { + state.mark(); + } + } + + private boolean isBan() { + + boolean isBan = false; + for (CrossClipboardState state : states) { + isBan |= state.isBan(); + } + return isBan; + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/CrossClipboardState.java b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/CrossClipboardState.java new file mode 100644 index 0000000000..4458ded3a0 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/CrossClipboardState.java @@ -0,0 +1,22 @@ +package com.fr.design.mainframe.share.encrypt.clipboard; + +/** + * created by Harrison on 2020/05/18 + **/ +public interface CrossClipboardState { + + + /** + * 是否禁用 + * + * @return y/n + */ + boolean isBan(); + + /** + * 标记状态 + */ + void mark(); +} + + diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/RestrictTemplateSet.java b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/RestrictTemplateSet.java new file mode 100644 index 0000000000..4b7354bfbd --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/RestrictTemplateSet.java @@ -0,0 +1,72 @@ +package com.fr.design.mainframe.share.encrypt.clipboard; + +import com.fr.form.main.Form; +import com.fr.form.main.WidgetUtil; +import com.fr.form.share.encrypt.core.EncryptSharableAttrMark; +import com.fr.form.ui.AbstractBorderStyleWidget; +import com.fr.form.ui.container.WLayout; +import com.fr.stable.fun.IOFileAttrMark; + +import java.util.HashMap; +import java.util.Map; + +/** + * created by Harrison on 2020/05/14 + **/ +public abstract class RestrictTemplateSet { + + private static Map restrictMap = new HashMap<>(8); + + public static void monitorGracefully(Form form) { + monitor(form, true); + } + + public static void monitorForcefully(Form form) { + monitor(form, false); + } + + private static void monitor(Form form, boolean useCache) { + + String templateID = form.getTemplateID(); + if (useCache) { + if (restrictMap.containsKey(templateID)) { + return; + } + } + //检测 + 缓存 + monitor0(form); + } + + private static void monitor0(Form form) { + + final String templateID = form.getTemplateID(); + WLayout container = form.getContainer(); + WidgetUtil.bfsTraversalWidget(container, new WidgetUtil.BfsWidgetGather() { + @Override + public boolean dealWith(AbstractBorderStyleWidget widget) { + IOFileAttrMark mark = widget.getWidgetAttrMark(EncryptSharableAttrMark.XML_TAG); + boolean existEncrypt = mark != null; + if (existEncrypt) { + restrictMap.put(templateID, existEncrypt); + } + return existEncrypt; + } + }, AbstractBorderStyleWidget.class); + + initIfAbsent(templateID); + } + + private static void initIfAbsent(String templateID) { + + if (!restrictMap.containsKey(templateID)) { + restrictMap.put(templateID, false); + } + } + + public static boolean isRestrict(String templateId) { + + Boolean restrict = restrictMap.get(templateId); + return restrict == null ? false : restrict; + } + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/TemplateStateListenerProvider.java b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/TemplateStateListenerProvider.java new file mode 100644 index 0000000000..d46ba0f55a --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/TemplateStateListenerProvider.java @@ -0,0 +1,116 @@ +package com.fr.design.mainframe.share.encrypt.clipboard; + +import com.fr.base.io.BaseBook; +import com.fr.base.iofile.attr.ExtendSharableAttrMark; +import com.fr.design.DesignModelAdapter; +import com.fr.design.data.datapane.TableDataTreePane; +import com.fr.design.designer.beans.events.DesignerEvent; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XWTitleLayout; +import com.fr.design.file.HistoryTemplateListCache; +import com.fr.design.fun.impl.AbstractDesignerEditListenerProvider; +import com.fr.design.mainframe.JTemplate; +import com.fr.form.main.Form; +import com.fr.form.main.WidgetGatherAdapter; +import com.fr.form.share.SharableWidgetProvider; +import com.fr.form.share.editor.SharableEditorProvider; +import com.fr.form.share.utils.ShareUtils; +import com.fr.form.ui.AbstractBorderStyleWidget; +import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WLayout; +import com.fr.general.ComparatorUtils; +import com.fr.stable.StringUtils; + +import java.util.Iterator; + +/** + * 创建,删除的时候要初始化部分状态 + *

+ * created by Harrison on 2020/05/19 + **/ +public class TemplateStateListenerProvider extends AbstractDesignerEditListenerProvider { + + public static final int CREATOR_ADDED = 1; + + public static final int CREATOR_DELETED = 2; + + private static final String SEPARATOR = "-"; + + private String lastAffectedCreatorShareID; + + + @Override + public void fireCreatorModified(DesignerEvent evt) { + + int eventId = evt.getCreatorEventID(); + if (eventId == CREATOR_ADDED || eventId == CREATOR_DELETED) { + JTemplate template = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + BaseBook book = template.getTarget(); + if (book instanceof Form) { + Form form = (Form) book; + RestrictTemplateSet.monitorForcefully(form); + refreshTableDataTree(form, evt); + } + } + if (eventId == DesignerEvent.CREATOR_SELECTED) { + XCreator lastAffectedCreator = (XCreator) evt.getAffectedCreator(); + if (lastAffectedCreator == null) { + return; + } + lastAffectedCreatorShareID = lastAffectedCreator.getShareId(); + //做下兼容处理,有标题的老的组件其外层的creator上是没有shareID的,新生成的组件是有的 + if (!lastAffectedCreator.acceptType(XWTitleLayout.class) || StringUtils.isNotEmpty(lastAffectedCreatorShareID)) { + return; + } + XCreator body = getBodyCreator((XWTitleLayout) lastAffectedCreator); + if (body != null) { + lastAffectedCreatorShareID = body.getShareId(); + } + + } + } + + private XCreator getBodyCreator(XWTitleLayout titleLayout) { + for (int i = 0; i < titleLayout.getXCreatorCount(); i++) { + XCreator creator = titleLayout.getXCreator(i); + if (creator.hasTitleStyle()) { + return creator; + } + } + return null; + } + + private void refreshTableDataTree(Form form, DesignerEvent evt) { + if (evt.getCreatorEventID() == DesignerEvent.CREATOR_DELETED && StringUtils.isNotEmpty(lastAffectedCreatorShareID)) { + if (!needDeleteTableData(form.getContainer(), lastAffectedCreatorShareID)) { + return; + } + //TODO 目前组件没版本号,可以直接遍历,之后可能还是要改的 + SharableWidgetProvider bindInfo = ShareUtils.getElCaseBindInfoById(lastAffectedCreatorShareID); + SharableEditorProvider sharableEditor = ShareUtils.getSharedElCaseEditorById(lastAffectedCreatorShareID); + if (sharableEditor == null || bindInfo == null) { + return; + } + Iterator tdIterator = sharableEditor.getTableDataSource().getTableDataNameIterator(); + while (tdIterator.hasNext()) { + String tdName = bindInfo.getName() + SEPARATOR + tdIterator.next(); + TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()).removeTableData(tdName); + } + } + } + + private boolean needDeleteTableData(WLayout widget, final String shareId) { + final boolean[] needDeleteTableData = {true}; + Form.traversalWidget(widget, new WidgetGatherAdapter() { + @Override + public void dealWith(Widget widget) { + AbstractBorderStyleWidget borderStyleWidget = (AbstractBorderStyleWidget) widget; + ExtendSharableAttrMark attrMark = borderStyleWidget.getWidgetAttrMark(ExtendSharableAttrMark.XML_TAG); + if (attrMark != null) { + needDeleteTableData[0] &= !ComparatorUtils.equals(shareId, attrMark.getShareId()); + } + } + }, AbstractBorderStyleWidget.class); + return needDeleteTableData[0]; + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/CrossLayoutClipBoardState.java b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/CrossLayoutClipBoardState.java new file mode 100644 index 0000000000..052a4d3ced --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/CrossLayoutClipBoardState.java @@ -0,0 +1,86 @@ +package com.fr.design.mainframe.share.encrypt.clipboard.impl; + +import com.fr.base.io.BaseBook; +import com.fr.base.iofile.attr.ExtendSharableAttrMark; +import com.fr.design.designer.beans.models.SelectionModel; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XCreatorUtils; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.file.HistoryTemplateListCache; +import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.FormSelection; +import com.fr.design.mainframe.WidgetPropertyPane; +import com.fr.form.main.Form; +import com.fr.design.mainframe.share.encrypt.clipboard.AbstractCrossClipBoardState; +import com.fr.form.share.encrypt.core.EncryptSharableAttrMark; +import com.fr.form.ui.AbstractBorderStyleWidget; +import com.fr.form.ui.container.WLayout; +import com.fr.stable.StringUtils; +import com.fr.stable.fun.IOFileAttrMark; +import org.jetbrains.annotations.Nullable; + +import java.util.concurrent.atomic.AtomicReference; + +/** + * 只需要看是否跨布局去粘贴。 + *

+ * created by Harrison on 2020/06/04 + **/ +public class CrossLayoutClipBoardState extends AbstractCrossClipBoardState { + + @Override + protected String currentId() { + //默认id + final AtomicReference finalId = new AtomicReference<>(StringUtils.EMPTY); + WidgetPropertyPane pane = WidgetPropertyPane.getInstance(); + FormDesigner designer = pane.getEditingFormDesigner(); + if (designer == null) { + return null; + } + Form target = designer.getTarget(); + BaseBook current = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().getTarget(); + //如果不是同一个 + if (!StringUtils.equals(target.getTemplateID(), current.getTemplateID())) { + return null; + } + SelectionModel selectionModel = designer.getSelectionModel(); + if (selectionModel == null) { + return null; + } + FormSelection selection = selectionModel.getSelection(); + if (selection == null) { + return null; + } + XCreator[] xCreators = selection.getSelectedCreators(); + if (xCreators != null) { + XCreator xCreator = xCreators[0]; + if (StringUtils.isEmpty(finalId.get())) { + XLayoutContainer layout = XCreatorUtils.getParentXLayoutContainer(xCreator); + if (layout != null) { + WLayout wLayout = layout.toData(); + String encryptWidgetId = findEncryptWidgetId(wLayout); + boolean hasId = StringUtils.isNotEmpty(encryptWidgetId); + if (hasId) { + finalId.set(encryptWidgetId); + } + } + } + + } + return finalId.get(); + } + + @Nullable + private String findEncryptWidgetId(AbstractBorderStyleWidget widget) { + + IOFileAttrMark widgetAttrMark = widget.getWidgetAttrMark(EncryptSharableAttrMark.XML_TAG); + boolean isEncrypt = widgetAttrMark != null; + if (isEncrypt) { + ExtendSharableAttrMark sharableAttrMark = widget.getWidgetAttrMark(ExtendSharableAttrMark.XML_TAG); + if (sharableAttrMark != null) { + return (sharableAttrMark.getShareId()); + } + } + return null; + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/CrossTemplateClipBoardState.java b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/CrossTemplateClipBoardState.java new file mode 100644 index 0000000000..f232deafcc --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/CrossTemplateClipBoardState.java @@ -0,0 +1,32 @@ +package com.fr.design.mainframe.share.encrypt.clipboard.impl; + +import com.fr.base.io.BaseBook; +import com.fr.design.file.HistoryTemplateListCache; +import com.fr.design.mainframe.JTemplate; +import com.fr.design.mainframe.share.encrypt.clipboard.AbstractCrossClipBoardState; +import com.fr.design.mainframe.share.encrypt.clipboard.RestrictTemplateSet; +import com.fr.form.main.Form; + +/** + * created by Harrison on 2020/05/18 + **/ +public class CrossTemplateClipBoardState extends AbstractCrossClipBoardState { + + @Override + protected String currentId() { + + JTemplate template = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + BaseBook book = template.getTarget(); + if (book instanceof Form) { + Form form = (Form) book; + RestrictTemplateSet.monitorGracefully(form); + } + return book.getTemplateID(); + } + + @Override + protected boolean isRestrict(String sourceId) { + + return RestrictTemplateSet.isRestrict(sourceId); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/CrossWidgetClipBoardState.java b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/CrossWidgetClipBoardState.java new file mode 100644 index 0000000000..eb823fe1bf --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/CrossWidgetClipBoardState.java @@ -0,0 +1,68 @@ +package com.fr.design.mainframe.share.encrypt.clipboard.impl; + +import com.fr.base.io.BaseBook; +import com.fr.base.iofile.attr.ExtendSharableAttrMark; +import com.fr.design.designer.beans.models.SelectionModel; +import com.fr.design.file.HistoryTemplateListCache; +import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.FormSelection; +import com.fr.design.mainframe.WidgetPropertyPane; +import com.fr.design.mainframe.share.encrypt.clipboard.AbstractCrossClipBoardState; +import com.fr.form.main.Form; +import com.fr.form.main.WidgetUtil; +import com.fr.form.share.encrypt.core.EncryptSharableAttrMark; +import com.fr.form.ui.AbstractBorderStyleWidget; +import com.fr.form.ui.Widget; +import com.fr.stable.StringUtils; +import com.fr.stable.fun.IOFileAttrMark; + +/** + * created by Harrison on 2020/05/18 + **/ +public class CrossWidgetClipBoardState extends AbstractCrossClipBoardState { + + @Override + protected String currentId() { + + final String[] finalIds = new String[]{null}; + WidgetPropertyPane pane = WidgetPropertyPane.getInstance(); + FormDesigner designer = pane.getEditingFormDesigner(); + if (designer == null) { + return null; + } + Form target = designer.getTarget(); + BaseBook current = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().getTarget(); + //如果不是同一个 + if (!StringUtils.equals(target.getTemplateID(), current.getTemplateID())) { + return null; + } + SelectionModel selectionModel = designer.getSelectionModel(); + if (selectionModel == null) { + return null; + } + FormSelection selection = selectionModel.getSelection(); + if (selection == null) { + return null; + } + Widget[] selectedWidgets = selection.getSelectedWidgets(); + if (selectedWidgets != null && selectedWidgets.length == 1) { + final Widget selectedWidget = selectedWidgets[0]; + WidgetUtil.bfsTraversalWidget(selectedWidget, new WidgetUtil.BfsWidgetGather() { + @Override + public boolean dealWith(AbstractBorderStyleWidget widget) { + + IOFileAttrMark widgetAttrMark = widget.getWidgetAttrMark(EncryptSharableAttrMark.XML_TAG); + boolean isEncrypt = widgetAttrMark != null; + if (isEncrypt) { + ExtendSharableAttrMark sharableAttrMark = widget.getWidgetAttrMark(ExtendSharableAttrMark.XML_TAG); + if (sharableAttrMark != null) { + finalIds[0] = sharableAttrMark.getShareId(); + } + } + return isEncrypt; + } + }, AbstractBorderStyleWidget.class); + } + return finalIds[0]; + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/EncryptSelectionClipboardHandler.java b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/EncryptSelectionClipboardHandler.java new file mode 100644 index 0000000000..81e1f25e7a --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/EncryptSelectionClipboardHandler.java @@ -0,0 +1,31 @@ +package com.fr.design.mainframe.share.encrypt.clipboard.impl; + +import com.fr.design.mainframe.FormSelection; +import com.fr.design.mainframe.share.encrypt.clipboard.CrossClipboardHandler; + +/** + * 组件选择 + *

+ * created by Harrison on 2020/05/18 + **/ +public class EncryptSelectionClipboardHandler extends CrossClipboardHandler { + private static EncryptSelectionClipboardHandler selectionClipboardHandler; + + public static EncryptSelectionClipboardHandler getInstance() { + if (selectionClipboardHandler == null) { + selectionClipboardHandler = new EncryptSelectionClipboardHandler(); + } + return selectionClipboardHandler; + } + + public EncryptSelectionClipboardHandler() { + + super(new CrossTemplateClipBoardState(), new CrossLayoutClipBoardState()); + } + + @Override + public boolean support(Object selection) { + + return selection instanceof FormSelection; + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/EncryptTransferableClipboardHandler.java b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/EncryptTransferableClipboardHandler.java new file mode 100644 index 0000000000..cfce3eb77a --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/EncryptTransferableClipboardHandler.java @@ -0,0 +1,32 @@ +package com.fr.design.mainframe.share.encrypt.clipboard.impl; + +import com.fr.design.mainframe.share.encrypt.clipboard.CrossClipboardHandler; + +import java.awt.datatransfer.Transferable; + +/** + * 单元格 + *

+ * created by Harrison on 2020/05/18 + **/ +public class EncryptTransferableClipboardHandler extends CrossClipboardHandler { + private static EncryptTransferableClipboardHandler transferableClipboardHandler; + + public static EncryptTransferableClipboardHandler getInstance() { + if (transferableClipboardHandler == null) { + transferableClipboardHandler = new EncryptTransferableClipboardHandler(); + } + return transferableClipboardHandler; + } + + public EncryptTransferableClipboardHandler() { + + super(new CrossTemplateClipBoardState(), new CrossWidgetClipBoardState()); + } + + @Override + public boolean support(Object selection) { + + return selection instanceof Transferable; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/SharableInitManager.java b/designer-realize/src/main/java/com/fr/design/share/SharableInitManager.java index 42870535b3..a01068421c 100644 --- a/designer-realize/src/main/java/com/fr/design/share/SharableInitManager.java +++ b/designer-realize/src/main/java/com/fr/design/share/SharableInitManager.java @@ -1,11 +1,16 @@ package com.fr.design.share; +import com.fr.design.base.clipboard.ClipboardFilter; import com.fr.design.mainframe.share.collect.SharableCollectorManager; +import com.fr.design.mainframe.share.encrypt.clipboard.impl.EncryptSelectionClipboardHandler; +import com.fr.design.mainframe.share.encrypt.clipboard.impl.EncryptTransferableClipboardHandler; import com.fr.design.mainframe.share.util.SharableXMLUtils; public class SharableInitManager { public static void start() { SharableXMLUtils.registerSharableReadHelper(); SharableCollectorManager.getInstance().execute(); + ClipboardFilter.registerClipboardHandler(EncryptSelectionClipboardHandler.getInstance()); + ClipboardFilter.registerClipboardHandler(EncryptTransferableClipboardHandler.getInstance()); } } From f62f46b7b4779144d6eaf4b0ee6ba287db4322fa Mon Sep 17 00:00:00 2001 From: hades Date: Fri, 28 May 2021 18:57:19 +0800 Subject: [PATCH 042/148] =?UTF-8?q?REPORT-51683=20=E3=80=9010.0.17?= =?UTF-8?q?=E3=80=91=E6=99=BA=E8=83=BD=E8=81=94=E5=8A=A8=E8=A2=AB=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mod/ContentChange.java | 29 +++++ .../fr/design/mod/ContentObjectManager.java | 62 +++++++++++ .../com/fr/design/mod/ContentReplacer.java | 13 +++ .../fr/design/mod/ContentReplacerCenter.java | 101 ++++++++++++++++++ .../com/fr/design/mod/bean/ChangeItem.java | 14 +++ .../fr/design/mod/bean/ContentChangeItem.java | 33 ++++++ .../com/fr/design/mod/event/ModifyEvent.java | 13 +++ .../mod/event/TableDataModifyEvent.java | 12 +++ .../mod/event/WidgetNameModifyEvent.java | 12 +++ ...ChartHyperRelateCellLinkContentChange.java | 16 +++ ...hartHyperRelateFloatLinkContentChange.java | 16 +++ .../ChartHyperRelateLinkContentChange.java | 30 ++++++ .../mod/impl/change/FormulaContentChange.java | 37 +++++++ .../impl/change/JavaScriptContentChange.java | 36 +++++++ ...rRelateLink4WidgetNameContentReplacer.java | 21 ++++ .../Formula4TableDataNameContentReplacer.java | 18 ++++ .../Formula4WidgetNameContentReplacer.java | 17 +++ .../repalce/JavaScriptContentReplacer.java | 25 +++++ .../designer/beans/models/ModelUtil.java | 9 ++ .../mainframe/FormCreatorDropTarget.java | 9 +- .../fr/start/module/DesignerActivator.java | 2 + 21 files changed, 524 insertions(+), 1 deletion(-) create mode 100644 designer-base/src/main/java/com/fr/design/mod/ContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/ContentReplacer.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/bean/ChangeItem.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/bean/ContentChangeItem.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/event/ModifyEvent.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/event/TableDataModifyEvent.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/event/WidgetNameModifyEvent.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/ChartHyperRelateCellLinkContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/ChartHyperRelateFloatLinkContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/ChartHyperRelateLinkContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/FormulaContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/JavaScriptContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/repalce/ChartHyperRelateLink4WidgetNameContentReplacer.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4TableDataNameContentReplacer.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4WidgetNameContentReplacer.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/repalce/JavaScriptContentReplacer.java diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentChange.java b/designer-base/src/main/java/com/fr/design/mod/ContentChange.java new file mode 100644 index 0000000000..8361d86096 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/ContentChange.java @@ -0,0 +1,29 @@ +package com.fr.design.mod; + +import com.fr.design.mod.bean.ChangeItem; + +import java.util.Map; + +/** + * + * @author hades + * @version 10.0 + * Created by hades on 2021/4/27 + */ +public interface ContentChange { + + /** + * 标识内容替换类型 + * + * @return + */ + String type(); + + /** + * 替换详情信息 + * + * @return + */ + Map> changeInfo(); + +} diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java b/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java new file mode 100644 index 0000000000..a9bdd51156 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java @@ -0,0 +1,62 @@ +package com.fr.design.mod; + +import com.fr.base.Formula; +import com.fr.chart.web.ChartHyperRelateCellLink; +import com.fr.chart.web.ChartHyperRelateFloatLink; +import com.fr.design.file.filter.ClassFilter; +import com.fr.invoke.ClassHelper; +import com.fr.js.JavaScriptImpl; +import com.fr.stable.Filter; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** + * 管理所有需要替换内容的对象 + * + * @author hades + * @version 10.0 + * Created by hades on 2021/4/28 + */ +public class ContentObjectManager { + + private static ContentObjectManager INSTANCE = new ContentObjectManager(); + + public static ContentObjectManager getInstance() { + return INSTANCE; + } + + /** + * 放置所有需要替换内容的对象 + */ + private Map> objectMap; + + private final Set set = new HashSet<>(); + + private ContentObjectManager() { + set.add(Formula.class.getName()); + set.add(JavaScriptImpl.class.getName()); + set.add(ChartHyperRelateCellLink.class.getName()); + set.add(ChartHyperRelateFloatLink.class.getName()); + } + + public void searchObject(Object ob) { + objectMap = ClassHelper.searchObject(ob, set, ClassFilter.getInstance()); + } + + public void searchObject(Object ob, Filter filter) { + objectMap = ClassHelper.searchObject(ob, set, filter); + } + + public void searchObject(Object ob, Set set, Filter filter) { + objectMap = ClassHelper.searchObject(ob, set, filter); + } + public void clearObject() { + objectMap = null; + } + + public Map> getObjectMap() { + return objectMap; + } + +} diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentReplacer.java b/designer-base/src/main/java/com/fr/design/mod/ContentReplacer.java new file mode 100644 index 0000000000..3f71265354 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/ContentReplacer.java @@ -0,0 +1,13 @@ +package com.fr.design.mod; + +/** + * + * @author hades + * @version 10.0 + * Created by hades on 2021/5/27 + */ +public interface ContentReplacer { + + void replace(T t, String oldName, String newName); + +} diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java b/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java new file mode 100644 index 0000000000..5359d87e57 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java @@ -0,0 +1,101 @@ +package com.fr.design.mod; + +import com.fr.design.mod.bean.ChangeItem; +import com.fr.design.mod.bean.ContentChangeItem; +import com.fr.design.mod.event.TableDataModifyEvent; +import com.fr.design.mod.event.WidgetNameModifyEvent; +import com.fr.design.mod.impl.change.ChartHyperRelateCellLinkContentChange; +import com.fr.design.mod.impl.change.ChartHyperRelateFloatLinkContentChange; +import com.fr.design.mod.impl.change.FormulaContentChange; +import com.fr.design.mod.impl.change.JavaScriptContentChange; +import com.fr.event.Event; +import com.fr.event.EventDispatcher; +import com.fr.event.Listener; +import com.fr.log.FineLoggerFactory; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * 默认联动内容替换器实现 + * + * 当前替换顺序:组件名-> 数据集名 + * + * @author hades + * @version 10.0 + * Created by hades on 2021/5/27 + */ +public class ContentReplacerCenter { + + private static final ContentReplacerCenter INSTANCE = new ContentReplacerCenter(); + + public static ContentReplacerCenter getInstance() { + return INSTANCE; + } + + private List contentChangeList = new ArrayList<>(); + private List items = new ArrayList<>(); + + private ContentReplacerCenter() { + + EventDispatcher.listen(WidgetNameModifyEvent.INSTANCE, new Listener() { + @Override + public void on(Event event, ContentChangeItem param) { + items.add(param); + } + }); + + EventDispatcher.listen(TableDataModifyEvent.INSTANCE, new Listener() { + @Override + public void on(Event event, ContentChangeItem param) { + items.add(param); + long start = System.currentTimeMillis(); + ContentObjectManager.getInstance().searchObject(param.getObject()); + FineLoggerFactory.getLogger().debug("search object spend {} ", (System.currentTimeMillis() - start)); + List itemsCopy = new ArrayList<>(items); + items.clear(); + onRename(itemsCopy, contentChangeList); + } + }); + + } + + public void register() { + contentChangeList.add(new ChartHyperRelateCellLinkContentChange()); + contentChangeList.add(new ChartHyperRelateFloatLinkContentChange()); + contentChangeList.add(new FormulaContentChange()); + contentChangeList.add(new JavaScriptContentChange()); + } + + private void onRename(List contentChangeItemList, List contentChangeList) { + Map> objectMap = ContentObjectManager.getInstance().getObjectMap(); + if (objectMap != null) { + long start = System.currentTimeMillis(); + for (ContentChange contentChange : contentChangeList) { + Set set = objectMap.get(contentChange.type()); + // 所有需要处理的js等对象 + if (set != null) { + for (Object ob : set) { + fireChange(ob, contentChange, contentChangeItemList); + } + } + } + objectMap.clear(); + FineLoggerFactory.getLogger().debug("replace all content spend {} ", (System.currentTimeMillis() - start)); + } + } + + private void fireChange(Object o, ContentChange contentChange, List itemList) { + // 当前两项存在两项: 数据集名称和组件名称 + for (ContentChangeItem contentChangeItem : itemList) { + Map map = contentChange.changeInfo(); + if (map.containsKey(contentChangeItem.getChangeItem())) { + // 具体重命名取决于复用组件存在多少个组件或数据集 + for (Map.Entry entry : contentChangeItem.getChangeMap().entrySet()) { + map.get(contentChangeItem.getChangeItem()).replace(o, entry.getKey(), entry.getValue()); + } + } + } + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/bean/ChangeItem.java b/designer-base/src/main/java/com/fr/design/mod/bean/ChangeItem.java new file mode 100644 index 0000000000..179a3819b5 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/bean/ChangeItem.java @@ -0,0 +1,14 @@ +package com.fr.design.mod.bean; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/5/28 + */ +public enum ChangeItem { + + TABLE_DATA_NAME, + + WIDGET_NAME + +} diff --git a/designer-base/src/main/java/com/fr/design/mod/bean/ContentChangeItem.java b/designer-base/src/main/java/com/fr/design/mod/bean/ContentChangeItem.java new file mode 100644 index 0000000000..8904a0c45d --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/bean/ContentChangeItem.java @@ -0,0 +1,33 @@ +package com.fr.design.mod.bean; + +import java.util.Map; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/5/28 + */ +public class ContentChangeItem { + + private final Map changeMap; + private final ChangeItem changeItem; + private final Object object; + + public ContentChangeItem(Map changeMap,Object object, ChangeItem changeItem) { + this.changeMap = changeMap; + this.changeItem = changeItem; + this.object = object; + } + + public Map getChangeMap() { + return changeMap; + } + + public ChangeItem getChangeItem() { + return changeItem; + } + + public Object getObject() { + return object; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/event/ModifyEvent.java b/designer-base/src/main/java/com/fr/design/mod/event/ModifyEvent.java new file mode 100644 index 0000000000..a5debb4309 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/event/ModifyEvent.java @@ -0,0 +1,13 @@ +package com.fr.design.mod.event; + +import com.fr.design.mod.bean.ContentChangeItem; +import com.fr.event.Event; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/5/28 + */ +public class ModifyEvent implements Event { + +} diff --git a/designer-base/src/main/java/com/fr/design/mod/event/TableDataModifyEvent.java b/designer-base/src/main/java/com/fr/design/mod/event/TableDataModifyEvent.java new file mode 100644 index 0000000000..6359682cfe --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/event/TableDataModifyEvent.java @@ -0,0 +1,12 @@ +package com.fr.design.mod.event; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/5/28 + */ +public class TableDataModifyEvent extends ModifyEvent { + + public static final TableDataModifyEvent INSTANCE = new TableDataModifyEvent(); + +} diff --git a/designer-base/src/main/java/com/fr/design/mod/event/WidgetNameModifyEvent.java b/designer-base/src/main/java/com/fr/design/mod/event/WidgetNameModifyEvent.java new file mode 100644 index 0000000000..d3d8a9164d --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/event/WidgetNameModifyEvent.java @@ -0,0 +1,12 @@ +package com.fr.design.mod.event; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/5/28 + */ +public class WidgetNameModifyEvent extends ModifyEvent { + + public static final WidgetNameModifyEvent INSTANCE = new WidgetNameModifyEvent(); + +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/ChartHyperRelateCellLinkContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/ChartHyperRelateCellLinkContentChange.java new file mode 100644 index 0000000000..8b8b32e812 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/ChartHyperRelateCellLinkContentChange.java @@ -0,0 +1,16 @@ +package com.fr.design.mod.impl.change; + +import com.fr.chart.web.ChartHyperRelateCellLink; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/5/28 + */ +public class ChartHyperRelateCellLinkContentChange extends ChartHyperRelateLinkContentChange { + + @Override + public String type() { + return ChartHyperRelateCellLink.class.getName(); + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/ChartHyperRelateFloatLinkContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/ChartHyperRelateFloatLinkContentChange.java new file mode 100644 index 0000000000..dc3cf04aec --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/ChartHyperRelateFloatLinkContentChange.java @@ -0,0 +1,16 @@ +package com.fr.design.mod.impl.change; + +import com.fr.chart.web.ChartHyperRelateFloatLink; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/5/28 + */ +public class ChartHyperRelateFloatLinkContentChange extends ChartHyperRelateLinkContentChange{ + + @Override + public String type() { + return ChartHyperRelateFloatLink.class.getName(); + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/ChartHyperRelateLinkContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/ChartHyperRelateLinkContentChange.java new file mode 100644 index 0000000000..139bda0c2c --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/ChartHyperRelateLinkContentChange.java @@ -0,0 +1,30 @@ +package com.fr.design.mod.impl.change; + +import com.fr.chart.web.ChartHyperRelateLink; +import com.fr.design.mod.ContentChange; +import com.fr.design.mod.ContentReplacer; +import com.fr.design.mod.bean.ChangeItem; +import com.fr.design.mod.impl.repalce.ChartHyperRelateLink4WidgetNameContentReplacer; +import java.util.HashMap; +import java.util.Map; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/5/27 + */ +public abstract class ChartHyperRelateLinkContentChange implements ContentChange { + + private final Map> map; + + public ChartHyperRelateLinkContentChange() { + this.map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, new ChartHyperRelateLink4WidgetNameContentReplacer()); + } + + @Override + public Map> changeInfo() { + return map; + } + +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/FormulaContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/FormulaContentChange.java new file mode 100644 index 0000000000..de69b49d5a --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/FormulaContentChange.java @@ -0,0 +1,37 @@ +package com.fr.design.mod.impl.change; + +import com.fr.base.Formula; +import com.fr.design.mod.ContentChange; +import com.fr.design.mod.ContentReplacer; +import com.fr.design.mod.bean.ChangeItem; +import com.fr.design.mod.impl.repalce.Formula4TableDataNameContentReplacer; +import com.fr.design.mod.impl.repalce.Formula4WidgetNameContentReplacer; +import java.util.HashMap; +import java.util.Map; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/5/27 + */ +public class FormulaContentChange implements ContentChange { + + private final Map> map; + + public FormulaContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, new Formula4WidgetNameContentReplacer()); + map.put(ChangeItem.TABLE_DATA_NAME, new Formula4TableDataNameContentReplacer()); + } + + @Override + public String type() { + return Formula.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } + +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/JavaScriptContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/JavaScriptContentChange.java new file mode 100644 index 0000000000..62653349c1 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/JavaScriptContentChange.java @@ -0,0 +1,36 @@ +package com.fr.design.mod.impl.change; + +import com.fr.design.mod.ContentChange; +import com.fr.design.mod.ContentReplacer; +import com.fr.design.mod.bean.ChangeItem; +import com.fr.design.mod.impl.repalce.JavaScriptContentReplacer; +import com.fr.js.JavaScriptImpl; +import java.util.HashMap; +import java.util.Map; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/5/27 + */ +public class JavaScriptContentChange implements ContentChange { + + private final Map> map; + + public JavaScriptContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, new JavaScriptContentReplacer()); + map.put(ChangeItem.TABLE_DATA_NAME, new JavaScriptContentReplacer()); + } + + @Override + public String type() { + return JavaScriptImpl.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } + +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/ChartHyperRelateLink4WidgetNameContentReplacer.java b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/ChartHyperRelateLink4WidgetNameContentReplacer.java new file mode 100644 index 0000000000..9fa32280f8 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/ChartHyperRelateLink4WidgetNameContentReplacer.java @@ -0,0 +1,21 @@ +package com.fr.design.mod.impl.repalce; + +import com.fr.chart.web.ChartHyperRelateLink; +import com.fr.design.mod.ContentReplacer; +import com.fr.general.ComparatorUtils; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/5/28 + */ +public class ChartHyperRelateLink4WidgetNameContentReplacer implements ContentReplacer { + + @Override + public void replace(ChartHyperRelateLink chartHyperRelateLink, String oldName, String newName) { + if (ComparatorUtils.equals(chartHyperRelateLink.getRelateCCName(), oldName)) { + chartHyperRelateLink.setRelateCCName(newName); + } + } + +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4TableDataNameContentReplacer.java b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4TableDataNameContentReplacer.java new file mode 100644 index 0000000000..c085072290 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4TableDataNameContentReplacer.java @@ -0,0 +1,18 @@ +package com.fr.design.mod.impl.repalce; + +import com.fr.base.Formula; +import com.fr.design.mod.ContentReplacer; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/5/28 + */ +public class Formula4TableDataNameContentReplacer implements ContentReplacer { + + @Override + public void replace(Formula formula, String oldName, String newName) { + //todo 等接口 + } + +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4WidgetNameContentReplacer.java b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4WidgetNameContentReplacer.java new file mode 100644 index 0000000000..9c5e15810b --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4WidgetNameContentReplacer.java @@ -0,0 +1,17 @@ +package com.fr.design.mod.impl.repalce; + +import com.fr.base.Formula; +import com.fr.design.mod.ContentReplacer; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/5/28 + */ +public class Formula4WidgetNameContentReplacer implements ContentReplacer { + + @Override + public void replace(Formula formula, String oldName, String newName) { + //todo 等接口 + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/JavaScriptContentReplacer.java b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/JavaScriptContentReplacer.java new file mode 100644 index 0000000000..bbbcd02a42 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/JavaScriptContentReplacer.java @@ -0,0 +1,25 @@ +package com.fr.design.mod.impl.repalce; + +import com.fr.design.mod.ContentReplacer; +import com.fr.js.JavaScriptImpl; +import com.fr.stable.StringUtils; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/5/28 + */ +public class JavaScriptContentReplacer implements ContentReplacer { + + @Override + public void replace(JavaScriptImpl javaScript, String oldName, String newName) { + if (StringUtils.isNotEmpty(javaScript.getContent())) { + javaScript.setContent(javaScript.getContent().replaceAll(generateStr(oldName), generateStr(newName))); + } + } + + private String generateStr(String str) { + return "\"" + str + "\""; + } + +} diff --git a/designer-form/src/main/java/com/fr/design/designer/beans/models/ModelUtil.java b/designer-form/src/main/java/com/fr/design/designer/beans/models/ModelUtil.java index 32d217adc1..062ec7480c 100644 --- a/designer-form/src/main/java/com/fr/design/designer/beans/models/ModelUtil.java +++ b/designer-form/src/main/java/com/fr/design/designer/beans/models/ModelUtil.java @@ -2,11 +2,17 @@ package com.fr.design.designer.beans.models; import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XWParameterLayout; +import com.fr.design.mod.bean.ChangeItem; +import com.fr.design.mod.bean.ContentChangeItem; +import com.fr.design.mod.event.WidgetNameModifyEvent; +import com.fr.event.EventDispatcher; import com.fr.form.main.Form; import com.fr.form.ui.Widget; import com.fr.stable.StringUtils; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import java.util.Set; /** @@ -25,10 +31,13 @@ abstract class ModelUtil { Set nameRelatedCreators = new HashSet<>(); //直接遍历出来目标值,然后按需处理 xCreator.traversalNameRelatedXCreators(nameRelatedCreators); + Map renameMap = new HashMap<>(); for (XCreator target : nameRelatedCreators) { String uniqueName = uniqueName(form, target, duplicated); + renameMap.put(target.toData().getWidgetName(), uniqueName); target.resetCreatorName(uniqueName); } + EventDispatcher.fire(WidgetNameModifyEvent.INSTANCE, new ContentChangeItem(renameMap, xCreator.toData(), ChangeItem.WIDGET_NAME)); } private static String uniqueName(Form form, XCreator xCreator, Set duplicated) { diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java b/designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java index eb036239bc..1b89400645 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java @@ -21,7 +21,11 @@ import com.fr.design.form.util.XCreatorConstants; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.icon.IconPathConstants; import com.fr.design.mainframe.chart.info.ChartInfoCollector; +import com.fr.design.mod.bean.ChangeItem; +import com.fr.design.mod.bean.ContentChangeItem; +import com.fr.design.mod.event.TableDataModifyEvent; import com.fr.design.utils.ComponentUtils; +import com.fr.event.EventDispatcher; import com.fr.form.share.editor.SharableEditorProvider; import com.fr.form.share.SharableWidgetProvider; import com.fr.form.share.ShareLoader; @@ -29,6 +33,7 @@ import com.fr.form.ui.Widget; import com.fr.stable.Constants; import com.fr.stable.StringUtils; +import java.util.Collections; import javax.swing.BorderFactory; import javax.swing.JWindow; import java.util.List; @@ -102,14 +107,16 @@ public class FormCreatorDropTarget extends DropTarget { String shareId = addingXCreator.getShareId(); SharableEditorProvider sharableEditor = ShareLoader.getLoader().getSharedElCaseEditorById(shareId); SharableWidgetProvider bindInfo = ShareLoader.getLoader().getElCaseBindInfoById(shareId); + Map tdNameMap = Collections.emptyMap(); if (sharableEditor != null && bindInfo != null) { - Map tdNameMap = TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()).addTableData(bindInfo.getName(), sharableEditor.getTableDataSource(), true); + tdNameMap = TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()).addTableData(bindInfo.getName(), sharableEditor.getTableDataSource(), true); //合并数据集之后,可能会有数据集名称变化,做一下联动 //共享的组件拿的时候都是克隆的,这边改拖拽中克隆的对象而非新克隆对象,上面这个新克隆的对象只是为了拿数据集 for (Map.Entry entry : tdNameMap.entrySet()) { designer.getTarget().renameTableData(widget, entry.getKey(), entry.getValue()); } } + EventDispatcher.fire(TableDataModifyEvent.INSTANCE, new ContentChangeItem(tdNameMap, widget, ChangeItem.TABLE_DATA_NAME)); } designer.getSelectionModel().setSelectedCreators( FormSelectionUtils.rebuildSelection(xCreator, new Widget[]{widget})); diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java index 43c0e720fe..e73e9387f6 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java @@ -55,6 +55,7 @@ import com.fr.design.mainframe.form.FormReportComponentComposite; import com.fr.design.mainframe.loghandler.DesignerLogAppender; import com.fr.design.mainframe.share.constants.ShareEntryKey; import com.fr.design.mainframe.socketio.DesignerSocketIO; +import com.fr.design.mod.ContentReplacerCenter; import com.fr.design.module.DesignModuleFactory; import com.fr.design.os.impl.SupportOSImpl; import com.fr.design.parameter.FormParameterReader; @@ -158,6 +159,7 @@ public class DesignerActivator extends Activator { storePassport(); AlphaFineHelper.switchConfig4Locale(); RecoverManager.register(new RecoverForDesigner()); + ContentReplacerCenter.getInstance().register(); pushUpdateTask.run(); } From 2027e083270800e5604e77b3e2e2f87f5e361ac7 Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Fri, 28 May 2021 23:02:47 +0800 Subject: [PATCH 043/148] =?UTF-8?q?REPORT-52819=20=E4=BE=9D=E8=B5=96?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/share/encrypt/clipboard/RestrictTemplateSet.java | 2 +- .../share/encrypt/clipboard/impl/CrossLayoutClipBoardState.java | 2 +- .../share/encrypt/clipboard/impl/CrossWidgetClipBoardState.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/RestrictTemplateSet.java b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/RestrictTemplateSet.java index 4b7354bfbd..bd781641cc 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/RestrictTemplateSet.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/RestrictTemplateSet.java @@ -2,7 +2,7 @@ package com.fr.design.mainframe.share.encrypt.clipboard; import com.fr.form.main.Form; import com.fr.form.main.WidgetUtil; -import com.fr.form.share.encrypt.core.EncryptSharableAttrMark; +import com.fr.base.iofile.attr.EncryptSharableAttrMark; import com.fr.form.ui.AbstractBorderStyleWidget; import com.fr.form.ui.container.WLayout; import com.fr.stable.fun.IOFileAttrMark; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/CrossLayoutClipBoardState.java b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/CrossLayoutClipBoardState.java index 052a4d3ced..63d3c32935 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/CrossLayoutClipBoardState.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/CrossLayoutClipBoardState.java @@ -12,7 +12,7 @@ import com.fr.design.mainframe.FormSelection; import com.fr.design.mainframe.WidgetPropertyPane; import com.fr.form.main.Form; import com.fr.design.mainframe.share.encrypt.clipboard.AbstractCrossClipBoardState; -import com.fr.form.share.encrypt.core.EncryptSharableAttrMark; +import com.fr.base.iofile.attr.EncryptSharableAttrMark; import com.fr.form.ui.AbstractBorderStyleWidget; import com.fr.form.ui.container.WLayout; import com.fr.stable.StringUtils; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/CrossWidgetClipBoardState.java b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/CrossWidgetClipBoardState.java index eb823fe1bf..4a2ea776fe 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/CrossWidgetClipBoardState.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/encrypt/clipboard/impl/CrossWidgetClipBoardState.java @@ -10,7 +10,7 @@ import com.fr.design.mainframe.WidgetPropertyPane; import com.fr.design.mainframe.share.encrypt.clipboard.AbstractCrossClipBoardState; import com.fr.form.main.Form; import com.fr.form.main.WidgetUtil; -import com.fr.form.share.encrypt.core.EncryptSharableAttrMark; +import com.fr.base.iofile.attr.EncryptSharableAttrMark; import com.fr.form.ui.AbstractBorderStyleWidget; import com.fr.form.ui.Widget; import com.fr.stable.StringUtils; From 268b20690ad2e2b793bdd699f808a6d87c0d2fff Mon Sep 17 00:00:00 2001 From: hades Date: Mon, 31 May 2021 11:01:51 +0800 Subject: [PATCH 044/148] =?UTF-8?q?REPORT-51683=20=E3=80=9010.0.17?= =?UTF-8?q?=E3=80=91=E6=99=BA=E8=83=BD=E8=81=94=E5=8A=A8=E8=A2=AB=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=BD=8D=E7=BD=AE=20update?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mod/ContentObjectManager.java | 6 +++- .../com/fr/design/mod/ContentReplaceUtil.java | 20 +++++++++++ .../fr/design/mod/ContentReplacerCenter.java | 11 ++++-- .../com/fr/design/mod/ModClassFilter.java | 33 +++++++++++++++++ .../VanChartHtmlLabelContentChange.java | 35 +++++++++++++++++++ .../Formula4TableDataNameContentReplacer.java | 6 +++- .../Formula4WidgetNameContentReplacer.java | 6 +++- .../repalce/JavaScriptContentReplacer.java | 7 ++-- .../VanChartHtmlLabelContentReplacer.java | 22 ++++++++++++ .../designer/beans/models/ModelUtil.java | 5 ++- 10 files changed, 140 insertions(+), 11 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/VanChartHtmlLabelContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/repalce/VanChartHtmlLabelContentReplacer.java diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java b/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java index a9bdd51156..72ea9bb637 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java @@ -6,10 +6,12 @@ import com.fr.chart.web.ChartHyperRelateFloatLink; import com.fr.design.file.filter.ClassFilter; import com.fr.invoke.ClassHelper; import com.fr.js.JavaScriptImpl; +import com.fr.plugin.chart.base.VanChartHtmlLabel; import com.fr.stable.Filter; import java.util.HashSet; import java.util.Map; import java.util.Set; +import org.jetbrains.annotations.Nullable; /** * 管理所有需要替换内容的对象 @@ -38,10 +40,11 @@ public class ContentObjectManager { set.add(JavaScriptImpl.class.getName()); set.add(ChartHyperRelateCellLink.class.getName()); set.add(ChartHyperRelateFloatLink.class.getName()); + set.add(VanChartHtmlLabel.class.getName()); } public void searchObject(Object ob) { - objectMap = ClassHelper.searchObject(ob, set, ClassFilter.getInstance()); + objectMap = ClassHelper.searchObject(ob, set, ModClassFilter.getInstance()); } public void searchObject(Object ob, Filter filter) { @@ -55,6 +58,7 @@ public class ContentObjectManager { objectMap = null; } + @Nullable public Map> getObjectMap() { return objectMap; } diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java b/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java new file mode 100644 index 0000000000..218c66fad2 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java @@ -0,0 +1,20 @@ +package com.fr.design.mod; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/5/31 + */ +public class ContentReplaceUtil { + + public static final String EQ_STRING = "="; + + public static String replaceContent(String content, String oldName, String newName) { + return content.replaceAll(generateStr(oldName), generateStr(newName)); + } + + private static String generateStr(String str) { + return "\"" + str + "\""; + } + +} diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java b/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java index 5359d87e57..3a18a6ea20 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java @@ -8,6 +8,7 @@ import com.fr.design.mod.impl.change.ChartHyperRelateCellLinkContentChange; import com.fr.design.mod.impl.change.ChartHyperRelateFloatLinkContentChange; import com.fr.design.mod.impl.change.FormulaContentChange; import com.fr.design.mod.impl.change.JavaScriptContentChange; +import com.fr.design.mod.impl.change.VanChartHtmlLabelContentChange; import com.fr.event.Event; import com.fr.event.EventDispatcher; import com.fr.event.Listener; @@ -42,6 +43,9 @@ public class ContentReplacerCenter { EventDispatcher.listen(WidgetNameModifyEvent.INSTANCE, new Listener() { @Override public void on(Event event, ContentChangeItem param) { + if (param.getChangeMap().isEmpty()) { + return; + } items.add(param); } }); @@ -52,7 +56,9 @@ public class ContentReplacerCenter { items.add(param); long start = System.currentTimeMillis(); ContentObjectManager.getInstance().searchObject(param.getObject()); - FineLoggerFactory.getLogger().debug("search object spend {} ", (System.currentTimeMillis() - start)); + FineLoggerFactory.getLogger().debug("search object spend {} ms", (System.currentTimeMillis() - start)); + FineLoggerFactory.getLogger().debug("search result: {}", ContentObjectManager.getInstance().getObjectMap() == null + ? null : ContentObjectManager.getInstance().getObjectMap().keySet()); List itemsCopy = new ArrayList<>(items); items.clear(); onRename(itemsCopy, contentChangeList); @@ -66,6 +72,7 @@ public class ContentReplacerCenter { contentChangeList.add(new ChartHyperRelateFloatLinkContentChange()); contentChangeList.add(new FormulaContentChange()); contentChangeList.add(new JavaScriptContentChange()); + contentChangeList.add(new VanChartHtmlLabelContentChange()); } private void onRename(List contentChangeItemList, List contentChangeList) { @@ -82,7 +89,7 @@ public class ContentReplacerCenter { } } objectMap.clear(); - FineLoggerFactory.getLogger().debug("replace all content spend {} ", (System.currentTimeMillis() - start)); + FineLoggerFactory.getLogger().debug("replace all content spend {} ms", (System.currentTimeMillis() - start)); } } diff --git a/designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java b/designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java new file mode 100644 index 0000000000..4bf02549a4 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java @@ -0,0 +1,33 @@ +package com.fr.design.mod; + +import com.fr.stable.Filter; +import java.util.HashSet; +import java.util.Set; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/5/31 + */ +public class ModClassFilter implements Filter { + + private static final Set FILTER_SET = new HashSet<>(); + + private static final Filter INSTANCE = new ModClassFilter(); + + public static Filter getInstance() { + return INSTANCE; + } + + static { + FILTER_SET.add("java.awt.image.BufferedImage"); + FILTER_SET.add("sun.awt.AppContext"); + FILTER_SET.add("com.fr.poly.creator.ECBlockCreator"); + FILTER_SET.add("io.netty.channel.nio.SelectedSelectionKeySet"); + } + + @Override + public boolean accept(String s) { + return FILTER_SET.contains(s); + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/VanChartHtmlLabelContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/VanChartHtmlLabelContentChange.java new file mode 100644 index 0000000000..a51fd732d0 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/VanChartHtmlLabelContentChange.java @@ -0,0 +1,35 @@ +package com.fr.design.mod.impl.change; + +import com.fr.design.mod.ContentChange; +import com.fr.design.mod.ContentReplacer; +import com.fr.design.mod.bean.ChangeItem; +import com.fr.design.mod.impl.repalce.VanChartHtmlLabelContentReplacer; +import com.fr.plugin.chart.base.VanChartHtmlLabel; +import java.util.HashMap; +import java.util.Map; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/5/31 + */ +public class VanChartHtmlLabelContentChange implements ContentChange { + + private final Map> map; + + public VanChartHtmlLabelContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, new VanChartHtmlLabelContentReplacer()); + map.put(ChangeItem.TABLE_DATA_NAME, new VanChartHtmlLabelContentReplacer()); + } + + @Override + public String type() { + return VanChartHtmlLabel.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4TableDataNameContentReplacer.java b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4TableDataNameContentReplacer.java index c085072290..8f4dafa2a5 100644 --- a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4TableDataNameContentReplacer.java +++ b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4TableDataNameContentReplacer.java @@ -1,7 +1,9 @@ package com.fr.design.mod.impl.repalce; import com.fr.base.Formula; +import com.fr.design.mod.ContentReplaceUtil; import com.fr.design.mod.ContentReplacer; +import com.fr.parser.FRFormulaTransformer; /** * @author hades @@ -12,7 +14,9 @@ public class Formula4TableDataNameContentReplacer implements ContentReplacer { + + @Override + public void replace(VanChartHtmlLabel vanChartHtmlLabel, String oldName, String newName) { + if (StringUtils.isNotEmpty(vanChartHtmlLabel.getCustomText())) { + vanChartHtmlLabel.setCustomText( + ContentReplaceUtil.replaceContent(vanChartHtmlLabel.getCustomText(), oldName, newName)); + } + } +} diff --git a/designer-form/src/main/java/com/fr/design/designer/beans/models/ModelUtil.java b/designer-form/src/main/java/com/fr/design/designer/beans/models/ModelUtil.java index 062ec7480c..10e672f58b 100644 --- a/designer-form/src/main/java/com/fr/design/designer/beans/models/ModelUtil.java +++ b/designer-form/src/main/java/com/fr/design/designer/beans/models/ModelUtil.java @@ -34,7 +34,10 @@ abstract class ModelUtil { Map renameMap = new HashMap<>(); for (XCreator target : nameRelatedCreators) { String uniqueName = uniqueName(form, target, duplicated); - renameMap.put(target.toData().getWidgetName(), uniqueName); + String oldName = target.toData().getWidgetName(); + if (StringUtils.isNotEmpty(oldName)) { + renameMap.put(oldName, uniqueName); + } target.resetCreatorName(uniqueName); } EventDispatcher.fire(WidgetNameModifyEvent.INSTANCE, new ContentChangeItem(renameMap, xCreator.toData(), ChangeItem.WIDGET_NAME)); From db2195a5f74e16ea9c83678fcb6acef85d0f7275 Mon Sep 17 00:00:00 2001 From: kerry Date: Mon, 31 May 2021 11:20:21 +0800 Subject: [PATCH 045/148] =?UTF-8?q?REPORT-53007=20=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=A4=8D=E7=94=A8-=E5=90=88=E5=85=A5=E4=B8=BB=E7=89=88?= =?UTF-8?q?=E6=9C=AC-=E4=BA=8B=E4=BB=B6=E5=85=81=E8=AE=B8=E9=87=8D?= =?UTF-8?q?=E5=91=BD=E5=90=8D=EF=BC=8C=E9=9C=80=E8=A6=81=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E4=B8=80=E4=B8=8Bcpt=E5=8D=95=E5=85=83=E6=A0=BC=E7=9A=84?= =?UTF-8?q?=E6=8E=A7=E4=BB=B6=E4=BA=8B=E4=BB=B6@kerry?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controlpane/UIListGroupControlPane.java | 485 ++++++++++++++++++ .../gui/controlpane/EventPropertyPane.java | 449 +--------------- .../com/fr/design/widget/WidgetEventPane.java | 85 ++- 3 files changed, 552 insertions(+), 467 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/gui/controlpane/UIListGroupControlPane.java diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListGroupControlPane.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListGroupControlPane.java new file mode 100644 index 0000000000..6e0313ec72 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListGroupControlPane.java @@ -0,0 +1,485 @@ +package com.fr.design.gui.controlpane; + +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.constants.UIConstants; +import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.ilist.JNameEdList; +import com.fr.design.gui.ilist.ListModelElement; +import com.fr.design.gui.ilist.ModNameActionListener; +import com.fr.design.gui.ilist.UINameEdList; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.widget.EventCreator; +import com.fr.form.event.Listener; +import com.fr.form.ui.Widget; +import com.fr.general.NameObject; +import com.fr.report.web.util.ReportEngineEventMapping; +import com.fr.stable.ArrayUtils; +import com.fr.stable.Nameable; +import com.fr.stable.StringUtils; + +import javax.swing.BorderFactory; +import javax.swing.DefaultListModel; +import javax.swing.JPanel; +import javax.swing.ListSelectionModel; +import javax.swing.event.ListDataEvent; +import javax.swing.event.ListDataListener; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +/** + * Created by kerry on 5/31/21 + */ +public abstract class UIListGroupControlPane extends UIControlPane implements ListControlPaneProvider { + private boolean isPopulating = false; + private UINameEdList selectNameEdList; + + private Map nameEdListMap = new HashMap<>(); + + private CommonShortCutHandlers commonHandlers; + + private ListControlPaneHelper helper; + + private JPanel contentPane; + + public JPanel getContentPane() { + return contentPane; + } + + private ListControlPaneHelper getHelper() { + if (helper == null) { + helper = ListControlPaneHelper.newInstance(this); + } + return helper; + } + + private CommonShortCutHandlers getCommonHandlers() { + if (commonHandlers == null) { + commonHandlers = CommonShortCutHandlers.newInstance(this); + } + return commonHandlers; + } + + public boolean isPopulating() { + return isPopulating; + } + + @Override + protected void initLeftPane(JPanel leftPane) { + leftPane.add(new UIScrollPane(contentPane = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 0)), BorderLayout.CENTER); + } + + + protected void refreshPane(Widget widget, NameableCreator[] creators) { + refreshContentPane(widget.supportedEvents()); + refreshNameableCreator(creators); + populateNameObjects(widget); + } + + + private void refreshContentPane(String[] supportedEvents) { + for (String event : supportedEvents) { + if (nameEdListMap.containsKey(event)) { + continue; + } + UINameEdList list = createJNameList(event); + ListWrapperPane wrapperPane = new ListWrapperPane(switchLang(event), list); + if (this.selectNameEdList == null) { + this.selectNameEdList = wrapperPane.getNameEdList(); + } + contentPane.add(wrapperPane); + nameEdListMap.put(event, wrapperPane); + } + } + + protected void populateNameObjects(Widget widget) { + ArrayList nameObjectList = new ArrayList<>(); + for (int i = 0, size = widget.getListenerSize(); i < size; i++) { + Listener listener = widget.getListener(i); + if (!listener.isDefault()) { + nameObjectList.add(i, new NameObject(switchLang(listener.getEventName()) + (i + 1), listener)); + } + } + populate(getHelper().processCatalog(nameObjectList)); + checkButtonEnabled(); + this.repaint(); + } + + private void populate(Map> map) { + isPopulating = true; // 加一个标识位,避免切换单元格时,触发 saveSettings + Iterator>> iterator = map.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry> entry = iterator.next(); + List valueList = entry.getValue(); + ListWrapperPane eventListWrapperPane = nameEdListMap.get(entry.getKey()); + populateChildNameList(eventListWrapperPane.getNameEdList(), valueList.toArray(new NameObject[valueList.size()])); + } + this.checkButtonEnabled(); + refreshEventListWrapperPane(); + isPopulating = false; + } + + private void refreshEventListWrapperPane() { + Iterator> iterator = nameEdListMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + ListWrapperPane eventListWrapperPane = entry.getValue(); + UINameEdList nameEdList = eventListWrapperPane.getNameEdList(); + int listSize = nameEdList.getModel().getSize(); + if (this.selectNameEdList.getModel().getSize() == 0 && listSize > 0) { + this.selectNameEdList = nameEdList; + } + eventListWrapperPane.setVisible(listSize > 0); + } + if (this.selectNameEdList != null) { + this.selectNameEdList.setSelectedIndex(0); + } + this.repaint(); + } + + + private void populateChildNameList(UINameEdList nameableList, Nameable[] nameableArray) { + nameableList.getCellEditor().stopCellEditing(); + DefaultListModel listModel = (DefaultListModel) nameableList.getModel(); + listModel.removeAllElements(); + if (ArrayUtils.isEmpty(nameableArray)) { + isPopulating = false; + return; + } + + listModel.setSize(nameableArray.length); + for (int i = 0; i < nameableArray.length; i++) { + listModel.set(i, new ListModelElement(nameableArray[i])); + } + + } + + + private UINameEdList createJNameList(String text) { + UINameEdList nameEdList = new UINameEdList(new DefaultListModel()) { + @Override + protected void doAfterLostFocus() { + ((JControlUpdatePane) controlUpdatePane).update(); + } + + @Override + protected void doAfterStopEditing() { + saveSettings(); + } + }; + + nameEdList.setCellRenderer(new UINameableListCellRenderer(true, this.creators)); + nameEdList.setName(text); + nameEdList.setSelectionBackground(UIConstants.ATTRIBUTE_PRESS); + nameEdList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); + nameEdList.addMouseListener(new MouseAdapter() { + @Override + public void mouseReleased(MouseEvent e) { + selectNameEdList = nameEdList; + updateUINameListSelect(); + } + }); + nameEdList.addMouseListener(getHelper().getListMouseListener(nameEdList, this)); + nameEdList.addModNameActionListener(new ModNameActionListener() { + @Override + public void nameModed(int index, String oldName, String newName) { + saveSettings(); + } + }); + nameEdList.addListSelectionListener(new ListSelectionListener() { + public void valueChanged(ListSelectionEvent evt) { + // richie:避免多次update和populate大大降低效率 + if (!evt.getValueIsAdjusting()) { + // shoc 切换的时候加检验 + if (hasInvalid(false)) { + return; + } + ((JControlUpdatePane) UIListGroupControlPane.this.controlUpdatePane).update(); + ((JControlUpdatePane) UIListGroupControlPane.this.controlUpdatePane).populate(); + UIListGroupControlPane.this.checkButtonEnabled(); + } + } + }); + nameEdList.getModel().addListDataListener(new ListDataListener() { + @Override + public void intervalAdded(ListDataEvent e) { + saveSettings(); + } + + @Override + public void intervalRemoved(ListDataEvent e) { + saveSettings(); + } + + @Override + public void contentsChanged(ListDataEvent e) { + saveSettings(); + } + }); + return nameEdList; + } + + private void updateUINameListSelect() { + Iterator> iterator = nameEdListMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + UINameEdList nameEdList = entry.getValue().getNameEdList(); + if (nameEdList != selectNameEdList) { + nameEdList.clearSelection(); + } + } + } + + @Override + public void checkButtonEnabled() { + getHelper().checkButtonEnabled(); + } + + + + private String switchLang(String eventName) { + // 在 properties 文件中找到相应的 key 值 + String localeKey = ReportEngineEventMapping.getLocaleName(eventName); + return com.fr.design.i18n.Toolkit.i18nText(localeKey); + } + + + + /** + * 生成不重复的名字 + * + * @param prefix 名字前缀 + * @return 名字 + */ + @Override + public String createUnrepeatedName(String prefix) { + return getCommonHandlers().createUnrepeatedName(prefix); + } + + private void updateSelectedNameList(NameableCreator creator) { + String eventName = ((EventCreator) creator).getEventName(); + ListWrapperPane wrapperPane = nameEdListMap.get(eventName); + wrapperPane.setVisible(true); + setSelectNameEdList(wrapperPane.getNameEdList()); + } + + private void setSelectNameEdList(UINameEdList nameEdList) { + if (this.selectNameEdList != null) { + this.selectNameEdList.clearSelection(); + } + this.selectNameEdList = nameEdList; + } + + @Override + public void onAddItem(NameableCreator creator) { + updateSelectedNameList(creator); + getCommonHandlers().onAddItem(creator); + } + + @Override + public void onRemoveItem() { + getCommonHandlers().onRemoveItem(); + refreshEventListWrapperPane(); + } + + @Override + public void onCopyItem() { + getCommonHandlers().onCopyItem(); + } + + @Override + public void onMoveUpItem() { + getCommonHandlers().onMoveUpItem(); + } + + @Override + public void onMoveDownItem() { + getCommonHandlers().onMoveDownItem(); + } + + @Override + public void onSortItem(boolean isAtoZ) { + Iterator> iterator = nameEdListMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + UINameEdList nameEdList = entry.getValue().getNameEdList(); + getCommonHandlers().onSortItem(isAtoZ, nameEdList); + } + + } + + @Override + public boolean isItemSelected() { + return getModel().getSize() > 0 && getSelectedIndex() != -1; + } + + + @Override + protected JPanel createControlUpdatePane() { + return JControlUpdatePane.newInstance(this); + } + + + @Override + public Nameable[] update() { + java.util.List res = new java.util.ArrayList(); + getControlUpdatePane().update(); + Iterator> iterator = nameEdListMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + UINameEdList nameEdList = entry.getValue().getNameEdList(); + DefaultListModel listModel = (DefaultListModel) nameEdList.getModel(); + for (int i = 0, len = listModel.getSize(); i < len; i++) { + res.add(((ListModelElement) listModel.getElementAt(i)).wrapper); + } + } + return res.toArray(new Nameable[0]); + } + + + @Override + public abstract NameableCreator[] createNameableCreators(); + + @Override + public abstract void saveSettings(); + + + public BasicBeanPane createPaneByCreators(NameableCreator creator) { + try { + return creator.getUpdatePane().newInstance(); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + public BasicBeanPane createPaneByCreators(NameableCreator creator, String string) { + Constructor constructor = null; + try { + constructor = creator.getUpdatePane().getDeclaredConstructor(new Class[]{String.class}); + constructor.setAccessible(true); + return (BasicBeanPane) constructor.newInstance(string); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } + } + + @Override + public DefaultListModel getModel() { + if (this.selectNameEdList == null) { + return new DefaultListModel(); + } + return (DefaultListModel) this.selectNameEdList.getModel(); + } + + /** + * 检查是否符合规范 + * + * @throws Exception + */ + @Override + public void checkValid() throws Exception { + ((JControlUpdatePane) this.controlUpdatePane).checkValid(); + } + + @Override + public boolean hasInvalid(boolean isAdd) { + return getHelper().hasInvalid(isAdd); + } + + public void addNameable(Nameable nameable, int index) { + getHelper().addNameable(nameable, index); + popupEditDialog(); + } + + + /** + * 设置选中项 + * + * @param index 选中项的序列号 + */ + public void setSelectedIndex(int index) { + if (this.selectNameEdList != null) { + this.selectNameEdList.setSelectedIndex(index); + + } + } + + @Override + public int getSelectedIndex() { + if (this.selectNameEdList == null) { + return -1; + } + return this.selectNameEdList.getSelectedIndex(); + } + + + @Override + public ListModelElement getSelectedValue() { + if (this.selectNameEdList == null) { + return null; + } + return (ListModelElement) this.selectNameEdList.getSelectedValue(); + } + + @Override + public JControlUpdatePane getControlUpdatePane() { + return (JControlUpdatePane) controlUpdatePane; + } + + @Override + public JNameEdList getNameableList() { + return this.selectNameEdList; + } + + private void popupEditDialog() { + getHelper().popupEditDialog(null, this.selectNameEdList, this); + } + + protected String getWrapperLabelText(){ + return StringUtils.EMPTY; + } + + + private class ListWrapperPane extends JPanel { + private UINameEdList nameEdList; + + public ListWrapperPane(String labelText, UINameEdList nameEdList) { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + UILabel label = new UILabel(labelText + getWrapperLabelText()); + label.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0)); + label.setBackground(Color.decode("#FFFFFF")); + label.setPreferredSize(new Dimension(224, 26)); + this.nameEdList = nameEdList; + this.add(label, BorderLayout.NORTH); + this.add(this.nameEdList, BorderLayout.CENTER); + } + + public UINameEdList getNameEdList() { + return this.nameEdList; + } + + } + + +} diff --git a/designer-form/src/main/java/com/fr/design/gui/controlpane/EventPropertyPane.java b/designer-form/src/main/java/com/fr/design/gui/controlpane/EventPropertyPane.java index 25cefe3af3..72ff969829 100644 --- a/designer-form/src/main/java/com/fr/design/gui/controlpane/EventPropertyPane.java +++ b/designer-form/src/main/java/com/fr/design/gui/controlpane/EventPropertyPane.java @@ -1,93 +1,30 @@ package com.fr.design.gui.controlpane; - -import com.fr.design.beans.BasicBeanPane; -import com.fr.design.constants.UIConstants; import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.properties.EventPropertyTable; -import com.fr.design.gui.icontainer.UIScrollPane; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.gui.ilist.JNameEdList; -import com.fr.design.gui.ilist.ListModelElement; -import com.fr.design.gui.ilist.ModNameActionListener; -import com.fr.design.gui.ilist.UINameEdList; import com.fr.design.i18n.Toolkit; -import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.FormDesigner; import com.fr.design.widget.EventCreator; import com.fr.form.event.Listener; import com.fr.form.ui.Widget; import com.fr.general.NameObject; -import com.fr.report.web.util.ReportEngineEventMapping; -import com.fr.stable.ArrayUtils; import com.fr.stable.Nameable; -import javax.swing.BorderFactory; -import javax.swing.DefaultListModel; -import javax.swing.JPanel; -import javax.swing.ListSelectionModel; -import javax.swing.event.ListDataEvent; -import javax.swing.event.ListDataListener; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.FlowLayout; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; /** * Created by kerry on 5/17/21 */ -public class EventPropertyPane extends UIControlPane implements ListControlPaneProvider { +public class EventPropertyPane extends UIListGroupControlPane { private XCreator creator; - private boolean isPopulating = false; - private UINameEdList selectNameEdList; - - private Map nameEdListMap = new HashMap<>(); - - private CommonShortCutHandlers commonHandlers; - - private ListControlPaneHelper helper; - - private JPanel contentPane; private FormDesigner designer; - private ListControlPaneHelper getHelper() { - if (helper == null) { - helper = ListControlPaneHelper.newInstance(this); - } - return helper; - } - - private CommonShortCutHandlers getCommonHandlers() { - if (commonHandlers == null) { - commonHandlers = CommonShortCutHandlers.newInstance(this); - } - return commonHandlers; - } - - public EventPropertyPane(FormDesigner designer) { super(); this.designer = designer; } - @Override - protected void initLeftPane(JPanel leftPane) { - leftPane.add(new UIScrollPane(contentPane = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 0)), BorderLayout.CENTER); - } - /** * 刷新 */ @@ -98,184 +35,19 @@ public class EventPropertyPane extends UIControlPane implements ListControlPaneP .getSelection().getSelectedCreator(); } else { this.creator = null; - contentPane.removeAll(); + this.getContentPane().removeAll(); checkButtonEnabled(); return; } Widget widget = creator.toData(); - - refreshContentPane(widget.supportedEvents()); - refreshNameableCreator(EventCreator.createEventCreator(widget.supportedEvents(), EventPropertyTable.WidgetEventListenerUpdatePane.class)); - populateNameObjects(); + refreshPane(widget, EventCreator.createEventCreator(widget.supportedEvents(), EventPropertyTable.WidgetEventListenerUpdatePane.class)); } - private void refreshContentPane(String[] supportedEvents) { - for (String event : supportedEvents) { - if (nameEdListMap.containsKey(event)) { - continue; - } - UINameEdList list = createJNameList(event); - EventListWrapperPane wrapperPane = new EventListWrapperPane(switchLang(event), list); - if (this.selectNameEdList == null) { - this.selectNameEdList = wrapperPane.getNameEdList(); - } - contentPane.add(wrapperPane); - nameEdListMap.put(event, wrapperPane); - } - } public void populateNameObjects() { Widget widget = creator.toData(); - - ArrayList nameObjectList = new ArrayList<>(); - for (int i = 0, size = widget.getListenerSize(); i < size; i++) { - Listener listener = widget.getListener(i); - if (!listener.isDefault()) { - nameObjectList.add(i, new NameObject(switchLang(listener.getEventName()) + (i + 1), listener)); - } - } - populate(getHelper().processCatalog(nameObjectList)); - checkButtonEnabled(); - this.repaint(); - } - - public void populate(Map> map) { - isPopulating = true; // 加一个标识位,避免切换单元格时,触发 saveSettings - Iterator>> iterator = map.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry> entry = iterator.next(); - List valueList = entry.getValue(); - EventListWrapperPane eventListWrapperPane = nameEdListMap.get(entry.getKey()); - populateChildNameList(eventListWrapperPane.getNameEdList(), valueList.toArray(new NameObject[valueList.size()])); - } - this.checkButtonEnabled(); - refreshEventListWrapperPane(); - isPopulating = false; - } - - private void refreshEventListWrapperPane() { - Iterator> iterator = nameEdListMap.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - EventListWrapperPane eventListWrapperPane = entry.getValue(); - UINameEdList nameEdList = eventListWrapperPane.getNameEdList(); - int listSize = nameEdList.getModel().getSize(); - if (this.selectNameEdList.getModel().getSize() == 0 && listSize > 0) { - this.selectNameEdList = nameEdList; - } - eventListWrapperPane.setVisible(listSize > 0); - } - if (this.selectNameEdList != null) { - this.selectNameEdList.setSelectedIndex(0); - } - this.repaint(); - } - - - private void populateChildNameList(UINameEdList nameableList, Nameable[] nameableArray) { - nameableList.getCellEditor().stopCellEditing(); - DefaultListModel listModel = (DefaultListModel) nameableList.getModel(); - listModel.removeAllElements(); - if (ArrayUtils.isEmpty(nameableArray)) { - isPopulating = false; - return; - } - - listModel.setSize(nameableArray.length); - for (int i = 0; i < nameableArray.length; i++) { - listModel.set(i, new ListModelElement(nameableArray[i])); - } - - } - - - protected UINameEdList createJNameList(String text) { - UINameEdList nameEdList = new UINameEdList(new DefaultListModel()) { - @Override - protected void doAfterLostFocus() { - ((JControlUpdatePane) controlUpdatePane).update(); - } - - @Override - protected void doAfterStopEditing() { - saveSettings(); - } - }; - - nameEdList.setCellRenderer(new UINameableListCellRenderer(true, this.creators)); - nameEdList.setName(text); - nameEdList.setSelectionBackground(UIConstants.ATTRIBUTE_PRESS); - nameEdList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); - nameEdList.addMouseListener(new MouseAdapter() { - @Override - public void mouseReleased(MouseEvent e) { - selectNameEdList = nameEdList; - updateUINameListSelect(); - } - }); - nameEdList.addMouseListener(getHelper().getListMouseListener(nameEdList, this)); - nameEdList.addModNameActionListener(new ModNameActionListener() { - @Override - public void nameModed(int index, String oldName, String newName) { - saveSettings(); - } - }); - nameEdList.addListSelectionListener(new ListSelectionListener() { - public void valueChanged(ListSelectionEvent evt) { - // richie:避免多次update和populate大大降低效率 - if (!evt.getValueIsAdjusting()) { - // shoc 切换的时候加检验 - if (hasInvalid(false)) { - return; - } - ((JControlUpdatePane) EventPropertyPane.this.controlUpdatePane).update(); - ((JControlUpdatePane) EventPropertyPane.this.controlUpdatePane).populate(); - EventPropertyPane.this.checkButtonEnabled(); - } - } - }); - nameEdList.getModel().addListDataListener(new ListDataListener() { - @Override - public void intervalAdded(ListDataEvent e) { - saveSettings(); - } - - @Override - public void intervalRemoved(ListDataEvent e) { - saveSettings(); - } - - @Override - public void contentsChanged(ListDataEvent e) { - saveSettings(); - } - }); - return nameEdList; - } - - private void updateUINameListSelect() { - Iterator> iterator = nameEdListMap.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - UINameEdList nameEdList = entry.getValue().getNameEdList(); - if (nameEdList != selectNameEdList) { - nameEdList.clearSelection(); - } - } - } - - @Override - public void checkButtonEnabled() { - getHelper().checkButtonEnabled(); - } - - - - private String switchLang(String eventName) { - // 在 properties 文件中找到相应的 key 值 - String localeKey = ReportEngineEventMapping.getLocaleName(eventName); - return com.fr.design.i18n.Toolkit.i18nText(localeKey); + populateNameObjects(widget); } /** @@ -296,98 +68,6 @@ public class EventPropertyPane extends UIControlPane implements ListControlPaneP } - /** - * 生成不重复的名字 - * - * @param prefix 名字前缀 - * @return 名字 - */ - @Override - public String createUnrepeatedName(String prefix) { - return getCommonHandlers().createUnrepeatedName(prefix); - } - - private void updateSelectedNameList(NameableCreator creator) { - String eventName = ((EventCreator) creator).getEventName(); - EventListWrapperPane wrapperPane = nameEdListMap.get(eventName); - wrapperPane.setVisible(true); - setSelectNameEdList(wrapperPane.getNameEdList()); - } - - private void setSelectNameEdList(UINameEdList nameEdList) { - if (this.selectNameEdList != null) { - this.selectNameEdList.clearSelection(); - } - this.selectNameEdList = nameEdList; - } - - @Override - public void onAddItem(NameableCreator creator) { - updateSelectedNameList(creator); - getCommonHandlers().onAddItem(creator); - } - - @Override - public void onRemoveItem() { - getCommonHandlers().onRemoveItem(); - refreshEventListWrapperPane(); - } - - @Override - public void onCopyItem() { - getCommonHandlers().onCopyItem(); - } - - @Override - public void onMoveUpItem() { - getCommonHandlers().onMoveUpItem(); - } - - @Override - public void onMoveDownItem() { - getCommonHandlers().onMoveDownItem(); - } - - @Override - public void onSortItem(boolean isAtoZ) { - Iterator> iterator = nameEdListMap.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - UINameEdList nameEdList = entry.getValue().getNameEdList(); - getCommonHandlers().onSortItem(isAtoZ, nameEdList); - } - - } - - @Override - public boolean isItemSelected() { - return getModel().getSize() > 0 && getSelectedIndex() != -1; - } - - - @Override - protected JPanel createControlUpdatePane() { - return JControlUpdatePane.newInstance(this); - } - - - @Override - public Nameable[] update() { - java.util.List res = new java.util.ArrayList(); - getControlUpdatePane().update(); - Iterator> iterator = nameEdListMap.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - UINameEdList nameEdList = entry.getValue().getNameEdList(); - DefaultListModel listModel = (DefaultListModel) nameEdList.getModel(); - for (int i = 0, len = listModel.getSize(); i < len; i++) { - res.add(((ListModelElement) listModel.getElementAt(i)).wrapper); - } - } - return res.toArray(new Nameable[0]); - } - - @Override public NameableCreator[] createNameableCreators() { return new NameableCreator[]{ @@ -397,7 +77,7 @@ public class EventPropertyPane extends UIControlPane implements ListControlPaneP @Override public void saveSettings() { - if (isPopulating) { + if (isPopulating()) { return; } updateWidgetListener(creator); @@ -413,123 +93,8 @@ public class EventPropertyPane extends UIControlPane implements ListControlPaneP return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Add_Event"); } - public BasicBeanPane createPaneByCreators(NameableCreator creator) { - try { - return creator.getUpdatePane().newInstance(); - } catch (InstantiationException e) { - throw new RuntimeException(e); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } - } - - public BasicBeanPane createPaneByCreators(NameableCreator creator, String string) { - Constructor constructor = null; - try { - constructor = creator.getUpdatePane().getDeclaredConstructor(new Class[]{String.class}); - constructor.setAccessible(true); - return (BasicBeanPane) constructor.newInstance(string); - } catch (NoSuchMethodException e) { - throw new RuntimeException(e); - } catch (InstantiationException e) { - throw new RuntimeException(e); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } catch (InvocationTargetException e) { - throw new RuntimeException(e); - } - } - - @Override - public DefaultListModel getModel() { - if (this.selectNameEdList == null) { - return new DefaultListModel(); - } - return (DefaultListModel) this.selectNameEdList.getModel(); - } - - /** - * 检查是否符合规范 - * - * @throws Exception - */ - @Override - public void checkValid() throws Exception { - ((JControlUpdatePane) this.controlUpdatePane).checkValid(); - } - - @Override - public boolean hasInvalid(boolean isAdd) { - return getHelper().hasInvalid(isAdd); - } - - public void addNameable(Nameable nameable, int index) { - getHelper().addNameable(nameable, index); - popupEditDialog(); + protected String getWrapperLabelText(){ + return Toolkit.i18nText("Fine-Design_Report_Event"); } - - /** - * 设置选中项 - * - * @param index 选中项的序列号 - */ - public void setSelectedIndex(int index) { - if (this.selectNameEdList != null) { - this.selectNameEdList.setSelectedIndex(index); - - } - } - - @Override - public int getSelectedIndex() { - if (this.selectNameEdList == null) { - return -1; - } - return this.selectNameEdList.getSelectedIndex(); - } - - - @Override - public ListModelElement getSelectedValue() { - if (this.selectNameEdList == null) { - return null; - } - return (ListModelElement) this.selectNameEdList.getSelectedValue(); - } - - @Override - public JControlUpdatePane getControlUpdatePane() { - return (JControlUpdatePane) controlUpdatePane; - } - - @Override - public JNameEdList getNameableList() { - return this.selectNameEdList; - } - - private void popupEditDialog() { - getHelper().popupEditDialog(null, this.selectNameEdList, this); - } - - - private class EventListWrapperPane extends JPanel { - private UINameEdList nameEdList; - - public EventListWrapperPane(String labelText, UINameEdList nameEdList) { - this.setLayout(FRGUIPaneFactory.createBorderLayout()); - UILabel label = new UILabel(labelText + Toolkit.i18nText("Fine-Design_Report_Event")); - label.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0)); - label.setBackground(Color.decode("#FFFFFF")); - label.setPreferredSize(new Dimension(226, 26)); - this.nameEdList = nameEdList; - this.add(label, BorderLayout.NORTH); - this.add(this.nameEdList, BorderLayout.CENTER); - } - - public UINameEdList getNameEdList() { - return this.nameEdList; - } - - } } diff --git a/designer-realize/src/main/java/com/fr/design/widget/WidgetEventPane.java b/designer-realize/src/main/java/com/fr/design/widget/WidgetEventPane.java index 79673c11d5..936001d702 100644 --- a/designer-realize/src/main/java/com/fr/design/widget/WidgetEventPane.java +++ b/designer-realize/src/main/java/com/fr/design/widget/WidgetEventPane.java @@ -1,10 +1,10 @@ package com.fr.design.widget; -import java.util.ArrayList; -import java.util.List; - -import com.fr.design.gui.controlpane.ObjectUIControlPane; +import java.lang.reflect.Constructor; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.gui.controlpane.UIListGroupControlPane; +import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.CellWidgetPropertyPane; import com.fr.design.write.submit.DBManipulationPane; import com.fr.design.write.submit.SmartInsertDBManipulationInWidgetEventPane; @@ -20,18 +20,20 @@ import com.fr.grid.selection.Selection; import com.fr.general.NameObject; import com.fr.grid.selection.CellSelection; +import com.fr.stable.AssistUtils; import com.fr.stable.Nameable; import javax.swing.*; -public class WidgetEventPane extends ObjectUIControlPane { +public class WidgetEventPane extends UIListGroupControlPane { private static final Selection NO_SELECTION = new CellSelection(-1, -1, -1, -1); private Selection selection = NO_SELECTION; + private ElementCasePane object; + public WidgetEventPane(ElementCasePane pane) { - super(pane); - this.setNameListEditable(false); + this.object = pane; if(pane != null){ selection = pane.getSelection(); } @@ -62,7 +64,7 @@ public class WidgetEventPane extends ObjectUIControlPane { protected String title4PopupWindow() { return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Event"); } - + public static class WidgetEventListenerUpdatePane extends ListenerUpdatePane { private ElementCasePane epane; // 反射会用到 @@ -91,8 +93,8 @@ public class WidgetEventPane extends ObjectUIControlPane { protected DBManipulationPane createDBManipulationPane() { if(epane == null && DesignerContext.getDesignerFrame().getSelectedJTemplate() != null) { return autoCreateDBManipulationInWidgetEventPane(); - } - + } + return new SmartInsertDBManipulationInWidgetEventPane(epane); } @@ -100,7 +102,7 @@ public class WidgetEventPane extends ObjectUIControlPane { protected String title4PopupWindow() { return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Set_Callback_Function"); } - + @Override protected boolean isForm() { return false; @@ -116,26 +118,14 @@ public class WidgetEventPane extends ObjectUIControlPane { protected boolean supportCellAction() { return false; } - + } public void populate(Widget widget) { if (widget == null) { return; } - - this.refreshNameableCreator(EventCreator.createEventCreator(widget.supportedEvents(), WidgetEventListenerUpdatePane.class)); - - List list = new ArrayList(); - Listener listener; - for (int i = 0, size = widget.getListenerSize(); i < size; i++) { - listener = widget.getListener(i); - if (!listener.isDefault()) //name+(i+1)需要确保名字不重复 - { - list.add(new NameObject(EventCreator.switchLang(listener.getEventName()) + (i + 1), listener)); - } - } - this.populate(list.toArray(new NameObject[list.size()])); + refreshPane(widget, EventCreator.createEventCreator(widget.supportedEvents(), WidgetEventListenerUpdatePane.class)); } /** @@ -150,4 +140,49 @@ public class WidgetEventPane extends ObjectUIControlPane { } return res_array; } + + @Override + public BasicBeanPane createPaneByCreators(NameableCreator creator) { + try { + if (object == null) { + return super.createPaneByCreators(creator); + } else if (object.getClass().isArray()) { + return creator.getUpdatePane().getConstructor(object.getClass()).newInstance(object); + } else { + Constructor constructor = getConstructor(creator.getUpdatePane(), object.getClass()); + return constructor == null ? super.createPaneByCreators(creator) : constructor.newInstance(object); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * 传进BasicBeanPane的构造函数的参数,可能是 + * + * @param clazz + * @param cls + * @return + */ + private Constructor getConstructor(Class clazz, Class cls) { + Constructor constructor = null; + try { + constructor = clazz.getConstructor(cls); + } catch (SecurityException e) { + } catch (NoSuchMethodException e) { + } + if (constructor != null) { + return constructor; + } else { + if (AssistUtils.equals(cls.getName(),Object.class.getName())) { + return null; + } + return getConstructor(clazz, cls.getSuperclass()); + } + } + + protected String getWrapperLabelText(){ + return Toolkit.i18nText("Fine-Design_Report_Event"); + } + } From 85426ed7bfbddd52e702b12c0bebd5646a1c9ebc Mon Sep 17 00:00:00 2001 From: vito Date: Mon, 31 May 2021 15:39:14 +0800 Subject: [PATCH 046/148] =?UTF-8?q?REPORT-53016=20=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E7=BC=BA=E5=A4=B1=E6=8F=90=E9=86=92-=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E6=94=B9=E8=BF=9B-=E7=99=BD=E5=90=8D=E5=8D=95=E5=92=8C?= =?UTF-8?q?=E8=BF=9C=E7=A8=8B=E6=8F=90=E9=86=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/app/DesignerAppUtils.java | 132 +++++++++++++++++- .../com/fr/design/mainframe/app/FormApp.java | 19 ++- .../mainframe/app/DesignerAppUtilsTest.java | 106 ++++++++++++++ 3 files changed, 246 insertions(+), 11 deletions(-) create mode 100644 designer-realize/src/test/java/com/fr/design/mainframe/app/DesignerAppUtilsTest.java diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java b/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java index 4ac1a273a4..2064bc0449 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java @@ -7,16 +7,24 @@ import com.fr.design.extra.exe.callback.ModifyStatusCallback; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerContext; import com.fr.design.ui.util.UIUtil; -import com.fr.io.TemplateIOErrorUtils; +import com.fr.locale.InterProviderFactory; import com.fr.plugin.context.PluginMarker; import com.fr.plugin.context.PluginMarkerAdapter; +import com.fr.plugin.engine.remote.PluginRemoteSync; import com.fr.plugin.manage.PluginManager; import com.fr.plugin.manage.control.PluginControllerHelper; import com.fr.plugin.manage.control.PluginTask; +import com.fr.stable.StringUtils; +import com.fr.stable.TemplateIOErrorContextHolder; +import com.fr.third.guava.cache.Cache; +import com.fr.third.guava.cache.CacheBuilder; import com.fr.third.guava.collect.Multimap; import com.fr.workspace.WorkContext; +import java.time.Duration; import java.util.Collection; +import java.util.Map; +import java.util.stream.Collectors; /** * 设计器app共用工具类 @@ -26,6 +34,118 @@ import java.util.Collection; * Created by vito on 2021/5/27 */ public class DesignerAppUtils { + private static final int DEFAULT_MAX_CACHE_SIZE = 50; + private static final int DEFAULT_CONCURRENCY_LEVEL = 8; + private static final long DEFAULT_EXPIRE_HOURS = 1; + + private static final Cache> ERROR_CACHE = CacheBuilder.newBuilder() + .maximumSize(DEFAULT_MAX_CACHE_SIZE) + .expireAfterAccess(Duration.ofHours(DEFAULT_EXPIRE_HOURS)) + .concurrencyLevel(DEFAULT_CONCURRENCY_LEVEL) + .build(); + + /** + * 弹出指定的插件信息, + * 并失效缓存 + * + * @param key 指定key + * @return 插件安装信息 + */ + public static Multimap popPluginInfoMap(String key) { + Multimap ifPresent = ERROR_CACHE.getIfPresent(key); + ERROR_CACHE.invalidate(key); + return ifPresent; + } + + /** + * 失效指定的插件信息缓存 + * + * @param key 指定key + */ + public static void invalidatePlugins(String key) { + ERROR_CACHE.invalidate(key); + } + + + /** + * 格式化多行插件错误信息详情并缓存, + * 用于界面展示 + * + * @param key 缓存key + * @return 格式化后的多行插件错误信息详情 + */ + public static String dealWithErrorDetailMultiLineAndCache(String key) { + Multimap pendingPlugins = TemplateIOErrorContextHolder.getPendingPlugin(); + if (pendingPlugins.isEmpty()) { + return StringUtils.EMPTY; + } + dealWithRemote(pendingPlugins); + StringBuilder sb = new StringBuilder(); + if (WorkContext.getCurrent().isLocal()) { + // 缓存等待后续处理 + ERROR_CACHE.put(key, pendingPlugins); + } + Collection unknownPlugins = pendingPlugins.get(TemplateIOErrorContextHolder.UNKNOWN_PLUGIN); + if (!unknownPlugins.isEmpty()) { + sb.append(InterProviderFactory.getProvider().getLocText("Fine-Core_Plugin_Error_UnknownPlugin")).append(":\n"); + for (PluginMarkerAdapter pluginMarker : unknownPlugins) { + sb.append("\"").append(pluginMarker.getPluginID()).append("\"") + .append(InterProviderFactory.getProvider().getLocText("Fine-Dec_Platform_Plugin")).append('\n'); + } + } + Collection notInstalledPlugins = pendingPlugins.get(TemplateIOErrorContextHolder.NOT_INSTALLED_PLUGIN); + if (!notInstalledPlugins.isEmpty()) { + sb.append(InterProviderFactory.getProvider().getLocText("Fine-Core_Plugin_Error_UninstalledPlugins")).append(":\n"); + for (PluginMarkerAdapter pluginMarker : notInstalledPlugins) { + sb.append("\"").append(pluginMarker.getPluginName()).append("\"") + .append(InterProviderFactory.getProvider().getLocText("Fine-Dec_Platform_Plugin")).append('\n'); + } + } + Collection disablePlugins = pendingPlugins.get(TemplateIOErrorContextHolder.DISABLE_PLUGIN); + if (!disablePlugins.isEmpty()) { + sb.append(InterProviderFactory.getProvider().getLocText("Fine-Core_Plugin_Error_InactivePlugins")).append(":\n"); + for (PluginMarkerAdapter pluginMarker : disablePlugins) { + sb.append("\"").append(pluginMarker.getPluginName()).append("\"") + .append(InterProviderFactory.getProvider().getLocText("Fine-Dec_Platform_Plugin")).append('\n'); + + } + } + return sb.toString(); + } + + /** + * 远程环境下需要特殊处理远程服务器尚未安装的插件 + * + * @param pendingPlugins 待处理插件 + */ + private static void dealWithRemote(Multimap pendingPlugins) { + if (!WorkContext.getCurrent().isLocal()) { + rearrange(pendingPlugins); + } + } + + /** + * 远程设计重新整理下列表 + * + * @param pendingPlugins 待处理列表 + */ + public static void rearrange(Multimap pendingPlugins) { + Map pluginRemoteStatusByIdIndex = PluginRemoteSync.getInstance().getPluginRemoteStatusByIdIndex(); + Collection unknownPlugins = pendingPlugins.get(TemplateIOErrorContextHolder.UNKNOWN_PLUGIN); + Collection notInstall = pendingPlugins.get(TemplateIOErrorContextHolder.NOT_INSTALLED_PLUGIN); + Collection disable = pendingPlugins.get(TemplateIOErrorContextHolder.DISABLE_PLUGIN); + unknownPlugins.removeIf(adapter -> pluginRemoteStatusByIdIndex.containsKey(adapter.getPluginID())); + // 本地未启用名单不准确添加到一起之后重新分配 + notInstall.addAll(disable); + disable.clear(); + // 从所有未安装中过滤远程未启用的,添加到未启用列表 + disable.addAll(notInstall.stream().filter(plugin -> + pluginRemoteStatusByIdIndex.containsKey(plugin.getPluginID()) + && !pluginRemoteStatusByIdIndex.get(plugin.getPluginID()).isRunning()) + .collect(Collectors.toList())); + // 清理未安装中所有远程安装过的插件(包含启用和未启用) + notInstall.removeIf(adapter -> pluginRemoteStatusByIdIndex.containsKey(adapter.getPluginID())); + } /** * 处理模板读取时的异常 @@ -34,7 +154,7 @@ public class DesignerAppUtils { */ public static void dealWithTemplateIOError(String path) { // 试图获取多行读取错误提示并缓存待处理列表 - String detail = TemplateIOErrorUtils.dealWithErrorDetailMultiLineAndCache(path); + String detail = dealWithErrorDetailMultiLineAndCache(path); if (detail.length() > 0) { UIUtil.invokeLaterIfNeeded(() -> { if (WorkContext.getCurrent().isLocal()) { @@ -52,7 +172,7 @@ public class DesignerAppUtils { @Override public void doCancel() { - TemplateIOErrorUtils.invalidatePlugins(path); + invalidatePlugins(path); } }).build().setVisible(true); } else { @@ -68,13 +188,13 @@ public class DesignerAppUtils { } private static void installAndEnablePlugin(String key) { - Multimap stringPluginMarkerAdapterMultimap = TemplateIOErrorUtils.popPluginInfoMap(key); - Collection disablePlugins = stringPluginMarkerAdapterMultimap.get(TemplateIOErrorUtils.DISABLE_PLUGIN); + Multimap stringPluginMarkerAdapterMultimap = popPluginInfoMap(key); + Collection disablePlugins = stringPluginMarkerAdapterMultimap.get(TemplateIOErrorContextHolder.DISABLE_PLUGIN); for (PluginMarkerAdapter disablePlugin : disablePlugins) { PluginManager.getController().enable(disablePlugin, new ModifyStatusCallback(false)); } - Collection uninstallPlugins = stringPluginMarkerAdapterMultimap.get(TemplateIOErrorUtils.NOT_INSTALLED_PLUGIN); + Collection uninstallPlugins = stringPluginMarkerAdapterMultimap.get(TemplateIOErrorContextHolder.NOT_INSTALLED_PLUGIN); for (PluginMarker uninstallPlugin : uninstallPlugins) { PluginTask pluginTask = PluginTask.installTask(uninstallPlugin); PluginControllerHelper.installOnline(uninstallPlugin, new InstallOnlineCallback(pluginTask)); diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/app/FormApp.java b/designer-realize/src/main/java/com/fr/design/mainframe/app/FormApp.java index 511c98e62d..f28e2c9840 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/app/FormApp.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/app/FormApp.java @@ -23,6 +23,7 @@ import com.fr.general.ComparatorUtils; import com.fr.log.FineLoggerFactory; import com.fr.stable.Constants; import com.fr.stable.bridge.StableFactory; +import org.jetbrains.annotations.Nullable; import java.util.HashMap; import java.util.concurrent.Callable; @@ -62,8 +63,7 @@ class FormApp extends AbstractAppProvider { new Callable>() { @Override public OpenResult call() throws Exception { - Form form = asIOFile(tplFile); - DesignerAppUtils.dealWithTemplateIOError(tplFile.getPath()); + Form form = getForm(tplFile); return new OpenResult<>(form, form.getParameters()); } }, emptyForm); @@ -72,22 +72,31 @@ class FormApp extends AbstractAppProvider { public JTemplate call() throws Exception { OpenResult result = worker.getResult(); return (JTemplate) StableFactory.getMarkedInstanceObjectFromClass(BaseJForm.XML_TAG, - new Object[]{result.getBaseBook(), tplFile, result.getRef()}, classType, BaseJForm.class); + new Object[]{result.getBaseBook(), tplFile, result.getRef()}, classType, BaseJForm.class); } }); worker.start(tplFile.getPath()); OpenResult result = worker.getResult(); if (result != null) { return (JTemplate) StableFactory.getMarkedInstanceObjectFromClass(BaseJForm.XML_TAG, - new Object[]{result.getBaseBook(), tplFile, new Parameter[0]}, classType, BaseJForm.class); + new Object[]{result.getBaseBook(), tplFile, new Parameter[0]}, classType, BaseJForm.class); } return emptyForm; } else { return (JTemplate) StableFactory.getMarkedInstanceObjectFromClass(BaseJForm.XML_TAG, - new Object[]{asIOFile(tplFile), tplFile}, classType, BaseJForm.class); + new Object[]{getForm(tplFile), tplFile}, classType, BaseJForm.class); } } + @Nullable + private Form getForm(FILE tplFile) { + Form form = asIOFile(tplFile); + if (form != null) { + DesignerAppUtils.dealWithTemplateIOError(tplFile.getPath()); + } + return form; + } + @Override public Form asIOFile(FILE file) { diff --git a/designer-realize/src/test/java/com/fr/design/mainframe/app/DesignerAppUtilsTest.java b/designer-realize/src/test/java/com/fr/design/mainframe/app/DesignerAppUtilsTest.java new file mode 100644 index 0000000000..c2f7ef7695 --- /dev/null +++ b/designer-realize/src/test/java/com/fr/design/mainframe/app/DesignerAppUtilsTest.java @@ -0,0 +1,106 @@ +package com.fr.design.mainframe.app; + +import com.fr.invoke.Reflect; +import com.fr.plugin.context.PluginMarker; +import com.fr.plugin.context.PluginMarkerAdapter; +import com.fr.plugin.engine.remote.PluginRemoteSync; +import com.fr.stable.TemplateIOErrorContextHolder; +import com.fr.third.guava.collect.Multimap; +import org.easymock.EasyMock; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.api.easymock.PowerMock; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; + +/** + * @author vito + * @version 10.0 + * Created by vito on 2021/5/31 + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest({PluginRemoteSync.class}) +public class DesignerAppUtilsTest { + @Test + public void testDealWithErrorDetailMultiLineAndCache() { + TemplateIOErrorContextHolder.registerPluginNameMap(new HashMap() {{ + put("2", "好用的插件"); + }},new HashSet<>()); + TemplateIOErrorContextHolder.addNeedEnablePlugin(PluginMarkerAdapter.create("1", "1.0", "1插件")); + TemplateIOErrorContextHolder.addNeedInstallPlugin(PluginMarker.create("2", "1.0")); + TemplateIOErrorContextHolder.addNeedInstallPlugin(PluginMarker.create("3", "1.0")); + String log = DesignerAppUtils.dealWithErrorDetailMultiLineAndCache("template1"); + Assert.assertTrue(log.contains("1插件")); + Assert.assertTrue(log.contains("好用的插件")); + Assert.assertTrue(log.contains("3")); + Multimap map = DesignerAppUtils.popPluginInfoMap("template1"); + Assert.assertEquals(3, map.size()); + Assert.assertNull(DesignerAppUtils.popPluginInfoMap("template1")); + } + + @Test + public void testInvalidatePlugins() { + TemplateIOErrorContextHolder.registerPluginNameMap(new HashMap() {{ + put("2", "好用的插件"); + }},new HashSet<>()); + TemplateIOErrorContextHolder.addNeedEnablePlugin(PluginMarkerAdapter.create("1", "1.0", "1插件")); + TemplateIOErrorContextHolder.addNeedInstallPlugin(PluginMarker.create("2", "1.0")); + TemplateIOErrorContextHolder.addNeedInstallPlugin(PluginMarker.create("3", "1.0")); + String log = DesignerAppUtils.dealWithErrorDetailMultiLineAndCache("template1"); + Assert.assertTrue(log.contains("1插件")); + Assert.assertTrue(log.contains("好用的插件")); + Assert.assertTrue(log.contains("3")); + DesignerAppUtils.invalidatePlugins("template1"); + Assert.assertNull(DesignerAppUtils.popPluginInfoMap("template1")); + } + + @Test + public void testRearrange(){ + // 远程插件模拟注册 + PluginRemoteSync pluginRemoteSync = EasyMock.createMock(PluginRemoteSync.class); + EasyMock.expect(pluginRemoteSync.getPluginRemoteStatusByIdIndex()).andReturn(new HashMap(){{ + put("com.fr.plugin1", Reflect.on(PluginRemoteSync.PluginStatus.class).call("create","com.fr.plugin1","1",true).get()); + put("com.fr.plugin2", Reflect.on(PluginRemoteSync.PluginStatus.class).call("create","com.fr.plugin2","1",true).get()); + put("com.fr.plugin3", Reflect.on(PluginRemoteSync.PluginStatus.class).call("create","com.fr.plugin3","1",false).get()); + put("com.fr.plugin4", Reflect.on(PluginRemoteSync.PluginStatus.class).call("create","com.fr.plugin4","1",false).get()); + }}).anyTimes(); + EasyMock.replay(pluginRemoteSync); + PowerMock.mockStaticPartial(PluginRemoteSync.class, "getInstance"); + EasyMock.expect(PluginRemoteSync.getInstance()).andReturn(pluginRemoteSync).anyTimes(); + PowerMock.replay(PluginRemoteSync.class); + + // 本地插件模拟检查 + TemplateIOErrorContextHolder.registerPluginNameMap(new HashMap() {{ + put("com.fr.plugin1", "好用的插件1"); + put("com.fr.plugin2", "好用的插件2"); + put("com.fr.plugin3", "好用的插件3"); + put("com.fr.plugin4", "好用的插件4"); + put("com.fr.plugin5", "好用的插件5"); + }},new HashSet<>()); + // unknown + TemplateIOErrorContextHolder.addNeedInstallPlugin(PluginMarker.create("com.fr.plugin7", "1")); + // disable + TemplateIOErrorContextHolder.addNeedEnablePlugin(PluginMarkerAdapter.create("com.fr.plugin5", "1", "plugin5")); + TemplateIOErrorContextHolder.addNeedInstallPlugin(PluginMarker.create("com.fr.plugin3", "1")); + // not install + TemplateIOErrorContextHolder.addNeedInstallPlugin(PluginMarker.create("com.fr.plugin1", "1")); + TemplateIOErrorContextHolder.addNeedInstallPlugin(PluginMarker.create("com.fr.plugin4", "1")); + + Multimap pendingPlugins = TemplateIOErrorContextHolder.getPendingPlugin(); + + Reflect.on(DesignerAppUtils.class).call("rearrange",pendingPlugins).get(); + Assert.assertEquals(1,pendingPlugins.get(TemplateIOErrorContextHolder.UNKNOWN_PLUGIN).size()); + Collection pluginMarkerAdapters = pendingPlugins.get(TemplateIOErrorContextHolder.DISABLE_PLUGIN); + Assert.assertEquals(2, pluginMarkerAdapters.size()); + pluginMarkerAdapters.contains(PluginMarker.create("com.fr.plugin3", "1")); + pluginMarkerAdapters.contains(PluginMarker.create("com.fr.plugin4", "1")); + Collection pluginMarkerAdapters1 = pendingPlugins.get(TemplateIOErrorContextHolder.NOT_INSTALLED_PLUGIN); + Assert.assertEquals(1, pluginMarkerAdapters1.size()); + pluginMarkerAdapters1.contains(PluginMarker.create("com.fr.plugin5","1")); + } +} From 9bc67ee4758c7ad9684fef1b1d88345c8bc38ffb Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Mon, 31 May 2021 18:46:14 +0800 Subject: [PATCH 047/148] =?UTF-8?q?REPORT-53022=20=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=BA=93=E5=88=B7=E6=96=B0=E5=90=8E=E7=9A=84?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mainframe/share/ui/local/GroupPane.java | 3 +++ .../design/mainframe/share/ui/local/LocalWidgetSelectPane.java | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/GroupPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/GroupPane.java index bfa6343e06..05507a786f 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/GroupPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/GroupPane.java @@ -18,6 +18,7 @@ import com.fr.design.utils.gui.GUICoreUtils; import com.fr.form.share.SharableWidgetProvider; import com.fr.form.share.group.DefaultShareGroupManager; import com.fr.form.share.Group; +import com.fr.form.share.record.ShareWidgetInfoManager; import com.fr.general.IOUtils; import com.fr.stable.StringUtils; @@ -100,6 +101,8 @@ class GroupPane extends JPanel { searchByKeyword(keyWord); return; } + ShareWidgetInfoManager.getInstance().checkInstallCompInfo(elCaseBindInfoList); + sortType.sort(elCaseBindInfoList); reCreateShowPane(elCaseBindInfoList); expendGroup(needExpendGroup); } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetSelectPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetSelectPane.java index 8c6a9a6c3a..44bdd0fa5d 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetSelectPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetSelectPane.java @@ -73,7 +73,6 @@ public class LocalWidgetSelectPane extends AbstractWidgetSelectPane { } else { showEmpty(); } - ShareWidgetInfoManager.getInstance().checkInstallCompInfo(providers); } public Group getGroup() { From f3477809dc2405201d85391d9f02281df9a50827 Mon Sep 17 00:00:00 2001 From: vito Date: Tue, 1 Jun 2021 10:59:06 +0800 Subject: [PATCH 048/148] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20desig?= =?UTF-8?q?ner=E6=89=93=E5=8C=85=E5=BC=95=E7=94=A8=E6=B7=B7=E6=B7=86?= =?UTF-8?q?=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/app/DesignerAppActivator.java | 2 + .../mainframe/app/DesignerAppUtils.java | 12 +- .../fr/design/mainframe/app/PluginRemote.java | 138 ++++++++++++++++++ 3 files changed, 146 insertions(+), 6 deletions(-) create mode 100644 designer-realize/src/main/java/com/fr/design/mainframe/app/PluginRemote.java diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppActivator.java b/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppActivator.java index ec425847dc..e4038ab42e 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppActivator.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppActivator.java @@ -19,6 +19,7 @@ public class DesignerAppActivator extends Activator implements Prepare { for (App app : appList) { JTemplateFactory.register(app); } + PluginRemote.getInstance().start(); } @Override @@ -28,6 +29,7 @@ public class DesignerAppActivator extends Activator implements Prepare { for (App app : appList) { JTemplateFactory.remove(app); } + PluginRemote.getInstance().stop(); } @Override diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java b/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java index 2064bc0449..e0dfb3b6cb 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java @@ -6,11 +6,11 @@ import com.fr.design.extra.exe.callback.InstallOnlineCallback; import com.fr.design.extra.exe.callback.ModifyStatusCallback; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.app.PluginRemote.PluginStatus; import com.fr.design.ui.util.UIUtil; import com.fr.locale.InterProviderFactory; import com.fr.plugin.context.PluginMarker; import com.fr.plugin.context.PluginMarkerAdapter; -import com.fr.plugin.engine.remote.PluginRemoteSync; import com.fr.plugin.manage.PluginManager; import com.fr.plugin.manage.control.PluginControllerHelper; import com.fr.plugin.manage.control.PluginTask; @@ -130,21 +130,21 @@ public class DesignerAppUtils { * @param pendingPlugins 待处理列表 */ public static void rearrange(Multimap pendingPlugins) { - Map pluginRemoteStatusByIdIndex = PluginRemoteSync.getInstance().getPluginRemoteStatusByIdIndex(); + Map pluginRemoteStatus = PluginRemote.getInstance().getPluginRemoteStatus(); Collection unknownPlugins = pendingPlugins.get(TemplateIOErrorContextHolder.UNKNOWN_PLUGIN); Collection notInstall = pendingPlugins.get(TemplateIOErrorContextHolder.NOT_INSTALLED_PLUGIN); Collection disable = pendingPlugins.get(TemplateIOErrorContextHolder.DISABLE_PLUGIN); - unknownPlugins.removeIf(adapter -> pluginRemoteStatusByIdIndex.containsKey(adapter.getPluginID())); + unknownPlugins.removeIf(adapter -> pluginRemoteStatus.containsKey(adapter.getPluginID())); // 本地未启用名单不准确添加到一起之后重新分配 notInstall.addAll(disable); disable.clear(); // 从所有未安装中过滤远程未启用的,添加到未启用列表 disable.addAll(notInstall.stream().filter(plugin -> - pluginRemoteStatusByIdIndex.containsKey(plugin.getPluginID()) - && !pluginRemoteStatusByIdIndex.get(plugin.getPluginID()).isRunning()) + pluginRemoteStatus.containsKey(plugin.getPluginID()) + && !pluginRemoteStatus.get(plugin.getPluginID()).isRunning()) .collect(Collectors.toList())); // 清理未安装中所有远程安装过的插件(包含启用和未启用) - notInstall.removeIf(adapter -> pluginRemoteStatusByIdIndex.containsKey(adapter.getPluginID())); + notInstall.removeIf(adapter -> pluginRemoteStatus.containsKey(adapter.getPluginID())); } /** diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/app/PluginRemote.java b/designer-realize/src/main/java/com/fr/design/mainframe/app/PluginRemote.java new file mode 100644 index 0000000000..4bd4bdccc3 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/mainframe/app/PluginRemote.java @@ -0,0 +1,138 @@ +package com.fr.design.mainframe.app; + +import com.fr.base.FRContext; +import com.fr.json.JSONArray; +import com.fr.json.JSONException; +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.plugin.context.PluginMarker; +import com.fr.stable.StringUtils; +import com.fr.value.AtomicClearableLazyValue; +import com.fr.workspace.WorkContext; +import org.jetbrains.annotations.NotNull; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +/** + * 获取远程插件情况,定时刷新 + * + * @author vito + * @version 10.0 + * Created by vito on 2021/6/1 + */ +public class PluginRemote { + + private static final PluginRemote INSTANCE = new PluginRemote(); + private final AtomicClearableLazyValue> lazyValue = new AtomicClearableLazyValue>() { + @NotNull + @Override + protected Map compute() { + return getRemoteStatus(); + } + }; + + /** + * 时间间隔两分钟 + */ + private static final int INTERVAL = 2; + + private ScheduledExecutorService executor; + + public static PluginRemote getInstance() { + + return INSTANCE; + } + + /** + * 获取远程插件状态 + * @return 远程插件状态 + */ + public Map getPluginRemoteStatus() { + return lazyValue.getValue(); + } + + private Map getRemoteStatus() { + + JSONArray statusArray = FRContext.getCommonOperator().getPluginStatus(); + JSONObject status; + String id; + String version; + boolean running; + Map statusMap = new HashMap<>(); + for (int i = 0; i < statusArray.length(); i++) { + try { + status = statusArray.getJSONObject(i); + id = status.getString("id"); + version = status.getString("version"); + running = status.getBoolean("running"); + if(StringUtils.isBlank(id)){ + continue; + } + PluginStatus pluginStatus = PluginStatus.create(id, version, running); + if (pluginStatus != null) { + statusMap.put(id, pluginStatus); + } + } catch (JSONException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + return statusMap; + } + + + public void start() { + // 远程环境下开始同步插件情况 + if (!WorkContext.getCurrent().isLocal()) { + executor = Executors.newSingleThreadScheduledExecutor(); + executor.scheduleAtFixedRate(() -> { + lazyValue.drop(); + lazyValue.getValue(); + }, 0, INTERVAL, TimeUnit.MINUTES); + } + } + + public void stop() { + + if (executor != null) { + executor.shutdown(); + executor = null; + lazyValue.drop(); + } + } + + public static class PluginStatus { + + private final PluginMarker marker; + + private final boolean running; + + private PluginStatus(PluginMarker marker, boolean running) { + + this.marker = marker; + this.running = running; + } + + static PluginStatus create(String id, String version, boolean running) { + + PluginMarker marker = PluginMarker.create(id, version); + if (marker != null && marker.valid()) { + return new PluginStatus(marker, running); + } + return null; + } + + public PluginMarker getMarker() { + + return marker; + } + + public boolean isRunning() { + + return running; + } + } +} From e17b41cb912045745bf7c84ab07f0f482d61e82d Mon Sep 17 00:00:00 2001 From: hades Date: Tue, 1 Jun 2021 11:46:34 +0800 Subject: [PATCH 049/148] =?UTF-8?q?REPORT-51683=20=E5=AF=B9=E8=B1=A1/class?= =?UTF-8?q?loader=E8=BF=87=E6=BB=A4=E7=BC=A9=E7=95=A5=E5=9B=BE=20=E5=89=AA?= =?UTF-8?q?=E6=9E=9D=E5=8A=A0=E9=80=9F=E6=9F=A5=E6=89=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/file/filter/ClassFilter.java | 3 +++ .../src/main/java/com/fr/design/mod/ModClassFilter.java | 3 +++ 2 files changed, 6 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/file/filter/ClassFilter.java b/designer-base/src/main/java/com/fr/design/file/filter/ClassFilter.java index c04d806345..6c998f4ef1 100644 --- a/designer-base/src/main/java/com/fr/design/file/filter/ClassFilter.java +++ b/designer-base/src/main/java/com/fr/design/file/filter/ClassFilter.java @@ -5,6 +5,8 @@ import java.util.HashSet; import java.util.Set; /** + * classloader查找过滤器 + * * 过滤无需遍历的jdk class * * @author hades @@ -26,6 +28,7 @@ public class ClassFilter implements Filter { FILTER_SET.add("java.awt.image.BufferedImage"); FILTER_SET.add("sun.awt.AppContext"); FILTER_SET.add("com.fr.poly.creator.ECBlockCreator"); + FILTER_SET.add("com.fr.form.ui.ElementCaseImage"); } @Override diff --git a/designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java b/designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java index 4bf02549a4..7caa88ac49 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java +++ b/designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java @@ -5,6 +5,8 @@ import java.util.HashSet; import java.util.Set; /** + * 联动修改的类过滤器 + * * @author hades * @version 10.0 * Created by hades on 2021/5/31 @@ -24,6 +26,7 @@ public class ModClassFilter implements Filter { FILTER_SET.add("sun.awt.AppContext"); FILTER_SET.add("com.fr.poly.creator.ECBlockCreator"); FILTER_SET.add("io.netty.channel.nio.SelectedSelectionKeySet"); + FILTER_SET.add("com.fr.form.ui.ElementCaseImage"); } @Override From 648f175fe07297ead80bff677866bc8070b6d42b Mon Sep 17 00:00:00 2001 From: kerry Date: Tue, 1 Jun 2021 15:35:42 +0800 Subject: [PATCH 050/148] =?UTF-8?q?REPORT-53036=20=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=A4=8D=E7=94=A8-=E5=90=88=E5=85=A5=E4=B8=BB=E7=89=88?= =?UTF-8?q?=E6=9C=AC-=E4=B8=8B=E6=BB=91=E5=87=BA=E7=8E=B0=E7=9A=84?= =?UTF-8?q?=E5=A4=8D=E7=94=A8=E7=BB=84=E4=BB=B6=E6=8F=90=E7=A4=BA=EF=BC=8C?= =?UTF-8?q?=E8=93=9D=E5=AD=97=E9=A2=84=E6=9C=9F=E6=98=AF=E2=80=9C=E5=A4=8D?= =?UTF-8?q?=E7=94=A8=E7=BB=84=E4=BB=B6=E2=80=9D=EF=BC=8C=E7=8E=B0=E5=9C=A8?= =?UTF-8?q?=E6=98=AF=E2=80=9C=E7=BB=84=E4=BB=B6=E5=A4=8D=E7=94=A8=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mainframe/ReuseTriggerPointManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/ReuseTriggerPointManager.java b/designer-form/src/main/java/com/fr/design/mainframe/ReuseTriggerPointManager.java index beb779be8c..e0b975fb0c 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/ReuseTriggerPointManager.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/ReuseTriggerPointManager.java @@ -177,7 +177,7 @@ public class ReuseTriggerPointManager { private JPanel createReusePrompt(JForm jForm) { JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); jPanel.add(new UILabel(Toolkit.i18nText("Fine-Design_Component_Reuse_Try_Prompt")), BorderLayout.WEST); - UILabel reuseLabel = new UILabel(Toolkit.i18nText("Fine-Design_Component_Reuse")); + UILabel reuseLabel = new UILabel(Toolkit.i18nText("Fine-Design_Share_Component")); reuseLabel.addMouseListener(new MouseListener() { @Override public void mouseClicked(MouseEvent e) { From b5a2274d48670c946787cb532e22ee10168dddc7 Mon Sep 17 00:00:00 2001 From: kerry Date: Tue, 1 Jun 2021 16:18:43 +0800 Subject: [PATCH 051/148] =?UTF-8?q?KERNEL-7974=20=E7=9C=8B=E4=B8=8B?= =?UTF-8?q?=E6=96=B0=E7=9A=84=E6=8E=A7=E4=BB=B6=E5=BC=8F=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=81=9A=E6=88=90=E6=8F=92=E4=BB=B6=E6=94=AF=E6=8C=81=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E5=BC=80=E6=94=BE=E4=BB=80=E4=B9=88=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/designer/creator/XCreator.java | 8 ++++- .../fr/design/fun/ShareWidgetUIProcessor.java | 29 +++++++++++++++++++ .../impl/AbstractShareWidgetUIProcessor.java | 19 ++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 designer-form/src/main/java/com/fr/design/fun/ShareWidgetUIProcessor.java create mode 100644 designer-form/src/main/java/com/fr/design/fun/impl/AbstractShareWidgetUIProcessor.java diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java b/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java index 3cd33d6c34..01d53f850c 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java @@ -5,11 +5,13 @@ package com.fr.design.designer.creator; import com.fr.base.GraphHelper; import com.fr.base.vcs.DesignerMode; +import com.fr.design.ExtraDesignClassManager; import com.fr.design.actions.UpdateAction; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.beans.events.DesignerEditor; import com.fr.design.designer.beans.models.SelectionModel; +import com.fr.design.fun.ShareWidgetUIProcessor; import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.layout.FRGUIPaneFactory; @@ -298,6 +300,10 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo @Override public JComponent createToolPane(BaseJForm jform, FormDesigner formEditor) { if (!DesignerMode.isAuthorityEditing()) { + ShareWidgetUIProcessor exportProcessor = ExtraDesignClassManager.getInstance().getSingle(ShareWidgetUIProcessor.MARK_STRING); + if (exportProcessor != null) { + return exportProcessor.createToolPane(this, jform, formEditor); + } if (isDedicateContainer() && this.getComponentCount() > 0) { // 图表块和报表块由于控件树处不显示,但对应的属性表要显示,此处处理下 XCreator child = ((XLayoutContainer) this).getXCreator(0); @@ -789,7 +795,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo public boolean isTopable() { return true; } - + } diff --git a/designer-form/src/main/java/com/fr/design/fun/ShareWidgetUIProcessor.java b/designer-form/src/main/java/com/fr/design/fun/ShareWidgetUIProcessor.java new file mode 100644 index 0000000000..510b2cddd4 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/fun/ShareWidgetUIProcessor.java @@ -0,0 +1,29 @@ +package com.fr.design.fun; + +import com.fr.design.designer.creator.XCreator; +import com.fr.design.mainframe.BaseJForm; +import com.fr.design.mainframe.FormDesigner; +import com.fr.stable.fun.mark.Immutable; + +import javax.swing.JComponent; + + +/** + * Created by kerry on 5/28/21 + */ +public interface ShareWidgetUIProcessor extends Immutable { + + String MARK_STRING = "ShareWidgetUIProcessor"; + + int CURRENT_LEVEL = 1; + + /** + * 生成属性配置界面 + * + * @param xCreator 选中的Xcreator + * @param formDesigner 表单设计器 + * @return 属性配置界面 + */ + JComponent createToolPane(XCreator xCreator, BaseJForm jform, FormDesigner formDesigner); + +} diff --git a/designer-form/src/main/java/com/fr/design/fun/impl/AbstractShareWidgetUIProcessor.java b/designer-form/src/main/java/com/fr/design/fun/impl/AbstractShareWidgetUIProcessor.java new file mode 100644 index 0000000000..e0eddd09d0 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/fun/impl/AbstractShareWidgetUIProcessor.java @@ -0,0 +1,19 @@ +package com.fr.design.fun.impl; + +import com.fr.design.fun.ShareWidgetUIProcessor; +import com.fr.stable.fun.mark.API; + +/** + * Created by kerry on 5/28/21 + */ +@API(level = ShareWidgetUIProcessor.CURRENT_LEVEL) +public abstract class AbstractShareWidgetUIProcessor implements ShareWidgetUIProcessor { + + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + public int layerIndex() { + return DEFAULT_LAYER_INDEX; + } +} From c21154e1fc548994735bfaa7e26af3349730f82c Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Tue, 1 Jun 2021 18:18:32 +0800 Subject: [PATCH 052/148] =?UTF-8?q?REPORT-52928=20=E5=9F=8B=E7=82=B9?= =?UTF-8?q?=E5=8F=AA=E7=BB=9F=E8=AE=A1=E6=9C=89=E7=89=B9=E6=AE=8A=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E7=9A=84=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mainframe/JForm.java | 14 ------ .../fr/design/share/SharableInitManager.java | 16 ------ .../com/fr/design/share/SharableManager.java | 49 +++++++++++++++++++ .../design/share/utils/EffectItemUtils.java | 5 ++ .../main/java/com/fr/start/MainDesigner.java | 2 + .../fr/start/module/DesignerActivator.java | 4 +- 6 files changed, 58 insertions(+), 32 deletions(-) delete mode 100644 designer-realize/src/main/java/com/fr/design/share/SharableInitManager.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/SharableManager.java diff --git a/designer-form/src/main/java/com/fr/design/mainframe/JForm.java b/designer-form/src/main/java/com/fr/design/mainframe/JForm.java index c67280caa1..3ddc16c9c9 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/JForm.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/JForm.java @@ -346,20 +346,6 @@ public class JForm extends JTemplate implements BaseJForm xCreators = ShareComponentUtils.getHelpConfigXCreatorList(root); - JSONArray helpConfigUseInfo = ComponentCollector.getInstance().getHelpConfigUseInfoWithTemplate(jt.getTarget().getTemplateID()); - for (XCreator xCreator : xCreators) { - if (helpConfigUseInfo.contains(ShareComponentUtils.getWidgetId(xCreator.toData()))) { - useCount++; - } - } - ComponentCollector.getInstance().collectHelpConfigInfo(jt.getTarget().getTemplateID(), xCreators.size(), useCount); - } - } }); diff --git a/designer-realize/src/main/java/com/fr/design/share/SharableInitManager.java b/designer-realize/src/main/java/com/fr/design/share/SharableInitManager.java deleted file mode 100644 index a01068421c..0000000000 --- a/designer-realize/src/main/java/com/fr/design/share/SharableInitManager.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.fr.design.share; - -import com.fr.design.base.clipboard.ClipboardFilter; -import com.fr.design.mainframe.share.collect.SharableCollectorManager; -import com.fr.design.mainframe.share.encrypt.clipboard.impl.EncryptSelectionClipboardHandler; -import com.fr.design.mainframe.share.encrypt.clipboard.impl.EncryptTransferableClipboardHandler; -import com.fr.design.mainframe.share.util.SharableXMLUtils; - -public class SharableInitManager { - public static void start() { - SharableXMLUtils.registerSharableReadHelper(); - SharableCollectorManager.getInstance().execute(); - ClipboardFilter.registerClipboardHandler(EncryptSelectionClipboardHandler.getInstance()); - ClipboardFilter.registerClipboardHandler(EncryptTransferableClipboardHandler.getInstance()); - } -} diff --git a/designer-realize/src/main/java/com/fr/design/share/SharableManager.java b/designer-realize/src/main/java/com/fr/design/share/SharableManager.java new file mode 100644 index 0000000000..ba3b830643 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/SharableManager.java @@ -0,0 +1,49 @@ +package com.fr.design.share; + +import com.fr.design.base.clipboard.ClipboardFilter; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.mainframe.JForm; +import com.fr.design.mainframe.JTemplate; +import com.fr.design.mainframe.share.collect.ComponentCollector; +import com.fr.design.mainframe.share.collect.SharableCollectorManager; +import com.fr.design.mainframe.share.encrypt.clipboard.impl.EncryptSelectionClipboardHandler; +import com.fr.design.mainframe.share.encrypt.clipboard.impl.EncryptTransferableClipboardHandler; +import com.fr.design.mainframe.share.util.SharableXMLUtils; +import com.fr.design.mainframe.share.util.ShareComponentUtils; +import com.fr.design.share.utils.EffectItemUtils; +import com.fr.json.JSONArray; + +import java.util.List; + +public class SharableManager { + public static void start() { + SharableXMLUtils.registerSharableReadHelper(); + SharableCollectorManager.getInstance().execute(); + ClipboardFilter.registerClipboardHandler(EncryptSelectionClipboardHandler.getInstance()); + ClipboardFilter.registerClipboardHandler(EncryptTransferableClipboardHandler.getInstance()); + } + + public static void saveTemplate(JTemplate jt) { + if (jt instanceof JForm) { + int showCount = 0; + int useCount = 0; + if (!jt.getProcessInfo().isTestTemplate()) { + JForm jForm = (JForm) jt; + XLayoutContainer root = jForm.getFormDesign().getRootComponent(); + List xCreators = ShareComponentUtils.getHelpConfigXCreatorList(root); + JSONArray helpConfigUseInfo = ComponentCollector.getInstance().getHelpConfigUseInfoWithTemplate(jForm.getTarget().getTemplateID()); + for (XCreator xCreator : xCreators) { + if (EffectItemUtils.hasEffectItem(xCreator.toData())) { + showCount ++; + if (helpConfigUseInfo.contains(ShareComponentUtils.getWidgetId(xCreator.toData()))) { + useCount++; + } + } + } + + ComponentCollector.getInstance().collectHelpConfigInfo(jForm.getTarget().getTemplateID(), showCount, useCount); + } + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/utils/EffectItemUtils.java b/designer-realize/src/main/java/com/fr/design/share/utils/EffectItemUtils.java index 010828cf1f..99391d8c94 100644 --- a/designer-realize/src/main/java/com/fr/design/share/utils/EffectItemUtils.java +++ b/designer-realize/src/main/java/com/fr/design/share/utils/EffectItemUtils.java @@ -19,4 +19,9 @@ public class EffectItemUtils { } return effectItemGroupList; } + + public static boolean hasEffectItem(Widget widget) { + EffectItemGroup effectItemGroup = new EffectItemGroup(widget); + return effectItemGroup.getEffectItems().size() > 0; + } } diff --git a/designer-realize/src/main/java/com/fr/start/MainDesigner.java b/designer-realize/src/main/java/com/fr/start/MainDesigner.java index 5d39647714..389538b2b3 100644 --- a/designer-realize/src/main/java/com/fr/start/MainDesigner.java +++ b/designer-realize/src/main/java/com/fr/start/MainDesigner.java @@ -38,6 +38,7 @@ import com.fr.design.module.ChartEmptyDataStyleAction; import com.fr.design.module.ChartPreStyleAction; import com.fr.design.module.DesignModuleFactory; import com.fr.design.monitor.DesignerLifecycleMonitorContext; +import com.fr.design.share.SharableManager; import com.fr.design.utils.concurrent.ThreadFactoryBuilder; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.event.Event; @@ -235,6 +236,7 @@ public class MainDesigner extends BaseDesigner { jt.stopEditing(); jt.saveDirectly(); jt.requestFocus(); + SharableManager.saveTemplate(jt); } }); } diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java index e73e9387f6..ef3baffd4a 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java @@ -61,7 +61,7 @@ import com.fr.design.os.impl.SupportOSImpl; import com.fr.design.parameter.FormParameterReader; import com.fr.design.parameter.ParameterPropertyPane; import com.fr.design.parameter.WorkBookParameterReader; -import com.fr.design.share.SharableInitManager; +import com.fr.design.share.SharableManager; import com.fr.design.share.ui.config.ShareConfigPane; import com.fr.design.share.ui.generate.ShareGeneratePane; import com.fr.design.update.actions.RecoverForDesigner; @@ -207,7 +207,7 @@ public class DesignerActivator extends Activator { designerRegister(); InformationCollector.getInstance().collectStartTime(); - SharableInitManager.start(); + SharableManager.start(); } private void createPluginListener() { From e1ba505b503bfabcec5e47eb1ebb3078f0531cde Mon Sep 17 00:00:00 2001 From: hades Date: Wed, 2 Jun 2021 10:37:05 +0800 Subject: [PATCH 053/148] =?UTF-8?q?REPORT-53156=20=E3=80=90=E6=99=BA?= =?UTF-8?q?=E8=83=BD=E8=81=94=E5=8A=A8=E3=80=91=E7=BB=84=E4=BB=B6=E6=8B=96?= =?UTF-8?q?=E5=85=A5=E6=97=B6=EF=BC=8C=E6=8E=A7=E4=BB=B6=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E6=95=B0=E6=8D=AE=E9=9B=86=E7=9A=84=E5=9C=B0?= =?UTF-8?q?=E6=96=B9=E6=B2=A1=E6=9C=89=E5=8F=91=E7=94=9F=E6=9B=BF=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mod/ContentObjectManager.java | 3 +- .../fr/design/mod/ContentReplacerCenter.java | 2 ++ .../change/NameTableDataContentChange.java | 34 +++++++++++++++++++ .../repalce/NameTableDataContentReplacer.java | 17 ++++++++++ 4 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/NameTableDataContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/repalce/NameTableDataContentReplacer.java diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java b/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java index 72ea9bb637..4d8f0cec1a 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java @@ -3,7 +3,7 @@ package com.fr.design.mod; import com.fr.base.Formula; import com.fr.chart.web.ChartHyperRelateCellLink; import com.fr.chart.web.ChartHyperRelateFloatLink; -import com.fr.design.file.filter.ClassFilter; +import com.fr.data.impl.NameTableData; import com.fr.invoke.ClassHelper; import com.fr.js.JavaScriptImpl; import com.fr.plugin.chart.base.VanChartHtmlLabel; @@ -41,6 +41,7 @@ public class ContentObjectManager { set.add(ChartHyperRelateCellLink.class.getName()); set.add(ChartHyperRelateFloatLink.class.getName()); set.add(VanChartHtmlLabel.class.getName()); + set.add(NameTableData.class.getName()); } public void searchObject(Object ob) { diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java b/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java index 3a18a6ea20..de690e623c 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java @@ -8,6 +8,7 @@ import com.fr.design.mod.impl.change.ChartHyperRelateCellLinkContentChange; import com.fr.design.mod.impl.change.ChartHyperRelateFloatLinkContentChange; import com.fr.design.mod.impl.change.FormulaContentChange; import com.fr.design.mod.impl.change.JavaScriptContentChange; +import com.fr.design.mod.impl.change.NameTableDataContentChange; import com.fr.design.mod.impl.change.VanChartHtmlLabelContentChange; import com.fr.event.Event; import com.fr.event.EventDispatcher; @@ -73,6 +74,7 @@ public class ContentReplacerCenter { contentChangeList.add(new FormulaContentChange()); contentChangeList.add(new JavaScriptContentChange()); contentChangeList.add(new VanChartHtmlLabelContentChange()); + contentChangeList.add(new NameTableDataContentChange()); } private void onRename(List contentChangeItemList, List contentChangeList) { diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/NameTableDataContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/NameTableDataContentChange.java new file mode 100644 index 0000000000..a0a036cdfc --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/NameTableDataContentChange.java @@ -0,0 +1,34 @@ +package com.fr.design.mod.impl.change; + +import com.fr.data.impl.NameTableData; +import com.fr.design.mod.ContentChange; +import com.fr.design.mod.ContentReplacer; +import com.fr.design.mod.bean.ChangeItem; +import com.fr.design.mod.impl.repalce.NameTableDataContentReplacer; +import java.util.HashMap; +import java.util.Map; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class NameTableDataContentChange implements ContentChange { + + private final Map> map; + + public NameTableDataContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.TABLE_DATA_NAME, new NameTableDataContentReplacer()); + } + + @Override + public String type() { + return NameTableData.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/NameTableDataContentReplacer.java b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/NameTableDataContentReplacer.java new file mode 100644 index 0000000000..eae4344d7e --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/NameTableDataContentReplacer.java @@ -0,0 +1,17 @@ +package com.fr.design.mod.impl.repalce; + +import com.fr.data.impl.NameTableData; +import com.fr.design.mod.ContentReplacer; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class NameTableDataContentReplacer implements ContentReplacer { + + @Override + public void replace(NameTableData nameTableData, String oldName, String newName) { + nameTableData.rename(oldName, newName); + } +} From a83d2616adcabee00396391e1003d4cbb25644e8 Mon Sep 17 00:00:00 2001 From: hades Date: Wed, 2 Jun 2021 10:39:35 +0800 Subject: [PATCH 054/148] =?UTF-8?q?REPORT-53157=20=E3=80=90=E6=99=BA?= =?UTF-8?q?=E8=83=BD=E8=81=94=E5=8A=A8=E3=80=91=E7=BB=84=E4=BB=B6=E6=8B=96?= =?UTF-8?q?=E5=85=A5=E6=97=B6=EF=BC=8C=E5=8D=95=E5=85=83=E6=A0=BC=E4=BD=8D?= =?UTF-8?q?=E7=BD=AE=E5=BC=95=E7=94=A8=E6=95=B0=E6=8D=AE=E9=9B=86=E7=9A=84?= =?UTF-8?q?=E5=9C=B0=E6=96=B9=E6=9C=AA=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mod/ContentObjectManager.java | 4 +++ .../fr/design/mod/ContentReplacerCenter.java | 4 +++ .../impl/change/DSColumnContentChange.java | 34 +++++++++++++++++++ .../change/SimpleDSColumnContentChange.java | 34 +++++++++++++++++++ .../impl/repalce/DSColumnContentReplacer.java | 20 +++++++++++ .../SimpleDSColumnContentReplacer.java | 20 +++++++++++ .../mainframe/FormCreatorDropTarget.java | 7 ++++ 7 files changed, 123 insertions(+) create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/DSColumnContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/SimpleDSColumnContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumnContentReplacer.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/repalce/SimpleDSColumnContentReplacer.java diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java b/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java index 4d8f0cec1a..bde02bfc26 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java @@ -3,10 +3,12 @@ package com.fr.design.mod; import com.fr.base.Formula; import com.fr.chart.web.ChartHyperRelateCellLink; import com.fr.chart.web.ChartHyperRelateFloatLink; +import com.fr.data.SimpleDSColumn; import com.fr.data.impl.NameTableData; import com.fr.invoke.ClassHelper; import com.fr.js.JavaScriptImpl; import com.fr.plugin.chart.base.VanChartHtmlLabel; +import com.fr.report.cell.cellattr.core.group.DSColumn; import com.fr.stable.Filter; import java.util.HashSet; import java.util.Map; @@ -42,6 +44,8 @@ public class ContentObjectManager { set.add(ChartHyperRelateFloatLink.class.getName()); set.add(VanChartHtmlLabel.class.getName()); set.add(NameTableData.class.getName()); + set.add(SimpleDSColumn.class.getName()); + set.add(DSColumn.class.getName()); } public void searchObject(Object ob) { diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java b/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java index de690e623c..c8e459354b 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java @@ -6,9 +6,11 @@ import com.fr.design.mod.event.TableDataModifyEvent; import com.fr.design.mod.event.WidgetNameModifyEvent; import com.fr.design.mod.impl.change.ChartHyperRelateCellLinkContentChange; import com.fr.design.mod.impl.change.ChartHyperRelateFloatLinkContentChange; +import com.fr.design.mod.impl.change.DSColumnContentChange; import com.fr.design.mod.impl.change.FormulaContentChange; import com.fr.design.mod.impl.change.JavaScriptContentChange; import com.fr.design.mod.impl.change.NameTableDataContentChange; +import com.fr.design.mod.impl.change.SimpleDSColumnContentChange; import com.fr.design.mod.impl.change.VanChartHtmlLabelContentChange; import com.fr.event.Event; import com.fr.event.EventDispatcher; @@ -75,6 +77,8 @@ public class ContentReplacerCenter { contentChangeList.add(new JavaScriptContentChange()); contentChangeList.add(new VanChartHtmlLabelContentChange()); contentChangeList.add(new NameTableDataContentChange()); + contentChangeList.add(new SimpleDSColumnContentChange()); + contentChangeList.add(new DSColumnContentChange()); } private void onRename(List contentChangeItemList, List contentChangeList) { diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/DSColumnContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/DSColumnContentChange.java new file mode 100644 index 0000000000..be6e6e4ecb --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/DSColumnContentChange.java @@ -0,0 +1,34 @@ +package com.fr.design.mod.impl.change; + +import com.fr.design.mod.ContentChange; +import com.fr.design.mod.ContentReplacer; +import com.fr.design.mod.bean.ChangeItem; +import com.fr.design.mod.impl.repalce.DSColumnContentReplacer; +import com.fr.report.cell.cellattr.core.group.DSColumn; +import java.util.HashMap; +import java.util.Map; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class DSColumnContentChange implements ContentChange { + + private final Map> map; + + public DSColumnContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.TABLE_DATA_NAME, new DSColumnContentReplacer()); + } + + @Override + public String type() { + return DSColumn.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/SimpleDSColumnContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/SimpleDSColumnContentChange.java new file mode 100644 index 0000000000..b85eb3a2fb --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/SimpleDSColumnContentChange.java @@ -0,0 +1,34 @@ +package com.fr.design.mod.impl.change; + +import com.fr.data.SimpleDSColumn; +import com.fr.design.mod.ContentChange; +import com.fr.design.mod.ContentReplacer; +import com.fr.design.mod.bean.ChangeItem; +import com.fr.design.mod.impl.repalce.SimpleDSColumnContentReplacer; +import java.util.HashMap; +import java.util.Map; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class SimpleDSColumnContentChange implements ContentChange { + + private Map> map; + + public SimpleDSColumnContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.TABLE_DATA_NAME, new SimpleDSColumnContentReplacer()); + } + + @Override + public String type() { + return SimpleDSColumn.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumnContentReplacer.java b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumnContentReplacer.java new file mode 100644 index 0000000000..a1c131f6b5 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumnContentReplacer.java @@ -0,0 +1,20 @@ +package com.fr.design.mod.impl.repalce; + +import com.fr.design.mod.ContentReplacer; +import com.fr.general.ComparatorUtils; +import com.fr.report.cell.cellattr.core.group.DSColumn; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class DSColumnContentReplacer implements ContentReplacer { + + @Override + public void replace(DSColumn dsColumn, String oldName, String newName) { + if (ComparatorUtils.equals(dsColumn.getDSName(), oldName)) { + dsColumn.setDSName(newName); + } + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/SimpleDSColumnContentReplacer.java b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/SimpleDSColumnContentReplacer.java new file mode 100644 index 0000000000..0aa9fdd3d6 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/SimpleDSColumnContentReplacer.java @@ -0,0 +1,20 @@ +package com.fr.design.mod.impl.repalce; + +import com.fr.data.SimpleDSColumn; +import com.fr.design.mod.ContentReplacer; +import com.fr.general.ComparatorUtils; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class SimpleDSColumnContentReplacer implements ContentReplacer { + + @Override + public void replace(SimpleDSColumn simpleDSColumn, String oldName, String newName) { + if (ComparatorUtils.equals(simpleDSColumn.getDsName(), oldName)) { + simpleDSColumn.setDsName(newName); + } + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java b/designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java index 1b89400645..01a46d25b7 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java @@ -5,6 +5,7 @@ import com.fr.base.chart.BaseChartCollection; import com.fr.chart.chartattr.ChartCollection; import com.fr.chartx.attr.ChartProvider; import com.fr.design.DesignModelAdapter; +import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.datapane.TableDataTreePane; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.HoverPainter; @@ -34,6 +35,7 @@ import com.fr.stable.Constants; import com.fr.stable.StringUtils; import java.util.Collections; +import java.util.HashMap; import javax.swing.BorderFactory; import javax.swing.JWindow; import java.util.List; @@ -112,8 +114,13 @@ public class FormCreatorDropTarget extends DropTarget { tdNameMap = TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()).addTableData(bindInfo.getName(), sharableEditor.getTableDataSource(), true); //合并数据集之后,可能会有数据集名称变化,做一下联动 //共享的组件拿的时候都是克隆的,这边改拖拽中克隆的对象而非新克隆对象,上面这个新克隆的对象只是为了拿数据集 + Map map = new HashMap<>(); for (Map.Entry entry : tdNameMap.entrySet()) { designer.getTarget().renameTableData(widget, entry.getKey(), entry.getValue()); + map.put(entry.getKey(), entry.getValue()); + } + if (!map.isEmpty()) { + DesignTableDataManager.fireDSChanged(map); } } EventDispatcher.fire(TableDataModifyEvent.INSTANCE, new ContentChangeItem(tdNameMap, widget, ChangeItem.TABLE_DATA_NAME)); From 557873b3e3348fa58a51cb76189ba75f2b3a88b9 Mon Sep 17 00:00:00 2001 From: "Bruce.Deng" Date: Wed, 2 Jun 2021 10:43:55 +0800 Subject: [PATCH 055/148] =?UTF-8?q?REPORT-52525=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E6=95=B0=E6=8D=AE=E9=9B=86=E6=9F=A5=E8=AF=A2=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E5=A2=9E=E5=8A=A0=E5=A4=8D=E5=88=B6=E4=BC=A0=E5=8F=82?= =?UTF-8?q?=E5=90=8Esql=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../preview/sql/PreviewPerformedSqlPane.java | 264 ++++++++++++++++++ .../tabledatapane/DBTableDataPane.java | 17 ++ .../design/dialog/link/MessageWithLink.java | 18 +- .../java/com/fr/design/gui/UILookAndFeel.java | 1 + .../fr/design/images/lookandfeel/TipIcon.png | Bin 0 -> 402 bytes .../fr/design/images/m_file/preview_sql.png | Bin 0 -> 366 bytes 6 files changed, 297 insertions(+), 3 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java create mode 100644 designer-base/src/main/resources/com/fr/design/images/lookandfeel/TipIcon.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/m_file/preview_sql.png diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java new file mode 100644 index 0000000000..f0ed78c5ad --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java @@ -0,0 +1,264 @@ +package com.fr.design.data.datapane.preview.sql; + +import com.fr.base.Parameter; +import com.fr.base.ParameterHelper; +import com.fr.base.ParameterMapNameSpace; +import com.fr.data.impl.DBTableData; +import com.fr.data.impl.EscapeSqlHelper; +import com.fr.data.operator.DataOperator; +import com.fr.decision.webservice.v10.config.ConfigService; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.dialog.link.MessageWithLink; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.parameter.ParameterInputPane; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.plugin.injectable.PluginModule; +import com.fr.script.Calculator; +import com.fr.stable.ArrayUtils; +import com.fr.stable.ParameterProvider; +import com.fr.stable.StringUtils; +import com.fr.stable.fun.TableDataProvider; +import com.fr.stable.plugin.ExtraClassManagerProvider; +import com.fr.stable.script.NameSpace; + +import javax.swing.BorderFactory; +import javax.swing.JDialog; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.UIManager; +import javax.swing.text.BadLocationException; +import javax.swing.text.DefaultHighlighter; +import javax.swing.text.Highlighter; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Cursor; +import java.awt.Frame; +import java.awt.datatransfer.StringSelection; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class PreviewPerformedSqlPane extends JDialog implements ActionListener { + + private JPanel topPanel; + private JPanel centerPanel; + private JPanel bottomPanel; + + private UILabel imageLabel; + + public PreviewPerformedSqlPane(Frame frame, String sql) { + this(frame, sql, null, null, false); + } + + public PreviewPerformedSqlPane(Frame frame, String sql, List selectedSpecialCharIndex, String[] selectedSpecialChar, boolean highlight) { + super(frame, true); + // 提示信息 + topPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); + JPanel imagePanel = new JPanel(); + JPanel messagePanel; + + if (isShowSpecialCharSqlPane(selectedSpecialCharIndex)) { + imageLabel = new UILabel(UIManager.getIcon("OptionPane.warningIcon")); + MessageWithLink message = new MessageWithLink(Toolkit.i18nText("Fine-Design_Basic_Preview_Special_Char_Sql_Front_Message"), Toolkit.i18nText("Fine-Design_Basic_Sql_Injection_Prevention"), "https://help.fanruan.com/finereport/doc-view-2219.html", Toolkit.i18nText("Fine-Design_Basic_Preview_Special_Char_Sql_Back_Message")); + messagePanel = new JPanel(); + messagePanel.setLayout(FRGUIPaneFactory.createBorderLayout()); + messagePanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 0)); + messagePanel.add(message); + // 提示图标 + JPanel tipPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); + UILabel tipLabel = new UILabel(UIManager.getIcon("OptionPane.tipIcon")); + StringBuilder textBuilder = new StringBuilder(); + textBuilder.append("").append(Toolkit.i18nText("Fine-Design_Basic_Processed_Special_Char")).append("
"); + for (String sChar : selectedSpecialChar) { + textBuilder.append(sChar).append("
"); + } + textBuilder.append(""); + tipLabel.setToolTipText(textBuilder.toString()); + tipPanel.add(tipLabel, BorderLayout.SOUTH); + topPanel.add(tipPanel, BorderLayout.EAST); + } else { + imageLabel = new UILabel(UIManager.getIcon("OptionPane.informationIcon")); + messagePanel = FRGUIPaneFactory.createVerticalFlowLayout_S_Pane(true); + JLabel label = new JLabel(Toolkit.i18nText("Fine-Design_Basic_Preview_Performed_Sql_Message")); + messagePanel.add(label); + } + imagePanel.add(imageLabel); + + topPanel.add(imagePanel, BorderLayout.WEST); + topPanel.add(messagePanel, BorderLayout.CENTER); + topPanel.setBorder(BorderFactory.createEmptyBorder(10,10,0,10)); + + //中间的SQL面板 + centerPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); + centerPanel.setBorder(BorderFactory.createEmptyBorder(0,10,10,10)); + JScrollPane scrollPane = new JScrollPane(); + JTextArea checkArea = new JTextArea(sql); + checkArea.setEditable(false); + checkArea.setCursor(new Cursor(Cursor.TEXT_CURSOR)); + if (highlight) { + Highlighter highLighter = checkArea.getHighlighter(); + DefaultHighlighter.DefaultHighlightPainter p = new DefaultHighlighter.DefaultHighlightPainter(Color.ORANGE); + for (int[] specialCharIndex : selectedSpecialCharIndex) { + try { + highLighter.addHighlight(specialCharIndex[0], specialCharIndex[1], p); + } catch (BadLocationException e) { + e.printStackTrace(); + } + } + } + scrollPane.setViewportView(checkArea); + scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); + centerPanel.add(scrollPane); + + //底部的按钮面板 + UIButton okButton = new UIButton(Toolkit.i18nText("Fine-Design_Report_OK")); + okButton.addActionListener(this); + bottomPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); + bottomPanel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); + bottomPanel.add(okButton, BorderLayout.EAST); + + this.setTitle(Toolkit.i18nText("Fine-Design_Basic_Preview_Performed_Sql")); + this.setResizable(false); + this.add(topPanel, BorderLayout.NORTH); + this.add(centerPanel, BorderLayout.CENTER); + this.add(bottomPanel, BorderLayout.SOUTH); + this.setSize(600, 400); + + GUICoreUtils.centerWindow(this); + } + + public static void previewPerformedSql(DBTableData tableData) { + Calculator calculator = Calculator.createCalculator(); + //参数 + ParameterProvider[] parameters = DataOperator.getInstance().getTableDataParameters(tableData); + if (ArrayUtils.isEmpty(parameters)) { + parameters = tableData.getParameters(Calculator.createCalculator()); + } + Map parameterMap = new HashMap<>(); + if (needInputParams(parameters)) { + showParaWindow(parameterMap, parameters); + } else { + for (ParameterProvider parameter : parameters) { + parameterMap.put(parameter.getName(), parameter.getValue()); + } + } + boolean showOriginSql = true; + for (ParameterProvider parameter : DataOperator.getInstance().getTableDataParameters(tableData)) { + if (parameterMap.containsKey(parameter.getName())) { + Object value = parameterMap.get(parameter.getName()); + if (value != null && !StringUtils.EMPTY.equals(value)) { + showOriginSql = false; + } + parameter.setValue(value); + } + } + String sql; + // 计算高亮文本位置 + List specialCharParamIndex = null; + boolean highlight = true; + if (showOriginSql) { + sql = tableData.getQuery(); + } else { + NameSpace ns = ParameterMapNameSpace.create(parameterMap); + calculator.pushNameSpace(ns); + Parameter[] paras = processParameters(tableData, calculator); + // 所有被转义参数的集合 + Set specialCharParam = EscapeSqlHelper.getInstance().getSpecialCharParam(paras); + // 将参数转义等 + Set tableDataProviders = getTableDataProviders(); + for (TableDataProvider provider : tableDataProviders) { + provider.processParametersBeforeAnalyzeSQL(paras, calculator); + } + + if (!specialCharParam.isEmpty()) { + specialCharParamIndex = ParameterHelper.analyzeCurrentContextTableData4Template(tableData.getQuery(), paras, specialCharParam); + } + String oldSql = ParameterHelper.analyzeCurrentContextTableData4Templatee(tableData.getQuery(), paras); + sql = processExtraSQL(paras, oldSql, calculator, tableDataProviders); + if (oldSql.length() != sql.length()) { + highlight = false; + } + } + // sql内容复制到剪切板 + StringSelection selection = new StringSelection(sql); + java.awt.Toolkit.getDefaultToolkit().getSystemClipboard().setContents(selection, selection); + // 弹窗 + PreviewPerformedSqlPane pane; + if (isShowSpecialCharSqlPane(specialCharParamIndex)) { + pane = new PreviewPerformedSqlPane(DesignerContext.getDesignerFrame(), sql, specialCharParamIndex, ConfigService.getInstance().getPSIConfig().getSelectedSpecialChar(), highlight); + } else { + pane = new PreviewPerformedSqlPane(DesignerContext.getDesignerFrame(), sql); + } + pane.setVisible(true); + } + + private static boolean isShowSpecialCharSqlPane(List specialCharParamIndex) { + return specialCharParamIndex != null && !specialCharParamIndex.isEmpty(); + } + + private static Parameter[] processParameters(DBTableData tableData, Calculator calculator) { + Collection parameters = tableData.getParameters(); + if (parameters.size() == 0) { + tableData.setParameters(ParameterHelper.analyze4Parameters(tableData.getQuery(), false)); + return new Parameter[0]; + } + return Parameter.providers2Parameter(Calculator.processParameters(calculator, parameters.toArray(new ParameterProvider[parameters.size()]))); + } + + private static String processExtraSQL(Parameter[] ps, String sql, Calculator ca, Set tableDataProviders) { + for (TableDataProvider provider : tableDataProviders) { + String newSql = provider.processTableDataSQL(ps, sql, ca); + if (StringUtils.isNotEmpty(newSql)) { + sql = newSql; + } + } + return sql; + } + + private static boolean needInputParams(ParameterProvider[] parameters) { + if (ArrayUtils.isNotEmpty(parameters)) { + return true; + } + for (ParameterProvider parameter : parameters) { + if (parameter.getValue() == null || StringUtils.EMPTY.equals(parameter.getValue())) { + return true; + } + } + return false; + } + + private static void showParaWindow(final Map parameterMap, ParameterProvider[] inParameters) { + final ParameterInputPane pPane = new ParameterInputPane(inParameters); + pPane.showSmallWindow(new JFrame(), new DialogActionAdapter() { + @Override + public void doOk() { + parameterMap.putAll(pPane.update()); + } + }).setVisible(true); + } + + private static Set getTableDataProviders() { + ExtraClassManagerProvider classManagerProvider = PluginModule.getAgent(PluginModule.ExtraCore); + if (classManagerProvider == null) { + return new HashSet<>(); + } + return classManagerProvider.getArray(TableDataProvider.XML_TAG, EscapeSqlHelper.getInstance()); + } + + @Override + public void actionPerformed(ActionEvent e) { + this.dispose(); + } +} diff --git a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java index 6065d04859..fecf9c079e 100644 --- a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java +++ b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java @@ -16,6 +16,7 @@ import com.fr.design.constants.UIConstants; import com.fr.design.data.datapane.connect.ConnectionTableProcedurePane; import com.fr.design.data.datapane.connect.ConnectionTableProcedurePane.DoubleClickSelectedNodeOnTreeListener; import com.fr.design.data.datapane.preview.PreviewTablePane; +import com.fr.design.data.datapane.preview.sql.PreviewPerformedSqlPane; import com.fr.design.data.datapane.sqlpane.SQLEditPane; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.BasicPane; @@ -35,6 +36,7 @@ import com.fr.design.menu.ToolBarDef; import com.fr.design.utils.ParameterUtils; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; +import com.fr.general.IOUtils; import com.fr.general.sql.SqlUtils; import com.fr.log.FineLoggerFactory; import com.fr.script.Calculator; @@ -227,6 +229,7 @@ public class DBTableDataPane extends AbstractTableDataPane { // p:工具栏. ToolBarDef toolBarDef = new ToolBarDef(); toolBarDef.addShortCut(new PreviewAction()); + toolBarDef.addShortCut(new PreviewPerformedSQLAction()); toolBarDef.addShortCut(SeparatorDef.DEFAULT); toolBarDef.addShortCut(new EditPageQueryAction()); dbTableDataMenuHandler = ExtraDesignClassManager.getInstance().getSingle(DBTableDataMenuHandler.MARK_STRING); @@ -368,6 +371,20 @@ public class DBTableDataPane extends AbstractTableDataPane { } } + private class PreviewPerformedSQLAction extends UpdateAction { + + public PreviewPerformedSQLAction() { + this.setName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preview_Performed_Sql")); + this.setSmallIcon(IOUtils.readIcon("/com/fr/design/images/m_file/preview_sql.png")); + } + + @Override + public void actionPerformed(ActionEvent e) { + checkParameter(); + PreviewPerformedSqlPane.previewPerformedSql(DBTableDataPane.this.updateBean()); + } + } + private class EditPageQueryAction extends UpdateAction { public EditPageQueryAction() { this.setName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Layer_Page_Report_Page_Query")); diff --git a/designer-base/src/main/java/com/fr/design/dialog/link/MessageWithLink.java b/designer-base/src/main/java/com/fr/design/dialog/link/MessageWithLink.java index 889a0c3c9c..2541a1b638 100644 --- a/designer-base/src/main/java/com/fr/design/dialog/link/MessageWithLink.java +++ b/designer-base/src/main/java/com/fr/design/dialog/link/MessageWithLink.java @@ -3,13 +3,14 @@ package com.fr.design.dialog.link; import com.fr.design.gui.ilable.UILabel; import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; + +import javax.swing.JEditorPane; +import javax.swing.event.HyperlinkEvent; +import javax.swing.event.HyperlinkListener; import java.awt.Color; import java.awt.Desktop; import java.awt.Font; import java.net.URI; -import javax.swing.JEditorPane; -import javax.swing.event.HyperlinkEvent; -import javax.swing.event.HyperlinkListener; /** * 用来构建JOptionPane带超链的消息提示 @@ -35,6 +36,10 @@ public class MessageWithLink extends JEditorPane { this(message, linkName, link, color, LABEL.getFont()); } + public MessageWithLink(String frontMessage, String linkName, String link, String backMessage) { + this(frontMessage, linkName, link, backMessage, LABEL.getBackground(), LABEL.getFont()); + } + public MessageWithLink(String message, String linkName, String link, Color color, Font font) { super("text/html", "" + message + "" + linkName + "" + ""); initListener(link); @@ -42,6 +47,13 @@ public class MessageWithLink extends JEditorPane { setBorder(null); } + public MessageWithLink(String frontMessage, String linkName, String link, String backMessage, Color color, Font font) { + super("text/html", "" + frontMessage + "" + linkName + "" + backMessage + ""); + initListener(link); + setEditable(false); + setBorder(null); + } + protected void initListener(String link) { addHyperlinkListener(new HyperlinkListener() { @Override diff --git a/designer-base/src/main/java/com/fr/design/gui/UILookAndFeel.java b/designer-base/src/main/java/com/fr/design/gui/UILookAndFeel.java index 4dbbc1af32..6d1a729d93 100644 --- a/designer-base/src/main/java/com/fr/design/gui/UILookAndFeel.java +++ b/designer-base/src/main/java/com/fr/design/gui/UILookAndFeel.java @@ -177,6 +177,7 @@ public class UILookAndFeel extends MetalLookAndFeel { table.put("OptionPane.narrow.down", loadIcon("Icon_Narrow_Down_16x16.png", this)); table.put("OptionPane.warningIcon", loadIcon("WarningIcon.png", this)); table.put("OptionPane.questionIcon", loadIcon("QuestionIcon.png", this)); + table.put("OptionPane.tipIcon", loadIcon("TipIcon.png", this)); table.put("ScrollPane.border", new UIScrollPaneBorder()); table.put("ProgressBar.border", new UIProgressBarBorder()); table.put("Spinner.border", new UITextFieldBorder(new Insets(2, 2, 2, 2))); diff --git a/designer-base/src/main/resources/com/fr/design/images/lookandfeel/TipIcon.png b/designer-base/src/main/resources/com/fr/design/images/lookandfeel/TipIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..5c9492502d1bc5501d78314e7be20685386d1414 GIT binary patch literal 402 zcmV;D0d4+?P)@j-@8M|`QYz<$8nYr%?2Xu0KoG1`xhd(AyQ2#<*VK^ z0x-6^ix{5)z-1KS#bD6uCW{M&QpK`p9{~1gVUuDP-Fl?r#Qc*1kf?!fI+qP}f zw62M;ks&FN{I+2j&q}E+y_s`<4uB|xSI@v9V&27ZypqI80mj@DL|PC+9O++n9A_QC z0x8>%dYyBAN`&ve?;WQA=WaKOpx)_tPx?Z}*ftTNl=4=uSF7%tWkE{_uaW^D{eEvT z48zY+fZrp6A%xh}>*aEJu2?L+3E|Dp1UPpeh`{iDZ{sguVuWeHScGYtI1L!v#2I63 w5n&SHVCEQyqs(!TGCkK(&X8P}=|4C73+o;05pf;-QUCw|07*qoM6N<$f-0J=WdHyG literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/m_file/preview_sql.png b/designer-base/src/main/resources/com/fr/design/images/m_file/preview_sql.png new file mode 100644 index 0000000000000000000000000000000000000000..ba62d487a8e85617bb710f4cf281094da4e17e7d GIT binary patch literal 366 zcmV-!0g?WRP)p^BJ}zQyn%^{9n@6h zIxMV=l`&RU&~P{Yb77O&+s#?XCd17A^Urs)9ML}yhxyUSOQ>_1+0DyxGt2cFtqY(% z@5is+-y{InCaO8WLRL?|-@7A{Ne;`JKn}p}xZvQPJ*CO@3 zYSHQ1ATr{?djH%YnA;n*p%FD{wuAsx`ONlg!|GjibOmNU5b*=z5koaIEi_QeF(<4D zfbIs6Pvi;mT7*9|09-?RK_n*v;1i7z10pvSp)a_vbOLYxNhXg%1c3Gi`--``#Lz9X zEQxx0g>&cJ);XSHv(mz%KM{=~uKtX-<1{}{M0*rmS5^IP2TxZ20^#auzg>*?-2eap M07*qoM6N<$f;Xm}2mk;8 literal 0 HcmV?d00001 From d35c06b20b1a9f34fecad57c9322a7864b101251 Mon Sep 17 00:00:00 2001 From: hades Date: Wed, 2 Jun 2021 16:37:12 +0800 Subject: [PATCH 056/148] =?UTF-8?q?REPORT-53159=20=E3=80=90=E6=99=BA?= =?UTF-8?q?=E8=83=BD=E8=81=94=E5=8A=A8=E3=80=91=E7=BB=84=E4=BB=B6=E6=8B=96?= =?UTF-8?q?=E5=85=A5=E6=97=B6=EF=BC=8Ctab=E4=B8=AD=E7=9A=84js=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E5=A4=9A=E4=B8=AA=E7=BB=84=E4=BB=B6=EF=BC=8C=E5=8F=AA?= =?UTF-8?q?=E4=BC=9A=E6=9B=BF=E6=8D=A2=E4=B8=80=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mod/ContentReplaceUtil.java | 22 ++++++- .../fr/design/mod/ContentReplaceUtilTest.java | 65 +++++++++++++++++++ 2 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 designer-base/src/test/java/com/fr/design/mod/ContentReplaceUtilTest.java diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java b/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java index 218c66fad2..708b0004ef 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java @@ -1,5 +1,8 @@ package com.fr.design.mod; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + /** * @author hades * @version 10.0 @@ -10,7 +13,24 @@ public class ContentReplaceUtil { public static final String EQ_STRING = "="; public static String replaceContent(String content, String oldName, String newName) { - return content.replaceAll(generateStr(oldName), generateStr(newName)); + String oldNameUpper = oldName.toUpperCase(); + Matcher m = Pattern.compile(oldName + "|" + oldNameUpper).matcher(content); + StringBuilder sb = new StringBuilder(); + int last = 0; + while (m.find()) { + sb.append(content, last, m.start()); + if (oldNameUpper.equals(m.group())) { + // 处理大写情况 + sb.append(newName.toUpperCase()); + } else { + // 默认情况 + sb.append(newName); + } + last = m.end(); + } + sb.append(content.substring(last)); + + return sb.toString(); } private static String generateStr(String str) { diff --git a/designer-base/src/test/java/com/fr/design/mod/ContentReplaceUtilTest.java b/designer-base/src/test/java/com/fr/design/mod/ContentReplaceUtilTest.java new file mode 100644 index 0000000000..cf67c69b64 --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/mod/ContentReplaceUtilTest.java @@ -0,0 +1,65 @@ +package com.fr.design.mod; + +import junit.framework.TestCase; +import org.junit.Assert; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class ContentReplaceUtilTest extends TestCase { + + public void testReplaceContent() { + String text = "setTimeout(function() {\n" + + "\n" + + "\t$(\"div[widgetname=DATEEDITOR0]\").css({\n" + + "\n" + + "\t\t'opacity': '0.3'\n" + + "\n" + + "\t});\n" + + "\n" + + "}, 50);\n" + + "var a = \"dateEditor0\""; + String oldName = "dateEditor0"; + String newName = "dateEditor00"; + String result = "setTimeout(function() {\n" + + "\n" + + "\t$(\"div[widgetname=DATEEDITOR00]\").css({\n" + + "\n" + + "\t\t'opacity': '0.3'\n" + + "\n" + + "\t});\n" + + "\n" + + "}, 50);\n" + + "var a = \"dateEditor00\""; + Assert.assertEquals(result, ContentReplaceUtil.replaceContent(text, oldName, newName)); + + String text1 = "setInterval(function() {\n" + + "\t//获取当前body中tab的索引位置\n" + + " var aa = _g().getWidgetByName(\"tabpane00\").getShowIndex();\n" + + " //根据tab索引轮播tab块,索引从0开始,到最后一个tab块后跳转到第一个\n" + + "\tif(aa == TAB轮播-测试-2) {\n" + + " _g().getWidgetByName('tabpane00').showCardByIndex(0);\n" + + " } else {\n" + + "\n" + + " _g().getWidgetByName('tabpane00').showCardByIndex(aa + TAB轮播-测试-1);\n" + + " }\n" + + "}, TAB轮播-测试-2000);"; + String oldName1 = "tabpane00"; + String newName1 = "tabpane0"; + String result1 = "setInterval(function() {\n" + + "\t//获取当前body中tab的索引位置\n" + + " var aa = _g().getWidgetByName(\"tabpane0\").getShowIndex();\n" + + " //根据tab索引轮播tab块,索引从0开始,到最后一个tab块后跳转到第一个\n" + + "\tif(aa == TAB轮播-测试-2) {\n" + + " _g().getWidgetByName('tabpane0').showCardByIndex(0);\n" + + " } else {\n" + + "\n" + + " _g().getWidgetByName('tabpane0').showCardByIndex(aa + TAB轮播-测试-1);\n" + + " }\n" + + "}, TAB轮播-测试-2000);"; + Assert.assertEquals(result1, ContentReplaceUtil.replaceContent(text1, oldName1, newName1)); + } + +} \ No newline at end of file From 577bb9b9b3da9e0f443e35d539736313d74e1cc4 Mon Sep 17 00:00:00 2001 From: hades Date: Wed, 2 Jun 2021 16:39:32 +0800 Subject: [PATCH 057/148] =?UTF-8?q?REPORT-53163=20=E5=9B=BE=E8=A1=A8?= =?UTF-8?q?=E8=B6=85=E9=93=BE=E8=81=94=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mod/ContentObjectManager.java | 2 ++ .../fr/design/mod/ContentReplacerCenter.java | 2 ++ .../change/FormHyperlinkContentChange.java | 34 +++++++++++++++++++ .../repalce/FormHyperlinkContentReplacer.java | 20 +++++++++++ 4 files changed, 58 insertions(+) create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/FormHyperlinkContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/repalce/FormHyperlinkContentReplacer.java diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java b/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java index bde02bfc26..11da77ca87 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java @@ -5,6 +5,7 @@ import com.fr.chart.web.ChartHyperRelateCellLink; import com.fr.chart.web.ChartHyperRelateFloatLink; import com.fr.data.SimpleDSColumn; import com.fr.data.impl.NameTableData; +import com.fr.form.main.FormHyperlink; import com.fr.invoke.ClassHelper; import com.fr.js.JavaScriptImpl; import com.fr.plugin.chart.base.VanChartHtmlLabel; @@ -46,6 +47,7 @@ public class ContentObjectManager { set.add(NameTableData.class.getName()); set.add(SimpleDSColumn.class.getName()); set.add(DSColumn.class.getName()); + set.add(FormHyperlink.class.getName()); } public void searchObject(Object ob) { diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java b/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java index c8e459354b..7a4acfdeb3 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java @@ -7,6 +7,7 @@ import com.fr.design.mod.event.WidgetNameModifyEvent; import com.fr.design.mod.impl.change.ChartHyperRelateCellLinkContentChange; import com.fr.design.mod.impl.change.ChartHyperRelateFloatLinkContentChange; import com.fr.design.mod.impl.change.DSColumnContentChange; +import com.fr.design.mod.impl.change.FormHyperlinkContentChange; import com.fr.design.mod.impl.change.FormulaContentChange; import com.fr.design.mod.impl.change.JavaScriptContentChange; import com.fr.design.mod.impl.change.NameTableDataContentChange; @@ -79,6 +80,7 @@ public class ContentReplacerCenter { contentChangeList.add(new NameTableDataContentChange()); contentChangeList.add(new SimpleDSColumnContentChange()); contentChangeList.add(new DSColumnContentChange()); + contentChangeList.add(new FormHyperlinkContentChange()); } private void onRename(List contentChangeItemList, List contentChangeList) { diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/FormHyperlinkContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/FormHyperlinkContentChange.java new file mode 100644 index 0000000000..1ad89e1ad8 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/FormHyperlinkContentChange.java @@ -0,0 +1,34 @@ +package com.fr.design.mod.impl.change; + +import com.fr.design.mod.ContentChange; +import com.fr.design.mod.ContentReplacer; +import com.fr.design.mod.bean.ChangeItem; +import com.fr.design.mod.impl.repalce.FormHyperlinkContentReplacer; +import com.fr.form.main.FormHyperlink; +import java.util.HashMap; +import java.util.Map; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class FormHyperlinkContentChange implements ContentChange { + + private final Map> map; + + public FormHyperlinkContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, new FormHyperlinkContentReplacer()); + } + + @Override + public String type() { + return FormHyperlink.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/FormHyperlinkContentReplacer.java b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/FormHyperlinkContentReplacer.java new file mode 100644 index 0000000000..9da4ee047a --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/FormHyperlinkContentReplacer.java @@ -0,0 +1,20 @@ +package com.fr.design.mod.impl.repalce; + +import com.fr.design.mod.ContentReplacer; +import com.fr.form.main.FormHyperlink; +import com.fr.general.ComparatorUtils; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class FormHyperlinkContentReplacer implements ContentReplacer { + + @Override + public void replace(FormHyperlink formHyperlink, String oldName, String newName) { + if (ComparatorUtils.equals(formHyperlink.getRelateEditorName(), oldName)) { + formHyperlink.setRelateEditorName(newName); + } + } +} From 6048b6569befa211bdecc37d7c7e25c943f3de51 Mon Sep 17 00:00:00 2001 From: hades Date: Wed, 2 Jun 2021 21:20:25 +0800 Subject: [PATCH 058/148] =?UTF-8?q?REPORT-53169=20=E3=80=90=E6=99=BA?= =?UTF-8?q?=E8=83=BD=E8=81=94=E5=8A=A8=E3=80=91=E7=BB=84=E4=BB=B6=E6=8B=96?= =?UTF-8?q?=E5=85=A5=E6=97=B6=EF=BC=8C=E5=85=AC=E5=BC=8F=E5=A4=9A=E4=B8=AA?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E7=9A=84=E5=9C=B0=E6=96=B9=E4=B8=8D=E4=BC=9A?= =?UTF-8?q?=E8=A2=AB=E6=9B=BF=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mod/ContentObjectManager.java | 12 ++ .../com/fr/design/mod/ContentReplaceUtil.java | 62 +++++++ .../fr/design/mod/ContentReplacerCenter.java | 14 +- .../formula/CellExpandAttrContentChange.java | 37 +++++ .../FormulaConditionContentChange.java | 37 +++++ .../{ => formula}/FormulaContentChange.java | 9 +- .../FormulaDictionaryContentChange.java | 37 +++++ .../FormulaHFElementContentChange.java | 38 +++++ .../formula/FormulaPresentContentChange.java | 38 +++++ .../change/formula/RichCharContentChange.java | 37 +++++ .../Formula4TableDataNameContentReplacer.java | 22 --- .../Formula4WidgetNameContentReplacer.java | 21 --- .../mod/impl/repalce/FormulaReplacer.java | 151 ++++++++++++++++++ 13 files changed, 466 insertions(+), 49 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CellExpandAttrContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaConditionContentChange.java rename designer-base/src/main/java/com/fr/design/mod/impl/change/{ => formula}/FormulaContentChange.java (65%) create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaDictionaryContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaHFElementContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaPresentContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/formula/RichCharContentChange.java delete mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4TableDataNameContentReplacer.java delete mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4WidgetNameContentReplacer.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/repalce/FormulaReplacer.java diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java b/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java index 11da77ca87..7b20e60858 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java @@ -1,14 +1,20 @@ package com.fr.design.mod; import com.fr.base.Formula; +import com.fr.base.headerfooter.FormulaHFElement; +import com.fr.base.present.FormulaPresent; import com.fr.chart.web.ChartHyperRelateCellLink; import com.fr.chart.web.ChartHyperRelateFloatLink; import com.fr.data.SimpleDSColumn; +import com.fr.data.condition.FormulaCondition; +import com.fr.data.impl.FormulaDictionary; import com.fr.data.impl.NameTableData; import com.fr.form.main.FormHyperlink; import com.fr.invoke.ClassHelper; import com.fr.js.JavaScriptImpl; import com.fr.plugin.chart.base.VanChartHtmlLabel; +import com.fr.report.cell.cellattr.CellExpandAttr; +import com.fr.report.cell.cellattr.core.RichChar; import com.fr.report.cell.cellattr.core.group.DSColumn; import com.fr.stable.Filter; import java.util.HashSet; @@ -48,6 +54,12 @@ public class ContentObjectManager { set.add(SimpleDSColumn.class.getName()); set.add(DSColumn.class.getName()); set.add(FormHyperlink.class.getName()); + set.add(CellExpandAttr.class.getName()); + set.add(FormulaCondition.class.getName()); + set.add(FormulaDictionary.class.getName()); + set.add(FormulaHFElement.class.getName()); + set.add(FormulaPresent.class.getName()); + set.add(RichChar.class.getName()); } public void searchObject(Object ob) { diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java b/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java index 708b0004ef..64027a22c1 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java @@ -1,5 +1,7 @@ package com.fr.design.mod; +import com.fr.parser.FRFormulaTransformer; +import com.fr.stable.StringUtils; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -12,6 +14,10 @@ public class ContentReplaceUtil { public static final String EQ_STRING = "="; + public static final String LEFT_BRACKET = "${"; + + public static final String RIGHT_BRACKET = "}"; + public static String replaceContent(String content, String oldName, String newName) { String oldNameUpper = oldName.toUpperCase(); Matcher m = Pattern.compile(oldName + "|" + oldNameUpper).matcher(content); @@ -37,4 +43,60 @@ public class ContentReplaceUtil { return "\"" + str + "\""; } + public static String getFormulaPureContent(String content) { + if (content.startsWith(EQ_STRING)) { + return content.substring(1); + } else { + return content; + } + } + + public static String replaceFormulaContent4WidgetName(String content, String oldName, String newName) { + if (StringUtils.isNotEmpty(content)) { + content = getFormulaPureContent(content); + FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); + frFormulaTransformer.addRenamedWidget(oldName, newName); + return EQ_STRING + frFormulaTransformer.transform(content); + } + return content; + } + + public static String replaceFormulaContent4TableDataName(String content, String oldName, String newName) { + if (StringUtils.isNotEmpty(content)) { + content = getFormulaPureContent(content); + FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); + frFormulaTransformer.addRenamedDataset(oldName, newName); + return EQ_STRING + frFormulaTransformer.transform(content); + } + return content; + } + + public static String getRichCharFormulaPureContent(String content) { + if (content.startsWith(LEFT_BRACKET)) { + return content.substring(LEFT_BRACKET.length() + 1, content.length() - 1); + } else { + return content; + } + } + + public static String replaceRichCharFormulaContent4TableDataName(String content, String oldName, String newName) { + if (StringUtils.isNotEmpty(content)) { + content = getRichCharFormulaPureContent(content); + FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); + frFormulaTransformer.addRenamedDataset(oldName, newName); + return LEFT_BRACKET + EQ_STRING + frFormulaTransformer.transform(content) + RIGHT_BRACKET; + } + return content; + } + + public static String replaceRichCharFormulaContent4WidgetName(String content, String oldName, String newName) { + if (StringUtils.isNotEmpty(content)) { + content = getRichCharFormulaPureContent(content); + FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); + frFormulaTransformer.addRenamedWidget(oldName, newName); + return LEFT_BRACKET + EQ_STRING + frFormulaTransformer.transform(content) + RIGHT_BRACKET; + } + return content; + } + } diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java b/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java index 7a4acfdeb3..597f59962b 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java @@ -8,11 +8,17 @@ import com.fr.design.mod.impl.change.ChartHyperRelateCellLinkContentChange; import com.fr.design.mod.impl.change.ChartHyperRelateFloatLinkContentChange; import com.fr.design.mod.impl.change.DSColumnContentChange; import com.fr.design.mod.impl.change.FormHyperlinkContentChange; -import com.fr.design.mod.impl.change.FormulaContentChange; +import com.fr.design.mod.impl.change.formula.CellExpandAttrContentChange; +import com.fr.design.mod.impl.change.formula.FormulaConditionContentChange; +import com.fr.design.mod.impl.change.formula.FormulaContentChange; import com.fr.design.mod.impl.change.JavaScriptContentChange; import com.fr.design.mod.impl.change.NameTableDataContentChange; import com.fr.design.mod.impl.change.SimpleDSColumnContentChange; import com.fr.design.mod.impl.change.VanChartHtmlLabelContentChange; +import com.fr.design.mod.impl.change.formula.FormulaDictionaryContentChange; +import com.fr.design.mod.impl.change.formula.FormulaHFElementContentChange; +import com.fr.design.mod.impl.change.formula.FormulaPresentContentChange; +import com.fr.design.mod.impl.change.formula.RichCharContentChange; import com.fr.event.Event; import com.fr.event.EventDispatcher; import com.fr.event.Listener; @@ -81,6 +87,12 @@ public class ContentReplacerCenter { contentChangeList.add(new SimpleDSColumnContentChange()); contentChangeList.add(new DSColumnContentChange()); contentChangeList.add(new FormHyperlinkContentChange()); + contentChangeList.add(new CellExpandAttrContentChange()); + contentChangeList.add(new FormulaConditionContentChange()); + contentChangeList.add(new FormulaDictionaryContentChange()); + contentChangeList.add(new FormulaHFElementContentChange()); + contentChangeList.add(new FormulaPresentContentChange()); + contentChangeList.add(new RichCharContentChange()); } private void onRename(List contentChangeItemList, List contentChangeList) { diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CellExpandAttrContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CellExpandAttrContentChange.java new file mode 100644 index 0000000000..4204108c66 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CellExpandAttrContentChange.java @@ -0,0 +1,37 @@ +package com.fr.design.mod.impl.change.formula; + +import com.fr.design.mod.ContentChange; +import com.fr.design.mod.ContentReplacer; +import com.fr.design.mod.bean.ChangeItem; +import com.fr.design.mod.impl.repalce.FormulaReplacer; +import com.fr.report.cell.cellattr.CellExpandAttr; +import java.util.HashMap; +import java.util.Map; + +/** + * 扩展后排序公式 + * + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class CellExpandAttrContentChange implements ContentChange { + + private final Map> map; + + public CellExpandAttrContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.CellExpandAttr4WidgetNameContentReplacer); + map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.CellExpandAttr4TableDataNameContentReplacer); + } + + @Override + public String type() { + return CellExpandAttr.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaConditionContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaConditionContentChange.java new file mode 100644 index 0000000000..e67d5dfbde --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaConditionContentChange.java @@ -0,0 +1,37 @@ +package com.fr.design.mod.impl.change.formula; + +import com.fr.data.condition.FormulaCondition; +import com.fr.design.mod.ContentChange; +import com.fr.design.mod.ContentReplacer; +import com.fr.design.mod.bean.ChangeItem; +import com.fr.design.mod.impl.repalce.FormulaReplacer; +import java.util.HashMap; +import java.util.Map; + +/** + * 公式条件 + * + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class FormulaConditionContentChange implements ContentChange { + + private final Map> map; + + public FormulaConditionContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.FormulaCondition4WidgetNameContentReplacer); + map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.FormulaCondition4TableDataNameContentReplacer); + } + + @Override + public String type() { + return FormulaCondition.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/FormulaContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaContentChange.java similarity index 65% rename from designer-base/src/main/java/com/fr/design/mod/impl/change/FormulaContentChange.java rename to designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaContentChange.java index de69b49d5a..d6edff530c 100644 --- a/designer-base/src/main/java/com/fr/design/mod/impl/change/FormulaContentChange.java +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaContentChange.java @@ -1,11 +1,10 @@ -package com.fr.design.mod.impl.change; +package com.fr.design.mod.impl.change.formula; import com.fr.base.Formula; import com.fr.design.mod.ContentChange; import com.fr.design.mod.ContentReplacer; import com.fr.design.mod.bean.ChangeItem; -import com.fr.design.mod.impl.repalce.Formula4TableDataNameContentReplacer; -import com.fr.design.mod.impl.repalce.Formula4WidgetNameContentReplacer; +import com.fr.design.mod.impl.repalce.FormulaReplacer; import java.util.HashMap; import java.util.Map; @@ -20,8 +19,8 @@ public class FormulaContentChange implements ContentChange { public FormulaContentChange() { map = new HashMap<>(); - map.put(ChangeItem.WIDGET_NAME, new Formula4WidgetNameContentReplacer()); - map.put(ChangeItem.TABLE_DATA_NAME, new Formula4TableDataNameContentReplacer()); + map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.Formula4WidgetNameContentReplacer); + map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.Formula4TableDataNameContentReplacer); } @Override diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaDictionaryContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaDictionaryContentChange.java new file mode 100644 index 0000000000..d0cd674efa --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaDictionaryContentChange.java @@ -0,0 +1,37 @@ +package com.fr.design.mod.impl.change.formula; + +import com.fr.data.impl.FormulaDictionary; +import com.fr.design.mod.ContentChange; +import com.fr.design.mod.ContentReplacer; +import com.fr.design.mod.bean.ChangeItem; +import com.fr.design.mod.impl.repalce.FormulaReplacer; +import java.util.HashMap; +import java.util.Map; + +/** + * 数据字典——公式 + * + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class FormulaDictionaryContentChange implements ContentChange { + + private final Map> map; + + public FormulaDictionaryContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.FormulaDictionary4WidgetNameContentReplacer); + map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.FormulaDictionary4TableDataNameContentReplacer); + } + + @Override + public String type() { + return FormulaDictionary.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaHFElementContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaHFElementContentChange.java new file mode 100644 index 0000000000..53ec9c34aa --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaHFElementContentChange.java @@ -0,0 +1,38 @@ +package com.fr.design.mod.impl.change.formula; + +import com.fr.base.headerfooter.FormulaHFElement; +import com.fr.design.mod.ContentChange; +import com.fr.design.mod.ContentReplacer; +import com.fr.design.mod.bean.ChangeItem; +import com.fr.design.mod.impl.repalce.FormulaReplacer; +import java.util.HashMap; +import java.util.Map; + +/** + * 页面/页脚——公式 + * + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ + +public class FormulaHFElementContentChange implements ContentChange { + + private final Map> map; + + public FormulaHFElementContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.FormulaHFElement4WidgetNameContentReplacer); + map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.FormulaHFElement4TableDataNameContentReplacer); + } + + @Override + public String type() { + return FormulaHFElement.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaPresentContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaPresentContentChange.java new file mode 100644 index 0000000000..eaca94c7a2 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaPresentContentChange.java @@ -0,0 +1,38 @@ +package com.fr.design.mod.impl.change.formula; + +import com.fr.base.present.FormulaPresent; +import com.fr.design.mod.ContentChange; +import com.fr.design.mod.ContentReplacer; +import com.fr.design.mod.bean.ChangeItem; +import com.fr.design.mod.impl.repalce.FormulaReplacer; +import java.util.HashMap; +import java.util.Map; + +/** + * 公式形态 + * + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ + +public class FormulaPresentContentChange implements ContentChange { + + private final Map> map; + + public FormulaPresentContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.FormulaPresent4WidgetNameContentReplacer); + map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.FormulaPresent4TableDataNameContentReplacer); + } + + @Override + public String type() { + return FormulaPresent.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/RichCharContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/RichCharContentChange.java new file mode 100644 index 0000000000..45c06a3427 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/RichCharContentChange.java @@ -0,0 +1,37 @@ +package com.fr.design.mod.impl.change.formula; + +import com.fr.design.mod.ContentChange; +import com.fr.design.mod.ContentReplacer; +import com.fr.design.mod.bean.ChangeItem; +import com.fr.design.mod.impl.repalce.FormulaReplacer; +import com.fr.report.cell.cellattr.core.RichChar; +import java.util.HashMap; +import java.util.Map; + +/** + * 富文本 + * + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class RichCharContentChange implements ContentChange { + + private final Map> map; + + public RichCharContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.RichChar4WidgetNameContentReplacer); + map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.RichChar4TableDataNameContentReplacer); + } + + @Override + public String type() { + return RichChar.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4TableDataNameContentReplacer.java b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4TableDataNameContentReplacer.java deleted file mode 100644 index 8f4dafa2a5..0000000000 --- a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4TableDataNameContentReplacer.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.fr.design.mod.impl.repalce; - -import com.fr.base.Formula; -import com.fr.design.mod.ContentReplaceUtil; -import com.fr.design.mod.ContentReplacer; -import com.fr.parser.FRFormulaTransformer; - -/** - * @author hades - * @version 10.0 - * Created by hades on 2021/5/28 - */ -public class Formula4TableDataNameContentReplacer implements ContentReplacer { - - @Override - public void replace(Formula formula, String oldName, String newName) { - FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); - frFormulaTransformer.addRenamedDataset(oldName, newName); - formula.setContent(ContentReplaceUtil.EQ_STRING + frFormulaTransformer.transform(formula.getPureContent())); - } - -} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4WidgetNameContentReplacer.java b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4WidgetNameContentReplacer.java deleted file mode 100644 index 0e0e2e05fc..0000000000 --- a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4WidgetNameContentReplacer.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.fr.design.mod.impl.repalce; - -import com.fr.base.Formula; -import com.fr.design.mod.ContentReplaceUtil; -import com.fr.design.mod.ContentReplacer; -import com.fr.parser.FRFormulaTransformer; - -/** - * @author hades - * @version 10.0 - * Created by hades on 2021/5/28 - */ -public class Formula4WidgetNameContentReplacer implements ContentReplacer { - - @Override - public void replace(Formula formula, String oldName, String newName) { - FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); - frFormulaTransformer.addRenamedWidget(oldName, newName); - formula.setContent(ContentReplaceUtil.EQ_STRING + frFormulaTransformer.transform(formula.getPureContent())); - } -} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/FormulaReplacer.java b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/FormulaReplacer.java new file mode 100644 index 0000000000..b571010a05 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/FormulaReplacer.java @@ -0,0 +1,151 @@ +package com.fr.design.mod.impl.repalce; + +import com.fr.base.Formula; +import com.fr.base.headerfooter.FormulaHFElement; +import com.fr.base.present.FormulaPresent; +import com.fr.data.condition.FormulaCondition; +import com.fr.data.impl.FormulaDictionary; +import com.fr.design.mod.ContentReplaceUtil; +import com.fr.design.mod.ContentReplacer; +import com.fr.report.cell.cellattr.CellExpandAttr; +import com.fr.report.cell.cellattr.core.RichChar; + +/** + * 持有公式内容对象汇总 + * + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class FormulaReplacer { + + /** + * 扩展后排序公式 + */ + public static final ContentReplacer CellExpandAttr4TableDataNameContentReplacer = new ContentReplacer() { + @Override + public void replace(CellExpandAttr cellExpandAttr, String oldName, String newName) { + cellExpandAttr.setSortFormula(ContentReplaceUtil.replaceFormulaContent4TableDataName(cellExpandAttr.getSortFormula(), oldName, newName)); + } + }; + + public static final ContentReplacer CellExpandAttr4WidgetNameContentReplacer = new ContentReplacer() { + @Override + public void replace(CellExpandAttr cellExpandAttr, String oldName, String newName) { + cellExpandAttr.setSortFormula(ContentReplaceUtil.replaceFormulaContent4WidgetName(cellExpandAttr.getSortFormula(), oldName, newName)); + } + }; + + /** + * 典型单元格公式 + */ + public static final ContentReplacer Formula4TableDataNameContentReplacer = new ContentReplacer() { + @Override + public void replace(Formula formula, String oldName, String newName) { + formula.setContent(ContentReplaceUtil.replaceFormulaContent4TableDataName(formula.getPureContent(), oldName, newName)); + } + }; + + + public static final ContentReplacer Formula4WidgetNameContentReplacer = new ContentReplacer() { + @Override + public void replace(Formula formula, String oldName, String newName) { + formula.setContent(ContentReplaceUtil.replaceFormulaContent4WidgetName(formula.getPureContent(), oldName, newName)); + } + }; + + /** + * 公式条件 + */ + public static final ContentReplacer FormulaCondition4TableDataNameContentReplacer = new ContentReplacer() { + @Override + public void replace(FormulaCondition formulaCondition, String oldName, String newName) { + formulaCondition.setFormula(ContentReplaceUtil.replaceFormulaContent4TableDataName(formulaCondition.getFormula(), oldName, newName)); + } + }; + + public static final ContentReplacer FormulaCondition4WidgetNameContentReplacer = new ContentReplacer() { + @Override + public void replace(FormulaCondition formulaCondition, String oldName, String newName) { + formulaCondition.setFormula(ContentReplaceUtil.replaceFormulaContent4WidgetName(formulaCondition.getFormula(), oldName, newName)); + } + }; + + /** + * 数据字典——公式 + */ + + public static final ContentReplacer FormulaDictionary4TableDataNameContentReplacer = new ContentReplacer() { + @Override + public void replace(FormulaDictionary formulaDictionary, String oldName, String newName) { + formulaDictionary.setExcuteFormula(ContentReplaceUtil.replaceFormulaContent4TableDataName(formulaDictionary.getExcuteFormula(), oldName, newName)); + formulaDictionary.setProduceFormula(ContentReplaceUtil.replaceFormulaContent4TableDataName(formulaDictionary.getProduceFormula(), oldName, newName)); + } + }; + + public static final ContentReplacer FormulaDictionary4WidgetNameContentReplacer = new ContentReplacer() { + @Override + public void replace(FormulaDictionary formulaDictionary, String oldName, String newName) { + formulaDictionary.setExcuteFormula(ContentReplaceUtil.replaceFormulaContent4WidgetName(formulaDictionary.getExcuteFormula(), oldName, newName)); + formulaDictionary.setProduceFormula(ContentReplaceUtil.replaceFormulaContent4WidgetName(formulaDictionary.getProduceFormula(), oldName, newName)); + } + }; + + /** + * 页面/页脚——公式 + */ + + public static final ContentReplacer FormulaHFElement4TableDataNameContentReplacer = new ContentReplacer() { + @Override + public void replace(FormulaHFElement formulaHFElement, String oldName, String newName) { + formulaHFElement.setFormulaContent(ContentReplaceUtil.replaceFormulaContent4TableDataName(formulaHFElement.getFormulaContent(), oldName, newName)); + } + }; + + public static final ContentReplacer FormulaHFElement4WidgetNameContentReplacer = new ContentReplacer() { + @Override + public void replace(FormulaHFElement formulaHFElement, String oldName, String newName) { + formulaHFElement.setFormulaContent(ContentReplaceUtil.replaceFormulaContent4WidgetName(formulaHFElement.getFormulaContent(), oldName, newName)); + } + }; + + /** + * 公式形态 + */ + + public static final ContentReplacer FormulaPresent4TableDataNameContentReplacer = new ContentReplacer() { + @Override + public void replace(FormulaPresent formulaPresent, String oldName, String newName) { + formulaPresent.setFormulaContent(ContentReplaceUtil.replaceFormulaContent4TableDataName(formulaPresent.getFormulaContent(), oldName, newName)); + } + }; + + public static final ContentReplacer FormulaPresent4WidgetNameContentReplacer = new ContentReplacer() { + @Override + public void replace(FormulaPresent formulaPresent, String oldName, String newName) { + formulaPresent.setFormulaContent(ContentReplaceUtil.replaceFormulaContent4WidgetName(formulaPresent.getFormulaContent(), oldName, newName)); + } + }; + + /** + * 富文本公式 + */ + public static final ContentReplacer RichChar4TableDataNameContentReplacer = new ContentReplacer() { + @Override + public void replace(RichChar richChar, String oldName, String newName) { + if (richChar.isFormula()) { + richChar.setText(ContentReplaceUtil.replaceRichCharFormulaContent4TableDataName(richChar.getText(), oldName, newName)); + } + } + }; + + public static final ContentReplacer RichChar4WidgetNameContentReplacer = new ContentReplacer() { + @Override + public void replace(RichChar richChar, String oldName, String newName) { + if (richChar.isFormula()) { + richChar.setText(ContentReplaceUtil.replaceRichCharFormulaContent4WidgetName(richChar.getText(), oldName, newName)); + } + } + }; + +} From 0b9f538bd81c8bbe89e1cfc9019c4a534dfde5b2 Mon Sep 17 00:00:00 2001 From: pengda Date: Wed, 2 Jun 2021 22:51:43 +0800 Subject: [PATCH 059/148] =?UTF-8?q?REPORT-51958=20=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=A3=80=E6=B5=8B=E5=8F=8A=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/EnvChangeEntrance.java | 9 +- .../java/com/fr/design/VersionCheckUtils.java | 429 ++++++++++++++++++ .../fr/design/update/actions/FileProcess.java | 8 +- .../java/com/fr/env/CheckServiceDialog.java | 421 ++++++++++++++--- .../src/main/java/com/fr/env/ErrorDialog.java | 73 +++ .../com/fr/env/SyncFailedPluginsDialog.java | 119 +++++ .../com/fr/env/VersionCheckMessageDialog.java | 100 ++++ .../com/fr/design/EnvChangeEntranceTest.java | 2 +- .../module/DesignerWorkspaceProvider.java | 8 +- 9 files changed, 1094 insertions(+), 75 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/VersionCheckUtils.java create mode 100644 designer-base/src/main/java/com/fr/env/ErrorDialog.java create mode 100644 designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java create mode 100644 designer-base/src/main/java/com/fr/env/VersionCheckMessageDialog.java diff --git a/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java b/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java index 5196c783aa..c71dc34716 100644 --- a/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java +++ b/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java @@ -22,6 +22,7 @@ import com.fr.env.CheckServiceDialog; import com.fr.env.EnvListPane; import com.fr.env.RemoteWorkspaceURL; import com.fr.env.TestConnectionResult; +import com.fr.env.VersionCheckMessageDialog; import com.fr.exit.DesignerExiter; import com.fr.general.ComparatorUtils; import com.fr.general.GeneralUtils; @@ -96,6 +97,10 @@ public class EnvChangeEntrance { */ public void switch2Env(final String envName) { switch2Env(envName, PopTipStrategy.LATER); + if(!VersionCheckUtils.versionCheck(envName)){ + VersionCheckMessageDialog versionCheckMessageDialog = new VersionCheckMessageDialog(DesignerContext.getDesignerFrame(),Toolkit.i18nText("Fine-Design_Basic_Sync_Check_Brief_Info"),envName); + versionCheckMessageDialog.setVisible(true); + } } /** @@ -145,7 +150,6 @@ public class EnvChangeEntrance { if (template != null) { template.refreshToolArea(); } - showServiceDialog(selectedEnv); pluginErrorRemind(); } catch (WorkspaceAuthException | RegistEditionException e) { // String title = Toolkit.i18nText("Fine-Design_Basic_Remote_Connect_Auth_Failed"); @@ -294,8 +298,7 @@ public class EnvChangeEntrance { if(StringUtils.isEmpty(areaText)){ return; } - CheckServiceDialog dialog = new CheckServiceDialog(DesignerContext.getDesignerFrame(), areaText, localBranch, remoteBranch); - dialog.setVisible(true); + } } } diff --git a/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java b/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java new file mode 100644 index 0000000000..2af000f86b --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java @@ -0,0 +1,429 @@ +package com.fr.design; + +import com.fr.base.FRContext; +import com.fr.decision.update.data.UpdateConstants; +import com.fr.decision.update.exception.UpdateException; +import com.fr.decision.update.info.UpdateCallBack; +import com.fr.decision.update.info.UpdateProcessBean; +import com.fr.design.env.DesignerWorkspaceInfo; +import com.fr.design.env.DesignerWorkspaceType; +import com.fr.design.env.RemoteWorkspace; +import com.fr.design.i18n.Toolkit; +import com.fr.general.CommonIOUtils; +import com.fr.general.ComparatorUtils; +import com.fr.general.GeneralUtils; +import com.fr.general.IOUtils; +import com.fr.general.http.HttpToolbox; +import com.fr.invoke.Reflect; +import com.fr.json.JSONArray; +import com.fr.json.JSONObject; +import com.fr.locale.InterProviderFactory; +import com.fr.log.FineLoggerFactory; +import com.fr.plugin.context.PluginContext; +import com.fr.plugin.manage.PluginManager; +import com.fr.plugin.manage.control.PluginTaskCallback; +import com.fr.plugin.manage.control.PluginTaskResult; +import com.fr.plugin.manage.control.ProgressCallback; +import com.fr.rpc.Result; +import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; +import com.fr.third.org.apache.http.client.methods.CloseableHttpResponse; +import com.fr.third.org.apache.http.client.methods.HttpGet; +import com.fr.third.org.apache.http.impl.client.CloseableHttpClient; +import com.fr.workspace.WorkContext; +import com.fr.workspace.base.WorkspaceAPI; +import com.fr.workspace.connect.WorkspaceConnectionInfo; +import com.fr.workspace.engine.base.FineObjectPool; +import com.fr.workspace.engine.channel.http.FunctionalHttpRequest; +import com.fr.workspace.engine.exception.WorkspaceConnectionException; +import com.fr.workspace.engine.rpc.WorkspaceProxyPool; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Method; +import java.net.ProtocolException; +import java.net.URI; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.CountDownLatch; + +/** + * @author pengda + * @version 10.0 + * Created by Bryant on 2021-06-02 + */ +public class VersionCheckUtils { + private static final String SYNCPLUGINLIB = StableUtils.getInstallHome() + "/logs/syncLib/plugins/"; + private static final String SYNCLIB = StableUtils.getInstallHome() + "/logs/syncLib/"; + private static final String ZIP = ".zip"; + public static final String INCONSISTENCY = "inconsistency"; + public static final String MISSING = "missing"; + private static final String ID = "id"; + private static final String VERSION = "version"; + private static final String NAME = "name"; + + + public static boolean versionCheck(String envName) { + return checkLocalAndRemoteJartime(envName) && checkLocalAndRemotePlugin().size() == 0; + } + + public static boolean versionCheck(DesignerWorkspaceInfo selectedEnv) { + return checkLocalAndRemoteJartime(selectedEnv) && checkLocalAndRemotePlugin().size() == 0; + } + + public static boolean checkLocalAndRemoteJartime(String envName) { + DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); + DesignerWorkspaceInfo selectedEnv = envManager.getWorkspaceInfo(envName); + return checkLocalAndRemoteJartime(selectedEnv); + } + + public static boolean checkLocalAndRemoteJartime(DesignerWorkspaceInfo selectedEnv){ + //是否需要做服务校验 + if (needCheckBranch(selectedEnv)) { + String localBranch; + String remoteBranch = getRemoteBranch(selectedEnv); + localBranch = GeneralUtils.readFullBuildNO(); + //通过是否包含#来避免当前版本为非安装版本(主要是内部开发版本) + if (localBranch.contains("#") && ComparatorUtils.equals(localBranch, remoteBranch)) { + //说明版本一致,仅做日志记录 + FineLoggerFactory.getLogger().info("Remote Designer version consistency"); + return true; + } else { + return false; + } + } + return true; + } + + public static List getNoExistServiceDescription(String envName) { + DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); + DesignerWorkspaceInfo selectedEnv = envManager.getWorkspaceInfo(envName); + WorkspaceConnectionInfo connectionInfo = selectedEnv.getConnection(); + List noExistServiceDescription = new ArrayList<>(); + Set noExistServiceSet = getNoExistServiceSet(connectionInfo); + for (Class clazz : noExistServiceSet) { + WorkspaceAPI workspaceAPI = (WorkspaceAPI) clazz.getAnnotation(WorkspaceAPI.class); + if (workspaceAPI == null) { + FineLoggerFactory.getLogger().info("workspace service {} get annotation failed", clazz); + continue; + } + if (workspaceAPI.ignore()) { + continue; + } + String descriptionOfCN = InterProviderFactory.getProvider().getLocText(workspaceAPI.description()); + noExistServiceDescription.add(descriptionOfCN); + } + return noExistServiceDescription; + } + + public static String getRemoteBranch(String envName) { + DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); + DesignerWorkspaceInfo selectedEnv = envManager.getWorkspaceInfo(envName); + return getRemoteBranch(selectedEnv); + } + + public static String getRemoteBranch(DesignerWorkspaceInfo selectedEnv) { + String remoteBranch = StringUtils.EMPTY; + WorkspaceConnectionInfo connectionInfo = selectedEnv.getConnection(); + try { + remoteBranch = new FunctionalHttpRequest(connectionInfo).getServerBranch(); + } catch (WorkspaceConnectionException e) { + remoteBranch = Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Branch_Is_Old") + formatBranch(GeneralUtils.readFullBuildNO()); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return remoteBranch; + } + + /** + * 获取不存在的服务列表 + * + * @param info 环境连接信息 + * @return 以Set形式返回不存在的服务 + */ + public static Set getNoExistServiceSet(WorkspaceConnectionInfo info) { + Set noExistServiceSet = new HashSet(); + Set remoteServiceSet = new HashSet(); + Set localServiceSet = FineObjectPool.getInstance().getServerPool().keySet(); + + try { + JSONArray serviceArray = new FunctionalHttpRequest(info).getServiceList(); + for (int i = 0; i < serviceArray.size(); i++) { + try { + Class clazz = Class.forName((String) serviceArray.get(i)); + remoteServiceSet.add(clazz); + } catch (Exception e) { + continue; + } + } + noExistServiceSet.addAll(localServiceSet); + noExistServiceSet.removeAll(remoteServiceSet); + return noExistServiceSet; + } catch (WorkspaceConnectionException e) { + FineLoggerFactory.getLogger().info(e.getMessage()); + //根据本地的服务列表做逐一检测 + for (Class clazz : localServiceSet) { + Method testMethod = Reflect.on(Method.class).create(clazz, "connectTest", new Class[0], String.class, new Class[0], 1025, 8, null, null, null, null).get(); + WorkspaceProxyPool proxyPool = (WorkspaceProxyPool) (((RemoteWorkspace) WorkContext.getCurrent()).getClient()).getPool(); + Result result = proxyPool.testInvoker(testMethod); + Exception invokeException = (Exception) result.getException(); + if (invokeException != null) { + Exception cause = (Exception) invokeException.getCause(); + //获取被包装最底层的异常 + while (cause != null) { + invokeException = cause; + cause = (Exception) invokeException.getCause(); + } + //该异常表示服务不存在 + if (invokeException instanceof ClassNotFoundException) { + noExistServiceSet.add(clazz); + } + } + } + return noExistServiceSet; + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + return noExistServiceSet; + } + } + + /** + * 格式化分支版本号 + * + * @param branch 初始的分支版本号 + * @return 格式化后的版本号 + */ + private static String formatBranch(String branch) { + if (branch.contains("#")) { + return branch.substring(branch.lastIndexOf("-") + 1, branch.length() - 13); + } + return branch; + } + + private static boolean needCheckBranch(DesignerWorkspaceInfo selectedEnv) { + if (selectedEnv.getType() == DesignerWorkspaceType.Remote) { + return true; + } + return false; + } + + public static JSONArray checkLocalAndRemotePlugin() { + JSONArray differentPlugins = new JSONArray(); + JSONArray remotePlugins = FRContext.getCommonOperator().getPluginStatus(); + Map localPluginsMap = new HashMap<>(); + List localPlugins = PluginManager.getContexts(); + for (PluginContext pluginContext : localPlugins) { + localPluginsMap.put(pluginContext.getID(), pluginContext); + } + JSONObject remotePlugin; + for (int i = 0; i < remotePlugins.size(); i++) { + remotePlugin = remotePlugins.getJSONObject(i); + if (localPluginsMap.containsKey(remotePlugin.getString(ID))) { + if (ComparatorUtils.equals(localPluginsMap.get(remotePlugin.getString(ID)).getVersion(), remotePlugin.getString(VERSION))) { + continue; + } else { + if (remotePlugin.getString(NAME) == null) { + remotePlugin.put(NAME, localPluginsMap.get(remotePlugin.getString(ID)).getName()); + } + remotePlugin.put("type", INCONSISTENCY); + } + } + remotePlugin.put("type", MISSING); + if (remotePlugin.getString(NAME) == null) { + remotePlugin.put(NAME, remotePlugin.getString("id")); + } + differentPlugins.put(remotePlugin); + } + return differentPlugins; + } + + public static JSONArray syncPlugins(JSONArray differentPlugins, UpdateCallBack callBack) { + Set uninstallFailed = uninstallPlugins(differentPlugins); + Map downloadURL = getPluginsDownloadURL(differentPlugins, uninstallFailed); + downloadPlugins(downloadURL, callBack); + return installPlugins(differentPlugins); + } + + private static Set uninstallPlugins(JSONArray differentPlugins) { + Map localPluginsMap = new HashMap<>(); + List localPlugins = PluginManager.getContexts(); + for (PluginContext pluginContext : localPlugins) { + localPluginsMap.put(pluginContext.getID(), pluginContext); + } + Set uninstallFailedID = new HashSet<>(); + for (int i = 0; i < differentPlugins.size(); i++) { + String id = differentPlugins.getJSONObject(i).getString(ID); + if (localPluginsMap.containsKey(id)) { + PluginManager.getController().uninstall(localPluginsMap.get(id).getMarker(), true, new PluginTaskCallback() { + @Override + public void done(PluginTaskResult result) { + if (!result.isSuccess()) { + FineLoggerFactory.getLogger().error("uninstall plugin:" + id + " failed"); + uninstallFailedID.add(id); + } + } + }); + } + } + return uninstallFailedID; + } + + private static JSONArray installPlugins(JSONArray differentPlugins) { + File file = new File(SYNCPLUGINLIB); + JSONArray syncFailedPlugins = JSONArray.create(); + if (file.isDirectory()) { + File[] plugins = file.listFiles(); + if (plugins != null && plugins.length > 0) { + CountDownLatch latch = new CountDownLatch(plugins.length); + for (File plugin : plugins) { + if (plugin.getName().endsWith(ZIP)) { + PluginManager.getController().install(plugin, new ProgressCallback() { + @Override + public void updateProgress(String description, double progress) { + } + @Override + public void done(PluginTaskResult result) { + latch.countDown(); + } + }); + } + } + try { + latch.await(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + List localPlugins = PluginManager.getContexts(); + Map localPluginsInfo = new HashMap<>(); + for (int i = 0; i < localPlugins.size(); i++) { + localPluginsInfo.put(localPlugins.get(i).getID(), localPlugins.get(i).getVersion()); + } + for (int i = 0; i < differentPlugins.size(); i++) { + JSONObject plugin = differentPlugins.getJSONObject(i); + String id = plugin.getString(ID); + if (localPluginsInfo.containsKey(id) && ComparatorUtils.equals(plugin.getString(VERSION), localPluginsInfo.get(id))) { + continue; + } + syncFailedPlugins.add(plugin); + } + return syncFailedPlugins; + } + + private static void downloadPlugins(Map urls, UpdateCallBack callBack) { + CommonIOUtils.deleteFile(new File(SYNCLIB)); + UpdateProcessBean bean = new UpdateProcessBean(); + FileOutputStream fos = null; + CloseableHttpClient httpClient; + CloseableHttpResponse httpResponse; + HttpGet httpGet = new HttpGet(); + InputStream in = null; + try { + for (String idAndVersion : urls.keySet()) { + try { + httpGet.setURI(URI.create(urls.get(idAndVersion))); + httpClient = HttpToolbox.getHttpClient(urls.get(idAndVersion)); + String target = SYNCPLUGINLIB + idAndVersion + ZIP; + httpResponse = httpClient.execute(httpGet); + if (httpResponse.getStatusLine().getStatusCode() != 200) { + FineLoggerFactory.getLogger().error("download plugin error :" + urls.get(idAndVersion)); + continue; + } + long totalSize = httpResponse.getEntity().getContentLength(); + in = httpResponse.getEntity().getContent(); + //保存文件 + File saveDir = new File(target); + StableUtils.makesureFileExist(saveDir); + + bean.setDownloadedFiles(bean.getDownloadedFiles() + 1); + bean.setName(idAndVersion); + bean.setTotalLength((int) totalSize); + bean.setDownloadLength(0); + callBack.updateProgress(bean); + fos = new FileOutputStream(saveDir); + int bytesRead; + int totalBytesRead = 0; + byte[] getData = new byte[UpdateConstants.BYTE]; + while ((bytesRead = in.read(getData)) != -1) { + fos.write(getData, 0, bytesRead); + getData = new byte[UpdateConstants.BYTE]; + totalBytesRead += bytesRead; + bean.setDownloadLength(totalBytesRead); + callBack.updateProgress(bean); + } + } catch (ProtocolException e) { + UpdateException exception = new UpdateException(e.getMessage() + " downloadPluginZip Exception in network"); + FineLoggerFactory.getLogger().error(exception.getErrorMessage(), e); + } catch (IOException e) { + UpdateException exception = new UpdateException(e.getMessage() + " downloadPluginZip Exception in download"); + FineLoggerFactory.getLogger().error(exception.getErrorMessage(), e); + } + } + } finally { + CommonIOUtils.close(fos); + CommonIOUtils.close(in); + } + } + + + private static Map getPluginsDownloadURL(JSONArray differentPlugins, Set uninstallFailed) { + Map downloadURL = new HashMap<>(); + JSONObject differentPlugin; + String id; + String version; + try { + for (int i = 0; i < differentPlugins.size(); i++) { + String url = null; + differentPlugin = differentPlugins.getJSONObject(i); + id = differentPlugin.getString(ID); + if (uninstallFailed.contains(id)) { + continue; + } + version = differentPlugin.getString(VERSION); + try { + //url = CloudCenter.getInstance().acquireUrlByKind("sync10.plugin"); + url = "http://192.168.5.83:3008/api/v1/plugin/download/history?pluginId={}&version={}"; + url = StringUtils.messageFormat(url, id, version); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + + downloadURL.put(id + "-" + version, url); + } + } catch (Exception e) { + + } + return getPluginZipDownloadURL(downloadURL); + } + + private static Map getPluginZipDownloadURL(Map urls) { + CloseableHttpClient httpClient; + CloseableHttpResponse httpResponse; + HttpGet httpGet = new HttpGet(); + InputStream in = null; + try { + for (String idAndVersion : urls.keySet()) { + httpClient = HttpToolbox.getHttpClient(urls.get(idAndVersion)); + httpGet.setURI(URI.create(urls.get(idAndVersion))); + httpResponse = httpClient.execute(httpGet); + in = httpResponse.getEntity().getContent(); + JSONObject urlJson = new JSONObject(IOUtils.inputStream2String(in)); + String downloadURL = urlJson.getString("result"); + if (downloadURL != null) { + urls.replace(idAndVersion, urlJson.getString("result")); + } + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } finally { + CommonIOUtils.close(in); + } + return urls; + } +} diff --git a/designer-base/src/main/java/com/fr/design/update/actions/FileProcess.java b/designer-base/src/main/java/com/fr/design/update/actions/FileProcess.java index 2ed0801dca..c9556bd77d 100644 --- a/designer-base/src/main/java/com/fr/design/update/actions/FileProcess.java +++ b/designer-base/src/main/java/com/fr/design/update/actions/FileProcess.java @@ -15,14 +15,20 @@ import java.util.concurrent.ExecutionException; public abstract class FileProcess extends SwingWorker { private UpdateCallBack callBack; + private String fullBuildNo = null; public FileProcess(UpdateCallBack callBack) { this.callBack = callBack; } + public FileProcess(UpdateCallBack callBack,String fullBuildNo) { + this.callBack = callBack; + this.fullBuildNo = fullBuildNo; + } + @Override protected Boolean doInBackground() throws Exception { - return UpdateExecutor.getInstance().execute(callBack); + return UpdateExecutor.getInstance().execute(callBack,fullBuildNo); } @Override diff --git a/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java b/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java index efee9bfdfc..30c6ec15a9 100644 --- a/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java +++ b/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java @@ -1,32 +1,68 @@ package com.fr.env; -import com.fr.design.DesignerEnvManager; -import com.fr.design.env.RemoteDesignerWorkspaceInfo; +import com.fr.decision.update.data.UpdateConstants; +import com.fr.decision.update.info.UpdateCallBack; +import com.fr.decision.update.info.UpdateProgressCallBack; +import com.fr.design.RestartHelper; +import com.fr.design.VersionCheckUtils; +import com.fr.design.dialog.FineJOptionPane; import com.fr.design.gui.ibutton.UIButton; -import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.update.actions.FileProcess; +import com.fr.design.update.ui.dialog.RestoreResultDialog; import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.env.utils.DisplayUtils; +import com.fr.general.CloudCenter; +import com.fr.general.CloudCenterConfig; +import com.fr.general.ComparatorUtils; import com.fr.general.FRFont; import com.fr.general.GeneralContext; import com.fr.general.IOUtils; +import com.fr.general.http.HttpToolbox; +import com.fr.json.JSONArray; +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.process.engine.core.FineProcessContext; +import com.fr.process.engine.core.FineProcessEngineEvent; +import com.fr.stable.CommonUtils; +import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; +import com.fr.stable.project.ProjectConstants; +import com.sun.java.swing.plaf.motif.MotifProgressBarUI; +import java.awt.Color; +import java.awt.Component; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.io.File; +import java.util.List; +import java.util.concurrent.ExecutionException; import javax.swing.BorderFactory; import javax.swing.Icon; import javax.swing.JDialog; +import javax.swing.JFrame; import javax.swing.JLabel; +import javax.swing.JOptionPane; import javax.swing.JPanel; -import javax.swing.JTextArea; -import javax.swing.JTextPane; +import javax.swing.JProgressBar; +import javax.swing.JScrollPane; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.text.SimpleDateFormat; -import java.util.Date; import java.util.Locale; +import javax.swing.ScrollPaneConstants; +import javax.swing.SwingWorker; +import javax.swing.UIManager; + + +import static javax.swing.JOptionPane.QUESTION_MESSAGE; /** * @author: Maksim @@ -36,11 +72,34 @@ import java.util.Locale; public class CheckServiceDialog extends JDialog implements ActionListener { private JPanel topPanel; private JPanel centerPanel; - private JPanel bottomPanel; - private UICheckBox remindBox; + private UIButton ignoreButton; + private UIButton syncButton; + private JProgressBar progressBar; + private String remoteBuildNo; + private static final Dimension PROGRESSBAR = new Dimension(120, 15); + private JSONArray differentPlugins; + private UILabel affectedFunctionsLabel; + private UILabel jarCheckResultLabel; + private UILabel jarCheckTitleLabel; + private UILabel pluginCheckTitleLabel; + + private JPanel affectedFunctionsDetailsPane; + private JPanel pluginsCheckResultPanel; + private JPanel detailsInnerPane; + private JPanel detailsPane; + private JScrollPane jScrollPane; + private Component[][] detailsComponents; + private Component[][] hideAffectedFunctionsComponents; + private boolean showAffectedFunctions = true; + private boolean jarConsistency; + private double p = TableLayout.PREFERRED; + private double f = TableLayout.FILL; - public CheckServiceDialog(Frame parent, String areaText, String localBranch, String remoteBranch){ - super(parent,true); + public CheckServiceDialog(Frame parent, String localBranch, String remoteBranch, List noExistServiceDescription) { + super(parent, true); + this.remoteBuildNo = remoteBranch; + this.differentPlugins = VersionCheckUtils.checkLocalAndRemotePlugin(); + this.jarConsistency = ComparatorUtils.equals(localBranch, remoteBranch); //上面的标签面板 topPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); JPanel imagePanel = new JPanel(); @@ -49,90 +108,314 @@ public class CheckServiceDialog extends JDialog implements ActionListener { JLabel imageLabel = new JLabel(); imageLabel.setIcon(icon); imagePanel.add(imageLabel); - imagePanel.setPreferredSize(new Dimension(110,100)); + imagePanel.setPreferredSize(new Dimension(110, 100)); JPanel verticalPanel = FRGUIPaneFactory.createVerticalFlowLayout_S_Pane(true); FRFont font = FRFont.getInstance(); font = font.applySize(15).applyStyle(1); - JLabel label = new JLabel(Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Branch_Inconsistency")); + UILabel label = new UILabel(Toolkit.i18nText("Fine-Design_Basic_Sync_Branch_Inconsistency")); label.setFont(font); - label.setPreferredSize(new Dimension(650,30)); - - String text = Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Local_Designer") + localBranch - + Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Remote_Server") + - Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Branch_Is_Old") + - localBranch; - String delimiter = DisplayUtils.getDisplayLength(text) > 70? "
":"/"; - JLabel label2 = new JLabel(""+Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Local_Designer") - + localBranch + delimiter + Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Remote_Server") + - Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Branch_Is_Old")+ localBranch +""); - label2.setPreferredSize(new Dimension(600,30)); - - JTextPane tipsPane = new JTextPane(); - tipsPane.setEditable(false); - tipsPane.setBackground(verticalPanel.getBackground()); - tipsPane.setPreferredSize(new Dimension(500,40)); - tipsPane.setText(Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Branch_Need_Update")); + label.setPreferredSize(new Dimension(650, 30)); + UILabel label2 = new UILabel(Toolkit.i18nText("Fine-Design_Basic_Sync_Inconsistency_Risk")); + label2.setPreferredSize(new Dimension(600, 30)); verticalPanel.add(label); verticalPanel.add(label2); - verticalPanel.add(tipsPane); - topPanel.add(imagePanel,BorderLayout.WEST); - topPanel.add(verticalPanel,BorderLayout.CENTER); - topPanel.setBorder(BorderFactory.createEmptyBorder(10,10,0,10)); + topPanel.add(imagePanel, BorderLayout.WEST); + topPanel.add(verticalPanel, BorderLayout.CENTER); + topPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 10)); //中间的文本域面板 centerPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); - centerPanel.setBorder(BorderFactory.createEmptyBorder(0,10,10,10)); - centerPanel.setPreferredSize(new Dimension(480,320)); - - JLabel titleLabel = new JLabel(Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Affected_Function")); - titleLabel.setPreferredSize(new Dimension(400,40)); - JTextArea checkArea = new JTextArea(areaText); - checkArea.setEnabled(false); - centerPanel.add(titleLabel,BorderLayout.NORTH); - centerPanel.add(checkArea,BorderLayout.CENTER); - - //下面的按钮面板 - remindBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Remind_Show")); - remindBox.addActionListener(remindCheckboxListener); - UIButton okButton = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Button_Confirm")); - JPanel buttonPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); - buttonPanel.setBorder(BorderFactory.createEmptyBorder(0,10,10,10)); - buttonPanel.add(remindBox, BorderLayout.WEST); - buttonPanel.add(okButton,BorderLayout.EAST); - okButton.addActionListener(this ); - bottomPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); - bottomPanel.add(buttonPanel); + centerPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10)); + centerPanel.setPreferredSize(new Dimension(480, 320)); + + UILabel titleLabel = new UILabel(Toolkit.i18nText("Fine-Design_Basic_Sync_Details")); + titleLabel.setPreferredSize(new Dimension(400, 40)); + //详情面板 + detailsPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane(); + detailsPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 0, 0)); + detailsPane.setBackground(Color.WHITE); + + jarCheckTitleLabel = new UILabel(Toolkit.i18nText("Fine-Design_Basic_Sync_JAR_Check_title")); + jarCheckTitleLabel.setBackground(Color.WHITE); + + + //插件的检测结果相关面板 + pluginCheckTitleLabel = new UILabel(Toolkit.i18nText("Fine-Design_Basic_Sync_Plugin_Check_title")); + pluginCheckTitleLabel.setBackground(Color.WHITE); + initPluginsCheckResultPanel(differentPlugins); + + //jar包检测结果相关面板 + initJarCheckResultPanel(remoteBranch, noExistServiceDescription); + + double[] detailsRowSize; + double[] detailsColumnSize = {f}; + + detailsComponents = new Component[][]{{jarCheckTitleLabel}, {jarCheckResultLabel}, {affectedFunctionsLabel}, {affectedFunctionsDetailsPane}, {pluginCheckTitleLabel}, {pluginsCheckResultPanel}}; + hideAffectedFunctionsComponents = new Component[][]{{jarCheckTitleLabel}, {jarCheckResultLabel}, {affectedFunctionsLabel}, {pluginCheckTitleLabel}, {pluginsCheckResultPanel}}; + if (noExistServiceDescription.size() > 0 && !ComparatorUtils.equals(remoteBranch, localBranch)) { + detailsRowSize = new double[]{p, p, p, p,p,p}; + detailsInnerPane = TableLayoutHelper.createTableLayoutPane(detailsComponents, detailsRowSize, detailsColumnSize); + } else { + detailsRowSize = new double[]{p, p, 0, 0, p, p}; + detailsInnerPane = TableLayoutHelper.createTableLayoutPane(detailsComponents, detailsRowSize, detailsColumnSize); + } + detailsInnerPane.setBackground(Color.WHITE); + jScrollPane = new JScrollPane(detailsInnerPane, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); + jScrollPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); + detailsPane.add(jScrollPane); + centerPanel.add(titleLabel, BorderLayout.NORTH); + centerPanel.add(detailsPane, BorderLayout.CENTER); + JPanel buttonPanel = FRGUIPaneFactory.createBorderLayout_M_Pane(); + buttonPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10)); + if (isOnline()) { + ignoreButton = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Sync_Ignore")); + ignoreButton.addActionListener(this); + syncButton = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Sync_To_Local")); + syncButton.setToolTipText(Toolkit.i18nText("Fine-Design_Basic_Sync_To_Local_Tip")); + syncButton.addMouseListener(syncButtonClickListener); + progressBar = new JProgressBar(); + progressBar.setUI(new MotifProgressBarUI()); + progressBar.setForeground(UpdateConstants.BAR_COLOR); + progressBar.setVisible(false); + progressBar.setStringPainted(true); + progressBar.setPreferredSize(PROGRESSBAR); + buttonPanel.add(ignoreButton, BorderLayout.WEST); + buttonPanel.add(progressBar, BorderLayout.CENTER); + buttonPanel.add(syncButton, BorderLayout.EAST); + } else { + UILabel adviceLabel = new UILabel(Toolkit.i18nText("Fine-Design_Basic_Sync_Suggestion")); + centerPanel.add(adviceLabel, BorderLayout.SOUTH); + UIButton okButton = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Button_Confirm")); + okButton.addActionListener(this); + buttonPanel.add(okButton, BorderLayout.EAST); + } this.setTitle(Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Title_Hint")); this.setResizable(false); - - this.add(topPanel,BorderLayout.NORTH); + this.add(topPanel, BorderLayout.NORTH); this.add(centerPanel, BorderLayout.CENTER); - this.add(buttonPanel,BorderLayout.SOUTH); - this.setSize(new Dimension(GeneralContext.getLocale().equals(Locale.US)? 750:600, 500)); - + this.add(buttonPanel, BorderLayout.SOUTH); + this.setSize(new Dimension(GeneralContext.getLocale().equals(Locale.US) ? 750 : 600, 500)); GUICoreUtils.centerWindow(this); } + + /** + * 插件检测的结果 + */ + private void initPluginsCheckResultPanel(JSONArray differentPlugins) { + + if (differentPlugins.size() > 0) { + int size = differentPlugins.size(); + Component[][] pluginCheckResultComponents = new Component[size][1]; + double[] pluginCheckResultColumnSize = new double[size]; + for (int i = 0; i < size; i++) { + JSONObject plugin = differentPlugins.getJSONObject(i); + JLabel pluginLabel; + if (ComparatorUtils.equals(VersionCheckUtils.INCONSISTENCY, plugin.getString("type"))) { + pluginLabel = new JLabel("\"" + plugin.getString("name") + "\"" + Toolkit.i18nText("Fine-Design_Basic_Sync_Plugin_Inconsistency_Info") + plugin.getString("version")); + } else if (ComparatorUtils.equals(VersionCheckUtils.MISSING, plugin.getString("type"))) { + pluginLabel = new JLabel("\"" + plugin.getString("name") + "\"" + Toolkit.i18nText("Fine-Design_Basic_Sync_Plugin_Missing_Info") + plugin.getString("version")); + } else { + continue; + } + pluginLabel.setIcon(IOUtils.readIcon("com/fr/design/icon/versioncheck/fail.png")); + pluginCheckResultComponents[i][0] = pluginLabel; + pluginCheckResultColumnSize[i] = p; + } + double[] pluginCheckResultRowSize = {f}; + pluginsCheckResultPanel = TableLayoutHelper.createTableLayoutPane(pluginCheckResultComponents, pluginCheckResultColumnSize, pluginCheckResultRowSize); + } else { + UILabel pluginCheckResultLabel = new UILabel(Toolkit.i18nText("Fine-Design_Basic_Sync_Plugin_Consistency")); + pluginCheckResultLabel.setIcon(IOUtils.readIcon("com/fr/design/icon/versioncheck/success.png")); + pluginsCheckResultPanel = TableLayoutHelper.createTableLayoutPane(new Component[][]{{pluginCheckResultLabel}}, new double[]{p}, new double[]{f}); + } + pluginsCheckResultPanel.setBackground(Color.WHITE); + } + + /** + * jar包检测的结果 + */ + private void initJarCheckResultPanel(String remoteBranch, List noExistServiceDescription) { + jarCheckResultLabel = new UILabel(); + jarCheckResultLabel.setBackground(Color.WHITE); + if (jarConsistency) { + jarCheckResultLabel.setText(Toolkit.i18nText("Fine-Design_Basic_Sync_JAR_Consistency")); + jarCheckResultLabel.setIcon(IOUtils.readIcon("com/fr/design/icon/versioncheck/success.png")); + } else { + jarCheckResultLabel.setText(Toolkit.i18nText("Fine-Design_Basic_Sync_JAR_Inconsistency_Info") + remoteBranch); + jarCheckResultLabel.setIcon(IOUtils.readIcon("com/fr/design/icon/versioncheck/fail.png")); + Component[][] noExistServiceComponents; + int noExistService = noExistServiceDescription.size(); + if (noExistService > 0) { + affectedFunctionsLabel = new UILabel(Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Affected_Function")); + affectedFunctionsLabel.setIcon(UIManager.getIcon("OptionPane.narrow.down")); + affectedFunctionsLabel.setBackground(Color.WHITE); + affectedFunctionsLabel.addMouseListener(affectedFunctionsClickListener); + noExistServiceComponents = new Component[noExistServiceDescription.size()][1]; + double[] noExistServiceColumnSize = new double[noExistService]; + for (int i = 0; i < noExistService; i++) { + JLabel noExitServiceLabel = new JLabel(" " + noExistServiceDescription.get(i)); + noExistServiceComponents[i][0] = noExitServiceLabel; + noExistServiceColumnSize[i] = p; + } + double[] noExistServiceRowSize = {f}; + affectedFunctionsDetailsPane = TableLayoutHelper.createTableLayoutPane(noExistServiceComponents, noExistServiceColumnSize, noExistServiceRowSize); + affectedFunctionsDetailsPane.setBackground(Color.WHITE); + } + } + } + @Override public void actionPerformed(ActionEvent e) { this.dispose(); } + private boolean isOnline() { + if (CloudCenterConfig.getInstance().isOnline()) { + String ping = CloudCenter.getInstance().acquireConf("ping", StringUtils.EMPTY); + if (StringUtils.isNotEmpty(ping)) { + try { + return StringUtils.isEmpty(HttpToolbox.get(ping)); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + return false; + } + } + } + return false; + } - private ActionListener remindCheckboxListener = new ActionListener() { + private MouseListener affectedFunctionsClickListener = new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if (showAffectedFunctions) { + showAffectedFunctions = false; + detailsInnerPane.removeAll(); + affectedFunctionsLabel.setIcon(UIManager.getIcon("OptionPane.narrow.right")); + TableLayoutHelper.addComponent2ResultPane(hideAffectedFunctionsComponents, new double[]{p, p, p, p, p}, new double[]{f}, detailsInnerPane); + jScrollPane.validate(); + jScrollPane.repaint(); + } else { + showAffectedFunctions = true; + detailsInnerPane.removeAll(); + affectedFunctionsLabel.setIcon(UIManager.getIcon("OptionPane.narrow.down")); + TableLayoutHelper.addComponent2ResultPane(detailsComponents, new double[]{p, p, p, p, p, p}, new double[]{f}, detailsInnerPane); + jScrollPane.validate(); + jScrollPane.repaint(); + } + } + }; + private MouseListener syncButtonClickListener = new MouseAdapter() { @Override - public void actionPerformed(ActionEvent e) { - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); - String remindTime = format.format(new Date()); - //环境已切换,通过当前环境获取,一定是远程环境 - String currentEnvName = DesignerEnvManager.getEnvManager().getCurEnvName(); - RemoteDesignerWorkspaceInfo currentEnv = (RemoteDesignerWorkspaceInfo)DesignerEnvManager.getEnvManager().getWorkspaceInfo(currentEnvName); - currentEnv.setRemindTime(remindBox.isSelected()? remindTime : ""); + public void mouseClicked(MouseEvent e) { + String[] option = {Toolkit.i18nText("Fine-Design_Report_Yes"), Toolkit.i18nText("Fine-Design_Report_No")}; + int a = JOptionPane.showOptionDialog(getParent(), Toolkit.i18nText("Fine-Design_Basic_Sync_Info_Information"), + Toolkit.i18nText("Fine-Design_Basic_Confirm"), JOptionPane.YES_NO_OPTION, QUESTION_MESSAGE, IOUtils.readIcon("com/fr/design/icon/versioncheck/question.png"), option, 1); + if (0 == a) { + //jar包一致的话只更新插件 + UpdateCallBack callBack = new UpdateProgressCallBack(progressBar); + progressBar.setVisible(true); + progressBar.setString(Toolkit.i18nText("Fine-Design_Update_Info_Wait_Message")); + syncButton.setEnabled(false); + if (!jarConsistency) { + deletePreviousPropertyFile(); + final String installLib = StableUtils.pathJoin(StableUtils.getInstallHome(), ProjectConstants.LOGS_NAME, UpdateConstants.INSTALL_LIB); + final JFrame frame = DesignerContext.getDesignerFrame(); + final RestartHelper helper = new RestartHelper(); + FineProcessContext.getParentPipe().fire(FineProcessEngineEvent.DESTROY); + new FileProcess(callBack, remoteBuildNo) { + @Override + public void onDownloadSuccess() { + deleteForDesignerUpdate(installLib); + //主jar下载成功之后再卸载安装插件 + new SwingWorker() { + + @Override + protected JSONArray doInBackground() { + return VersionCheckUtils.syncPlugins(differentPlugins, callBack); + } + + @Override + protected void done() { + progressBar.setVisible(false); + JSONArray syncFailedPlugins = null; + try { + syncFailedPlugins = get(); + } catch (Exception ex) { + FineLoggerFactory.getLogger().error(ex.getMessage(), ex); + } + if (syncFailedPlugins != null && syncFailedPlugins.size() > 0) { + SyncFailedPluginsDialog syncFailedPluginsDialog = new SyncFailedPluginsDialog(DesignerContext.getDesignerFrame(), syncFailedPlugins); + syncFailedPluginsDialog.setVisible(true); + } + helper.restartForUpdate(frame); + } + }.execute(); + } + + @Override + public void onDownloadFailed() { + progressBar.setVisible(false); + deleteForDesignerUpdate(installLib); + ErrorDialog errorDialog = new ErrorDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Basic_Sync_Fail")); + errorDialog.setVisible(true); + helper.restartForUpdate(frame); + } + }.execute(); + } else { + //到这边说明主jar是一致的,就只尝试同步插件 + new SwingWorker() { + + @Override + protected JSONArray doInBackground() { + return VersionCheckUtils.syncPlugins(differentPlugins, callBack); + } + + @Override + protected void done() { + progressBar.setVisible(false); + JSONArray syncFailedPlugins = null; + try { + syncFailedPlugins = get(); + } catch (Exception ex) { + FineLoggerFactory.getLogger().error(ex.getMessage(), ex); + } + if (syncFailedPlugins != null && syncFailedPlugins.size() > 0) { + SyncFailedPluginsDialog syncFailedPluginsDialog = new SyncFailedPluginsDialog(DesignerContext.getDesignerFrame(), syncFailedPlugins); + syncFailedPluginsDialog.setVisible(true); + } else { + FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), + Toolkit.i18nText("同步成功"), + Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"), + FineJOptionPane.INFORMATION_MESSAGE); + } + close(); + } + }.execute(); + } + } } }; + private boolean deletePreviousPropertyFile() { + File moveFile = new File(RestartHelper.MOVE_FILE); + File delFile = new File(RestartHelper.RECORD_FILE); + if (StableUtils.mkdirs(moveFile) && StableUtils.mkdirs(delFile)) { + return StableUtils.deleteFile(moveFile) && StableUtils.deleteFile(delFile); + } + return false; + } + + private void close() { + this.dispose(); + } + + private void deleteForDesignerUpdate(String installLib) { + File dir = new File(installLib); + CommonUtils.deleteFile(dir); + } } diff --git a/designer-base/src/main/java/com/fr/env/ErrorDialog.java b/designer-base/src/main/java/com/fr/env/ErrorDialog.java new file mode 100644 index 0000000000..be91955f2f --- /dev/null +++ b/designer-base/src/main/java/com/fr/env/ErrorDialog.java @@ -0,0 +1,73 @@ +package com.fr.env; + +import com.fr.design.dialog.link.MessageWithLink; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.CloudCenter; +import com.fr.general.GeneralContext; +import com.fr.general.IOUtils; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Locale; +import javax.swing.BorderFactory; +import javax.swing.JDialog; +import javax.swing.JPanel; + +/** + * 主jar下载失败的弹出框 + * + * */ + +public class ErrorDialog extends JDialog implements ActionListener { + public ErrorDialog(Frame parent, String message) { + super(parent, true); + init(message); + } + + private void init(String message){ + //主体内容 + JPanel centerPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); + + //带超链的提示信息 + JPanel messagePanel = FRGUIPaneFactory.createLeftFlowZeroGapBorderPane(); + messagePanel.setBorder(BorderFactory.createEmptyBorder(5,0,0,0)); + + MessageWithLink messageWithLink = new MessageWithLink(message + ",", Toolkit.i18nText("Fine-Design_Basic_Sync_Help"), CloudCenter.getInstance().acquireUrlByKind("help.replacejars", "https://help.fanruan.com/finereport/doc-view-3268.html")); + messageWithLink.setPreferredSize(new Dimension(108, 20)); + JPanel messageLinkPane = FRGUIPaneFactory.createBorderLayout_L_Pane(); + messageLinkPane.setBorder(BorderFactory.createEmptyBorder(5, 8, 5, 0)); + messageLinkPane.add(messageWithLink); + + //错误提示图标 + UILabel imageLabel = new UILabel(IOUtils.readIcon("com/fr/design/icon/versioncheck/bigfail.png")); + messagePanel.add(imageLabel); + messagePanel.add(messageLinkPane); + + //确定按钮 + UIButton ok = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Button_OK")); + ok.addActionListener(this); + ok.setSize(new Dimension(44, 20)); + JPanel okPanel = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); + okPanel.add(ok); + + centerPanel.add(messagePanel, BorderLayout.CENTER); + centerPanel.add(okPanel, BorderLayout.SOUTH); + + this.setTitle(Toolkit.i18nText("Fine-Design_Basic_Tool_Tips")); + this.setResizable(false); + this.add(centerPanel, BorderLayout.CENTER); + this.setSize(new Dimension(GeneralContext.getLocale().equals(Locale.US) ? 282 : 262, 118)); + GUICoreUtils.centerWindow(this); + } + + @Override + public void actionPerformed(ActionEvent e) { + this.dispose(); + } +} diff --git a/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java b/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java new file mode 100644 index 0000000000..1171e05728 --- /dev/null +++ b/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java @@ -0,0 +1,119 @@ +package com.fr.env; + +import com.fr.design.RestartHelper; +import com.fr.design.dialog.link.MessageWithLink; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itextarea.UITextArea; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.CloudCenter; +import com.fr.general.GeneralContext; +import com.fr.general.IOUtils; +import com.fr.json.JSONArray; +import com.fr.json.JSONObject; +import com.fr.stable.StringUtils; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.util.Locale; +import javax.swing.BorderFactory; +import javax.swing.Icon; +import javax.swing.JDialog; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.UIManager; + +/** + * @author pengda + * @version 10.0 + * Created by Bryant on 2021-06-02 + */ +public class SyncFailedPluginsDialog extends JDialog { + private UILabel detailsLabel; + private JScrollPane scrollPane; + public SyncFailedPluginsDialog(Frame parent, JSONArray syncFailedPlugins) { + super(parent, true); + JPanel body = FRGUIPaneFactory.createBorderLayout_L_Pane(); + + JPanel northPane = FRGUIPaneFactory.createBorderLayout_L_Pane(); + northPane.setBorder(BorderFactory.createEmptyBorder(0,0,5,0)); + JPanel imagePanel = new JPanel(); + Icon icon = IOUtils.readIcon("com/fr/design/icon/versioncheck/warning.png"); + JLabel imageLabel = new JLabel(); + imageLabel.setIcon(icon); + imagePanel.add(imageLabel); + imagePanel.setPreferredSize(new Dimension(20, 20)); + + JPanel messagePane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + MessageWithLink messageWithLink = new MessageWithLink(Toolkit.i18nText("Fine-Design_Basic_Sync_Plugin_Fail_Suggestion"),Toolkit.i18nText("Fine-Design_Basic_Sync_Deal_Immediately"), + CloudCenter.getInstance().acquireUrlByKind("help.installplugins", "https://help.fanruan.com/finereport/doc-view-2198.html")); + messageWithLink.setPreferredSize(new Dimension(316, 20)); + + messagePane.add(messageWithLink); + messagePane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 0)); + + northPane.add(imageLabel, BorderLayout.WEST); + northPane.add(messagePane, BorderLayout.CENTER); + + JPanel centerPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + detailsLabel = new UILabel(Toolkit.i18nText("Fine_Designer_Look_Detail")); + detailsLabel.setIcon(UIManager.getIcon("OptionPane.narrow.down")); + detailsLabel.addMouseListener(detailsLabelClickListener); + JPanel detailsTitlePanel = FRGUIPaneFactory.createLeftFlowZeroGapBorderPane(); + detailsTitlePanel.add(detailsLabel); + detailsTitlePanel.setBorder(BorderFactory.createEmptyBorder(0,0,5,0)); + + UITextArea detailsTextArea = new UITextArea(); + StringBuilder detailsText = new StringBuilder(StringUtils.EMPTY); + for (int i = 0; i < syncFailedPlugins.size(); i++) { + JSONObject plugin = syncFailedPlugins.getJSONObject(i); + detailsText.append(plugin.getString("name")).append(",").append(Toolkit.i18nText("Fine-Design_Basic_Sync_Server_Version")).append(plugin.getString("version")).append("\n"); + } + detailsTextArea.setText(detailsText.toString()); + scrollPane = new JScrollPane(detailsTextArea); + centerPanel.add(detailsTitlePanel,BorderLayout.NORTH); + centerPanel.add(scrollPane,BorderLayout.CENTER); + + JPanel southPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); + UIButton restartButton = new UIButton(Toolkit.i18nText("Fine-Design_Updater_Restart_Designer")); + restartButton.addMouseListener(restartButtonClickListener); + southPane.add(restartButton); + + body.add(northPane,BorderLayout.NORTH); + body.add(centerPanel,BorderLayout.CENTER); + body.add(southPane,BorderLayout.SOUTH); + + this.setTitle(Toolkit.i18nText("Fine-Design_Basic_Tool_Tips")); + this.setResizable(false); + this.add(body, BorderLayout.CENTER); + this.setSize(new Dimension(GeneralContext.getLocale().equals(Locale.US) ? 400 : 380, 225)); + GUICoreUtils.centerWindow(this); + } + + private MouseListener detailsLabelClickListener = new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if(scrollPane.isVisible()){ + scrollPane.setVisible(false); + detailsLabel.setIcon(UIManager.getIcon("OptionPane.narrow.right")); + }else{ + scrollPane.setVisible(true); + detailsLabel.setIcon(UIManager.getIcon("OptionPane.narrow.down")); + } + } + }; + + private MouseListener restartButtonClickListener = new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + RestartHelper.restartForUpdate(DesignerContext.getDesignerFrame()); + } + }; +} diff --git a/designer-base/src/main/java/com/fr/env/VersionCheckMessageDialog.java b/designer-base/src/main/java/com/fr/env/VersionCheckMessageDialog.java new file mode 100644 index 0000000000..ebbd3a9beb --- /dev/null +++ b/designer-base/src/main/java/com/fr/env/VersionCheckMessageDialog.java @@ -0,0 +1,100 @@ +package com.fr.env; + +import com.fr.design.VersionCheckUtils; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.ComparatorUtils; +import com.fr.general.GeneralContext; +import com.fr.general.GeneralUtils; +import com.fr.general.IOUtils; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import javax.swing.BorderFactory; +import javax.swing.JDialog; +import javax.swing.JPanel; + +/** + * @author pengda + * @version 10.0 + * Created by Bryant on 2021-06-02 + */ +public class VersionCheckMessageDialog extends JDialog implements ActionListener { + private UILabel imageLabel; + private UILabel detailLabel; + private JPanel centerPanel; + private JPanel detailPanel; + private JPanel body; + private String envName; + + public VersionCheckMessageDialog(Frame parent, String message, String envName) { + super(parent, true); + this.envName = envName; + init(message); + } + + private void init(String message) { + JPanel imagePanel = new JPanel(); + imageLabel = new UILabel(IOUtils.readIcon("com/fr/design/images/warnings/warning32.png")); + imagePanel.add(imageLabel); + JPanel messagePanel = FRGUIPaneFactory.createVerticalFlowLayout_S_Pane(true); + UILabel messageText = new UILabel(); + messageText.setText("" + message + ""); + messagePanel.add(messageText); + + centerPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); + centerPanel.setBorder(BorderFactory.createEmptyBorder(15, 10, 10, 10)); + centerPanel.add(imagePanel, BorderLayout.WEST); + centerPanel.add(messagePanel, BorderLayout.CENTER); + + detailLabel = new UILabel(); + detailLabel.setText(Toolkit.i18nText("Fine_Designer_Look_Detail")); + detailLabel.setForeground(Color.BLUE); + + detailPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); + detailPanel.add(detailLabel, BorderLayout.EAST); + + String localBranch = GeneralUtils.readFullBuildNO(); + String remoteBranch = VersionCheckUtils.getRemoteBranch(envName); + List noExistServiceDescription; + if(ComparatorUtils.equals(localBranch,remoteBranch)) { + noExistServiceDescription = new ArrayList<>(); + }else{ + noExistServiceDescription = VersionCheckUtils.getNoExistServiceDescription(this.envName); + } + detailPanel.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + CheckServiceDialog checkServiceDialog = new CheckServiceDialog(DesignerContext.getDesignerFrame(), localBranch, remoteBranch, noExistServiceDescription); + checkServiceDialog.setVisible(true); + } + }); + + body = FRGUIPaneFactory.createBorderLayout_S_Pane(); + body.add(centerPanel, BorderLayout.CENTER); + body.add(detailPanel, BorderLayout.SOUTH); + + this.setTitle(Toolkit.i18nText("Fine-Design_Basic_Sync_Prompt")); + this.setResizable(false); + this.add(body, BorderLayout.NORTH); + this.setSize(new Dimension(GeneralContext.getLocale().equals(Locale.US) ? 300 : 280, 135)); + GUICoreUtils.centerWindow(this); + } + + + @Override + public void actionPerformed(ActionEvent e) { + this.dispose(); + } +} diff --git a/designer-base/src/test/java/com/fr/design/EnvChangeEntranceTest.java b/designer-base/src/test/java/com/fr/design/EnvChangeEntranceTest.java index 07a1d54f84..090838fd0c 100644 --- a/designer-base/src/test/java/com/fr/design/EnvChangeEntranceTest.java +++ b/designer-base/src/test/java/com/fr/design/EnvChangeEntranceTest.java @@ -60,7 +60,7 @@ public class EnvChangeEntranceTest { EasyMock.replay(request, selectedEnv, connectionInfo); PowerMock.replayAll(); - entrance.showServiceDialog(selectedEnv); + //entrance.showServiceDialog(selectedEnv); }catch (Exception e){ Assert.fail(); diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerWorkspaceProvider.java b/designer-realize/src/main/java/com/fr/start/module/DesignerWorkspaceProvider.java index 0a572e6721..0068c6b47a 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerWorkspaceProvider.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerWorkspaceProvider.java @@ -2,6 +2,7 @@ package com.fr.start.module; import com.fr.design.DesignerEnvManager; import com.fr.design.EnvChangeEntrance; +import com.fr.design.VersionCheckUtils; import com.fr.design.constants.DesignerLaunchStatus; import com.fr.design.editlock.ConnectionLockChangeChecker; import com.fr.design.editlock.ServerTableDataLockChangeChecker; @@ -9,7 +10,9 @@ import com.fr.design.env.DesignerWorkspaceGenerator; import com.fr.design.env.DesignerWorkspaceInfo; import com.fr.design.env.LocalDesignerWorkspaceInfo; import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.DesignerContext; import com.fr.env.TestConnectionResult; +import com.fr.env.VersionCheckMessageDialog; import com.fr.event.Event; import com.fr.event.EventDispatcher; import com.fr.event.Listener; @@ -69,7 +72,10 @@ public class DesignerWorkspaceProvider extends Activator { @Override public void on(Event event, Null aNull) { try { - EnvChangeEntrance.getInstance().showServiceDialog(selectEnv); + if(!VersionCheckUtils.versionCheck(selectEnv)){ + VersionCheckMessageDialog versionCheckMessageDialog = new VersionCheckMessageDialog(DesignerContext.getDesignerFrame(),Toolkit.i18nText("Fine-Design_Basic_Sync_Check_Brief_Info"),selectEnv.getName()); + versionCheckMessageDialog.setVisible(true); + } } catch (Exception e) { FineLoggerFactory.getLogger().warn("Check Service Failed"); } From 3982a473681e2fd9fad2b24536506797d44c6457 Mon Sep 17 00:00:00 2001 From: pengda Date: Wed, 2 Jun 2021 22:57:53 +0800 Subject: [PATCH 060/148] =?UTF-8?q?REPORT-51958=20=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=A3=80=E6=B5=8B=E5=8F=8A=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/icon/versioncheck/arrowright.png | Bin 0 -> 179 bytes .../com/fr/design/icon/versioncheck/bigfail.png | Bin 0 -> 722 bytes .../com/fr/design/icon/versioncheck/fail.png | Bin 0 -> 377 bytes .../com/fr/design/icon/versioncheck/question.png | Bin 0 -> 1257 bytes .../com/fr/design/icon/versioncheck/success.png | Bin 0 -> 410 bytes .../com/fr/design/icon/versioncheck/warning.png | Bin 0 -> 942 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 designer-base/src/main/resources/com/fr/design/icon/versioncheck/arrowright.png create mode 100644 designer-base/src/main/resources/com/fr/design/icon/versioncheck/bigfail.png create mode 100644 designer-base/src/main/resources/com/fr/design/icon/versioncheck/fail.png create mode 100644 designer-base/src/main/resources/com/fr/design/icon/versioncheck/question.png create mode 100644 designer-base/src/main/resources/com/fr/design/icon/versioncheck/success.png create mode 100644 designer-base/src/main/resources/com/fr/design/icon/versioncheck/warning.png diff --git a/designer-base/src/main/resources/com/fr/design/icon/versioncheck/arrowright.png b/designer-base/src/main/resources/com/fr/design/icon/versioncheck/arrowright.png new file mode 100644 index 0000000000000000000000000000000000000000..faa3f898dab29b208aa7b174e98938905076ba29 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;8o-U3d z7J|tM5>pZ$9np+CV%5Vr`%wM=f4Ohp&%e{)%NNVDno+>@|LaaemVQQsWDaSk0}O}S z1QHqQoI6YyQaH*SmN548wzlr%z0sp^h~dsGM>Zh?hW%+wYy#JM&Uz;p22C>ZbAF-5 Z$Y3d@_*Hp%|3aXx44$rjF6*2UngBc*ISBv& literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/icon/versioncheck/bigfail.png b/designer-base/src/main/resources/com/fr/design/icon/versioncheck/bigfail.png new file mode 100644 index 0000000000000000000000000000000000000000..0f09b2cba112fd140f171b4bcf8ec8b7b5c47e08 GIT binary patch literal 722 zcmV;@0xkWCP)F%y`Y2zBUv!@ijdunYXps5f@|VEo^Nn2bLZ}T>;tE{cV@oxeRIytoH!A9QXbCDF>{B79-i%Q zzjR~acckFA`cm_dhR;Rla%fPd&rBaGRK0bo*Vzv7DZ!maW0fL$B}6Ae@Hl-X-XlZT z7rWhc-!35tF%f=4A{8Gr@jvq+v#j}|v7im34BOLs7A_8+R=9e}h1WQM-Lomf=(zkZ z900c)vx4?CPIy2ZQQjAa4;sK&K^*-ogX2#g)9KbaRhO5uAa)KIV6&RjU|i}ya`Z6^ z2%@=KjiQ4C`f=wT4L3IvP%Px+v!`U{=jo{5r`?s+#Jt}*#&Z{q%^?10@c;Av11knX z5c{6`VptHcc@0{;Q*XT07+=i;hQ#m`&3TsPeaNW^;hhRLJDR%Ahm&DH6vaHehS>Mp zcjhgYR9AqH$#gND@t0Esmsd65O4#klU>O_Uz-nbwT6F==om zi@oj@;Np9T8bsCiij2pd2Pe3lT`Xu{WUWC+%K|q!^%q>q>0W#A#e(Rd_CO6X3s1oj z)-x$VCyE*baYuiW23v6W#gpUFg=Dw?RtSenm}RN|7ko2VpC~8)YybcN07*qoM6N<$ Eg6-8x4*&oF literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/icon/versioncheck/fail.png b/designer-base/src/main/resources/com/fr/design/icon/versioncheck/fail.png new file mode 100644 index 0000000000000000000000000000000000000000..611cab720ab6912a00cd0eb71cf9f6143b721e4e GIT binary patch literal 377 zcmV-<0fzpGP)5PjyGlbr5S>}0UIZ-!!9qxpKq|p+5NjX5V3|7cBh)&jzhJzj zia%i$&>~-oUQ(3Go zUv7;??@nhAUYf0aq4|}FG#!gKGmn|l>CX810k{cGB;WV4$fF>}N*3m&1Bltmn|(gk z{S<|W@pDnE>?ZUSMca3`w03fw`G|q}0T-GEi5xkI`)x3w&5QF4A)fTla&CbRPleQq z==6GMsf#DQK23)=k%CU!sfzrOaUOi-u|e3A(4M2{$;#88bP~C2uf%w&QDG`|;aRxR z?OIQu!BbH75T7 X6iAVn?w%lT00000NkvXXu0mjf>6)ZA literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/icon/versioncheck/question.png b/designer-base/src/main/resources/com/fr/design/icon/versioncheck/question.png new file mode 100644 index 0000000000000000000000000000000000000000..cf46cd468f8d941fd5c46e521ec74bff7b91e8df GIT binary patch literal 1257 zcmV=P)l*G1|ovm4>EGNmr#U)X+jJMW_^7cDs9z*+q!6vvgrnt`4stOSiGu*O zfjPIbgNOm{;#sM^CqOd`AQU14M`N7;+HxW4OKKo=1~40++(T@oC19Nnm8o+)`{y5q!J?c>b#pbn1UHS zlfeEF#?%dSKv)jo)mlQ!t@=9ai3sEMLB_f3#zU|aKx-B7VvV#c6@P^p9U)F^5hI6X z04lt|q5B9PNge&rRYuj@S4%BcP^!+7bp)N($rCsZcc$0a{AAaLHm zlfe=IYx99a_3DUzI3mz}DRm^@^${LequvHDhXj6~H75G={l5iUpuPlnZ-W}Zo2LbS zzLHwZzPkyVR;vL#Js@x)+cKcc6EALRp(n4-H$KUu+!N0jf;XvPUW+kWj&q`6GHO_o z0eYN`cZhp@lsFBN#}5;XcZLmAZ`Bsi3ZOb4c>69w%__C{uwXoYiVZD*mel|)0DOhO zZXaQdM=hS2v1gd^{oh(<(r4p{El^Vc?5`sf$!hVlF~;6uM(>n9VOp&n0pNoTgt`*7 z_`w;*TSJVouvR(x?Q92dZ!z%xM)eVSa+>kRX~vw;FG|l9wgYId2A*201aLXRcy@qs z-DL5OD1y7z6CS)pnf{-R3Vb}OCyvXvwLJs&`Unk4E${9jVM@hMg~@gRkCp+q6(}>H zcZzZL+VZ2S=StfF=yBEzTU!AX%0O*_T2}o2VARB;@Bb^>3Sd(SurI}3;!l%|U1yE$ z`IpKb7l0Md1D2xiW`Mf|R(K7lE&z5`sc(YL%rd^YY{sFdp3~MMXpO|1ui^r*^AvD1 zzySo@E#Pi}6u%4w`gsS0_`(4hYQ77Sv@_U9U(P=r`foJ%v7bo%YX0i>ufQDJ(&P8` zDFC!~u{^PkLtysV@1ltw5Dk|9Np;FwFn#N;N^syt2 z-V+N>sCv@oV_Yr?(H?(a0HDS91sJF%@Rs!6)3*Q&{4qQIis>yl@xFkNq=P*TG@*Pr zlK$$1g~tC99|$(dFKC?75oVhIx|J3H(J$jg6bRK(#1YCgI$;a|##l5@YUpjCiyGH; zj9KOYh{6(6;KwG)$|E#$0E~{HU;fB3A=T+frU0_8=q2-6K7cGOdd2`Cj76pFEP9y( z$nv6>Ie;uLdYJ(rdN{aQ?$B9i9c`|;2nPD+eB*`r=d!KSOGjTbfOHdO>-YZx&!M4T Tvqru%00000NkvXXu0mjfc{WFI literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/icon/versioncheck/success.png b/designer-base/src/main/resources/com/fr/design/icon/versioncheck/success.png new file mode 100644 index 0000000000000000000000000000000000000000..f88e68ecef2879baf1bcd679f8c7312c4aaa023d GIT binary patch literal 410 zcmV;L0cHM)P)5Pjy-Gt-4E~aHDLP062X%6=;3U3)Ac%iU?I6BDpTWm)b8xGR zlWuoa1i=Ro97O3NE=m`xpdj88lWWu7UMhkYE;-4U?<6Pr2!(IqsyWe(-MuKZt>Ib^ zYBNb%fKNK>p-v1rJH z@j*neD!!Ri-Pxigp@^-zv$kn4M57p#D%gO8qAiMX=g*Pdi8aaYWM(!Sa$o11@B7_z z&$)L9bG&Gd{V^keY%d0lnh|%>K*`X`%z)G8G$E&w#1 z&kS&rqGgP*5TOB>K~_r5m3+k{GeV#Ie!7te90npZfR&7GWTKyu^ zFQdez+d&`#SHRL^KQidUAff=DP&DJCAhCe}%u~^|5OnVO*a2escK}JQ2itJ^cTVuj z%?g^8xN+VO!WV#dKv?x^KY;p)Vp7W)(7YF2|0n;#?s<2L7hjeKj1{y4&U6sI0G6(9 zV&KqJ5oui)sPZ)z;Njn}&wgCs!>~6;v`asf48T7(&bPDjFaxg?0IWF-T2SKx+`j?) z{O3h{_?{fGtLdHJ|MP;FwgRTEb^zE~ELp_%K`eAHLud3)IL4R7J%~D#_{Fb71B|7j zRT7J<0Ol11SouA~qGlIhmm>uVBC6PHhHK@RV zyCGST*kyp;n6`VXKZUexb3Vkreh575_XhD5IcvO08(>e=EdaMo>T!-kM0G8yRBJUPN$+}zA6A1OQ|(7^B{vFfxH*gLcH$Ye$K5f;Qmmc zG=Q@LJp#Yi@K)!A*ik9i6@z-t;Ky4U+GQ Date: Wed, 2 Jun 2021 23:18:27 +0800 Subject: [PATCH 061/148] =?UTF-8?q?REPORT-51958=20=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=A3=80=E6=B5=8B=E5=8F=8A=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/VersionCheckUtils.java | 2 +- .../src/main/java/com/fr/env/SyncFailedPluginsDialog.java | 2 +- .../src/main/java/com/fr/env/VersionCheckMessageDialog.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java b/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java index 2af000f86b..8492dadf55 100644 --- a/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java +++ b/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java @@ -55,7 +55,7 @@ import java.util.concurrent.CountDownLatch; /** * @author pengda * @version 10.0 - * Created by Bryant on 2021-06-02 + * Created on 2021-06-02 */ public class VersionCheckUtils { private static final String SYNCPLUGINLIB = StableUtils.getInstallHome() + "/logs/syncLib/plugins/"; diff --git a/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java b/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java index 1171e05728..b9046e1535 100644 --- a/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java +++ b/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java @@ -33,7 +33,7 @@ import javax.swing.UIManager; /** * @author pengda * @version 10.0 - * Created by Bryant on 2021-06-02 + * Created on 2021-06-02 */ public class SyncFailedPluginsDialog extends JDialog { private UILabel detailsLabel; diff --git a/designer-base/src/main/java/com/fr/env/VersionCheckMessageDialog.java b/designer-base/src/main/java/com/fr/env/VersionCheckMessageDialog.java index ebbd3a9beb..6232c05d55 100644 --- a/designer-base/src/main/java/com/fr/env/VersionCheckMessageDialog.java +++ b/designer-base/src/main/java/com/fr/env/VersionCheckMessageDialog.java @@ -28,7 +28,7 @@ import javax.swing.JPanel; /** * @author pengda * @version 10.0 - * Created by Bryant on 2021-06-02 + * Created on 2021-06-02 */ public class VersionCheckMessageDialog extends JDialog implements ActionListener { private UILabel imageLabel; From 319988ecf58a4bfee926e6fcf8cfccaa078ca153 Mon Sep 17 00:00:00 2001 From: pengda Date: Wed, 2 Jun 2021 23:43:21 +0800 Subject: [PATCH 062/148] =?UTF-8?q?REPORT-51958=20=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=A3=80=E6=B5=8B=E5=8F=8A=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/VersionCheckUtils.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java b/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java index 8492dadf55..d823ea6d2e 100644 --- a/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java +++ b/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java @@ -9,6 +9,7 @@ import com.fr.design.env.DesignerWorkspaceInfo; import com.fr.design.env.DesignerWorkspaceType; import com.fr.design.env.RemoteWorkspace; import com.fr.design.i18n.Toolkit; +import com.fr.general.CloudCenter; import com.fr.general.CommonIOUtils; import com.fr.general.ComparatorUtils; import com.fr.general.GeneralUtils; @@ -387,9 +388,7 @@ public class VersionCheckUtils { } version = differentPlugin.getString(VERSION); try { - //url = CloudCenter.getInstance().acquireUrlByKind("sync10.plugin"); - url = "http://192.168.5.83:3008/api/v1/plugin/download/history?pluginId={}&version={}"; - url = StringUtils.messageFormat(url, id, version); + url = StringUtils.messageFormat(CloudCenter.getInstance().acquireUrlByKind("sync10.plugin"), id, version); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } From da6bb600f14f92fa74439ff268ac97b0e8a110ad Mon Sep 17 00:00:00 2001 From: pengda Date: Thu, 3 Jun 2021 14:57:07 +0800 Subject: [PATCH 063/148] =?UTF-8?q?REPORT-51958=20=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=A3=80=E6=B5=8B=E5=8F=8A=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/VersionCheckUtils.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java b/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java index d823ea6d2e..754b8a8b18 100644 --- a/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java +++ b/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java @@ -52,6 +52,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; /** * @author pengda @@ -287,6 +288,7 @@ public class VersionCheckUtils { @Override public void updateProgress(String description, double progress) { } + @Override public void done(PluginTaskResult result) { latch.countDown(); @@ -295,9 +297,9 @@ public class VersionCheckUtils { } } try { - latch.await(); + latch.await(5000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { - e.printStackTrace(); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } } } @@ -314,6 +316,7 @@ public class VersionCheckUtils { } syncFailedPlugins.add(plugin); } + CommonIOUtils.deleteFile(new File(SYNCLIB)); return syncFailedPlugins; } @@ -378,7 +381,7 @@ public class VersionCheckUtils { JSONObject differentPlugin; String id; String version; - try { + if (differentPlugins != null) { for (int i = 0; i < differentPlugins.size(); i++) { String url = null; differentPlugin = differentPlugins.getJSONObject(i); @@ -392,11 +395,10 @@ public class VersionCheckUtils { } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } - - downloadURL.put(id + "-" + version, url); + if (url != null) { + downloadURL.put(id + "-" + version, url); + } } - } catch (Exception e) { - } return getPluginZipDownloadURL(downloadURL); } @@ -406,6 +408,7 @@ public class VersionCheckUtils { CloseableHttpResponse httpResponse; HttpGet httpGet = new HttpGet(); InputStream in = null; + HashMap downloadURLs = new HashMap<>(); try { for (String idAndVersion : urls.keySet()) { httpClient = HttpToolbox.getHttpClient(urls.get(idAndVersion)); @@ -415,7 +418,7 @@ public class VersionCheckUtils { JSONObject urlJson = new JSONObject(IOUtils.inputStream2String(in)); String downloadURL = urlJson.getString("result"); if (downloadURL != null) { - urls.replace(idAndVersion, urlJson.getString("result")); + downloadURLs.put(idAndVersion,downloadURL); } } } catch (Exception e) { @@ -423,6 +426,6 @@ public class VersionCheckUtils { } finally { CommonIOUtils.close(in); } - return urls; + return downloadURLs; } } From 2a8eda2ddba28314a2ea392dd43ee84c53c4b8a1 Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Thu, 3 Jun 2021 15:10:25 +0800 Subject: [PATCH 064/148] =?UTF-8?q?REPORT-52928=20=E5=BF=AB=E6=8D=B7?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E4=BD=BF=E7=94=A8=E5=9F=8B=E7=82=B9=E7=9A=84?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=B2=A1=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/share/ui/config/ShareConfigPane.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigPane.java b/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigPane.java index fa5606fe8f..81d91c4719 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigPane.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigPane.java @@ -17,6 +17,7 @@ import com.fr.design.mainframe.DesignerFrame; import com.fr.design.mainframe.share.collect.ComponentCollector; import com.fr.design.mainframe.share.ui.base.PlaceholderTextArea; import com.fr.design.mainframe.share.util.ShareComponentUtils; +import com.fr.design.share.SharableManager; import com.fr.design.share.effect.EffectItemGroup; import com.fr.design.share.utils.EffectItemUtils; import com.fr.design.share.utils.ShareDialogUtils; @@ -201,6 +202,7 @@ public class ShareConfigPane extends BasicPane { } HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().saveTemplate(); ComponentCollector.getInstance().setHelpConfigUseInfo(ShareComponentUtils.getCurrentTemplateID(), ShareComponentUtils.getWidgetId(widget)); + SharableManager.saveTemplate(HistoryTemplateListCache.getInstance().getCurrentEditingTemplate()); } }); dialog.setVisible(true); From d2b176ccdc482604c37a4ceae090242ee0e3b40f Mon Sep 17 00:00:00 2001 From: pengda Date: Thu, 3 Jun 2021 15:54:28 +0800 Subject: [PATCH 065/148] =?UTF-8?q?REPORT-51958=20=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=A3=80=E6=B5=8B=E5=8F=8A=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/EnvChangeEntrance.java | 5 +--- .../java/com/fr/design/VersionCheckUtils.java | 29 ++++++++++++------- .../module/DesignerWorkspaceProvider.java | 7 +---- 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java b/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java index c71dc34716..c5a4a7dd2e 100644 --- a/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java +++ b/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java @@ -97,10 +97,7 @@ public class EnvChangeEntrance { */ public void switch2Env(final String envName) { switch2Env(envName, PopTipStrategy.LATER); - if(!VersionCheckUtils.versionCheck(envName)){ - VersionCheckMessageDialog versionCheckMessageDialog = new VersionCheckMessageDialog(DesignerContext.getDesignerFrame(),Toolkit.i18nText("Fine-Design_Basic_Sync_Check_Brief_Info"),envName); - versionCheckMessageDialog.setVisible(true); - } + VersionCheckUtils.showVersionCheckDialog(envName); } /** diff --git a/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java b/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java index 754b8a8b18..70b95c2dc7 100644 --- a/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java +++ b/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java @@ -9,6 +9,8 @@ import com.fr.design.env.DesignerWorkspaceInfo; import com.fr.design.env.DesignerWorkspaceType; import com.fr.design.env.RemoteWorkspace; import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.DesignerContext; +import com.fr.env.VersionCheckMessageDialog; import com.fr.general.CloudCenter; import com.fr.general.CommonIOUtils; import com.fr.general.ComparatorUtils; @@ -45,7 +47,10 @@ import java.io.InputStream; import java.lang.reflect.Method; import java.net.ProtocolException; import java.net.URI; +import java.text.ParsePosition; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -78,6 +83,13 @@ public class VersionCheckUtils { return checkLocalAndRemoteJartime(selectedEnv) && checkLocalAndRemotePlugin().size() == 0; } + public static void showVersionCheckDialog(String envName){ + if(!VersionCheckUtils.versionCheck(envName)){ + VersionCheckMessageDialog versionCheckMessageDialog = new VersionCheckMessageDialog(DesignerContext.getDesignerFrame(),Toolkit.i18nText("Fine-Design_Basic_Sync_Check_Brief_Info"),envName); + versionCheckMessageDialog.setVisible(true); + } + } + public static boolean checkLocalAndRemoteJartime(String envName) { DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); DesignerWorkspaceInfo selectedEnv = envManager.getWorkspaceInfo(envName); @@ -197,14 +209,13 @@ public class VersionCheckUtils { /** * 格式化分支版本号 * - * @param branch 初始的分支版本号 + * @param buildNO 初始的分支版本号 * @return 格式化后的版本号 */ - private static String formatBranch(String branch) { - if (branch.contains("#")) { - return branch.substring(branch.lastIndexOf("-") + 1, branch.length() - 13); - } - return branch; + private static String formatBranch(String buildNO) { + Date jarDate = (new SimpleDateFormat("yyyy.MM.dd")).parse(buildNO, new ParsePosition(buildNO.indexOf("-") + 1)); + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + return df.format(jarDate); } private static boolean needCheckBranch(DesignerWorkspaceInfo selectedEnv) { @@ -361,12 +372,8 @@ public class VersionCheckUtils { bean.setDownloadLength(totalBytesRead); callBack.updateProgress(bean); } - } catch (ProtocolException e) { - UpdateException exception = new UpdateException(e.getMessage() + " downloadPluginZip Exception in network"); - FineLoggerFactory.getLogger().error(exception.getErrorMessage(), e); } catch (IOException e) { - UpdateException exception = new UpdateException(e.getMessage() + " downloadPluginZip Exception in download"); - FineLoggerFactory.getLogger().error(exception.getErrorMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } } } finally { diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerWorkspaceProvider.java b/designer-realize/src/main/java/com/fr/start/module/DesignerWorkspaceProvider.java index 0068c6b47a..4c759822bd 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerWorkspaceProvider.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerWorkspaceProvider.java @@ -10,9 +10,7 @@ import com.fr.design.env.DesignerWorkspaceGenerator; import com.fr.design.env.DesignerWorkspaceInfo; import com.fr.design.env.LocalDesignerWorkspaceInfo; import com.fr.design.i18n.Toolkit; -import com.fr.design.mainframe.DesignerContext; import com.fr.env.TestConnectionResult; -import com.fr.env.VersionCheckMessageDialog; import com.fr.event.Event; import com.fr.event.EventDispatcher; import com.fr.event.Listener; @@ -72,10 +70,7 @@ public class DesignerWorkspaceProvider extends Activator { @Override public void on(Event event, Null aNull) { try { - if(!VersionCheckUtils.versionCheck(selectEnv)){ - VersionCheckMessageDialog versionCheckMessageDialog = new VersionCheckMessageDialog(DesignerContext.getDesignerFrame(),Toolkit.i18nText("Fine-Design_Basic_Sync_Check_Brief_Info"),selectEnv.getName()); - versionCheckMessageDialog.setVisible(true); - } + VersionCheckUtils.showVersionCheckDialog(selectEnv.getName()); } catch (Exception e) { FineLoggerFactory.getLogger().warn("Check Service Failed"); } From ade05d9005e5a3c5e404b29a1398ed453fb0616f Mon Sep 17 00:00:00 2001 From: hades Date: Thu, 3 Jun 2021 16:27:38 +0800 Subject: [PATCH 066/148] =?UTF-8?q?REPORT-53211=20&&=20REPORT-53208=20&&?= =?UTF-8?q?=20REPORT-53209=20&&=20REPORT-53207=20=E5=87=A0=E4=B8=AA?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E5=85=AC=E5=BC=8F=E7=9A=84=E5=9C=BA=E6=99=AF?= =?UTF-8?q?=E6=9C=AA=E8=81=94=E5=8A=A8=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mod/ContentObjectManager.java | 10 ++ .../com/fr/design/mod/ContentReplaceUtil.java | 86 +++++++++++++++-- .../fr/design/mod/ContentReplacerCenter.java | 10 ++ .../impl/change/DSColumnContentChange.java | 6 +- .../CardSwitchButtonContentChange.java | 36 +++++++ .../formula/CellGUIAttrContentChange.java | 35 +++++++ .../formula/FunctionGrouperContentChange.java | 35 +++++++ .../formula/SelectCountContentChange.java | 35 +++++++ .../formula/WidgetTitleContentChange.java | 35 +++++++ ...SColumn4TableDataNameContentReplacer.java} | 5 +- .../DSColumn4WidgetNameContentReplacer.java | 19 ++++ .../mod/impl/repalce/FormulaReplacer.java | 96 +++++++++++++++++++ 12 files changed, 397 insertions(+), 11 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CardSwitchButtonContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CellGUIAttrContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FunctionGrouperContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/formula/SelectCountContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/formula/WidgetTitleContentChange.java rename designer-base/src/main/java/com/fr/design/mod/impl/repalce/{DSColumnContentReplacer.java => DSColumn4TableDataNameContentReplacer.java} (55%) create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumn4WidgetNameContentReplacer.java diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java b/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java index 7b20e60858..b70ea88b0a 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java @@ -10,12 +10,17 @@ import com.fr.data.condition.FormulaCondition; import com.fr.data.impl.FormulaDictionary; import com.fr.data.impl.NameTableData; import com.fr.form.main.FormHyperlink; +import com.fr.form.ui.CardSwitchButton; +import com.fr.form.ui.WidgetTitle; import com.fr.invoke.ClassHelper; import com.fr.js.JavaScriptImpl; import com.fr.plugin.chart.base.VanChartHtmlLabel; import com.fr.report.cell.cellattr.CellExpandAttr; +import com.fr.report.cell.cellattr.CellGUIAttr; import com.fr.report.cell.cellattr.core.RichChar; import com.fr.report.cell.cellattr.core.group.DSColumn; +import com.fr.report.cell.cellattr.core.group.FunctionGrouper; +import com.fr.report.cell.cellattr.core.group.SelectCount; import com.fr.stable.Filter; import java.util.HashSet; import java.util.Map; @@ -60,6 +65,11 @@ public class ContentObjectManager { set.add(FormulaHFElement.class.getName()); set.add(FormulaPresent.class.getName()); set.add(RichChar.class.getName()); + set.add(CardSwitchButton.class.getName()); + set.add(CellGUIAttr.class.getName()); + set.add(SelectCount.class.getName()); + set.add(WidgetTitle.class.getName()); + set.add(FunctionGrouper.class.getName()); } public void searchObject(Object ob) { diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java b/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java index 64027a22c1..526280027f 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java @@ -51,26 +51,42 @@ public class ContentReplaceUtil { } } + /** + * 通过公式编辑框框输入的且带有"=" + * + * @param content + * @param oldName + * @param newName + * @return + */ public static String replaceFormulaContent4WidgetName(String content, String oldName, String newName) { if (StringUtils.isNotEmpty(content)) { - content = getFormulaPureContent(content); - FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); - frFormulaTransformer.addRenamedWidget(oldName, newName); - return EQ_STRING + frFormulaTransformer.transform(content); + return replaceFormulaContent4WidgetName0(content, oldName, newName); } return content; } public static String replaceFormulaContent4TableDataName(String content, String oldName, String newName) { if (StringUtils.isNotEmpty(content)) { - content = getFormulaPureContent(content); - FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); - frFormulaTransformer.addRenamedDataset(oldName, newName); - return EQ_STRING + frFormulaTransformer.transform(content); + return replaceFormulaContent4TableDataName0(content, oldName, newName); } return content; } + private static String replaceFormulaContent4WidgetName0(String content, String oldName, String newName) { + content = getFormulaPureContent(content); + FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); + frFormulaTransformer.addRenamedWidget(oldName, newName); + return EQ_STRING + frFormulaTransformer.transform(content); + } + + private static String replaceFormulaContent4TableDataName0(String content, String oldName, String newName) { + content = getFormulaPureContent(content); + FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); + frFormulaTransformer.addRenamedWidget(oldName, newName); + return EQ_STRING + frFormulaTransformer.transform(content); + } + public static String getRichCharFormulaPureContent(String content) { if (content.startsWith(LEFT_BRACKET)) { return content.substring(LEFT_BRACKET.length() + 1, content.length() - 1); @@ -99,4 +115,58 @@ public class ContentReplaceUtil { return content; } + private static boolean isFormula(String content) { + return StringUtils.isNotEmpty(content) && content.startsWith(EQ_STRING); + } + + /** + * 适用于替换非显示使用的公式的地方 有可能只是文本 需要先判断下 + * 可通过使用位置是否使用公式编辑框区分 + * + * @param content + * @param oldName + * @param newName + * @return + */ + public static String replaceFormulaString4WidgetName(String content, String oldName, String newName) { + if (isFormula(content)) { + return replaceFormulaContent4WidgetName0(content, oldName, newName); + } + return content; + } + + public static String replaceFormulaString4TableDataName(String content, String oldName, String newName ) { + if (isFormula(content)) { + return replaceFormulaContent4TableDataName0(content, oldName, newName); + } + return content; + } + + /** + * 替换纯公式内容 无 "=" + * + * @param content + * @param oldName + * @param newName + * @return + */ + public static String replacePureFormula4WidgetName(String content, String oldName, String newName ) { + if (StringUtils.isNotEmpty(content)) { + FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); + frFormulaTransformer.addRenamedWidget(oldName, newName); + return frFormulaTransformer.transform(content); + } + return content; + } + + public static String replacePureFormula4TableDataName(String content, String oldName, String newName ) { + if (StringUtils.isNotEmpty(content)) { + FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); + frFormulaTransformer.addRenamedDataset(oldName, newName); + return frFormulaTransformer.transform(content); + } + return content; + } + + } diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java b/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java index 597f59962b..cccc08c9af 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java @@ -8,7 +8,9 @@ import com.fr.design.mod.impl.change.ChartHyperRelateCellLinkContentChange; import com.fr.design.mod.impl.change.ChartHyperRelateFloatLinkContentChange; import com.fr.design.mod.impl.change.DSColumnContentChange; import com.fr.design.mod.impl.change.FormHyperlinkContentChange; +import com.fr.design.mod.impl.change.formula.CardSwitchButtonContentChange; import com.fr.design.mod.impl.change.formula.CellExpandAttrContentChange; +import com.fr.design.mod.impl.change.formula.CellGUIAttrContentChange; import com.fr.design.mod.impl.change.formula.FormulaConditionContentChange; import com.fr.design.mod.impl.change.formula.FormulaContentChange; import com.fr.design.mod.impl.change.JavaScriptContentChange; @@ -18,7 +20,10 @@ import com.fr.design.mod.impl.change.VanChartHtmlLabelContentChange; import com.fr.design.mod.impl.change.formula.FormulaDictionaryContentChange; import com.fr.design.mod.impl.change.formula.FormulaHFElementContentChange; import com.fr.design.mod.impl.change.formula.FormulaPresentContentChange; +import com.fr.design.mod.impl.change.formula.FunctionGrouperContentChange; import com.fr.design.mod.impl.change.formula.RichCharContentChange; +import com.fr.design.mod.impl.change.formula.SelectCountContentChange; +import com.fr.design.mod.impl.change.formula.WidgetTitleContentChange; import com.fr.event.Event; import com.fr.event.EventDispatcher; import com.fr.event.Listener; @@ -93,6 +98,11 @@ public class ContentReplacerCenter { contentChangeList.add(new FormulaHFElementContentChange()); contentChangeList.add(new FormulaPresentContentChange()); contentChangeList.add(new RichCharContentChange()); + contentChangeList.add(new CardSwitchButtonContentChange()); + contentChangeList.add(new CellGUIAttrContentChange()); + contentChangeList.add(new SelectCountContentChange()); + contentChangeList.add(new WidgetTitleContentChange()); + contentChangeList.add(new FunctionGrouperContentChange()); } private void onRename(List contentChangeItemList, List contentChangeList) { diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/DSColumnContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/DSColumnContentChange.java index be6e6e4ecb..4ca6276375 100644 --- a/designer-base/src/main/java/com/fr/design/mod/impl/change/DSColumnContentChange.java +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/DSColumnContentChange.java @@ -3,7 +3,8 @@ package com.fr.design.mod.impl.change; import com.fr.design.mod.ContentChange; import com.fr.design.mod.ContentReplacer; import com.fr.design.mod.bean.ChangeItem; -import com.fr.design.mod.impl.repalce.DSColumnContentReplacer; +import com.fr.design.mod.impl.repalce.DSColumn4TableDataNameContentReplacer; +import com.fr.design.mod.impl.repalce.DSColumn4WidgetNameContentReplacer; import com.fr.report.cell.cellattr.core.group.DSColumn; import java.util.HashMap; import java.util.Map; @@ -19,7 +20,8 @@ public class DSColumnContentChange implements ContentChange { public DSColumnContentChange() { map = new HashMap<>(); - map.put(ChangeItem.TABLE_DATA_NAME, new DSColumnContentReplacer()); + map.put(ChangeItem.TABLE_DATA_NAME, new DSColumn4TableDataNameContentReplacer()); + map.put(ChangeItem.WIDGET_NAME, new DSColumn4WidgetNameContentReplacer()); } @Override diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CardSwitchButtonContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CardSwitchButtonContentChange.java new file mode 100644 index 0000000000..0f785892d9 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CardSwitchButtonContentChange.java @@ -0,0 +1,36 @@ +package com.fr.design.mod.impl.change.formula; + +import com.fr.design.mod.ContentChange; +import com.fr.design.mod.ContentReplacer; +import com.fr.design.mod.bean.ChangeItem; +import com.fr.design.mod.impl.repalce.FormulaReplacer; +import com.fr.form.ui.CardSwitchButton; +import java.util.HashMap; +import java.util.Map; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/3 + */ +public class CardSwitchButtonContentChange implements ContentChange { + + + private final Map> map; + + public CardSwitchButtonContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.CardSwitchButton4WidgetNameContentReplacer); + map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.CardSwitchButton4TableDataNameContentReplacer); + } + + @Override + public String type() { + return CardSwitchButton.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CellGUIAttrContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CellGUIAttrContentChange.java new file mode 100644 index 0000000000..c969a1e059 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CellGUIAttrContentChange.java @@ -0,0 +1,35 @@ +package com.fr.design.mod.impl.change.formula; + +import com.fr.design.mod.ContentChange; +import com.fr.design.mod.ContentReplacer; +import com.fr.design.mod.bean.ChangeItem; +import com.fr.design.mod.impl.repalce.FormulaReplacer; +import com.fr.report.cell.cellattr.CellGUIAttr; +import java.util.HashMap; +import java.util.Map; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/3 + */ +public class CellGUIAttrContentChange implements ContentChange { + + private Map> map; + + public CellGUIAttrContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.CellGUIAttr4WidgetNameContentReplacer); + map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.CellGUIAttr4TableDataNameContentReplacer); + } + + @Override + public String type() { + return CellGUIAttr.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FunctionGrouperContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FunctionGrouperContentChange.java new file mode 100644 index 0000000000..33947c832b --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FunctionGrouperContentChange.java @@ -0,0 +1,35 @@ +package com.fr.design.mod.impl.change.formula; + +import com.fr.design.mod.ContentChange; +import com.fr.design.mod.ContentReplacer; +import com.fr.design.mod.bean.ChangeItem; +import com.fr.design.mod.impl.repalce.FormulaReplacer; +import com.fr.report.cell.cellattr.core.group.FunctionGrouper; +import java.util.HashMap; +import java.util.Map; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/3 + */ +public class FunctionGrouperContentChange implements ContentChange { + + private final Map> map; + + public FunctionGrouperContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.FunctionGrouper4WidgetNameContentReplacer); + map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.FunctionGrouper4TableDataNameContentReplacer); + } + + @Override + public String type() { + return FunctionGrouper.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/SelectCountContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/SelectCountContentChange.java new file mode 100644 index 0000000000..705bfc51b3 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/SelectCountContentChange.java @@ -0,0 +1,35 @@ +package com.fr.design.mod.impl.change.formula; + +import com.fr.design.mod.ContentChange; +import com.fr.design.mod.ContentReplacer; +import com.fr.design.mod.bean.ChangeItem; +import com.fr.design.mod.impl.repalce.FormulaReplacer; +import com.fr.report.cell.cellattr.core.group.SelectCount; +import java.util.HashMap; +import java.util.Map; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/3 + */ +public class SelectCountContentChange implements ContentChange { + + private final Map> map; + + public SelectCountContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.SelectCount4WidgetNameContentReplacer); + map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.SelectCount4TableDataNameContentReplacer); + } + + @Override + public String type() { + return SelectCount.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/WidgetTitleContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/WidgetTitleContentChange.java new file mode 100644 index 0000000000..f4d8ff764f --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/WidgetTitleContentChange.java @@ -0,0 +1,35 @@ +package com.fr.design.mod.impl.change.formula; + +import com.fr.design.mod.ContentChange; +import com.fr.design.mod.ContentReplacer; +import com.fr.design.mod.bean.ChangeItem; +import com.fr.design.mod.impl.repalce.FormulaReplacer; +import com.fr.form.ui.WidgetTitle; +import java.util.HashMap; +import java.util.Map; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/3 + */ +public class WidgetTitleContentChange implements ContentChange { + + private final Map> map; + + public WidgetTitleContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.WidgetTitle4WidgetNameContentReplacer); + map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.WidgetTitle4TableDataNameContentReplacer); + } + + @Override + public String type() { + return WidgetTitle.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumnContentReplacer.java b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumn4TableDataNameContentReplacer.java similarity index 55% rename from designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumnContentReplacer.java rename to designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumn4TableDataNameContentReplacer.java index a1c131f6b5..548e2f4ee0 100644 --- a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumnContentReplacer.java +++ b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumn4TableDataNameContentReplacer.java @@ -1,5 +1,6 @@ package com.fr.design.mod.impl.repalce; +import com.fr.design.mod.ContentReplaceUtil; import com.fr.design.mod.ContentReplacer; import com.fr.general.ComparatorUtils; import com.fr.report.cell.cellattr.core.group.DSColumn; @@ -9,12 +10,14 @@ import com.fr.report.cell.cellattr.core.group.DSColumn; * @version 10.0 * Created by hades on 2021/6/2 */ -public class DSColumnContentReplacer implements ContentReplacer { +public class DSColumn4TableDataNameContentReplacer implements ContentReplacer { @Override public void replace(DSColumn dsColumn, String oldName, String newName) { if (ComparatorUtils.equals(dsColumn.getDSName(), oldName)) { dsColumn.setDSName(newName); } + dsColumn.setResult(ContentReplaceUtil.replacePureFormula4TableDataName(dsColumn.getResult(), oldName, newName)); + dsColumn.setSortFormula(ContentReplaceUtil.replacePureFormula4TableDataName(dsColumn.getSortFormula(), oldName, newName)); } } diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumn4WidgetNameContentReplacer.java b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumn4WidgetNameContentReplacer.java new file mode 100644 index 0000000000..ec14187057 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumn4WidgetNameContentReplacer.java @@ -0,0 +1,19 @@ +package com.fr.design.mod.impl.repalce; + +import com.fr.design.mod.ContentReplaceUtil; +import com.fr.design.mod.ContentReplacer; +import com.fr.report.cell.cellattr.core.group.DSColumn; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/3 + */ +public class DSColumn4WidgetNameContentReplacer implements ContentReplacer { + + @Override + public void replace(DSColumn dsColumn, String oldName, String newName) { + dsColumn.setResult(ContentReplaceUtil.replacePureFormula4WidgetName(dsColumn.getResult(), oldName, newName)); + dsColumn.setSortFormula(ContentReplaceUtil.replacePureFormula4WidgetName(dsColumn.getSortFormula(), oldName, newName)); + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/FormulaReplacer.java b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/FormulaReplacer.java index b571010a05..7ed57b284f 100644 --- a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/FormulaReplacer.java +++ b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/FormulaReplacer.java @@ -7,8 +7,13 @@ import com.fr.data.condition.FormulaCondition; import com.fr.data.impl.FormulaDictionary; import com.fr.design.mod.ContentReplaceUtil; import com.fr.design.mod.ContentReplacer; +import com.fr.form.ui.CardSwitchButton; +import com.fr.form.ui.WidgetTitle; import com.fr.report.cell.cellattr.CellExpandAttr; +import com.fr.report.cell.cellattr.CellGUIAttr; import com.fr.report.cell.cellattr.core.RichChar; +import com.fr.report.cell.cellattr.core.group.FunctionGrouper; +import com.fr.report.cell.cellattr.core.group.SelectCount; /** * 持有公式内容对象汇总 @@ -148,4 +153,95 @@ public class FormulaReplacer { } }; + /** + * 公式分组 + * + */ + public static final ContentReplacer FunctionGrouper4TableDataNameContentReplacer = new ContentReplacer() { + @Override + public void replace(FunctionGrouper functionGrouper, String oldName, String newName) { + functionGrouper.setFormulaContent(ContentReplaceUtil.replacePureFormula4TableDataName(functionGrouper.getFormulaContent(), oldName, newName)); + } + }; + + public static final ContentReplacer FunctionGrouper4WidgetNameContentReplacer = new ContentReplacer() { + @Override + public void replace(FunctionGrouper functionGrouper, String oldName, String newName) { + functionGrouper.setFormulaContent(ContentReplaceUtil.replacePureFormula4WidgetName(functionGrouper.getFormulaContent(), oldName, newName)); + } + }; + + /** + * 结果集筛选 + */ + public static final ContentReplacer SelectCount4TableDataNameContentReplacer = new ContentReplacer() { + @Override + public void replace(SelectCount selectCount, String oldName, String newName) { + selectCount.setFormulaCount(ContentReplaceUtil.replacePureFormula4TableDataName(selectCount.getFormulaCount(), oldName, newName)); + } + }; + public static final ContentReplacer SelectCount4WidgetNameContentReplacer = new ContentReplacer() { + @Override + public void replace(SelectCount selectCount, String oldName, String newName) { + selectCount.setFormulaCount(ContentReplaceUtil.replacePureFormula4WidgetName(selectCount.getFormulaCount(), oldName, newName)); + } + }; + + /** + * tab块标题 + */ + public static final ContentReplacer CardSwitchButton4TableDataNameContentReplacer = new ContentReplacer() { + @Override + public void replace(CardSwitchButton cardSwitchButton, String oldName, String newName) { + cardSwitchButton.setText(ContentReplaceUtil.replaceFormulaString4TableDataName(cardSwitchButton.getText(), oldName, newName)); + } + }; + + public static final ContentReplacer CardSwitchButton4WidgetNameContentReplacer = new ContentReplacer() { + @Override + public void replace(CardSwitchButton cardSwitchButton, String oldName, String newName) { + cardSwitchButton.setText(ContentReplaceUtil.replaceFormulaString4WidgetName(cardSwitchButton.getText(), oldName, newName)); + } + }; + + /** + * 悬浮提示 + */ + public static final ContentReplacer CellGUIAttr4TableDataNameContentReplacer = new ContentReplacer() { + @Override + public void replace(CellGUIAttr cellGUIAttr, String oldName, String newName) { + cellGUIAttr.setTooltipText(ContentReplaceUtil.replaceFormulaString4TableDataName(cellGUIAttr.getTooltipText(), oldName, newName)); + } + }; + + public static final ContentReplacer CellGUIAttr4WidgetNameContentReplacer = new ContentReplacer() { + @Override + public void replace(CellGUIAttr cellGUIAttr, String oldName, String newName) { + cellGUIAttr.setTooltipText(ContentReplaceUtil.replaceFormulaString4WidgetName(cellGUIAttr.getTooltipText(), oldName, newName)); + } + }; + + /** + * 图表/报表块等标题 + */ + public static final ContentReplacer WidgetTitle4TableDataNameContentReplacer = new ContentReplacer() { + @Override + public void replace(WidgetTitle widgetTitle, String oldName, String newName) { + if (widgetTitle.getTextObject() instanceof String) { + String content = (String) widgetTitle.getTextObject(); + widgetTitle.setTextObject(ContentReplaceUtil.replaceFormulaString4TableDataName(content, oldName, newName)); + } + } + }; + + public static final ContentReplacer WidgetTitle4WidgetNameContentReplacer = new ContentReplacer() { + @Override + public void replace(WidgetTitle widgetTitle, String oldName, String newName) { + if (widgetTitle.getTextObject() instanceof String) { + String content = (String) widgetTitle.getTextObject(); + widgetTitle.setTextObject(ContentReplaceUtil.replaceFormulaString4WidgetName(content, oldName, newName)); + } + } + }; + } From 188c446450aef515c386bee7db08f2c3589d021b Mon Sep 17 00:00:00 2001 From: "Bruce.Deng" Date: Fri, 4 Jun 2021 09:29:47 +0800 Subject: [PATCH 067/148] =?UTF-8?q?REPORT-52525=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E6=95=B0=E6=8D=AE=E9=9B=86=E6=9F=A5=E8=AF=A2=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E5=A2=9E=E5=8A=A0=E5=A4=8D=E5=88=B6=E4=BC=A0=E5=8F=82?= =?UTF-8?q?=E5=90=8Esql=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../preview/sql/PreviewPerformedSqlPane.java | 31 +++++++++++++------ .../design/dialog/link/MessageWithLink.java | 5 +-- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java index f0ed78c5ad..2800e6f759 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java @@ -16,6 +16,9 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; import com.fr.design.parameter.ParameterInputPane; import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.CloudCenter; +import com.fr.general.GeneralContext; +import com.fr.log.FineLoggerFactory; import com.fr.plugin.injectable.PluginModule; import com.fr.script.Calculator; import com.fr.stable.ArrayUtils; @@ -43,10 +46,10 @@ import java.awt.Frame; import java.awt.datatransfer.StringSelection; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Set; @@ -71,11 +74,17 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener { if (isShowSpecialCharSqlPane(selectedSpecialCharIndex)) { imageLabel = new UILabel(UIManager.getIcon("OptionPane.warningIcon")); - MessageWithLink message = new MessageWithLink(Toolkit.i18nText("Fine-Design_Basic_Preview_Special_Char_Sql_Front_Message"), Toolkit.i18nText("Fine-Design_Basic_Sql_Injection_Prevention"), "https://help.fanruan.com/finereport/doc-view-2219.html", Toolkit.i18nText("Fine-Design_Basic_Preview_Special_Char_Sql_Back_Message")); messagePanel = new JPanel(); messagePanel.setLayout(FRGUIPaneFactory.createBorderLayout()); messagePanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 0)); - messagePanel.add(message); + // 日韩取消超链,直接显示文字 + if (isNotShowLink()) { + JLabel label = new JLabel(Toolkit.i18nText("Fine-Design_Basic_Preview_Performed_Sql_Message") + Toolkit.i18nText("Fine-Design_Basic_Sql_Injection_Prevention") + Toolkit.i18nText("Fine-Design_Basic_Preview_Special_Char_Sql_Back_Message")); + messagePanel.add(label); + } else { + MessageWithLink message = new MessageWithLink(Toolkit.i18nText("Fine-Design_Basic_Preview_Special_Char_Sql_Front_Message"), Toolkit.i18nText("Fine-Design_Basic_Sql_Injection_Prevention"), CloudCenter.getInstance().acquireConf(Toolkit.i18nText("Fine-Design_Basic_Sql_Injection_Prevention_Help"), "https://help.fanruan.com/finereport/doc-view-2219.html"), Toolkit.i18nText("Fine-Design_Basic_Preview_Special_Char_Sql_Back_Message")); + messagePanel.add(message); + } // 提示图标 JPanel tipPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); UILabel tipLabel = new UILabel(UIManager.getIcon("OptionPane.tipIcon")); @@ -114,7 +123,7 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener { try { highLighter.addHighlight(specialCharIndex[0], specialCharIndex[1], p); } catch (BadLocationException e) { - e.printStackTrace(); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } } } @@ -139,12 +148,16 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener { GUICoreUtils.centerWindow(this); } + private boolean isNotShowLink() { + return GeneralContext.getLocale().equals(Locale.JAPAN) || GeneralContext.getLocale().equals(Locale.KOREA); + } + public static void previewPerformedSql(DBTableData tableData) { Calculator calculator = Calculator.createCalculator(); //参数 ParameterProvider[] parameters = DataOperator.getInstance().getTableDataParameters(tableData); if (ArrayUtils.isEmpty(parameters)) { - parameters = tableData.getParameters(Calculator.createCalculator()); + parameters = tableData.getParameters(calculator); } Map parameterMap = new HashMap<>(); if (needInputParams(parameters)) { @@ -187,7 +200,7 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener { } String oldSql = ParameterHelper.analyzeCurrentContextTableData4Templatee(tableData.getQuery(), paras); sql = processExtraSQL(paras, oldSql, calculator, tableDataProviders); - if (oldSql.length() != sql.length()) { + if (!StringUtils.equals(oldSql, sql)) { highlight = false; } } @@ -209,12 +222,12 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener { } private static Parameter[] processParameters(DBTableData tableData, Calculator calculator) { - Collection parameters = tableData.getParameters(); - if (parameters.size() == 0) { + ParameterProvider[] parameters = tableData.getParameters(); + if (parameters == null || parameters.length == 0) { tableData.setParameters(ParameterHelper.analyze4Parameters(tableData.getQuery(), false)); return new Parameter[0]; } - return Parameter.providers2Parameter(Calculator.processParameters(calculator, parameters.toArray(new ParameterProvider[parameters.size()]))); + return Parameter.providers2Parameter(Calculator.processParameters(calculator, parameters)); } private static String processExtraSQL(Parameter[] ps, String sql, Calculator ca, Set tableDataProviders) { diff --git a/designer-base/src/main/java/com/fr/design/dialog/link/MessageWithLink.java b/designer-base/src/main/java/com/fr/design/dialog/link/MessageWithLink.java index 2541a1b638..f73ec77df5 100644 --- a/designer-base/src/main/java/com/fr/design/dialog/link/MessageWithLink.java +++ b/designer-base/src/main/java/com/fr/design/dialog/link/MessageWithLink.java @@ -41,10 +41,7 @@ public class MessageWithLink extends JEditorPane { } public MessageWithLink(String message, String linkName, String link, Color color, Font font) { - super("text/html", "" + message + "" + linkName + "" + ""); - initListener(link); - setEditable(false); - setBorder(null); + this(message, linkName, link, StringUtils.EMPTY, color, font); } public MessageWithLink(String frontMessage, String linkName, String link, String backMessage, Color color, Font font) { From 8fe4ad250f9052d9a9f4f3a6f63b879298d0c81f Mon Sep 17 00:00:00 2001 From: pengda Date: Fri, 4 Jun 2021 10:59:45 +0800 Subject: [PATCH 068/148] =?UTF-8?q?REPORT-51958=20=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=A3=80=E6=B5=8B=E5=8F=8A=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/VersionCheckUtils.java | 67 +++++-------------- .../fr/design/update/actions/FileProcess.java | 8 +-- .../update/actions/SyncFileProcess.java | 50 ++++++++++++++ .../java/com/fr/env/CheckServiceDialog.java | 7 +- 4 files changed, 70 insertions(+), 62 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java diff --git a/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java b/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java index 70b95c2dc7..c3d8d94e22 100644 --- a/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java +++ b/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java @@ -1,10 +1,9 @@ package com.fr.design; import com.fr.base.FRContext; -import com.fr.decision.update.data.UpdateConstants; -import com.fr.decision.update.exception.UpdateException; import com.fr.decision.update.info.UpdateCallBack; import com.fr.decision.update.info.UpdateProcessBean; +import com.fr.decision.update.util.UpdateFileUtils; import com.fr.design.env.DesignerWorkspaceInfo; import com.fr.design.env.DesignerWorkspaceType; import com.fr.design.env.RemoteWorkspace; @@ -83,9 +82,9 @@ public class VersionCheckUtils { return checkLocalAndRemoteJartime(selectedEnv) && checkLocalAndRemotePlugin().size() == 0; } - public static void showVersionCheckDialog(String envName){ - if(!VersionCheckUtils.versionCheck(envName)){ - VersionCheckMessageDialog versionCheckMessageDialog = new VersionCheckMessageDialog(DesignerContext.getDesignerFrame(),Toolkit.i18nText("Fine-Design_Basic_Sync_Check_Brief_Info"),envName); + public static void showVersionCheckDialog(String envName) { + if (!VersionCheckUtils.versionCheck(envName)) { + VersionCheckMessageDialog versionCheckMessageDialog = new VersionCheckMessageDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Basic_Sync_Check_Brief_Info"), envName); versionCheckMessageDialog.setVisible(true); } } @@ -96,7 +95,7 @@ public class VersionCheckUtils { return checkLocalAndRemoteJartime(selectedEnv); } - public static boolean checkLocalAndRemoteJartime(DesignerWorkspaceInfo selectedEnv){ + public static boolean checkLocalAndRemoteJartime(DesignerWorkspaceInfo selectedEnv) { //是否需要做服务校验 if (needCheckBranch(selectedEnv)) { String localBranch; @@ -334,55 +333,21 @@ public class VersionCheckUtils { private static void downloadPlugins(Map urls, UpdateCallBack callBack) { CommonIOUtils.deleteFile(new File(SYNCLIB)); UpdateProcessBean bean = new UpdateProcessBean(); - FileOutputStream fos = null; - CloseableHttpClient httpClient; - CloseableHttpResponse httpResponse; - HttpGet httpGet = new HttpGet(); - InputStream in = null; - try { - for (String idAndVersion : urls.keySet()) { - try { - httpGet.setURI(URI.create(urls.get(idAndVersion))); - httpClient = HttpToolbox.getHttpClient(urls.get(idAndVersion)); - String target = SYNCPLUGINLIB + idAndVersion + ZIP; - httpResponse = httpClient.execute(httpGet); - if (httpResponse.getStatusLine().getStatusCode() != 200) { - FineLoggerFactory.getLogger().error("download plugin error :" + urls.get(idAndVersion)); - continue; - } - long totalSize = httpResponse.getEntity().getContentLength(); - in = httpResponse.getEntity().getContent(); - //保存文件 - File saveDir = new File(target); - StableUtils.makesureFileExist(saveDir); - bean.setDownloadedFiles(bean.getDownloadedFiles() + 1); - bean.setName(idAndVersion); - bean.setTotalLength((int) totalSize); - bean.setDownloadLength(0); - callBack.updateProgress(bean); - fos = new FileOutputStream(saveDir); - int bytesRead; - int totalBytesRead = 0; - byte[] getData = new byte[UpdateConstants.BYTE]; - while ((bytesRead = in.read(getData)) != -1) { - fos.write(getData, 0, bytesRead); - getData = new byte[UpdateConstants.BYTE]; - totalBytesRead += bytesRead; - bean.setDownloadLength(totalBytesRead); - callBack.updateProgress(bean); - } - } catch (IOException e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); + for (String idAndVersion : urls.keySet()) { + try { + String url = urls.get(idAndVersion); + if (null == url) { + continue; } + String target = SYNCPLUGINLIB + idAndVersion + ZIP; + UpdateFileUtils.downloadFile(url, target, callBack, bean,idAndVersion); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); } - } finally { - CommonIOUtils.close(fos); - CommonIOUtils.close(in); } } - private static Map getPluginsDownloadURL(JSONArray differentPlugins, Set uninstallFailed) { Map downloadURL = new HashMap<>(); JSONObject differentPlugin; @@ -415,7 +380,7 @@ public class VersionCheckUtils { CloseableHttpResponse httpResponse; HttpGet httpGet = new HttpGet(); InputStream in = null; - HashMap downloadURLs = new HashMap<>(); + HashMap downloadURLs = new HashMap<>(); try { for (String idAndVersion : urls.keySet()) { httpClient = HttpToolbox.getHttpClient(urls.get(idAndVersion)); @@ -425,7 +390,7 @@ public class VersionCheckUtils { JSONObject urlJson = new JSONObject(IOUtils.inputStream2String(in)); String downloadURL = urlJson.getString("result"); if (downloadURL != null) { - downloadURLs.put(idAndVersion,downloadURL); + downloadURLs.put(idAndVersion, downloadURL); } } } catch (Exception e) { diff --git a/designer-base/src/main/java/com/fr/design/update/actions/FileProcess.java b/designer-base/src/main/java/com/fr/design/update/actions/FileProcess.java index c9556bd77d..2ed0801dca 100644 --- a/designer-base/src/main/java/com/fr/design/update/actions/FileProcess.java +++ b/designer-base/src/main/java/com/fr/design/update/actions/FileProcess.java @@ -15,20 +15,14 @@ import java.util.concurrent.ExecutionException; public abstract class FileProcess extends SwingWorker { private UpdateCallBack callBack; - private String fullBuildNo = null; public FileProcess(UpdateCallBack callBack) { this.callBack = callBack; } - public FileProcess(UpdateCallBack callBack,String fullBuildNo) { - this.callBack = callBack; - this.fullBuildNo = fullBuildNo; - } - @Override protected Boolean doInBackground() throws Exception { - return UpdateExecutor.getInstance().execute(callBack,fullBuildNo); + return UpdateExecutor.getInstance().execute(callBack); } @Override diff --git a/designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java b/designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java new file mode 100644 index 0000000000..1614d1084c --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java @@ -0,0 +1,50 @@ +package com.fr.design.update.actions; + +import com.fr.decision.update.SyncExecutor; +import com.fr.decision.update.info.UpdateCallBack; +import com.fr.log.FineLoggerFactory; +import java.util.concurrent.ExecutionException; +import javax.swing.SwingWorker; + +public abstract class SyncFileProcess extends SwingWorker { + private UpdateCallBack callBack; + private String buildNo; + + public SyncFileProcess(UpdateCallBack callBack,String buildNo) { + this.callBack = callBack; + this.buildNo = buildNo; + } + + @Override + protected Boolean doInBackground() throws Exception { + return SyncExecutor.getInstance().execute(callBack,buildNo); + } + + @Override + protected void done() { + boolean success = false; + try { + success = get(); + } catch (InterruptedException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + Thread.currentThread().interrupt(); + } catch (ExecutionException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + if (success) { + onDownloadSuccess(); + } else { + onDownloadFailed(); + } + } + + /** + * 下载成功 + */ + public abstract void onDownloadSuccess(); + + /** + * 下载失败 + */ + public abstract void onDownloadFailed(); +} diff --git a/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java b/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java index 30c6ec15a9..fc991eddd5 100644 --- a/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java +++ b/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java @@ -13,8 +13,7 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.update.actions.FileProcess; -import com.fr.design.update.ui.dialog.RestoreResultDialog; +import com.fr.design.update.actions.SyncFileProcess; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.CloudCenter; import com.fr.general.CloudCenterConfig; @@ -327,7 +326,7 @@ public class CheckServiceDialog extends JDialog implements ActionListener { final JFrame frame = DesignerContext.getDesignerFrame(); final RestartHelper helper = new RestartHelper(); FineProcessContext.getParentPipe().fire(FineProcessEngineEvent.DESTROY); - new FileProcess(callBack, remoteBuildNo) { + new SyncFileProcess(callBack, remoteBuildNo) { @Override public void onDownloadSuccess() { deleteForDesignerUpdate(installLib); @@ -389,7 +388,7 @@ public class CheckServiceDialog extends JDialog implements ActionListener { syncFailedPluginsDialog.setVisible(true); } else { FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), - Toolkit.i18nText("同步成功"), + Toolkit.i18nText("Fine-Design_Basic_Sync_Success"), Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"), FineJOptionPane.INFORMATION_MESSAGE); } From d51c5b42fa3b658f4a367a24a8552711be541d98 Mon Sep 17 00:00:00 2001 From: hades Date: Fri, 4 Jun 2021 13:52:59 +0800 Subject: [PATCH 069/148] =?UTF-8?q?REPORT-53197=20&&=20REPORT-53195=20?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=9B=86=E5=90=8D=E7=A7=B0=E6=9B=BF=E6=8D=A2?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/mod/ContentReplaceUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java b/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java index 526280027f..1d8e73e840 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java @@ -83,7 +83,7 @@ public class ContentReplaceUtil { private static String replaceFormulaContent4TableDataName0(String content, String oldName, String newName) { content = getFormulaPureContent(content); FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); - frFormulaTransformer.addRenamedWidget(oldName, newName); + frFormulaTransformer.addRenamedDataset(oldName, newName); return EQ_STRING + frFormulaTransformer.transform(content); } From c7e5f22acfccf44c58dfa246a6aabe15dfbc9da9 Mon Sep 17 00:00:00 2001 From: hades Date: Fri, 4 Jun 2021 15:20:18 +0800 Subject: [PATCH 070/148] =?UTF-8?q?REPORT-53216=20=E5=8A=A0=E9=80=9F?= =?UTF-8?q?=E6=9F=A5=E6=89=BE=20=E8=BF=87=E6=BB=A4=E5=8F=AF=E8=83=BD?= =?UTF-8?q?=E7=9A=84=E8=AE=BE=E8=AE=A1=E5=99=A8=E4=B8=AD=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/mod/ModClassFilter.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java b/designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java index 7caa88ac49..a8df5fae68 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java +++ b/designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java @@ -17,6 +17,8 @@ public class ModClassFilter implements Filter { private static final Filter INSTANCE = new ModClassFilter(); + private static final String DESIGN_PREFIX = "com.fr.design"; + public static Filter getInstance() { return INSTANCE; } @@ -31,6 +33,6 @@ public class ModClassFilter implements Filter { @Override public boolean accept(String s) { - return FILTER_SET.contains(s); + return FILTER_SET.contains(s) || s.startsWith(DESIGN_PREFIX); } } From cd749ed515ca896183f7ac767b5ecb82fc9c1ac5 Mon Sep 17 00:00:00 2001 From: pengda Date: Fri, 4 Jun 2021 16:52:08 +0800 Subject: [PATCH 071/148] =?UTF-8?q?REPORT-51958=20=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=A3=80=E6=B5=8B=E5=8F=8A=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/VersionCheckUtils.java | 188 ++++++------------ .../java/com/fr/env/CheckServiceDialog.java | 8 +- 2 files changed, 68 insertions(+), 128 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java b/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java index c3d8d94e22..17dcd51a13 100644 --- a/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java +++ b/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java @@ -1,37 +1,28 @@ package com.fr.design; import com.fr.base.FRContext; -import com.fr.decision.update.info.UpdateCallBack; -import com.fr.decision.update.info.UpdateProcessBean; -import com.fr.decision.update.util.UpdateFileUtils; import com.fr.design.env.DesignerWorkspaceInfo; import com.fr.design.env.DesignerWorkspaceType; import com.fr.design.env.RemoteWorkspace; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerContext; import com.fr.env.VersionCheckMessageDialog; -import com.fr.general.CloudCenter; -import com.fr.general.CommonIOUtils; import com.fr.general.ComparatorUtils; import com.fr.general.GeneralUtils; -import com.fr.general.IOUtils; -import com.fr.general.http.HttpToolbox; import com.fr.invoke.Reflect; import com.fr.json.JSONArray; import com.fr.json.JSONObject; import com.fr.locale.InterProviderFactory; import com.fr.log.FineLoggerFactory; import com.fr.plugin.context.PluginContext; +import com.fr.plugin.context.PluginMarker; import com.fr.plugin.manage.PluginManager; +import com.fr.plugin.manage.control.PluginControllerHelper; import com.fr.plugin.manage.control.PluginTaskCallback; import com.fr.plugin.manage.control.PluginTaskResult; import com.fr.plugin.manage.control.ProgressCallback; import com.fr.rpc.Result; -import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; -import com.fr.third.org.apache.http.client.methods.CloseableHttpResponse; -import com.fr.third.org.apache.http.client.methods.HttpGet; -import com.fr.third.org.apache.http.impl.client.CloseableHttpClient; import com.fr.workspace.WorkContext; import com.fr.workspace.base.WorkspaceAPI; import com.fr.workspace.connect.WorkspaceConnectionInfo; @@ -39,13 +30,7 @@ import com.fr.workspace.engine.base.FineObjectPool; import com.fr.workspace.engine.channel.http.FunctionalHttpRequest; import com.fr.workspace.engine.exception.WorkspaceConnectionException; import com.fr.workspace.engine.rpc.WorkspaceProxyPool; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; import java.lang.reflect.Method; -import java.net.ProtocolException; -import java.net.URI; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -64,9 +49,6 @@ import java.util.concurrent.TimeUnit; * Created on 2021-06-02 */ public class VersionCheckUtils { - private static final String SYNCPLUGINLIB = StableUtils.getInstallHome() + "/logs/syncLib/plugins/"; - private static final String SYNCLIB = StableUtils.getInstallHome() + "/logs/syncLib/"; - private static final String ZIP = ".zip"; public static final String INCONSISTENCY = "inconsistency"; public static final String MISSING = "missing"; private static final String ID = "id"; @@ -254,65 +236,68 @@ public class VersionCheckUtils { return differentPlugins; } - public static JSONArray syncPlugins(JSONArray differentPlugins, UpdateCallBack callBack) { + public static JSONArray syncPlugins(JSONArray differentPlugins) { Set uninstallFailed = uninstallPlugins(differentPlugins); - Map downloadURL = getPluginsDownloadURL(differentPlugins, uninstallFailed); - downloadPlugins(downloadURL, callBack); - return installPlugins(differentPlugins); + List plugins = getSyncPlugins(differentPlugins, uninstallFailed); + installPlugins(plugins); + return getPluginsSyncFailed(differentPlugins); + } + + private static List getSyncPlugins(JSONArray differentPlugins, Set uninstallFailed) { + JSONObject differentPlugin; + String id; + String version; + List plugins = new ArrayList<>(); + if (differentPlugins != null) { + for (int i = 0; i < differentPlugins.size(); i++) { + differentPlugin = differentPlugins.getJSONObject(i); + id = differentPlugin.getString(ID); + if (uninstallFailed.contains(id)) { + continue; + } + version = differentPlugin.getString(VERSION); + plugins.add(PluginMarker.create(id, version)); + } + } + return plugins; } private static Set uninstallPlugins(JSONArray differentPlugins) { + Set pluginsNeedUninstall = new HashSet<>(); Map localPluginsMap = new HashMap<>(); List localPlugins = PluginManager.getContexts(); for (PluginContext pluginContext : localPlugins) { localPluginsMap.put(pluginContext.getID(), pluginContext); } - Set uninstallFailedID = new HashSet<>(); for (int i = 0; i < differentPlugins.size(); i++) { String id = differentPlugins.getJSONObject(i).getString(ID); if (localPluginsMap.containsKey(id)) { - PluginManager.getController().uninstall(localPluginsMap.get(id).getMarker(), true, new PluginTaskCallback() { - @Override - public void done(PluginTaskResult result) { - if (!result.isSuccess()) { - FineLoggerFactory.getLogger().error("uninstall plugin:" + id + " failed"); - uninstallFailedID.add(id); - } - } - }); + pluginsNeedUninstall.add(localPluginsMap.get(id).getMarker()); } } - return uninstallFailedID; - } - - private static JSONArray installPlugins(JSONArray differentPlugins) { - File file = new File(SYNCPLUGINLIB); - JSONArray syncFailedPlugins = JSONArray.create(); - if (file.isDirectory()) { - File[] plugins = file.listFiles(); - if (plugins != null && plugins.length > 0) { - CountDownLatch latch = new CountDownLatch(plugins.length); - for (File plugin : plugins) { - if (plugin.getName().endsWith(ZIP)) { - PluginManager.getController().install(plugin, new ProgressCallback() { - @Override - public void updateProgress(String description, double progress) { - } - - @Override - public void done(PluginTaskResult result) { - latch.countDown(); - } - }); + Set uninstallFailedID = new HashSet<>(); + CountDownLatch latch = new CountDownLatch(pluginsNeedUninstall.size()); + for (PluginMarker pluginMarker : pluginsNeedUninstall) { + PluginManager.getController().uninstall(pluginMarker, true, new PluginTaskCallback() { + @Override + public void done(PluginTaskResult result) { + latch.countDown(); + if (!result.isSuccess()) { + uninstallFailedID.add(pluginMarker.getPluginID()); } } - try { - latch.await(5000, TimeUnit.MILLISECONDS); - } catch (InterruptedException e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } + }); + } + try { + latch.await(5000, TimeUnit.MILLISECONDS); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); } + return uninstallFailedID; + } + + private static JSONArray getPluginsSyncFailed(JSONArray differentPlugins){ + JSONArray pluginsNeedSync = JSONArray.create(); List localPlugins = PluginManager.getContexts(); Map localPluginsInfo = new HashMap<>(); for (int i = 0; i < localPlugins.size(); i++) { @@ -324,80 +309,31 @@ public class VersionCheckUtils { if (localPluginsInfo.containsKey(id) && ComparatorUtils.equals(plugin.getString(VERSION), localPluginsInfo.get(id))) { continue; } - syncFailedPlugins.add(plugin); + pluginsNeedSync.add(plugin); } - CommonIOUtils.deleteFile(new File(SYNCLIB)); - return syncFailedPlugins; + return pluginsNeedSync; } - private static void downloadPlugins(Map urls, UpdateCallBack callBack) { - CommonIOUtils.deleteFile(new File(SYNCLIB)); - UpdateProcessBean bean = new UpdateProcessBean(); + private static void installPlugins(List plugins) { + CountDownLatch latch = new CountDownLatch(plugins.size()); + for (int i = 0; i < plugins.size(); i++) { + PluginControllerHelper.installOnline(plugins.get(i), new ProgressCallback() { + @Override + public void updateProgress(String description, double progress) { - for (String idAndVersion : urls.keySet()) { - try { - String url = urls.get(idAndVersion); - if (null == url) { - continue; } - String target = SYNCPLUGINLIB + idAndVersion + ZIP; - UpdateFileUtils.downloadFile(url, target, callBack, bean,idAndVersion); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } - } - private static Map getPluginsDownloadURL(JSONArray differentPlugins, Set uninstallFailed) { - Map downloadURL = new HashMap<>(); - JSONObject differentPlugin; - String id; - String version; - if (differentPlugins != null) { - for (int i = 0; i < differentPlugins.size(); i++) { - String url = null; - differentPlugin = differentPlugins.getJSONObject(i); - id = differentPlugin.getString(ID); - if (uninstallFailed.contains(id)) { - continue; - } - version = differentPlugin.getString(VERSION); - try { - url = StringUtils.messageFormat(CloudCenter.getInstance().acquireUrlByKind("sync10.plugin"), id, version); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - if (url != null) { - downloadURL.put(id + "-" + version, url); + @Override + public void done(PluginTaskResult result) { + latch.countDown(); } - } + }); } - return getPluginZipDownloadURL(downloadURL); - } - - private static Map getPluginZipDownloadURL(Map urls) { - CloseableHttpClient httpClient; - CloseableHttpResponse httpResponse; - HttpGet httpGet = new HttpGet(); - InputStream in = null; - HashMap downloadURLs = new HashMap<>(); try { - for (String idAndVersion : urls.keySet()) { - httpClient = HttpToolbox.getHttpClient(urls.get(idAndVersion)); - httpGet.setURI(URI.create(urls.get(idAndVersion))); - httpResponse = httpClient.execute(httpGet); - in = httpResponse.getEntity().getContent(); - JSONObject urlJson = new JSONObject(IOUtils.inputStream2String(in)); - String downloadURL = urlJson.getString("result"); - if (downloadURL != null) { - downloadURLs.put(idAndVersion, downloadURL); - } - } - } catch (Exception e) { + latch.await(); + } catch (InterruptedException e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); - } finally { - CommonIOUtils.close(in); } - return downloadURLs; + } } diff --git a/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java b/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java index fc991eddd5..b64708659a 100644 --- a/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java +++ b/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java @@ -331,11 +331,13 @@ public class CheckServiceDialog extends JDialog implements ActionListener { public void onDownloadSuccess() { deleteForDesignerUpdate(installLib); //主jar下载成功之后再卸载安装插件 + progressBar.setString(Toolkit.i18nText("Fine-Design_Basic_Sync_Plugins")); + progressBar.setValue(0); new SwingWorker() { @Override protected JSONArray doInBackground() { - return VersionCheckUtils.syncPlugins(differentPlugins, callBack); + return VersionCheckUtils.syncPlugins(differentPlugins); } @Override @@ -367,11 +369,13 @@ public class CheckServiceDialog extends JDialog implements ActionListener { }.execute(); } else { //到这边说明主jar是一致的,就只尝试同步插件 + progressBar.setString(Toolkit.i18nText("Fine-Design_Basic_Sync_Plugins")); + progressBar.setValue(0); new SwingWorker() { @Override protected JSONArray doInBackground() { - return VersionCheckUtils.syncPlugins(differentPlugins, callBack); + return VersionCheckUtils.syncPlugins(differentPlugins); } @Override From 7ea886b7599eea9f07c93efe1ea5696d3e5a692a Mon Sep 17 00:00:00 2001 From: hades Date: Mon, 7 Jun 2021 09:30:17 +0800 Subject: [PATCH 072/148] =?UTF-8?q?REPORT-53305=20=E5=8E=BB=E6=8E=89?= =?UTF-8?q?=E5=8C=BF=E5=90=8D=E5=86=85=E9=83=A8=E7=B1=BB=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=20=E9=9A=90=E5=BC=8F=E6=8C=81=E6=9C=89=E7=9A=84=E5=A4=96?= =?UTF-8?q?=E5=B1=82=E5=AF=B9=E8=B1=A1=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/mod/ModClassFilter.java | 1 + 1 file changed, 1 insertion(+) diff --git a/designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java b/designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java index a8df5fae68..6ed0b367fc 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java +++ b/designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java @@ -29,6 +29,7 @@ public class ModClassFilter implements Filter { FILTER_SET.add("com.fr.poly.creator.ECBlockCreator"); FILTER_SET.add("io.netty.channel.nio.SelectedSelectionKeySet"); FILTER_SET.add("com.fr.form.ui.ElementCaseImage"); + FILTER_SET.add("this$0"); } @Override From dcc454b0c6c7b5df8de37d997000dc55fd2202c9 Mon Sep 17 00:00:00 2001 From: kerry Date: Mon, 7 Jun 2021 10:15:41 +0800 Subject: [PATCH 073/148] =?UTF-8?q?REPORT-53328=20&&=20REPORT-53314=20?= =?UTF-8?q?=E4=BA=A4=E4=BA=92=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controlpane/UIListGroupControlPane.java | 19 ++++++++++++++++--- .../mainframe/FormWidgetDetailPane.java | 6 +++--- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListGroupControlPane.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListGroupControlPane.java index 6e0313ec72..bb7fee0a36 100644 --- a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListGroupControlPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListGroupControlPane.java @@ -12,6 +12,7 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.widget.EventCreator; import com.fr.form.event.Listener; import com.fr.form.ui.Widget; +import com.fr.general.FRFont; import com.fr.general.NameObject; import com.fr.report.web.util.ReportEngineEventMapping; import com.fr.stable.ArrayUtils; @@ -26,10 +27,13 @@ import javax.swing.event.ListDataEvent; import javax.swing.event.ListDataListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; +import java.awt.AlphaComposite; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; +import java.awt.Graphics; +import java.awt.Graphics2D; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.lang.reflect.Constructor; @@ -456,7 +460,7 @@ public abstract class UIListGroupControlPane extends UIControlPane implements L getHelper().popupEditDialog(null, this.selectNameEdList, this); } - protected String getWrapperLabelText(){ + protected String getWrapperLabelText() { return StringUtils.EMPTY; } @@ -466,9 +470,18 @@ public abstract class UIListGroupControlPane extends UIControlPane implements L public ListWrapperPane(String labelText, UINameEdList nameEdList) { this.setLayout(FRGUIPaneFactory.createBorderLayout()); - UILabel label = new UILabel(labelText + getWrapperLabelText()); + UILabel label = new UILabel(labelText + getWrapperLabelText()) { + @Override + public void paint(Graphics g) { + ((Graphics2D) g).setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.7f)); + super.paint(g); + } + }; label.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0)); - label.setBackground(Color.decode("#FFFFFF")); + label.setOpaque(true); + label.setBackground(Color.WHITE); + label.setForeground(Color.decode("#333334")); + label.setFont(label.getFont().deriveFont(10F)); label.setPreferredSize(new Dimension(224, 26)); this.nameEdList = nameEdList; this.add(label, BorderLayout.NORTH); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java b/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java index 170704aa6f..8fbc4d06db 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java @@ -4,6 +4,7 @@ import com.fr.base.BaseUtils; import com.fr.design.dialog.BasicPane; import com.fr.design.gui.ibutton.UIHeadGroup; import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.reuse.ComponentReuseNotificationInfo; import com.fr.design.mainframe.share.collect.ComponentCollector; import com.fr.design.mainframe.share.ui.local.LocalWidgetRepoPane; import com.fr.design.mainframe.share.ui.online.OnlineWidgetRepoPane; @@ -89,7 +90,7 @@ public class FormWidgetDetailPane extends FormDockView{ cardLayout.show(centerPane, paneList.get(newSelectedIndex).getTitle()); } }; - headGroup.setSelectedIndex(ONLINE_TAB); + headGroup.setSelectedIndex(ComponentReuseNotificationInfo.getInstance().isClickedWidgetLib() ? 0 : ONLINE_TAB); this.add(headGroup, BorderLayout.NORTH); this.add(centerPane, BorderLayout.CENTER); } @@ -105,12 +106,11 @@ public class FormWidgetDetailPane extends FormDockView{ } - public void enterWidgetLib() { + public void enterWidgetLib() { EastRegionContainerPane.getInstance().switchTabTo(EastRegionContainerPane.KEY_WIDGET_LIB); ComponentReuseNotifyUtil.enterWidgetLibExtraAction(false); } - /** * 定位 * From 80fdf1f17da3c985fac6ad7d3974bea2cc986ce1 Mon Sep 17 00:00:00 2001 From: pengda Date: Mon, 7 Jun 2021 11:54:36 +0800 Subject: [PATCH 074/148] =?UTF-8?q?REPORT-51958=20=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=A3=80=E6=B5=8B=E5=8F=8A=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/env/CheckServiceDialog.java | 2 +- .../main/java/com/fr/env/VersionCheckMessageDialog.java | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java b/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java index b64708659a..3a46126992 100644 --- a/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java +++ b/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java @@ -312,7 +312,7 @@ public class CheckServiceDialog extends JDialog implements ActionListener { @Override public void mouseClicked(MouseEvent e) { String[] option = {Toolkit.i18nText("Fine-Design_Report_Yes"), Toolkit.i18nText("Fine-Design_Report_No")}; - int a = JOptionPane.showOptionDialog(getParent(), Toolkit.i18nText("Fine-Design_Basic_Sync_Info_Information"), + int a = FineJOptionPane.showOptionDialog(getParent(), Toolkit.i18nText("Fine-Design_Basic_Sync_Info_Information"), Toolkit.i18nText("Fine-Design_Basic_Confirm"), JOptionPane.YES_NO_OPTION, QUESTION_MESSAGE, IOUtils.readIcon("com/fr/design/icon/versioncheck/question.png"), option, 1); if (0 == a) { //jar包一致的话只更新插件 diff --git a/designer-base/src/main/java/com/fr/env/VersionCheckMessageDialog.java b/designer-base/src/main/java/com/fr/env/VersionCheckMessageDialog.java index 6232c05d55..657b13e0a3 100644 --- a/designer-base/src/main/java/com/fr/env/VersionCheckMessageDialog.java +++ b/designer-base/src/main/java/com/fr/env/VersionCheckMessageDialog.java @@ -73,9 +73,11 @@ public class VersionCheckMessageDialog extends JDialog implements ActionListener }else{ noExistServiceDescription = VersionCheckUtils.getNoExistServiceDescription(this.envName); } + detailPanel.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { + hideDialog(); CheckServiceDialog checkServiceDialog = new CheckServiceDialog(DesignerContext.getDesignerFrame(), localBranch, remoteBranch, noExistServiceDescription); checkServiceDialog.setVisible(true); } @@ -92,9 +94,12 @@ public class VersionCheckMessageDialog extends JDialog implements ActionListener GUICoreUtils.centerWindow(this); } + private void hideDialog(){ + this.dispose(); + } @Override public void actionPerformed(ActionEvent e) { - this.dispose(); + hideDialog(); } } From 9fba224bf5486ce54901b1dffac10fe03d29a467 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=B2=B3?= <445798420@qq.com> Date: Mon, 7 Jun 2021 14:42:16 +0800 Subject: [PATCH 075/148] =?UTF-8?q?CHART-19475=20=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=E7=9A=84=E6=A0=87=E7=AD=BE=E5=9B=BA=E5=AE=9A?= =?UTF-8?q?=E5=AE=BD=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../VanChartHtmlLabelPaneWithBackGroundLabel.java | 2 +- .../condition/item/VanChartLabelConditionPane.java | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPaneWithBackGroundLabel.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPaneWithBackGroundLabel.java index f9c9f7d490..4e29e3c827 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPaneWithBackGroundLabel.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPaneWithBackGroundLabel.java @@ -22,6 +22,6 @@ public class VanChartHtmlLabelPaneWithBackGroundLabel extends VanChartHtmlLabelP new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Background")), panel}, }; - return TableLayoutHelper.createTableLayoutPane(components, new double[]{p}, new double[]{d, f}); + return TableLayoutHelper.createTableLayoutPane(components, new double[]{p, p}, new double[]{d, f}); } } diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/other/condition/item/VanChartLabelConditionPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/other/condition/item/VanChartLabelConditionPane.java index 115bdb9480..87d89e8f09 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/other/condition/item/VanChartLabelConditionPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/other/condition/item/VanChartLabelConditionPane.java @@ -3,11 +3,14 @@ package com.fr.van.chart.designer.other.condition.item; import com.fr.chart.base.DataSeriesCondition; import com.fr.chart.chartattr.Plot; import com.fr.design.condition.ConditionAttributesPane; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; import com.fr.plugin.chart.base.AttrLabel; import com.fr.van.chart.designer.PlotFactory; import com.fr.van.chart.designer.style.label.VanChartPlotLabelPane; import javax.swing.JPanel; +import java.awt.Component; public class VanChartLabelConditionPane extends AbstractNormalMultiLineConditionPane { @@ -22,7 +25,15 @@ public class VanChartLabelConditionPane extends AbstractNormalMultiLineCondition @Override protected JPanel initContentPane() { dataLabelContentsPane = createLabelPane(); - return dataLabelContentsPane; + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double e = 220; + + Component[][] components = new Component[][]{ + new Component[]{null, dataLabelContentsPane} + }; + + return TableLayoutHelper.createTableLayoutPane(components, new double[]{p}, new double[]{f, e}); } protected VanChartPlotLabelPane createLabelPane() { From 9dc3b6b87709b24fd9c0e8e0f485f05a3574a1d8 Mon Sep 17 00:00:00 2001 From: hades Date: Mon, 7 Jun 2021 15:17:01 +0800 Subject: [PATCH 076/148] =?UTF-8?q?KERNEL-7634=20mac=E5=92=8Cwin=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E4=B8=8D=E5=90=8C=E7=89=88=E6=9C=AC=E7=9A=84jxbrowser?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 27 +++- .../NxComplexInterceptRequestCallback.java | 87 ++++++++++++ .../NxInterceptRequestCallback.java | 134 ++++++++++++++++++ 3 files changed, 245 insertions(+), 3 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/ui/compatible/NxComplexInterceptRequestCallback.java create mode 100644 designer-base/src/main/java/com/fr/design/ui/compatible/NxInterceptRequestCallback.java diff --git a/build.gradle b/build.gradle index 617b9d0fa8..781c65e227 100644 --- a/build.gradle +++ b/build.gradle @@ -28,6 +28,17 @@ dependencies { api project(':designer-realize') } +configurations.all { + resolutionStrategy { + force 'com.fr.third:jxbrowser:6.23' + force 'com.fr.third:jxbrowser-mac:6.23' + force 'com.fr.third:jxbrowser-win64:6.23' + force 'com.fr.third:jxbrowser:7.5' + force 'com.fr.third:jxbrowser-mac:7.5' + force 'com.fr.third:jxbrowser-win64:7.5' + } +} + allprojects { apply plugin: 'java' apply plugin: 'java-library' @@ -57,9 +68,19 @@ allprojects { } dependencies { - implementation 'com.fr.third:jxbrowser:6.23' - implementation 'com.fr.third:jxbrowser-mac:6.23' - implementation 'com.fr.third:jxbrowser-win64:6.23' + implementation ('com.fr.third:jxbrowser:6.23') { + force = true + } + implementation ('com.fr.third:jxbrowser-mac:6.23') { + force = true + } + implementation ('com.fr.third:jxbrowser-win64:6.23') { + force = true + } + implementation 'com.fr.third:jxbrowser:7.5' + implementation 'com.fr.third:jxbrowser-mac:7.5' + implementation 'com.fr.third:jxbrowser-win64:7.5' + implementation 'com.fr.third:jxbrowser-swing:7.5' implementation 'com.fr.third.server:servlet-api:3.0' implementation 'org.swingexplorer:swexpl:2.0.1' implementation 'org.swingexplorer:swag:1.0' diff --git a/designer-base/src/main/java/com/fr/design/ui/compatible/NxComplexInterceptRequestCallback.java b/designer-base/src/main/java/com/fr/design/ui/compatible/NxComplexInterceptRequestCallback.java new file mode 100644 index 0000000000..2c430bd348 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/ui/compatible/NxComplexInterceptRequestCallback.java @@ -0,0 +1,87 @@ +package com.fr.design.ui.compatible; + +import com.fr.design.ui.ModernRequestClient; +import com.fr.design.ui.ModernUIConstants; +import com.fr.general.IOUtils; +import com.fr.stable.StringUtils; +import com.fr.web.struct.AssembleComponent; +import com.fr.web.struct.AtomBuilder; +import com.fr.web.struct.PathGroup; +import com.fr.web.struct.category.ScriptPath; +import com.fr.web.struct.category.StylePath; +import com.teamdev.jxbrowser.net.Network; +import com.teamdev.jxbrowser.net.UrlRequest; +import com.teamdev.jxbrowser.net.callback.InterceptRequestCallback; + +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.Map; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2020/3/25 + */ +public class NxComplexInterceptRequestCallback extends NxInterceptRequestCallback { + + private AssembleComponent component; + + public NxComplexInterceptRequestCallback(Network network, AssembleComponent component) { + super(network); + this.component = component; + } + + public NxComplexInterceptRequestCallback(Network network, AssembleComponent component, Map map) { + super(network, map); + this.component = component; + } + + @Override + protected Response next(UrlRequest urlRequest, String path) { + if (path.startsWith("emb:dynamic")) { + String text = htmlText(map); + return InterceptRequestCallback.Response.intercept(generateBasicUrlRequestJob(urlRequest, "text/html", text.getBytes(StandardCharsets.UTF_8))); + } else { + int index = path.indexOf("="); + if (index > 0) { + path = path.substring(index + 1); + } else { + path = path.substring(4); + } + InputStream inputStream = IOUtils.readResource(path); + return InterceptRequestCallback.Response.intercept(generateBasicUrlRequestJob(urlRequest, getMimeType(path), IOUtils.inputStream2Bytes(inputStream))); + } + } + + private String htmlText(Map map) { + PathGroup pathGroup = AtomBuilder.create().buildAssembleFilePath(ModernRequestClient.KEY, component); + StylePath[] stylePaths = pathGroup.toStylePathGroup(); + StringBuilder styleText = new StringBuilder(); + for (StylePath path : stylePaths) { + if (StringUtils.isNotBlank(path.toFilePath())) { + styleText.append(""); + } + } + String result = ModernUIConstants.HTML_TPL.replaceAll("##style##", styleText.toString()); + ScriptPath[] scriptPaths = pathGroup.toScriptPathGroup(); + StringBuilder scriptText = new StringBuilder(); + for (ScriptPath path : scriptPaths) { + if (StringUtils.isNotBlank(path.toFilePath())) { + scriptText.append(""); + } + } + result = result.replaceAll("##script##", scriptText.toString()); + if (map != null) { + for (Map.Entry entry : map.entrySet()) { + String key = entry.getKey(); + String value = entry.getValue(); + result = result.replaceAll("\\$\\{" + key + "}", value); + } + } + return result; + } +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/ui/compatible/NxInterceptRequestCallback.java b/designer-base/src/main/java/com/fr/design/ui/compatible/NxInterceptRequestCallback.java new file mode 100644 index 0000000000..5ec0ff4339 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/ui/compatible/NxInterceptRequestCallback.java @@ -0,0 +1,134 @@ +package com.fr.design.ui.compatible; + +import com.fr.base.TemplateUtils; +import com.fr.general.IOUtils; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.ArrayUtils; +import com.fr.stable.EncodeConstants; +import com.fr.stable.StringUtils; +import com.fr.third.org.apache.commons.codec.net.URLCodec; +import com.teamdev.jxbrowser.net.HttpHeader; +import com.teamdev.jxbrowser.net.HttpStatus; +import com.teamdev.jxbrowser.net.Network; +import com.teamdev.jxbrowser.net.UrlRequest; +import com.teamdev.jxbrowser.net.UrlRequestJob; +import com.teamdev.jxbrowser.net.callback.InterceptRequestCallback; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.net.URI; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Map; +import java.util.Optional; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2020/3/25 + */ +public class NxInterceptRequestCallback implements InterceptRequestCallback { + + Network network; + Map map; + + public NxInterceptRequestCallback(Network network) { + this.network = network; + } + + public NxInterceptRequestCallback(Network network, Map map) { + this.network = network; + this.map = map; + } + + @Override + public Response on(Params params) { + UrlRequest urlRequest = params.urlRequest(); + String path = urlRequest.url(); + if (path.startsWith("file:")) { + Optional optional = generateFileProtocolUrlRequestJob(urlRequest, path); + if (optional.isPresent()) { + return InterceptRequestCallback.Response.intercept(optional.get()); + } + } else { + return next(urlRequest, path); + } + return Response.proceed(); + } + + Response next(UrlRequest urlRequest, String path) { + return Response.proceed(); + } + + private Optional generateFileProtocolUrlRequestJob(UrlRequest urlRequest, String path) { + try { + String url = new URLCodec().decode(path); + String filePath = TemplateUtils.renderParameter4Tpl(url, map); + File file = new File(URI.create(filePath).getPath()); + InputStream inputStream = IOUtils.readResource(file.getAbsolutePath()); + String mimeType = getMimeType(path); + byte[] bytes; + if (isPlainText(mimeType)) { + String text = IOUtils.inputStream2String(inputStream, EncodeConstants.ENCODING_UTF_8); + text = TemplateUtils.renderParameter4Tpl(text, map); + bytes = text.getBytes(StandardCharsets.UTF_8); + } else { + bytes = IOUtils.inputStream2Bytes(inputStream); + } + return Optional.of(generateBasicUrlRequestJob(urlRequest, mimeType, bytes)); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return Optional.empty(); + } + + private boolean isPlainText(String mimeType) { + return ArrayUtils.contains(new String[]{"text/html", "text/javascript", "text/css"}, mimeType); + } + + UrlRequestJob generateBasicUrlRequestJob(UrlRequest urlRequest, String mimeType, byte[] bytes) { + UrlRequestJob.Options options = UrlRequestJob.Options + .newBuilder(urlRequest.id(), HttpStatus.OK) + .addHttpHeader(HttpHeader.of("Content-Type", mimeType)) + .build(); + UrlRequestJob urlRequestJob = network.newUrlRequestJob(options); + urlRequestJob.write(bytes); + urlRequestJob.complete(); + return urlRequestJob; + } + + String getMimeType(String path) { + if (StringUtils.isBlank(path)) { + return "text/html"; + } + if (path.endsWith(".html")) { + return "text/html"; + } + if (path.endsWith(".css")) { + return "text/css"; + } + if (path.endsWith(".js")) { + return "text/javascript"; + } + if (path.endsWith(".svg")) { + return "image/svg+xml"; + } + if (path.endsWith(".png")) { + return "image/png"; + } + if (path.endsWith(".jpeg")) { + return "image/jpeg"; + } + if (path.endsWith(".gif")) { + return "image/gif"; + } + Path file = new File("D:\\Fanruan\\FR10.0\\final_05_27\\FineReport_10.0\\webapps\\webroot\\upm\\lib\\locale\\plugin_zh_CN.js").toPath(); + try { + return Files.probeContentType(file); + } catch (IOException e) { + return "text/html"; + } + } +} \ No newline at end of file From 6eaa4799a0bccaa83892dac804a3dfc8ade51add Mon Sep 17 00:00:00 2001 From: Lanlan Date: Mon, 7 Jun 2021 15:29:16 +0800 Subject: [PATCH 077/148] =?UTF-8?q?REPORT-51360=20=E3=80=9010.0.17?= =?UTF-8?q?=E3=80=91=E8=AE=BE=E8=AE=A1=E5=99=A8=E7=94=A8=E6=88=B7=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E7=AD=96=E7=95=A5=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/DesignerEnvManager.java | 114 + .../design/actions/community/BBSAction.java | 65 +- .../design/actions/community/BugAction.java | 60 +- .../actions/community/CenterAction.java | 17 +- .../design/actions/community/NeedAction.java | 72 +- .../actions/community/QuestionAction.java | 13 +- .../design/actions/community/SignAction.java | 70 +- .../actions/community/TechSolutionAction.java | 21 +- .../fr/design/actions/community/UpAction.java | 80 +- .../design/actions/community/VideoAction.java | 60 +- .../community/WorkOrderCenterAction.java | 9 +- .../design/actions/help/TutorialAction.java | 31 +- .../com/fr/design/constants/UIConstants.java | 2 +- .../fr/design/extra/LoginContextListener.java | 4 +- .../com/fr/design/extra/LoginWebBridge.java | 20 +- .../fr/design/extra/PluginOperateUtils.java | 7 +- .../com/fr/design/extra/PluginWebBridge.java | 15 +- .../com/fr/design/extra/UserLoginContext.java | 5 +- .../fr/design/login/AbstractDesignerSSO.java | 89 + .../fr/design/login/DesignerLoginBridge.java | 248 + .../fr/design/login/DesignerLoginHelper.java | 84 + .../fr/design/login/DesignerLoginPane.java | 42 + .../design/login/DesignerLoginShowDialog.java | 35 + .../fr/design/login/DesignerLoginSource.java | 29 + .../fr/design/login/DesignerLoginType.java | 29 + .../fr/design/login/bean/BBSAccountLogin.java | 49 + .../config/DesignerLoginConfigManager.java | 213 + .../DesignerLoginBrowserExecutor.java | 30 + .../login/executor/DesignerLoginExecutor.java | 45 + .../executor/DesignerSendCaptchaExecutor.java | 45 + .../executor/DesignerSmsLoginExecutor.java | 47 + .../executor/DesignerSmsRegisterExecutor.java | 49 + .../login/guide/DesignerGuideBridge.java | 83 + .../login/guide/DesignerGuideHelper.java | 114 + .../design/login/guide/DesignerGuidePane.java | 37 + .../login/guide/DesignerGuideShowDialog.java | 35 + .../login/guide/utils/DesignerGuideUtils.java | 19 + .../login/service/DesignerLoginClient.java | 167 + .../login/service/DesignerLoginResult.java | 82 + .../service/DesignerPassportManager.java | 114 + .../login/socketio/LoginAuthServer.java | 87 + .../login/task/DesignerLoginTaskWorker.java | 51 + .../login/utils/DesignerLoginUtils.java | 19 + .../com/fr/design/os/impl/SupportOSImpl.java | 10 + .../com/fr/design/ui/EmbProtocolHandler.java | 5 + .../java/com/fr/design/ui/ModernUIPane.java | 10 + .../java/com/fr/design/upm/UpmBridge.java | 7 +- .../fr/design/upm/event/CertificateEvent.java | 4 +- .../fr/design/login/designer_login.properties | 2 + .../resources/com/fr/design/login/guide.css | 52 + .../resources/com/fr/design/login/guide.html | 25 + .../resources/com/fr/design/login/guide.js | 1 + .../com/fr/design/login/img/icon_cantuse.png | Bin 0 -> 1585 bytes .../login/img/icon_close40x40_normal.svg | 23 + .../design/login/img/icon_close9x9_hover.png | Bin 0 -> 15009 bytes .../design/login/img/icon_close9x9_normal.png | Bin 0 -> 260 bytes .../fr/design/login/img/icon_close_normal.png | Bin 0 -> 5057 bytes .../fr/design/login/img/icon_disable-new.png | Bin 0 -> 1899 bytes .../com/fr/design/login/img/icon_disable.png | Bin 0 -> 17244 bytes .../com/fr/design/login/img/icon_marked.png | Bin 0 -> 15712 bytes .../com/fr/design/login/img/icon_new.png | Bin 0 -> 1573 bytes .../com/fr/design/login/img/login_guide.png | Bin 0 -> 484607 bytes .../com/fr/design/login/img/login_loading.gif | Bin 0 -> 1787 bytes .../com/fr/design/login/img/product-01.png | Bin 0 -> 2736 bytes .../com/fr/design/login/img/warning.png | Bin 0 -> 6085 bytes .../com/fr/design/login/lib/bluebird.js | 5619 ++++++++++++++ .../com/fr/design/login/lib/bundle.css | 6540 +++++++++++++++++ .../com/fr/design/login/lib/fineui.ie.min.js | 53 + .../com/fr/design/login/lib/fineui.min.js | 54 + .../com/fr/design/login/lib/font/iconfont.eot | Bin 0 -> 122600 bytes .../com/fr/design/login/lib/font/iconfont.svg | 1703 +++++ .../com/fr/design/login/lib/font/iconfont.ttf | Bin 0 -> 122432 bytes .../fr/design/login/lib/font/iconfont.woff | Bin 0 -> 60244 bytes .../fr/design/login/lib/font/iconfont.woff2 | Bin 0 -> 47464 bytes .../fr/design/login/lib/locale/login_en_US.js | 5 + .../fr/design/login/lib/locale/login_ja_JP.js | 5 + .../fr/design/login/lib/locale/login_ko_KR.js | 5 + .../fr/design/login/lib/locale/login_zh_CN.js | 58 + .../fr/design/login/lib/locale/login_zh_TW.js | 5 + .../design/login/lib/locale/transform-i18n.js | 40 + .../com/fr/design/login/lib/polyfill.min.js | 3 + .../resources/com/fr/design/login/login.css | 230 + .../resources/com/fr/design/login/login.html | 25 + .../resources/com/fr/design/login/login.js | 1 + .../design/mainframe/bbs/UserInfoLabel.java | 36 +- .../fr/design/mainframe/bbs/UserInfoPane.java | 11 +- .../errorinfo/ErrorInfoLogAppender.java | 3 +- .../start/CollectUserInformationDialog.java | 1 + .../fr/start/module/DesignerActivator.java | 34 +- 89 files changed, 16687 insertions(+), 390 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java create mode 100644 designer-base/src/main/java/com/fr/design/login/DesignerLoginBridge.java create mode 100644 designer-base/src/main/java/com/fr/design/login/DesignerLoginHelper.java create mode 100644 designer-base/src/main/java/com/fr/design/login/DesignerLoginPane.java create mode 100644 designer-base/src/main/java/com/fr/design/login/DesignerLoginShowDialog.java create mode 100644 designer-base/src/main/java/com/fr/design/login/DesignerLoginSource.java create mode 100644 designer-base/src/main/java/com/fr/design/login/DesignerLoginType.java create mode 100644 designer-base/src/main/java/com/fr/design/login/bean/BBSAccountLogin.java create mode 100644 designer-base/src/main/java/com/fr/design/login/config/DesignerLoginConfigManager.java create mode 100644 designer-base/src/main/java/com/fr/design/login/executor/DesignerLoginBrowserExecutor.java create mode 100644 designer-base/src/main/java/com/fr/design/login/executor/DesignerLoginExecutor.java create mode 100644 designer-base/src/main/java/com/fr/design/login/executor/DesignerSendCaptchaExecutor.java create mode 100644 designer-base/src/main/java/com/fr/design/login/executor/DesignerSmsLoginExecutor.java create mode 100644 designer-base/src/main/java/com/fr/design/login/executor/DesignerSmsRegisterExecutor.java create mode 100644 designer-base/src/main/java/com/fr/design/login/guide/DesignerGuideBridge.java create mode 100644 designer-base/src/main/java/com/fr/design/login/guide/DesignerGuideHelper.java create mode 100644 designer-base/src/main/java/com/fr/design/login/guide/DesignerGuidePane.java create mode 100644 designer-base/src/main/java/com/fr/design/login/guide/DesignerGuideShowDialog.java create mode 100644 designer-base/src/main/java/com/fr/design/login/guide/utils/DesignerGuideUtils.java create mode 100644 designer-base/src/main/java/com/fr/design/login/service/DesignerLoginClient.java create mode 100644 designer-base/src/main/java/com/fr/design/login/service/DesignerLoginResult.java create mode 100644 designer-base/src/main/java/com/fr/design/login/service/DesignerPassportManager.java create mode 100644 designer-base/src/main/java/com/fr/design/login/socketio/LoginAuthServer.java create mode 100644 designer-base/src/main/java/com/fr/design/login/task/DesignerLoginTaskWorker.java create mode 100644 designer-base/src/main/java/com/fr/design/login/utils/DesignerLoginUtils.java create mode 100644 designer-base/src/main/resources/com/fr/design/login/designer_login.properties create mode 100644 designer-base/src/main/resources/com/fr/design/login/guide.css create mode 100644 designer-base/src/main/resources/com/fr/design/login/guide.html create mode 100644 designer-base/src/main/resources/com/fr/design/login/guide.js create mode 100644 designer-base/src/main/resources/com/fr/design/login/img/icon_cantuse.png create mode 100644 designer-base/src/main/resources/com/fr/design/login/img/icon_close40x40_normal.svg create mode 100644 designer-base/src/main/resources/com/fr/design/login/img/icon_close9x9_hover.png create mode 100644 designer-base/src/main/resources/com/fr/design/login/img/icon_close9x9_normal.png create mode 100644 designer-base/src/main/resources/com/fr/design/login/img/icon_close_normal.png create mode 100644 designer-base/src/main/resources/com/fr/design/login/img/icon_disable-new.png create mode 100644 designer-base/src/main/resources/com/fr/design/login/img/icon_disable.png create mode 100644 designer-base/src/main/resources/com/fr/design/login/img/icon_marked.png create mode 100644 designer-base/src/main/resources/com/fr/design/login/img/icon_new.png create mode 100644 designer-base/src/main/resources/com/fr/design/login/img/login_guide.png create mode 100644 designer-base/src/main/resources/com/fr/design/login/img/login_loading.gif create mode 100644 designer-base/src/main/resources/com/fr/design/login/img/product-01.png create mode 100644 designer-base/src/main/resources/com/fr/design/login/img/warning.png create mode 100644 designer-base/src/main/resources/com/fr/design/login/lib/bluebird.js create mode 100644 designer-base/src/main/resources/com/fr/design/login/lib/bundle.css create mode 100644 designer-base/src/main/resources/com/fr/design/login/lib/fineui.ie.min.js create mode 100644 designer-base/src/main/resources/com/fr/design/login/lib/fineui.min.js create mode 100644 designer-base/src/main/resources/com/fr/design/login/lib/font/iconfont.eot create mode 100644 designer-base/src/main/resources/com/fr/design/login/lib/font/iconfont.svg create mode 100644 designer-base/src/main/resources/com/fr/design/login/lib/font/iconfont.ttf create mode 100644 designer-base/src/main/resources/com/fr/design/login/lib/font/iconfont.woff create mode 100644 designer-base/src/main/resources/com/fr/design/login/lib/font/iconfont.woff2 create mode 100644 designer-base/src/main/resources/com/fr/design/login/lib/locale/login_en_US.js create mode 100644 designer-base/src/main/resources/com/fr/design/login/lib/locale/login_ja_JP.js create mode 100644 designer-base/src/main/resources/com/fr/design/login/lib/locale/login_ko_KR.js create mode 100644 designer-base/src/main/resources/com/fr/design/login/lib/locale/login_zh_CN.js create mode 100644 designer-base/src/main/resources/com/fr/design/login/lib/locale/login_zh_TW.js create mode 100644 designer-base/src/main/resources/com/fr/design/login/lib/locale/transform-i18n.js create mode 100644 designer-base/src/main/resources/com/fr/design/login/lib/polyfill.min.js create mode 100644 designer-base/src/main/resources/com/fr/design/login/login.css create mode 100644 designer-base/src/main/resources/com/fr/design/login/login.html create mode 100644 designer-base/src/main/resources/com/fr/design/login/login.js diff --git a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java index d4a60eae7f..80dcb5918c 100644 --- a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java @@ -18,6 +18,8 @@ import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.i18n.Toolkit; import com.fr.design.locale.impl.ProductImproveMark; import com.fr.design.mainframe.reuse.ComponentReuseNotificationInfo; +import com.fr.design.login.DesignerLoginType; +import com.fr.design.login.config.DesignerLoginConfigManager; import com.fr.design.mainframe.vcs.VcsConfigManager; import com.fr.design.notification.SnapChatConfig; import com.fr.design.port.DesignerPortContext; @@ -195,6 +197,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { private ComponentReuseNotificationInfo notificationInfo = ComponentReuseNotificationInfo.getInstance(); + private DesignerLoginConfigManager designerLoginConfigManager = DesignerLoginConfigManager.getInstance(); + /** * DesignerEnvManager. */ @@ -738,6 +742,105 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { designerPushUpdateConfigManager.setAutoPushUpdateEnabled(autoPushUpdateEnabled); } + /** + * 设计器登录相关配置 + */ + public void setDesignerLoginUid(int uid) { + designerLoginConfigManager.setUid(uid); + } + + public int getDesignerLoginUid() { + return designerLoginConfigManager.getUid(); + } + + public void setDesignerLoginUsername(String username) { + designerLoginConfigManager.setUsername(username); + } + + public String getDesignerLoginUsername() { + return designerLoginConfigManager.getUsername(); + } + + public void setDesignerLoginAppId(String appId) { + designerLoginConfigManager.setAppId(appId); + } + + public String getDesignerLoginAppId() { + return designerLoginConfigManager.getAppId(); + } + + public void setDesignerLoginRefreshToken(String refreshToken) { + designerLoginConfigManager.setRefreshToken(refreshToken); + } + + public String getDesignerLoginRefreshToken() { + return designerLoginConfigManager.getRefreshToken(); + } + + public void setDesignerLoginDoNotRemind(boolean doNotRemind) { + designerLoginConfigManager.setDoNotRemind(doNotRemind); + } + + public boolean isDesignerLoginDoNotRemind() { + return designerLoginConfigManager.isDoNotRemind(); + } + + public void setDesignerLoginDoNotRemindSelectedTime(long doNotRemindSelectedTime) { + designerLoginConfigManager.setDoNotRemindSelectedTime(doNotRemindSelectedTime); + } + + public long getDesignerLoginDoNotRemindSelectedTime() { + return designerLoginConfigManager.getDoNotRemindSelectedTime(); + } + + public void setDesignerActivatedTime(long designerActivatedTime) { + designerLoginConfigManager.setDesignerActivatedTime(designerActivatedTime); + } + + public long getDesignerActivatedTime() { + return designerLoginConfigManager.getDesignerActivatedTime(); + } + + public void setDesignerLastLoginTime(long lastLoginTime) { + designerLoginConfigManager.setLastLoginTime(lastLoginTime); + } + + public long getDesignerLastLoginTime() { + return designerLoginConfigManager.getLastLoginTime(); + } + + public void setCurrentVersionFirstLaunch(boolean currentVersionFirstLaunch) { + designerLoginConfigManager.setCurrentVersionFirstLaunch(currentVersionFirstLaunch); + } + + public boolean isCurrentVersionFirstLaunch() { + return designerLoginConfigManager.isCurrentVersionFirstLaunch(); + } + + public DesignerLoginType getLastLoginType() { + return designerLoginConfigManager.getLastLoginType(); + } + + public void setLastLoginType(DesignerLoginType lastLoginType) { + designerLoginConfigManager.setLastLoginType(lastLoginType); + } + + public String getLastLoginAccount() { + return designerLoginConfigManager.getLastLoginAccount(); + } + + public void setLastLoginAccount(String lastLoginAccount) { + designerLoginConfigManager.setLastLoginAccount(lastLoginAccount); + } + + public boolean isLoginRemindBeforeJumpBBS() { + return designerLoginConfigManager.isLoginRemindBeforeJumpBBS(); + } + + public void setLoginRemindBeforeJumpBBS(boolean loginRemindBeforeJumpBBS) { + designerLoginConfigManager.setLoginRemindBeforeJumpBBS(loginRemindBeforeJumpBBS); + } + /** * 内置服务器是否使用时启动 * @@ -1579,6 +1682,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { readDesignerPort(reader); } else if (name.equals(SnapChatConfig.XML_TAG)) { readSnapChatConfig(reader); + } else if (name.equals(DesignerLoginConfigManager.XML_TAG)) { + readDesignerLoginAttr(reader); } else { readLayout(reader, name); } @@ -1811,6 +1916,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { writeDesignerPort(writer); writeSnapChatConfig(writer); writeComponentReuseNotificationInfo(writer); + writeDesignerLoginAttr(writer); writer.end(); } @@ -2088,6 +2194,14 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.vcsConfigManager = vcsConfigManager; } + private void readDesignerLoginAttr(XMLableReader reader) { + reader.readXMLObject(designerLoginConfigManager); + } + + private void writeDesignerLoginAttr(XMLPrintWriter writer) { + this.designerLoginConfigManager.writeXML(writer); + } + enum XmlHandler { Self; public void handle(Throwable throwable) { diff --git a/designer-base/src/main/java/com/fr/design/actions/community/BBSAction.java b/designer-base/src/main/java/com/fr/design/actions/community/BBSAction.java index 05a1d2b20c..14046b683c 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/BBSAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/BBSAction.java @@ -1,54 +1,43 @@ package com.fr.design.actions.community; -import com.fr.base.svg.IconUtils; -import com.fr.design.actions.UpdateAction; +import com.fr.design.login.AbstractDesignerSSO; import com.fr.design.menu.MenuKeySet; -import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; import javax.swing.*; -import java.awt.event.ActionEvent; +public class BBSAction extends AbstractDesignerSSO { -public class BBSAction extends UpdateAction -{ + public BBSAction() { + this.setMenuKeySet(BBS); + this.setName(getMenuKeySet().getMenuName()); + this.setMnemonic(getMenuKeySet().getMnemonic()); + this.setSmallIcon("/com/fr/design/images/bbs/bbs"); - public BBSAction() - { - this.setMenuKeySet(BBS); - this.setName(getMenuKeySet().getMenuName()); - this.setMnemonic(getMenuKeySet().getMnemonic()); - this.setSmallIcon("/com/fr/design/images/bbs/bbs"); + } - } - - /** - * 动作 - * @param arg0 事件 - */ @Override - public void actionPerformed(ActionEvent arg0) - { - String url = CloudCenter.getInstance().acquireUrlByKind("bbs"); - BrowseUtils.browser(url); + public String getJumpUrl() { + return CloudCenter.getInstance().acquireUrlByKind("bbs"); } - public static final MenuKeySet BBS = new MenuKeySet() { - @Override - public char getMnemonic() { - return 'B'; - } - - @Override - public String getMenuName() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Community_Bbs"); - } - - @Override - public KeyStroke getKeyStroke() { - return null; - } - }; + + public static final MenuKeySet BBS = new MenuKeySet() { + @Override + public char getMnemonic() { + return 'B'; + } + + @Override + public String getMenuName() { + return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Community_Bbs"); + } + + @Override + public KeyStroke getKeyStroke() { + return null; + } + }; } diff --git a/designer-base/src/main/java/com/fr/design/actions/community/BugAction.java b/designer-base/src/main/java/com/fr/design/actions/community/BugAction.java index cebaa6956b..1438f97770 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/BugAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/BugAction.java @@ -1,50 +1,42 @@ package com.fr.design.actions.community; -import com.fr.base.svg.IconUtils; -import com.fr.design.actions.UpdateAction; +import com.fr.design.login.AbstractDesignerSSO; import com.fr.design.menu.MenuKeySet; -import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; import javax.swing.*; -import java.awt.event.ActionEvent; +public class BugAction extends AbstractDesignerSSO { -public class BugAction extends UpdateAction -{ + public BugAction() { + this.setMenuKeySet(BUG); + this.setName(getMenuKeySet().getMenuName()); + this.setMnemonic(getMenuKeySet().getMnemonic()); + this.setSmallIcon("/com/fr/design/images/bbs/bug"); + } - public BugAction() - { this.setMenuKeySet(BUG); - this.setName(getMenuKeySet().getMenuName()); - this.setMnemonic(getMenuKeySet().getMnemonic()); - this.setSmallIcon("/com/fr/design/images/bbs/bug"); -} - -@Override -public void actionPerformed(ActionEvent arg0) -{ - String url = CloudCenter.getInstance().acquireUrlByKind("bbs.bugs"); - BrowseUtils.browser(url); + @Override + public String getJumpUrl() { + return CloudCenter.getInstance().acquireUrlByKind("bbs.bugs"); + } -} - public static final MenuKeySet BUG = new MenuKeySet() { + public static final MenuKeySet BUG = new MenuKeySet() { - @Override - public String getMenuName() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Community_Bug"); - } + @Override + public String getMenuName() { + return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Community_Bug"); + } - @Override - public KeyStroke getKeyStroke() { - return null; - } + @Override + public KeyStroke getKeyStroke() { + return null; + } - @Override - public char getMnemonic() - { + @Override + public char getMnemonic() { - return 'U'; - } - }; + return 'U'; + } + }; } diff --git a/designer-base/src/main/java/com/fr/design/actions/community/CenterAction.java b/designer-base/src/main/java/com/fr/design/actions/community/CenterAction.java index 64288b9c91..17b2ce3797 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/CenterAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/CenterAction.java @@ -1,33 +1,26 @@ package com.fr.design.actions.community; -import com.fr.base.svg.IconUtils; import com.fr.design.menu.MenuKeySet; -import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; import javax.swing.KeyStroke; -import java.awt.event.ActionEvent; /** * Created by XINZAI on 2018/8/23. */ -public class CenterAction extends UpAction{ - public CenterAction() - { +public class CenterAction extends UpAction { + public CenterAction() { this.setMenuKeySet(CENTER); this.setName(getMenuKeySet().getMenuName()); this.setMnemonic(getMenuKeySet().getMnemonic()); this.setSmallIcon("/com/fr/design/images/bbs/center"); - } @Override - public void actionPerformed(ActionEvent arg0) - { - String url = CloudCenter.getInstance().acquireUrlByKind("bbs.center"); - BrowseUtils.browser(url); - + public String getJumpUrl() { + return CloudCenter.getInstance().acquireUrlByKind("bbs.center"); } + public static final MenuKeySet CENTER = new MenuKeySet() { @Override public char getMnemonic() { diff --git a/designer-base/src/main/java/com/fr/design/actions/community/NeedAction.java b/designer-base/src/main/java/com/fr/design/actions/community/NeedAction.java index 61834547f8..b13e424319 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/NeedAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/NeedAction.java @@ -1,49 +1,41 @@ package com.fr.design.actions.community; -import com.fr.base.svg.IconUtils; -import com.fr.design.actions.UpdateAction; +import com.fr.design.login.AbstractDesignerSSO; import com.fr.design.menu.MenuKeySet; -import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; import javax.swing.*; -import java.awt.event.ActionEvent; - -public class NeedAction extends UpdateAction -{ - - public NeedAction() - { - this.setMenuKeySet(NEED); - this.setName(getMenuKeySet().getMenuName()); - this.setMnemonic(getMenuKeySet().getMnemonic()); - this.setSmallIcon("/com/fr/design/images/bbs/need"); - - } - - @Override - public void actionPerformed(ActionEvent arg0) - { - String url = CloudCenter.getInstance().acquireUrlByKind("bbs.needs"); - BrowseUtils.browser(url); - - } - public static final MenuKeySet NEED = new MenuKeySet() { - @Override - public char getMnemonic() { - return 'N'; - } - - @Override - public String getMenuName() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Commuinity_Need"); - } - - @Override - public KeyStroke getKeyStroke() { - return null; - } - }; +public class NeedAction extends AbstractDesignerSSO { + + public NeedAction() { + this.setMenuKeySet(NEED); + this.setName(getMenuKeySet().getMenuName()); + this.setMnemonic(getMenuKeySet().getMnemonic()); + this.setSmallIcon("/com/fr/design/images/bbs/need"); + + } + + @Override + public String getJumpUrl() { + return CloudCenter.getInstance().acquireUrlByKind("bbs.needs"); + } + + public static final MenuKeySet NEED = new MenuKeySet() { + @Override + public char getMnemonic() { + return 'N'; + } + + @Override + public String getMenuName() { + return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Commuinity_Need"); + } + + @Override + public KeyStroke getKeyStroke() { + return null; + } + }; } diff --git a/designer-base/src/main/java/com/fr/design/actions/community/QuestionAction.java b/designer-base/src/main/java/com/fr/design/actions/community/QuestionAction.java index 94234b1bcf..e3b64d31fd 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/QuestionAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/QuestionAction.java @@ -1,16 +1,12 @@ package com.fr.design.actions.community; -import com.fr.base.svg.IconUtils; -import com.fr.design.actions.UpdateAction; +import com.fr.design.login.AbstractDesignerSSO; import com.fr.design.menu.MenuKeySet; -import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; import javax.swing.*; -import java.awt.event.ActionEvent; - -public class QuestionAction extends UpdateAction { +public class QuestionAction extends AbstractDesignerSSO { public QuestionAction() { this.setMenuKeySet(QUESTIONS); @@ -21,9 +17,8 @@ public class QuestionAction extends UpdateAction { } @Override - public void actionPerformed(ActionEvent arg0) { - String url = CloudCenter.getInstance().acquireUrlByKind("bbs.questions"); - BrowseUtils.browser(url); + public String getJumpUrl() { + return CloudCenter.getInstance().acquireUrlByKind("bbs.questions"); } public static final MenuKeySet QUESTIONS = new MenuKeySet() { diff --git a/designer-base/src/main/java/com/fr/design/actions/community/SignAction.java b/designer-base/src/main/java/com/fr/design/actions/community/SignAction.java index 4944ecc3c1..244b838540 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/SignAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/SignAction.java @@ -1,49 +1,41 @@ package com.fr.design.actions.community; -import com.fr.base.svg.IconUtils; -import com.fr.design.actions.UpdateAction; +import com.fr.design.login.AbstractDesignerSSO; import com.fr.design.menu.MenuKeySet; -import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; import javax.swing.*; -import java.awt.event.ActionEvent; - -public class SignAction extends UpdateAction -{ - - public SignAction() - { - this.setMenuKeySet(SIGN); - this.setName(getMenuKeySet().getMenuName()); - this.setMnemonic(getMenuKeySet().getMnemonic()); - this.setSmallIcon("/com/fr/design/images/bbs/sign"); - } - - @Override - public void actionPerformed(ActionEvent arg0) - { - String url = CloudCenter.getInstance().acquireUrlByKind("bbs.aut"); - BrowseUtils.browser(url); - - } - public static final MenuKeySet SIGN = new MenuKeySet() { - @Override - public char getMnemonic() { - return 'S'; - } - - @Override - public String getMenuName() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Community_sign"); - } - - @Override - public KeyStroke getKeyStroke() { - return null; - } - }; +public class SignAction extends AbstractDesignerSSO { + + public SignAction() { + this.setMenuKeySet(SIGN); + this.setName(getMenuKeySet().getMenuName()); + this.setMnemonic(getMenuKeySet().getMnemonic()); + this.setSmallIcon("/com/fr/design/images/bbs/sign"); + } + + @Override + public String getJumpUrl() { + return CloudCenter.getInstance().acquireUrlByKind("bbs.aut"); + } + + public static final MenuKeySet SIGN = new MenuKeySet() { + @Override + public char getMnemonic() { + return 'S'; + } + + @Override + public String getMenuName() { + return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Community_sign"); + } + + @Override + public KeyStroke getKeyStroke() { + return null; + } + }; } diff --git a/designer-base/src/main/java/com/fr/design/actions/community/TechSolutionAction.java b/designer-base/src/main/java/com/fr/design/actions/community/TechSolutionAction.java index 740ca23871..350cad6190 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/TechSolutionAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/TechSolutionAction.java @@ -1,23 +1,16 @@ package com.fr.design.actions.community; -import com.fr.base.svg.IconUtils; -import com.fr.design.actions.UpdateAction; +import com.fr.design.login.AbstractDesignerSSO; import com.fr.design.menu.MenuKeySet; -import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; - import javax.swing.KeyStroke; -import java.awt.event.ActionEvent; - - /** * Created by XINZAI on 2018/8/23. */ -public class TechSolutionAction extends UpdateAction{ - public TechSolutionAction() - { +public class TechSolutionAction extends AbstractDesignerSSO { + public TechSolutionAction() { this.setMenuKeySet(TSO); this.setName(getMenuKeySet().getMenuName()); this.setMnemonic(getMenuKeySet().getMnemonic()); @@ -26,12 +19,10 @@ public class TechSolutionAction extends UpdateAction{ } @Override - public void actionPerformed(ActionEvent arg0) - { - String url = CloudCenter.getInstance().acquireUrlByKind("bbs.solution"); - BrowseUtils.browser(url); - + public String getJumpUrl() { + return CloudCenter.getInstance().acquireUrlByKind("bbs.solution"); } + public static final MenuKeySet TSO = new MenuKeySet() { @Override public char getMnemonic() { diff --git a/designer-base/src/main/java/com/fr/design/actions/community/UpAction.java b/designer-base/src/main/java/com/fr/design/actions/community/UpAction.java index 9e550377f0..effc00eb1e 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/UpAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/UpAction.java @@ -1,69 +1,41 @@ package com.fr.design.actions.community; import com.fr.base.BaseUtils; -import com.fr.design.actions.UpdateAction; -import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.login.AbstractDesignerSSO; import com.fr.design.menu.MenuKeySet; import com.fr.general.CloudCenter; -import com.fr.log.FineLoggerFactory; -import com.fr.stable.StringUtils; -import javax.swing.JOptionPane; import javax.swing.KeyStroke; -import java.awt.Desktop; -import java.awt.event.ActionEvent; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; -public class UpAction extends UpdateAction -{ +public class UpAction extends AbstractDesignerSSO { - public UpAction() - { - this.setMenuKeySet(UPDATE); - this.setName(getMenuKeySet().getMenuName()); - this.setMnemonic(getMenuKeySet().getMnemonic()); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/update.png")); - - } + public UpAction() { + this.setMenuKeySet(UPDATE); + this.setName(getMenuKeySet().getMenuName()); + this.setMnemonic(getMenuKeySet().getMnemonic()); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/update.png")); + } @Override - public void actionPerformed(ActionEvent arg0) - { - String url = CloudCenter.getInstance().acquireUrlByKind("bbs.update"); - if (StringUtils.isEmpty(url)) { - FineLoggerFactory.getLogger().info("The URL is empty!"); - return; - } - try { - Desktop.getDesktop().browse(new URI(url)); - } catch (IOException exp) { - FineJOptionPane.showMessageDialog(null, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Set_Default_Browser")); - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - } catch (URISyntaxException exp) { - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - } catch (Exception exp) { - FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + url); - } - + public String getJumpUrl() { + return CloudCenter.getInstance().acquireUrlByKind("bbs.update"); } - public static final MenuKeySet UPDATE = new MenuKeySet() { - @Override - public char getMnemonic() { - return 'U'; - } - - @Override - public String getMenuName() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Community_Update"); - } - @Override - public KeyStroke getKeyStroke() { - return null; - } - }; + public static final MenuKeySet UPDATE = new MenuKeySet() { + @Override + public char getMnemonic() { + return 'U'; + } + + @Override + public String getMenuName() { + return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Community_Update"); + } + + @Override + public KeyStroke getKeyStroke() { + return null; + } + }; } diff --git a/designer-base/src/main/java/com/fr/design/actions/community/VideoAction.java b/designer-base/src/main/java/com/fr/design/actions/community/VideoAction.java index 62ccf845ef..6098846352 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/VideoAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/VideoAction.java @@ -1,49 +1,43 @@ package com.fr.design.actions.community; -import com.fr.base.svg.IconUtils; -import com.fr.design.actions.UpdateAction; import com.fr.design.locale.impl.VideoMark; +import com.fr.design.login.AbstractDesignerSSO; import com.fr.design.menu.MenuKeySet; -import com.fr.design.utils.BrowseUtils; import com.fr.general.locale.LocaleCenter; import com.fr.general.locale.LocaleMark; import javax.swing.*; -import java.awt.event.ActionEvent; +public class VideoAction extends AbstractDesignerSSO { -public class VideoAction extends UpdateAction -{ - - public VideoAction() - { - this.setMenuKeySet(VIDEO); - this.setName(getMenuKeySet().getMenuName()); - this.setMnemonic(getMenuKeySet().getMnemonic()); - this.setSmallIcon("/com/fr/design/images/bbs/video"); - } + public VideoAction() { + this.setMenuKeySet(VIDEO); + this.setName(getMenuKeySet().getMenuName()); + this.setMnemonic(getMenuKeySet().getMnemonic()); + this.setSmallIcon("/com/fr/design/images/bbs/video"); + } @Override - public void actionPerformed(ActionEvent arg0) - { + public String getJumpUrl() { LocaleMark localeMark = LocaleCenter.getMark(VideoMark.class); - BrowseUtils.browser(localeMark.getValue()); + return localeMark.getValue(); } - public static final MenuKeySet VIDEO = new MenuKeySet() { - @Override - public char getMnemonic() { - return 'V'; - } - - @Override - public String getMenuName() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Community_Video"); - } - - @Override - public KeyStroke getKeyStroke() { - return null; - } - }; + + public static final MenuKeySet VIDEO = new MenuKeySet() { + @Override + public char getMnemonic() { + return 'V'; + } + + @Override + public String getMenuName() { + return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Community_Video"); + } + + @Override + public KeyStroke getKeyStroke() { + return null; + } + }; } diff --git a/designer-base/src/main/java/com/fr/design/actions/community/WorkOrderCenterAction.java b/designer-base/src/main/java/com/fr/design/actions/community/WorkOrderCenterAction.java index d556548c14..3e711ac8d7 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/WorkOrderCenterAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/WorkOrderCenterAction.java @@ -1,12 +1,8 @@ package com.fr.design.actions.community; - import com.fr.design.i18n.Toolkit; -import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; -import java.awt.event.ActionEvent; - /** * @Description 工单中心 * @Author Henry.Wang @@ -19,8 +15,7 @@ public class WorkOrderCenterAction extends UpAction { } @Override - public void actionPerformed(ActionEvent arg0) { - String url = CloudCenter.getInstance().acquireUrlByKind("bbs.work.order.center"); - BrowseUtils.browser(url); + public String getJumpUrl() { + return CloudCenter.getInstance().acquireUrlByKind("bbs.work.order.center"); } } \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/actions/help/TutorialAction.java b/designer-base/src/main/java/com/fr/design/actions/help/TutorialAction.java index af0ea605f3..cf4f02f405 100644 --- a/designer-base/src/main/java/com/fr/design/actions/help/TutorialAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/help/TutorialAction.java @@ -1,12 +1,10 @@ package com.fr.design.actions.help; -import com.fr.base.svg.IconUtils; -import com.fr.design.actions.UpdateAction; +import com.fr.design.login.AbstractDesignerSSO; import com.fr.design.menu.MenuKeySet; import com.fr.general.CloudCenter; import com.fr.general.GeneralContext; import com.fr.general.http.HttpToolbox; -import com.fr.log.FineLoggerFactory; import com.fr.stable.CommonUtils; import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; @@ -15,14 +13,9 @@ import com.fr.third.org.apache.http.StatusLine; import com.fr.third.org.apache.http.client.methods.HttpGet; import javax.swing.KeyStroke; -import java.awt.Desktop; -import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; -import java.net.URI; -public class TutorialAction extends UpdateAction { - - private static final String URL_FOR_TEST_NETWORK = "https://www.baidu.com"; +public class TutorialAction extends AbstractDesignerSSO { public TutorialAction() { this.setMenuKeySet(HELP_TUTORIAL); @@ -32,29 +25,15 @@ public class TutorialAction extends UpdateAction { this.setAccelerator(getMenuKeySet().getKeyStroke()); } - /** - * 动作 - * @param evt 事件 - */ @Override - public void actionPerformed(ActionEvent evt) { - String helpURL = CloudCenter.getInstance().acquireUrlByKind(createDocKey()); - // 用第三方网址去判断是否处在离线状态 - if (isServerOnline(URL_FOR_TEST_NETWORK)) { - try { - Desktop.getDesktop().browse(new URI(helpURL)); - return; - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } - FineLoggerFactory.getLogger().warn(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Offline_Helptutorial_Msg")); + public String getJumpUrl() { + return CloudCenter.getInstance().acquireUrlByKind(createDocKey()); } // 生成帮助文档 sitecenter key, help.zh_CN.10 protected String createDocKey() { String locale = GeneralContext.getLocale().toString(); - return CommonUtils.join(new String[]{ "help", locale, ProductConstants.MAIN_VERSION }, "."); + return CommonUtils.join(new String[]{"help", locale, ProductConstants.MAIN_VERSION}, "."); } // 判断是否可以访问在线文档 diff --git a/designer-base/src/main/java/com/fr/design/constants/UIConstants.java b/designer-base/src/main/java/com/fr/design/constants/UIConstants.java index fdc92a9371..f43d37c00a 100644 --- a/designer-base/src/main/java/com/fr/design/constants/UIConstants.java +++ b/designer-base/src/main/java/com/fr/design/constants/UIConstants.java @@ -148,7 +148,7 @@ public interface UIConstants { public static final Color TAB_BUTTON_PRESS_SELECTED = new Color(236, 236, 238); public static final Color POPUP_TITLE_BACKGROUND = new Color(0xd8f2fd); public static final Color LIST_ITEM_SPLIT_LINE = new Color(0xf0f0f3); - + public static final Color DESIGNER_LOGIN_BACKGROUND = new Color(0xf1ad14); public static final BufferedImage DRAG_BAR = IOUtils.readImage("com/fr/design/images/control/bar.png"); public static final BufferedImage DRAG_BAR_LIGHT = IOUtils.readImage("com/fr/design/images/control/bar-light.png"); diff --git a/designer-base/src/main/java/com/fr/design/extra/LoginContextListener.java b/designer-base/src/main/java/com/fr/design/extra/LoginContextListener.java index ca13544432..50d9c1a019 100644 --- a/designer-base/src/main/java/com/fr/design/extra/LoginContextListener.java +++ b/designer-base/src/main/java/com/fr/design/extra/LoginContextListener.java @@ -1,8 +1,10 @@ package com.fr.design.extra; +import com.fr.design.login.DesignerLoginSource; + /** * Created by lp on 2016/8/16. */ public interface LoginContextListener { - void showLoginContext(); + void showLoginContext(DesignerLoginSource source); } diff --git a/designer-base/src/main/java/com/fr/design/extra/LoginWebBridge.java b/designer-base/src/main/java/com/fr/design/extra/LoginWebBridge.java index 81e34335a2..0007a839e2 100644 --- a/designer-base/src/main/java/com/fr/design/extra/LoginWebBridge.java +++ b/designer-base/src/main/java/com/fr/design/extra/LoginWebBridge.java @@ -41,7 +41,6 @@ public class LoginWebBridge { private int messageCount; private UIDialog uiDialog; private UIDialog qqDialog; - private UILabel uiLabel; private WebEngine webEngine; private LoginWebBridge() { @@ -80,7 +79,6 @@ public class LoginWebBridge { */ public void setMessageCount(int count) { if (count == MIN_MESSAGE_COUNT) { - uiLabel.setText(MarketConfig.getInstance().getBbsUsername()); MarketConfig.getInstance().setInShowBBsName(MarketConfig.getInstance().getBbsUsername()); return; } @@ -90,7 +88,6 @@ public class LoginWebBridge { .append("(").append(this.messageCount) .append(")").append(StringUtils.BLANK); MarketConfig.getInstance().setInShowBBsName(sb.toString()); - uiLabel.setText(sb.toString()); } public void setQQDialog(UIDialog qqDialog) { @@ -103,10 +100,6 @@ public class LoginWebBridge { this.uiDialog = uiDialog; } - public void setUILabel(UILabel uiLabel) { - this.uiLabel = uiLabel; - } - /** * 测试论坛网络连接 * @@ -176,7 +169,7 @@ public class LoginWebBridge { FineLoggerFactory.getLogger().error(e.getMessage(), e); } if (uid > 0) { - loginSuccess(MarketConfig.getInstance().getBbsUsername()); + closeWindow(); } return String.valueOf(uid); } @@ -191,17 +184,6 @@ public class LoginWebBridge { } } - /** - * 关闭窗口并且重新赋值 - * - * @param username 用户名 - */ - private void loginSuccess(String username) { - closeWindow(); - uiLabel.setText(username); - uiLabel.setBackground(LOGIN_BACKGROUND); - } - /** * 关闭QQ授权窗口 */ diff --git a/designer-base/src/main/java/com/fr/design/extra/PluginOperateUtils.java b/designer-base/src/main/java/com/fr/design/extra/PluginOperateUtils.java index 113815a22c..5e6c48bd12 100644 --- a/designer-base/src/main/java/com/fr/design/extra/PluginOperateUtils.java +++ b/designer-base/src/main/java/com/fr/design/extra/PluginOperateUtils.java @@ -193,15 +193,12 @@ public class PluginOperateUtils { } } - public static void getLoginInfo(JSCallback jsCallback, UILabel uiLabel) { + public static void getLoginInfo(JSCallback jsCallback) { String username = MarketConfig.getInstance().getBbsUsername(); if (StringUtils.isEmpty(username)) { jsCallback.execute(StringUtils.EMPTY); - uiLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_UnSignIn")); } else { - uiLabel.setText(username); - String result = username; - jsCallback.execute(result); + jsCallback.execute(username); } } diff --git a/designer-base/src/main/java/com/fr/design/extra/PluginWebBridge.java b/designer-base/src/main/java/com/fr/design/extra/PluginWebBridge.java index ba7c0092d2..ed41d4f54a 100644 --- a/designer-base/src/main/java/com/fr/design/extra/PluginWebBridge.java +++ b/designer-base/src/main/java/com/fr/design/extra/PluginWebBridge.java @@ -16,9 +16,9 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.locale.impl.BbsRegisterMark; import com.fr.design.locale.impl.BbsResetMark; import com.fr.design.locale.impl.BbsSpaceMark; +import com.fr.design.login.DesignerLoginSource; import com.fr.design.plugin.DesignerPluginContext; import com.fr.design.utils.concurrent.ThreadFactoryBuilder; -import com.fr.general.CloudCenter; import com.fr.general.locale.LocaleCenter; import com.fr.general.locale.LocaleMark; import com.fr.json.JSONObject; @@ -66,8 +66,6 @@ public class PluginWebBridge { private Map config; private WebEngine webEngine; - private UILabel uiLabel; - private ExecutorService threadPoolExecutor = new ThreadPoolExecutor(COREPOOLSIZE, MAXPOOLSIZE, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(COREPOOLSIZE), @@ -433,7 +431,7 @@ public class PluginWebBridge { */ public void registerLoginInfo(final JSObject callback) { JSCallback jsCallback = new JSCallback(PluginJavaFxExecutor.create(webEngine, callback)); - PluginOperateUtils.getLoginInfo(jsCallback, uiLabel); + PluginOperateUtils.getLoginInfo(jsCallback); } /** @@ -455,7 +453,7 @@ public class PluginWebBridge { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { - UserLoginContext.fireLoginContextListener(); + UserLoginContext.fireLoginContextListener(DesignerLoginSource.NORMAL); } }); } @@ -526,10 +524,6 @@ public class PluginWebBridge { } } - public void setUILabel(UILabel uiLabel) { - this.uiLabel = uiLabel; - } - /** * 设计器端的用户登录 * @@ -546,7 +540,7 @@ public class PluginWebBridge { * 通过QQ登录后通知登录 */ public void ucsynLogin(long uid, String username, String password, final JSONObject callback) { - uiLabel.setText(username); + } /** @@ -555,7 +549,6 @@ public class PluginWebBridge { public void clearUserInfo() { MarketConfig.getInstance().setInShowBBsName(StringUtils.EMPTY); FinePassportManager.getInstance().logout(); - uiLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_UnSignIn")); } public void getPackInfo(final JSObject callback){ diff --git a/designer-base/src/main/java/com/fr/design/extra/UserLoginContext.java b/designer-base/src/main/java/com/fr/design/extra/UserLoginContext.java index 354a9177f7..6f41c3340c 100644 --- a/designer-base/src/main/java/com/fr/design/extra/UserLoginContext.java +++ b/designer-base/src/main/java/com/fr/design/extra/UserLoginContext.java @@ -1,5 +1,6 @@ package com.fr.design.extra; +import com.fr.design.login.DesignerLoginSource; import java.util.ArrayList; /** @@ -11,9 +12,9 @@ public class UserLoginContext { /** * 触发登录框弹出的监听器 */ - public static void fireLoginContextListener() { + public static void fireLoginContextListener(DesignerLoginSource source) { for (LoginContextListener l : fireLoginContextListener) { - l.showLoginContext(); + l.showLoginContext(source); } } diff --git a/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java b/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java new file mode 100644 index 0000000000..4aee417fd5 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java @@ -0,0 +1,89 @@ +package com.fr.design.login; + +import com.fr.design.DesignerEnvManager; +import com.fr.design.actions.UpdateAction; +import com.fr.design.utils.BrowseUtils; +import com.fr.general.CloudCenter; +import com.fr.general.log.MessageFormatter; +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.StringUtils; +import com.fr.third.org.bouncycastle.util.encoders.Hex; +import java.awt.event.ActionEvent; +import java.security.SecureRandom; +import java.util.HashMap; +import java.util.Map; +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/6/7 + */ +public abstract class AbstractDesignerSSO extends UpdateAction { + + private static final String PRODUCT_FINEREPORT = "product-finereport"; + + private static final String KEY = "i7hP48WAcuTrmxfN"; + + @Override + public void actionPerformed(ActionEvent event) { + String url = getJumpUrl(); + if (StringUtils.isNotEmpty(url)) { + DesignerEnvManager manager = DesignerEnvManager.getEnvManager(); + int uid = manager.getDesignerLoginUid(); + if (uid > 0) { + String ssoUrl = CloudCenter.getInstance().acquireUrlByKind("designer.sso.api", "https://id.fanruan.com/api/app/?code={}&referrer={}"); + try { + String code = generateLoginCode(); + MessageFormatter.FormattingTuple tuple = MessageFormatter.arrayFormat(ssoUrl, new String[]{code, url}); + BrowseUtils.browser(tuple.getMessage()); + } catch (Exception e) { + BrowseUtils.browser(url); + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } else { + boolean loginRemindBeforeJumpBBS = manager.isLoginRemindBeforeJumpBBS(); + if (loginRemindBeforeJumpBBS) { + Map params = new HashMap<>(); + params.put("bbsJumpUrl", url); + DesignerLoginHelper.showLoginDialog(DesignerLoginSource.BBS_JUMP, params); + manager.setLoginRemindBeforeJumpBBS(false); + } else { + BrowseUtils.browser(url); + } + } + } + } + + private String generateLoginCode() throws Exception { + DesignerEnvManager manager = DesignerEnvManager.getEnvManager(); + JSONObject jo = JSONObject.create(); + jo.put("uid", manager.getDesignerLoginUid()); + jo.put("username", manager.getDesignerLoginUsername()); + jo.put("source", PRODUCT_FINEREPORT); + byte[] iv = randomIv(); + return new String(Hex.encode(iv)) + encrypt(jo.toString(), KEY.getBytes(), iv); + } + + private static byte[] randomIv() { + byte[] salt = new byte[16]; + SecureRandom secureRandom = new SecureRandom(); + secureRandom.setSeed(System.currentTimeMillis()); + secureRandom.nextBytes(salt); + return salt; + } + + public static String encrypt(String content, byte[] key, byte[] iv) throws Exception { + SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES"); + Cipher cipher = Cipher.getInstance("AES/CTR/PKCS5Padding"); + IvParameterSpec ivParameterSpec = new IvParameterSpec(iv); + cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec); + byte[] resultBytes = cipher.doFinal(content.getBytes()); + return new String(Hex.encode(resultBytes)); + } + + public abstract String getJumpUrl(); +} diff --git a/designer-base/src/main/java/com/fr/design/login/DesignerLoginBridge.java b/designer-base/src/main/java/com/fr/design/login/DesignerLoginBridge.java new file mode 100644 index 0000000000..9425097abf --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/DesignerLoginBridge.java @@ -0,0 +1,248 @@ +package com.fr.design.login; + +import com.fr.design.bridge.exec.JSBridge; +import com.fr.design.bridge.exec.JSCallback; +import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.i18n.Toolkit; +import com.fr.design.locale.impl.BbsResetMark; +import com.fr.design.login.executor.DesignerLoginBrowserExecutor; +import com.fr.design.login.executor.DesignerLoginExecutor; +import com.fr.design.login.executor.DesignerSendCaptchaExecutor; +import com.fr.design.login.executor.DesignerSmsLoginExecutor; +import com.fr.design.login.executor.DesignerSmsRegisterExecutor; +import com.fr.design.login.task.DesignerLoginTaskWorker; +import com.fr.design.utils.BrowseUtils; +import com.fr.general.CloudCenter; +import com.fr.general.locale.LocaleCenter; +import com.fr.general.locale.LocaleMark; +import com.fr.log.FineLoggerFactory; +import com.teamdev.jxbrowser.chromium.Browser; +import com.teamdev.jxbrowser.chromium.JSFunction; +import com.teamdev.jxbrowser.chromium.JSObject; +import java.awt.Desktop; +import java.net.URI; +import java.util.Map; +import java.util.Set; +import javax.swing.JOptionPane; +import javax.swing.SwingUtilities; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/5/21 + */ +public class DesignerLoginBridge { + + private Map params; + + public static DesignerLoginBridge getBridge(Browser browser, Map params) { + return new DesignerLoginBridge(browser, params); + } + + private JSObject window; + + private DesignerLoginBridge(Browser browser, Map params) { + this.params = params; + this.window = browser.executeJavaScriptAndReturnValue("window").asObject(); + Set> entries = params.entrySet(); + for (Map.Entry entry : entries) { + this.window.setProperty(entry.getKey(), entry.getValue()); + } + } + + @JSBridge + public String i18nText(String key) { + return Toolkit.i18nText(key); + } + + @JSBridge + public void closeWindow(boolean loginSuccess) { + DesignerLoginSource source = DesignerLoginSource.valueOf(Integer.parseInt(params.get("designerLoginSource"))); + if (loginSuccess) { + if (source == DesignerLoginSource.BBS_JUMP) { + String bbsJumpUrl = params.get("bbsJumpUrl"); + BrowseUtils.browser(bbsJumpUrl); + } + DesignerLoginHelper.closeWindow(); + return; + } + if (source == DesignerLoginSource.SWITCH_ACCOUNT) { + DesignerLoginHelper.closeWindow(); + return; + } + if (source == DesignerLoginSource.BBS_JUMP) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + String bbsJumpUrl = params.get("bbsJumpUrl"); + String[] options = new String[]{ + com.fr.design.i18n.Toolkit.i18nText("Fine-Designer_BBS_Go_Directly"), + com.fr.design.i18n.Toolkit.i18nText("Fine-Designer_Login_Return_Login") + }; + int rv = FineJOptionPane.showConfirmDialog( + DesignerLoginHelper.getDialog(), + com.fr.design.i18n.Toolkit.i18nText("Fine-Designer_BBS_Quit_Tip"), + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"), + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.WARNING_MESSAGE, + null, + options, + options[1] + ); + if (rv == JOptionPane.YES_OPTION) { + BrowseUtils.browser(bbsJumpUrl); + DesignerLoginHelper.closeWindow(); + } + } + }); + } else { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + String[] options = new String[]{ + com.fr.design.i18n.Toolkit.i18nText("Fine-Designer_Login_Quit"), + com.fr.design.i18n.Toolkit.i18nText("Fine-Designer_Login_Return_Login") + }; + int rv = FineJOptionPane.showConfirmDialog( + DesignerLoginHelper.getDialog(), + com.fr.design.i18n.Toolkit.i18nText("Fine-Designer_Login_Quit_Tip"), + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"), + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.WARNING_MESSAGE, + null, + options, + options[1] + ); + if (rv == JOptionPane.OK_OPTION) { + DesignerLoginHelper.closeWindow(); + } + } + }); + } + } + + /** + * 服务条款 + */ + @JSBridge + public void serviceHref() { + try { + String url = CloudCenter.getInstance().acquireUrlByKind("designer.bbs.service.terms", "https://bbs.fanruan.com/thread-102821-1-1.html"); + Desktop.getDesktop().browse(new URI(url)); + } catch (Exception e) { + FineLoggerFactory.getLogger().info(e.getMessage()); + } + } + + /** + * 忘记密码 + */ + @JSBridge + public void forgetHref() { + try { + LocaleMark resetMark = LocaleCenter.getMark(BbsResetMark.class); + Desktop.getDesktop().browse(new URI(resetMark.getValue())); + } catch (Exception e) { + FineLoggerFactory.getLogger().info(e.getMessage()); + } + } + + + /** + * 设计器端的用户登录 + * + * @param username 用户名 + * @param password 密码 + * @param callback 回调函数 + */ + @JSBridge + public void normalLogin(String username, String password, final JSFunction callback) { + DesignerLoginTaskWorker worker = new DesignerLoginTaskWorker<>( + new JSCallback(DesignerLoginBrowserExecutor.create(window, callback)), + new DesignerLoginExecutor(username, password)); + worker.execute(); + } + + /** + * 发送短信验证码 + * + * @param regionCode 区号 + * @param phone 手机 + * @param callback 回调函数 + */ + @JSBridge + public void sendCaptcha(String regionCode, String phone, final JSFunction callback) { + DesignerLoginTaskWorker worker = new DesignerLoginTaskWorker<>( + new JSCallback(DesignerLoginBrowserExecutor.create(window, callback)), + new DesignerSendCaptchaExecutor(regionCode, phone)); + worker.execute(); + } + + /** + * 设计器端的短信登录 + * + * @param regionCode 区号 + * @param phone 手机 + * @param code 验证码 + * @param callback 回调函数 + */ + @JSBridge + public void smsLogin(String regionCode, String phone, String code, final JSFunction callback) { + DesignerLoginTaskWorker worker = new DesignerLoginTaskWorker<>( + new JSCallback(DesignerLoginBrowserExecutor.create(window, callback)), + new DesignerSmsLoginExecutor(regionCode, phone, code)); + worker.execute(); + } + + /** + * 设计器端的用户注册 + * + * @param regionCode 区号 + * @param phone 手机 + * @param password 密码 + * @param regToken 注册令牌 + * @param callback 回调函数 + */ + @JSBridge + public void smsRegister(String regionCode, String phone, String password, String regToken, final JSFunction callback) { + DesignerLoginTaskWorker worker = new DesignerLoginTaskWorker<>( + new JSCallback(DesignerLoginBrowserExecutor.create(window, callback)), + new DesignerSmsRegisterExecutor(regionCode, phone, password, regToken)); + worker.execute(); + } + + /** + * 使用系统浏览器打开网页 + * + * @param url 要打开的网页 + */ + @JSBridge + public void openShopUrlAtWebBrowser(String url) { + if (Desktop.isDesktopSupported()) { + try { + //创建一个URI实例,注意不是URL + URI uri = URI.create(url); + //获取当前系统桌面扩展 + Desktop desktop = Desktop.getDesktop(); + //判断系统桌面是否支持要执行的功能 + if (desktop.isSupported(Desktop.Action.BROWSE)) { + //获取系统默认浏览器打开链接 + desktop.browse(uri); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + } + + /** + * 调整面板大小 + * + * @param width 宽 + * @param height 高 + */ + @JSBridge + public void resize(int width, int height) { + DesignerLoginHelper.getDialog().setSize(width, height); + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/DesignerLoginHelper.java b/designer-base/src/main/java/com/fr/design/login/DesignerLoginHelper.java new file mode 100644 index 0000000000..cf86de806c --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/DesignerLoginHelper.java @@ -0,0 +1,84 @@ +package com.fr.design.login; + +import com.fr.design.DesignerEnvManager; +import com.fr.design.dialog.UIDialog; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.update.ui.dialog.UpdateMainDialog; +import com.fr.general.GeneralContext; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import javax.swing.JOptionPane; +import javax.swing.WindowConstants; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/5/21 + */ +public class DesignerLoginHelper { + + private static final String MAIN_RESOURCE_PATH = "/com/fr/design/login/login.html"; + private static final String JXBROWSER = "com.teamdev.jxbrowser.chromium.Browser"; + + private static UIDialog dialog = null; + + public static String getMainResourcePath() { + return MAIN_RESOURCE_PATH; + } + + public static UIDialog getDialog() { + return dialog; + } + + public static void showLoginDialog(DesignerLoginSource source) { + showLoginDialog(source, new HashMap<>()); + } + + public static void showLoginDialog(DesignerLoginSource source, Map params) { + boolean hasJxBrowser = true; + try { + Class.forName(JXBROWSER); + } catch (ClassNotFoundException e) { + hasJxBrowser = false; + } + if (hasJxBrowser) { + showLoginPane(source, params); + } else { + showUpdatePane(); + } + } + + private static void showLoginPane(DesignerLoginSource source, Map params) { + DesignerLoginPane designerLoginPane = new DesignerLoginPane(source, params); + if (dialog == null) { + dialog = new DesignerLoginShowDialog(DesignerContext.getDesignerFrame(), designerLoginPane); + } + dialog.setVisible(true); + } + + + private static void showUpdatePane() { + JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Update_Info_Login_Message")); + if (!GeneralContext.getLocale().equals(Locale.JAPANESE) && !GeneralContext.getLocale().equals(Locale.JAPAN) + && !Locale.getDefault().equals(Locale.JAPAN) && !Locale.getDefault().equals(Locale.JAPANESE)) { + UpdateMainDialog dialog = new UpdateMainDialog(DesignerContext.getDesignerFrame()); + dialog.setAutoUpdateAfterInit(); + dialog.showDialog(); + } + } + + public static void closeWindow() { + if (dialog != null) { + dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); + dialog.setVisible(false); + dialog = null; + } + } + + public static void main(String[] args) { + DesignerEnvManager.getEnvManager().setOpenDebug(true); + showLoginDialog(DesignerLoginSource.NORMAL); + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/DesignerLoginPane.java b/designer-base/src/main/java/com/fr/design/login/DesignerLoginPane.java new file mode 100644 index 0000000000..be5df3a84d --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/DesignerLoginPane.java @@ -0,0 +1,42 @@ +package com.fr.design.login; + +import com.fr.design.DesignerEnvManager; +import com.fr.design.dialog.BasicPane; +import com.fr.design.login.utils.DesignerLoginUtils; +import com.fr.design.ui.ModernUIPane; +import com.teamdev.jxbrowser.chromium.JSValue; +import com.teamdev.jxbrowser.chromium.events.ScriptContextAdapter; +import com.teamdev.jxbrowser.chromium.events.ScriptContextEvent; +import java.awt.BorderLayout; +import java.util.Map; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/5/21 + */ +public class DesignerLoginPane extends BasicPane { + + @Override + protected String title4PopupWindow() { + return "DESIGNER_LOGIN"; + } + + public DesignerLoginPane(DesignerLoginSource source, Map params) { + params.put("designerLoginSource", String.valueOf(source.getSource())); + params.put("lastLoginType", String.valueOf(DesignerEnvManager.getEnvManager().getLastLoginType().getType())); + params.put("lastLoginAccount", DesignerEnvManager.getEnvManager().getLastLoginAccount()); + setLayout(new BorderLayout()); + ModernUIPane modernUIPane = new ModernUIPane.Builder<>() + .prepare(new ScriptContextAdapter() { + @Override + public void onScriptContextCreated(ScriptContextEvent event) { + JSValue window = event.getBrowser().executeJavaScriptAndReturnValue("window"); + window.asObject().setProperty("DesignerLoginHelper", DesignerLoginBridge.getBridge(event.getBrowser(), params)); + } + }) + .withEMB(DesignerLoginHelper.getMainResourcePath(), DesignerLoginUtils.renderMap()) + .build(); + add(modernUIPane, BorderLayout.CENTER); + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/DesignerLoginShowDialog.java b/designer-base/src/main/java/com/fr/design/login/DesignerLoginShowDialog.java new file mode 100644 index 0000000000..b5464373fa --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/DesignerLoginShowDialog.java @@ -0,0 +1,35 @@ +package com.fr.design.login; + +import com.fr.design.dialog.BasicPane; +import com.fr.design.dialog.UIDialog; +import com.fr.design.utils.gui.GUICoreUtils; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.Frame; +import javax.swing.JPanel; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/5/21 + */ +public class DesignerLoginShowDialog extends UIDialog { + + private static final Dimension DEFAULT = new Dimension(422, 478); + + public DesignerLoginShowDialog(Frame frame, BasicPane pane) { + super(frame); + setUndecorated(true); + JPanel panel = (JPanel) getContentPane(); + panel.setLayout(new BorderLayout()); + add(pane, BorderLayout.CENTER); + setSize(DEFAULT); + GUICoreUtils.centerWindow(this); + setResizable(false); + } + + @Override + public void checkValid() throws Exception { + + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/DesignerLoginSource.java b/designer-base/src/main/java/com/fr/design/login/DesignerLoginSource.java new file mode 100644 index 0000000000..c369df1d21 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/DesignerLoginSource.java @@ -0,0 +1,29 @@ +package com.fr.design.login; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/6/7 + */ +public enum DesignerLoginSource { + NORMAL(0), GUIDE(1), SWITCH_ACCOUNT(2), BBS_JUMP(3), UNKNOWN(-1); + + private int source; + + DesignerLoginSource(int source) { + this.source = source; + } + + public int getSource() { + return source; + } + + public static DesignerLoginSource valueOf(int source) { + for(DesignerLoginSource value : DesignerLoginSource.values()) { + if(value.getSource() == source) { + return value; + } + } + return UNKNOWN; + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/DesignerLoginType.java b/designer-base/src/main/java/com/fr/design/login/DesignerLoginType.java new file mode 100644 index 0000000000..deba6ce6a4 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/DesignerLoginType.java @@ -0,0 +1,29 @@ +package com.fr.design.login; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/6/4 + */ +public enum DesignerLoginType { + NORMAL_LOGIN(0), SMS_LOGIN(1), UNKNOWN(-1); + + private int type; + + DesignerLoginType(int type) { + this.type = type; + } + + public int getType() { + return type; + } + + public static DesignerLoginType valueOf(int type) { + for(DesignerLoginType value : DesignerLoginType.values()) { + if(value.getType() == type) { + return value; + } + } + return UNKNOWN; + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/bean/BBSAccountLogin.java b/designer-base/src/main/java/com/fr/design/login/bean/BBSAccountLogin.java new file mode 100644 index 0000000000..b52fe5decc --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/bean/BBSAccountLogin.java @@ -0,0 +1,49 @@ +package com.fr.design.login.bean; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/6/3 + */ +public class BBSAccountLogin { + + private int uid; + + private String username; + + private String appId; + + private String refreshToken; + + public int getUid() { + return uid; + } + + public void setUid(int uid) { + this.uid = uid; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getRefreshToken() { + return refreshToken; + } + + public void setRefreshToken(String refreshToken) { + this.refreshToken = refreshToken; + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/config/DesignerLoginConfigManager.java b/designer-base/src/main/java/com/fr/design/login/config/DesignerLoginConfigManager.java new file mode 100644 index 0000000000..8c078ef8b2 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/config/DesignerLoginConfigManager.java @@ -0,0 +1,213 @@ +package com.fr.design.login.config; + +import com.fr.design.login.DesignerLoginType; +import com.fr.stable.StringUtils; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLReadable; +import com.fr.stable.xml.XMLWriter; +import com.fr.stable.xml.XMLableReader; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/6/2 + */ +public class DesignerLoginConfigManager implements XMLReadable, XMLWriter { + + public static final String XML_TAG = "DesignerLoginConfigManager"; + + private static DesignerLoginConfigManager singleton; + + /** + * bbs uid + */ + private int uid = -1; + /** + * bbs 用户名 + */ + private String username = StringUtils.EMPTY; + /** + * bbs 应用Id + */ + private String appId = StringUtils.EMPTY; + /** + * bbs refreshToken + */ + private String refreshToken = StringUtils.EMPTY; + /** + * 登录引导页一个月内不再提醒 + */ + private boolean doNotRemind = false; + /** + * 登录引导页一个月内不再提醒 + */ + private long doNotRemindSelectedTime = -1L; + /** + * 设计器激活时间 + */ + private long designerActivatedTime = -1L; + /** + * bbs 上次登录时间 + */ + private long lastLoginTime = -1L; + /** + * bbs 上次登录方式 + */ + private DesignerLoginType lastLoginType = DesignerLoginType.UNKNOWN; + /** + * bbs 上次登录账号 + */ + private String lastLoginAccount = StringUtils.EMPTY; + /** + * 当前版本第一次启动 + */ + private boolean currentVersionFirstLaunch = true; + + /** + * bbs跳转前的登录提醒 + */ + private boolean loginRemindBeforeJumpBBS = true; + + private DesignerLoginConfigManager() { + + } + + public static DesignerLoginConfigManager getInstance() { + if (singleton == null) { + singleton = new DesignerLoginConfigManager(); + } + return singleton; + } + + @Override + public void readXML(XMLableReader reader) { + if (reader.isAttr()) { + this.setUid(reader.getAttrAsInt("uid", -1)); + this.setUsername(reader.getAttrAsString("username", StringUtils.EMPTY)); + this.setAppId(reader.getAttrAsString("appId", StringUtils.EMPTY)); + this.setRefreshToken(reader.getAttrAsString("refreshToken", StringUtils.EMPTY)); + this.setDoNotRemind(reader.getAttrAsBoolean("doNotRemind", false)); + this.setDoNotRemindSelectedTime(reader.getAttrAsLong("doNotRemindSelectedTime", -1L)); + this.setDesignerActivatedTime(reader.getAttrAsLong("designerActivatedTime", -1L)); + this.setLastLoginTime(reader.getAttrAsLong("lastLoginTime", -1L)); + this.setCurrentVersionFirstLaunch(reader.getAttrAsBoolean("currentVersionFirstLaunch", true)); + this.setLastLoginType(DesignerLoginType.valueOf(reader.getAttrAsInt("lastLoginType", -1))); + this.setLastLoginAccount(reader.getAttrAsString("lastLoginAccount", StringUtils.EMPTY)); + this.setLoginRemindBeforeJumpBBS(reader.getAttrAsBoolean("loginRemindBeforeJumpBBS", true)); + } + } + + @Override + public void writeXML(XMLPrintWriter writer) { + writer.startTAG(XML_TAG); + writer.attr("uid", uid); + writer.attr("username", username); + writer.attr("appId", appId); + writer.attr("refreshToken", refreshToken); + writer.attr("doNotRemind", doNotRemind); + writer.attr("doNotRemindSelectedTime", doNotRemindSelectedTime); + writer.attr("designerActivatedTime", designerActivatedTime); + writer.attr("lastLoginTime", lastLoginTime); + writer.attr("currentVersionFirstLaunch", currentVersionFirstLaunch); + writer.attr("lastLoginType", lastLoginType.getType()); + writer.attr("lastLoginAccount", lastLoginAccount); + writer.attr("loginRemindBeforeJumpBBS", loginRemindBeforeJumpBBS); + writer.end(); + } + + public int getUid() { + return uid; + } + + public void setUid(int uid) { + this.uid = uid; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getRefreshToken() { + return refreshToken; + } + + public void setRefreshToken(String refreshToken) { + this.refreshToken = refreshToken; + } + + public long getDoNotRemindSelectedTime() { + return doNotRemindSelectedTime; + } + + public void setDoNotRemindSelectedTime(long doNotRemindSelectedTime) { + this.doNotRemindSelectedTime = doNotRemindSelectedTime; + } + + public boolean isDoNotRemind() { + return doNotRemind; + } + + public void setDoNotRemind(boolean doNotRemind) { + this.doNotRemind = doNotRemind; + } + + public long getDesignerActivatedTime() { + return designerActivatedTime; + } + + public void setDesignerActivatedTime(long designerActivatedTime) { + this.designerActivatedTime = designerActivatedTime; + } + + public long getLastLoginTime() { + return lastLoginTime; + } + + public void setLastLoginTime(long lastLoginTime) { + this.lastLoginTime = lastLoginTime; + } + + public boolean isCurrentVersionFirstLaunch() { + return currentVersionFirstLaunch; + } + + public void setCurrentVersionFirstLaunch(boolean currentVersionFirstLaunch) { + this.currentVersionFirstLaunch = currentVersionFirstLaunch; + } + + public DesignerLoginType getLastLoginType() { + return lastLoginType; + } + + public void setLastLoginType(DesignerLoginType lastLoginType) { + this.lastLoginType = lastLoginType; + } + + public String getLastLoginAccount() { + return lastLoginAccount; + } + + public void setLastLoginAccount(String lastLoginAccount) { + this.lastLoginAccount = lastLoginAccount; + } + + public boolean isLoginRemindBeforeJumpBBS() { + return loginRemindBeforeJumpBBS; + } + + public void setLoginRemindBeforeJumpBBS(boolean loginRemindBeforeJumpBBS) { + this.loginRemindBeforeJumpBBS = loginRemindBeforeJumpBBS; + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/executor/DesignerLoginBrowserExecutor.java b/designer-base/src/main/java/com/fr/design/login/executor/DesignerLoginBrowserExecutor.java new file mode 100644 index 0000000000..fa7fa6487e --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/executor/DesignerLoginBrowserExecutor.java @@ -0,0 +1,30 @@ +package com.fr.design.login.executor; + +import com.fr.design.bridge.exec.JSExecutor; +import com.teamdev.jxbrowser.chromium.JSFunction; +import com.teamdev.jxbrowser.chromium.JSObject; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-18 + */ +public class DesignerLoginBrowserExecutor implements JSExecutor { + + public static DesignerLoginBrowserExecutor create(JSObject window, JSFunction callback) { + return new DesignerLoginBrowserExecutor(window, callback); + } + + private JSObject window; + private JSFunction callback; + + private DesignerLoginBrowserExecutor(JSObject window, JSFunction callback) { + this.window = window; + this.callback = callback; + } + + @Override + public void executor(String newValue) { + callback.invoke(window, newValue); + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/executor/DesignerLoginExecutor.java b/designer-base/src/main/java/com/fr/design/login/executor/DesignerLoginExecutor.java new file mode 100644 index 0000000000..6aff424d10 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/executor/DesignerLoginExecutor.java @@ -0,0 +1,45 @@ +package com.fr.design.login.executor; + +import com.fr.design.extra.Process; +import com.fr.design.extra.exe.Command; +import com.fr.design.extra.exe.Executor; +import com.fr.design.login.service.DesignerPassportManager; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/5/28 + */ +public class DesignerLoginExecutor implements Executor { + private String result = "[]"; + + private String username; + private String password; + + public DesignerLoginExecutor(String username, String password) { + this.username = username; + this.password = password; + } + + @Override + public String getTaskFinishMessage() { + return result; + } + + @Override + public Command[] getCommands() { + return new Command[]{ + new Command() { + @Override + public String getExecuteMessage() { + return null; + } + + @Override + public void run(Process process) { + result = String.valueOf(DesignerPassportManager.getInstance().login(username, password)); + } + } + }; + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/executor/DesignerSendCaptchaExecutor.java b/designer-base/src/main/java/com/fr/design/login/executor/DesignerSendCaptchaExecutor.java new file mode 100644 index 0000000000..0e64f33d2c --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/executor/DesignerSendCaptchaExecutor.java @@ -0,0 +1,45 @@ +package com.fr.design.login.executor; + +import com.fr.design.extra.Process; +import com.fr.design.extra.exe.Command; +import com.fr.design.extra.exe.Executor; +import com.fr.design.login.service.DesignerPassportManager; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/5/28 + */ +public class DesignerSendCaptchaExecutor implements Executor { + private String result = "[]"; + + private String regionCode; + private String phone; + + public DesignerSendCaptchaExecutor(String regionCode, String phone) { + this.regionCode = regionCode; + this.phone = phone; + } + + @Override + public String getTaskFinishMessage() { + return result; + } + + @Override + public Command[] getCommands() { + return new Command[]{ + new Command() { + @Override + public String getExecuteMessage() { + return null; + } + + @Override + public void run(Process process) { + result = String.valueOf(DesignerPassportManager.getInstance().sendCaptcha(regionCode, phone)); + } + } + }; + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/executor/DesignerSmsLoginExecutor.java b/designer-base/src/main/java/com/fr/design/login/executor/DesignerSmsLoginExecutor.java new file mode 100644 index 0000000000..cfc2c115d5 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/executor/DesignerSmsLoginExecutor.java @@ -0,0 +1,47 @@ +package com.fr.design.login.executor; + +import com.fr.design.extra.Process; +import com.fr.design.extra.exe.Command; +import com.fr.design.extra.exe.Executor; +import com.fr.design.login.service.DesignerPassportManager; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/5/28 + */ +public class DesignerSmsLoginExecutor implements Executor { + private String result = "[]"; + + private String regionCode; + private String phone; + private String code; + + public DesignerSmsLoginExecutor(String regionCode, String phone, String code) { + this.regionCode = regionCode; + this.phone = phone; + this.code = code; + } + + @Override + public String getTaskFinishMessage() { + return result; + } + + @Override + public Command[] getCommands() { + return new Command[]{ + new Command() { + @Override + public String getExecuteMessage() { + return null; + } + + @Override + public void run(Process process) { + result = DesignerPassportManager.getInstance().smsLogin(regionCode, phone, code); + } + } + }; + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/executor/DesignerSmsRegisterExecutor.java b/designer-base/src/main/java/com/fr/design/login/executor/DesignerSmsRegisterExecutor.java new file mode 100644 index 0000000000..dde25c29cb --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/executor/DesignerSmsRegisterExecutor.java @@ -0,0 +1,49 @@ +package com.fr.design.login.executor; + +import com.fr.design.extra.Process; +import com.fr.design.extra.exe.Command; +import com.fr.design.extra.exe.Executor; +import com.fr.design.login.service.DesignerPassportManager; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/5/28 + */ +public class DesignerSmsRegisterExecutor implements Executor { + private String result = "[]"; + + private String regionCode; + private String phone; + private String password; + private String regToken; + + public DesignerSmsRegisterExecutor(String regionCode, String phone, String password, String regToken) { + this.regionCode = regionCode; + this.phone = phone; + this.password = password; + this.regToken = regToken; + } + + @Override + public String getTaskFinishMessage() { + return result; + } + + @Override + public Command[] getCommands() { + return new Command[]{ + new Command() { + @Override + public String getExecuteMessage() { + return null; + } + + @Override + public void run(Process process) { + result = String.valueOf(DesignerPassportManager.getInstance().smsRegister(regionCode, phone, password, regToken)); + } + } + }; + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/guide/DesignerGuideBridge.java b/designer-base/src/main/java/com/fr/design/login/guide/DesignerGuideBridge.java new file mode 100644 index 0000000000..9b9c561e7c --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/guide/DesignerGuideBridge.java @@ -0,0 +1,83 @@ +package com.fr.design.login.guide; + +import com.fr.design.DesignerEnvManager; +import com.fr.design.bridge.exec.JSBridge; +import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.i18n.Toolkit; +import com.fr.design.login.DesignerLoginHelper; +import com.fr.design.login.DesignerLoginSource; +import com.teamdev.jxbrowser.chromium.Browser; +import com.teamdev.jxbrowser.chromium.JSObject; +import javax.swing.JOptionPane; +import javax.swing.SwingUtilities; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/5/21 + */ +public class DesignerGuideBridge { + + public static DesignerGuideBridge getBridge(Browser browser) { + return new DesignerGuideBridge(browser); + } + + private JSObject window; + + private DesignerGuideBridge(Browser browser) { + this.window = browser.executeJavaScriptAndReturnValue("window").asObject(); + } + + @JSBridge + public String i18nText(String key) { + return Toolkit.i18nText(key); + } + + @JSBridge + public void closeWindow(boolean doNotRemind, boolean login) { + if (login) { + DesignerGuideHelper.closeWindow(); + DesignerLoginHelper.showLoginDialog(DesignerLoginSource.GUIDE); + checkDoNotRemind(doNotRemind); + } else { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + String[] options = new String[]{ + com.fr.design.i18n.Toolkit.i18nText("Fine-Designer_Login_Quit"), + com.fr.design.i18n.Toolkit.i18nText("Fine-Designer_Login_Return_Login") + }; + int rv = FineJOptionPane.showConfirmDialog( + DesignerGuideHelper.getDialog(), + com.fr.design.i18n.Toolkit.i18nText("Fine-Designer_Login_Quit_Tip"), + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"), + JOptionPane.YES_NO_OPTION, + JOptionPane.WARNING_MESSAGE, + null, + options, + options[1] + ); + if (rv == JOptionPane.YES_OPTION) { + DesignerGuideHelper.closeWindow(); + checkDoNotRemind(doNotRemind); + } else if (rv == JOptionPane.NO_OPTION) { + DesignerLoginHelper.showLoginDialog(DesignerLoginSource.GUIDE); + DesignerGuideHelper.closeWindow(); + checkDoNotRemind(doNotRemind); + } + } + }); + } + } + + /** + * 用户勾选了一个月内不再提醒 + */ + private void checkDoNotRemind(boolean doNotRemind) { + DesignerEnvManager manager = DesignerEnvManager.getEnvManager(); + manager.setDesignerLoginDoNotRemind(doNotRemind); + if (doNotRemind) { + manager.setDesignerLoginDoNotRemindSelectedTime(System.currentTimeMillis()); + } + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/guide/DesignerGuideHelper.java b/designer-base/src/main/java/com/fr/design/login/guide/DesignerGuideHelper.java new file mode 100644 index 0000000000..71e7f13e07 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/guide/DesignerGuideHelper.java @@ -0,0 +1,114 @@ +package com.fr.design.login.guide; + +import com.fr.design.DesignerEnvManager; +import com.fr.design.dialog.UIDialog; +import com.fr.design.event.DesignerOpenedListener; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.os.impl.SupportOSImpl; +import javax.swing.WindowConstants; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/5/21 + */ +public class DesignerGuideHelper { + + private static final String MAIN_RESOURCE_PATH = "/com/fr/design/login/guide.html"; + private static final String JXBROWSER = "com.teamdev.jxbrowser.chromium.Browser"; + private static final long ONE_WEEK = 7 * 24 * 3600 * 1000L; + private static final long ONE_MONTH = 30 * 24 * 3600 * 1000L; + private static final long SIX_MONTH = 6 * ONE_MONTH; + + private static UIDialog dialog = null; + + public static String getMainResourcePath() { + return MAIN_RESOURCE_PATH; + } + + public static UIDialog getDialog() { + return dialog; + } + + public static void prepareShowGuideDialog() { + if (!SupportOSImpl.DESIGNER_LOGIN.support()) { + return; + } + if (isActivatedForOneWeek()) { + if (isLogin() && !isLoginForSixMonths()) { + return; + } + if (selectedDoNotRemindInOneMonth()) { + return; + } + DesignerContext.getDesignerFrame().addDesignerOpenedListener(new DesignerOpenedListener() { + @Override + public void designerOpened() { + showGuideDialog(); + } + }); + } + } + + /** + * 激活满一周 + */ + private static boolean isActivatedForOneWeek() { + return (System.currentTimeMillis() - DesignerEnvManager.getEnvManager().getDesignerActivatedTime()) > ONE_WEEK; + } + + /** + * 已经登录 + */ + private static boolean isLogin() { + return DesignerEnvManager.getEnvManager().getDesignerLoginUid() > 0; + } + + /** + * 已经登录满六个月 + */ + private static boolean isLoginForSixMonths() { + return isLogin() && (System.currentTimeMillis() - DesignerEnvManager.getEnvManager().getDesignerLastLoginTime()) > SIX_MONTH; + } + + /** + * 一个月内不再提醒 + */ + private static boolean selectedDoNotRemindInOneMonth() { + return DesignerEnvManager.getEnvManager().isDesignerLoginDoNotRemind() + && (System.currentTimeMillis() - DesignerEnvManager.getEnvManager().getDesignerLoginDoNotRemindSelectedTime()) <= ONE_MONTH; + } + + private static void showGuideDialog() { + boolean hasJxBrowser = true; + try { + Class.forName(JXBROWSER); + } catch (ClassNotFoundException e) { + hasJxBrowser = false; + } + if (hasJxBrowser) { + showGuidePane(); + } + } + + private static void showGuidePane() { + DesignerGuidePane designerGuidePane = new DesignerGuidePane(); + if (dialog == null) { + dialog = new DesignerGuideShowDialog(DesignerContext.getDesignerFrame(), designerGuidePane); + } + dialog.setVisible(true); + } + + public static void closeWindow() { + if (dialog != null) { + dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); + dialog.setVisible(false); + dialog = null; + } + } + + public static void main(String[] args) { + DesignerEnvManager.getEnvManager().setOpenDebug(true); + showGuideDialog(); + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/guide/DesignerGuidePane.java b/designer-base/src/main/java/com/fr/design/login/guide/DesignerGuidePane.java new file mode 100644 index 0000000000..64bd316ef5 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/guide/DesignerGuidePane.java @@ -0,0 +1,37 @@ +package com.fr.design.login.guide; + +import com.fr.design.dialog.BasicPane; +import com.fr.design.login.guide.utils.DesignerGuideUtils; +import com.fr.design.ui.ModernUIPane; +import com.teamdev.jxbrowser.chromium.JSValue; +import com.teamdev.jxbrowser.chromium.events.ScriptContextAdapter; +import com.teamdev.jxbrowser.chromium.events.ScriptContextEvent; +import java.awt.BorderLayout; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/5/21 + */ +public class DesignerGuidePane extends BasicPane { + + @Override + protected String title4PopupWindow() { + return "DESIGNER_GUIDE"; + } + + public DesignerGuidePane() { + setLayout(new BorderLayout()); + ModernUIPane modernUIPane = new ModernUIPane.Builder<>() + .prepare(new ScriptContextAdapter() { + @Override + public void onScriptContextCreated(ScriptContextEvent event) { + JSValue window = event.getBrowser().executeJavaScriptAndReturnValue("window"); + window.asObject().setProperty("DesignerGuideHelper", DesignerGuideBridge.getBridge(event.getBrowser())); + } + }) + .withEMB(DesignerGuideHelper.getMainResourcePath(), DesignerGuideUtils.renderMap()) + .build(); + add(modernUIPane, BorderLayout.CENTER); + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/guide/DesignerGuideShowDialog.java b/designer-base/src/main/java/com/fr/design/login/guide/DesignerGuideShowDialog.java new file mode 100644 index 0000000000..f50c3c0b8a --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/guide/DesignerGuideShowDialog.java @@ -0,0 +1,35 @@ +package com.fr.design.login.guide; + +import com.fr.design.dialog.BasicPane; +import com.fr.design.dialog.UIDialog; +import com.fr.design.utils.gui.GUICoreUtils; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.Frame; +import javax.swing.JPanel; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/5/21 + */ +public class DesignerGuideShowDialog extends UIDialog { + + private static final Dimension DEFAULT = new Dimension(700, 577); + + public DesignerGuideShowDialog(Frame frame, BasicPane pane) { + super(frame); + setUndecorated(true); + JPanel panel = (JPanel) getContentPane(); + panel.setLayout(new BorderLayout()); + add(pane, BorderLayout.CENTER); + setSize(DEFAULT); + GUICoreUtils.centerWindow(this); + setResizable(false); + } + + @Override + public void checkValid() throws Exception { + + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/guide/utils/DesignerGuideUtils.java b/designer-base/src/main/java/com/fr/design/login/guide/utils/DesignerGuideUtils.java new file mode 100644 index 0000000000..81901b1829 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/guide/utils/DesignerGuideUtils.java @@ -0,0 +1,19 @@ +package com.fr.design.login.guide.utils; + +import com.fr.general.GeneralContext; +import java.util.HashMap; +import java.util.Map; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/5/21 + */ +public class DesignerGuideUtils { + + public static Map renderMap() { + Map map4Tpl = new HashMap<>(); + map4Tpl.put("language", GeneralContext.getLocale().toString()); + return map4Tpl; + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/service/DesignerLoginClient.java b/designer-base/src/main/java/com/fr/design/login/service/DesignerLoginClient.java new file mode 100644 index 0000000000..8e68128c87 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/service/DesignerLoginClient.java @@ -0,0 +1,167 @@ +package com.fr.design.login.service; + +import com.fr.general.CloudCenter; +import com.fr.general.http.HttpToolbox; +import com.fr.general.log.MessageFormatter; +import com.fr.json.JSON; +import com.fr.json.JSONFactory; +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.StringUtils; +import com.fr.third.org.apache.commons.lang3.RandomStringUtils; +import java.util.HashMap; +import java.util.UUID; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/5/28 + */ +public class DesignerLoginClient { + + private static final String LOGIN_API = CloudCenter.getInstance().acquireUrlByKind("designer.login.api", "http://api.shequ.fanruan.com/v1/user/login/"); + private static final String SEND_CAPTCHA_API = CloudCenter.getInstance().acquireUrlByKind("designer.send.captcha.api", "http://api.shequ.fanruan.com/v1/code/getsmscaptcha/?location={}&phone={}&smstype={}"); + private static final String SMS_LOGIN_API = CloudCenter.getInstance().acquireUrlByKind("designer.sms.login.api", "http://api.shequ.fanruan.com/v1/user/smslogin/"); + private static final String SMS_REGISTER_API = CloudCenter.getInstance().acquireUrlByKind("designer.sms.register.api", "http://api.shequ.fanruan.com/v1/user/register/"); + private static final String USERNAME = "username"; + private static final String PASSWORD = "password"; + private static final String SMS_TYPE_LOGIN_AND_REGISTER = "1"; + private static final String LOCATION = "location"; + private static final String PHONE = "phone"; + private static final String CODE = "code"; + private static final String STATUS = "status"; + private static final String DATA = "data"; + private static final String CLIENT = "client"; + private static final String UID = "uid"; + private static final String APP_ID = "appid"; + private static final String REFRESH_TOKEN = "refresh_token"; + private static final String REGISTER = "register"; + private static final String REG_TOKEN = "regtoken"; + private static final String REG_PHONE = "regphone"; + private static final String DEVICE = "device"; + private static final String REG_FROM = "reg_from"; + private static final String PRODUCT_FINEREPORT = "product-finereport"; + + /** + * 服务器内部错误 + */ + private static final int INTERNAL_ERROR = 0; + + /** + * 未知错误 + */ + private static final int UNKNOWN_ERROR = -3; + + /** + * 网络连接失败 + */ + private static final int NETWORK_CONNECTED_FAILED = -4; + + public DesignerLoginResult login(String username, String password) { + try { + HashMap params = new HashMap<>(); + params.put(USERNAME, username); + params.put(PASSWORD, password); + String result = HttpToolbox.post(LOGIN_API, params); + JSONObject response = JSONFactory.createJSON(JSON.OBJECT, result); + int status = response.optInt(STATUS); + if (status < 0) { + return DesignerLoginResult.create(status, StringUtils.EMPTY, StringUtils.EMPTY, StringUtils.EMPTY, false, StringUtils.EMPTY); + } + JSONObject data = response.optJSONObject(DATA); + if (data != null) { + JSONObject client = data.optJSONObject(CLIENT); + if (client != null) { + int uid = client.optInt(UID); + if (uid > 0) { + return DesignerLoginResult.create(uid, client.optString(USERNAME), client.optString(APP_ID), data.optString(REFRESH_TOKEN), false, StringUtils.EMPTY); + } + } + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + return DesignerLoginResult.create(NETWORK_CONNECTED_FAILED, StringUtils.EMPTY, StringUtils.EMPTY, StringUtils.EMPTY, false, StringUtils.EMPTY); + } + return DesignerLoginResult.create(UNKNOWN_ERROR, StringUtils.EMPTY, StringUtils.EMPTY, StringUtils.EMPTY, false, StringUtils.EMPTY); + } + + public int sendCaptcha(String regionCode, String phone) { + try { + String url = MessageFormatter.arrayFormat(SEND_CAPTCHA_API, new String[]{regionCode, phone, SMS_TYPE_LOGIN_AND_REGISTER}).getMessage(); + String result = HttpToolbox.get(url); + JSONObject response = JSONFactory.createJSON(JSON.OBJECT, result); + return response.optInt(STATUS); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return INTERNAL_ERROR; + } + + public DesignerLoginResult smsLogin(String regionCode, String phone, String code) { + try { + HashMap params = new HashMap<>(); + params.put(LOCATION, regionCode); + params.put(PHONE, phone); + params.put(CODE, code); + String result = HttpToolbox.post(SMS_LOGIN_API, params); + JSONObject response = JSONFactory.createJSON(JSON.OBJECT, result); + int status = response.optInt(STATUS); + if (status < 0) { + return DesignerLoginResult.create(status, StringUtils.EMPTY, StringUtils.EMPTY, StringUtils.EMPTY, false, StringUtils.EMPTY); + } + JSONObject data = response.optJSONObject(DATA); + if (data != null) { + boolean register = data.optBoolean(REGISTER); + if (register) { + String regToken = data.optString(REG_TOKEN); + if (regToken != null) { + return DesignerLoginResult.create(status, StringUtils.EMPTY, StringUtils.EMPTY, StringUtils.EMPTY, true, regToken); + } + } else { + JSONObject client = data.optJSONObject(CLIENT); + if (client != null) { + int uid = client.optInt(UID); + if (uid > 0) { + return DesignerLoginResult.create(uid, client.optString(USERNAME), client.optString(APP_ID), data.optString(REFRESH_TOKEN), false, StringUtils.EMPTY); + } + } + } + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return DesignerLoginResult.create(INTERNAL_ERROR, StringUtils.EMPTY, StringUtils.EMPTY, StringUtils.EMPTY, false, StringUtils.EMPTY); + } + + public DesignerLoginResult smsRegister(String regionCode, String phone, String password, String regToken) { + try { + HashMap params = new HashMap<>(); + params.put(USERNAME, RandomStringUtils.randomAlphabetic(8)); + params.put(PASSWORD, password); + params.put(REG_TOKEN, regToken); + params.put(LOCATION, regionCode); + params.put(REG_PHONE, phone); + params.put(DEVICE, PRODUCT_FINEREPORT); + params.put(REG_FROM, PRODUCT_FINEREPORT); + String result = HttpToolbox.post(SMS_REGISTER_API, params); + JSONObject response = JSONFactory.createJSON(JSON.OBJECT, result); + int status = response.optInt(STATUS); + if (status < 0) { + return DesignerLoginResult.create(status, StringUtils.EMPTY, StringUtils.EMPTY, StringUtils.EMPTY, false, StringUtils.EMPTY); + } + JSONObject data = response.optJSONObject(DATA); + if (data != null) { + JSONObject client = data.optJSONObject(CLIENT); + if (client != null) { + int uid = client.optInt(UID); + if (uid > 0) { + return DesignerLoginResult.create(uid, client.optString(USERNAME), client.optString(APP_ID), data.optString(REFRESH_TOKEN), false, StringUtils.EMPTY); + } + } + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return DesignerLoginResult.create(INTERNAL_ERROR, StringUtils.EMPTY, StringUtils.EMPTY, StringUtils.EMPTY, false, StringUtils.EMPTY); + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/service/DesignerLoginResult.java b/designer-base/src/main/java/com/fr/design/login/service/DesignerLoginResult.java new file mode 100644 index 0000000000..891285520e --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/service/DesignerLoginResult.java @@ -0,0 +1,82 @@ +package com.fr.design.login.service; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/5/28 + */ +public class DesignerLoginResult { + + private int uid; + + private String username; + + private String appId; + + private String refreshToken; + + private boolean register; + + private String regToken; + + private DesignerLoginResult(int uid, String username, String appId, String refreshToken, boolean register, String regToken) { + this.uid = uid; + this.username = username; + this.appId = appId; + this.refreshToken = refreshToken; + this.regToken = regToken; + this.register = register; + } + + public static DesignerLoginResult create(int uid, String username, String appId, String refreshToken, boolean register, String regToken) { + return new DesignerLoginResult(uid, username, appId, refreshToken, register, regToken); + } + + public int getUid() { + return uid; + } + + public void setUid(int uid) { + this.uid = uid; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getRefreshToken() { + return refreshToken; + } + + public void setRefreshToken(String refreshToken) { + this.refreshToken = refreshToken; + } + + public boolean isRegister() { + return register; + } + + public void setRegister(boolean register) { + this.register = register; + } + + public String getRegToken() { + return regToken; + } + + public void setRegToken(String regToken) { + this.regToken = regToken; + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/service/DesignerPassportManager.java b/designer-base/src/main/java/com/fr/design/login/service/DesignerPassportManager.java new file mode 100644 index 0000000000..446a30f8b1 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/service/DesignerPassportManager.java @@ -0,0 +1,114 @@ +package com.fr.design.login.service; + +import com.fr.design.DesignerEnvManager; +import com.fr.design.login.DesignerLoginType; +import com.fr.design.upm.event.CertificateEvent; +import com.fr.event.EventDispatcher; +import com.fr.json.JSONObject; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/5/28 + */ +public class DesignerPassportManager { + + private static final String STATUS = "status"; + private static final String REGISTER = "register"; + private static final String REG_TOKEN = "regtoken"; + + private static volatile DesignerPassportManager instance = null; + + public static DesignerPassportManager getInstance() { + if (instance == null) { + synchronized (DesignerPassportManager.class) { + if (instance == null) { + instance = new DesignerPassportManager(); + } + } + } + return instance; + } + + /** + * 账号密码登录帆软通行证 + * + * @param username 论坛账号 + * @param password 密码 + */ + public int login(String username, String password) { + DesignerLoginClient client = new DesignerLoginClient(); + DesignerLoginResult result = client.login(username, password); + int uid = result.getUid(); + if (uid > 0) { + saveUserInfo(uid, result.getUsername(), result.getAppId(), result.getRefreshToken(), DesignerLoginType.NORMAL_LOGIN, username); + } + return uid; + } + + /** + * 发送短信验证码 + * + * @param regionCode 区号 + * @param phone 手机 + */ + public int sendCaptcha(String regionCode, String phone) { + DesignerLoginClient client = new DesignerLoginClient(); + return client.sendCaptcha(regionCode, phone); + } + + /** + * 短信登录帆软通行证 + * + * @param regionCode 区号 + * @param phone 手机 + * @param code 验证码 + */ + public String smsLogin(String regionCode, String phone, String code) { + DesignerLoginClient client = new DesignerLoginClient(); + DesignerLoginResult result = client.smsLogin(regionCode, phone, code); + int uid = result.getUid(); + if (uid > 0) { + saveUserInfo(uid, result.getUsername(), result.getAppId(), result.getRefreshToken(), DesignerLoginType.SMS_LOGIN, regionCode + "-" + phone); + } + JSONObject jo = new JSONObject(); + jo.put(STATUS, result.getUid()); + jo.put(REGISTER, result.isRegister()); + jo.put(REG_TOKEN, result.getRegToken()); + return jo.toString(); + } + + /** + * 注册帆软通行证 + * + * @param regionCode 区号 + * @param phone 手机 + * @param password 密码 + * @param regToken 注册令牌 + */ + public int smsRegister(String regionCode, String phone, String password, String regToken) { + DesignerLoginClient client = new DesignerLoginClient(); + DesignerLoginResult result = client.smsRegister(regionCode, phone, password, regToken); + int uid = result.getUid(); + if (uid > 0) { + saveUserInfo(uid, result.getUsername(), result.getAppId(), result.getRefreshToken(), DesignerLoginType.SMS_LOGIN, regionCode + "-" + phone); + } + return uid; + } + + /** + * 保存登录信息 + */ + private void saveUserInfo(int uid, String username, String appId, String refreshToken, DesignerLoginType type, String account) { + DesignerEnvManager manager = DesignerEnvManager.getEnvManager(); + manager.setDesignerLoginUid(uid); + manager.setDesignerLoginUsername(username); + manager.setDesignerLoginAppId(appId); + manager.setDesignerLoginRefreshToken(refreshToken); + manager.setDesignerLastLoginTime(System.currentTimeMillis()); + manager.setLastLoginType(type); + manager.setLastLoginAccount(account); + DesignerEnvManager.getEnvManager().saveXMLFile(); + EventDispatcher.fire(CertificateEvent.LOGIN, username); + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/socketio/LoginAuthServer.java b/designer-base/src/main/java/com/fr/design/login/socketio/LoginAuthServer.java new file mode 100644 index 0000000000..d60b97d0f6 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/socketio/LoginAuthServer.java @@ -0,0 +1,87 @@ +package com.fr.design.login.socketio; + +import com.fr.design.DesignerEnvManager; +import com.fr.design.login.DesignerLoginType; +import com.fr.design.login.bean.BBSAccountLogin; +import com.fr.design.upm.event.CertificateEvent; +import com.fr.event.EventDispatcher; +import com.fr.log.FineLoggerFactory; +import com.fr.third.socketio.AckRequest; +import com.fr.third.socketio.Configuration; +import com.fr.third.socketio.SocketIOClient; +import com.fr.third.socketio.SocketIOServer; +import com.fr.third.socketio.listener.DataListener; +import java.net.URLDecoder; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/6/3 + */ +public class LoginAuthServer { + + private SocketIOServer server; + + private static final String HOSTNAME = "localhost"; + private static final int PORT = 41925; + + private static volatile LoginAuthServer instance = null; + + public static LoginAuthServer getInstance() { + if (instance == null) { + synchronized (LoginAuthServer.class) { + if (instance == null) { + instance = new LoginAuthServer(); + } + } + } + return instance; + } + + private LoginAuthServer() { + Configuration config = new Configuration(); + config.setHostname(HOSTNAME); + config.setPort(PORT); + server = new SocketIOServer(config); + initEventListener(); + } + + public void start() { + try { + server.start(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + + public void stop() { + try { + server.stop(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + + private void initEventListener() { + server.addEventListener("bbsAccountLogin", BBSAccountLogin.class, new DataListener() { + @Override + public void onData(SocketIOClient client, BBSAccountLogin data, AckRequest ackRequest) throws Exception { + // 保存登录信息到.FineReport100配置中 + int uid = data.getUid(); + if (uid > 0) { + String username = URLDecoder.decode(data.getUsername(), "UTF-8"); + DesignerEnvManager manager = DesignerEnvManager.getEnvManager(); + manager.setDesignerLoginUid(data.getUid()); + manager.setDesignerLoginUsername(username); + manager.setDesignerLoginAppId(data.getAppId()); + manager.setDesignerLoginRefreshToken(data.getRefreshToken()); + manager.setDesignerLastLoginTime(System.currentTimeMillis()); + manager.setLastLoginType(DesignerLoginType.NORMAL_LOGIN); + manager.setLastLoginAccount(username); + DesignerEnvManager.getEnvManager().saveXMLFile(); + EventDispatcher.fire(CertificateEvent.LOGIN, username); + } + } + }); + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/task/DesignerLoginTaskWorker.java b/designer-base/src/main/java/com/fr/design/login/task/DesignerLoginTaskWorker.java new file mode 100644 index 0000000000..df47d71f64 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/task/DesignerLoginTaskWorker.java @@ -0,0 +1,51 @@ +package com.fr.design.login.task; + +import com.fr.design.bridge.exec.JSCallback; +import com.fr.design.bridge.exec.JSUtils; +import com.fr.design.extra.Process; +import com.fr.design.extra.exe.Command; +import com.fr.design.extra.exe.Executor; +import com.fr.stable.StringUtils; +import javax.swing.SwingWorker; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/5/27 + */ +public class DesignerLoginTaskWorker extends SwingWorker { + + private Executor executor; + private JSCallback callback; + + public DesignerLoginTaskWorker(final JSCallback callback, final Executor executor) { + this.executor = executor; + this.callback = callback; + } + + @Override + protected V doInBackground() throws Exception { + Command[] commands = executor.getCommands(); + for (Command command : commands) { + String message = command.getExecuteMessage(); + if (StringUtils.isNotBlank(message)) { + publish(message); + } + command.run(new Process() { + @Override + public void process(String s) { + if (StringUtils.isNotBlank(s)) { + publish(JSUtils.trimText(s)); + } + } + }); + } + return null; + } + + @Override + protected void done() { + String result = executor.getTaskFinishMessage(); + callback.execute(result); + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/utils/DesignerLoginUtils.java b/designer-base/src/main/java/com/fr/design/login/utils/DesignerLoginUtils.java new file mode 100644 index 0000000000..6e52d6fc21 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/utils/DesignerLoginUtils.java @@ -0,0 +1,19 @@ +package com.fr.design.login.utils; + +import com.fr.general.GeneralContext; +import java.util.HashMap; +import java.util.Map; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/5/21 + */ +public class DesignerLoginUtils { + + public static Map renderMap() { + Map map4Tpl = new HashMap<>(); + map4Tpl.put("language", GeneralContext.getLocale().toString()); + return map4Tpl; + } +} diff --git a/designer-base/src/main/java/com/fr/design/os/impl/SupportOSImpl.java b/designer-base/src/main/java/com/fr/design/os/impl/SupportOSImpl.java index a25d2606a0..949d770456 100644 --- a/designer-base/src/main/java/com/fr/design/os/impl/SupportOSImpl.java +++ b/designer-base/src/main/java/com/fr/design/os/impl/SupportOSImpl.java @@ -140,6 +140,16 @@ public enum SupportOSImpl implements SupportOS { public boolean support() { return JdkVersion.GE_9.support() && OperatingSystem.isMacos() && getMacOsVersion() >= BIG_SUR_VERSION_NUMBER; } + }, + + DESIGNER_LOGIN { + @Override + public boolean support() { + if (OperatingSystem.isLinux()) { + return false; + } + return !OperatingSystem.isMacos() || getMacOsVersion() < BIG_SUR_VERSION_NUMBER; + } }; private static final int BIG_SUR_VERSION_NUMBER = 16; diff --git a/designer-base/src/main/java/com/fr/design/ui/EmbProtocolHandler.java b/designer-base/src/main/java/com/fr/design/ui/EmbProtocolHandler.java index 04d2f0f853..b6bed69ca1 100644 --- a/designer-base/src/main/java/com/fr/design/ui/EmbProtocolHandler.java +++ b/designer-base/src/main/java/com/fr/design/ui/EmbProtocolHandler.java @@ -80,6 +80,11 @@ public class EmbProtocolHandler implements ProtocolHandler { path = path.substring(4); } inputStream = IOUtils.readResource(path); + if (path.endsWith(".html")) { + String text = IOUtils.inputStream2String(inputStream, EncodeConstants.ENCODING_UTF_8); + text = TemplateUtils.renderParameter4Tpl(text, map); + return Assistant.inputStream2Response(new ByteArrayInputStream(text.getBytes(StandardCharsets.UTF_8)), path); + } return Assistant.inputStream2Response(inputStream, path); } } catch (Exception e) { diff --git a/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java b/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java index 745c56ea70..0afe2ccd31 100644 --- a/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java +++ b/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java @@ -174,6 +174,16 @@ public class ModernUIPane extends BasicPane { return this; } + /** + * 加载jar包中的资源 + * @param path 资源路径 + */ + public Builder withEMB(final String path, Map map) { + Assistant.setEmbProtocolHandler(pane.browser, new EmbProtocolHandler(map)); + pane.browser.loadURL("emb:" + path); + return this; + } + /** * 加载url指向的资源 * @param url 文件的地址 diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java b/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java index 0c25281d50..e932c5083d 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java @@ -393,10 +393,8 @@ public class UpmBridge { String username = MarketConfig.getInstance().getBbsUsername(); if (StringUtils.isEmpty(username)) { jsCallback.execute(StringUtils.EMPTY); - EventDispatcher.fire(CertificateEvent.LOGOUT, StringUtils.EMPTY); } else { jsCallback.execute(username); - EventDispatcher.fire(CertificateEvent.LOGIN, username); } } @@ -417,10 +415,9 @@ public class UpmBridge { /** * 清除用户信息 */ + @JSBridge public void clearUserInfo() { - MarketConfig.getInstance().setInShowBBsName(StringUtils.EMPTY); - FinePassportManager.getInstance().logout(); - EventDispatcher.fire(CertificateEvent.LOGOUT, StringUtils.EMPTY); + } /** diff --git a/designer-base/src/main/java/com/fr/design/upm/event/CertificateEvent.java b/designer-base/src/main/java/com/fr/design/upm/event/CertificateEvent.java index 5710768449..f3c2a4bf45 100644 --- a/designer-base/src/main/java/com/fr/design/upm/event/CertificateEvent.java +++ b/designer-base/src/main/java/com/fr/design/upm/event/CertificateEvent.java @@ -7,6 +7,6 @@ import com.fr.event.Event; * @version 10.0 * Created by richie on 2019-04-18 */ -public enum CertificateEvent implements Event { - LOGIN,LOGOUT +public enum CertificateEvent implements Event { + LOGIN, LOGOUT } diff --git a/designer-base/src/main/resources/com/fr/design/login/designer_login.properties b/designer-base/src/main/resources/com/fr/design/login/designer_login.properties new file mode 100644 index 0000000000..853adb77df --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/login/designer_login.properties @@ -0,0 +1,2 @@ +VERSION=1.0 +ENV_VERSION=10.0 diff --git a/designer-base/src/main/resources/com/fr/design/login/guide.css b/designer-base/src/main/resources/com/fr/design/login/guide.css new file mode 100644 index 0000000000..194296aa0a --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/login/guide.css @@ -0,0 +1,52 @@ +.background-login-close { + color: white !important; + font-weight: bold; + font-size: 14px; +} +.background-guide-close { + color: black !important; + font-weight: bold; + font-size: 16px; +} +.background-login-loading { + background: url(./img/login_loading.gif) no-repeat center center; +} +.background-plugin-need-update { + background: url(./img/icon_new.png) no-repeat center center; +} +.background-plugin-cant-use { + background: url(./img/icon_cantuse.png) no-repeat center center; +} +.background-plugin-is-disable { + background: url(./img/icon_disable.png) no-repeat center center; +} +.background-plugin-is-disable-new { + background: url(./img/icon_disable-new.png) no-repeat center center; +} +.background-plugin-selected { + background: url(./img/icon_marked.png) no-repeat center center; +} +.background-shop-title-close { + background: url(./img/icon_close40x40_normal.svg) no-repeat center center; +} +.background-dialog-confirm { + background: url(./img/warning.png) no-repeat center center; + background-size: contain; +} +.background-close-button { + background: url(./img/icon_close9x9_normal.png) no-repeat center center; +} +.background-close-button:hover { + background: url(./img/icon_close9x9_hover.png) no-repeat center center; +} +.designer-login-guide { + background: url(./img/login_guide.png) no-repeat center center; + background-size: cover; +} +.designer-guide-login-button { + font-size: 14px; + color: white; + border-radius: 4px; + background-color: #3685F2; +} + diff --git a/designer-base/src/main/resources/com/fr/design/login/guide.html b/designer-base/src/main/resources/com/fr/design/login/guide.html new file mode 100644 index 0000000000..aeb50ce18b --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/login/guide.html @@ -0,0 +1,25 @@ + + + + + + title + + + + + + + + + \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/login/guide.js b/designer-base/src/main/resources/com/fr/design/login/guide.js new file mode 100644 index 0000000000..2dc054d2d9 --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/login/guide.js @@ -0,0 +1 @@ +!function(e){var t={};function i(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,i),n.l=!0,n.exports}i.m=e,i.c=t,i.d=function(e,t,o){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(i.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(o,n,function(t){return e[t]}.bind(null,n));return o},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=1)}([function(e,t,i){"use strict";var o=this&&this.__createBinding||(Object.create?function(e,t,i,o){o===undefined&&(o=i),Object.defineProperty(e,o,{enumerable:!0,get:function(){return t[i]}})}:function(e,t,i,o){o===undefined&&(o=i),e[o]=t[i]}),n=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||t.hasOwnProperty(i)||o(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),n(i(2),t)},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),n=i(3);BI.addI18n(Store.i18n),BI.createWidget({type:o.Vertical,element:"body",items:[{type:n["default"]}]})},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ListView=t.VirtualGroup=t.LeftRightVerticalAdapt=t.Left=t.Horizontal=t.Vertical=t.Absolute=t.Layout=t.Htape=t.CenterAdapt=t.Vtape=t.HorizontalAdapt=t.VerticalAdapt=t.BubbleCombo=t.Img=t.Tab=t.SingleSelectInsertCombo=t.SingleSelectRadioItem=t.MultiTreePopupView=t.Editor=t.NicEditor=t.RichEditor=t.MultiTreeCombo=t.DynamicDateTimeCombo=t.DynamicDateCombo=t.BarPopOver=t.MultiSelectItem=t.TextAreaEditor=t.AllValueChooserCombo=t.ButtonGroup=t.MultiSelectInsertCombo=t.TextEditor=t.Button=t.SignEditor=t.MultiFileEditor=t.SmallTextEditor=t.HtmlLabel=t.Label=t.DownListCombo=t.TextButton=t.IconChangeButton=t.IconButton=t.IconTextIconItem=t.IconTextItem=void 0,t.IconTextItem="bi.icon_text_item",t.IconTextIconItem="bi.icon_text_icon_item",t.IconButton="bi.icon_button",t.IconChangeButton="bi.icon_change_button",t.TextButton="bi.text_button",t.DownListCombo="bi.down_list_combo",t.Label="bi.label",t.HtmlLabel="bi.html_label",t.SmallTextEditor="bi.small_text_editor",t.MultiFileEditor="bi.multifile_editor",t.SignEditor="bi.sign_editor",t.Button="bi.button",t.TextEditor="bi.text_editor",t.MultiSelectInsertCombo="bi.multi_select_insert_combo",t.ButtonGroup="bi.button_group",t.AllValueChooserCombo="bi.all_value_chooser_combo",t.TextAreaEditor="bi.textarea_editor",t.MultiSelectItem="bi.multi_select_item",t.BarPopOver="bi.bar_popover",t.DynamicDateCombo="bi.dynamic_date_combo",t.DynamicDateTimeCombo="bi.dynamic_date_time_combo",t.MultiTreeCombo="bi.multi_tree_combo",t.RichEditor="bi.rich_editor",t.NicEditor="bi.nic_editor",t.Editor="bi.editor",t.MultiTreePopupView="bi.multi_tree_popup_view",t.SingleSelectRadioItem="bi.single_select_radio_item",t.SingleSelectInsertCombo="bi.single_select_insert_combo",t.Tab="bi.tab",t.Img="bi.img",t.BubbleCombo="bi.bubble_combo",t.VerticalAdapt="bi.vertical_adapt",t.HorizontalAdapt="bi.horizontal_adapt",t.Vtape="bi.vtape",t.CenterAdapt="bi.center_adapt",t.Htape="bi.htape",t.Layout="bi.layout",t.Absolute="bi.absolute",t.Vertical="bi.vertical",t.Horizontal="bi.horizontal",t.Left="bi.left",t.LeftRightVerticalAdapt="bi.left_right_vertical_adapt",t.VirtualGroup="bi.virtual_group",t.ListView="bi.list_view"},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var o=i(0);i(4);var n=i(5),r=i(6);t.className="designer.login.guide",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-guide",width:700,height:557},_store:function(){return BI.Models.getModel(r["default"])},render:function(){var e=this;return{type:o.Vertical,items:[{el:{type:o.HorizontalAdapt,items:[{type:o.TextButton,text:String.fromCharCode(10005),cls:"background-guide-close",width:16,height:16,rgap:18,tgap:18,handler:function(){n["default"].closeWindow(e.model.doNotRemind,!1)}}]}},{el:{type:o.Vertical,items:[{type:o.Horizontal,items:[{type:o.MultiSelectItem,lgap:33,width:240,text:BI.i18nText("Designer-Guide_Do_Not_Remind"),handler:function(){e.store.setDoNotRemind(this.isSelected())}},{type:o.TextButton,width:122,height:38,cls:"designer-guide-login-button",text:BI.i18nText("Designer-Guide_Login"),handler:function(){n["default"].closeWindow(e.model.doNotRemind,!0)}}]}]},tgap:460}]}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.DesignerGuideHelper,n=function(){function e(){}return e.prototype.closeWindow=function(e,t){o&&o.closeWindow(e,t)},e}();t["default"]=new n},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});BI.model("designer.login.guide.model",BI.inherit(Fix.Model,{state:function(){return{doNotRemind:!1}},setDoNotRemind:function(e){this.model.doNotRemind=e}})),t["default"]="designer.login.guide.model"}]); \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/login/img/icon_cantuse.png b/designer-base/src/main/resources/com/fr/design/login/img/icon_cantuse.png new file mode 100644 index 0000000000000000000000000000000000000000..278f2c09bc59641bdb5eac0679843bc7e405f4c4 GIT binary patch literal 1585 zcmV-12G043P)N#>Si zaB%Rw^Yinc&(6+Llai9GH@P<2Mstm*&0fU#V$A&f{C^iK#Tay5^T5Es2Lk+~tmBUd zP{G|B(VNuy)6>%{qobom{_DcUnlI3wh|?dW-=|{~OtnI3ziRDAYn#5Qsj1_!v9TQ5 zw-WKbzP>L6>T8_73=W7`;?9?Lu(7c*pkr?wytlXaD_Q)J8!2@bO}lVzzuK|+e7-Pf zYjX!*r!A39l1P6i4j<_{L_04p&(zh`smarTDV%DrQyR=gqCs1`?Y-ugIPv%Q_x~jN zQ+0^W&(Aj*85w3}WyRFi)`sOP{d|B%qQQ&#xk%f=^5tzDHC$GU^Aw5nFQPvLLdy~BzcJ<=m5 zCwrkefzeN$0UVQ=8@@X%CNR+_D?Ee}8&%+;uiejzk-t_(gjG?cTuyZfg^>n(MT zE+{Clk)EBMHK(ViroO)3NbNO1^DAIOZ*OnA)4X;(&aj}g&^Ht)7W_+?vidV}fEIBzj`CG;}sZ(+^ zIXT&gokPM@S6AC>B7J;(Y;tpRO?Gy+Sz221HYD&mAK#aOX8ffhF3?p1_f+P+3amO# zPfxeGOQaEU7+9c53pVH4+L|3hije!OtE=Ap%R=KLZg5GDR|Mo=nN!b1pn(UP2m|SE zI@)YXeg)D4%|>O@a)UZwmI^jEHwRerG7=ZKoQAK-Py3H7T;VPbG;mT`EJ#sNQP`&2 z+1WAJHa0fwG=+E82)4Ae1f1)*n=b|L>FMc^)t<;^E7H_pbr+g^B^~^JzXjEb!3Jdx z^?Yw{&x>+sohw7*|AhyT94v3hm?x4F`3zP`OH1=2El09xXlO7gDJeFx&z?OqRaI3w z)JqFB+ypdh#f-S5$J-LgKV(c6197N1%^{-cL4H&6umLT#JuLFfiHP>KA`J@?6ZKx^;wOd8z-v~78J(nuo-QDlYCi+#t zQ`I4wI!p=x!X_hssT_rcg?3n3SsAZXwoSPsb+{QKj@%@)UC*u>`jUm>gfmgrDRsBJ zyxhopUf6W{`DjkdBY=fv5YVh~ThREhM}AjV*O%htF$SEe2AW8#5J^4&Q%#64hsyHu zvJUZdXq_96v^wy2c6NR%7oTZ_(Fo~58jO#R+f?9%K&u0Fn=~NGw2{d9VhXmlwg%|C z4M`S(KbL;2J4309p+cit>h#%k**BAbJDN{5yfhw@;jhRS|_(C z7Z)u&F9`~aUD|gB4U_jG;esj<1F-Y(M4G6OHdGaryN1TE2d)tA4PfIYhKGl>+iJ#; z|DmzLwzjrF*nm5@u&IKdXuulz$UbL$u)V!K!1Y~=S5<&?0cqcL|l-JZ>0IfGCo%aq6U|1d3)bPliMhHG3pgnMnCT^ zk?gq0XVqd0c64+EL?^7+XBABkC2-^1$p$Y8&^~jcquhxnD00000NkvXXu0mjfPBi;s literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/login/img/icon_close40x40_normal.svg b/designer-base/src/main/resources/com/fr/design/login/img/icon_close40x40_normal.svg new file mode 100644 index 0000000000..cc6e8d2336 --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/login/img/icon_close40x40_normal.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fr/design/login/img/icon_close9x9_hover.png b/designer-base/src/main/resources/com/fr/design/login/img/icon_close9x9_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..91a39fe96d60047b2c38d89b85f6315cbcef264a GIT binary patch literal 15009 zcmeI3&u`;I6vwAp7HI=379jybLb9?#Dgwtp5;wJ#WGP8YDm6>h2GJf6>)4aVYGQkB zr%B5t3n!#rmJ0~+53Gb%aN+BzmiD$z168iMB=MhqW zvg&)mUTsS=oK8kJod(YIJ1&`xP~lqN)r~_Oa1DH5*~Rp)Uw@nCEVGz?Td9dPw~Sj> z^~A%wC)ex7$)TZ|>1(A_p|25v4i0p#-)Y;v)-R?bU5)$>hlMm3O$iQ*>9sH+w^!Td z%8rLQC8O|$DCM}knvoPKw<^8L$)c1M#H=7?c}dnpRg)BMc%(}y@~hyPO>L*LF-%9S zV!9Ost|kb*UN6(jW*qN8kW^I_L|Kq!p3LC=V>{6MyzO6&MMgRm>>Hlt29{%Up|0L= zx^JT3sR2V3lozysny20=bmq;GdHy#tRE2sL!@&f{ra(sg&piWUC+SlN90nj&b#`+ zYEBksN-6X#Ja^o;7KDYKI4s%<@d_2lwQ6M#>w)9d9j9H2ciHv`Ay+PQ%QfAw>=5b8 z1p&^VEcQeSSM&gv$YxyOMTHmDx|G+*E0=vmT-8J|Arj978a2nXn#XfAWJOc*NsYuz zs6mRy)C2uoD#^JC9n;X7j@QwHlGV`Fyw}5HXGPfBZ#$HGJHn5 z;uzhqREE+fk;b`IF|Rjsd{$OPKG#$me50u<{7Tal4FzK{uQW%}iSQZeH$98AIlY~j z6Q2FQO)*DiCRNq)$>uyxY+AB)qeixiZ%&Vn9BnIVNUrYrI4rkfdQ@-Y4mNI3VN6uE znr?)xtYn1MfX#w1H99%1apW+}nq9#2QI7Q!;fr(hTG*x)R4f(ES}fu_&7h}yc|dj$+XvVz38Sq$8aUsw z#fv#zQ=?WeTZ4u0Uq~bMOZJi;)s0jTX2vF&nT{jigeCLM*q z@wsvP3*r*v!?<{%5_exw`NgB;-j3W>3gi3AnaUh@uSfY~azT$$6=<;}00`Y=xafR< zm*E0H=qAHO=L5V97XU&x87?{>;AOY~5W2~5(fI%`!v%oQO@@ok2Y4AS0EBKbTy#Fb z%Wwf8bd%wt^8sFl3jm>;3>Tdb@G@Kg2;F43=zM^e;Q~PDCc{PN1H23u075qzE;=9J zWw-zky2)_S`2a7&1%S{^hKtSzco{ALgl;libUwh#Z~-86li{NC0bYg+0HK=<7o89A zGF$)%-DJ4ve1MnX0zl{{!$s!$T6H jK1B9~JI{t1= literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/login/img/icon_close9x9_normal.png b/designer-base/src/main/resources/com/fr/design/login/img/icon_close9x9_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..198afc837cb3405dc357f21aa86f49b3cf70c21d GIT binary patch literal 260 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 X@O{GnapI8z00000NkvXXu0mjf;);@X literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/login/img/icon_disable-new.png b/designer-base/src/main/resources/com/fr/design/login/img/icon_disable-new.png new file mode 100644 index 0000000000000000000000000000000000000000..f645f8a7dceac6eb6c3ded9d92b3c9661f0038c8 GIT binary patch literal 1899 zcmV-x2bB1UP)pS8-B(>3D1E%h%np9Mi z3O+y%`}sm3FaWZF$?Q4ncKZJAZgsu$g7zD@_2Z?PWaCs`1SBO&D;A80tZx!*KOKZL zr7QRba^b!B5Ux2-q0?t*?zM-{!K*)7LZEG_VgNd~6;O+Df#4gevoq(t&E>Q77 zwE-Dvnws{K`wH4JVZPJT?tqgfCqmY*J8XxKL-u@M*!3mgD=UFJm9WfR1zG=|;LA-8 z)mbPy00avo&Z~R4wRpaB3^EQYVD7(|9cklVK2bCZ8w3g6!Nt* zS8D^;F4a8D-jD2Y^O%`VXwM6SFE>KgIi7s7!?I*Gl#@Szv~6q1`}cA#b>(QcJp$J) z*F5b0kEFQy!|Cis?-MYOVPG)ju$3@%mUpF?!~m7L=C+1wuJxqQg!LmpOvaqvC@DI&-z= zakE*i(&4`Ew&)Du;SAc1_5IrKfjcYT{FKvT8D8-}1=Y&0$u zl@QQ|xK&ZffCr~^!*4mKaPxKr660fqfGvoO!I6X{R!@g)-s~4>FYui!)_XvQ1_u(b zJ2;q=i|(D;5kFh7H~Tm{0QELkXh2wS5UR`;xGY7-3Wbsj-Llnh&>q3LbNM=5aYQqA zxhNHK^y$_SYE^Tls=l-wu`!Vt&^w6%A31pj(aoEnX?P?2e&RIrC0Cty3y)}HDK~7& z_&9(6%Y)sVJC?0w&^%F#HmY>ITE*r)NVOLdT!`GWI(DEg32`_}e!;CE5M1C$DuIr{bN%q$|8$(X`nB!egw3I>}PuV&ULE5C*^<8={q z2{-)niBANYDXtH9D;*yfgTCE6F<9EE1=KBDuy^!O`2`nAI?P4GkYMIzSBo|pxZzVL zJuzq&oZ_IOHlV;1Qg^8s(UDErqN_|=w(mR4Mpp(= znTol$XH9+T&fjjHUL#}Me$+0*I-^aB-l%~ix6scB!-8E6m1?+33k7IE*) znOUcxYgC+$F(y6t?pL$w9CVF}w=@-T@6G+PPD0;TaRxmvt&Z`&Dg5vo{v#aOr-(GK^S*=2$b*7sN)UzhFmK0w`J#5kg lxyRyKnQw9R4g7xr1^{9?=|%3(fD`}#002ovPDHLkV1hEmkJ$hK literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/login/img/icon_disable.png b/designer-base/src/main/resources/com/fr/design/login/img/icon_disable.png new file mode 100644 index 0000000000000000000000000000000000000000..2d34fd865473b525dcab6c94158d68f0969259f5 GIT binary patch literal 17244 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 X8>eSu{>F4O)MgjWy$BO)oP{Go@K$w*n$W0uhR6 z7Q>(>mXnp0V8w%oqm@=@l9M?J7#f<65=|40NHqzFrgAUb?LPhX*_YdU0S>r><7W2u z+1+RN`RsSU&+qv?kB(9b;r_W_-CB)1>+m&^MdqPunX2cT&z|qN)OV$6(Ybm~7jE#O zp*?Vn!Ut5X10r-ALSLOBpCn-g_lMSkQjlr=LA9z&$0YiLwVd|ZhVVjDYp|fQ=3Xx+ z9U}C$b)4_>!vgLu*iuay^l+dmT!1nai^TNdn_QqaLJscAe_Nw;08s7A_Em*4sJ21|KCoh=3_U7PO+TQ-ynQ1#TzmSEK)_oV>6_&4weet@Vsvp_fPW)G;~11qR6OU#v< zxskLzYH(-H8>-TPDvEn!_6xYZ2*$z;;Ln@~die?%7C!9-t9%tIcrtSI!iP{E(62-2Z3)s0mAPcAoTWuyZIyn-^=bXE=ptdyc9=!SU!1=8|@b#5x66( zShj~-vIoNG=g!8x84L&)U6g~sCs6TQLAclj&WiWZE`0zo7NA&H<8u=8={9aG{VV7s z%dxBohjB4sl47pTVu9$DxvcCgtpLM!cVhg7@|+gAs|T-p-9R zngs=J&n%P%7kN0=p~BItR!Dx|v=wy8iP8Yldl`(2p9RB1bEKT*@DUiO+pEc~f!su@ zxKNB8`r)AqJkdk$jE3i*K|4$XchgUxONs|maXuK+o&=7#HVHLM$@wjwZ|VPVNo!=7K3R9c|JK1GRMsyPCnX&KDB{_VpV;=!_gxw6Es^hKxZ}qz5bta51F#J ze%zp$Rjw^wNPR(Rfcc{D%97?~$<)sejw`gJxY!v3&B%jVutDfA8pa)(fwNp9cu?)j zk*QxEo)Boo<3p@0c|d*aL*n;+KVi_a;%*;{fOd@|P^TsF`;Sg2wCr)g2XxTIN3jk` z`0B?AhxRBwIH>k3kc6)rBLdpvaX(PMwQ7>^O>@LRd!kB!MRm?X>H1S|-L_%vk?iU70(zm}vEVPfuJ&Wo|ht5Vcw8rBedn7fSi+E^X zkCWu@ew`H1($o#XTe_}xOeSas-tyPAj-Gzk447m;Jwi9ZB>d@@Ug#DrLM9vd{{jpE Xyn=01EE@*v00000NkvXXu0mjf2>|7u literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/login/img/login_guide.png b/designer-base/src/main/resources/com/fr/design/login/img/login_guide.png new file mode 100644 index 0000000000000000000000000000000000000000..cdc7e085f90e055432a555ad3bb49182c42cd964 GIT binary patch literal 484607 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%0DN7Mk2yKc&DXSwGn>ON_I=> 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

yL{YXV2OM5Bi>g?jw!A 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 z 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 g#j!MzeoB-<H}Q!77wX_Wpa1{> literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/login/img/warning.png b/designer-base/src/main/resources/com/fr/design/login/img/warning.png new file mode 100644 index 0000000000000000000000000000000000000000..9e14cb51ba259632c79b2159e37578d95e561fb9 GIT binary patch literal 6085 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 literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/login/lib/bluebird.js b/designer-base/src/main/resources/com/fr/design/login/lib/bluebird.js new file mode 100644 index 0000000000..0b823f7ce6 --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/login/lib/bluebird.js @@ -0,0 +1,5619 @@ +/* @preserve + * The MIT License (MIT) + * + * Copyright (c) 2013-2017 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +/** + * bluebird build version 3.5.0 + * Features enabled: core, race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each +*/ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.Promise=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof _dereq_=="function"&&_dereq_;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof _dereq_=="function"&&_dereq_;for(var o=0;o 0) { + var fn = queue.shift(); + if (typeof fn !== "function") { + fn._settlePromises(); + continue; + } + var receiver = queue.shift(); + var arg = queue.shift(); + fn.call(receiver, arg); + } +}; + +Async.prototype._drainQueues = function () { + this._drainQueue(this._normalQueue); + this._reset(); + this._haveDrainedQueues = true; + this._drainQueue(this._lateQueue); +}; + +Async.prototype._queueTick = function () { + if (!this._isTickUsed) { + this._isTickUsed = true; + this._schedule(this.drainQueues); + } +}; + +Async.prototype._reset = function () { + this._isTickUsed = false; +}; + +module.exports = Async; +module.exports.firstLineError = firstLineError; + +},{"./queue":26,"./schedule":29,"./util":36}],3:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) { +var calledBind = false; +var rejectThis = function(_, e) { + this._reject(e); +}; + +var targetRejected = function(e, context) { + context.promiseRejectionQueued = true; + context.bindingPromise._then(rejectThis, rejectThis, null, this, e); +}; + +var bindingResolved = function(thisArg, context) { + if (((this._bitField & 50397184) === 0)) { + this._resolveCallback(context.target); + } +}; + +var bindingRejected = function(e, context) { + if (!context.promiseRejectionQueued) this._reject(e); +}; + +Promise.prototype.bind = function (thisArg) { + if (!calledBind) { + calledBind = true; + Promise.prototype._propagateFrom = debug.propagateFromFunction(); + Promise.prototype._boundValue = debug.boundValueFunction(); + } + var maybePromise = tryConvertToPromise(thisArg); + var ret = new Promise(INTERNAL); + ret._propagateFrom(this, 1); + var target = this._target(); + ret._setBoundTo(maybePromise); + if (maybePromise instanceof Promise) { + var context = { + promiseRejectionQueued: false, + promise: ret, + target: target, + bindingPromise: maybePromise + }; + target._then(INTERNAL, targetRejected, undefined, ret, context); + maybePromise._then( + bindingResolved, bindingRejected, undefined, ret, context); + ret._setOnCancel(maybePromise); + } else { + ret._resolveCallback(target); + } + return ret; +}; + +Promise.prototype._setBoundTo = function (obj) { + if (obj !== undefined) { + this._bitField = this._bitField | 2097152; + this._boundTo = obj; + } else { + this._bitField = this._bitField & (~2097152); + } +}; + +Promise.prototype._isBound = function () { + return (this._bitField & 2097152) === 2097152; +}; + +Promise.bind = function (thisArg, value) { + return Promise.resolve(value).bind(thisArg); +}; +}; + +},{}],4:[function(_dereq_,module,exports){ +"use strict"; +var old; +if (typeof Promise !== "undefined") old = Promise; +function noConflict() { + try { if (Promise === bluebird) Promise = old; } + catch (e) {} + return bluebird; +} +var bluebird = _dereq_("./promise")(); +bluebird.noConflict = noConflict; +module.exports = bluebird; + +},{"./promise":22}],5:[function(_dereq_,module,exports){ +"use strict"; +var cr = Object.create; +if (cr) { + var callerCache = cr(null); + var getterCache = cr(null); + callerCache[" size"] = getterCache[" size"] = 0; +} + +module.exports = function(Promise) { +var util = _dereq_("./util"); +var canEvaluate = util.canEvaluate; +var isIdentifier = util.isIdentifier; + +var getMethodCaller; +var getGetter; +if (!true) { +var makeMethodCaller = function (methodName) { + return new Function("ensureMethod", " \n\ + return function(obj) { \n\ + 'use strict' \n\ + var len = this.length; \n\ + ensureMethod(obj, 'methodName'); \n\ + switch(len) { \n\ + case 1: return obj.methodName(this[0]); \n\ + case 2: return obj.methodName(this[0], this[1]); \n\ + case 3: return obj.methodName(this[0], this[1], this[2]); \n\ + case 0: return obj.methodName(); \n\ + default: \n\ + return obj.methodName.apply(obj, this); \n\ + } \n\ + }; \n\ + ".replace(/methodName/g, methodName))(ensureMethod); +}; + +var makeGetter = function (propertyName) { + return new Function("obj", " \n\ + 'use strict'; \n\ + return obj.propertyName; \n\ + ".replace("propertyName", propertyName)); +}; + +var getCompiled = function(name, compiler, cache) { + var ret = cache[name]; + if (typeof ret !== "function") { + if (!isIdentifier(name)) { + return null; + } + ret = compiler(name); + cache[name] = ret; + cache[" size"]++; + if (cache[" size"] > 512) { + var keys = Object.keys(cache); + for (var i = 0; i < 256; ++i) delete cache[keys[i]]; + cache[" size"] = keys.length - 256; + } + } + return ret; +}; + +getMethodCaller = function(name) { + return getCompiled(name, makeMethodCaller, callerCache); +}; + +getGetter = function(name) { + return getCompiled(name, makeGetter, getterCache); +}; +} + +function ensureMethod(obj, methodName) { + var fn; + if (obj != null) fn = obj[methodName]; + if (typeof fn !== "function") { + var message = "Object " + util.classString(obj) + " has no method '" + + util.toString(methodName) + "'"; + throw new Promise.TypeError(message); + } + return fn; +} + +function caller(obj) { + var methodName = this.pop(); + var fn = ensureMethod(obj, methodName); + return fn.apply(obj, this); +} +Promise.prototype.call = function (methodName) { + var args = [].slice.call(arguments, 1);; + if (!true) { + if (canEvaluate) { + var maybeCaller = getMethodCaller(methodName); + if (maybeCaller !== null) { + return this._then( + maybeCaller, undefined, undefined, args, undefined); + } + } + } + args.push(methodName); + return this._then(caller, undefined, undefined, args, undefined); +}; + +function namedGetter(obj) { + return obj[this]; +} +function indexedGetter(obj) { + var index = +this; + if (index < 0) index = Math.max(0, index + obj.length); + return obj[index]; +} +Promise.prototype.get = function (propertyName) { + var isIndex = (typeof propertyName === "number"); + var getter; + if (!isIndex) { + if (canEvaluate) { + var maybeGetter = getGetter(propertyName); + getter = maybeGetter !== null ? maybeGetter : namedGetter; + } else { + getter = namedGetter; + } + } else { + getter = indexedGetter; + } + return this._then(getter, undefined, undefined, propertyName, undefined); +}; +}; + +},{"./util":36}],6:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, PromiseArray, apiRejection, debug) { +var util = _dereq_("./util"); +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; +var async = Promise._async; + +Promise.prototype["break"] = Promise.prototype.cancel = function() { + if (!debug.cancellation()) return this._warn("cancellation is disabled"); + + var promise = this; + var child = promise; + while (promise._isCancellable()) { + if (!promise._cancelBy(child)) { + if (child._isFollowing()) { + child._followee().cancel(); + } else { + child._cancelBranched(); + } + break; + } + + var parent = promise._cancellationParent; + if (parent == null || !parent._isCancellable()) { + if (promise._isFollowing()) { + promise._followee().cancel(); + } else { + promise._cancelBranched(); + } + break; + } else { + if (promise._isFollowing()) promise._followee().cancel(); + promise._setWillBeCancelled(); + child = promise; + promise = parent; + } + } +}; + +Promise.prototype._branchHasCancelled = function() { + this._branchesRemainingToCancel--; +}; + +Promise.prototype._enoughBranchesHaveCancelled = function() { + return this._branchesRemainingToCancel === undefined || + this._branchesRemainingToCancel <= 0; +}; + +Promise.prototype._cancelBy = function(canceller) { + if (canceller === this) { + this._branchesRemainingToCancel = 0; + this._invokeOnCancel(); + return true; + } else { + this._branchHasCancelled(); + if (this._enoughBranchesHaveCancelled()) { + this._invokeOnCancel(); + return true; + } + } + return false; +}; + +Promise.prototype._cancelBranched = function() { + if (this._enoughBranchesHaveCancelled()) { + this._cancel(); + } +}; + +Promise.prototype._cancel = function() { + if (!this._isCancellable()) return; + this._setCancelled(); + async.invoke(this._cancelPromises, this, undefined); +}; + +Promise.prototype._cancelPromises = function() { + if (this._length() > 0) this._settlePromises(); +}; + +Promise.prototype._unsetOnCancel = function() { + this._onCancelField = undefined; +}; + +Promise.prototype._isCancellable = function() { + return this.isPending() && !this._isCancelled(); +}; + +Promise.prototype.isCancellable = function() { + return this.isPending() && !this.isCancelled(); +}; + +Promise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) { + if (util.isArray(onCancelCallback)) { + for (var i = 0; i < onCancelCallback.length; ++i) { + this._doInvokeOnCancel(onCancelCallback[i], internalOnly); + } + } else if (onCancelCallback !== undefined) { + if (typeof onCancelCallback === "function") { + if (!internalOnly) { + var e = tryCatch(onCancelCallback).call(this._boundValue()); + if (e === errorObj) { + this._attachExtraTrace(e.e); + async.throwLater(e.e); + } + } + } else { + onCancelCallback._resultCancelled(this); + } + } +}; + +Promise.prototype._invokeOnCancel = function() { + var onCancelCallback = this._onCancel(); + this._unsetOnCancel(); + async.invoke(this._doInvokeOnCancel, this, onCancelCallback); +}; + +Promise.prototype._invokeInternalOnCancel = function() { + if (this._isCancellable()) { + this._doInvokeOnCancel(this._onCancel(), true); + this._unsetOnCancel(); + } +}; + +Promise.prototype._resultCancelled = function() { + this.cancel(); +}; + +}; + +},{"./util":36}],7:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(NEXT_FILTER) { +var util = _dereq_("./util"); +var getKeys = _dereq_("./es5").keys; +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; + +function catchFilter(instances, cb, promise) { + return function(e) { + var boundTo = promise._boundValue(); + predicateLoop: for (var i = 0; i < instances.length; ++i) { + var item = instances[i]; + + if (item === Error || + (item != null && item.prototype instanceof Error)) { + if (e instanceof item) { + return tryCatch(cb).call(boundTo, e); + } + } else if (typeof item === "function") { + var matchesPredicate = tryCatch(item).call(boundTo, e); + if (matchesPredicate === errorObj) { + return matchesPredicate; + } else if (matchesPredicate) { + return tryCatch(cb).call(boundTo, e); + } + } else if (util.isObject(e)) { + var keys = getKeys(item); + for (var j = 0; j < keys.length; ++j) { + var key = keys[j]; + if (item[key] != e[key]) { + continue predicateLoop; + } + } + return tryCatch(cb).call(boundTo, e); + } + } + return NEXT_FILTER; + }; +} + +return catchFilter; +}; + +},{"./es5":13,"./util":36}],8:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise) { +var longStackTraces = false; +var contextStack = []; + +Promise.prototype._promiseCreated = function() {}; +Promise.prototype._pushContext = function() {}; +Promise.prototype._popContext = function() {return null;}; +Promise._peekContext = Promise.prototype._peekContext = function() {}; + +function Context() { + this._trace = new Context.CapturedTrace(peekContext()); +} +Context.prototype._pushContext = function () { + if (this._trace !== undefined) { + this._trace._promiseCreated = null; + contextStack.push(this._trace); + } +}; + +Context.prototype._popContext = function () { + if (this._trace !== undefined) { + var trace = contextStack.pop(); + var ret = trace._promiseCreated; + trace._promiseCreated = null; + return ret; + } + return null; +}; + +function createContext() { + if (longStackTraces) return new Context(); +} + +function peekContext() { + var lastIndex = contextStack.length - 1; + if (lastIndex >= 0) { + return contextStack[lastIndex]; + } + return undefined; +} +Context.CapturedTrace = null; +Context.create = createContext; +Context.deactivateLongStackTraces = function() {}; +Context.activateLongStackTraces = function() { + var Promise_pushContext = Promise.prototype._pushContext; + var Promise_popContext = Promise.prototype._popContext; + var Promise_PeekContext = Promise._peekContext; + var Promise_peekContext = Promise.prototype._peekContext; + var Promise_promiseCreated = Promise.prototype._promiseCreated; + Context.deactivateLongStackTraces = function() { + Promise.prototype._pushContext = Promise_pushContext; + Promise.prototype._popContext = Promise_popContext; + Promise._peekContext = Promise_PeekContext; + Promise.prototype._peekContext = Promise_peekContext; + Promise.prototype._promiseCreated = Promise_promiseCreated; + longStackTraces = false; + }; + longStackTraces = true; + Promise.prototype._pushContext = Context.prototype._pushContext; + Promise.prototype._popContext = Context.prototype._popContext; + Promise._peekContext = Promise.prototype._peekContext = peekContext; + Promise.prototype._promiseCreated = function() { + var ctx = this._peekContext(); + if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this; + }; +}; +return Context; +}; + +},{}],9:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, Context) { +var getDomain = Promise._getDomain; +var async = Promise._async; +var Warning = _dereq_("./errors").Warning; +var util = _dereq_("./util"); +var canAttachTrace = util.canAttachTrace; +var unhandledRejectionHandled; +var possiblyUnhandledRejection; +var bluebirdFramePattern = + /[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/; +var nodeFramePattern = /\((?:timers\.js):\d+:\d+\)/; +var parseLinePattern = /[\/<\(](.+?):(\d+):(\d+)\)?\s*$/; +var stackFramePattern = null; +var formatStack = null; +var indentStackFrames = false; +var printWarning; +var debugging = !!(util.env("BLUEBIRD_DEBUG") != 0 && + (true || + util.env("BLUEBIRD_DEBUG") || + util.env("NODE_ENV") === "development")); + +var warnings = !!(util.env("BLUEBIRD_WARNINGS") != 0 && + (debugging || util.env("BLUEBIRD_WARNINGS"))); + +var longStackTraces = !!(util.env("BLUEBIRD_LONG_STACK_TRACES") != 0 && + (debugging || util.env("BLUEBIRD_LONG_STACK_TRACES"))); + +var wForgottenReturn = util.env("BLUEBIRD_W_FORGOTTEN_RETURN") != 0 && + (warnings || !!util.env("BLUEBIRD_W_FORGOTTEN_RETURN")); + +Promise.prototype.suppressUnhandledRejections = function() { + var target = this._target(); + target._bitField = ((target._bitField & (~1048576)) | + 524288); +}; + +Promise.prototype._ensurePossibleRejectionHandled = function () { + if ((this._bitField & 524288) !== 0) return; + this._setRejectionIsUnhandled(); + async.invokeLater(this._notifyUnhandledRejection, this, undefined); +}; + +Promise.prototype._notifyUnhandledRejectionIsHandled = function () { + fireRejectionEvent("rejectionHandled", + unhandledRejectionHandled, undefined, this); +}; + +Promise.prototype._setReturnedNonUndefined = function() { + this._bitField = this._bitField | 268435456; +}; + +Promise.prototype._returnedNonUndefined = function() { + return (this._bitField & 268435456) !== 0; +}; + +Promise.prototype._notifyUnhandledRejection = function () { + if (this._isRejectionUnhandled()) { + var reason = this._settledValue(); + this._setUnhandledRejectionIsNotified(); + fireRejectionEvent("unhandledRejection", + possiblyUnhandledRejection, reason, this); + } +}; + +Promise.prototype._setUnhandledRejectionIsNotified = function () { + this._bitField = this._bitField | 262144; +}; + +Promise.prototype._unsetUnhandledRejectionIsNotified = function () { + this._bitField = this._bitField & (~262144); +}; + +Promise.prototype._isUnhandledRejectionNotified = function () { + return (this._bitField & 262144) > 0; +}; + +Promise.prototype._setRejectionIsUnhandled = function () { + this._bitField = this._bitField | 1048576; +}; + +Promise.prototype._unsetRejectionIsUnhandled = function () { + this._bitField = this._bitField & (~1048576); + if (this._isUnhandledRejectionNotified()) { + this._unsetUnhandledRejectionIsNotified(); + this._notifyUnhandledRejectionIsHandled(); + } +}; + +Promise.prototype._isRejectionUnhandled = function () { + return (this._bitField & 1048576) > 0; +}; + +Promise.prototype._warn = function(message, shouldUseOwnTrace, promise) { + return warn(message, shouldUseOwnTrace, promise || this); +}; + +Promise.onPossiblyUnhandledRejection = function (fn) { + var domain = getDomain(); + possiblyUnhandledRejection = + typeof fn === "function" ? (domain === null ? + fn : util.domainBind(domain, fn)) + : undefined; +}; + +Promise.onUnhandledRejectionHandled = function (fn) { + var domain = getDomain(); + unhandledRejectionHandled = + typeof fn === "function" ? (domain === null ? + fn : util.domainBind(domain, fn)) + : undefined; +}; + +var disableLongStackTraces = function() {}; +Promise.longStackTraces = function () { + if (async.haveItemsQueued() && !config.longStackTraces) { + throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + if (!config.longStackTraces && longStackTracesIsSupported()) { + var Promise_captureStackTrace = Promise.prototype._captureStackTrace; + var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace; + config.longStackTraces = true; + disableLongStackTraces = function() { + if (async.haveItemsQueued() && !config.longStackTraces) { + throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + Promise.prototype._captureStackTrace = Promise_captureStackTrace; + Promise.prototype._attachExtraTrace = Promise_attachExtraTrace; + Context.deactivateLongStackTraces(); + async.enableTrampoline(); + config.longStackTraces = false; + }; + Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace; + Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace; + Context.activateLongStackTraces(); + async.disableTrampolineIfNecessary(); + } +}; + +Promise.hasLongStackTraces = function () { + return config.longStackTraces && longStackTracesIsSupported(); +}; + +var fireDomEvent = (function() { + try { + if (typeof CustomEvent === "function") { + var event = new CustomEvent("CustomEvent"); + util.global.dispatchEvent(event); + return function(name, event) { + var domEvent = new CustomEvent(name.toLowerCase(), { + detail: event, + cancelable: true + }); + return !util.global.dispatchEvent(domEvent); + }; + } else if (typeof Event === "function") { + var event = new Event("CustomEvent"); + util.global.dispatchEvent(event); + return function(name, event) { + var domEvent = new Event(name.toLowerCase(), { + cancelable: true + }); + domEvent.detail = event; + return !util.global.dispatchEvent(domEvent); + }; + } else { + var event = document.createEvent("CustomEvent"); + event.initCustomEvent("testingtheevent", false, true, {}); + util.global.dispatchEvent(event); + return function(name, event) { + var domEvent = document.createEvent("CustomEvent"); + domEvent.initCustomEvent(name.toLowerCase(), false, true, + event); + return !util.global.dispatchEvent(domEvent); + }; + } + } catch (e) {} + return function() { + return false; + }; +})(); + +var fireGlobalEvent = (function() { + if (util.isNode) { + return function() { + return process.emit.apply(process, arguments); + }; + } else { + if (!util.global) { + return function() { + return false; + }; + } + return function(name) { + var methodName = "on" + name.toLowerCase(); + var method = util.global[methodName]; + if (!method) return false; + method.apply(util.global, [].slice.call(arguments, 1)); + return true; + }; + } +})(); + +function generatePromiseLifecycleEventObject(name, promise) { + return {promise: promise}; +} + +var eventToObjectGenerator = { + promiseCreated: generatePromiseLifecycleEventObject, + promiseFulfilled: generatePromiseLifecycleEventObject, + promiseRejected: generatePromiseLifecycleEventObject, + promiseResolved: generatePromiseLifecycleEventObject, + promiseCancelled: generatePromiseLifecycleEventObject, + promiseChained: function(name, promise, child) { + return {promise: promise, child: child}; + }, + warning: function(name, warning) { + return {warning: warning}; + }, + unhandledRejection: function (name, reason, promise) { + return {reason: reason, promise: promise}; + }, + rejectionHandled: generatePromiseLifecycleEventObject +}; + +var activeFireEvent = function (name) { + var globalEventFired = false; + try { + globalEventFired = fireGlobalEvent.apply(null, arguments); + } catch (e) { + async.throwLater(e); + globalEventFired = true; + } + + var domEventFired = false; + try { + domEventFired = fireDomEvent(name, + eventToObjectGenerator[name].apply(null, arguments)); + } catch (e) { + async.throwLater(e); + domEventFired = true; + } + + return domEventFired || globalEventFired; +}; + +Promise.config = function(opts) { + opts = Object(opts); + if ("longStackTraces" in opts) { + if (opts.longStackTraces) { + Promise.longStackTraces(); + } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) { + disableLongStackTraces(); + } + } + if ("warnings" in opts) { + var warningsOption = opts.warnings; + config.warnings = !!warningsOption; + wForgottenReturn = config.warnings; + + if (util.isObject(warningsOption)) { + if ("wForgottenReturn" in warningsOption) { + wForgottenReturn = !!warningsOption.wForgottenReturn; + } + } + } + if ("cancellation" in opts && opts.cancellation && !config.cancellation) { + if (async.haveItemsQueued()) { + throw new Error( + "cannot enable cancellation after promises are in use"); + } + Promise.prototype._clearCancellationData = + cancellationClearCancellationData; + Promise.prototype._propagateFrom = cancellationPropagateFrom; + Promise.prototype._onCancel = cancellationOnCancel; + Promise.prototype._setOnCancel = cancellationSetOnCancel; + Promise.prototype._attachCancellationCallback = + cancellationAttachCancellationCallback; + Promise.prototype._execute = cancellationExecute; + propagateFromFunction = cancellationPropagateFrom; + config.cancellation = true; + } + if ("monitoring" in opts) { + if (opts.monitoring && !config.monitoring) { + config.monitoring = true; + Promise.prototype._fireEvent = activeFireEvent; + } else if (!opts.monitoring && config.monitoring) { + config.monitoring = false; + Promise.prototype._fireEvent = defaultFireEvent; + } + } + return Promise; +}; + +function defaultFireEvent() { return false; } + +Promise.prototype._fireEvent = defaultFireEvent; +Promise.prototype._execute = function(executor, resolve, reject) { + try { + executor(resolve, reject); + } catch (e) { + return e; + } +}; +Promise.prototype._onCancel = function () {}; +Promise.prototype._setOnCancel = function (handler) { ; }; +Promise.prototype._attachCancellationCallback = function(onCancel) { + ; +}; +Promise.prototype._captureStackTrace = function () {}; +Promise.prototype._attachExtraTrace = function () {}; +Promise.prototype._clearCancellationData = function() {}; +Promise.prototype._propagateFrom = function (parent, flags) { + ; + ; +}; + +function cancellationExecute(executor, resolve, reject) { + var promise = this; + try { + executor(resolve, reject, function(onCancel) { + if (typeof onCancel !== "function") { + throw new TypeError("onCancel must be a function, got: " + + util.toString(onCancel)); + } + promise._attachCancellationCallback(onCancel); + }); + } catch (e) { + return e; + } +} + +function cancellationAttachCancellationCallback(onCancel) { + if (!this._isCancellable()) return this; + + var previousOnCancel = this._onCancel(); + if (previousOnCancel !== undefined) { + if (util.isArray(previousOnCancel)) { + previousOnCancel.push(onCancel); + } else { + this._setOnCancel([previousOnCancel, onCancel]); + } + } else { + this._setOnCancel(onCancel); + } +} + +function cancellationOnCancel() { + return this._onCancelField; +} + +function cancellationSetOnCancel(onCancel) { + this._onCancelField = onCancel; +} + +function cancellationClearCancellationData() { + this._cancellationParent = undefined; + this._onCancelField = undefined; +} + +function cancellationPropagateFrom(parent, flags) { + if ((flags & 1) !== 0) { + this._cancellationParent = parent; + var branchesRemainingToCancel = parent._branchesRemainingToCancel; + if (branchesRemainingToCancel === undefined) { + branchesRemainingToCancel = 0; + } + parent._branchesRemainingToCancel = branchesRemainingToCancel + 1; + } + if ((flags & 2) !== 0 && parent._isBound()) { + this._setBoundTo(parent._boundTo); + } +} + +function bindingPropagateFrom(parent, flags) { + if ((flags & 2) !== 0 && parent._isBound()) { + this._setBoundTo(parent._boundTo); + } +} +var propagateFromFunction = bindingPropagateFrom; + +function boundValueFunction() { + var ret = this._boundTo; + if (ret !== undefined) { + if (ret instanceof Promise) { + if (ret.isFulfilled()) { + return ret.value(); + } else { + return undefined; + } + } + } + return ret; +} + +function longStackTracesCaptureStackTrace() { + this._trace = new CapturedTrace(this._peekContext()); +} + +function longStackTracesAttachExtraTrace(error, ignoreSelf) { + if (canAttachTrace(error)) { + var trace = this._trace; + if (trace !== undefined) { + if (ignoreSelf) trace = trace._parent; + } + if (trace !== undefined) { + trace.attachExtraTrace(error); + } else if (!error.__stackCleaned__) { + var parsed = parseStackAndMessage(error); + util.notEnumerableProp(error, "stack", + parsed.message + "\n" + parsed.stack.join("\n")); + util.notEnumerableProp(error, "__stackCleaned__", true); + } + } +} + +function checkForgottenReturns(returnValue, promiseCreated, name, promise, + parent) { + if (returnValue === undefined && promiseCreated !== null && + wForgottenReturn) { + if (parent !== undefined && parent._returnedNonUndefined()) return; + if ((promise._bitField & 65535) === 0) return; + + if (name) name = name + " "; + var handlerLine = ""; + var creatorLine = ""; + if (promiseCreated._trace) { + var traceLines = promiseCreated._trace.stack.split("\n"); + var stack = cleanStack(traceLines); + for (var i = stack.length - 1; i >= 0; --i) { + var line = stack[i]; + if (!nodeFramePattern.test(line)) { + var lineMatches = line.match(parseLinePattern); + if (lineMatches) { + handlerLine = "at " + lineMatches[1] + + ":" + lineMatches[2] + ":" + lineMatches[3] + " "; + } + break; + } + } + + if (stack.length > 0) { + var firstUserLine = stack[0]; + for (var i = 0; i < traceLines.length; ++i) { + + if (traceLines[i] === firstUserLine) { + if (i > 0) { + creatorLine = "\n" + traceLines[i - 1]; + } + break; + } + } + + } + } + var msg = "a promise was created in a " + name + + "handler " + handlerLine + "but was not returned from it, " + + "see http://goo.gl/rRqMUw" + + creatorLine; + promise._warn(msg, true, promiseCreated); + } +} + +function deprecated(name, replacement) { + var message = name + + " is deprecated and will be removed in a future version."; + if (replacement) message += " Use " + replacement + " instead."; + return warn(message); +} + +function warn(message, shouldUseOwnTrace, promise) { + if (!config.warnings) return; + var warning = new Warning(message); + var ctx; + if (shouldUseOwnTrace) { + promise._attachExtraTrace(warning); + } else if (config.longStackTraces && (ctx = Promise._peekContext())) { + ctx.attachExtraTrace(warning); + } else { + var parsed = parseStackAndMessage(warning); + warning.stack = parsed.message + "\n" + parsed.stack.join("\n"); + } + + if (!activeFireEvent("warning", warning)) { + formatAndLogError(warning, "", true); + } +} + +function reconstructStack(message, stacks) { + for (var i = 0; i < stacks.length - 1; ++i) { + stacks[i].push("From previous event:"); + stacks[i] = stacks[i].join("\n"); + } + if (i < stacks.length) { + stacks[i] = stacks[i].join("\n"); + } + return message + "\n" + stacks.join("\n"); +} + +function removeDuplicateOrEmptyJumps(stacks) { + for (var i = 0; i < stacks.length; ++i) { + if (stacks[i].length === 0 || + ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) { + stacks.splice(i, 1); + i--; + } + } +} + +function removeCommonRoots(stacks) { + var current = stacks[0]; + for (var i = 1; i < stacks.length; ++i) { + var prev = stacks[i]; + var currentLastIndex = current.length - 1; + var currentLastLine = current[currentLastIndex]; + var commonRootMeetPoint = -1; + + for (var j = prev.length - 1; j >= 0; --j) { + if (prev[j] === currentLastLine) { + commonRootMeetPoint = j; + break; + } + } + + for (var j = commonRootMeetPoint; j >= 0; --j) { + var line = prev[j]; + if (current[currentLastIndex] === line) { + current.pop(); + currentLastIndex--; + } else { + break; + } + } + current = prev; + } +} + +function cleanStack(stack) { + var ret = []; + for (var i = 0; i < stack.length; ++i) { + var line = stack[i]; + var isTraceLine = " (No stack trace)" === line || + stackFramePattern.test(line); + var isInternalFrame = isTraceLine && shouldIgnore(line); + if (isTraceLine && !isInternalFrame) { + if (indentStackFrames && line.charAt(0) !== " ") { + line = " " + line; + } + ret.push(line); + } + } + return ret; +} + +function stackFramesAsArray(error) { + var stack = error.stack.replace(/\s+$/g, "").split("\n"); + for (var i = 0; i < stack.length; ++i) { + var line = stack[i]; + if (" (No stack trace)" === line || stackFramePattern.test(line)) { + break; + } + } + if (i > 0 && error.name != "SyntaxError") { + stack = stack.slice(i); + } + return stack; +} + +function parseStackAndMessage(error) { + var stack = error.stack; + var message = error.toString(); + stack = typeof stack === "string" && stack.length > 0 + ? stackFramesAsArray(error) : [" (No stack trace)"]; + return { + message: message, + stack: error.name == "SyntaxError" ? stack : cleanStack(stack) + }; +} + +function formatAndLogError(error, title, isSoft) { + if (typeof console !== "undefined") { + var message; + if (util.isObject(error)) { + var stack = error.stack; + message = title + formatStack(stack, error); + } else { + message = title + String(error); + } + if (typeof printWarning === "function") { + printWarning(message, isSoft); + } else if (typeof console.log === "function" || + typeof console.log === "object") { + console.log(message); + } + } +} + +function fireRejectionEvent(name, localHandler, reason, promise) { + var localEventFired = false; + try { + if (typeof localHandler === "function") { + localEventFired = true; + if (name === "rejectionHandled") { + localHandler(promise); + } else { + localHandler(reason, promise); + } + } + } catch (e) { + async.throwLater(e); + } + + if (name === "unhandledRejection") { + if (!activeFireEvent(name, reason, promise) && !localEventFired) { + formatAndLogError(reason, "Unhandled rejection "); + } + } else { + activeFireEvent(name, promise); + } +} + +function formatNonError(obj) { + var str; + if (typeof obj === "function") { + str = "[function " + + (obj.name || "anonymous") + + "]"; + } else { + str = obj && typeof obj.toString === "function" + ? obj.toString() : util.toString(obj); + var ruselessToString = /\[object [a-zA-Z0-9$_]+\]/; + if (ruselessToString.test(str)) { + try { + var newStr = JSON.stringify(obj); + str = newStr; + } + catch(e) { + + } + } + if (str.length === 0) { + str = "(empty array)"; + } + } + return ("(<" + snip(str) + ">, no stack trace)"); +} + +function snip(str) { + var maxChars = 41; + if (str.length < maxChars) { + return str; + } + return str.substr(0, maxChars - 3) + "..."; +} + +function longStackTracesIsSupported() { + return typeof captureStackTrace === "function"; +} + +var shouldIgnore = function() { return false; }; +var parseLineInfoRegex = /[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/; +function parseLineInfo(line) { + var matches = line.match(parseLineInfoRegex); + if (matches) { + return { + fileName: matches[1], + line: parseInt(matches[2], 10) + }; + } +} + +function setBounds(firstLineError, lastLineError) { + if (!longStackTracesIsSupported()) return; + var firstStackLines = firstLineError.stack.split("\n"); + var lastStackLines = lastLineError.stack.split("\n"); + var firstIndex = -1; + var lastIndex = -1; + var firstFileName; + var lastFileName; + for (var i = 0; i < firstStackLines.length; ++i) { + var result = parseLineInfo(firstStackLines[i]); + if (result) { + firstFileName = result.fileName; + firstIndex = result.line; + break; + } + } + for (var i = 0; i < lastStackLines.length; ++i) { + var result = parseLineInfo(lastStackLines[i]); + if (result) { + lastFileName = result.fileName; + lastIndex = result.line; + break; + } + } + if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName || + firstFileName !== lastFileName || firstIndex >= lastIndex) { + return; + } + + shouldIgnore = function(line) { + if (bluebirdFramePattern.test(line)) return true; + var info = parseLineInfo(line); + if (info) { + if (info.fileName === firstFileName && + (firstIndex <= info.line && info.line <= lastIndex)) { + return true; + } + } + return false; + }; +} + +function CapturedTrace(parent) { + this._parent = parent; + this._promisesCreated = 0; + var length = this._length = 1 + (parent === undefined ? 0 : parent._length); + captureStackTrace(this, CapturedTrace); + if (length > 32) this.uncycle(); +} +util.inherits(CapturedTrace, Error); +Context.CapturedTrace = CapturedTrace; + +CapturedTrace.prototype.uncycle = function() { + var length = this._length; + if (length < 2) return; + var nodes = []; + var stackToIndex = {}; + + for (var i = 0, node = this; node !== undefined; ++i) { + nodes.push(node); + node = node._parent; + } + length = this._length = i; + for (var i = length - 1; i >= 0; --i) { + var stack = nodes[i].stack; + if (stackToIndex[stack] === undefined) { + stackToIndex[stack] = i; + } + } + for (var i = 0; i < length; ++i) { + var currentStack = nodes[i].stack; + var index = stackToIndex[currentStack]; + if (index !== undefined && index !== i) { + if (index > 0) { + nodes[index - 1]._parent = undefined; + nodes[index - 1]._length = 1; + } + nodes[i]._parent = undefined; + nodes[i]._length = 1; + var cycleEdgeNode = i > 0 ? nodes[i - 1] : this; + + if (index < length - 1) { + cycleEdgeNode._parent = nodes[index + 1]; + cycleEdgeNode._parent.uncycle(); + cycleEdgeNode._length = + cycleEdgeNode._parent._length + 1; + } else { + cycleEdgeNode._parent = undefined; + cycleEdgeNode._length = 1; + } + var currentChildLength = cycleEdgeNode._length + 1; + for (var j = i - 2; j >= 0; --j) { + nodes[j]._length = currentChildLength; + currentChildLength++; + } + return; + } + } +}; + +CapturedTrace.prototype.attachExtraTrace = function(error) { + if (error.__stackCleaned__) return; + this.uncycle(); + var parsed = parseStackAndMessage(error); + var message = parsed.message; + var stacks = [parsed.stack]; + + var trace = this; + while (trace !== undefined) { + stacks.push(cleanStack(trace.stack.split("\n"))); + trace = trace._parent; + } + removeCommonRoots(stacks); + removeDuplicateOrEmptyJumps(stacks); + util.notEnumerableProp(error, "stack", reconstructStack(message, stacks)); + util.notEnumerableProp(error, "__stackCleaned__", true); +}; + +var captureStackTrace = (function stackDetection() { + var v8stackFramePattern = /^\s*at\s*/; + var v8stackFormatter = function(stack, error) { + if (typeof stack === "string") return stack; + + if (error.name !== undefined && + error.message !== undefined) { + return error.toString(); + } + return formatNonError(error); + }; + + if (typeof Error.stackTraceLimit === "number" && + typeof Error.captureStackTrace === "function") { + Error.stackTraceLimit += 6; + stackFramePattern = v8stackFramePattern; + formatStack = v8stackFormatter; + var captureStackTrace = Error.captureStackTrace; + + shouldIgnore = function(line) { + return bluebirdFramePattern.test(line); + }; + return function(receiver, ignoreUntil) { + Error.stackTraceLimit += 6; + captureStackTrace(receiver, ignoreUntil); + Error.stackTraceLimit -= 6; + }; + } + var err = new Error(); + + if (typeof err.stack === "string" && + err.stack.split("\n")[0].indexOf("stackDetection@") >= 0) { + stackFramePattern = /@/; + formatStack = v8stackFormatter; + indentStackFrames = true; + return function captureStackTrace(o) { + o.stack = new Error().stack; + }; + } + + var hasStackAfterThrow; + try { throw new Error(); } + catch(e) { + hasStackAfterThrow = ("stack" in e); + } + if (!("stack" in err) && hasStackAfterThrow && + typeof Error.stackTraceLimit === "number") { + stackFramePattern = v8stackFramePattern; + formatStack = v8stackFormatter; + return function captureStackTrace(o) { + Error.stackTraceLimit += 6; + try { throw new Error(); } + catch(e) { o.stack = e.stack; } + Error.stackTraceLimit -= 6; + }; + } + + formatStack = function(stack, error) { + if (typeof stack === "string") return stack; + + if ((typeof error === "object" || + typeof error === "function") && + error.name !== undefined && + error.message !== undefined) { + return error.toString(); + } + return formatNonError(error); + }; + + return null; + +})([]); + +if (typeof console !== "undefined" && typeof console.warn !== "undefined") { + printWarning = function (message) { + console.warn(message); + }; + if (util.isNode && process.stderr.isTTY) { + printWarning = function(message, isSoft) { + var color = isSoft ? "\u001b[33m" : "\u001b[31m"; + console.warn(color + message + "\u001b[0m\n"); + }; + } else if (!util.isNode && typeof (new Error().stack) === "string") { + printWarning = function(message, isSoft) { + console.warn("%c" + message, + isSoft ? "color: darkorange" : "color: red"); + }; + } +} + +var config = { + warnings: warnings, + longStackTraces: false, + cancellation: false, + monitoring: false +}; + +if (longStackTraces) Promise.longStackTraces(); + +return { + longStackTraces: function() { + return config.longStackTraces; + }, + warnings: function() { + return config.warnings; + }, + cancellation: function() { + return config.cancellation; + }, + monitoring: function() { + return config.monitoring; + }, + propagateFromFunction: function() { + return propagateFromFunction; + }, + boundValueFunction: function() { + return boundValueFunction; + }, + checkForgottenReturns: checkForgottenReturns, + setBounds: setBounds, + warn: warn, + deprecated: deprecated, + CapturedTrace: CapturedTrace, + fireDomEvent: fireDomEvent, + fireGlobalEvent: fireGlobalEvent +}; +}; + +},{"./errors":12,"./util":36}],10:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise) { +function returner() { + return this.value; +} +function thrower() { + throw this.reason; +} + +Promise.prototype["return"] = +Promise.prototype.thenReturn = function (value) { + if (value instanceof Promise) value.suppressUnhandledRejections(); + return this._then( + returner, undefined, undefined, {value: value}, undefined); +}; + +Promise.prototype["throw"] = +Promise.prototype.thenThrow = function (reason) { + return this._then( + thrower, undefined, undefined, {reason: reason}, undefined); +}; + +Promise.prototype.catchThrow = function (reason) { + if (arguments.length <= 1) { + return this._then( + undefined, thrower, undefined, {reason: reason}, undefined); + } else { + var _reason = arguments[1]; + var handler = function() {throw _reason;}; + return this.caught(reason, handler); + } +}; + +Promise.prototype.catchReturn = function (value) { + if (arguments.length <= 1) { + if (value instanceof Promise) value.suppressUnhandledRejections(); + return this._then( + undefined, returner, undefined, {value: value}, undefined); + } else { + var _value = arguments[1]; + if (_value instanceof Promise) _value.suppressUnhandledRejections(); + var handler = function() {return _value;}; + return this.caught(value, handler); + } +}; +}; + +},{}],11:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var PromiseReduce = Promise.reduce; +var PromiseAll = Promise.all; + +function promiseAllThis() { + return PromiseAll(this); +} + +function PromiseMapSeries(promises, fn) { + return PromiseReduce(promises, fn, INTERNAL, INTERNAL); +} + +Promise.prototype.each = function (fn) { + return PromiseReduce(this, fn, INTERNAL, 0) + ._then(promiseAllThis, undefined, undefined, this, undefined); +}; + +Promise.prototype.mapSeries = function (fn) { + return PromiseReduce(this, fn, INTERNAL, INTERNAL); +}; + +Promise.each = function (promises, fn) { + return PromiseReduce(promises, fn, INTERNAL, 0) + ._then(promiseAllThis, undefined, undefined, promises, undefined); +}; + +Promise.mapSeries = PromiseMapSeries; +}; + + +},{}],12:[function(_dereq_,module,exports){ +"use strict"; +var es5 = _dereq_("./es5"); +var Objectfreeze = es5.freeze; +var util = _dereq_("./util"); +var inherits = util.inherits; +var notEnumerableProp = util.notEnumerableProp; + +function subError(nameProperty, defaultMessage) { + function SubError(message) { + if (!(this instanceof SubError)) return new SubError(message); + notEnumerableProp(this, "message", + typeof message === "string" ? message : defaultMessage); + notEnumerableProp(this, "name", nameProperty); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } else { + Error.call(this); + } + } + inherits(SubError, Error); + return SubError; +} + +var _TypeError, _RangeError; +var Warning = subError("Warning", "warning"); +var CancellationError = subError("CancellationError", "cancellation error"); +var TimeoutError = subError("TimeoutError", "timeout error"); +var AggregateError = subError("AggregateError", "aggregate error"); +try { + _TypeError = TypeError; + _RangeError = RangeError; +} catch(e) { + _TypeError = subError("TypeError", "type error"); + _RangeError = subError("RangeError", "range error"); +} + +var methods = ("join pop push shift unshift slice filter forEach some " + + "every map indexOf lastIndexOf reduce reduceRight sort reverse").split(" "); + +for (var i = 0; i < methods.length; ++i) { + if (typeof Array.prototype[methods[i]] === "function") { + AggregateError.prototype[methods[i]] = Array.prototype[methods[i]]; + } +} + +es5.defineProperty(AggregateError.prototype, "length", { + value: 0, + configurable: false, + writable: true, + enumerable: true +}); +AggregateError.prototype["isOperational"] = true; +var level = 0; +AggregateError.prototype.toString = function() { + var indent = Array(level * 4 + 1).join(" "); + var ret = "\n" + indent + "AggregateError of:" + "\n"; + level++; + indent = Array(level * 4 + 1).join(" "); + for (var i = 0; i < this.length; ++i) { + var str = this[i] === this ? "[Circular AggregateError]" : this[i] + ""; + var lines = str.split("\n"); + for (var j = 0; j < lines.length; ++j) { + lines[j] = indent + lines[j]; + } + str = lines.join("\n"); + ret += str + "\n"; + } + level--; + return ret; +}; + +function OperationalError(message) { + if (!(this instanceof OperationalError)) + return new OperationalError(message); + notEnumerableProp(this, "name", "OperationalError"); + notEnumerableProp(this, "message", message); + this.cause = message; + this["isOperational"] = true; + + if (message instanceof Error) { + notEnumerableProp(this, "message", message.message); + notEnumerableProp(this, "stack", message.stack); + } else if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + +} +inherits(OperationalError, Error); + +var errorTypes = Error["__BluebirdErrorTypes__"]; +if (!errorTypes) { + errorTypes = Objectfreeze({ + CancellationError: CancellationError, + TimeoutError: TimeoutError, + OperationalError: OperationalError, + RejectionError: OperationalError, + AggregateError: AggregateError + }); + es5.defineProperty(Error, "__BluebirdErrorTypes__", { + value: errorTypes, + writable: false, + enumerable: false, + configurable: false + }); +} + +module.exports = { + Error: Error, + TypeError: _TypeError, + RangeError: _RangeError, + CancellationError: errorTypes.CancellationError, + OperationalError: errorTypes.OperationalError, + TimeoutError: errorTypes.TimeoutError, + AggregateError: errorTypes.AggregateError, + Warning: Warning +}; + +},{"./es5":13,"./util":36}],13:[function(_dereq_,module,exports){ +var isES5 = (function(){ + "use strict"; + return this === undefined; +})(); + +if (isES5) { + module.exports = { + freeze: Object.freeze, + defineProperty: Object.defineProperty, + getDescriptor: Object.getOwnPropertyDescriptor, + keys: Object.keys, + names: Object.getOwnPropertyNames, + getPrototypeOf: Object.getPrototypeOf, + isArray: Array.isArray, + isES5: isES5, + propertyIsWritable: function(obj, prop) { + var descriptor = Object.getOwnPropertyDescriptor(obj, prop); + return !!(!descriptor || descriptor.writable || descriptor.set); + } + }; +} else { + var has = {}.hasOwnProperty; + var str = {}.toString; + var proto = {}.constructor.prototype; + + var ObjectKeys = function (o) { + var ret = []; + for (var key in o) { + if (has.call(o, key)) { + ret.push(key); + } + } + return ret; + }; + + var ObjectGetDescriptor = function(o, key) { + return {value: o[key]}; + }; + + var ObjectDefineProperty = function (o, key, desc) { + o[key] = desc.value; + return o; + }; + + var ObjectFreeze = function (obj) { + return obj; + }; + + var ObjectGetPrototypeOf = function (obj) { + try { + return Object(obj).constructor.prototype; + } + catch (e) { + return proto; + } + }; + + var ArrayIsArray = function (obj) { + try { + return str.call(obj) === "[object Array]"; + } + catch(e) { + return false; + } + }; + + module.exports = { + isArray: ArrayIsArray, + keys: ObjectKeys, + names: ObjectKeys, + defineProperty: ObjectDefineProperty, + getDescriptor: ObjectGetDescriptor, + freeze: ObjectFreeze, + getPrototypeOf: ObjectGetPrototypeOf, + isES5: isES5, + propertyIsWritable: function() { + return true; + } + }; +} + +},{}],14:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var PromiseMap = Promise.map; + +Promise.prototype.filter = function (fn, options) { + return PromiseMap(this, fn, options, INTERNAL); +}; + +Promise.filter = function (promises, fn, options) { + return PromiseMap(promises, fn, options, INTERNAL); +}; +}; + +},{}],15:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, tryConvertToPromise, NEXT_FILTER) { +var util = _dereq_("./util"); +var CancellationError = Promise.CancellationError; +var errorObj = util.errorObj; +var catchFilter = _dereq_("./catch_filter")(NEXT_FILTER); + +function PassThroughHandlerContext(promise, type, handler) { + this.promise = promise; + this.type = type; + this.handler = handler; + this.called = false; + this.cancelPromise = null; +} + +PassThroughHandlerContext.prototype.isFinallyHandler = function() { + return this.type === 0; +}; + +function FinallyHandlerCancelReaction(finallyHandler) { + this.finallyHandler = finallyHandler; +} + +FinallyHandlerCancelReaction.prototype._resultCancelled = function() { + checkCancel(this.finallyHandler); +}; + +function checkCancel(ctx, reason) { + if (ctx.cancelPromise != null) { + if (arguments.length > 1) { + ctx.cancelPromise._reject(reason); + } else { + ctx.cancelPromise._cancel(); + } + ctx.cancelPromise = null; + return true; + } + return false; +} + +function succeed() { + return finallyHandler.call(this, this.promise._target()._settledValue()); +} +function fail(reason) { + if (checkCancel(this, reason)) return; + errorObj.e = reason; + return errorObj; +} +function finallyHandler(reasonOrValue) { + var promise = this.promise; + var handler = this.handler; + + if (!this.called) { + this.called = true; + var ret = this.isFinallyHandler() + ? handler.call(promise._boundValue()) + : handler.call(promise._boundValue(), reasonOrValue); + if (ret === NEXT_FILTER) { + return ret; + } else if (ret !== undefined) { + promise._setReturnedNonUndefined(); + var maybePromise = tryConvertToPromise(ret, promise); + if (maybePromise instanceof Promise) { + if (this.cancelPromise != null) { + if (maybePromise._isCancelled()) { + var reason = + new CancellationError("late cancellation observer"); + promise._attachExtraTrace(reason); + errorObj.e = reason; + return errorObj; + } else if (maybePromise.isPending()) { + maybePromise._attachCancellationCallback( + new FinallyHandlerCancelReaction(this)); + } + } + return maybePromise._then( + succeed, fail, undefined, this, undefined); + } + } + } + + if (promise.isRejected()) { + checkCancel(this); + errorObj.e = reasonOrValue; + return errorObj; + } else { + checkCancel(this); + return reasonOrValue; + } +} + +Promise.prototype._passThrough = function(handler, type, success, fail) { + if (typeof handler !== "function") return this.then(); + return this._then(success, + fail, + undefined, + new PassThroughHandlerContext(this, type, handler), + undefined); +}; + +Promise.prototype.lastly = +Promise.prototype["finally"] = function (handler) { + return this._passThrough(handler, + 0, + finallyHandler, + finallyHandler); +}; + + +Promise.prototype.tap = function (handler) { + return this._passThrough(handler, 1, finallyHandler); +}; + +Promise.prototype.tapCatch = function (handlerOrPredicate) { + var len = arguments.length; + if(len === 1) { + return this._passThrough(handlerOrPredicate, + 1, + undefined, + finallyHandler); + } else { + var catchInstances = new Array(len - 1), + j = 0, i; + for (i = 0; i < len - 1; ++i) { + var item = arguments[i]; + if (util.isObject(item)) { + catchInstances[j++] = item; + } else { + return Promise.reject(new TypeError( + "tapCatch statement predicate: " + + "expecting an object but got " + util.classString(item) + )); + } + } + catchInstances.length = j; + var handler = arguments[i]; + return this._passThrough(catchFilter(catchInstances, handler, this), + 1, + undefined, + finallyHandler); + } + +}; + +return PassThroughHandlerContext; +}; + +},{"./catch_filter":7,"./util":36}],16:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, + apiRejection, + INTERNAL, + tryConvertToPromise, + Proxyable, + debug) { +var errors = _dereq_("./errors"); +var TypeError = errors.TypeError; +var util = _dereq_("./util"); +var errorObj = util.errorObj; +var tryCatch = util.tryCatch; +var yieldHandlers = []; + +function promiseFromYieldHandler(value, yieldHandlers, traceParent) { + for (var i = 0; i < yieldHandlers.length; ++i) { + traceParent._pushContext(); + var result = tryCatch(yieldHandlers[i])(value); + traceParent._popContext(); + if (result === errorObj) { + traceParent._pushContext(); + var ret = Promise.reject(errorObj.e); + traceParent._popContext(); + return ret; + } + var maybePromise = tryConvertToPromise(result, traceParent); + if (maybePromise instanceof Promise) return maybePromise; + } + return null; +} + +function PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) { + if (debug.cancellation()) { + var internal = new Promise(INTERNAL); + var _finallyPromise = this._finallyPromise = new Promise(INTERNAL); + this._promise = internal.lastly(function() { + return _finallyPromise; + }); + internal._captureStackTrace(); + internal._setOnCancel(this); + } else { + var promise = this._promise = new Promise(INTERNAL); + promise._captureStackTrace(); + } + this._stack = stack; + this._generatorFunction = generatorFunction; + this._receiver = receiver; + this._generator = undefined; + this._yieldHandlers = typeof yieldHandler === "function" + ? [yieldHandler].concat(yieldHandlers) + : yieldHandlers; + this._yieldedPromise = null; + this._cancellationPhase = false; +} +util.inherits(PromiseSpawn, Proxyable); + +PromiseSpawn.prototype._isResolved = function() { + return this._promise === null; +}; + +PromiseSpawn.prototype._cleanup = function() { + this._promise = this._generator = null; + if (debug.cancellation() && this._finallyPromise !== null) { + this._finallyPromise._fulfill(); + this._finallyPromise = null; + } +}; + +PromiseSpawn.prototype._promiseCancelled = function() { + if (this._isResolved()) return; + var implementsReturn = typeof this._generator["return"] !== "undefined"; + + var result; + if (!implementsReturn) { + var reason = new Promise.CancellationError( + "generator .return() sentinel"); + Promise.coroutine.returnSentinel = reason; + this._promise._attachExtraTrace(reason); + this._promise._pushContext(); + result = tryCatch(this._generator["throw"]).call(this._generator, + reason); + this._promise._popContext(); + } else { + this._promise._pushContext(); + result = tryCatch(this._generator["return"]).call(this._generator, + undefined); + this._promise._popContext(); + } + this._cancellationPhase = true; + this._yieldedPromise = null; + this._continue(result); +}; + +PromiseSpawn.prototype._promiseFulfilled = function(value) { + this._yieldedPromise = null; + this._promise._pushContext(); + var result = tryCatch(this._generator.next).call(this._generator, value); + this._promise._popContext(); + this._continue(result); +}; + +PromiseSpawn.prototype._promiseRejected = function(reason) { + this._yieldedPromise = null; + this._promise._attachExtraTrace(reason); + this._promise._pushContext(); + var result = tryCatch(this._generator["throw"]) + .call(this._generator, reason); + this._promise._popContext(); + this._continue(result); +}; + +PromiseSpawn.prototype._resultCancelled = function() { + if (this._yieldedPromise instanceof Promise) { + var promise = this._yieldedPromise; + this._yieldedPromise = null; + promise.cancel(); + } +}; + +PromiseSpawn.prototype.promise = function () { + return this._promise; +}; + +PromiseSpawn.prototype._run = function () { + this._generator = this._generatorFunction.call(this._receiver); + this._receiver = + this._generatorFunction = undefined; + this._promiseFulfilled(undefined); +}; + +PromiseSpawn.prototype._continue = function (result) { + var promise = this._promise; + if (result === errorObj) { + this._cleanup(); + if (this._cancellationPhase) { + return promise.cancel(); + } else { + return promise._rejectCallback(result.e, false); + } + } + + var value = result.value; + if (result.done === true) { + this._cleanup(); + if (this._cancellationPhase) { + return promise.cancel(); + } else { + return promise._resolveCallback(value); + } + } else { + var maybePromise = tryConvertToPromise(value, this._promise); + if (!(maybePromise instanceof Promise)) { + maybePromise = + promiseFromYieldHandler(maybePromise, + this._yieldHandlers, + this._promise); + if (maybePromise === null) { + this._promiseRejected( + new TypeError( + "A value %s was yielded that could not be treated as a promise\u000a\u000a See http://goo.gl/MqrFmX\u000a\u000a".replace("%s", String(value)) + + "From coroutine:\u000a" + + this._stack.split("\n").slice(1, -7).join("\n") + ) + ); + return; + } + } + maybePromise = maybePromise._target(); + var bitField = maybePromise._bitField; + ; + if (((bitField & 50397184) === 0)) { + this._yieldedPromise = maybePromise; + maybePromise._proxy(this, null); + } else if (((bitField & 33554432) !== 0)) { + Promise._async.invoke( + this._promiseFulfilled, this, maybePromise._value() + ); + } else if (((bitField & 16777216) !== 0)) { + Promise._async.invoke( + this._promiseRejected, this, maybePromise._reason() + ); + } else { + this._promiseCancelled(); + } + } +}; + +Promise.coroutine = function (generatorFunction, options) { + if (typeof generatorFunction !== "function") { + throw new TypeError("generatorFunction must be a function\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + var yieldHandler = Object(options).yieldHandler; + var PromiseSpawn$ = PromiseSpawn; + var stack = new Error().stack; + return function () { + var generator = generatorFunction.apply(this, arguments); + var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler, + stack); + var ret = spawn.promise(); + spawn._generator = generator; + spawn._promiseFulfilled(undefined); + return ret; + }; +}; + +Promise.coroutine.addYieldHandler = function(fn) { + if (typeof fn !== "function") { + throw new TypeError("expecting a function but got " + util.classString(fn)); + } + yieldHandlers.push(fn); +}; + +Promise.spawn = function (generatorFunction) { + debug.deprecated("Promise.spawn()", "Promise.coroutine()"); + if (typeof generatorFunction !== "function") { + return apiRejection("generatorFunction must be a function\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + var spawn = new PromiseSpawn(generatorFunction, this); + var ret = spawn.promise(); + spawn._run(Promise.spawn); + return ret; +}; +}; + +},{"./errors":12,"./util":36}],17:[function(_dereq_,module,exports){ +"use strict"; +module.exports = +function(Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, + getDomain) { +var util = _dereq_("./util"); +var canEvaluate = util.canEvaluate; +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; +var reject; + +if (!true) { +if (canEvaluate) { + var thenCallback = function(i) { + return new Function("value", "holder", " \n\ + 'use strict'; \n\ + holder.pIndex = value; \n\ + holder.checkFulfillment(this); \n\ + ".replace(/Index/g, i)); + }; + + var promiseSetter = function(i) { + return new Function("promise", "holder", " \n\ + 'use strict'; \n\ + holder.pIndex = promise; \n\ + ".replace(/Index/g, i)); + }; + + var generateHolderClass = function(total) { + var props = new Array(total); + for (var i = 0; i < props.length; ++i) { + props[i] = "this.p" + (i+1); + } + var assignment = props.join(" = ") + " = null;"; + var cancellationCode= "var promise;\n" + props.map(function(prop) { + return " \n\ + promise = " + prop + "; \n\ + if (promise instanceof Promise) { \n\ + promise.cancel(); \n\ + } \n\ + "; + }).join("\n"); + var passedArguments = props.join(", "); + var name = "Holder$" + total; + + + var code = "return function(tryCatch, errorObj, Promise, async) { \n\ + 'use strict'; \n\ + function [TheName](fn) { \n\ + [TheProperties] \n\ + this.fn = fn; \n\ + this.asyncNeeded = true; \n\ + this.now = 0; \n\ + } \n\ + \n\ + [TheName].prototype._callFunction = function(promise) { \n\ + promise._pushContext(); \n\ + var ret = tryCatch(this.fn)([ThePassedArguments]); \n\ + promise._popContext(); \n\ + if (ret === errorObj) { \n\ + promise._rejectCallback(ret.e, false); \n\ + } else { \n\ + promise._resolveCallback(ret); \n\ + } \n\ + }; \n\ + \n\ + [TheName].prototype.checkFulfillment = function(promise) { \n\ + var now = ++this.now; \n\ + if (now === [TheTotal]) { \n\ + if (this.asyncNeeded) { \n\ + async.invoke(this._callFunction, this, promise); \n\ + } else { \n\ + this._callFunction(promise); \n\ + } \n\ + \n\ + } \n\ + }; \n\ + \n\ + [TheName].prototype._resultCancelled = function() { \n\ + [CancellationCode] \n\ + }; \n\ + \n\ + return [TheName]; \n\ + }(tryCatch, errorObj, Promise, async); \n\ + "; + + code = code.replace(/\[TheName\]/g, name) + .replace(/\[TheTotal\]/g, total) + .replace(/\[ThePassedArguments\]/g, passedArguments) + .replace(/\[TheProperties\]/g, assignment) + .replace(/\[CancellationCode\]/g, cancellationCode); + + return new Function("tryCatch", "errorObj", "Promise", "async", code) + (tryCatch, errorObj, Promise, async); + }; + + var holderClasses = []; + var thenCallbacks = []; + var promiseSetters = []; + + for (var i = 0; i < 8; ++i) { + holderClasses.push(generateHolderClass(i + 1)); + thenCallbacks.push(thenCallback(i + 1)); + promiseSetters.push(promiseSetter(i + 1)); + } + + reject = function (reason) { + this._reject(reason); + }; +}} + +Promise.join = function () { + var last = arguments.length - 1; + var fn; + if (last > 0 && typeof arguments[last] === "function") { + fn = arguments[last]; + if (!true) { + if (last <= 8 && canEvaluate) { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + var HolderClass = holderClasses[last - 1]; + var holder = new HolderClass(fn); + var callbacks = thenCallbacks; + + for (var i = 0; i < last; ++i) { + var maybePromise = tryConvertToPromise(arguments[i], ret); + if (maybePromise instanceof Promise) { + maybePromise = maybePromise._target(); + var bitField = maybePromise._bitField; + ; + if (((bitField & 50397184) === 0)) { + maybePromise._then(callbacks[i], reject, + undefined, ret, holder); + promiseSetters[i](maybePromise, holder); + holder.asyncNeeded = false; + } else if (((bitField & 33554432) !== 0)) { + callbacks[i].call(ret, + maybePromise._value(), holder); + } else if (((bitField & 16777216) !== 0)) { + ret._reject(maybePromise._reason()); + } else { + ret._cancel(); + } + } else { + callbacks[i].call(ret, maybePromise, holder); + } + } + + if (!ret._isFateSealed()) { + if (holder.asyncNeeded) { + var domain = getDomain(); + if (domain !== null) { + holder.fn = util.domainBind(domain, holder.fn); + } + } + ret._setAsyncGuaranteed(); + ret._setOnCancel(holder); + } + return ret; + } + } + } + var args = [].slice.call(arguments);; + if (fn) args.pop(); + var ret = new PromiseArray(args).promise(); + return fn !== undefined ? ret.spread(fn) : ret; +}; + +}; + +},{"./util":36}],18:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, + PromiseArray, + apiRejection, + tryConvertToPromise, + INTERNAL, + debug) { +var getDomain = Promise._getDomain; +var util = _dereq_("./util"); +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; +var async = Promise._async; + +function MappingPromiseArray(promises, fn, limit, _filter) { + this.constructor$(promises); + this._promise._captureStackTrace(); + var domain = getDomain(); + this._callback = domain === null ? fn : util.domainBind(domain, fn); + this._preservedValues = _filter === INTERNAL + ? new Array(this.length()) + : null; + this._limit = limit; + this._inFlight = 0; + this._queue = []; + async.invoke(this._asyncInit, this, undefined); +} +util.inherits(MappingPromiseArray, PromiseArray); + +MappingPromiseArray.prototype._asyncInit = function() { + this._init$(undefined, -2); +}; + +MappingPromiseArray.prototype._init = function () {}; + +MappingPromiseArray.prototype._promiseFulfilled = function (value, index) { + var values = this._values; + var length = this.length(); + var preservedValues = this._preservedValues; + var limit = this._limit; + + if (index < 0) { + index = (index * -1) - 1; + values[index] = value; + if (limit >= 1) { + this._inFlight--; + this._drainQueue(); + if (this._isResolved()) return true; + } + } else { + if (limit >= 1 && this._inFlight >= limit) { + values[index] = value; + this._queue.push(index); + return false; + } + if (preservedValues !== null) preservedValues[index] = value; + + var promise = this._promise; + var callback = this._callback; + var receiver = promise._boundValue(); + promise._pushContext(); + var ret = tryCatch(callback).call(receiver, value, index, length); + var promiseCreated = promise._popContext(); + debug.checkForgottenReturns( + ret, + promiseCreated, + preservedValues !== null ? "Promise.filter" : "Promise.map", + promise + ); + if (ret === errorObj) { + this._reject(ret.e); + return true; + } + + var maybePromise = tryConvertToPromise(ret, this._promise); + if (maybePromise instanceof Promise) { + maybePromise = maybePromise._target(); + var bitField = maybePromise._bitField; + ; + if (((bitField & 50397184) === 0)) { + if (limit >= 1) this._inFlight++; + values[index] = maybePromise; + maybePromise._proxy(this, (index + 1) * -1); + return false; + } else if (((bitField & 33554432) !== 0)) { + ret = maybePromise._value(); + } else if (((bitField & 16777216) !== 0)) { + this._reject(maybePromise._reason()); + return true; + } else { + this._cancel(); + return true; + } + } + values[index] = ret; + } + var totalResolved = ++this._totalResolved; + if (totalResolved >= length) { + if (preservedValues !== null) { + this._filter(values, preservedValues); + } else { + this._resolve(values); + } + return true; + } + return false; +}; + +MappingPromiseArray.prototype._drainQueue = function () { + var queue = this._queue; + var limit = this._limit; + var values = this._values; + while (queue.length > 0 && this._inFlight < limit) { + if (this._isResolved()) return; + var index = queue.pop(); + this._promiseFulfilled(values[index], index); + } +}; + +MappingPromiseArray.prototype._filter = function (booleans, values) { + var len = values.length; + var ret = new Array(len); + var j = 0; + for (var i = 0; i < len; ++i) { + if (booleans[i]) ret[j++] = values[i]; + } + ret.length = j; + this._resolve(ret); +}; + +MappingPromiseArray.prototype.preservedValues = function () { + return this._preservedValues; +}; + +function map(promises, fn, options, _filter) { + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + + var limit = 0; + if (options !== undefined) { + if (typeof options === "object" && options !== null) { + if (typeof options.concurrency !== "number") { + return Promise.reject( + new TypeError("'concurrency' must be a number but it is " + + util.classString(options.concurrency))); + } + limit = options.concurrency; + } else { + return Promise.reject(new TypeError( + "options argument must be an object but it is " + + util.classString(options))); + } + } + limit = typeof limit === "number" && + isFinite(limit) && limit >= 1 ? limit : 0; + return new MappingPromiseArray(promises, fn, limit, _filter).promise(); +} + +Promise.prototype.map = function (fn, options) { + return map(this, fn, options, null); +}; + +Promise.map = function (promises, fn, options, _filter) { + return map(promises, fn, options, _filter); +}; + + +}; + +},{"./util":36}],19:[function(_dereq_,module,exports){ +"use strict"; +module.exports = +function(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) { +var util = _dereq_("./util"); +var tryCatch = util.tryCatch; + +Promise.method = function (fn) { + if (typeof fn !== "function") { + throw new Promise.TypeError("expecting a function but got " + util.classString(fn)); + } + return function () { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._pushContext(); + var value = tryCatch(fn).apply(this, arguments); + var promiseCreated = ret._popContext(); + debug.checkForgottenReturns( + value, promiseCreated, "Promise.method", ret); + ret._resolveFromSyncValue(value); + return ret; + }; +}; + +Promise.attempt = Promise["try"] = function (fn) { + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._pushContext(); + var value; + if (arguments.length > 1) { + debug.deprecated("calling Promise.try with more than 1 argument"); + var arg = arguments[1]; + var ctx = arguments[2]; + value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg) + : tryCatch(fn).call(ctx, arg); + } else { + value = tryCatch(fn)(); + } + var promiseCreated = ret._popContext(); + debug.checkForgottenReturns( + value, promiseCreated, "Promise.try", ret); + ret._resolveFromSyncValue(value); + return ret; +}; + +Promise.prototype._resolveFromSyncValue = function (value) { + if (value === util.errorObj) { + this._rejectCallback(value.e, false); + } else { + this._resolveCallback(value, true); + } +}; +}; + +},{"./util":36}],20:[function(_dereq_,module,exports){ +"use strict"; +var util = _dereq_("./util"); +var maybeWrapAsError = util.maybeWrapAsError; +var errors = _dereq_("./errors"); +var OperationalError = errors.OperationalError; +var es5 = _dereq_("./es5"); + +function isUntypedError(obj) { + return obj instanceof Error && + es5.getPrototypeOf(obj) === Error.prototype; +} + +var rErrorKey = /^(?:name|message|stack|cause)$/; +function wrapAsOperationalError(obj) { + var ret; + if (isUntypedError(obj)) { + ret = new OperationalError(obj); + ret.name = obj.name; + ret.message = obj.message; + ret.stack = obj.stack; + var keys = es5.keys(obj); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (!rErrorKey.test(key)) { + ret[key] = obj[key]; + } + } + return ret; + } + util.markAsOriginatingFromRejection(obj); + return obj; +} + +function nodebackForPromise(promise, multiArgs) { + return function(err, value) { + if (promise === null) return; + if (err) { + var wrapped = wrapAsOperationalError(maybeWrapAsError(err)); + promise._attachExtraTrace(wrapped); + promise._reject(wrapped); + } else if (!multiArgs) { + promise._fulfill(value); + } else { + var args = [].slice.call(arguments, 1);; + promise._fulfill(args); + } + promise = null; + }; +} + +module.exports = nodebackForPromise; + +},{"./errors":12,"./es5":13,"./util":36}],21:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise) { +var util = _dereq_("./util"); +var async = Promise._async; +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; + +function spreadAdapter(val, nodeback) { + var promise = this; + if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback); + var ret = + tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val)); + if (ret === errorObj) { + async.throwLater(ret.e); + } +} + +function successAdapter(val, nodeback) { + var promise = this; + var receiver = promise._boundValue(); + var ret = val === undefined + ? tryCatch(nodeback).call(receiver, null) + : tryCatch(nodeback).call(receiver, null, val); + if (ret === errorObj) { + async.throwLater(ret.e); + } +} +function errorAdapter(reason, nodeback) { + var promise = this; + if (!reason) { + var newReason = new Error(reason + ""); + newReason.cause = reason; + reason = newReason; + } + var ret = tryCatch(nodeback).call(promise._boundValue(), reason); + if (ret === errorObj) { + async.throwLater(ret.e); + } +} + +Promise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback, + options) { + if (typeof nodeback == "function") { + var adapter = successAdapter; + if (options !== undefined && Object(options).spread) { + adapter = spreadAdapter; + } + this._then( + adapter, + errorAdapter, + undefined, + this, + nodeback + ); + } + return this; +}; +}; + +},{"./util":36}],22:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function() { +var makeSelfResolutionError = function () { + return new TypeError("circular promise resolution chain\u000a\u000a See http://goo.gl/MqrFmX\u000a"); +}; +var reflectHandler = function() { + return new Promise.PromiseInspection(this._target()); +}; +var apiRejection = function(msg) { + return Promise.reject(new TypeError(msg)); +}; +function Proxyable() {} +var UNDEFINED_BINDING = {}; +var util = _dereq_("./util"); + +var getDomain; +if (util.isNode) { + getDomain = function() { + var ret = process.domain; + if (ret === undefined) ret = null; + return ret; + }; +} else { + getDomain = function() { + return null; + }; +} +util.notEnumerableProp(Promise, "_getDomain", getDomain); + +var es5 = _dereq_("./es5"); +var Async = _dereq_("./async"); +var async = new Async(); +es5.defineProperty(Promise, "_async", {value: async}); +var errors = _dereq_("./errors"); +var TypeError = Promise.TypeError = errors.TypeError; +Promise.RangeError = errors.RangeError; +var CancellationError = Promise.CancellationError = errors.CancellationError; +Promise.TimeoutError = errors.TimeoutError; +Promise.OperationalError = errors.OperationalError; +Promise.RejectionError = errors.OperationalError; +Promise.AggregateError = errors.AggregateError; +var INTERNAL = function(){}; +var APPLY = {}; +var NEXT_FILTER = {}; +var tryConvertToPromise = _dereq_("./thenables")(Promise, INTERNAL); +var PromiseArray = + _dereq_("./promise_array")(Promise, INTERNAL, + tryConvertToPromise, apiRejection, Proxyable); +var Context = _dereq_("./context")(Promise); + /*jshint unused:false*/ +var createContext = Context.create; +var debug = _dereq_("./debuggability")(Promise, Context); +var CapturedTrace = debug.CapturedTrace; +var PassThroughHandlerContext = + _dereq_("./finally")(Promise, tryConvertToPromise, NEXT_FILTER); +var catchFilter = _dereq_("./catch_filter")(NEXT_FILTER); +var nodebackForPromise = _dereq_("./nodeback"); +var errorObj = util.errorObj; +var tryCatch = util.tryCatch; +function check(self, executor) { + if (self == null || self.constructor !== Promise) { + throw new TypeError("the promise constructor cannot be invoked directly\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + if (typeof executor !== "function") { + throw new TypeError("expecting a function but got " + util.classString(executor)); + } + +} + +function Promise(executor) { + if (executor !== INTERNAL) { + check(this, executor); + } + this._bitField = 0; + this._fulfillmentHandler0 = undefined; + this._rejectionHandler0 = undefined; + this._promise0 = undefined; + this._receiver0 = undefined; + this._resolveFromExecutor(executor); + this._promiseCreated(); + this._fireEvent("promiseCreated", this); +} + +Promise.prototype.toString = function () { + return "[object Promise]"; +}; + +Promise.prototype.caught = Promise.prototype["catch"] = function (fn) { + var len = arguments.length; + if (len > 1) { + var catchInstances = new Array(len - 1), + j = 0, i; + for (i = 0; i < len - 1; ++i) { + var item = arguments[i]; + if (util.isObject(item)) { + catchInstances[j++] = item; + } else { + return apiRejection("Catch statement predicate: " + + "expecting an object but got " + util.classString(item)); + } + } + catchInstances.length = j; + fn = arguments[i]; + return this.then(undefined, catchFilter(catchInstances, fn, this)); + } + return this.then(undefined, fn); +}; + +Promise.prototype.reflect = function () { + return this._then(reflectHandler, + reflectHandler, undefined, this, undefined); +}; + +Promise.prototype.then = function (didFulfill, didReject) { + if (debug.warnings() && arguments.length > 0 && + typeof didFulfill !== "function" && + typeof didReject !== "function") { + var msg = ".then() only accepts functions but was passed: " + + util.classString(didFulfill); + if (arguments.length > 1) { + msg += ", " + util.classString(didReject); + } + this._warn(msg); + } + return this._then(didFulfill, didReject, undefined, undefined, undefined); +}; + +Promise.prototype.done = function (didFulfill, didReject) { + var promise = + this._then(didFulfill, didReject, undefined, undefined, undefined); + promise._setIsFinal(); +}; + +Promise.prototype.spread = function (fn) { + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + return this.all()._then(fn, undefined, undefined, APPLY, undefined); +}; + +Promise.prototype.toJSON = function () { + var ret = { + isFulfilled: false, + isRejected: false, + fulfillmentValue: undefined, + rejectionReason: undefined + }; + if (this.isFulfilled()) { + ret.fulfillmentValue = this.value(); + ret.isFulfilled = true; + } else if (this.isRejected()) { + ret.rejectionReason = this.reason(); + ret.isRejected = true; + } + return ret; +}; + +Promise.prototype.all = function () { + if (arguments.length > 0) { + this._warn(".all() was passed arguments but it does not take any"); + } + return new PromiseArray(this).promise(); +}; + +Promise.prototype.error = function (fn) { + return this.caught(util.originatesFromRejection, fn); +}; + +Promise.getNewLibraryCopy = module.exports; + +Promise.is = function (val) { + return val instanceof Promise; +}; + +Promise.fromNode = Promise.fromCallback = function(fn) { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs + : false; + var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs)); + if (result === errorObj) { + ret._rejectCallback(result.e, true); + } + if (!ret._isFateSealed()) ret._setAsyncGuaranteed(); + return ret; +}; + +Promise.all = function (promises) { + return new PromiseArray(promises).promise(); +}; + +Promise.cast = function (obj) { + var ret = tryConvertToPromise(obj); + if (!(ret instanceof Promise)) { + ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._setFulfilled(); + ret._rejectionHandler0 = obj; + } + return ret; +}; + +Promise.resolve = Promise.fulfilled = Promise.cast; + +Promise.reject = Promise.rejected = function (reason) { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._rejectCallback(reason, true); + return ret; +}; + +Promise.setScheduler = function(fn) { + if (typeof fn !== "function") { + throw new TypeError("expecting a function but got " + util.classString(fn)); + } + return async.setScheduler(fn); +}; + +Promise.prototype._then = function ( + didFulfill, + didReject, + _, receiver, + internalData +) { + var haveInternalData = internalData !== undefined; + var promise = haveInternalData ? internalData : new Promise(INTERNAL); + var target = this._target(); + var bitField = target._bitField; + + if (!haveInternalData) { + promise._propagateFrom(this, 3); + promise._captureStackTrace(); + if (receiver === undefined && + ((this._bitField & 2097152) !== 0)) { + if (!((bitField & 50397184) === 0)) { + receiver = this._boundValue(); + } else { + receiver = target === this ? undefined : this._boundTo; + } + } + this._fireEvent("promiseChained", this, promise); + } + + var domain = getDomain(); + if (!((bitField & 50397184) === 0)) { + var handler, value, settler = target._settlePromiseCtx; + if (((bitField & 33554432) !== 0)) { + value = target._rejectionHandler0; + handler = didFulfill; + } else if (((bitField & 16777216) !== 0)) { + value = target._fulfillmentHandler0; + handler = didReject; + target._unsetRejectionIsUnhandled(); + } else { + settler = target._settlePromiseLateCancellationObserver; + value = new CancellationError("late cancellation observer"); + target._attachExtraTrace(value); + handler = didReject; + } + + async.invoke(settler, target, { + handler: domain === null ? handler + : (typeof handler === "function" && + util.domainBind(domain, handler)), + promise: promise, + receiver: receiver, + value: value + }); + } else { + target._addCallbacks(didFulfill, didReject, promise, receiver, domain); + } + + return promise; +}; + +Promise.prototype._length = function () { + return this._bitField & 65535; +}; + +Promise.prototype._isFateSealed = function () { + return (this._bitField & 117506048) !== 0; +}; + +Promise.prototype._isFollowing = function () { + return (this._bitField & 67108864) === 67108864; +}; + +Promise.prototype._setLength = function (len) { + this._bitField = (this._bitField & -65536) | + (len & 65535); +}; + +Promise.prototype._setFulfilled = function () { + this._bitField = this._bitField | 33554432; + this._fireEvent("promiseFulfilled", this); +}; + +Promise.prototype._setRejected = function () { + this._bitField = this._bitField | 16777216; + this._fireEvent("promiseRejected", this); +}; + +Promise.prototype._setFollowing = function () { + this._bitField = this._bitField | 67108864; + this._fireEvent("promiseResolved", this); +}; + +Promise.prototype._setIsFinal = function () { + this._bitField = this._bitField | 4194304; +}; + +Promise.prototype._isFinal = function () { + return (this._bitField & 4194304) > 0; +}; + +Promise.prototype._unsetCancelled = function() { + this._bitField = this._bitField & (~65536); +}; + +Promise.prototype._setCancelled = function() { + this._bitField = this._bitField | 65536; + this._fireEvent("promiseCancelled", this); +}; + +Promise.prototype._setWillBeCancelled = function() { + this._bitField = this._bitField | 8388608; +}; + +Promise.prototype._setAsyncGuaranteed = function() { + if (async.hasCustomScheduler()) return; + this._bitField = this._bitField | 134217728; +}; + +Promise.prototype._receiverAt = function (index) { + var ret = index === 0 ? this._receiver0 : this[ + index * 4 - 4 + 3]; + if (ret === UNDEFINED_BINDING) { + return undefined; + } else if (ret === undefined && this._isBound()) { + return this._boundValue(); + } + return ret; +}; + +Promise.prototype._promiseAt = function (index) { + return this[ + index * 4 - 4 + 2]; +}; + +Promise.prototype._fulfillmentHandlerAt = function (index) { + return this[ + index * 4 - 4 + 0]; +}; + +Promise.prototype._rejectionHandlerAt = function (index) { + return this[ + index * 4 - 4 + 1]; +}; + +Promise.prototype._boundValue = function() {}; + +Promise.prototype._migrateCallback0 = function (follower) { + var bitField = follower._bitField; + var fulfill = follower._fulfillmentHandler0; + var reject = follower._rejectionHandler0; + var promise = follower._promise0; + var receiver = follower._receiverAt(0); + if (receiver === undefined) receiver = UNDEFINED_BINDING; + this._addCallbacks(fulfill, reject, promise, receiver, null); +}; + +Promise.prototype._migrateCallbackAt = function (follower, index) { + var fulfill = follower._fulfillmentHandlerAt(index); + var reject = follower._rejectionHandlerAt(index); + var promise = follower._promiseAt(index); + var receiver = follower._receiverAt(index); + if (receiver === undefined) receiver = UNDEFINED_BINDING; + this._addCallbacks(fulfill, reject, promise, receiver, null); +}; + +Promise.prototype._addCallbacks = function ( + fulfill, + reject, + promise, + receiver, + domain +) { + var index = this._length(); + + if (index >= 65535 - 4) { + index = 0; + this._setLength(0); + } + + if (index === 0) { + this._promise0 = promise; + this._receiver0 = receiver; + if (typeof fulfill === "function") { + this._fulfillmentHandler0 = + domain === null ? fulfill : util.domainBind(domain, fulfill); + } + if (typeof reject === "function") { + this._rejectionHandler0 = + domain === null ? reject : util.domainBind(domain, reject); + } + } else { + var base = index * 4 - 4; + this[base + 2] = promise; + this[base + 3] = receiver; + if (typeof fulfill === "function") { + this[base + 0] = + domain === null ? fulfill : util.domainBind(domain, fulfill); + } + if (typeof reject === "function") { + this[base + 1] = + domain === null ? reject : util.domainBind(domain, reject); + } + } + this._setLength(index + 1); + return index; +}; + +Promise.prototype._proxy = function (proxyable, arg) { + this._addCallbacks(undefined, undefined, arg, proxyable, null); +}; + +Promise.prototype._resolveCallback = function(value, shouldBind) { + if (((this._bitField & 117506048) !== 0)) return; + if (value === this) + return this._rejectCallback(makeSelfResolutionError(), false); + var maybePromise = tryConvertToPromise(value, this); + if (!(maybePromise instanceof Promise)) return this._fulfill(value); + + if (shouldBind) this._propagateFrom(maybePromise, 2); + + var promise = maybePromise._target(); + + if (promise === this) { + this._reject(makeSelfResolutionError()); + return; + } + + var bitField = promise._bitField; + if (((bitField & 50397184) === 0)) { + var len = this._length(); + if (len > 0) promise._migrateCallback0(this); + for (var i = 1; i < len; ++i) { + promise._migrateCallbackAt(this, i); + } + this._setFollowing(); + this._setLength(0); + this._setFollowee(promise); + } else if (((bitField & 33554432) !== 0)) { + this._fulfill(promise._value()); + } else if (((bitField & 16777216) !== 0)) { + this._reject(promise._reason()); + } else { + var reason = new CancellationError("late cancellation observer"); + promise._attachExtraTrace(reason); + this._reject(reason); + } +}; + +Promise.prototype._rejectCallback = +function(reason, synchronous, ignoreNonErrorWarnings) { + var trace = util.ensureErrorObject(reason); + var hasStack = trace === reason; + if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) { + var message = "a promise was rejected with a non-error: " + + util.classString(reason); + this._warn(message, true); + } + this._attachExtraTrace(trace, synchronous ? hasStack : false); + this._reject(reason); +}; + +Promise.prototype._resolveFromExecutor = function (executor) { + if (executor === INTERNAL) return; + var promise = this; + this._captureStackTrace(); + this._pushContext(); + var synchronous = true; + var r = this._execute(executor, function(value) { + promise._resolveCallback(value); + }, function (reason) { + promise._rejectCallback(reason, synchronous); + }); + synchronous = false; + this._popContext(); + + if (r !== undefined) { + promise._rejectCallback(r, true); + } +}; + +Promise.prototype._settlePromiseFromHandler = function ( + handler, receiver, value, promise +) { + var bitField = promise._bitField; + if (((bitField & 65536) !== 0)) return; + promise._pushContext(); + var x; + if (receiver === APPLY) { + if (!value || typeof value.length !== "number") { + x = errorObj; + x.e = new TypeError("cannot .spread() a non-array: " + + util.classString(value)); + } else { + x = tryCatch(handler).apply(this._boundValue(), value); + } + } else { + x = tryCatch(handler).call(receiver, value); + } + var promiseCreated = promise._popContext(); + bitField = promise._bitField; + if (((bitField & 65536) !== 0)) return; + + if (x === NEXT_FILTER) { + promise._reject(value); + } else if (x === errorObj) { + promise._rejectCallback(x.e, false); + } else { + debug.checkForgottenReturns(x, promiseCreated, "", promise, this); + promise._resolveCallback(x); + } +}; + +Promise.prototype._target = function() { + var ret = this; + while (ret._isFollowing()) ret = ret._followee(); + return ret; +}; + +Promise.prototype._followee = function() { + return this._rejectionHandler0; +}; + +Promise.prototype._setFollowee = function(promise) { + this._rejectionHandler0 = promise; +}; + +Promise.prototype._settlePromise = function(promise, handler, receiver, value) { + var isPromise = promise instanceof Promise; + var bitField = this._bitField; + var asyncGuaranteed = ((bitField & 134217728) !== 0); + if (((bitField & 65536) !== 0)) { + if (isPromise) promise._invokeInternalOnCancel(); + + if (receiver instanceof PassThroughHandlerContext && + receiver.isFinallyHandler()) { + receiver.cancelPromise = promise; + if (tryCatch(handler).call(receiver, value) === errorObj) { + promise._reject(errorObj.e); + } + } else if (handler === reflectHandler) { + promise._fulfill(reflectHandler.call(receiver)); + } else if (receiver instanceof Proxyable) { + receiver._promiseCancelled(promise); + } else if (isPromise || promise instanceof PromiseArray) { + promise._cancel(); + } else { + receiver.cancel(); + } + } else if (typeof handler === "function") { + if (!isPromise) { + handler.call(receiver, value, promise); + } else { + if (asyncGuaranteed) promise._setAsyncGuaranteed(); + this._settlePromiseFromHandler(handler, receiver, value, promise); + } + } else if (receiver instanceof Proxyable) { + if (!receiver._isResolved()) { + if (((bitField & 33554432) !== 0)) { + receiver._promiseFulfilled(value, promise); + } else { + receiver._promiseRejected(value, promise); + } + } + } else if (isPromise) { + if (asyncGuaranteed) promise._setAsyncGuaranteed(); + if (((bitField & 33554432) !== 0)) { + promise._fulfill(value); + } else { + promise._reject(value); + } + } +}; + +Promise.prototype._settlePromiseLateCancellationObserver = function(ctx) { + var handler = ctx.handler; + var promise = ctx.promise; + var receiver = ctx.receiver; + var value = ctx.value; + if (typeof handler === "function") { + if (!(promise instanceof Promise)) { + handler.call(receiver, value, promise); + } else { + this._settlePromiseFromHandler(handler, receiver, value, promise); + } + } else if (promise instanceof Promise) { + promise._reject(value); + } +}; + +Promise.prototype._settlePromiseCtx = function(ctx) { + this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value); +}; + +Promise.prototype._settlePromise0 = function(handler, value, bitField) { + var promise = this._promise0; + var receiver = this._receiverAt(0); + this._promise0 = undefined; + this._receiver0 = undefined; + this._settlePromise(promise, handler, receiver, value); +}; + +Promise.prototype._clearCallbackDataAtIndex = function(index) { + var base = index * 4 - 4; + this[base + 2] = + this[base + 3] = + this[base + 0] = + this[base + 1] = undefined; +}; + +Promise.prototype._fulfill = function (value) { + var bitField = this._bitField; + if (((bitField & 117506048) >>> 16)) return; + if (value === this) { + var err = makeSelfResolutionError(); + this._attachExtraTrace(err); + return this._reject(err); + } + this._setFulfilled(); + this._rejectionHandler0 = value; + + if ((bitField & 65535) > 0) { + if (((bitField & 134217728) !== 0)) { + this._settlePromises(); + } else { + async.settlePromises(this); + } + } +}; + +Promise.prototype._reject = function (reason) { + var bitField = this._bitField; + if (((bitField & 117506048) >>> 16)) return; + this._setRejected(); + this._fulfillmentHandler0 = reason; + + if (this._isFinal()) { + return async.fatalError(reason, util.isNode); + } + + if ((bitField & 65535) > 0) { + async.settlePromises(this); + } else { + this._ensurePossibleRejectionHandled(); + } +}; + +Promise.prototype._fulfillPromises = function (len, value) { + for (var i = 1; i < len; i++) { + var handler = this._fulfillmentHandlerAt(i); + var promise = this._promiseAt(i); + var receiver = this._receiverAt(i); + this._clearCallbackDataAtIndex(i); + this._settlePromise(promise, handler, receiver, value); + } +}; + +Promise.prototype._rejectPromises = function (len, reason) { + for (var i = 1; i < len; i++) { + var handler = this._rejectionHandlerAt(i); + var promise = this._promiseAt(i); + var receiver = this._receiverAt(i); + this._clearCallbackDataAtIndex(i); + this._settlePromise(promise, handler, receiver, reason); + } +}; + +Promise.prototype._settlePromises = function () { + var bitField = this._bitField; + var len = (bitField & 65535); + + if (len > 0) { + if (((bitField & 16842752) !== 0)) { + var reason = this._fulfillmentHandler0; + this._settlePromise0(this._rejectionHandler0, reason, bitField); + this._rejectPromises(len, reason); + } else { + var value = this._rejectionHandler0; + this._settlePromise0(this._fulfillmentHandler0, value, bitField); + this._fulfillPromises(len, value); + } + this._setLength(0); + } + this._clearCancellationData(); +}; + +Promise.prototype._settledValue = function() { + var bitField = this._bitField; + if (((bitField & 33554432) !== 0)) { + return this._rejectionHandler0; + } else if (((bitField & 16777216) !== 0)) { + return this._fulfillmentHandler0; + } +}; + +function deferResolve(v) {this.promise._resolveCallback(v);} +function deferReject(v) {this.promise._rejectCallback(v, false);} + +Promise.defer = Promise.pending = function() { + debug.deprecated("Promise.defer", "new Promise"); + var promise = new Promise(INTERNAL); + return { + promise: promise, + resolve: deferResolve, + reject: deferReject + }; +}; + +util.notEnumerableProp(Promise, + "_makeSelfResolutionError", + makeSelfResolutionError); + +_dereq_("./method")(Promise, INTERNAL, tryConvertToPromise, apiRejection, + debug); +_dereq_("./bind")(Promise, INTERNAL, tryConvertToPromise, debug); +_dereq_("./cancel")(Promise, PromiseArray, apiRejection, debug); +_dereq_("./direct_resolve")(Promise); +_dereq_("./synchronous_inspection")(Promise); +_dereq_("./join")( + Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, getDomain); +Promise.Promise = Promise; +Promise.version = "3.5.0"; +_dereq_('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug); +_dereq_('./call_get.js')(Promise); +_dereq_('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug); +_dereq_('./timers.js')(Promise, INTERNAL, debug); +_dereq_('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug); +_dereq_('./nodeify.js')(Promise); +_dereq_('./promisify.js')(Promise, INTERNAL); +_dereq_('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection); +_dereq_('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection); +_dereq_('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug); +_dereq_('./settle.js')(Promise, PromiseArray, debug); +_dereq_('./some.js')(Promise, PromiseArray, apiRejection); +_dereq_('./filter.js')(Promise, INTERNAL); +_dereq_('./each.js')(Promise, INTERNAL); +_dereq_('./any.js')(Promise); + + util.toFastProperties(Promise); + util.toFastProperties(Promise.prototype); + function fillTypes(value) { + var p = new Promise(INTERNAL); + p._fulfillmentHandler0 = value; + p._rejectionHandler0 = value; + p._promise0 = value; + p._receiver0 = value; + } + // Complete slack tracking, opt out of field-type tracking and + // stabilize map + fillTypes({a: 1}); + fillTypes({b: 2}); + fillTypes({c: 3}); + fillTypes(1); + fillTypes(function(){}); + fillTypes(undefined); + fillTypes(false); + fillTypes(new Promise(INTERNAL)); + debug.setBounds(Async.firstLineError, util.lastLineError); + return Promise; + +}; + +},{"./any.js":1,"./async":2,"./bind":3,"./call_get.js":5,"./cancel":6,"./catch_filter":7,"./context":8,"./debuggability":9,"./direct_resolve":10,"./each.js":11,"./errors":12,"./es5":13,"./filter.js":14,"./finally":15,"./generators.js":16,"./join":17,"./map.js":18,"./method":19,"./nodeback":20,"./nodeify.js":21,"./promise_array":23,"./promisify.js":24,"./props.js":25,"./race.js":27,"./reduce.js":28,"./settle.js":30,"./some.js":31,"./synchronous_inspection":32,"./thenables":33,"./timers.js":34,"./using.js":35,"./util":36}],23:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL, tryConvertToPromise, + apiRejection, Proxyable) { +var util = _dereq_("./util"); +var isArray = util.isArray; + +function toResolutionValue(val) { + switch(val) { + case -2: return []; + case -3: return {}; + case -6: return new Map(); + } +} + +function PromiseArray(values) { + var promise = this._promise = new Promise(INTERNAL); + if (values instanceof Promise) { + promise._propagateFrom(values, 3); + } + promise._setOnCancel(this); + this._values = values; + this._length = 0; + this._totalResolved = 0; + this._init(undefined, -2); +} +util.inherits(PromiseArray, Proxyable); + +PromiseArray.prototype.length = function () { + return this._length; +}; + +PromiseArray.prototype.promise = function () { + return this._promise; +}; + +PromiseArray.prototype._init = function init(_, resolveValueIfEmpty) { + var values = tryConvertToPromise(this._values, this._promise); + if (values instanceof Promise) { + values = values._target(); + var bitField = values._bitField; + ; + this._values = values; + + if (((bitField & 50397184) === 0)) { + this._promise._setAsyncGuaranteed(); + return values._then( + init, + this._reject, + undefined, + this, + resolveValueIfEmpty + ); + } else if (((bitField & 33554432) !== 0)) { + values = values._value(); + } else if (((bitField & 16777216) !== 0)) { + return this._reject(values._reason()); + } else { + return this._cancel(); + } + } + values = util.asArray(values); + if (values === null) { + var err = apiRejection( + "expecting an array or an iterable object but got " + util.classString(values)).reason(); + this._promise._rejectCallback(err, false); + return; + } + + if (values.length === 0) { + if (resolveValueIfEmpty === -5) { + this._resolveEmptyArray(); + } + else { + this._resolve(toResolutionValue(resolveValueIfEmpty)); + } + return; + } + this._iterate(values); +}; + +PromiseArray.prototype._iterate = function(values) { + var len = this.getActualLength(values.length); + this._length = len; + this._values = this.shouldCopyValues() ? new Array(len) : this._values; + var result = this._promise; + var isResolved = false; + var bitField = null; + for (var i = 0; i < len; ++i) { + var maybePromise = tryConvertToPromise(values[i], result); + + if (maybePromise instanceof Promise) { + maybePromise = maybePromise._target(); + bitField = maybePromise._bitField; + } else { + bitField = null; + } + + if (isResolved) { + if (bitField !== null) { + maybePromise.suppressUnhandledRejections(); + } + } else if (bitField !== null) { + if (((bitField & 50397184) === 0)) { + maybePromise._proxy(this, i); + this._values[i] = maybePromise; + } else if (((bitField & 33554432) !== 0)) { + isResolved = this._promiseFulfilled(maybePromise._value(), i); + } else if (((bitField & 16777216) !== 0)) { + isResolved = this._promiseRejected(maybePromise._reason(), i); + } else { + isResolved = this._promiseCancelled(i); + } + } else { + isResolved = this._promiseFulfilled(maybePromise, i); + } + } + if (!isResolved) result._setAsyncGuaranteed(); +}; + +PromiseArray.prototype._isResolved = function () { + return this._values === null; +}; + +PromiseArray.prototype._resolve = function (value) { + this._values = null; + this._promise._fulfill(value); +}; + +PromiseArray.prototype._cancel = function() { + if (this._isResolved() || !this._promise._isCancellable()) return; + this._values = null; + this._promise._cancel(); +}; + +PromiseArray.prototype._reject = function (reason) { + this._values = null; + this._promise._rejectCallback(reason, false); +}; + +PromiseArray.prototype._promiseFulfilled = function (value, index) { + this._values[index] = value; + var totalResolved = ++this._totalResolved; + if (totalResolved >= this._length) { + this._resolve(this._values); + return true; + } + return false; +}; + +PromiseArray.prototype._promiseCancelled = function() { + this._cancel(); + return true; +}; + +PromiseArray.prototype._promiseRejected = function (reason) { + this._totalResolved++; + this._reject(reason); + return true; +}; + +PromiseArray.prototype._resultCancelled = function() { + if (this._isResolved()) return; + var values = this._values; + this._cancel(); + if (values instanceof Promise) { + values.cancel(); + } else { + for (var i = 0; i < values.length; ++i) { + if (values[i] instanceof Promise) { + values[i].cancel(); + } + } + } +}; + +PromiseArray.prototype.shouldCopyValues = function () { + return true; +}; + +PromiseArray.prototype.getActualLength = function (len) { + return len; +}; + +return PromiseArray; +}; + +},{"./util":36}],24:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var THIS = {}; +var util = _dereq_("./util"); +var nodebackForPromise = _dereq_("./nodeback"); +var withAppended = util.withAppended; +var maybeWrapAsError = util.maybeWrapAsError; +var canEvaluate = util.canEvaluate; +var TypeError = _dereq_("./errors").TypeError; +var defaultSuffix = "Async"; +var defaultPromisified = {__isPromisified__: true}; +var noCopyProps = [ + "arity", "length", + "name", + "arguments", + "caller", + "callee", + "prototype", + "__isPromisified__" +]; +var noCopyPropsPattern = new RegExp("^(?:" + noCopyProps.join("|") + ")$"); + +var defaultFilter = function(name) { + return util.isIdentifier(name) && + name.charAt(0) !== "_" && + name !== "constructor"; +}; + +function propsFilter(key) { + return !noCopyPropsPattern.test(key); +} + +function isPromisified(fn) { + try { + return fn.__isPromisified__ === true; + } + catch (e) { + return false; + } +} + +function hasPromisified(obj, key, suffix) { + var val = util.getDataPropertyOrDefault(obj, key + suffix, + defaultPromisified); + return val ? isPromisified(val) : false; +} +function checkValid(ret, suffix, suffixRegexp) { + for (var i = 0; i < ret.length; i += 2) { + var key = ret[i]; + if (suffixRegexp.test(key)) { + var keyWithoutAsyncSuffix = key.replace(suffixRegexp, ""); + for (var j = 0; j < ret.length; j += 2) { + if (ret[j] === keyWithoutAsyncSuffix) { + throw new TypeError("Cannot promisify an API that has normal methods with '%s'-suffix\u000a\u000a See http://goo.gl/MqrFmX\u000a" + .replace("%s", suffix)); + } + } + } + } +} + +function promisifiableMethods(obj, suffix, suffixRegexp, filter) { + var keys = util.inheritedDataKeys(obj); + var ret = []; + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + var value = obj[key]; + var passesDefaultFilter = filter === defaultFilter + ? true : defaultFilter(key, value, obj); + if (typeof value === "function" && + !isPromisified(value) && + !hasPromisified(obj, key, suffix) && + filter(key, value, obj, passesDefaultFilter)) { + ret.push(key, value); + } + } + checkValid(ret, suffix, suffixRegexp); + return ret; +} + +var escapeIdentRegex = function(str) { + return str.replace(/([$])/, "\\$"); +}; + +var makeNodePromisifiedEval; +if (!true) { +var switchCaseArgumentOrder = function(likelyArgumentCount) { + var ret = [likelyArgumentCount]; + var min = Math.max(0, likelyArgumentCount - 1 - 3); + for(var i = likelyArgumentCount - 1; i >= min; --i) { + ret.push(i); + } + for(var i = likelyArgumentCount + 1; i <= 3; ++i) { + ret.push(i); + } + return ret; +}; + +var argumentSequence = function(argumentCount) { + return util.filledRange(argumentCount, "_arg", ""); +}; + +var parameterDeclaration = function(parameterCount) { + return util.filledRange( + Math.max(parameterCount, 3), "_arg", ""); +}; + +var parameterCount = function(fn) { + if (typeof fn.length === "number") { + return Math.max(Math.min(fn.length, 1023 + 1), 0); + } + return 0; +}; + +makeNodePromisifiedEval = +function(callback, receiver, originalName, fn, _, multiArgs) { + var newParameterCount = Math.max(0, parameterCount(fn) - 1); + var argumentOrder = switchCaseArgumentOrder(newParameterCount); + var shouldProxyThis = typeof callback === "string" || receiver === THIS; + + function generateCallForArgumentCount(count) { + var args = argumentSequence(count).join(", "); + var comma = count > 0 ? ", " : ""; + var ret; + if (shouldProxyThis) { + ret = "ret = callback.call(this, {{args}}, nodeback); break;\n"; + } else { + ret = receiver === undefined + ? "ret = callback({{args}}, nodeback); break;\n" + : "ret = callback.call(receiver, {{args}}, nodeback); break;\n"; + } + return ret.replace("{{args}}", args).replace(", ", comma); + } + + function generateArgumentSwitchCase() { + var ret = ""; + for (var i = 0; i < argumentOrder.length; ++i) { + ret += "case " + argumentOrder[i] +":" + + generateCallForArgumentCount(argumentOrder[i]); + } + + ret += " \n\ + default: \n\ + var args = new Array(len + 1); \n\ + var i = 0; \n\ + for (var i = 0; i < len; ++i) { \n\ + args[i] = arguments[i]; \n\ + } \n\ + args[i] = nodeback; \n\ + [CodeForCall] \n\ + break; \n\ + ".replace("[CodeForCall]", (shouldProxyThis + ? "ret = callback.apply(this, args);\n" + : "ret = callback.apply(receiver, args);\n")); + return ret; + } + + var getFunctionCode = typeof callback === "string" + ? ("this != null ? this['"+callback+"'] : fn") + : "fn"; + var body = "'use strict'; \n\ + var ret = function (Parameters) { \n\ + 'use strict'; \n\ + var len = arguments.length; \n\ + var promise = new Promise(INTERNAL); \n\ + promise._captureStackTrace(); \n\ + var nodeback = nodebackForPromise(promise, " + multiArgs + "); \n\ + var ret; \n\ + var callback = tryCatch([GetFunctionCode]); \n\ + switch(len) { \n\ + [CodeForSwitchCase] \n\ + } \n\ + if (ret === errorObj) { \n\ + promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\n\ + } \n\ + if (!promise._isFateSealed()) promise._setAsyncGuaranteed(); \n\ + return promise; \n\ + }; \n\ + notEnumerableProp(ret, '__isPromisified__', true); \n\ + return ret; \n\ + ".replace("[CodeForSwitchCase]", generateArgumentSwitchCase()) + .replace("[GetFunctionCode]", getFunctionCode); + body = body.replace("Parameters", parameterDeclaration(newParameterCount)); + return new Function("Promise", + "fn", + "receiver", + "withAppended", + "maybeWrapAsError", + "nodebackForPromise", + "tryCatch", + "errorObj", + "notEnumerableProp", + "INTERNAL", + body)( + Promise, + fn, + receiver, + withAppended, + maybeWrapAsError, + nodebackForPromise, + util.tryCatch, + util.errorObj, + util.notEnumerableProp, + INTERNAL); +}; +} + +function makeNodePromisifiedClosure(callback, receiver, _, fn, __, multiArgs) { + var defaultThis = (function() {return this;})(); + var method = callback; + if (typeof method === "string") { + callback = fn; + } + function promisified() { + var _receiver = receiver; + if (receiver === THIS) _receiver = this; + var promise = new Promise(INTERNAL); + promise._captureStackTrace(); + var cb = typeof method === "string" && this !== defaultThis + ? this[method] : callback; + var fn = nodebackForPromise(promise, multiArgs); + try { + cb.apply(_receiver, withAppended(arguments, fn)); + } catch(e) { + promise._rejectCallback(maybeWrapAsError(e), true, true); + } + if (!promise._isFateSealed()) promise._setAsyncGuaranteed(); + return promise; + } + util.notEnumerableProp(promisified, "__isPromisified__", true); + return promisified; +} + +var makeNodePromisified = canEvaluate + ? makeNodePromisifiedEval + : makeNodePromisifiedClosure; + +function promisifyAll(obj, suffix, filter, promisifier, multiArgs) { + var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + "$"); + var methods = + promisifiableMethods(obj, suffix, suffixRegexp, filter); + + for (var i = 0, len = methods.length; i < len; i+= 2) { + var key = methods[i]; + var fn = methods[i+1]; + var promisifiedKey = key + suffix; + if (promisifier === makeNodePromisified) { + obj[promisifiedKey] = + makeNodePromisified(key, THIS, key, fn, suffix, multiArgs); + } else { + var promisified = promisifier(fn, function() { + return makeNodePromisified(key, THIS, key, + fn, suffix, multiArgs); + }); + util.notEnumerableProp(promisified, "__isPromisified__", true); + obj[promisifiedKey] = promisified; + } + } + util.toFastProperties(obj); + return obj; +} + +function promisify(callback, receiver, multiArgs) { + return makeNodePromisified(callback, receiver, undefined, + callback, null, multiArgs); +} + +Promise.promisify = function (fn, options) { + if (typeof fn !== "function") { + throw new TypeError("expecting a function but got " + util.classString(fn)); + } + if (isPromisified(fn)) { + return fn; + } + options = Object(options); + var receiver = options.context === undefined ? THIS : options.context; + var multiArgs = !!options.multiArgs; + var ret = promisify(fn, receiver, multiArgs); + util.copyDescriptors(fn, ret, propsFilter); + return ret; +}; + +Promise.promisifyAll = function (target, options) { + if (typeof target !== "function" && typeof target !== "object") { + throw new TypeError("the target of promisifyAll must be an object or a function\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + options = Object(options); + var multiArgs = !!options.multiArgs; + var suffix = options.suffix; + if (typeof suffix !== "string") suffix = defaultSuffix; + var filter = options.filter; + if (typeof filter !== "function") filter = defaultFilter; + var promisifier = options.promisifier; + if (typeof promisifier !== "function") promisifier = makeNodePromisified; + + if (!util.isIdentifier(suffix)) { + throw new RangeError("suffix must be a valid identifier\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + + var keys = util.inheritedDataKeys(target); + for (var i = 0; i < keys.length; ++i) { + var value = target[keys[i]]; + if (keys[i] !== "constructor" && + util.isClass(value)) { + promisifyAll(value.prototype, suffix, filter, promisifier, + multiArgs); + promisifyAll(value, suffix, filter, promisifier, multiArgs); + } + } + + return promisifyAll(target, suffix, filter, promisifier, multiArgs); +}; +}; + + +},{"./errors":12,"./nodeback":20,"./util":36}],25:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function( + Promise, PromiseArray, tryConvertToPromise, apiRejection) { +var util = _dereq_("./util"); +var isObject = util.isObject; +var es5 = _dereq_("./es5"); +var Es6Map; +if (typeof Map === "function") Es6Map = Map; + +var mapToEntries = (function() { + var index = 0; + var size = 0; + + function extractEntry(value, key) { + this[index] = value; + this[index + size] = key; + index++; + } + + return function mapToEntries(map) { + size = map.size; + index = 0; + var ret = new Array(map.size * 2); + map.forEach(extractEntry, ret); + return ret; + }; +})(); + +var entriesToMap = function(entries) { + var ret = new Es6Map(); + var length = entries.length / 2 | 0; + for (var i = 0; i < length; ++i) { + var key = entries[length + i]; + var value = entries[i]; + ret.set(key, value); + } + return ret; +}; + +function PropertiesPromiseArray(obj) { + var isMap = false; + var entries; + if (Es6Map !== undefined && obj instanceof Es6Map) { + entries = mapToEntries(obj); + isMap = true; + } else { + var keys = es5.keys(obj); + var len = keys.length; + entries = new Array(len * 2); + for (var i = 0; i < len; ++i) { + var key = keys[i]; + entries[i] = obj[key]; + entries[i + len] = key; + } + } + this.constructor$(entries); + this._isMap = isMap; + this._init$(undefined, isMap ? -6 : -3); +} +util.inherits(PropertiesPromiseArray, PromiseArray); + +PropertiesPromiseArray.prototype._init = function () {}; + +PropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) { + this._values[index] = value; + var totalResolved = ++this._totalResolved; + if (totalResolved >= this._length) { + var val; + if (this._isMap) { + val = entriesToMap(this._values); + } else { + val = {}; + var keyOffset = this.length(); + for (var i = 0, len = this.length(); i < len; ++i) { + val[this._values[i + keyOffset]] = this._values[i]; + } + } + this._resolve(val); + return true; + } + return false; +}; + +PropertiesPromiseArray.prototype.shouldCopyValues = function () { + return false; +}; + +PropertiesPromiseArray.prototype.getActualLength = function (len) { + return len >> 1; +}; + +function props(promises) { + var ret; + var castValue = tryConvertToPromise(promises); + + if (!isObject(castValue)) { + return apiRejection("cannot await properties of a non-object\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } else if (castValue instanceof Promise) { + ret = castValue._then( + Promise.props, undefined, undefined, undefined, undefined); + } else { + ret = new PropertiesPromiseArray(castValue).promise(); + } + + if (castValue instanceof Promise) { + ret._propagateFrom(castValue, 2); + } + return ret; +} + +Promise.prototype.props = function () { + return props(this); +}; + +Promise.props = function (promises) { + return props(promises); +}; +}; + +},{"./es5":13,"./util":36}],26:[function(_dereq_,module,exports){ +"use strict"; +function arrayMove(src, srcIndex, dst, dstIndex, len) { + for (var j = 0; j < len; ++j) { + dst[j + dstIndex] = src[j + srcIndex]; + src[j + srcIndex] = void 0; + } +} + +function Queue(capacity) { + this._capacity = capacity; + this._length = 0; + this._front = 0; +} + +Queue.prototype._willBeOverCapacity = function (size) { + return this._capacity < size; +}; + +Queue.prototype._pushOne = function (arg) { + var length = this.length(); + this._checkCapacity(length + 1); + var i = (this._front + length) & (this._capacity - 1); + this[i] = arg; + this._length = length + 1; +}; + +Queue.prototype.push = function (fn, receiver, arg) { + var length = this.length() + 3; + if (this._willBeOverCapacity(length)) { + this._pushOne(fn); + this._pushOne(receiver); + this._pushOne(arg); + return; + } + var j = this._front + length - 3; + this._checkCapacity(length); + var wrapMask = this._capacity - 1; + this[(j + 0) & wrapMask] = fn; + this[(j + 1) & wrapMask] = receiver; + this[(j + 2) & wrapMask] = arg; + this._length = length; +}; + +Queue.prototype.shift = function () { + var front = this._front, + ret = this[front]; + + this[front] = undefined; + this._front = (front + 1) & (this._capacity - 1); + this._length--; + return ret; +}; + +Queue.prototype.length = function () { + return this._length; +}; + +Queue.prototype._checkCapacity = function (size) { + if (this._capacity < size) { + this._resizeTo(this._capacity << 1); + } +}; + +Queue.prototype._resizeTo = function (capacity) { + var oldCapacity = this._capacity; + this._capacity = capacity; + var front = this._front; + var length = this._length; + var moveItemsCount = (front + length) & (oldCapacity - 1); + arrayMove(this, 0, this, oldCapacity, moveItemsCount); +}; + +module.exports = Queue; + +},{}],27:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function( + Promise, INTERNAL, tryConvertToPromise, apiRejection) { +var util = _dereq_("./util"); + +var raceLater = function (promise) { + return promise.then(function(array) { + return race(array, promise); + }); +}; + +function race(promises, parent) { + var maybePromise = tryConvertToPromise(promises); + + if (maybePromise instanceof Promise) { + return raceLater(maybePromise); + } else { + promises = util.asArray(promises); + if (promises === null) + return apiRejection("expecting an array or an iterable object but got " + util.classString(promises)); + } + + var ret = new Promise(INTERNAL); + if (parent !== undefined) { + ret._propagateFrom(parent, 3); + } + var fulfill = ret._fulfill; + var reject = ret._reject; + for (var i = 0, len = promises.length; i < len; ++i) { + var val = promises[i]; + + if (val === undefined && !(i in promises)) { + continue; + } + + Promise.cast(val)._then(fulfill, reject, undefined, ret, null); + } + return ret; +} + +Promise.race = function (promises) { + return race(promises, undefined); +}; + +Promise.prototype.race = function () { + return race(this, undefined); +}; + +}; + +},{"./util":36}],28:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, + PromiseArray, + apiRejection, + tryConvertToPromise, + INTERNAL, + debug) { +var getDomain = Promise._getDomain; +var util = _dereq_("./util"); +var tryCatch = util.tryCatch; + +function ReductionPromiseArray(promises, fn, initialValue, _each) { + this.constructor$(promises); + var domain = getDomain(); + this._fn = domain === null ? fn : util.domainBind(domain, fn); + if (initialValue !== undefined) { + initialValue = Promise.resolve(initialValue); + initialValue._attachCancellationCallback(this); + } + this._initialValue = initialValue; + this._currentCancellable = null; + if(_each === INTERNAL) { + this._eachValues = Array(this._length); + } else if (_each === 0) { + this._eachValues = null; + } else { + this._eachValues = undefined; + } + this._promise._captureStackTrace(); + this._init$(undefined, -5); +} +util.inherits(ReductionPromiseArray, PromiseArray); + +ReductionPromiseArray.prototype._gotAccum = function(accum) { + if (this._eachValues !== undefined && + this._eachValues !== null && + accum !== INTERNAL) { + this._eachValues.push(accum); + } +}; + +ReductionPromiseArray.prototype._eachComplete = function(value) { + if (this._eachValues !== null) { + this._eachValues.push(value); + } + return this._eachValues; +}; + +ReductionPromiseArray.prototype._init = function() {}; + +ReductionPromiseArray.prototype._resolveEmptyArray = function() { + this._resolve(this._eachValues !== undefined ? this._eachValues + : this._initialValue); +}; + +ReductionPromiseArray.prototype.shouldCopyValues = function () { + return false; +}; + +ReductionPromiseArray.prototype._resolve = function(value) { + this._promise._resolveCallback(value); + this._values = null; +}; + +ReductionPromiseArray.prototype._resultCancelled = function(sender) { + if (sender === this._initialValue) return this._cancel(); + if (this._isResolved()) return; + this._resultCancelled$(); + if (this._currentCancellable instanceof Promise) { + this._currentCancellable.cancel(); + } + if (this._initialValue instanceof Promise) { + this._initialValue.cancel(); + } +}; + +ReductionPromiseArray.prototype._iterate = function (values) { + this._values = values; + var value; + var i; + var length = values.length; + if (this._initialValue !== undefined) { + value = this._initialValue; + i = 0; + } else { + value = Promise.resolve(values[0]); + i = 1; + } + + this._currentCancellable = value; + + if (!value.isRejected()) { + for (; i < length; ++i) { + var ctx = { + accum: null, + value: values[i], + index: i, + length: length, + array: this + }; + value = value._then(gotAccum, undefined, undefined, ctx, undefined); + } + } + + if (this._eachValues !== undefined) { + value = value + ._then(this._eachComplete, undefined, undefined, this, undefined); + } + value._then(completed, completed, undefined, value, this); +}; + +Promise.prototype.reduce = function (fn, initialValue) { + return reduce(this, fn, initialValue, null); +}; + +Promise.reduce = function (promises, fn, initialValue, _each) { + return reduce(promises, fn, initialValue, _each); +}; + +function completed(valueOrReason, array) { + if (this.isFulfilled()) { + array._resolve(valueOrReason); + } else { + array._reject(valueOrReason); + } +} + +function reduce(promises, fn, initialValue, _each) { + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + var array = new ReductionPromiseArray(promises, fn, initialValue, _each); + return array.promise(); +} + +function gotAccum(accum) { + this.accum = accum; + this.array._gotAccum(accum); + var value = tryConvertToPromise(this.value, this.array._promise); + if (value instanceof Promise) { + this.array._currentCancellable = value; + return value._then(gotValue, undefined, undefined, this, undefined); + } else { + return gotValue.call(this, value); + } +} + +function gotValue(value) { + var array = this.array; + var promise = array._promise; + var fn = tryCatch(array._fn); + promise._pushContext(); + var ret; + if (array._eachValues !== undefined) { + ret = fn.call(promise._boundValue(), value, this.index, this.length); + } else { + ret = fn.call(promise._boundValue(), + this.accum, value, this.index, this.length); + } + if (ret instanceof Promise) { + array._currentCancellable = ret; + } + var promiseCreated = promise._popContext(); + debug.checkForgottenReturns( + ret, + promiseCreated, + array._eachValues !== undefined ? "Promise.each" : "Promise.reduce", + promise + ); + return ret; +} +}; + +},{"./util":36}],29:[function(_dereq_,module,exports){ +"use strict"; +var util = _dereq_("./util"); +var schedule; +var noAsyncScheduler = function() { + throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/MqrFmX\u000a"); +}; +var NativePromise = util.getNativePromise(); +if (util.isNode && typeof MutationObserver === "undefined") { + var GlobalSetImmediate = global.setImmediate; + var ProcessNextTick = process.nextTick; + schedule = util.isRecentNode + ? function(fn) { GlobalSetImmediate.call(global, fn); } + : function(fn) { ProcessNextTick.call(process, fn); }; +} else if (typeof NativePromise === "function" && + typeof NativePromise.resolve === "function") { + var nativePromise = NativePromise.resolve(); + schedule = function(fn) { + nativePromise.then(fn); + }; +} else if ((typeof MutationObserver !== "undefined") && + !(typeof window !== "undefined" && + window.navigator && + (window.navigator.standalone || window.cordova))) { + schedule = (function() { + var div = document.createElement("div"); + var opts = {attributes: true}; + var toggleScheduled = false; + var div2 = document.createElement("div"); + var o2 = new MutationObserver(function() { + div.classList.toggle("foo"); + toggleScheduled = false; + }); + o2.observe(div2, opts); + + var scheduleToggle = function() { + if (toggleScheduled) return; + toggleScheduled = true; + div2.classList.toggle("foo"); + }; + + return function schedule(fn) { + var o = new MutationObserver(function() { + o.disconnect(); + fn(); + }); + o.observe(div, opts); + scheduleToggle(); + }; + })(); +} else if (typeof setImmediate !== "undefined") { + schedule = function (fn) { + setImmediate(fn); + }; +} else if (typeof setTimeout !== "undefined") { + schedule = function (fn) { + setTimeout(fn, 0); + }; +} else { + schedule = noAsyncScheduler; +} +module.exports = schedule; + +},{"./util":36}],30:[function(_dereq_,module,exports){ +"use strict"; +module.exports = + function(Promise, PromiseArray, debug) { +var PromiseInspection = Promise.PromiseInspection; +var util = _dereq_("./util"); + +function SettledPromiseArray(values) { + this.constructor$(values); +} +util.inherits(SettledPromiseArray, PromiseArray); + +SettledPromiseArray.prototype._promiseResolved = function (index, inspection) { + this._values[index] = inspection; + var totalResolved = ++this._totalResolved; + if (totalResolved >= this._length) { + this._resolve(this._values); + return true; + } + return false; +}; + +SettledPromiseArray.prototype._promiseFulfilled = function (value, index) { + var ret = new PromiseInspection(); + ret._bitField = 33554432; + ret._settledValueField = value; + return this._promiseResolved(index, ret); +}; +SettledPromiseArray.prototype._promiseRejected = function (reason, index) { + var ret = new PromiseInspection(); + ret._bitField = 16777216; + ret._settledValueField = reason; + return this._promiseResolved(index, ret); +}; + +Promise.settle = function (promises) { + debug.deprecated(".settle()", ".reflect()"); + return new SettledPromiseArray(promises).promise(); +}; + +Promise.prototype.settle = function () { + return Promise.settle(this); +}; +}; + +},{"./util":36}],31:[function(_dereq_,module,exports){ +"use strict"; +module.exports = +function(Promise, PromiseArray, apiRejection) { +var util = _dereq_("./util"); +var RangeError = _dereq_("./errors").RangeError; +var AggregateError = _dereq_("./errors").AggregateError; +var isArray = util.isArray; +var CANCELLATION = {}; + + +function SomePromiseArray(values) { + this.constructor$(values); + this._howMany = 0; + this._unwrap = false; + this._initialized = false; +} +util.inherits(SomePromiseArray, PromiseArray); + +SomePromiseArray.prototype._init = function () { + if (!this._initialized) { + return; + } + if (this._howMany === 0) { + this._resolve([]); + return; + } + this._init$(undefined, -5); + var isArrayResolved = isArray(this._values); + if (!this._isResolved() && + isArrayResolved && + this._howMany > this._canPossiblyFulfill()) { + this._reject(this._getRangeError(this.length())); + } +}; + +SomePromiseArray.prototype.init = function () { + this._initialized = true; + this._init(); +}; + +SomePromiseArray.prototype.setUnwrap = function () { + this._unwrap = true; +}; + +SomePromiseArray.prototype.howMany = function () { + return this._howMany; +}; + +SomePromiseArray.prototype.setHowMany = function (count) { + this._howMany = count; +}; + +SomePromiseArray.prototype._promiseFulfilled = function (value) { + this._addFulfilled(value); + if (this._fulfilled() === this.howMany()) { + this._values.length = this.howMany(); + if (this.howMany() === 1 && this._unwrap) { + this._resolve(this._values[0]); + } else { + this._resolve(this._values); + } + return true; + } + return false; + +}; +SomePromiseArray.prototype._promiseRejected = function (reason) { + this._addRejected(reason); + return this._checkOutcome(); +}; + +SomePromiseArray.prototype._promiseCancelled = function () { + if (this._values instanceof Promise || this._values == null) { + return this._cancel(); + } + this._addRejected(CANCELLATION); + return this._checkOutcome(); +}; + +SomePromiseArray.prototype._checkOutcome = function() { + if (this.howMany() > this._canPossiblyFulfill()) { + var e = new AggregateError(); + for (var i = this.length(); i < this._values.length; ++i) { + if (this._values[i] !== CANCELLATION) { + e.push(this._values[i]); + } + } + if (e.length > 0) { + this._reject(e); + } else { + this._cancel(); + } + return true; + } + return false; +}; + +SomePromiseArray.prototype._fulfilled = function () { + return this._totalResolved; +}; + +SomePromiseArray.prototype._rejected = function () { + return this._values.length - this.length(); +}; + +SomePromiseArray.prototype._addRejected = function (reason) { + this._values.push(reason); +}; + +SomePromiseArray.prototype._addFulfilled = function (value) { + this._values[this._totalResolved++] = value; +}; + +SomePromiseArray.prototype._canPossiblyFulfill = function () { + return this.length() - this._rejected(); +}; + +SomePromiseArray.prototype._getRangeError = function (count) { + var message = "Input array must contain at least " + + this._howMany + " items but contains only " + count + " items"; + return new RangeError(message); +}; + +SomePromiseArray.prototype._resolveEmptyArray = function () { + this._reject(this._getRangeError(0)); +}; + +function some(promises, howMany) { + if ((howMany | 0) !== howMany || howMany < 0) { + return apiRejection("expecting a positive integer\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + var ret = new SomePromiseArray(promises); + var promise = ret.promise(); + ret.setHowMany(howMany); + ret.init(); + return promise; +} + +Promise.some = function (promises, howMany) { + return some(promises, howMany); +}; + +Promise.prototype.some = function (howMany) { + return some(this, howMany); +}; + +Promise._SomePromiseArray = SomePromiseArray; +}; + +},{"./errors":12,"./util":36}],32:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise) { +function PromiseInspection(promise) { + if (promise !== undefined) { + promise = promise._target(); + this._bitField = promise._bitField; + this._settledValueField = promise._isFateSealed() + ? promise._settledValue() : undefined; + } + else { + this._bitField = 0; + this._settledValueField = undefined; + } +} + +PromiseInspection.prototype._settledValue = function() { + return this._settledValueField; +}; + +var value = PromiseInspection.prototype.value = function () { + if (!this.isFulfilled()) { + throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + return this._settledValue(); +}; + +var reason = PromiseInspection.prototype.error = +PromiseInspection.prototype.reason = function () { + if (!this.isRejected()) { + throw new TypeError("cannot get rejection reason of a non-rejected promise\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + return this._settledValue(); +}; + +var isFulfilled = PromiseInspection.prototype.isFulfilled = function() { + return (this._bitField & 33554432) !== 0; +}; + +var isRejected = PromiseInspection.prototype.isRejected = function () { + return (this._bitField & 16777216) !== 0; +}; + +var isPending = PromiseInspection.prototype.isPending = function () { + return (this._bitField & 50397184) === 0; +}; + +var isResolved = PromiseInspection.prototype.isResolved = function () { + return (this._bitField & 50331648) !== 0; +}; + +PromiseInspection.prototype.isCancelled = function() { + return (this._bitField & 8454144) !== 0; +}; + +Promise.prototype.__isCancelled = function() { + return (this._bitField & 65536) === 65536; +}; + +Promise.prototype._isCancelled = function() { + return this._target().__isCancelled(); +}; + +Promise.prototype.isCancelled = function() { + return (this._target()._bitField & 8454144) !== 0; +}; + +Promise.prototype.isPending = function() { + return isPending.call(this._target()); +}; + +Promise.prototype.isRejected = function() { + return isRejected.call(this._target()); +}; + +Promise.prototype.isFulfilled = function() { + return isFulfilled.call(this._target()); +}; + +Promise.prototype.isResolved = function() { + return isResolved.call(this._target()); +}; + +Promise.prototype.value = function() { + return value.call(this._target()); +}; + +Promise.prototype.reason = function() { + var target = this._target(); + target._unsetRejectionIsUnhandled(); + return reason.call(target); +}; + +Promise.prototype._value = function() { + return this._settledValue(); +}; + +Promise.prototype._reason = function() { + this._unsetRejectionIsUnhandled(); + return this._settledValue(); +}; + +Promise.PromiseInspection = PromiseInspection; +}; + +},{}],33:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var util = _dereq_("./util"); +var errorObj = util.errorObj; +var isObject = util.isObject; + +function tryConvertToPromise(obj, context) { + if (isObject(obj)) { + if (obj instanceof Promise) return obj; + var then = getThen(obj); + if (then === errorObj) { + if (context) context._pushContext(); + var ret = Promise.reject(then.e); + if (context) context._popContext(); + return ret; + } else if (typeof then === "function") { + if (isAnyBluebirdPromise(obj)) { + var ret = new Promise(INTERNAL); + obj._then( + ret._fulfill, + ret._reject, + undefined, + ret, + null + ); + return ret; + } + return doThenable(obj, then, context); + } + } + return obj; +} + +function doGetThen(obj) { + return obj.then; +} + +function getThen(obj) { + try { + return doGetThen(obj); + } catch (e) { + errorObj.e = e; + return errorObj; + } +} + +var hasProp = {}.hasOwnProperty; +function isAnyBluebirdPromise(obj) { + try { + return hasProp.call(obj, "_promise0"); + } catch (e) { + return false; + } +} + +function doThenable(x, then, context) { + var promise = new Promise(INTERNAL); + var ret = promise; + if (context) context._pushContext(); + promise._captureStackTrace(); + if (context) context._popContext(); + var synchronous = true; + var result = util.tryCatch(then).call(x, resolve, reject); + synchronous = false; + + if (promise && result === errorObj) { + promise._rejectCallback(result.e, true, true); + promise = null; + } + + function resolve(value) { + if (!promise) return; + promise._resolveCallback(value); + promise = null; + } + + function reject(reason) { + if (!promise) return; + promise._rejectCallback(reason, synchronous, true); + promise = null; + } + return ret; +} + +return tryConvertToPromise; +}; + +},{"./util":36}],34:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL, debug) { +var util = _dereq_("./util"); +var TimeoutError = Promise.TimeoutError; + +function HandleWrapper(handle) { + this.handle = handle; +} + +HandleWrapper.prototype._resultCancelled = function() { + clearTimeout(this.handle); +}; + +var afterValue = function(value) { return delay(+this).thenReturn(value); }; +var delay = Promise.delay = function (ms, value) { + var ret; + var handle; + if (value !== undefined) { + ret = Promise.resolve(value) + ._then(afterValue, null, null, ms, undefined); + if (debug.cancellation() && value instanceof Promise) { + ret._setOnCancel(value); + } + } else { + ret = new Promise(INTERNAL); + handle = setTimeout(function() { ret._fulfill(); }, +ms); + if (debug.cancellation()) { + ret._setOnCancel(new HandleWrapper(handle)); + } + ret._captureStackTrace(); + } + ret._setAsyncGuaranteed(); + return ret; +}; + +Promise.prototype.delay = function (ms) { + return delay(ms, this); +}; + +var afterTimeout = function (promise, message, parent) { + var err; + if (typeof message !== "string") { + if (message instanceof Error) { + err = message; + } else { + err = new TimeoutError("operation timed out"); + } + } else { + err = new TimeoutError(message); + } + util.markAsOriginatingFromRejection(err); + promise._attachExtraTrace(err); + promise._reject(err); + + if (parent != null) { + parent.cancel(); + } +}; + +function successClear(value) { + clearTimeout(this.handle); + return value; +} + +function failureClear(reason) { + clearTimeout(this.handle); + throw reason; +} + +Promise.prototype.timeout = function (ms, message) { + ms = +ms; + var ret, parent; + + var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() { + if (ret.isPending()) { + afterTimeout(ret, message, parent); + } + }, ms)); + + if (debug.cancellation()) { + parent = this.then(); + ret = parent._then(successClear, failureClear, + undefined, handleWrapper, undefined); + ret._setOnCancel(handleWrapper); + } else { + ret = this._then(successClear, failureClear, + undefined, handleWrapper, undefined); + } + + return ret; +}; + +}; + +},{"./util":36}],35:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function (Promise, apiRejection, tryConvertToPromise, + createContext, INTERNAL, debug) { + var util = _dereq_("./util"); + var TypeError = _dereq_("./errors").TypeError; + var inherits = _dereq_("./util").inherits; + var errorObj = util.errorObj; + var tryCatch = util.tryCatch; + var NULL = {}; + + function thrower(e) { + setTimeout(function(){throw e;}, 0); + } + + function castPreservingDisposable(thenable) { + var maybePromise = tryConvertToPromise(thenable); + if (maybePromise !== thenable && + typeof thenable._isDisposable === "function" && + typeof thenable._getDisposer === "function" && + thenable._isDisposable()) { + maybePromise._setDisposable(thenable._getDisposer()); + } + return maybePromise; + } + function dispose(resources, inspection) { + var i = 0; + var len = resources.length; + var ret = new Promise(INTERNAL); + function iterator() { + if (i >= len) return ret._fulfill(); + var maybePromise = castPreservingDisposable(resources[i++]); + if (maybePromise instanceof Promise && + maybePromise._isDisposable()) { + try { + maybePromise = tryConvertToPromise( + maybePromise._getDisposer().tryDispose(inspection), + resources.promise); + } catch (e) { + return thrower(e); + } + if (maybePromise instanceof Promise) { + return maybePromise._then(iterator, thrower, + null, null, null); + } + } + iterator(); + } + iterator(); + return ret; + } + + function Disposer(data, promise, context) { + this._data = data; + this._promise = promise; + this._context = context; + } + + Disposer.prototype.data = function () { + return this._data; + }; + + Disposer.prototype.promise = function () { + return this._promise; + }; + + Disposer.prototype.resource = function () { + if (this.promise().isFulfilled()) { + return this.promise().value(); + } + return NULL; + }; + + Disposer.prototype.tryDispose = function(inspection) { + var resource = this.resource(); + var context = this._context; + if (context !== undefined) context._pushContext(); + var ret = resource !== NULL + ? this.doDispose(resource, inspection) : null; + if (context !== undefined) context._popContext(); + this._promise._unsetDisposable(); + this._data = null; + return ret; + }; + + Disposer.isDisposer = function (d) { + return (d != null && + typeof d.resource === "function" && + typeof d.tryDispose === "function"); + }; + + function FunctionDisposer(fn, promise, context) { + this.constructor$(fn, promise, context); + } + inherits(FunctionDisposer, Disposer); + + FunctionDisposer.prototype.doDispose = function (resource, inspection) { + var fn = this.data(); + return fn.call(resource, resource, inspection); + }; + + function maybeUnwrapDisposer(value) { + if (Disposer.isDisposer(value)) { + this.resources[this.index]._setDisposable(value); + return value.promise(); + } + return value; + } + + function ResourceList(length) { + this.length = length; + this.promise = null; + this[length-1] = null; + } + + ResourceList.prototype._resultCancelled = function() { + var len = this.length; + for (var i = 0; i < len; ++i) { + var item = this[i]; + if (item instanceof Promise) { + item.cancel(); + } + } + }; + + Promise.using = function () { + var len = arguments.length; + if (len < 2) return apiRejection( + "you must pass at least 2 arguments to Promise.using"); + var fn = arguments[len - 1]; + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + var input; + var spreadArgs = true; + if (len === 2 && Array.isArray(arguments[0])) { + input = arguments[0]; + len = input.length; + spreadArgs = false; + } else { + input = arguments; + len--; + } + var resources = new ResourceList(len); + for (var i = 0; i < len; ++i) { + var resource = input[i]; + if (Disposer.isDisposer(resource)) { + var disposer = resource; + resource = resource.promise(); + resource._setDisposable(disposer); + } else { + var maybePromise = tryConvertToPromise(resource); + if (maybePromise instanceof Promise) { + resource = + maybePromise._then(maybeUnwrapDisposer, null, null, { + resources: resources, + index: i + }, undefined); + } + } + resources[i] = resource; + } + + var reflectedResources = new Array(resources.length); + for (var i = 0; i < reflectedResources.length; ++i) { + reflectedResources[i] = Promise.resolve(resources[i]).reflect(); + } + + var resultPromise = Promise.all(reflectedResources) + .then(function(inspections) { + for (var i = 0; i < inspections.length; ++i) { + var inspection = inspections[i]; + if (inspection.isRejected()) { + errorObj.e = inspection.error(); + return errorObj; + } else if (!inspection.isFulfilled()) { + resultPromise.cancel(); + return; + } + inspections[i] = inspection.value(); + } + promise._pushContext(); + + fn = tryCatch(fn); + var ret = spreadArgs + ? fn.apply(undefined, inspections) : fn(inspections); + var promiseCreated = promise._popContext(); + debug.checkForgottenReturns( + ret, promiseCreated, "Promise.using", promise); + return ret; + }); + + var promise = resultPromise.lastly(function() { + var inspection = new Promise.PromiseInspection(resultPromise); + return dispose(resources, inspection); + }); + resources.promise = promise; + promise._setOnCancel(resources); + return promise; + }; + + Promise.prototype._setDisposable = function (disposer) { + this._bitField = this._bitField | 131072; + this._disposer = disposer; + }; + + Promise.prototype._isDisposable = function () { + return (this._bitField & 131072) > 0; + }; + + Promise.prototype._getDisposer = function () { + return this._disposer; + }; + + Promise.prototype._unsetDisposable = function () { + this._bitField = this._bitField & (~131072); + this._disposer = undefined; + }; + + Promise.prototype.disposer = function (fn) { + if (typeof fn === "function") { + return new FunctionDisposer(fn, this, createContext()); + } + throw new TypeError(); + }; + +}; + +},{"./errors":12,"./util":36}],36:[function(_dereq_,module,exports){ +"use strict"; +var es5 = _dereq_("./es5"); +var canEvaluate = typeof navigator == "undefined"; + +var errorObj = {e: {}}; +var tryCatchTarget; +var globalObject = typeof self !== "undefined" ? self : + typeof window !== "undefined" ? window : + typeof global !== "undefined" ? global : + this !== undefined ? this : null; + +function tryCatcher() { + try { + var target = tryCatchTarget; + tryCatchTarget = null; + return target.apply(this, arguments); + } catch (e) { + errorObj.e = e; + return errorObj; + } +} +function tryCatch(fn) { + tryCatchTarget = fn; + return tryCatcher; +} + +var inherits = function(Child, Parent) { + var hasProp = {}.hasOwnProperty; + + function T() { + this.constructor = Child; + this.constructor$ = Parent; + for (var propertyName in Parent.prototype) { + if (hasProp.call(Parent.prototype, propertyName) && + propertyName.charAt(propertyName.length-1) !== "$" + ) { + this[propertyName + "$"] = Parent.prototype[propertyName]; + } + } + } + T.prototype = Parent.prototype; + Child.prototype = new T(); + return Child.prototype; +}; + + +function isPrimitive(val) { + return val == null || val === true || val === false || + typeof val === "string" || typeof val === "number"; + +} + +function isObject(value) { + return typeof value === "function" || + typeof value === "object" && value !== null; +} + +function maybeWrapAsError(maybeError) { + if (!isPrimitive(maybeError)) return maybeError; + + return new Error(safeToString(maybeError)); +} + +function withAppended(target, appendee) { + var len = target.length; + var ret = new Array(len + 1); + var i; + for (i = 0; i < len; ++i) { + ret[i] = target[i]; + } + ret[i] = appendee; + return ret; +} + +function getDataPropertyOrDefault(obj, key, defaultValue) { + if (es5.isES5) { + var desc = Object.getOwnPropertyDescriptor(obj, key); + + if (desc != null) { + return desc.get == null && desc.set == null + ? desc.value + : defaultValue; + } + } else { + return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined; + } +} + +function notEnumerableProp(obj, name, value) { + if (isPrimitive(obj)) return obj; + var descriptor = { + value: value, + configurable: true, + enumerable: false, + writable: true + }; + es5.defineProperty(obj, name, descriptor); + return obj; +} + +function thrower(r) { + throw r; +} + +var inheritedDataKeys = (function() { + var excludedPrototypes = [ + Array.prototype, + Object.prototype, + Function.prototype + ]; + + var isExcludedProto = function(val) { + for (var i = 0; i < excludedPrototypes.length; ++i) { + if (excludedPrototypes[i] === val) { + return true; + } + } + return false; + }; + + if (es5.isES5) { + var getKeys = Object.getOwnPropertyNames; + return function(obj) { + var ret = []; + var visitedKeys = Object.create(null); + while (obj != null && !isExcludedProto(obj)) { + var keys; + try { + keys = getKeys(obj); + } catch (e) { + return ret; + } + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (visitedKeys[key]) continue; + visitedKeys[key] = true; + var desc = Object.getOwnPropertyDescriptor(obj, key); + if (desc != null && desc.get == null && desc.set == null) { + ret.push(key); + } + } + obj = es5.getPrototypeOf(obj); + } + return ret; + }; + } else { + var hasProp = {}.hasOwnProperty; + return function(obj) { + if (isExcludedProto(obj)) return []; + var ret = []; + + /*jshint forin:false */ + enumeration: for (var key in obj) { + if (hasProp.call(obj, key)) { + ret.push(key); + } else { + for (var i = 0; i < excludedPrototypes.length; ++i) { + if (hasProp.call(excludedPrototypes[i], key)) { + continue enumeration; + } + } + ret.push(key); + } + } + return ret; + }; + } + +})(); + +var thisAssignmentPattern = /this\s*\.\s*\S+\s*=/; +function isClass(fn) { + try { + if (typeof fn === "function") { + var keys = es5.names(fn.prototype); + + var hasMethods = es5.isES5 && keys.length > 1; + var hasMethodsOtherThanConstructor = keys.length > 0 && + !(keys.length === 1 && keys[0] === "constructor"); + var hasThisAssignmentAndStaticMethods = + thisAssignmentPattern.test(fn + "") && es5.names(fn).length > 0; + + if (hasMethods || hasMethodsOtherThanConstructor || + hasThisAssignmentAndStaticMethods) { + return true; + } + } + return false; + } catch (e) { + return false; + } +} + +function toFastProperties(obj) { + /*jshint -W027,-W055,-W031*/ + function FakeConstructor() {} + FakeConstructor.prototype = obj; + var l = 8; + while (l--) new FakeConstructor(); + return obj; + eval(obj); +} + +var rident = /^[a-z$_][a-z$_0-9]*$/i; +function isIdentifier(str) { + return rident.test(str); +} + +function filledRange(count, prefix, suffix) { + var ret = new Array(count); + for(var i = 0; i < count; ++i) { + ret[i] = prefix + i + suffix; + } + return ret; +} + +function safeToString(obj) { + try { + return obj + ""; + } catch (e) { + return "[no string representation]"; + } +} + +function isError(obj) { + return obj !== null && + typeof obj === "object" && + typeof obj.message === "string" && + typeof obj.name === "string"; +} + +function markAsOriginatingFromRejection(e) { + try { + notEnumerableProp(e, "isOperational", true); + } + catch(ignore) {} +} + +function originatesFromRejection(e) { + if (e == null) return false; + return ((e instanceof Error["__BluebirdErrorTypes__"].OperationalError) || + e["isOperational"] === true); +} + +function canAttachTrace(obj) { + return isError(obj) && es5.propertyIsWritable(obj, "stack"); +} + +var ensureErrorObject = (function() { + if (!("stack" in new Error())) { + return function(value) { + if (canAttachTrace(value)) return value; + try {throw new Error(safeToString(value));} + catch(err) {return err;} + }; + } else { + return function(value) { + if (canAttachTrace(value)) return value; + return new Error(safeToString(value)); + }; + } +})(); + +function classString(obj) { + return {}.toString.call(obj); +} + +function copyDescriptors(from, to, filter) { + var keys = es5.names(from); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (filter(key)) { + try { + es5.defineProperty(to, key, es5.getDescriptor(from, key)); + } catch (ignore) {} + } + } +} + +var asArray = function(v) { + if (es5.isArray(v)) { + return v; + } + return null; +}; + +if (typeof Symbol !== "undefined" && Symbol.iterator) { + var ArrayFrom = typeof Array.from === "function" ? function(v) { + return Array.from(v); + } : function(v) { + var ret = []; + var it = v[Symbol.iterator](); + var itResult; + while (!((itResult = it.next()).done)) { + ret.push(itResult.value); + } + return ret; + }; + + asArray = function(v) { + if (es5.isArray(v)) { + return v; + } else if (v != null && typeof v[Symbol.iterator] === "function") { + return ArrayFrom(v); + } + return null; + }; +} + +var isNode = typeof process !== "undefined" && + classString(process).toLowerCase() === "[object process]"; + +var hasEnvVariables = typeof process !== "undefined" && + typeof process.env !== "undefined"; + +function env(key) { + return hasEnvVariables ? process.env[key] : undefined; +} + +function getNativePromise() { + if (typeof Promise === "function") { + try { + var promise = new Promise(function(){}); + if ({}.toString.call(promise) === "[object Promise]") { + return Promise; + } + } catch (e) {} + } +} + +function domainBind(self, cb) { + return self.bind(cb); +} + +var ret = { + isClass: isClass, + isIdentifier: isIdentifier, + inheritedDataKeys: inheritedDataKeys, + getDataPropertyOrDefault: getDataPropertyOrDefault, + thrower: thrower, + isArray: es5.isArray, + asArray: asArray, + notEnumerableProp: notEnumerableProp, + isPrimitive: isPrimitive, + isObject: isObject, + isError: isError, + canEvaluate: canEvaluate, + errorObj: errorObj, + tryCatch: tryCatch, + inherits: inherits, + withAppended: withAppended, + maybeWrapAsError: maybeWrapAsError, + toFastProperties: toFastProperties, + filledRange: filledRange, + toString: safeToString, + canAttachTrace: canAttachTrace, + ensureErrorObject: ensureErrorObject, + originatesFromRejection: originatesFromRejection, + markAsOriginatingFromRejection: markAsOriginatingFromRejection, + classString: classString, + copyDescriptors: copyDescriptors, + hasDevTools: typeof chrome !== "undefined" && chrome && + typeof chrome.loadTimes === "function", + isNode: isNode, + hasEnvVariables: hasEnvVariables, + env: env, + global: globalObject, + getNativePromise: getNativePromise, + domainBind: domainBind +}; +ret.isRecentNode = ret.isNode && (function() { + var version = process.versions.node.split(".").map(Number); + return (version[0] === 0 && version[1] > 10) || (version[0] > 0); +})(); + +if (ret.isNode) ret.toFastProperties(process); + +try {throw new Error(); } catch (e) {ret.lastLineError = e;} +module.exports = ret; + +},{"./es5":13}]},{},[4])(4) +}); ;if (typeof window !== 'undefined' && window !== null) { window.P = window.Promise; } else if (typeof self !== 'undefined' && self !== null) { self.P = self.Promise; } \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/login/lib/bundle.css b/designer-base/src/main/resources/com/fr/design/login/lib/bundle.css new file mode 100644 index 0000000000..f9d1e0cd24 --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/login/lib/bundle.css @@ -0,0 +1,6540 @@ +/*! normalize.css v1.0.0 | MIT License | git.io/normalize */ +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section, +summary { + display: block; +} +audio, +canvas, +video { + display: inline-block; + *display: inline; + *zoom: 1; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden] { + display: none; +} +html { + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +html, +button, +input, +select, +textarea { + font-family: sans-serif; +} +body { + margin: 0; +} +a:focus { + outline: thin dotted; +} +a:active, +a:hover { + outline: 0; +} +h1 { + font-size: 2em; + margin: 0.67em 0; +} +h2 { + font-size: 1.5em; + margin: 0.83em 0; +} +h3 { + font-size: 1.17em; + margin: 1em 0; +} +h4 { + font-size: 1em; + margin: 1.33em 0; +} +h5 { + font-size: .83em; + margin: 1.67em 0; +} +h6 { + font-size: .75em; + margin: 2.33em 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +blockquote { + margin: 1em 40px; +} +dfn { + font-style: italic; +} +mark { + background: #ff0; + color: #000; +} +p, +pre { + margin: 1em 0; +} +code, +kbd, +pre, +samp { + font-family: monospace, serif; + _font-family: 'courier new', monospace; + font-size: 1em; +} +pre { + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} +q { + quotes: none; +} +q:before, +q:after { + content: ''; + content: none; +} +small { + font-size: 75%; +} +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +dl, +menu, +ol, +ul { + margin: 1em 0; +} +dd { + margin: 0 0 0 40px; +} +menu, +ol, +ul { + padding: 0 0 0 40px; +} +nav ul, +nav ol { + list-style: none; + list-style-image: none; +} +img { + border: 0; + -ms-interpolation-mode: bicubic; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 0; +} +form { + margin: 0; +} +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +legend { + border: 0; + padding: 0; + white-space: normal; + *margin-left: -7px; +} +button, +input, +select, +textarea { + font-size: 100%; + margin: 0; + vertical-align: baseline; + *vertical-align: middle; +} +button, +input { + line-height: normal; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; + *overflow: visible; +} +button[disabled], +input[disabled] { + cursor: default; +} +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; + *height: 13px; + *width: 13px; +} +input[type="search"] { + -webkit-appearance: textfield; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} +textarea { + overflow: auto; + vertical-align: top; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +html, +body, +div, +ul, +ol, +li, +img, +a, +span, +p, +* { + margin: 0; + padding: 0; +} +a { + outline: none; + text-decoration: none; +} +a:focus { + outline: 0; +} +div:focus { + outline: none; +} +input::-webkit-contacts-auto-fill-button { + visibility: hidden; + display: none !important; + pointer-events: none; + position: absolute; + right: 0; +} +input::-ms-clear { + display: none; +} +input, +textarea { + margin: 0; + padding: 0; + outline: none; +} +ul { + list-style: disc; +} +li { + list-style-type: none; +} +i { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/** 循环旋转动画 **/ +.anim-rotate { + -webkit-animation: rotate 1s infinite linear both; + -moz-animation: rotate 1s infinite linear both; + -ms-animation: rotate 1s infinite linear both; + -o-animation: rotate 1s infinite linear both; + animation: rotate 1s infinite linear both; +} +@-webkit-keyframes rotate { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} +@-moz-keyframes rotate { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} +@-ms-keyframes rotate { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} +@-o-keyframes rotate { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} +@keyframes rotate { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} +input, +textarea { + border: 1px solid #e8eaed; +} +.bi-theme-dark input, +.bi-theme-dark textarea { + border: 1px solid #363e55; +} +.base-disabled { + cursor: not-allowed !important; + color: #9ea6b2 !important; +} +.base-disabled .bi-input { + color: #9ea6b2 !important; +} +.base-disabled .bi-textarea { + color: #9ea6b2 !important; +} +.base-disabled .b-font:before { + color: #d0d4da !important; +} +.bi-theme-dark .base-disabled { + color: #878d9f !important; +} +.bi-theme-dark .base-disabled .bi-input { + color: #878d9f !important; +} +.bi-theme-dark .base-disabled .bi-textarea { + color: #878d9f !important; +} +.bi-theme-dark .base-disabled .b-font:before { + color: #606479 !important; +} +.bi-focus-shadow:focus-within, +.bi-focus-shadow:focus, +.bi-focus-shadow:hover { + border-color: #3685f2; +} +.bi-focus-shadow.disabled:hover { + border-color: #e8eaed; +} +.bi-theme-dark .bi-focus-shadow.disabled:hover { + border-color: #363e55; +} +.base-invalid { + cursor: default !important; +} +.clearfix { + *zoom: 1; +} +.clearfix:before, +.clearfix:after { + content: " "; + display: table; + line-height: 0; +} +.clearfix:after { + clear: both; +} +.bi-background { + background-color: #f7f8fa; + color: #3d4d66; +} +.bi-background .bi-input { + color: #3d4d66; +} +.bi-background .bi-textarea { + color: #3d4d66; +} +.bi-theme-dark .bi-background { + background-color: #191b2b; + color: #d6e0dc; +} +.bi-theme-dark .bi-background .bi-input { + color: #d6e0dc; +} +.bi-theme-dark .bi-background .bi-textarea { + color: #d6e0dc; +} +.bi-header-background { + background-color: #f2f4f7; + color: #647185; +} +.bi-header-background .bi-input { + color: #647185; +} +.bi-header-background .bi-textarea { + color: #647185; +} +.bi-theme-dark .bi-header-background { + background-color: #292f45; + color: #afb7c6; +} +.bi-theme-dark .bi-header-background .bi-input { + color: #afb7c6; +} +.bi-theme-dark .bi-header-background .bi-textarea { + color: #afb7c6; +} +.bi-card { + background-color: #ffffff; + color: #3d4d66; +} +.bi-card .bi-input { + color: #3d4d66; +} +.bi-card .bi-textarea { + color: #3d4d66; +} +.bi-theme-dark .bi-card { + background-color: #20263b; + color: #d6e0dc; +} +.bi-theme-dark .bi-card .bi-input { + color: #d6e0dc; +} +.bi-theme-dark .bi-card .bi-textarea { + color: #d6e0dc; +} +.bi-disabled { + color: #9ea6b2; +} +.bi-disabled .bi-input { + color: #9ea6b2; +} +.bi-disabled .bi-textarea { + color: #9ea6b2; +} +.bi-theme-dark .bi-disabled { + color: #878d9f; +} +.bi-theme-dark .bi-disabled .bi-input { + color: #878d9f; +} +.bi-theme-dark .bi-disabled .bi-textarea { + color: #878d9f; +} +.bi-tips { + color: #9ea6b2; +} +.bi-tips .bi-input { + color: #9ea6b2; +} +.bi-tips .bi-textarea { + color: #9ea6b2; +} +.bi-border { + border: 1px solid #e8eaed; +} +.bi-border.disabled { + border-color: #d0d4da !important; +} +.bi-border-top { + border-top: 1px solid #e8eaed; +} +.bi-border-top.disabled { + border-color: #d0d4da !important; +} +.bi-border-right { + border-right: 1px solid #e8eaed; +} +.bi-border-right.disabled { + border-color: #d0d4da !important; +} +.bi-border-bottom { + border-bottom: 1px solid #e8eaed; +} +.bi-border-bottom.disabled { + border-color: #d0d4da !important; +} +.bi-border-left { + border-left: 1px solid #e8eaed; +} +.bi-border-left.disabled { + border-color: #d0d4da !important; +} +.bi-theme-dark .bi-border { + border: 1px solid #363e55; +} +.bi-theme-dark .bi-border.disabled { + border-color: #606479 !important; +} +.bi-theme-dark .bi-border-top { + border-top: 1px solid #363e55; +} +.bi-theme-dark .bi-border-top.disabled { + border-color: #606479 !important; +} +.bi-theme-dark .bi-border-right { + border-right: 1px solid #363e55; +} +.bi-theme-dark .bi-border-right.disabled { + border-color: #606479 !important; +} +.bi-theme-dark .bi-border-bottom { + border-bottom: 1px solid #363e55; +} +.bi-theme-dark .bi-border-bottom.disabled { + border-color: #606479 !important; +} +.bi-theme-dark .bi-border-left { + border-left: 1px solid #363e55; +} +.bi-theme-dark .bi-border-left.disabled { + border-color: #606479 !important; +} +.bi-split { + border: 1px solid #f2f4f7; +} +.bi-split-top { + border-top: 1px solid #f2f4f7; +} +.bi-split-right { + border-right: 1px solid #f2f4f7; +} +.bi-split-bottom { + border-bottom: 1px solid #f2f4f7; +} +.bi-split-left { + border-left: 1px solid #f2f4f7; +} +.bi-theme-dark .bi-split { + border: 1px solid #292f45; +} +.bi-theme-dark .bi-split-top { + border-top: 1px solid #292f45; +} +.bi-theme-dark .bi-split-right { + border-right: 1px solid #292f45; +} +.bi-theme-dark .bi-split-bottom { + border-bottom: 1px solid #292f45; +} +.bi-theme-dark .bi-split-left { + border-left: 1px solid #292f45; +} +.bi-font-helvetica-neue { + font-family: "Helvetica Neue", Arial, Verdana, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", Heiti, serif; +} +.bi-font-verdana { + font-family: Verdana, "Helvetica Neue", Arial, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", Heiti, serif; +} +.bi-font-arial { + font-family: Arial, "Helvetica Neue", Verdana, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", Heiti, serif; +} +.bi-font-PingFang { + font-family: "PingFang SC", "Helvetica Neue", Verdana, Arial, "Hiragino Sans GB", "Microsoft YaHei", Heiti, serif; +} +.bi-font-hiragino-sans { + font-family: "Hiragino Sans GB", "Helvetica Neue", Verdana, Arial, "PingFang SC", "Microsoft YaHei", Heiti, serif; +} +.bi-font-microsoft-yaHei { + font-family: "Microsoft YaHei", "Helvetica Neue", Verdana, Arial, "PingFang SC", "Hiragino Sans GB", Heiti, serif; +} +.bi-font-heiti { + font-family: Heiti, "Helvetica Neue", Verdana, Arial, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", serif; +} +.bi-border-radius { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} +.bi-font-bold { + font-weight: 700; +} +.bi-keyword-red-mark { + color: #faaa39; +} +.bi-keyword-red-mark .bi-input { + color: #faaa39; +} +.bi-keyword-red-mark .bi-textarea { + color: #faaa39; +} +.bi-high-light { + color: #3685f2; +} +.bi-high-light .bi-input { + color: #3685f2; +} +.bi-high-light .bi-textarea { + color: #3685f2; +} +.bi-error { + color: #e65251; +} +.bi-error .bi-input { + color: #e65251; +} +.bi-error .bi-textarea { + color: #e65251; +} +.bi-high-light-background { + background-color: #3685f2; + color: #ffffff; +} +.bi-high-light-background .bi-input { + color: #ffffff; +} +.bi-high-light-background .bi-textarea { + color: #ffffff; +} +.bi-error-background { + background-color: #e65251; + color: #ffffff; +} +.bi-error-background .bi-input { + color: #ffffff; +} +.bi-error-background .bi-textarea { + color: #ffffff; +} +.bi-high-light-border { + border: 1px solid #3685f2; +} +.bi-high-light-border.disabled { + border-color: #d0d4da !important; +} +.bi-high-light-border-top { + border-top: 1px solid #3685f2; +} +.bi-high-light-border-top.disabled { + border-color: #d0d4da !important; +} +.bi-high-light-border-right { + border-right: 1px solid #3685f2; +} +.bi-high-light-border-right.disabled { + border-color: #d0d4da !important; +} +.bi-high-light-border-bottom { + border-bottom: 1px solid #3685f2; +} +.bi-high-light-border-bottom.disabled { + border-color: #d0d4da !important; +} +.bi-high-light-border-left { + border-left: 1px solid #3685f2; +} +.bi-high-light-border-left.disabled { + border-color: #d0d4da !important; +} +.bi-water-mark { + color: #9ea6b2; + cursor: text; +} +.bi-water-mark .bi-input { + color: #9ea6b2; +} +.bi-water-mark .bi-textarea { + color: #9ea6b2; +} +.bi-theme-dark .bi-water-mark { + color: #6b7084; +} +.bi-theme-dark .bi-water-mark .bi-input { + color: #6b7084; +} +.bi-theme-dark .bi-water-mark .bi-textarea { + color: #6b7084; +} +.bi-resizer { + background: #232E40; + opacity: 0.2; + filter: alpha(opacity=20); + z-index: 1000000000 !important; +} +.bi-theme-dark .bi-resizer { + background: #ffffff; +} +.bi-mask { + color: #ffffff; + background-color: rgba(35, 46, 64, 0.2); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#33232e40,endColorstr=#33232e40); +} +.bi-mask .bi-input { + color: #ffffff; +} +.bi-mask .bi-textarea { + color: #ffffff; +} +.bi-theme-dark .bi-mask { + color: #20263b; + background-color: rgba(255, 255, 255, 0.2); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#33ffffff,endColorstr=#33ffffff); +} +.bi-theme-dark .bi-mask .bi-input { + color: #20263b; +} +.bi-theme-dark .bi-mask .bi-textarea { + color: #20263b; +} +.bi-z-index-mask { + background-color: rgba(35, 46, 64, 0.5); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#80232e40,endColorstr=#80232e40); +} +.bi-theme-dark .bi-z-index-mask { + background-color: rgba(96, 100, 121, 0.5); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#80606479,endColorstr=#80606479); +} +.bi-list-item:hover, +.bi-list-item.hover { + color: #232e40; + background-color: rgba(54, 133, 242, 0.05); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#0d3685f2,endColorstr=#0d3685f2); +} +.bi-list-item:hover .bi-input, +.bi-list-item.hover .bi-input { + color: #232e40; +} +.bi-list-item:hover .bi-textarea, +.bi-list-item.hover .bi-textarea { + color: #232e40; +} +.bi-list-item.disabled, +.bi-list-item.disabled:hover, +.bi-list-item.disabled:active { + background-color: transparent !important; + color: #9ea6b2 !important; +} +.bi-list-item.disabled .bi-input, +.bi-list-item.disabled:hover .bi-input, +.bi-list-item.disabled:active .bi-input { + color: #9ea6b2 !important; +} +.bi-list-item.disabled .bi-textarea, +.bi-list-item.disabled:hover .bi-textarea, +.bi-list-item.disabled:active .bi-textarea { + color: #9ea6b2 !important; +} +.bi-list-item.disabled .bi-high-light, +.bi-list-item.disabled:hover .bi-high-light, +.bi-list-item.disabled:active .bi-high-light { + color: #9ea6b2 !important; +} +.bi-theme-dark .bi-list-item:hover, +.bi-theme-dark .bi-list-item.hover { + color: #ffffff; + background-color: rgba(54, 133, 242, 0.05); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#0d3685f2,endColorstr=#0d3685f2); +} +.bi-theme-dark .bi-list-item:hover .bi-input, +.bi-theme-dark .bi-list-item.hover .bi-input { + color: #ffffff; +} +.bi-theme-dark .bi-list-item:hover .bi-textarea, +.bi-theme-dark .bi-list-item.hover .bi-textarea { + color: #ffffff; +} +.bi-theme-dark .bi-list-item.disabled, +.bi-theme-dark .bi-list-item.disabled:hover, +.bi-theme-dark .bi-list-item.disabled:active { + background-color: transparent !important; + color: #878d9f !important; +} +.bi-theme-dark .bi-list-item.disabled .bi-input, +.bi-theme-dark .bi-list-item.disabled:hover .bi-input, +.bi-theme-dark .bi-list-item.disabled:active .bi-input { + color: #878d9f !important; +} +.bi-theme-dark .bi-list-item.disabled .bi-textarea, +.bi-theme-dark .bi-list-item.disabled:hover .bi-textarea, +.bi-theme-dark .bi-list-item.disabled:active .bi-textarea { + color: #878d9f !important; +} +.bi-theme-dark .bi-list-item.disabled .bi-high-light, +.bi-theme-dark .bi-list-item.disabled:hover .bi-high-light, +.bi-theme-dark .bi-list-item.disabled:active .bi-high-light { + color: #878d9f !important; +} +.bi-list-item-border:active, +.bi-list-item-border.active { + border: 1px solid #3685f2; +} +.bi-list-item-simple:hover, +.bi-list-item-simple.hover { + color: #3685f2; +} +.bi-list-item-simple:hover .bi-input, +.bi-list-item-simple.hover .bi-input { + color: #3685f2; +} +.bi-list-item-simple:hover .bi-textarea, +.bi-list-item-simple.hover .bi-textarea { + color: #3685f2; +} +.bi-list-item-simple.disabled, +.bi-list-item-simple.disabled:hover, +.bi-list-item-simple.disabled:active { + color: #9ea6b2 !important; +} +.bi-list-item-simple.disabled .bi-input, +.bi-list-item-simple.disabled:hover .bi-input, +.bi-list-item-simple.disabled:active .bi-input { + color: #9ea6b2 !important; +} +.bi-list-item-simple.disabled .bi-textarea, +.bi-list-item-simple.disabled:hover .bi-textarea, +.bi-list-item-simple.disabled:active .bi-textarea { + color: #9ea6b2 !important; +} +.bi-list-item-simple.disabled .bi-high-light, +.bi-list-item-simple.disabled:hover .bi-high-light, +.bi-list-item-simple.disabled:active .bi-high-light { + color: #9ea6b2 !important; +} +.bi-list-item-effect:hover { + color: #232e40; +} +.bi-list-item-effect:hover .bi-input { + color: #232e40; +} +.bi-list-item-effect:hover .bi-textarea { + color: #232e40; +} +.bi-list-item-effect.active, +.bi-list-item-effect:active { + color: #3685f2; +} +.bi-list-item-effect.active .bi-input, +.bi-list-item-effect:active .bi-input { + color: #3685f2; +} +.bi-list-item-effect.active .bi-textarea, +.bi-list-item-effect:active .bi-textarea { + color: #3685f2; +} +.bi-list-item-effect.disabled, +.bi-list-item-effect.disabled:hover, +.bi-list-item-effect.disabled:active { + color: #9ea6b2 !important; +} +.bi-list-item-effect.disabled .bi-input, +.bi-list-item-effect.disabled:hover .bi-input, +.bi-list-item-effect.disabled:active .bi-input { + color: #9ea6b2 !important; +} +.bi-list-item-effect.disabled .bi-textarea, +.bi-list-item-effect.disabled:hover .bi-textarea, +.bi-list-item-effect.disabled:active .bi-textarea { + color: #9ea6b2 !important; +} +.bi-list-item-effect.disabled .bi-high-light, +.bi-list-item-effect.disabled:hover .bi-high-light, +.bi-list-item-effect.disabled:active .bi-high-light { + color: #9ea6b2 !important; +} +.bi-theme-dark .bi-list-item-effect:hover { + color: #ffffff; +} +.bi-theme-dark .bi-list-item-effect:hover .bi-input { + color: #ffffff; +} +.bi-theme-dark .bi-list-item-effect:hover .bi-textarea { + color: #ffffff; +} +.bi-theme-dark .bi-list-item-effect.active, +.bi-theme-dark .bi-list-item-effect:active { + color: #3685f2; +} +.bi-theme-dark .bi-list-item-effect.active .bi-input, +.bi-theme-dark .bi-list-item-effect:active .bi-input { + color: #3685f2; +} +.bi-theme-dark .bi-list-item-effect.active .bi-textarea, +.bi-theme-dark .bi-list-item-effect:active .bi-textarea { + color: #3685f2; +} +.bi-theme-dark .bi-list-item-effect.disabled, +.bi-theme-dark .bi-list-item-effect.disabled:hover, +.bi-theme-dark .bi-list-item-effect.disabled:active { + background-color: transparent !important; + color: #878d9f !important; +} +.bi-theme-dark .bi-list-item-effect.disabled .bi-input, +.bi-theme-dark .bi-list-item-effect.disabled:hover .bi-input, +.bi-theme-dark .bi-list-item-effect.disabled:active .bi-input { + color: #878d9f !important; +} +.bi-theme-dark .bi-list-item-effect.disabled .bi-textarea, +.bi-theme-dark .bi-list-item-effect.disabled:hover .bi-textarea, +.bi-theme-dark .bi-list-item-effect.disabled:active .bi-textarea { + color: #878d9f !important; +} +.bi-theme-dark .bi-list-item-effect.disabled .bi-high-light, +.bi-theme-dark .bi-list-item-effect.disabled:hover .bi-high-light, +.bi-theme-dark .bi-list-item-effect.disabled:active .bi-high-light { + color: #878d9f !important; +} +.bi-list-item-active:hover, +.bi-list-item-active.hover { + color: #232e40; + background-color: rgba(54, 133, 242, 0.06); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#0f3685f2,endColorstr=#0f3685f2); +} +.bi-list-item-active:hover .bi-input, +.bi-list-item-active.hover .bi-input { + color: #232e40; +} +.bi-list-item-active:hover .bi-textarea, +.bi-list-item-active.hover .bi-textarea { + color: #232e40; +} +.bi-list-item-active:active { + color: #3685f2; + background-color: rgba(54, 133, 242, 0.06); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#0f3685f2,endColorstr=#0f3685f2); +} +.bi-list-item-active:active .bi-input { + color: #3685f2; +} +.bi-list-item-active:active .bi-textarea { + color: #3685f2; +} +.bi-list-item-active.active { + color: #3685f2; +} +.bi-list-item-active.active .bi-input { + color: #3685f2; +} +.bi-list-item-active.active .bi-textarea { + color: #3685f2; +} +.bi-list-item-active.disabled, +.bi-list-item-active.disabled:hover, +.bi-list-item-active.disabled:active { + background-color: transparent !important; + color: #9ea6b2 !important; +} +.bi-list-item-active.disabled .bi-input, +.bi-list-item-active.disabled:hover .bi-input, +.bi-list-item-active.disabled:active .bi-input { + color: #9ea6b2 !important; +} +.bi-list-item-active.disabled .bi-textarea, +.bi-list-item-active.disabled:hover .bi-textarea, +.bi-list-item-active.disabled:active .bi-textarea { + color: #9ea6b2 !important; +} +.bi-list-item-active.disabled .bi-high-light, +.bi-list-item-active.disabled:hover .bi-high-light, +.bi-list-item-active.disabled:active .bi-high-light { + color: #9ea6b2 !important; +} +.bi-theme-dark .bi-list-item-active:hover, +.bi-theme-dark .bi-list-item-active.hover { + color: #ffffff; + background-color: rgba(255, 255, 255, 0.05); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#0dffffff,endColorstr=#0dffffff); +} +.bi-theme-dark .bi-list-item-active:hover .bi-input, +.bi-theme-dark .bi-list-item-active.hover .bi-input { + color: #ffffff; +} +.bi-theme-dark .bi-list-item-active:hover .bi-textarea, +.bi-theme-dark .bi-list-item-active.hover .bi-textarea { + color: #ffffff; +} +.bi-theme-dark .bi-list-item-active.active, +.bi-theme-dark .bi-list-item-active:active { + color: #3685f2; + background-color: rgba(255, 255, 255, 0.05); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#0dffffff,endColorstr=#0dffffff); +} +.bi-theme-dark .bi-list-item-active.active .bi-input, +.bi-theme-dark .bi-list-item-active:active .bi-input { + color: #3685f2; +} +.bi-theme-dark .bi-list-item-active.active .bi-textarea, +.bi-theme-dark .bi-list-item-active:active .bi-textarea { + color: #3685f2; +} +.bi-theme-dark .bi-list-item-active.disabled, +.bi-theme-dark .bi-list-item-active.disabled:hover, +.bi-theme-dark .bi-list-item-active.disabled:active { + background-color: transparent !important; + color: #878d9f !important; +} +.bi-theme-dark .bi-list-item-active.disabled .bi-input, +.bi-theme-dark .bi-list-item-active.disabled:hover .bi-input, +.bi-theme-dark .bi-list-item-active.disabled:active .bi-input { + color: #878d9f !important; +} +.bi-theme-dark .bi-list-item-active.disabled .bi-textarea, +.bi-theme-dark .bi-list-item-active.disabled:hover .bi-textarea, +.bi-theme-dark .bi-list-item-active.disabled:active .bi-textarea { + color: #878d9f !important; +} +.bi-theme-dark .bi-list-item-active.disabled .bi-high-light, +.bi-theme-dark .bi-list-item-active.disabled:hover .bi-high-light, +.bi-theme-dark .bi-list-item-active.disabled:active .bi-high-light { + color: #878d9f !important; +} +.bi-list-item-active2:hover, +.bi-list-item-active2.hover { + color: #232e40; + background-color: rgba(54, 133, 242, 0.06); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#0f3685f2,endColorstr=#0f3685f2); +} +.bi-list-item-active2:hover .bi-input, +.bi-list-item-active2.hover .bi-input { + color: #232e40; +} +.bi-list-item-active2:hover .bi-textarea, +.bi-list-item-active2.hover .bi-textarea { + color: #232e40; +} +.bi-list-item-active2:active, +.bi-list-item-active2.active { + color: #3685f2; + background-color: rgba(54, 133, 242, 0.06); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#0f3685f2,endColorstr=#0f3685f2); +} +.bi-list-item-active2:active .bi-input, +.bi-list-item-active2.active .bi-input { + color: #3685f2; +} +.bi-list-item-active2:active .bi-textarea, +.bi-list-item-active2.active .bi-textarea { + color: #3685f2; +} +.bi-list-item-active2.disabled, +.bi-list-item-active2.disabled:hover, +.bi-list-item-active2.disabled:active { + background-color: transparent !important; + color: #9ea6b2 !important; +} +.bi-list-item-active2.disabled .bi-input, +.bi-list-item-active2.disabled:hover .bi-input, +.bi-list-item-active2.disabled:active .bi-input { + color: #9ea6b2 !important; +} +.bi-list-item-active2.disabled .bi-textarea, +.bi-list-item-active2.disabled:hover .bi-textarea, +.bi-list-item-active2.disabled:active .bi-textarea { + color: #9ea6b2 !important; +} +.bi-list-item-active2.disabled .bi-high-light, +.bi-list-item-active2.disabled:hover .bi-high-light, +.bi-list-item-active2.disabled:active .bi-high-light { + color: #9ea6b2 !important; +} +.bi-theme-dark .bi-list-item-active2:hover, +.bi-theme-dark .bi-list-item-active2.hover { + color: #ffffff; + background-color: rgba(54, 133, 242, 0.06); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#0f3685f2,endColorstr=#0f3685f2); +} +.bi-theme-dark .bi-list-item-active2:hover .bi-input, +.bi-theme-dark .bi-list-item-active2.hover .bi-input { + color: #ffffff; +} +.bi-theme-dark .bi-list-item-active2:hover .bi-textarea, +.bi-theme-dark .bi-list-item-active2.hover .bi-textarea { + color: #ffffff; +} +.bi-theme-dark .bi-list-item-active2:active, +.bi-theme-dark .bi-list-item-active2.active { + color: #3685f2; + background-color: rgba(54, 133, 242, 0.06); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#0f3685f2,endColorstr=#0f3685f2); +} +.bi-theme-dark .bi-list-item-active2:active .bi-input, +.bi-theme-dark .bi-list-item-active2.active .bi-input { + color: #3685f2; +} +.bi-theme-dark .bi-list-item-active2:active .bi-textarea, +.bi-theme-dark .bi-list-item-active2.active .bi-textarea { + color: #3685f2; +} +.bi-theme-dark .bi-list-item-active2.disabled, +.bi-theme-dark .bi-list-item-active2.disabled:hover, +.bi-theme-dark .bi-list-item-active2.disabled:active { + background-color: transparent !important; + color: #878d9f !important; +} +.bi-theme-dark .bi-list-item-active2.disabled .bi-input, +.bi-theme-dark .bi-list-item-active2.disabled:hover .bi-input, +.bi-theme-dark .bi-list-item-active2.disabled:active .bi-input { + color: #878d9f !important; +} +.bi-theme-dark .bi-list-item-active2.disabled .bi-textarea, +.bi-theme-dark .bi-list-item-active2.disabled:hover .bi-textarea, +.bi-theme-dark .bi-list-item-active2.disabled:active .bi-textarea { + color: #878d9f !important; +} +.bi-theme-dark .bi-list-item-active2.disabled .bi-high-light, +.bi-theme-dark .bi-list-item-active2.disabled:hover .bi-high-light, +.bi-theme-dark .bi-list-item-active2.disabled:active .bi-high-light { + color: #878d9f !important; +} +.bi-list-item-select:hover, +.bi-list-item-select.hover { + background-color: rgba(54, 133, 242, 0.06); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#0f3685f2,endColorstr=#0f3685f2); +} +.bi-list-item-select:active, +.bi-list-item-select.active { + color: #ffffff; + background-color: #3685f2; +} +.bi-list-item-select:active .bi-input, +.bi-list-item-select.active .bi-input { + color: #ffffff; +} +.bi-list-item-select:active .bi-textarea, +.bi-list-item-select.active .bi-textarea { + color: #ffffff; +} +.bi-list-item-select:active .bi-high-light, +.bi-list-item-select.active .bi-high-light { + color: #ffffff; +} +.bi-list-item-select.button-success:active, +.bi-list-item-select.button-success.active { + color: #ffffff; + background-color: #13cd66; +} +.bi-list-item-select.button-success:active .bi-input, +.bi-list-item-select.button-success.active .bi-input { + color: #ffffff; +} +.bi-list-item-select.button-success:active .bi-textarea, +.bi-list-item-select.button-success.active .bi-textarea { + color: #ffffff; +} +.bi-list-item-select.button-success:active .bi-high-light, +.bi-list-item-select.button-success.active .bi-high-light { + color: #ffffff; +} +.bi-list-item-select.button-success:active.bi-high-light-border, +.bi-list-item-select.button-success.active.bi-high-light-border { + border-color: #13cd66; +} +.bi-list-item-select.button-warning { + color: #e65251; +} +.bi-list-item-select.button-warning .bi-input { + color: #e65251; +} +.bi-list-item-select.button-warning .bi-textarea { + color: #e65251; +} +.bi-list-item-select.button-warning .bi-high-light { + color: #e65251; +} +.bi-list-item-select.button-warning.bi-high-light-border { + border-color: #e65251; +} +.bi-list-item-select.button-warning:hover, +.bi-list-item-select.button-warning.hover { + color: #e65251; + background-color: #ffecec; +} +.bi-list-item-select.button-warning:hover .bi-input, +.bi-list-item-select.button-warning.hover .bi-input { + color: #e65251; +} +.bi-list-item-select.button-warning:hover .bi-textarea, +.bi-list-item-select.button-warning.hover .bi-textarea { + color: #e65251; +} +.bi-list-item-select.button-warning:hover .bi-high-light, +.bi-list-item-select.button-warning.hover .bi-high-light { + color: #e65251; +} +.bi-list-item-select.button-warning:hover.bi-high-light-border, +.bi-list-item-select.button-warning.hover.bi-high-light-border { + border-color: #e65251; +} +.bi-list-item-select.button-warning:active, +.bi-list-item-select.button-warning.active { + color: #ffffff; + background-color: #e65251; +} +.bi-list-item-select.button-warning:active .bi-input, +.bi-list-item-select.button-warning.active .bi-input { + color: #ffffff; +} +.bi-list-item-select.button-warning:active .bi-textarea, +.bi-list-item-select.button-warning.active .bi-textarea { + color: #ffffff; +} +.bi-list-item-select.button-warning:active .bi-high-light, +.bi-list-item-select.button-warning.active .bi-high-light { + color: #ffffff; +} +.bi-list-item-select.button-warning:active.bi-high-light-border, +.bi-list-item-select.button-warning.active.bi-high-light-border { + border-color: #e65251; +} +.bi-list-item-select.disabled { + color: #9ea6b2 !important; + background-color: transparent !important; +} +.bi-list-item-select.disabled .bi-input { + color: #9ea6b2 !important; +} +.bi-list-item-select.disabled .bi-textarea { + color: #9ea6b2 !important; +} +.bi-list-item-select.disabled .bi-high-light { + color: #9ea6b2 !important; +} +.bi-list-item-select.disabled.bi-high-light-border { + border-color: #d0d4da; +} +.bi-list-item-select.disabled.hover, +.bi-list-item-select.disabled.active { + color: #ffffff !important; + background-color: #d0d4da !important; +} +.bi-list-item-select.disabled.hover .bi-input, +.bi-list-item-select.disabled.active .bi-input { + color: #ffffff !important; +} +.bi-list-item-select.disabled.hover .bi-textarea, +.bi-list-item-select.disabled.active .bi-textarea { + color: #ffffff !important; +} +.bi-list-item-select.disabled.hover .bi-high-light, +.bi-list-item-select.disabled.active .bi-high-light { + color: #9ea6b2 !important; +} +.bi-list-item-select.disabled.hover.bi-high-light-border, +.bi-list-item-select.disabled.active.bi-high-light-border { + border-color: #d0d4da; +} +.bi-list-item-select2:hover, +.bi-list-item-select2.hover { + color: #232e40; +} +.bi-list-item-select2:hover .bi-input, +.bi-list-item-select2.hover .bi-input { + color: #232e40; +} +.bi-list-item-select2:hover .bi-textarea, +.bi-list-item-select2.hover .bi-textarea { + color: #232e40; +} +.bi-list-item-select2:hover.bi-border, +.bi-list-item-select2.hover.bi-border { + border-color: #3685f2; +} +.bi-list-item-select2:active { + color: #3685f2; +} +.bi-list-item-select2:active .bi-input { + color: #3685f2; +} +.bi-list-item-select2:active .bi-textarea { + color: #3685f2; +} +.bi-list-item-select2:active.bi-border { + border-color: #3685f2; +} +.bi-list-item-select2.active { + color: #ffffff; + background-color: #3685f2; +} +.bi-list-item-select2.active .bi-input { + color: #ffffff; +} +.bi-list-item-select2.active .bi-textarea { + color: #ffffff; +} +.bi-list-item-select2.active.bi-border { + border-color: #3685f2; +} +.bi-list-item-select2.disabled, +.bi-list-item-select2.disabled:hover, +.bi-list-item-select2.disabled:active { + background-color: transparent !important; + color: #9ea6b2 !important; +} +.bi-list-item-select2.disabled .bi-input, +.bi-list-item-select2.disabled:hover .bi-input, +.bi-list-item-select2.disabled:active .bi-input { + color: #9ea6b2 !important; +} +.bi-list-item-select2.disabled .bi-textarea, +.bi-list-item-select2.disabled:hover .bi-textarea, +.bi-list-item-select2.disabled:active .bi-textarea { + color: #9ea6b2 !important; +} +.bi-list-item-select2.disabled .bi-high-light, +.bi-list-item-select2.disabled:hover .bi-high-light, +.bi-list-item-select2.disabled:active .bi-high-light { + color: #9ea6b2 !important; +} +.bi-theme-dark .bi-list-item-select2:hover, +.bi-theme-dark .bi-list-item-select2.hover { + color: #ffffff; +} +.bi-theme-dark .bi-list-item-select2:hover .bi-input, +.bi-theme-dark .bi-list-item-select2.hover .bi-input { + color: #ffffff; +} +.bi-theme-dark .bi-list-item-select2:hover .bi-textarea, +.bi-theme-dark .bi-list-item-select2.hover .bi-textarea { + color: #ffffff; +} +.bi-theme-dark .bi-list-item-select2.active { + background-color: #20263b; +} +.bi-theme-dark .bi-list-item-select2.disabled, +.bi-theme-dark .bi-list-item-select2.disabled:hover, +.bi-theme-dark .bi-list-item-select2.disabled:active { + background-color: transparent !important; + color: #878d9f !important; +} +.bi-theme-dark .bi-list-item-select2.disabled .bi-input, +.bi-theme-dark .bi-list-item-select2.disabled:hover .bi-input, +.bi-theme-dark .bi-list-item-select2.disabled:active .bi-input { + color: #878d9f !important; +} +.bi-theme-dark .bi-list-item-select2.disabled .bi-textarea, +.bi-theme-dark .bi-list-item-select2.disabled:hover .bi-textarea, +.bi-theme-dark .bi-list-item-select2.disabled:active .bi-textarea { + color: #878d9f !important; +} +.bi-theme-dark .bi-list-item-select2.disabled .bi-high-light, +.bi-theme-dark .bi-list-item-select2.disabled:hover .bi-high-light, +.bi-theme-dark .bi-list-item-select2.disabled:active .bi-high-light { + color: #878d9f !important; +} +.bi-list-item-select3:hover, +.bi-list-item-select3.hover { + background-color: #f7f8fa; +} +.bi-list-item-select3:active, +.bi-list-item-select3.active { + color: #3685f2; + background-color: #f7f8fa; +} +.bi-list-item-select3:active .bi-input, +.bi-list-item-select3.active .bi-input { + color: #3685f2; +} +.bi-list-item-select3:active .bi-textarea, +.bi-list-item-select3.active .bi-textarea { + color: #3685f2; +} +.bi-list-item-select3.disabled:hover, +.bi-list-item-select3.disabled.hover, +.bi-list-item-select3.disabled:active, +.bi-list-item-select3.disabled.active { + background-color: #ffffff !important; +} +.bi-theme-dark .bi-list-item-select3:hover, +.bi-theme-dark .bi-list-item-select3.hover { + background-color: #191b2b; +} +.bi-theme-dark .bi-list-item-select3:active, +.bi-theme-dark .bi-list-item-select3.active { + color: #3685f2; + background-color: #191b2b; +} +.bi-theme-dark .bi-list-item-select3:active .bi-input, +.bi-theme-dark .bi-list-item-select3.active .bi-input { + color: #3685f2; +} +.bi-theme-dark .bi-list-item-select3:active .bi-textarea, +.bi-theme-dark .bi-list-item-select3.active .bi-textarea { + color: #3685f2; +} +.bi-theme-dark .bi-list-item-select3.disabled:hover, +.bi-theme-dark .bi-list-item-select3.disabled.hover, +.bi-theme-dark .bi-list-item-select3.disabled:active, +.bi-theme-dark .bi-list-item-select3.disabled.active { + background-color: #20263b !important; +} +.bi-theme-dark .bi-list-item-select:hover, +.bi-theme-dark .bi-list-item-select.hover { + color: #ffffff; + background-color: rgba(255, 255, 255, 0.05); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#0dffffff,endColorstr=#0dffffff); +} +.bi-theme-dark .bi-list-item-select:hover .bi-input, +.bi-theme-dark .bi-list-item-select.hover .bi-input { + color: #ffffff; +} +.bi-theme-dark .bi-list-item-select:hover .bi-textarea, +.bi-theme-dark .bi-list-item-select.hover .bi-textarea { + color: #ffffff; +} +.bi-theme-dark .bi-list-item-select:active, +.bi-theme-dark .bi-list-item-select.active { + color: #ffffff; + background-color: #3685f2; +} +.bi-theme-dark .bi-list-item-select:active .bi-input, +.bi-theme-dark .bi-list-item-select.active .bi-input { + color: #ffffff; +} +.bi-theme-dark .bi-list-item-select:active .bi-textarea, +.bi-theme-dark .bi-list-item-select.active .bi-textarea { + color: #ffffff; +} +.bi-theme-dark .bi-list-item-select:active .bi-high-light, +.bi-theme-dark .bi-list-item-select.active .bi-high-light { + color: #ffffff; +} +.bi-theme-dark .bi-list-item-select.disabled, +.bi-theme-dark .bi-list-item-select.disabled:hover, +.bi-theme-dark .bi-list-item-select.disabled:active { + background-color: transparent !important; + color: #878d9f !important; +} +.bi-theme-dark .bi-list-item-select.disabled .bi-input, +.bi-theme-dark .bi-list-item-select.disabled:hover .bi-input, +.bi-theme-dark .bi-list-item-select.disabled:active .bi-input { + color: #878d9f !important; +} +.bi-theme-dark .bi-list-item-select.disabled .bi-textarea, +.bi-theme-dark .bi-list-item-select.disabled:hover .bi-textarea, +.bi-theme-dark .bi-list-item-select.disabled:active .bi-textarea { + color: #878d9f !important; +} +.bi-theme-dark .bi-list-item-select.disabled .bi-high-light, +.bi-theme-dark .bi-list-item-select.disabled:hover .bi-high-light, +.bi-theme-dark .bi-list-item-select.disabled:active .bi-high-light { + color: #878d9f !important; +} +.bi-list-item-none:hover, +.bi-list-item-none.hover { + color: inherit; + background-color: transparent; +} +.bi-list-item-none:hover .bi-input, +.bi-list-item-none.hover .bi-input { + color: inherit; +} +.bi-list-item-none:hover .bi-textarea, +.bi-list-item-none.hover .bi-textarea { + color: inherit; +} +.bi-list-item-none:active, +.bi-list-item-none.active { + color: inherit; + background-color: transparent; +} +.bi-list-item-none:active .bi-input, +.bi-list-item-none.active .bi-input { + color: inherit; +} +.bi-list-item-none:active .bi-textarea, +.bi-list-item-none.active .bi-textarea { + color: inherit; +} +.bi-list-item-none:active .bi-high-light, +.bi-list-item-none.active .bi-high-light { + color: inherit; +} +.bi-list-item-none.disabled, +.bi-list-item-none.disabled:hover, +.bi-list-item-none.disabled:active { + color: #9ea6b2 !important; + background-color: transparent !important; +} +.bi-list-item-none.disabled .bi-input, +.bi-list-item-none.disabled:hover .bi-input, +.bi-list-item-none.disabled:active .bi-input { + color: #9ea6b2 !important; +} +.bi-list-item-none.disabled .bi-textarea, +.bi-list-item-none.disabled:hover .bi-textarea, +.bi-list-item-none.disabled:active .bi-textarea { + color: #9ea6b2 !important; +} +.bi-list-item-none.disabled .bi-high-light, +.bi-list-item-none.disabled:hover .bi-high-light, +.bi-list-item-none.disabled:active .bi-high-light { + color: #9ea6b2 !important; +} +.bi-theme-dark .bi-list-item-none:hover, +.bi-theme-dark .bi-list-item-none.hover { + color: inherit; + background-color: transparent; +} +.bi-theme-dark .bi-list-item-none:hover .bi-input, +.bi-theme-dark .bi-list-item-none.hover .bi-input { + color: inherit; +} +.bi-theme-dark .bi-list-item-none:hover .bi-textarea, +.bi-theme-dark .bi-list-item-none.hover .bi-textarea { + color: inherit; +} +.bi-theme-dark .bi-list-item-none:active, +.bi-theme-dark .bi-list-item-none.active { + color: inherit; + background-color: transparent; +} +.bi-theme-dark .bi-list-item-none:active .bi-input, +.bi-theme-dark .bi-list-item-none.active .bi-input { + color: inherit; +} +.bi-theme-dark .bi-list-item-none:active .bi-textarea, +.bi-theme-dark .bi-list-item-none.active .bi-textarea { + color: inherit; +} +.bi-theme-dark .bi-list-item-none:active .bi-high-light, +.bi-theme-dark .bi-list-item-none.active .bi-high-light { + color: inherit; +} +.bi-theme-dark .bi-list-item-none.disabled, +.bi-theme-dark .bi-list-item-none.disabled:hover, +.bi-theme-dark .bi-list-item-none.disabled:active { + background-color: transparent !important; + color: #878d9f !important; +} +.bi-theme-dark .bi-list-item-none.disabled .bi-input, +.bi-theme-dark .bi-list-item-none.disabled:hover .bi-input, +.bi-theme-dark .bi-list-item-none.disabled:active .bi-input { + color: #878d9f !important; +} +.bi-theme-dark .bi-list-item-none.disabled .bi-textarea, +.bi-theme-dark .bi-list-item-none.disabled:hover .bi-textarea, +.bi-theme-dark .bi-list-item-none.disabled:active .bi-textarea { + color: #878d9f !important; +} +.bi-theme-dark .bi-list-item-none.disabled .bi-high-light, +.bi-theme-dark .bi-list-item-none.disabled:hover .bi-high-light, +.bi-theme-dark .bi-list-item-none.disabled:active .bi-high-light { + color: #878d9f !important; +} +/*****************cursor*****************/ +.cursor-pointer { + cursor: pointer; +} +.cursor-default { + cursor: default; +} +.cursor-move { + cursor: move; +} +/*****************cursor*****************/ +.y-overflow-auto { + overflow-y: auto; + overflow-x: hidden; +} +.x-overflow-auto { + overflow-y: hidden; + overflow-x: auto; +} +.y-overflow-scroll { + overflow-y: scroll; + overflow-x: hidden; +} +.x-overflow-scroll { + overflow-y: hidden; + overflow-x: scroll; +} +.overflow-auto { + overflow-x: auto; + overflow-y: auto; +} +.overflow-scroll { + overflow-x: scroll; + overflow-y: scroll; +} +.overflow-hidden { + overflow-x: hidden; + overflow-y: hidden; +} +.td-overflow { + white-space: normal; + word-break: break-all; +} +.overflow-dot { + text-overflow: ellipsis; + overflow-x: hidden; + overflow-y: hidden; + white-space: nowrap; +} +.display-block { + display: block; +} +.display-inline { + display: inline-block; + *display: inline; + *zoom: 1; +} +.display-table { + display: table; +} +/**常用于span元素在与combo并列时**/ +.vertical-super { + vertical-align: super; +} +.vertical-top { + vertical-align: top; +} +.horizon-center { + text-align: center; +} +.horizon-left { + text-align: left; +} +/*类似ie6的盒子模型 可以在有百分比的时候加border 支持到ie8*/ +.border-sizing { + -webkit-box-sizing: border-box; + /*Safari3.2+*/ + -moz-box-sizing: border-box; + /*Firefox3.5+*/ + -ms-box-sizing: border-box; + /*IE8*/ + box-sizing: border-box; + /*W3C标准(IE9+,Safari5.1+,Chrome10.0+,Opera10.6+都符合box-sizing的w3c标准语法)*/ +} +.content-sizing { + -webkit-box-sizing: content-box; + /*Safari3.2+*/ + -moz-box-sizing: content-box; + /*Firefox3.5+*/ + -ms-box-sizing: content-box; + /*IE8*/ + box-sizing: content-box; + /*W3C标准(IE9+,Safari5.1+,Chrome10.0+,Opera10.6+都符合box-sizing的w3c标准语法)*/ +} +.bi-flex-center-adapt-layout { + display: box; + /* OLD - Android 4.4- */ + display: -webkit-box; + /* OLD - iOS 6-, Safari 3.1-6 */ + display: -moz-box; + /* OLD - Firefox 19- (buggy but mostly works) */ + display: -ms-flexbox; + /* TWEENER - IE 10 */ + display: -webkit-flex; + /* NEW - Chrome */ + display: flex; + /* NEW, Spec - Opera 12.1, Firefox 20+ */ + /* 09版 */ + -webkit-box-orient: horizontal; + /* 12版 */ + -webkit-flex-direction: row; + -moz-flex-direction: row; + -ms-flex-direction: row; + -o-flex-direction: row; + flex-direction: row; + /* 09版 */ + -webkit-box-pack: center; + /* 12版 */ + -webkit-justify-content: center; + -moz-justify-content: center; + -ms-justify-content: center; + -o-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + /* 09版 */ + -webkit-box-align: center; + /* 12版 */ + -webkit-align-items: center; + -moz-align-items: center; + -ms-flex-align: center; + -ms-align-items: center; + -o-align-items: center; + align-items: center; +} + +.bi-flex-horizontal-layout { + display: box; + /* OLD - Android 4.4- */ + display: -webkit-box; + /* OLD - iOS 6-, Safari 3.1-6 */ + display: -moz-box; + /* OLD - Firefox 19- (buggy but mostly works) */ + display: -ms-flexbox; + /* TWEENER - IE 10 */ + display: -webkit-flex; + /* NEW - Chrome */ + display: flex; + /* NEW, Spec - Opera 12.1, Firefox 20+ */ + /* 09版 */ + -webkit-box-orient: horizontal; + /* 12版 */ + -webkit-flex-direction: row; + -moz-flex-direction: row; + -ms-flex-direction: row; + -o-flex-direction: row; + flex-direction: row; + /* 09版 */ + -webkit-box-pack: flex-start; + /* 12版 */ + -webkit-justify-content: flex-start; + -moz-justify-content: flex-start; + -ms-justify-content: flex-start; + -o-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + /* 09版 */ + -webkit-box-align: start; + /* 12版 */ + -webkit-align-items: flex-start; + -moz-align-items: flex-start; + -ms-align-items: flex-start; + -ms-flex-align: start; + -o-align-items: flex-start; + align-items: flex-start; + /* 09版 */ + /*-webkit-box-lines: multiple;*/ + /* 12版 */ + -webkit-flex-wrap: nowrap; + -moz-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + -o-flex-wrap: nowrap; + flex-wrap: nowrap; +} +.bi-flex-horizontal-layout.v-middle { + /* 09版 */ + -webkit-box-align: center; + /* 12版 */ + -webkit-align-items: center; + -moz-align-items: center; + -ms-align-items: center; + -ms-flex-align: center; + -o-align-items: center; + align-items: center; +} +.bi-flex-horizontal-layout.v-bottom { + /* 09版 */ + -webkit-box-align: flex-end; + /* 12版 */ + -webkit-align-items: flex-end; + -moz-align-items: flex-end; + -ms-align-items: flex-end; + -ms-flex-align: end; + -o-align-items: flex-end; + align-items: flex-end; +} +.bi-flex-horizontal-layout.v-stretch { + /* 09版 */ + -webkit-box-align: stretch; + /* 12版 */ + -webkit-align-items: stretch; + -moz-align-items: stretch; + -ms-align-items: stretch; + -ms-flex-align: stretch; + -o-align-items: stretch; + align-items: stretch; +} +.bi-flex-horizontal-layout.h-stretch { + /* 09版 */ + -webkit-box-orient: vertical; + /* 12版 */ + -webkit-flex-direction: column; + -moz-flex-direction: column; + -ms-flex-direction: column; + -o-flex-direction: column; + flex-direction: column; + /* 09版 */ + -webkit-box-pack: center; + /* 12版 */ + -webkit-justify-content: center; + -moz-justify-content: center; + -ms-justify-content: center; + -ms-flex-pack: center; + -o-justify-content: center; + justify-content: center; + /* 09版 */ + -webkit-box-align: stretch; + /* 12版 */ + -webkit-align-items: stretch; + -moz-align-items: stretch; + -ms-align-items: stretch; + -ms-flex-align: stretch; + -o-align-items: stretch; + align-items: stretch; +} + +.bi-flex-vertical-layout { + display: box; + /* OLD - Android 4.4- */ + display: -webkit-box; + /* OLD - iOS 6-, Safari 3.1-6 */ + display: -moz-box; + /* OLD - Firefox 19- (buggy but mostly works) */ + display: -ms-flexbox; + /* TWEENER - IE 10 */ + display: -webkit-flex; + /* NEW - Chrome */ + display: flex; + /* NEW, Spec - Opera 12.1, Firefox 20+ */ + /* 09版 */ + -webkit-box-orient: vertical; + /* 12版 */ + -webkit-flex-direction: column; + -moz-flex-direction: column; + -ms-flex-direction: column; + -o-flex-direction: column; + flex-direction: column; + /* 09版 */ + -webkit-box-pack: flex-start; + /* 12版 */ + -webkit-justify-content: flex-start; + -moz-justify-content: flex-start; + -ms-justify-content: flex-start; + -o-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + /* 09版 */ + -webkit-box-align: start; + /* 12版 */ + -webkit-align-items: flex-start; + -moz-align-items: flex-start; + -ms-align-items: flex-start; + -ms-flex-align: start; + -o-align-items: flex-start; + align-items: flex-start; + /* 09版 */ + /*-webkit-box-lines: multiple;*/ + /* 12版 */ + -webkit-flex-wrap: nowrap; + -moz-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + -o-flex-wrap: nowrap; + flex-wrap: nowrap; +} +.bi-flex-vertical-layout.h-center { + /* 09版 */ + -webkit-box-align: center; + /* 12版 */ + -webkit-align-items: center; + -moz-align-items: center; + -ms-align-items: center; + -ms-flex-align: center; + -o-align-items: center; + align-items: center; +} +.bi-flex-vertical-layout.h-right { + /* 09版 */ + -webkit-box-align: flex-end; + /* 12版 */ + -webkit-align-items: flex-end; + -moz-align-items: flex-end; + -ms-align-items: flex-end; + -ms-flex-align: end; + -o-align-items: flex-end; + align-items: flex-end; +} +.bi-flex-vertical-layout.h-stretch { + /* 09版 */ + -webkit-box-align: stretch; + /* 12版 */ + -webkit-align-items: stretch; + -moz-align-items: stretch; + -ms-align-items: stretch; + -ms-flex-align: stretch; + -o-align-items: stretch; + align-items: stretch; +} +.bi-flex-vertical-layout.v-stretch { + /* 09版 */ + -webkit-box-orient: horizontal; + /* 12版 */ + -webkit-flex-direction: row; + -moz-flex-direction: row; + -ms-flex-direction: row; + -o-flex-direction: row; + flex-direction: row; + /* 09版 */ + -webkit-box-pack: center; + /* 12版 */ + -webkit-justify-content: center; + -moz-justify-content: center; + -ms-justify-content: center; + -ms-flex-pack: center; + -o-justify-content: center; + justify-content: center; + /* 09版 */ + -webkit-box-align: stretch; + /* 12版 */ + -webkit-align-items: stretch; + -moz-align-items: stretch; + -ms-align-items: stretch; + -ms-flex-align: stretch; + -o-align-items: stretch; + align-items: stretch; +} + +.bi-flex-scrollable-center-adapt-layout .flex-scrollable-center-adapt-layout-wrapper { + display: box; + /* OLD - Android 4.4- */ + display: -webkit-box; + /* OLD - iOS 6-, Safari 3.1-6 */ + display: -moz-box; + /* OLD - Firefox 19- (buggy but mostly works) */ + display: -ms-flexbox; + /* TWEENER - IE 10 */ + display: -webkit-flex; + /* NEW - Chrome */ + display: flex; + /* NEW, Spec - Opera 12.1, Firefox 20+ */ + /* 09版 */ + -webkit-box-orient: horizontal; + /* 12版 */ + -webkit-flex-direction: row; + -moz-flex-direction: row; + -ms-flex-direction: row; + -o-flex-direction: row; + flex-direction: row; + /* 09版 */ + -webkit-box-pack: center; + /* 12版 */ + -webkit-justify-content: center; + -moz-justify-content: center; + -ms-justify-content: center; + -ms-flex-pack: center; + -o-justify-content: center; + justify-content: center; + /* 09版 */ + -webkit-box-align: center; + /* 12版 */ + -webkit-align-items: center; + -moz-align-items: center; + -ms-align-items: center; + -ms-flex-align: center; + -o-align-items: center; + align-items: center; + min-width: 100%; + min-height: 100%; + float: left; +} + +.bi-flex-scrollable-horizontal-layout .flex-scrollable-horizontal-layout-wrapper { + display: box; + /* OLD - Android 4.4- */ + display: -webkit-box; + /* OLD - iOS 6-, Safari 3.1-6 */ + display: -moz-box; + /* OLD - Firefox 19- (buggy but mostly works) */ + display: -ms-flexbox; + /* TWEENER - IE 10 */ + display: -webkit-flex; + /* NEW - Chrome */ + display: flex; + /* NEW, Spec - Opera 12.1, Firefox 20+ */ + /* 09版 */ + -webkit-box-orient: horizontal; + /* 12版 */ + -webkit-flex-direction: row; + -moz-flex-direction: row; + -ms-flex-direction: row; + -o-flex-direction: row; + flex-direction: row; + /* 09版 */ + -webkit-box-pack: flex-start; + /* 12版 */ + -webkit-justify-content: flex-start; + -moz-justify-content: flex-start; + -ms-justify-content: flex-start; + -ms-flex-pack: start; + -o-justify-content: flex-start; + justify-content: flex-start; + /* 09版 */ + -webkit-box-align: flex-start; + /* 12版 */ + -webkit-align-items: flex-start; + -moz-align-items: flex-start; + -ms-align-items: flex-start; + -ms-flex-align: start; + -o-align-items: flex-start; + align-items: flex-start; + /* 09版 */ + /*-webkit-box-lines: multiple;*/ + /* 12版 */ + -webkit-flex-wrap: nowrap; + -moz-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + -o-flex-wrap: nowrap; + flex-wrap: nowrap; + min-height: 100%; +} +.bi-flex-scrollable-horizontal-layout .flex-scrollable-horizontal-layout-wrapper.v-middle { + /* 09版 */ + -webkit-box-align: center; + /* 12版 */ + -webkit-align-items: center; + -moz-align-items: center; + -ms-align-items: center; + -o-align-items: center; + align-items: center; +} +.bi-flex-scrollable-horizontal-layout .flex-scrollable-horizontal-layout-wrapper.v-bottom { + /* 09版 */ + -webkit-box-align: flex-end; + /* 12版 */ + -webkit-align-items: flex-end; + -moz-align-items: flex-end; + -ms-align-items: flex-end; + -o-align-items: flex-end; + align-items: flex-end; +} +.bi-flex-scrollable-horizontal-layout .flex-scrollable-horizontal-layout-wrapper.v-stretch { + /* 09版 */ + -webkit-box-align: stretch; + /* 12版 */ + -webkit-align-items: stretch; + -moz-align-items: stretch; + -ms-align-items: stretch; + -o-align-items: stretch; + align-items: stretch; +} +.bi-flex-scrollable-horizontal-layout .flex-scrollable-horizontal-layout-wrapper.h-stretch { + /* 09版 */ + -webkit-box-orient: vertical; + /* 12版 */ + -webkit-flex-direction: column; + -moz-flex-direction: column; + -ms-flex-direction: column; + -o-flex-direction: column; + flex-direction: column; + /* 09版 */ + -webkit-box-pack: center; + /* 12版 */ + -webkit-justify-content: center; + -moz-justify-content: center; + -ms-justify-content: center; + -ms-flex-pack: center; + -o-justify-content: center; + justify-content: center; + /* 09版 */ + -webkit-box-align: stretch; + /* 12版 */ + -webkit-align-items: stretch; + -moz-align-items: stretch; + -ms-align-items: stretch; + -ms-flex-align: stretch; + -o-align-items: stretch; + align-items: stretch; +} + +.bi-flex-scrollable-vertical-layout .flex-scrollable-vertical-layout-wrapper { + display: box; + /* OLD - Android 4.4- */ + display: -webkit-box; + /* OLD - iOS 6-, Safari 3.1-6 */ + display: -moz-box; + /* OLD - Firefox 19- (buggy but mostly works) */ + display: -ms-flexbox; + /* TWEENER - IE 10 */ + display: -webkit-flex; + /* NEW - Chrome */ + display: flex; + /* NEW, Spec - Opera 12.1, Firefox 20+ */ + /* 09版 */ + -webkit-box-orient: vertical; + /* 12版 */ + -webkit-flex-direction: column; + -moz-flex-direction: column; + -ms-flex-direction: column; + -o-flex-direction: column; + flex-direction: column; + /* 09版 */ + -webkit-box-pack: flex-start; + /* 12版 */ + -webkit-justify-content: flex-start; + -moz-justify-content: flex-start; + -ms-justify-content: flex-start; + -ms-flex-pack: start; + -o-justify-content: flex-start; + justify-content: flex-start; + /* 09版 */ + -webkit-box-align: flex-start; + /* 12版 */ + -webkit-align-items: flex-start; + -moz-align-items: flex-start; + -ms-align-items: flex-start; + -ms-flex-align: start; + -o-align-items: flex-start; + align-items: flex-start; + /* 09版 */ + /*-webkit-box-lines: multiple;*/ + /* 12版 */ + -webkit-flex-wrap: nowrap; + -moz-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + -o-flex-wrap: nowrap; + flex-wrap: nowrap; + min-width: 100%; +} +.bi-flex-scrollable-vertical-layout .flex-scrollable-vertical-layout-wrapper.h-center { + /* 09版 */ + -webkit-box-align: center; + /* 12版 */ + -webkit-align-items: center; + -moz-align-items: center; + -ms-align-items: center; + -ms-flex-align: center; + -o-align-items: center; + align-items: center; +} +.bi-flex-scrollable-vertical-layout .flex-scrollable-vertical-layout-wrapper.h-right { + /* 09版 */ + -webkit-box-align: flex-end; + /* 12版 */ + -webkit-align-items: flex-end; + -moz-align-items: flex-end; + -ms-align-items: flex-end; + -ms-flex-align: end; + -o-align-items: flex-end; + align-items: flex-end; +} +.bi-flex-scrollable-vertical-layout .flex-scrollable-vertical-layout-wrapper.h-stretch { + /* 09版 */ + -webkit-box-align: stretch; + /* 12版 */ + -webkit-align-items: stretch; + -moz-align-items: stretch; + -ms-align-items: stretch; + -ms-flex-align: stretch; + -o-align-items: stretch; + align-items: stretch; +} +.bi-flex-scrollable-vertical-layout .flex-scrollable-vertical-layout-wrapper.v-stretch { + /* 09版 */ + -webkit-box-orient: horizontal; + /* 12版 */ + -webkit-flex-direction: row; + -moz-flex-direction: row; + -ms-flex-direction: row; + -o-flex-direction: row; + flex-direction: row; + /* 09版 */ + -webkit-box-pack: center; + /* 12版 */ + -webkit-justify-content: center; + -moz-justify-content: center; + -ms-justify-content: center; + -ms-flex-pack: center; + -o-justify-content: center; + justify-content: center; + /* 09版 */ + -webkit-box-align: stretch; + /* 12版 */ + -webkit-align-items: stretch; + -moz-align-items: stretch; + -ms-align-items: stretch; + -ms-flex-align: stretch; + -o-align-items: stretch; + align-items: stretch; +} +.bi-inline-center-adapt-layout:after { + display: inline-block; + width: 0; + min-height: 100%; + vertical-align: middle; + content: ' '; +} +.bi-inline-center-adapt-layout > .inline-center-adapt-item { + display: inline-block; +} +.bi-inline-center-adapt-layout > .inline-center-adapt-item.x-icon { + display: inline-block !important; +} +.bi-inline-center-adapt-layout > .bi-combo.bi-combo-popup { + display: inline-block !important; +} + +.bi-inline-vertical-adapt-layout:after { + display: inline-block; + width: 0; + min-height: 100%; + vertical-align: middle; + content: ' '; +} +.bi-inline-vertical-adapt-layout > .inline-vertical-adapt-item { + display: inline-block; +} +.bi-inline-vertical-adapt-layout > .inline-vertical-adapt-item.x-icon { + display: inline-block !important; +} +.bi-inline-vertical-adapt-layout > .bi-combo.bi-combo-popup { + display: inline-block !important; +} +.bi-theme-dark { + color: #d6e0dc; +} +.bi-theme-dark .bi-input { + color: #ffffff; +} +.bi-year-calendar { + padding-top: 5px; + padding-bottom: 5px; +} +.bi-color-chooser-popup .disable-mask { + opacity: 0.5; + filter: alpha(opacity=50); + background-color: #ffffff; +} + +.bi-color-chooser-trigger { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} +.bi-color-picker-button .color-picker-button-mask { + border: 1px solid #232e40; +} +.bi-theme-dark .bi-color-picker-button .color-picker-button-mask { + border: 1px solid #ffffff; +} +.bi-farbtastic .wheel { + background: url('images/1x/background/wheel.png') no-repeat center center; +} +.bi-farbtastic .overlay { + background: url('images/1x/background/mask.png') no-repeat center center; +} +.bi-farbtastic .marker { + background: url('images/1x/background/marker.png') no-repeat center center; +} +.bi-display-tree .ztree li span.button.switch.center_open { + background: url('images/2x/icon/tree_vertical_line_3.png') no-repeat center center; + background-size: contain; +} +.bi-display-tree .ztree li span.button.switch.roots_open { + background: url('images/2x/icon/tree_vertical_line_2.png') no-repeat center center; + background-size: contain; +} +.bi-display-tree .ztree li span.button.switch.bottom_open { + background: url('images/2x/icon/tree_vertical_line_4.png') no-repeat center center; + background-size: contain; +} +.bi-display-tree .ztree.hack li span.button.switch.center_open { + background: url('images/1x/icon/tree_vertical_line_3.png') no-repeat center center; +} +.bi-display-tree .ztree.hack li span.button.switch.roots_open { + background: url('images/1x/icon/tree_vertical_line_2.png') no-repeat center center; +} +.bi-display-tree .ztree.hack li span.button.switch.bottom_open { + background: url('images/1x/icon/tree_vertical_line_4.png') no-repeat center center; +} +.ztree li ul.line { + position: relative; +} +.ztree li ul.line:before { + position: absolute; + content: ''; + border-left: 1px dashed #D0D4DA; + height: calc(100% - 3px); + left: 12px; + margin-top: 1px; +} +.ztree.hack li ul.line { + background: url('images/1x/icon/tree_vertical_line_1.png') repeat-y 1px 0; +} +.bi-theme-dark .ztree li ul.line:before { + border-left: 1px dashed #606479; +} +.bi-theme-dark .ztree.hack li ul.line { + background: url('images/1x/icon/dark/tree_vertical_line_1.png') repeat-y 1px 0; +} +.ztree li span.button.chk.checkbox_false_full { + background: url('images/2x/icon/check_box_normal.png') no-repeat center center; + background-size: contain; +} +.ztree li span.button.chk.checkbox_false_full_focus { + background: url('images/2x/icon/check_box_normal.png') no-repeat center center; + background-size: contain; +} +.ztree li span.button.chk.checkbox_false_part { + background: url('images/2x/icon/check_box_normal.png') no-repeat center center; + background-size: contain; +} +.ztree li span.button.chk.checkbox_false_part_focus { + background: url('images/2x/icon/half_selected.png') no-repeat center center; + background-size: contain; +} +.ztree li span.button.chk.checkbox_true_full { + background: url('images/2x/icon/check_box_active.png') no-repeat center center; + background-size: contain; +} +.ztree li span.button.chk.checkbox_true_full_focus { + background: url('images/2x/icon/check_box_active.png') no-repeat center center; + background-size: contain; +} +.ztree li span.button.chk.checkbox_true_part { + background: url('images/2x/icon/half_selected.png') no-repeat center center; + background-size: contain; +} +.ztree li span.button.chk.checkbox_true_part_focus { + background: url('images/2x/icon/half_selected.png') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.chk.checkbox_false_full { + background: url('images/1x/icon/check_box_normal.png') no-repeat center center; +} +.ztree.hack li span.button.chk.checkbox_false_full_focus { + background: url('images/1x/icon/check_box_normal.png') no-repeat center center; +} +.ztree.hack li span.button.chk.checkbox_false_part { + background: url('images/1x/icon/check_box_normal.png') no-repeat center center; +} +.ztree.hack li span.button.chk.checkbox_false_part_focus { + background: url('images/1x/icon/half_selected.png') no-repeat center center; +} +.ztree.hack li span.button.chk.checkbox_true_full { + background: url('images/1x/icon/check_box_active.png') no-repeat center center; +} +.ztree.hack li span.button.chk.checkbox_true_full_focus { + background: url('images/1x/icon/check_box_active.png') no-repeat center center; +} +.ztree.hack li span.button.chk.checkbox_true_part { + background: url('images/1x/icon/half_selected.png') no-repeat center center; +} +.ztree.hack li span.button.chk.checkbox_true_part_focus { + background: url('images/1x/icon/half_selected.png') no-repeat center center; +} +.ztree li span.button.root_open { + background: url('images/2x/icon/tree_expand_1.png') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.root_open { + background: url('images/1x/icon/tree_expand_1.png') no-repeat center center; +} +.bi-theme-dark .ztree li span.button.root_open { + background: url('images/2x/icon/dark/tree_expand_1.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .ztree.hack li span.button.root_open { + background: url('images/1x/icon/dark/tree_expand_1.png') no-repeat center center; +} +.ztree li span.button.root_close { + background: url('images/2x/icon/tree_collapse_1.png') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.root_close { + background: url('images/1x/icon/tree_collapse_1.png') no-repeat center center; +} +.bi-theme-dark .ztree li span.button.root_close { + background: url('images/2x/icon/dark/tree_collapse_1.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .ztree.hack li span.button.root_close { + background: url('images/1x/icon/dark/tree_collapse_1.png') no-repeat center center; +} +.ztree li span.button.roots_open { + background: url('images/2x/icon/tree_expand_2.png') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.roots_open { + background: url('images/1x/icon/tree_expand_2.png') no-repeat center center; +} +.bi-theme-dark .ztree li span.button.roots_open { + background: url('images/2x/icon/dark/tree_expand_2.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .ztree.hack li span.button.roots_open { + background: url('images/1x/icon/dark/tree_expand_2.png') no-repeat center center; +} +.ztree li span.button.roots_close { + background: url('images/2x/icon/tree_collapse_2.png') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.roots_close { + background: url('images/1x/icon/tree_collapse_2.png') no-repeat center center; +} +.bi-theme-dark .ztree li span.button.roots_close { + background: url('images/2x/icon/dark/tree_collapse_2.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .ztree.hack li span.button.roots_close { + background: url('images/1x/icon/dark/tree_collapse_2.png') no-repeat center center; +} +.ztree li span.button.center_open { + background: url('images/2x/icon/tree_expand_3.png') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.center_open { + background: url('images/1x/icon/tree_expand_3.png') no-repeat center center; +} +.bi-theme-dark .ztree li span.button.center_open { + background: url('images/2x/icon/dark/tree_expand_3.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .ztree.hack li span.button.center_open { + background: url('images/1x/icon/dark/tree_expand_3.png') no-repeat center center; +} +.ztree li span.button.center_close { + background: url('images/2x/icon/tree_collapse_3.png') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.center_close { + background: url('images/1x/icon/tree_collapse_3.png') no-repeat center center; +} +.bi-theme-dark .ztree li span.button.center_close { + background: url('images/2x/icon/dark/tree_collapse_3.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .ztree.hack li span.button.center_close { + background: url('images/1x/icon/dark/tree_collapse_3.png') no-repeat center center; +} +.ztree li span.button.bottom_open { + background: url('images/2x/icon/tree_expand_4.png') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.bottom_open { + background: url('images/1x/icon/tree_expand_4.png') no-repeat center center; +} +.bi-theme-dark .ztree li span.button.bottom_open { + background: url('images/2x/icon/dark/tree_expand_4.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .ztree.hack li span.button.bottom_open { + background: url('images/1x/icon/dark/tree_expand_4.png') no-repeat center center; +} +.ztree li span.button.bottom_close { + background: url('images/2x/icon/tree_collapse_4.png') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.bottom_close { + background: url('images/1x/icon/tree_collapse_4.png') no-repeat center center; +} +.bi-theme-dark .ztree li span.button.bottom_close { + background: url('images/2x/icon/dark/tree_collapse_4.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .ztree.hack li span.button.bottom_close { + background: url('images/1x/icon/dark/tree_collapse_4.png') no-repeat center center; +} +.ztree li span.button.roots_docu { + background: url('images/2x/icon/tree_vertical_line_2.png') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.roots_docu { + background: url('images/1x/icon/tree_vertical_line_2.png') no-repeat center center; +} +.bi-theme-dark .ztree li span.button.roots_docu { + background: url('images/2x/icon/dark/tree_vertical_line_2.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .ztree.hack li span.button.roots_docu { + background: url('images/1x/icon/dark/tree_vertical_line_2.png') no-repeat center center; +} +.ztree li span.button.center_docu { + background: url('images/2x/icon/tree_vertical_line_3.png') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.center_docu { + background: url('images/1x/icon/tree_vertical_line_3.png') no-repeat center center; +} +.bi-theme-dark .ztree li span.button.center_docu { + background: url('images/2x/icon/dark/tree_vertical_line_3.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .ztree.hack li span.button.center_docu { + background: url('images/1x/icon/dark/tree_vertical_line_3.png') no-repeat center center; +} +.ztree li span.button.bottom_docu { + background: url('images/2x/icon/tree_vertical_line_4.png') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.bottom_docu { + background: url('images/1x/icon/tree_vertical_line_4.png') no-repeat center center; +} +.bi-theme-dark .ztree li span.button.bottom_docu { + background: url('images/2x/icon/dark/tree_vertical_line_4.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .ztree.hack li span.button.bottom_docu { + background: url('images/1x/icon/dark/tree_vertical_line_4.png') no-repeat center center; +} +.ztree li span.button.ico_loading { + background: url('images/2x/icon/loading.gif') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.ico_loading { + background: url('images/1x/icon/loading.gif') no-repeat center center; +} +.base-line-conn-background { + background: url('images/1x/icon/tree_vertical_line_1.png') repeat-y 0 0; +} +.bi-theme-dark .base-line-conn-background { + background: url('images/1x/icon/dark/tree_vertical_line_1.png') repeat-y 0 0; +} +.first-line-conn-background { + background: url('images/1x/icon/tree_vertical_line_2.png') no-repeat center center; +} +.bi-theme-dark .first-line-conn-background { + background: url('images/1x/icon/dark/tree_vertical_line_2.png') no-repeat center center; +} +.mid-line-conn-background { + background: url('images/1x/icon/tree_vertical_line_3.png') no-repeat center center; +} +.bi-theme-dark .mid-line-conn-background { + background: url('images/1x/icon/dark/tree_vertical_line_3.png') no-repeat center center; +} +.last-line-conn-background { + background: url('images/1x/icon/tree_vertical_line_4.png') no-repeat center center; +} +.bi-theme-dark .last-line-conn-background { + background: url('images/1x/icon/dark/tree_vertical_line_4.png') no-repeat center center; +} +.loading-background { + background: url('images/2x/icon/loading.gif') no-repeat center center; + background-size: contain; +} +.auto-color-background { + background: url('images/2x/background/auto_color.png') no-repeat center center; + background-size: contain; +} +.auto-color-normal-background { + background: url('images/2x/background/auto_color_normal.png') no-repeat center center; + background-size: contain; +} +.auto-color-normal-disabled-background { + background: url('images/2x/background/auto_color_normal_disable.png') no-repeat center center; + background-size: contain; +} +.trans-color-background { + background: url('images/2x/background/trans_normal.png') no-repeat center center; + background-size: contain; +} +.trans-color-disabled-background { + background: url('images/2x/background/trans_disable.png') no-repeat center center; + background-size: contain; +} +.auto-color-background.hack { + background: url('images/1x/background/auto_color.png') no-repeat center center; +} +.auto-color-normal-background.hack { + background: url('images/1x/background/auto_color_normal.png') no-repeat center center; +} +.auto-color-normal-disabled-background.hack { + background: url('images/1x/background/auto_color_normal_disable.png') no-repeat center center; +} +.trans-color-background.hack { + background: url('images/1x/background/trans_normal.png') no-repeat center center; +} +.trans-color-disabled-background.hack { + background: url('images/1x/background/trans_disable.png') no-repeat center center; +} +.wave-loading { + background: url('images/2x/icon/wave_loading.gif') no-repeat center center; + background-size: contain; +} +.wave-loading.hack { + background: url('images/1x/icon/wave_loading.gif') no-repeat center center; +} +.bi-color-picker-editor .color-picker-editor-display { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} +.bi-color-picker-editor.disabled .auto-color-normal-background { + background: url('images/2x/background/auto_color_normal_disable.png') no-repeat center center; + background-size: contain; +} +.bi-color-picker-editor.disabled .auto-color-normal-background.hack { + background: url('images/1x/background/auto_color_normal_disable.png') no-repeat center center; +} +.bi-color-picker-editor.disabled .trans-color-background { + background: url('images/2x/background/trans_disable.png') no-repeat center center; + background-size: contain; +} +.bi-color-picker-editor.disabled .trans-color-background.hack { + background: url('images/1x/background/trans_disable.png') no-repeat center center; +} +.bi-farbtastic * { + cursor: crosshair; +} +.bi-farbtastic .marker { + margin: -8px 0 0 -8px; +} +.bi-bubble-combo .button-combo-triangle-wrapper { + position: fixed !important; + line-height: 0; + z-index: 10000000; + background-color: rgba(255, 255, 255, 0); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff); +} +.bi-bubble-combo .bubble-combo-triangle-left { + z-index: 1; + position: absolute; + width: 6px; + height: 16px; + text-align: left; +} +.bi-bubble-combo .bubble-combo-triangle-left:before { + position: absolute; + width: 6px; + height: 6px; + margin-left: -3px; + margin-top: 4px; + content: ""; + transform: rotate(-45deg); +} +.bi-bubble-combo .bubble-combo-triangle-right { + z-index: 1; + position: absolute; + width: 6px; + height: 16px; + text-align: left; +} +.bi-bubble-combo .bubble-combo-triangle-right:before { + position: absolute; + width: 6px; + height: 6px; + margin-left: 2px; + margin-top: 3px; + content: ""; + transform: rotate(135deg); +} +.bi-bubble-combo .bubble-combo-triangle-top { + z-index: 1; + position: absolute; + width: 16px; + height: 6px; + text-align: left; +} +.bi-bubble-combo .bubble-combo-triangle-top:before { + position: absolute; + width: 6px; + height: 6px; + margin-left: 4px; + margin-top: -3px; + content: ""; + transform: rotate(45deg); +} +.bi-bubble-combo .bubble-combo-triangle-bottom { + z-index: 1; + position: absolute; + width: 16px; + height: 6px; + text-align: left; +} +.bi-bubble-combo .bubble-combo-triangle-bottom:before { + position: absolute; + width: 6px; + height: 6px; + margin-left: 4px; + margin-top: 2px; + content: ""; + transform: rotate(-135deg); +} +.bi-bubble-combo .bubble-combo-triangle-left:before, +.bi-bubble-combo .bubble-combo-triangle-right:before, +.bi-bubble-combo .bubble-combo-triangle-top:before, +.bi-bubble-combo .bubble-combo-triangle-bottom:before { + background-color: #ffffff; + border-bottom: 1px solid #f2f4f7; + border-right: 1px solid #f2f4f7; +} +.bi-theme-dark .bi-bubble-combo .bubble-combo-triangle-left:before, +.bi-theme-dark .bi-bubble-combo .bubble-combo-triangle-right:before, +.bi-theme-dark .bi-bubble-combo .bubble-combo-triangle-top:before, +.bi-theme-dark .bi-bubble-combo .bubble-combo-triangle-bottom:before { + background-color: #20263b; + border-bottom: 1px solid #292f45; + border-right: 1px solid #292f45; +} + +.bi-combo > .bi-trigger .bi-trigger-icon-button .x-icon { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + transform: rotate(0deg); + -webkit-transition: transform 0.3s ease; + -moz-transition: transform 0.3s ease; + -o-transition: transform 0.3s ease; + transition: transform 0.3s ease; +} +.bi-combo.bi-combo-popup { + display: block !important; + visibility: visible !important; +} +.bi-combo.bi-combo-popup > .bi-trigger .bi-trigger-icon-button .x-icon { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + transform: rotate(180deg); + -webkit-transition: transform 0.3s ease; + -moz-transition: transform 0.3s ease; + -o-transition: transform 0.3s ease; + transition: transform 0.3s ease; +} +.bi-combo.bi-combo-popup > .bi-border, +.bi-combo.bi-combo-hover > .bi-border, +.bi-combo:hover > .bi-border { + border-color: #3685f2; +} +.bi-combo.disabled.bi-combo-hover > .bi-border, +.bi-combo.disabled:hover > .bi-border { + border-color: #e8eaed; +} +.bi-theme-dark .bi-combo.disabled.bi-combo-hover > .bi-border, +.bi-theme-dark .bi-combo.disabled:hover > .bi-border { + border-color: #363e55; +} + +.bi-search-text-value-combo .trigger-icon-button { + font-size: 16px; +} +.bi-search-text-value-combo .search-text-value-trigger { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} +.bi-search-text-value-combo.combo-error .bi-search-text-value-trigger .bi-text-button { + color: #e65251; +} +.bi-search-text-value-combo .bi-combo.bi-combo-popup + .bi-trigger-icon-button .x-icon { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + transform: rotate(180deg); + -webkit-transition: transform 0.3s ease; + -moz-transition: transform 0.3s ease; + -o-transition: transform 0.3s ease; + transition: transform 0.3s ease; +} +.bi-search-text-value-combo .bi-combo + .bi-trigger-icon-button .x-icon { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + transform: rotate(0deg); + -webkit-transition: transform 0.3s ease; + -moz-transition: transform 0.3s ease; + -o-transition: transform 0.3s ease; + transition: transform 0.3s ease; +} + +.bi-icon-text-value-combo.combo-error .bi-text-trigger .select-text-label { + color: #e65251; +} + +.bi-text-value-combo.combo-error .bi-select-text-trigger .select-text-label { + color: #e65251; +} + +.bi-text-value-check-combo.bi-combo-popup > .bi-border, +.bi-text-value-check-combo:hover > .bi-border { + border-color: #3685f2; +} + +.bi-text-value-down-list-combo.bi-combo-popup > .bi-border, +.bi-text-value-down-list-combo:hover > .bi-border { + border-color: #3685f2; +} +.bi-bubble-bar-popup-view .bar-popup-container { + max-height: 456px; +} + +/*************BI.SearchEditor******************/ +.bi-search-editor { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} +.bi-search-editor .circle-close-font { + font-size: 18px; +} +.bi-search-editor .search-font { + font-size: 18px; +} + +/*************BI.SearchEditor******************/ +.bi-small-search-editor .bi-editor { + font-size: 12px; +} +.bi-small-search-editor .bi-editor .bi-input { + font-size: 12px; +} +.bi-small-search-editor .bi-editor .bi-label { + font-size: 12px; +} +.bi-small-search-editor .close-font { + font-size: 16px; +} +.bi-small-search-editor .search-font { + font-size: 16px; +} +.bi-message-title { + font-size: 14px; + cursor: pointer; +} +.bi-message-text { + font-size: 16px; + -webkit-user-select: text; + -khtml-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + -o-user-select: text; + user-select: text; +} +.bi-message-content { + font-size: 16px; +} +.bi-message-close { + font-size: 16px; +} +.bi-message-animate { + -webkit-transition: opacity 0.3s, transform 0.3s, left 0.3s, right 0.3s, top 0.4s, bottom 0.3s; + -moz-transition: opacity 0.3s, transform 0.3s, left 0.3s, right 0.3s, top 0.4s, bottom 0.3s; + -o-transition: opacity 0.3s, transform 0.3s, left 0.3s, right 0.3s, top 0.4s, bottom 0.3s; + transition: opacity 0.3s, transform 0.3s, left 0.3s, right 0.3s, top 0.4s, bottom 0.3s; +} +.bi-message-enter { + opacity: 1; +} +.bi-message-leave { + opacity: 0; + transform: translateY(-100%); +} +.bi-multi-list-view .bi-button-mask { + opacity: 0.1; + filter: alpha(opacity=10); +} +.bi-panel { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} +.bi-panel .panel-title .panel-title-text { + cursor: text; + font-size: 14px; +} +.bi-sortable-holder { + border: 1px dashed #e8eaed; +} +.bi-all-count-pager .all-pager-prev { + font-size: 16px; +} +.bi-all-count-pager .all-pager-next { + font-size: 16px; +} +.bi-all-count-pager .row-count { + color: #3685f2; +} + +.bi-direction-pager .direction-pager-prev { + font-size: 16px; +} +.bi-direction-pager .direction-pager-next { + font-size: 16px; +} + +.bi-pager .page-item { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} +.bi-pane { + min-height: 25px; +} +.bi-pane.loading-status { + min-height: 55px; +} +.bi-pane .loading-container { + background-color: rgba(247, 248, 250, 0); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00f7f8fa,endColorstr=#00f7f8fa); +} +.bi-loading-widget { + font-size: 0; +} +.bi-loading-widget .animate-rect { + background-color: rgba(54, 133, 242, 0.9); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#e63685f2,endColorstr=#e63685f2); + -webkit-border-radius: 1.5px; + -moz-border-radius: 1.5px; + border-radius: 1.5px; + -webkit-animation: loading-widget 0.8s infinite linear; + -moz-animation: loading-widget 0.8s infinite linear; + -ms-animation: loading-widget 0.8s infinite linear; + -o-animation: loading-widget 0.8s infinite linear; + animation: loading-widget 0.8s infinite linear; +} +.bi-loading-widget .rect2 { + -webkit-animation-delay: -0.2s; + -moz-animation-delay: -0.2s; + -ms-animation-delay: -0.2s; + -o-animation-delay: -0.2s; + animation-delay: -0.2s; +} +.bi-loading-widget .rect3 { + -webkit-animation-delay: -0.4s; + -moz-animation-delay: -0.4s; + -ms-animation-delay: -0.4s; + -o-animation-delay: -0.4s; + animation-delay: -0.4s; +} +@-webkit-keyframes loading-widget { + 0%, + 100% { + -webkit-transform: scaleY(0.3); + -moz-transform: scaleY(0.3); + -o-transform: scaleY(0.3); + -ms-transform: scaleY(0.3); + transform: scaleY(0.3); + } + 50% { + -webkit-transform: scaleY(1); + -moz-transform: scaleY(1); + -o-transform: scaleY(1); + -ms-transform: scaleY(1); + transform: scaleY(1); + } +} +@-moz-keyframes loading-widget { + 0%, + 100% { + -webkit-transform: scaleY(0.3); + -moz-transform: scaleY(0.3); + -o-transform: scaleY(0.3); + -ms-transform: scaleY(0.3); + transform: scaleY(0.3); + } + 50% { + -webkit-transform: scaleY(1); + -moz-transform: scaleY(1); + -o-transform: scaleY(1); + -ms-transform: scaleY(1); + transform: scaleY(1); + } +} +@-ms-keyframes loading-widget { + 0%, + 100% { + -webkit-transform: scaleY(0.3); + -moz-transform: scaleY(0.3); + -o-transform: scaleY(0.3); + -ms-transform: scaleY(0.3); + transform: scaleY(0.3); + } + 50% { + -webkit-transform: scaleY(1); + -moz-transform: scaleY(1); + -o-transform: scaleY(1); + -ms-transform: scaleY(1); + transform: scaleY(1); + } +} +@-o-keyframes loading-widget { + 0%, + 100% { + -webkit-transform: scaleY(0.3); + -moz-transform: scaleY(0.3); + -o-transform: scaleY(0.3); + -ms-transform: scaleY(0.3); + transform: scaleY(0.3); + } + 50% { + -webkit-transform: scaleY(1); + -moz-transform: scaleY(1); + -o-transform: scaleY(1); + -ms-transform: scaleY(1); + transform: scaleY(1); + } +} +@keyframes loading-widget { + 0%, + 100% { + -webkit-transform: scaleY(0.3); + -moz-transform: scaleY(0.3); + -o-transform: scaleY(0.3); + -ms-transform: scaleY(0.3); + transform: scaleY(0.3); + } + 50% { + -webkit-transform: scaleY(1); + -moz-transform: scaleY(1); + -o-transform: scaleY(1); + -ms-transform: scaleY(1); + transform: scaleY(1); + } +} +.bi-segment-button { + color: #3685f2; +} +.bi-segment > .center-element { + overflow: hidden; + overflow-x: hidden; + overflow-y: hidden; + background: #ffffff; + border-right: 1px solid #3685f2; + border-top: 1px solid #3685f2; + border-bottom: 1px solid #3685f2; +} +.bi-segment > .first-element { + border-left: 1px solid #3685f2; + -webkit-border-radius: 2px 0px 0px 2px; + -moz-border-radius: 2px 0px 0px 2px; + border-radius: 2px 0px 0px 2px; +} +.bi-segment > .last-element { + -webkit-border-radius: 0px 2px 2px 0px; + -moz-border-radius: 0px 2px 2px 0px; + border-radius: 0px 2px 2px 0px; +} +.bi-segment.disabled > .center-element, +.bi-segment.disabled > .first-element { + border-color: #d0d4da; +} +.bi-theme-dark .bi-segment > .center-element { + overflow: hidden; + overflow-x: hidden; + overflow-y: hidden; + background: #20263b; + border-right: 1px solid #363e55; + border-top: 1px solid #363e55; + border-bottom: 1px solid #363e55; +} +.bi-theme-dark .bi-segment > .first-element { + border-left: 1px solid #20263b; +} +.bi-half-button { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} + +body .bi-button, +#body .bi-button { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; + border: 1px solid #3685f2; + background-color: #3685f2; + -webkit-box-sizing: border-box; + /*Safari3.2+*/ + -moz-box-sizing: border-box; + /*Firefox3.5+*/ + -ms-box-sizing: border-box; + /*IE8*/ + box-sizing: border-box; + /*W3C标准(IE9+,Safari5.1+,Chrome10.0+,Opera10.6+都符合box-sizing的w3c标准语法)*/ + text-align: center; + vertical-align: middle; + cursor: pointer; +} +body .bi-button.hack, +#body .bi-button.hack { + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; +} +body .bi-button.block, +#body .bi-button.block { + font-size: inherit; + border-width: 0; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; +} +body .bi-button.clear, +#body .bi-button.clear { + font-size: inherit; + border-width: 0; + background-color: transparent; +} +body .bi-button.clear:hover, +#body .bi-button.clear:hover { + opacity: 0.9; + filter: alpha(opacity=90); +} +body .bi-button.clear:active, +#body .bi-button.clear:active { + opacity: 0.8; + filter: alpha(opacity=80); +} +body .bi-button.clear:after, +#body .bi-button.clear:after { + display: none; +} +body .bi-button.ghost, +#body .bi-button.ghost { + font-size: inherit; + background-color: transparent; +} +body .bi-button.button-common, +#body .bi-button.button-common, +body .bi-button.button-common .b-font:before, +#body .bi-button.button-common .b-font:before { + color: #ffffff; +} +body .bi-button.button-common.clear, +#body .bi-button.button-common.clear, +body .bi-button.button-common.clear .b-font:before, +#body .bi-button.button-common.clear .b-font:before { + color: #3685f2; +} +body .bi-button.button-common.ghost, +#body .bi-button.button-common.ghost, +body .bi-button.button-common.ghost .b-font:before, +#body .bi-button.button-common.ghost .b-font:before { + color: #3685f2; +} +body .bi-button.button-common.ghost:hover, +#body .bi-button.button-common.ghost:hover { + color: #ffffff; + background-color: #3685f2; +} +body .bi-button.button-common.ghost:active, +#body .bi-button.button-common.ghost:active { + background-color: #3685f2; +} +body .bi-button.button-ignore, +#body .bi-button.button-ignore { + background-color: transparent; + border-color: #3685f2; +} +body .bi-button.button-ignore, +#body .bi-button.button-ignore, +body .bi-button.button-ignore .b-font:before, +#body .bi-button.button-ignore .b-font:before { + color: #3685f2; +} +body .bi-button.button-ignore.clear, +#body .bi-button.button-ignore.clear { + background-color: transparent; + border-width: 0; +} +body .bi-button.button-success, +#body .bi-button.button-success { + background-color: #13cd66; + border-color: #13cd66; +} +body .bi-button.button-success, +#body .bi-button.button-success, +body .bi-button.button-success .b-font:before, +#body .bi-button.button-success .b-font:before { + color: #ffffff; +} +body .bi-button.button-success.clear, +#body .bi-button.button-success.clear { + background-color: transparent; + border-width: 0; +} +body .bi-button.button-success.clear, +#body .bi-button.button-success.clear, +body .bi-button.button-success.clear .b-font:before, +#body .bi-button.button-success.clear .b-font:before { + color: #13cd66; +} +body .bi-button.button-warning, +#body .bi-button.button-warning { + background-color: #faaa39; + border-color: #fbb03b; +} +body .bi-button.button-warning, +#body .bi-button.button-warning, +body .bi-button.button-warning .b-font:before, +#body .bi-button.button-warning .b-font:before { + color: #ffffff; +} +body .bi-button.button-warning.clear, +#body .bi-button.button-warning.clear { + background-color: transparent; + border-width: 0; +} +body .bi-button.button-warning.clear, +#body .bi-button.button-warning.clear, +body .bi-button.button-warning.clear .b-font:before, +#body .bi-button.button-warning.clear .b-font:before { + color: #faaa39; +} +body .bi-button.button-error, +#body .bi-button.button-error { + background-color: #e65251; + border-color: #e65251; +} +body .bi-button.button-error, +#body .bi-button.button-error, +body .bi-button.button-error .b-font:before, +#body .bi-button.button-error .b-font:before { + color: #ffffff; +} +body .bi-button.button-error.clear, +#body .bi-button.button-error.clear { + background-color: transparent; + border-width: 0; +} +body .bi-button.button-error.clear, +#body .bi-button.button-error.clear, +body .bi-button.button-error.clear .b-font:before, +#body .bi-button.button-error.clear .b-font:before { + color: #e65251; +} +body .bi-button.button-common.disabled, +#body .bi-button.button-common.disabled, +body .bi-button.button-success.disabled, +#body .bi-button.button-success.disabled, +body .bi-button.button-error.disabled, +#body .bi-button.button-error.disabled, +body .bi-button.button-warning.disabled, +#body .bi-button.button-warning.disabled, +body .bi-button.button-common.disabled.base-disabled, +#body .bi-button.button-common.disabled.base-disabled, +body .bi-button.button-success.disabled.base-disabled, +#body .bi-button.button-success.disabled.base-disabled, +body .bi-button.button-error.disabled.base-disabled, +#body .bi-button.button-error.disabled.base-disabled, +body .bi-button.button-warning.disabled.base-disabled, +#body .bi-button.button-warning.disabled.base-disabled { + background-color: rgba(158, 166, 178, 0.2) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#339ea6b2,endColorstr=#339ea6b2); + border-color: #d0d4da !important; +} +body .bi-button.button-common.disabled, +#body .bi-button.button-common.disabled, +body .bi-button.button-success.disabled, +#body .bi-button.button-success.disabled, +body .bi-button.button-error.disabled, +#body .bi-button.button-error.disabled, +body .bi-button.button-warning.disabled, +#body .bi-button.button-warning.disabled, +body .bi-button.button-common.disabled.base-disabled, +#body .bi-button.button-common.disabled.base-disabled, +body .bi-button.button-success.disabled.base-disabled, +#body .bi-button.button-success.disabled.base-disabled, +body .bi-button.button-error.disabled.base-disabled, +#body .bi-button.button-error.disabled.base-disabled, +body .bi-button.button-warning.disabled.base-disabled, +#body .bi-button.button-warning.disabled.base-disabled, +body .bi-button.button-common.disabled .b-font:before, +#body .bi-button.button-common.disabled .b-font:before, +body .bi-button.button-success.disabled .b-font:before, +#body .bi-button.button-success.disabled .b-font:before, +body .bi-button.button-error.disabled .b-font:before, +#body .bi-button.button-error.disabled .b-font:before, +body .bi-button.button-warning.disabled .b-font:before, +#body .bi-button.button-warning.disabled .b-font:before, +body .bi-button.button-common.disabled.base-disabled .b-font:before, +#body .bi-button.button-common.disabled.base-disabled .b-font:before, +body .bi-button.button-success.disabled.base-disabled .b-font:before, +#body .bi-button.button-success.disabled.base-disabled .b-font:before, +body .bi-button.button-error.disabled.base-disabled .b-font:before, +#body .bi-button.button-error.disabled.base-disabled .b-font:before, +body .bi-button.button-warning.disabled.base-disabled .b-font:before, +#body .bi-button.button-warning.disabled.base-disabled .b-font:before { + color: #9ea6b2 !important; +} +body .bi-button.button-common.disabled:after, +#body .bi-button.button-common.disabled:after, +body .bi-button.button-success.disabled:after, +#body .bi-button.button-success.disabled:after, +body .bi-button.button-error.disabled:after, +#body .bi-button.button-error.disabled:after, +body .bi-button.button-warning.disabled:after, +#body .bi-button.button-warning.disabled:after { + display: none; +} +body .bi-button.button-ignore.disabled, +#body .bi-button.button-ignore.disabled { + background: #ffffff !important; + border-color: #e8eaed !important; +} +body .bi-button.button-ignore.disabled, +#body .bi-button.button-ignore.disabled, +body .bi-button.button-ignore.disabled .b-font:before, +#body .bi-button.button-ignore.disabled .b-font:before { + color: #9ea6b2 !important; +} +body .bi-button.button-ignore.disabled:after, +#body .bi-button.button-ignore.disabled:after { + display: none; +} +body .bi-button.button-common.disabled.clear, +#body .bi-button.button-common.disabled.clear, +body .bi-button.button-success.disabled.clear, +#body .bi-button.button-success.disabled.clear, +body .bi-button.button-warning.disabled.clear, +#body .bi-button.button-warning.disabled.clear, +body .bi-button.button-error.disabled.clear, +#body .bi-button.button-error.disabled.clear, +body .bi-button.button-ignore.disabled.clear, +#body .bi-button.button-ignore.disabled.clear { + background: transparent !important; + border-width: 0 !important; +} +body .bi-button.button-common.disabled.clear, +#body .bi-button.button-common.disabled.clear, +body .bi-button.button-success.disabled.clear, +#body .bi-button.button-success.disabled.clear, +body .bi-button.button-warning.disabled.clear, +#body .bi-button.button-warning.disabled.clear, +body .bi-button.button-error.disabled.clear, +#body .bi-button.button-error.disabled.clear, +body .bi-button.button-ignore.disabled.clear, +#body .bi-button.button-ignore.disabled.clear, +body .bi-button.button-common.disabled.clear .b-font:before, +#body .bi-button.button-common.disabled.clear .b-font:before, +body .bi-button.button-success.disabled.clear .b-font:before, +#body .bi-button.button-success.disabled.clear .b-font:before, +body .bi-button.button-warning.disabled.clear .b-font:before, +#body .bi-button.button-warning.disabled.clear .b-font:before, +body .bi-button.button-error.disabled.clear .b-font:before, +#body .bi-button.button-error.disabled.clear .b-font:before, +body .bi-button.button-ignore.disabled.clear .b-font:before, +#body .bi-button.button-ignore.disabled.clear .b-font:before { + color: #9ea6b2 !important; +} +body .bi-button.button-common.disabled.clear:hover, +#body .bi-button.button-common.disabled.clear:hover, +body .bi-button.button-success.disabled.clear:hover, +#body .bi-button.button-success.disabled.clear:hover, +body .bi-button.button-warning.disabled.clear:hover, +#body .bi-button.button-warning.disabled.clear:hover, +body .bi-button.button-error.disabled.clear:hover, +#body .bi-button.button-error.disabled.clear:hover, +body .bi-button.button-ignore.disabled.clear:hover, +#body .bi-button.button-ignore.disabled.clear:hover, +body .bi-button.button-common.disabled.clear:active, +#body .bi-button.button-common.disabled.clear:active, +body .bi-button.button-success.disabled.clear:active, +#body .bi-button.button-success.disabled.clear:active, +body .bi-button.button-warning.disabled.clear:active, +#body .bi-button.button-warning.disabled.clear:active, +body .bi-button.button-error.disabled.clear:active, +#body .bi-button.button-error.disabled.clear:active, +body .bi-button.button-ignore.disabled.clear:active, +#body .bi-button.button-ignore.disabled.clear:active { + opacity: 1; + filter: alpha(opacity=100); +} +body .bi-button.button-common.disabled.ghost, +#body .bi-button.button-common.disabled.ghost, +body .bi-button.button-success.disabled.ghost, +#body .bi-button.button-success.disabled.ghost, +body .bi-button.button-warning.disabled.ghost, +#body .bi-button.button-warning.disabled.ghost, +body .bi-button.button-error.disabled.ghost, +#body .bi-button.button-error.disabled.ghost, +body .bi-button.button-ignore.disabled.ghost, +#body .bi-button.button-ignore.disabled.ghost { + background: transparent !important; + border-color: #3685f2 !important; + opacity: 0.5; + filter: alpha(opacity=50); +} +body .bi-button.button-common.disabled.ghost, +#body .bi-button.button-common.disabled.ghost, +body .bi-button.button-success.disabled.ghost, +#body .bi-button.button-success.disabled.ghost, +body .bi-button.button-warning.disabled.ghost, +#body .bi-button.button-warning.disabled.ghost, +body .bi-button.button-error.disabled.ghost, +#body .bi-button.button-error.disabled.ghost, +body .bi-button.button-ignore.disabled.ghost, +#body .bi-button.button-ignore.disabled.ghost, +body .bi-button.button-common.disabled.ghost .b-font:before, +#body .bi-button.button-common.disabled.ghost .b-font:before, +body .bi-button.button-success.disabled.ghost .b-font:before, +#body .bi-button.button-success.disabled.ghost .b-font:before, +body .bi-button.button-warning.disabled.ghost .b-font:before, +#body .bi-button.button-warning.disabled.ghost .b-font:before, +body .bi-button.button-error.disabled.ghost .b-font:before, +#body .bi-button.button-error.disabled.ghost .b-font:before, +body .bi-button.button-ignore.disabled.ghost .b-font:before, +#body .bi-button.button-ignore.disabled.ghost .b-font:before { + color: #3685f2 !important; +} +.bi-basic-button.button-common:after, +.bi-basic-button.button-success:after, +.bi-basic-button.button-warning:after, +.bi-basic-button.button-error:after { + content: ""; + background-color: #232E40; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; + display: block; + width: 100%; + height: 100%; + position: absolute; + transform: scale(1, 1); + opacity: 0; + filter: alpha(opacity=0); + -webkit-transition: transform 0.5s ease, opacity 1s ease; + -moz-transition: transform 0.5s ease, opacity 1s ease; + -o-transition: transform 0.5s ease, opacity 1s ease; + transition: transform 0.5s ease, opacity 1s ease; + left: 0; + top: 0; + pointer-events: none; +} +.bi-basic-button.button-common.hack:after, +.bi-basic-button.button-success.hack:after, +.bi-basic-button.button-warning.hack:after, +.bi-basic-button.button-error.hack:after { + content: none; +} +.bi-basic-button.button-common:active:after, +.bi-basic-button.button-success:active:after, +.bi-basic-button.button-warning:active:after, +.bi-basic-button.button-error:active:after { + transform: scale(0, 1); + opacity: 0.1; + filter: alpha(opacity=10); + -webkit-transition: transform 0s; + -moz-transition: transform 0s; + -o-transition: transform 0s; + transition: transform 0s; +} +.bi-basic-button.button-common:hover .bi-button-mask, +.bi-basic-button.button-success:hover .bi-button-mask, +.bi-basic-button.button-warning:hover .bi-button-mask, +.bi-basic-button.button-error:hover .bi-button-mask { + opacity: 0.1; + filter: alpha(opacity=10); + background-color: #ffffff; + -webkit-transition: opacity 0.3s ease; + -moz-transition: opacity 0.3s ease; + -o-transition: opacity 0.3s ease; + transition: opacity 0.3s ease; +} +.bi-basic-button.button-ignore:after { + content: ""; + background-color: #3685f2; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; + display: block; + width: 100%; + height: 100%; + position: absolute; + transform: scale(1, 1); + opacity: 0; + filter: alpha(opacity=0); + -webkit-transition: transform 0.5s ease, opacity 1s ease; + -moz-transition: transform 0.5s ease, opacity 1s ease; + -o-transition: transform 0.5s ease, opacity 1s ease; + transition: transform 0.5s ease, opacity 1s ease; + left: 0; + top: 0; + pointer-events: none; +} +.bi-basic-button.button-ignore.hack:after { + content: none; +} +.bi-basic-button.button-ignore:active:after { + transform: scale(0, 1); + opacity: 0.1; + filter: alpha(opacity=10); + -webkit-transition: transform 0s; + -moz-transition: transform 0s; + -o-transition: transform 0s; + transition: transform 0s; +} +.bi-basic-button.button-ignore:hover { + background-color: rgba(54, 133, 242, 0.05); + -webkit-transition: opacity 0.3s ease; + -moz-transition: opacity 0.3s ease; + -o-transition: opacity 0.3s ease; + transition: opacity 0.3s ease; +} +.bi-basic-button .popup-content { + font-size: 14px; +} +.bi-theme-dark body .bi-button.button-common.ghost, +.bi-theme-dark #body .bi-button.button-common.ghost, +.bi-theme-dark body .bi-button.button-common.ghost .b-font:before, +.bi-theme-dark #body .bi-button.button-common.ghost .b-font:before { + color: #ffffff; + border-color: #ffffff; +} +.bi-theme-dark body .bi-button.button-common.ghost:hover, +.bi-theme-dark #body .bi-button.button-common.ghost:hover { + color: #3d4d66; + background-color: #ffffff; +} +.bi-theme-dark body .bi-button.button-common.ghost:active, +.bi-theme-dark #body .bi-button.button-common.ghost:active { + background-color: rgba(255, 255, 255, 0.9); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#e6ffffff,endColorstr=#e6ffffff); +} +.bi-theme-dark body .bi-button.button-ignore:hover, +.bi-theme-dark #body .bi-button.button-ignore:hover { + background-color: rgba(54, 133, 242, 0.05); +} +.bi-theme-dark body .bi-button.button-ignore:active, +.bi-theme-dark #body .bi-button.button-ignore:active { + background-color: rgba(54, 133, 242, 0.1); +} +.bi-theme-dark body .bi-button.button-common.disabled.ghost, +.bi-theme-dark #body .bi-button.button-common.disabled.ghost { + background: transparent !important; + border-color: #ffffff !important; + opacity: 0.5; + filter: alpha(opacity=50); +} +.bi-theme-dark body .bi-button.button-common.disabled.ghost, +.bi-theme-dark #body .bi-button.button-common.disabled.ghost, +.bi-theme-dark body .bi-button.button-common.disabled.ghost .b-font:before, +.bi-theme-dark #body .bi-button.button-common.disabled.ghost .b-font:before { + color: #ffffff !important; +} +.bi-theme-dark body .bi-button.button-success.disabled, +.bi-theme-dark #body .bi-button.button-success.disabled, +.bi-theme-dark body .bi-button.button-error.disabled, +.bi-theme-dark #body .bi-button.button-error.disabled, +.bi-theme-dark body .bi-button.button-warning.disabled, +.bi-theme-dark #body .bi-button.button-warning.disabled, +.bi-theme-dark body .bi-button.button-ignore.disabled, +.bi-theme-dark #body .bi-button.button-ignore.disabled, +.bi-theme-dark body .bi-button.button-success.disabled.base-disabled, +.bi-theme-dark #body .bi-button.button-success.disabled.base-disabled, +.bi-theme-dark body .bi-button.button-error.disabled.base-disabled, +.bi-theme-dark #body .bi-button.button-error.disabled.base-disabled, +.bi-theme-dark body .bi-button.button-warning.disabled.base-disabled, +.bi-theme-dark #body .bi-button.button-warning.disabled.base-disabled, +.bi-theme-dark body .bi-button.button-ignore.disabled.base-disabled, +.bi-theme-dark #body .bi-button.button-ignore.disabled.base-disabled { + background-color: rgba(135, 141, 159, 0.2) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#33878d9f,endColorstr=#33878d9f); +} +.bi-single-select-icon-text-item:active .b-font:before, +.bi-single-select-icon-text-item.active .b-font:before { + color: #3685f2; +} +.bi-switch { + -webkit-border-radius: 40px 40px 40px 40px; + -moz-border-radius: 40px 40px 40px 40px; + border-radius: 40px 40px 40px 40px; + background-color: #d0d4da; +} +.bi-switch:active, +.bi-switch.active { + background-color: #3685f2; +} +.bi-switch .circle-button { + -webkit-border-radius: 9px 9px 9px 9px; + -moz-border-radius: 9px 9px 9px 9px; + border-radius: 9px 9px 9px 9px; +} +.bi-switch.disabled { + background-color: #f2f4f7; +} +.bi-switch.disabled:active { + background-color: #f2f4f7; +} +.bi-theme-dark .bi-switch { + background-color: #606479; +} +.bi-theme-dark .bi-switch:active, +.bi-theme-dark .bi-switch.active { + background-color: #3685f2; +} +.bi-theme-dark .bi-switch.disabled { + background-color: #292f45; +} +.bi-theme-dark .bi-switch.disabled:active { + background-color: #292f45; +} +.bi-multifile-editor .multifile-editor { + text-align: right; + cursor: pointer; + font-size: 100px; + z-index: 2; + margin-left: -5px; +} + +.bi-textarea-editor { + overflow: hidden; + overflow-x: hidden; + overflow-y: hidden; +} +.bi-textarea-editor .textarea-editor-content { + white-space: pre-wrap; + font-size: 12px; + line-height: 21px; + border: none; +} +.bi-html article, +.bi-html aside, +.bi-html details, +.bi-html figcaption, +.bi-html figure, +.bi-html footer, +.bi-html header, +.bi-html hgroup, +.bi-html nav, +.bi-html section, +.bi-html summary { + display: block; +} +.bi-html audio, +.bi-html canvas, +.bi-html video { + display: inline-block; + *display: inline; + *zoom: 1; +} +.bi-html audio:not([controls]) { + display: none; + height: 0; +} +.bi-html [hidden] { + display: none; +} +.bi-html html { + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +.bi-html html, +.bi-html button, +.bi-html input, +.bi-html select, +.bi-html textarea { + font-family: sans-serif; +} +.bi-html body { + margin: 0; +} +.bi-html a:focus { + outline: thin dotted; +} +.bi-html a:active, +.bi-html a:hover { + outline: 0; +} +.bi-html h1 { + font-size: 2em; + margin: 0.67em 0; +} +.bi-html h2 { + font-size: 1.5em; + margin: 0.83em 0; +} +.bi-html h3 { + font-size: 1.17em; + margin: 1em 0; +} +.bi-html h4 { + font-size: 1em; + margin: 1.33em 0; +} +.bi-html h5 { + font-size: .83em; + margin: 1.67em 0; +} +.bi-html h6 { + font-size: .75em; + margin: 2.33em 0; +} +.bi-html abbr[title] { + border-bottom: 1px dotted; +} +.bi-html b, +.bi-html strong { + font-weight: bold; +} +.bi-html blockquote { + margin: 1em 40px; +} +.bi-html dfn { + font-style: italic; +} +.bi-html mark { + background: #ff0; + color: #000; +} +.bi-html p, +.bi-html pre { + margin: 1em 0; +} +.bi-html code, +.bi-html kbd, +.bi-html pre, +.bi-html samp { + font-family: monospace, serif; + _font-family: 'courier new', monospace; + font-size: 1em; +} +.bi-html pre { + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} +.bi-html q { + quotes: none; +} +.bi-html q:before, +.bi-html q:after { + content: ''; + content: none; +} +.bi-html small { + font-size: 75%; +} +.bi-html sub, +.bi-html sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +.bi-html sup { + top: -0.5em; +} +.bi-html sub { + bottom: -0.25em; +} +.bi-html dl, +.bi-html menu, +.bi-html ol, +.bi-html ul { + margin: 1em 0; +} +.bi-html dd { + margin: 0 0 0 40px; +} +.bi-html menu, +.bi-html ol, +.bi-html ul { + padding: 0 0 0 40px; +} +.bi-html nav ul, +.bi-html nav ol { + list-style: none; + list-style-image: none; +} +.bi-html ul { + list-style: disc; +} +.bi-html li { + list-style-type: disc; +} +.bi-html img { + border: 0; + -ms-interpolation-mode: bicubic; +} +.bi-html svg:not(:root) { + overflow: hidden; +} +.bi-html figure { + margin: 0; +} +.bi-html form { + margin: 0; +} +.bi-html fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +.bi-html legend { + border: 0; + padding: 0; + white-space: normal; + *margin-left: -7px; +} +.bi-html button, +.bi-html input, +.bi-html select, +.bi-html textarea { + font-size: 100%; + margin: 0; + vertical-align: baseline; + *vertical-align: middle; +} +.bi-html button, +.bi-html input { + line-height: normal; +} +.bi-html button, +.bi-html html input[type="button"], +.bi-html input[type="reset"], +.bi-html input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; + *overflow: visible; +} +.bi-html button[disabled], +.bi-html input[disabled] { + cursor: default; +} +.bi-html input[type="checkbox"], +.bi-html input[type="radio"] { + box-sizing: border-box; + padding: 0; + *height: 13px; + *width: 13px; +} +.bi-html input[type="search"] { + -webkit-appearance: textfield; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; +} +.bi-html input[type="search"]::-webkit-search-cancel-button, +.bi-html input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +.bi-html button::-moz-focus-inner, +.bi-html input::-moz-focus-inner { + border: 0; + padding: 0; +} +.bi-html textarea { + overflow: auto; + vertical-align: top; +} +.bi-html table { + border-collapse: collapse; + border-spacing: 0; +} +.x-icon.b-font { + margin: auto; + width: 100%; +} +.bi-checkbox .checkbox-content { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; + border: 1px solid #9EA6B2; +} +.bi-checkbox .checkbox-content:after { + position: absolute; + display: table; + top: 50%; + left: 20%; + border: 2px solid transparent; + border-top: 0; + border-left: 0; + width: 4px; + height: 8px; + -webkit-transform: rotate(45deg) scale(1) translate(-50%, -50%); + -moz-transform: rotate(45deg) scale(1) translate(-50%, -50%); + -o-transform: rotate(45deg) scale(1) translate(-50%, -50%); + -ms-transform: rotate(45deg) scale(1) translate(-50%, -50%); + transform: rotate(45deg) scale(1) translate(-50%, -50%); + content: ''; +} +.bi-checkbox .checkbox-content.hover, +.bi-checkbox .checkbox-content:hover { + border-color: #3685f2; +} +.bi-checkbox.active .checkbox-content, +.bi-checkbox:active .checkbox-content { + border-color: #3685f2; +} +.bi-checkbox.active .checkbox-content:after, +.bi-checkbox:active .checkbox-content:after { + border-color: #ffffff; + opacity: 1; +} +.bi-checkbox.disabled .checkbox-content { + background-color: #f2f4f7; + border-color: #d0d4da; +} +.bi-checkbox.disabled .checkbox-content:after { + opacity: 0; +} +.bi-checkbox.disabled.active .checkbox-content { + background-color: #d0d4da; +} +.bi-checkbox.disabled.active .checkbox-content:after { + opacity: 1; +} +.bi-theme-dark .bi-checkbox .checkbox-content { + border-color: #878D9F; +} +.bi-theme-dark .bi-checkbox .checkbox-content.hover, +.bi-theme-dark .bi-checkbox .checkbox-content:hover { + border-color: #3685f2; +} +.bi-theme-dark .bi-checkbox.active .checkbox-content, +.bi-theme-dark .bi-checkbox:active .checkbox-content { + border-color: #3685f2; +} +.bi-theme-dark .bi-checkbox.disabled .checkbox-content { + background-color: #292f45; +} +.bi-theme-dark .bi-checkbox.disabled.active .checkbox-content { + background-color: #606479; + border-color: #606479; +} +.bi-file { + opacity: 0; + filter: alpha(opacity=0); + z-index: 2; +} +.bi-input, +.bi-textarea { + border: none; + outline: none; + background-color: transparent; + padding: 0; + margin: 0; + width: 100%; + height: 100%; +} +.bi-input.bi-input-focus, +.bi-textarea.bi-input-focus { + border: none; +} +.bi-input.bi-input-error, +.bi-textarea.bi-input-error { + border: none; + color: #e65251 !important; +} +.bi-radio .radio-content { + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; + border: 1px solid #9EA6B2; +} +.bi-radio .radio-content:after { + content: ""; +} +.bi-radio .radio-content.hover, +.bi-radio .radio-content:hover { + border-color: #3685f2; +} +.bi-radio:active .radio-content, +.bi-radio.active .radio-content { + border-color: #3685f2; +} +.bi-radio:active .radio-content:after, +.bi-radio.active .radio-content:after { + width: 6px; + height: 6px; + display: table; + position: absolute; + top: 50%; + left: 50%; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + background-color: #ffffff; + -webkit-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} +.bi-radio.disabled .radio-content { + background-color: #f2f4f7; + border-color: #d0d4da; +} +.bi-radio.disabled .radio-content:after { + background-color: transparent; +} +.bi-radio.disabled.active .radio-content { + background-color: #d0d4da; +} +.bi-radio.disabled.active .radio-content:after { + background-color: #ffffff; +} +.bi-theme-dark .bi-radio .radio-content { + border-color: #878D9F; +} +.bi-theme-dark .bi-radio .radio-content.hover, +.bi-theme-dark .bi-radio .radio-content:hover { + border-color: #3685f2; +} +.bi-theme-dark .bi-radio.active .radio-content, +.bi-theme-dark .bi-radio:active .radio-content { + border-color: #3685f2; +} +.bi-theme-dark .bi-radio.disabled .radio-content { + background-color: #292f45; +} +.bi-theme-dark .bi-radio.disabled .radio-content.hover, +.bi-theme-dark .bi-radio.disabled .radio-content:hover { + border-color: #878D9F; +} +.bi-theme-dark .bi-radio.disabled.active .radio-content { + background-color: #606479; + border-color: #606479; +} +.bi-label { + overflow: hidden; + overflow-x: hidden; + overflow-y: hidden; + word-break: break-all; +} +.bi-text { + overflow: hidden; + overflow-x: hidden; + overflow-y: hidden; + -webkit-box-sizing: border-box; + /*Safari3.2+*/ + -moz-box-sizing: border-box; + /*Firefox3.5+*/ + -ms-box-sizing: border-box; + /*IE8*/ + box-sizing: border-box; + /*W3C标准(IE9+,Safari5.1+,Chrome10.0+,Opera10.6+都符合box-sizing的w3c标准语法)*/ + word-break: break-word; +} +.bi-bubble .bubble-text { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} +.bi-bubble .bubble-error { + background: #ffecec; + color: #e65251; +} +.bi-theme-dark .bi-bubble .bubble-error { + background: #3A2940; +} +.bi-bubble .bubble-common { + background: #eaf2fd; + color: #3685f2; +} +.bi-bubble .bubble-success { + background: #e1f4e7; + color: #13cd66; +} +.bi-bubble .bubble-warning { + background: #feeed7; + color: #faaa39; +} + +.bi-tip { + position: fixed !important; +} + +.bi-toast { + color: #ffffff; + max-width: 400px; + min-width: 150px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} +.bi-toast.toast-success { + background: #13cd66; +} +.bi-toast.toast-warning { + background: #faaa39; +} +.bi-toast.toast-error { + background: #e65251; +} +.bi-toast.toast-normal { + background: #3685f2; +} +.bi-toast .toast-icon { + font-size: 16px; +} + +.bi-tooltip { + max-width: 250px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; + font-size: 12px; + color: #ffffff; +} +.bi-tooltip.tooltip-success { + background: #647185; + border: 1px solid #647185; +} +.bi-tooltip.tooltip-warning { + background: #e65251; + border: 1px solid #e65251; +} +.bi-branch-tree .bi-branch-tree-view { + min-width: 300px; +} + +.bi-display-tree .ztree * { + color: #999999; +} +.bi-display-tree .ztree li a, +.bi-display-tree .ztree li span { + cursor: default !important; +} +.bi-display-tree .ztree li a:hover { + text-decoration: none; +} +.bi-display-tree .ztree li a.curSelectedNode { + padding-top: 1px; + border: none; + background-color: inherit; + opacity: 1; + filter: alpha(opacity=100); +} + +.bi-list-display-tree .ztree li a, +.bi-list-display-tree .ztree li span { + cursor: default !important; +} +.bi-list-display-tree .ztree li a:hover { + text-decoration: none; +} +.bi-list-display-tree .ztree li a.curSelectedNode { + padding-top: 1px; + border: none; + background-color: inherit; + opacity: 1; + filter: alpha(opacity=100); +} +.ztree * { + padding: 0; + margin: 0; +} +.ztree { + margin: 0; + padding: 5px; +} +.ztree li { + padding: 0; + margin: 0; + list-style: none; + line-height: 14px; + text-align: left; + white-space: nowrap; + outline: 0; +} +.ztree li ul { + margin: 0; + padding: 0 0 0 18px; +} +.ztree li a { + padding: 1px 3px 0 0; + margin: 0; + cursor: pointer; + height: 24px; + background-color: transparent; + text-decoration: none; + vertical-align: top; + display: inline-block; +} +.ztree li a:hover { + background-color: rgba(54, 133, 242, 0.06); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#0f3685f2,endColorstr=#0f3685f2); +} +.ztree li a:active { + color: #3685f2; + background-color: rgba(54, 133, 242, 0.06); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#0f3685f2,endColorstr=#0f3685f2); +} +.ztree li a.curSelectedNode_Edit { + padding-top: 0px; + background-color: #FFE6B0; + color: black; + height: 16px; + border: 1px #FFB951 solid; + opacity: 0.8; +} +.ztree li a.tmpTargetNode_inner { + padding-top: 0px; + background-color: #316AC5; + color: white; + height: 16px; + border: 1px #316AC5 solid; + opacity: 0.8; + filter: alpha(opacity=80); +} +.ztree li a input.rename { + height: 14px; + width: 80px; + padding: 0; + margin: 0; + font-size: 12px; + border: 1px #7EC4CC solid; + *border: 0px; +} +.ztree li span { + line-height: 24px; + margin-right: 2px; +} +.ztree li span.bi-keyword-red-mark { + margin-right: 0px; +} +.ztree li span.button { + line-height: 0; + margin: 0; + width: 16px; + height: 16px; + display: inline-block; + vertical-align: middle; + border: 0 none; + cursor: pointer; + outline: none; + background-color: transparent; + background-repeat: no-repeat; + background-attachment: scroll; +} +.ztree li span.button.chk { + width: 16px; + height: 16px; + margin: 0 3px 0 0; + cursor: auto; +} +.ztree li span.button.chk.checkbox_false_disable { + background-position: 0 -56px; +} +.ztree li span.button.chk.checkbox_true_disable { + background-position: -14px -56px; +} +.ztree li span.button.chk.radio_false_full { + background-position: -28px 0; +} +.ztree li span.button.chk.radio_false_full_focus { + background-position: -28px -14px; +} +.ztree li span.button.chk.radio_false_part { + background-position: -28px -28px; +} +.ztree li span.button.chk.radio_false_part_focus { + background-position: -28px -42px; +} +.ztree li span.button.chk.radio_false_disable { + background-position: -28px -56px; +} +.ztree li span.button.chk.radio_true_full { + background-position: -42px 0; +} +.ztree li span.button.chk.radio_true_full_focus { + background-position: -42px -14px; +} +.ztree li span.button.chk.radio_true_part { + background-position: -42px -28px; +} +.ztree li span.button.chk.radio_true_part_focus { + background-position: -42px -42px; +} +.ztree li span.button.chk.checkbox_true_full + a { + color: #3685f2; +} +.ztree li span.button.chk.checkbox_true_full_focus + a { + color: #3685f2; +} +.ztree li span.button.chk.checkbox_true_part + a { + color: #3685f2; +} +.ztree li span.button.chk.checkbox_true_part_focus + a { + color: #3685f2; +} +.ztree li span.button.chk.radio_true_disable { + background-position: -42px -56px; +} +.ztree li span.button.switch { + width: 25px; + height: 25px; +} +.ztree li span.button.noline_open { + background-position: -92px -72px; +} +.ztree li span.button.noline_close { + background-position: -74px -72px; +} +.ztree li span.button.root_docu { + background: none; +} +.ztree li span.button.noline_docu { + background: none; +} +.ztree li span.button.ico_open { + margin-right: 2px; + background-position: -110px -16px; + vertical-align: top; + *vertical-align: middle; +} +.ztree li span.button.ico_close { + margin-right: 2px; + background-position: -110px 0; + vertical-align: top; + *vertical-align: middle; +} +.ztree li span.button.ico_docu { + margin-right: 2px; + background-position: -110px -32px; + vertical-align: top; + *vertical-align: middle; +} +.ztree li span.button.edit { + margin-right: 2px; + background-position: -110px -48px; + vertical-align: top; + *vertical-align: middle; +} +.ztree li span.button.remove { + margin-right: 2px; + background-position: -110px -64px; + vertical-align: top; + *vertical-align: middle; +} +.ztree li span.button.ico_loading { + width: 0px; + margin-right: 2px; + vertical-align: top; + *vertical-align: middle; +} +ul.tmpTargetzTree { + background-color: #FFE6B0; + opacity: 0.8; + filter: alpha(opacity=80); +} +span.tmpzTreeMove_arrow { + width: 16px; + height: 16px; + display: inline-block; + padding: 0; + margin: 2px 0 0 1px; + border: 0 none; + position: absolute; + background-color: transparent; + background-repeat: no-repeat; + background-attachment: scroll; + background-position: -110px -80px; +} +ul.ztree.zTreeDragUL { + margin: 0; + padding: 0; + position: absolute; + width: auto; + height: auto; + overflow: hidden; + background-color: #cfcfcf; + border: 1px #00B83F dotted; + opacity: 0.8; + filter: alpha(opacity=80); +} +.zTreeMask { + z-index: 10000; + background-color: #cfcfcf; + opacity: 0.0; + filter: alpha(opacity=0); + position: absolute; +} +/* level style*/ +/*.ztree li span.button.level0 { + display:none; +} +.ztree li ul.level0 { + padding:0; + background:none; +}*/ + + +.bi-trigger .bi-trigger-icon-button { + font-size: 16px; +} + +.bi-select-text-trigger { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} + +.bi-small-select-text-trigger { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} +.bi-popover { + border: 1px solid transparent; +} +/**********BI.BIListView*************/ +.bi-popup-view { + position: fixed !important; + overflow-y: visible !important; + overflow-x: visible !important; + overflow: visible !important; + cursor: default; +} +.bi-popup-view .list-view-outer { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} +.bi-popup-view .padding-outer { + padding-top: 5px; + padding-bottom: 5px; +} +.bi-popup-view .list-view-shadow { + -webkit-box-shadow: 0 1px 5px 0 rgba(35, 46, 64, 0.2); + -moz-box-shadow: 0 1px 5px 0 rgba(35, 46, 64, 0.2); + box-shadow: 0 1px 5px 0 rgba(35, 46, 64, 0.2); +} +.bi-popup-view .list-view-toolbar { + line-height: 24px; +} +.bi-popup-view .list-view-toolbar > .center-element { + border-left: 1px solid #e8eaed; +} +.bi-popup-view .list-view-toolbar > .first-element { + border-left: none; +} +.bi-theme-dark .bi-popup-view .list-view-toolbar > .center-element { + border-left: 1px solid #363e55; +} +.bi-theme-dark .bi-popup-view .list-view-toolbar > .first-element { + border-left: none; +} +.bi-theme-dark .list-view-shadow { + -webkit-box-shadow: 0 1px 5px 0 rgba(25, 27, 43, 0.8); + -moz-box-shadow: 0 1px 5px 0 rgba(25, 27, 43, 0.8); + box-shadow: 0 1px 5px 0 rgba(25, 27, 43, 0.8); +} +.bi-date-trigger { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} +.bi-down-list-popup .list-group-item-text { + max-width: 203px; +} +.bi-down-list-popup .bi-down-list-item .list-item-text { + max-width: 203px; +} +.bi-dynamic-date-combo .date-font { + font-size: 16px; +} +.bi-interactive-arrangement .interactive-arrangement-dragtag-line { + z-index: 1000000000; + background-color: #faaa39; +} +.bi-interactive-arrangement .interactive-arrangement-dragtag-icon { + z-index: 1000000000; +} +.bi-interval-slider-label { + min-height: 50px; +} + +.bi-interval-slider { + min-height: 50px; +} +.bi-month-trigger { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} +.bi-multilayer-select-tree-combo .trigger-icon-button { + font-size: 16px; +} +.bi-multilayer-select-tree-combo .bi-combo.bi-combo-popup + .bi-trigger-icon-button .x-icon { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + transform: rotate(180deg); + -webkit-transition: transform 0.3s ease; + -moz-transition: transform 0.3s ease; + -o-transition: transform 0.3s ease; + transition: transform 0.3s ease; +} +.bi-multilayer-select-tree-combo .bi-combo + .bi-trigger-icon-button .x-icon { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + transform: rotate(0deg); + -webkit-transition: transform 0.3s ease; + -moz-transition: transform 0.3s ease; + -o-transition: transform 0.3s ease; + transition: transform 0.3s ease; +} + +.bi-multilayer-select-level-tree .tree-view { + min-width: 100%; +} +.bi-multilayer-single-tree-combo .trigger-icon-button { + font-size: 16px; +} +.bi-multilayer-single-tree-combo .bi-combo.bi-combo-popup + .bi-trigger-icon-button .x-icon { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + transform: rotate(180deg); + -webkit-transition: transform 0.3s ease; + -moz-transition: transform 0.3s ease; + -o-transition: transform 0.3s ease; + transition: transform 0.3s ease; +} +.bi-multilayer-single-tree-combo .bi-combo + .bi-trigger-icon-button .x-icon { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + transform: rotate(0deg); + -webkit-transition: transform 0.3s ease; + -moz-transition: transform 0.3s ease; + -o-transition: transform 0.3s ease; + transition: transform 0.3s ease; +} + +.bi-multilayer-single-level-tree .tree-view { + min-width: 100%; +} +.bi-multi-select-check-pane .multi-select-check-selected { + text-decoration: underline; +} + +.bi-multi-select-combo .multi-select-trigger-icon-button { + font-size: 16px; +} +.bi-multi-select-combo .bi-combo.bi-combo-popup + .bi-trigger-icon-button .x-icon { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + transform: rotate(180deg); + -webkit-transition: transform 0.3s ease; + -moz-transition: transform 0.3s ease; + -o-transition: transform 0.3s ease; + transition: transform 0.3s ease; +} +.bi-multi-select-combo .bi-combo + .bi-trigger-icon-button .x-icon { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + transform: rotate(0deg); + -webkit-transition: transform 0.3s ease; + -moz-transition: transform 0.3s ease; + -o-transition: transform 0.3s ease; + transition: transform 0.3s ease; +} + +.bi-multi-select-insert-combo .multi-select-trigger-icon-button { + font-size: 16px; +} +.bi-multi-select-insert-combo .bi-combo.bi-combo-popup + .bi-trigger-icon-button .x-icon { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + transform: rotate(180deg); + -webkit-transition: transform 0.3s ease; + -moz-transition: transform 0.3s ease; + -o-transition: transform 0.3s ease; + transition: transform 0.3s ease; +} +.bi-multi-select-insert-combo .bi-combo + .bi-trigger-icon-button .x-icon { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + transform: rotate(0deg); + -webkit-transition: transform 0.3s ease; + -moz-transition: transform 0.3s ease; + -o-transition: transform 0.3s ease; + transition: transform 0.3s ease; +} + + +.bi-multi-select-search-pane .multi-select-toolbar { + color: #faaa39; +} +.bi-multi-select-check-selected-button { + z-index: 1; + min-width: 16px; + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; +} +.bi-multi-select-insert-list .bi-search-editor { + -moz-border-radius-bottomleft: 0px; + -webkit-border-bottom-left-radius: 0px; + -moz-border-radius-bottomright: 0px; + -webkit-border-bottom-right-radius: 0px; + border-bottom-right-radius: 0px; + border-bottom-left-radius: 0px; +} + +.bi-multi-select-list .bi-search-editor { + -moz-border-radius-bottomleft: 0px; + -webkit-border-bottom-left-radius: 0px; + -moz-border-radius-bottomright: 0px; + -webkit-border-bottom-right-radius: 0px; + border-bottom-right-radius: 0px; + border-bottom-left-radius: 0px; +} +.bi-multi-tree-check-pane .multi-tree-check-selected { + color: #3685f2; +} +.bi-multi-tree-combo .multi-select-trigger-icon-button { + font-size: 16px; +} +.bi-multi-tree-combo .bi-combo.bi-combo-popup + .bi-trigger-icon-button .x-icon { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + transform: rotate(180deg); + -webkit-transition: transform 0.3s ease; + -moz-transition: transform 0.3s ease; + -o-transition: transform 0.3s ease; + transition: transform 0.3s ease; +} +.bi-multi-tree-combo .bi-combo + .bi-trigger-icon-button .x-icon { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + transform: rotate(0deg); + -webkit-transition: transform 0.3s ease; + -moz-transition: transform 0.3s ease; + -o-transition: transform 0.3s ease; + transition: transform 0.3s ease; +} +.bi-multi-tree-popup .popup-view-tree { + min-height: 170px; +} +.bi-multi-tree-check-selected-button .trigger-check-selected { + color: #3685f2; + z-index: 1; +} +.bi-number-editor { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} +.bi-number-editor .pull-down-font { + font-size: 12px; +} +.bi-number-editor .pull-up-font { + font-size: 12px; +} +.bi-number-interval.hack { + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; +} +.bi-number-interval .number-interval-small-editor { + -moz-border-radius-topleft: 2px; + -webkit-border-top-left-radius: 2px; + -moz-border-radius-bottomleft: 2px; + -webkit-border-bottom-left-radius: 2px; + border-top-left-radius: 2px; + border-bottom-left-radius: 2px; +} +.bi-number-interval .number-interval-big-editor { + -moz-border-radius-topright: 2px; + -webkit-border-top-right-radius: 2px; + -moz-border-radius-bottomright: 2px; + -webkit-border-bottom-right-radius: 2px; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; +} +.bi-number-interval .number-interval-big-combo { + -moz-border-radius-topleft: 2px; + -webkit-border-top-left-radius: 2px; + -moz-border-radius-bottomleft: 2px; + -webkit-border-bottom-left-radius: 2px; + border-top-left-radius: 2px; + border-bottom-left-radius: 2px; +} +.bi-number-interval .number-interval-big-combo .bi-icon-combo-trigger .icon-combo-trigger-icon { + font-size: 14px; +} +.bi-number-interval .number-interval-small-combo { + -moz-border-radius-topright: 2px; + -webkit-border-top-right-radius: 2px; + -moz-border-radius-bottomright: 2px; + -webkit-border-bottom-right-radius: 2px; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; +} +.bi-number-interval .number-interval-small-combo .bi-icon-combo-trigger .icon-combo-trigger-icon { + font-size: 14px; +} +.bi-number-interval.number-error .bi-input { + color: #e65251 !important; +} +.bi-quarter-trigger { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} +.bi-search-multi-text-value-combo .multi-select-trigger-icon-button { + font-size: 16px; +} +.bi-search-multi-text-value-combo.combo-error .bi-multi-select-searcher .tip-text-style { + color: #e65251; +} +.bi-single-select-combo .single-select-trigger-icon-button { + font-size: 16px; +} +.bi-single-select-combo .bi-combo.bi-combo-popup + .bi-trigger-icon-button .x-icon { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + transform: rotate(180deg); + -webkit-transition: transform 0.3s ease; + -moz-transition: transform 0.3s ease; + -o-transition: transform 0.3s ease; + transition: transform 0.3s ease; +} +.bi-single-select-combo .bi-combo + .bi-trigger-icon-button .x-icon { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + transform: rotate(0deg); + -webkit-transition: transform 0.3s ease; + -moz-transition: transform 0.3s ease; + -o-transition: transform 0.3s ease; + transition: transform 0.3s ease; +} +.bi-single-slider-label { + min-height: 50px; +} + +.bi-single-slider-normal { + min-height: 30px; +} +.bi-single-slider { + min-height: 50px; +} +.bi-single-slider-button .slider-button { + cursor: ew-resize; + border-width: 2px; + border-style: solid; + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; + background-color: #ffffff; + height: 12px; + width: 12px; + top: 6px; + left: -8px; +} +.bi-single-slider-button .slider-button:hover, +.bi-single-slider-button .slider-button.hover { + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; + background-color: #f7f8fa; + width: 16px; + height: 16px; + top: 4px; + left: -10px; +} +.bi-single-slider-button .slider-button.disabled { + border-color: #d0d4da; +} +.bi-single-slider-button .slider-button.disabled:hover, +.bi-single-slider-button .slider-button.disabled.hover { + background-color: #f7f8fa; + width: 12px; + height: 12px; + top: 6px; + left: -8px; +} +.bi-theme-dark .bi-single-slider-button .slider-button { + background-color: #20263b; +} +.bi-theme-dark .bi-single-slider-button .slider-button:hover, +.bi-theme-dark .bi-single-slider-button .slider-button.hover { + background-color: #191b2b; +} +.bi-theme-dark .bi-single-slider-button .slider-button.disabled:hover, +.bi-theme-dark .bi-single-slider-button .slider-button.disabled.hover { + background-color: #191b2b; +} +.bi-slider-track .gray-track { + background-color: rgba(61, 77, 102, 0.1); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#1a3d4d66,endColorstr=#1a3d4d66); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.bi-slider-track .blue-track { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.bi-slider-track .disabled-blue-track { + background-color: #d0d4da; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.bi-theme-dark .bi-slider-track .gray-track { + background-color: rgba(214, 224, 220, 0.1); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#1ad6e0dc,endColorstr=#1ad6e0dc); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.bi-theme-dark .bi-slider-track .disabled-blue-track { + background-color: #606479; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.bi-time-trigger .show-text { + background-color: rgba(255, 255, 255, 0); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff); +} +.bi-date-interval.time-error .bi-input { + color: #e65251; +} +.bi-date-interval.time-error .sign-editor-text { + color: #e65251; +} +.bi-time-interval .bi-date-time-trigger { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} +.bi-time-interval.time-error .bi-date-time-trigger .bi-input { + color: #e65251; +} +.bi-time-interval.time-error .bi-date-time-trigger .sign-editor-text { + color: #e65251; +} +.bi-year-popup .year-popup-navigation { + line-height: 30px; +} +.bi-year-popup .year-popup-navigation > .center-element { + border-left: 1px solid #e8eaed; +} +.bi-year-popup .year-popup-navigation > .first-element { + border-left: none; +} +.bi-theme-dark .bi-year-popup .year-popup-navigation > .center-element { + border-left: 1px solid #363e55; +} +.bi-theme-dark .bi-year-popup .year-popup-navigation > .first-element { + border-left: none; +} +.bi-year-trigger { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} +.bi-year-month-interval.time-error .bi-input { + color: #e65251; +} +.bi-year-month-interval.time-error .sign-editor-text { + color: #e65251; +} +html { + height: 100%; + overflow: hidden; +} +body { + position: absolute; + width: 100%; + height: 100%; + margin: 0; + padding: 0; + top: 0; + left: 0; + background-repeat: repeat; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; + color: #3d4d66; + font: normal 12px "Helvetica Neue", Arial, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Heiti, "黑体", sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none; + -kthml-user-focus: normal; + -moz-user-focus: normal; + -moz-outline: 0 none; + outline: 0 none; +} +div::-webkit-scrollbar, +textarea::-webkit-scrollbar { + -webkit-appearance: none; + width: 10px; + height: 10px; +} +div::-webkit-scrollbar-track, +textarea::-webkit-scrollbar-track { + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + background-color: rgba(35, 46, 64, 0.05); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#0d232e40,endColorstr=#0d232e40); +} +div::-webkit-scrollbar-track:hover, +textarea::-webkit-scrollbar-track:hover { + background-color: rgba(35, 46, 64, 0.05); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#0d232e40,endColorstr=#0d232e40); +} +div::-webkit-scrollbar-thumb, +textarea::-webkit-scrollbar-thumb { + border: 2px solid transparent; + background-clip: padding-box; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; + background-color: rgba(35, 46, 64, 0.1); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#1a232e40,endColorstr=#1a232e40); +} +div::-webkit-scrollbar-thumb:hover, +textarea::-webkit-scrollbar-thumb:hover { + background-color: rgba(35, 46, 64, 0.3); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#4d232e40,endColorstr=#4d232e40); +} +div::-webkit-scrollbar-corner, +textarea::-webkit-scrollbar-corner { + background-color: transparent; +} +.bi-theme-dark div::-webkit-scrollbar, +.bi-theme-dark textarea::-webkit-scrollbar { + -webkit-appearance: none; +} +.bi-theme-dark div::-webkit-scrollbar-track, +.bi-theme-dark textarea::-webkit-scrollbar-track { + background-color: rgba(255, 255, 255, 0.05); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#0dffffff,endColorstr=#0dffffff); +} +.bi-theme-dark div::-webkit-scrollbar-track:hover, +.bi-theme-dark textarea::-webkit-scrollbar-track:hover { + background-color: rgba(255, 255, 255, 0.05); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#0dffffff,endColorstr=#0dffffff); +} +.bi-theme-dark div::-webkit-scrollbar-thumb, +.bi-theme-dark textarea::-webkit-scrollbar-thumb { + background-color: rgba(255, 255, 255, 0.1); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#1affffff,endColorstr=#1affffff); +} +.bi-theme-dark div::-webkit-scrollbar-thumb:hover, +.bi-theme-dark textarea::-webkit-scrollbar-thumb:hover { + background-color: rgba(255, 255, 255, 0.3); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#4dffffff,endColorstr=#4dffffff); +} +.bi-farbtastic .wheel { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/background/wheel.png') no-repeat center center; +} +.bi-farbtastic .overlay { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/background/mask.png') no-repeat center center; +} +.bi-farbtastic .marker { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/background/marker.png') no-repeat center center; +} +.bi-display-tree .ztree li span.button.switch.center_open { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_vertical_line_3.png') no-repeat center center; + background-size: contain; +} +.bi-display-tree .ztree li span.button.switch.roots_open { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_vertical_line_2.png') no-repeat center center; + background-size: contain; +} +.bi-display-tree .ztree li span.button.switch.bottom_open { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_vertical_line_4.png') no-repeat center center; + background-size: contain; +} +.bi-display-tree .ztree.hack li span.button.switch.center_open { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_vertical_line_3.png') no-repeat center center; +} +.bi-display-tree .ztree.hack li span.button.switch.roots_open { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_vertical_line_2.png') no-repeat center center; +} +.bi-display-tree .ztree.hack li span.button.switch.bottom_open { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_vertical_line_4.png') no-repeat center center; +} +.ztree li ul.line { + position: relative; +} +.ztree li ul.line:before { + position: absolute; + content: ''; + border-left: 1px dashed #D0D4DA; + height: calc(100% - 3px); + left: 12px; + margin-top: 1px; +} +.ztree.hack li ul.line { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_vertical_line_1.png') repeat-y 1px 0; +} +.bi-theme-dark .ztree li ul.line:before { + border-left: 1px dashed #606479; +} +.bi-theme-dark .ztree.hack li ul.line { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_vertical_line_1.png') repeat-y 1px 0; +} +.ztree li span.button.chk.checkbox_false_full { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/check_box_normal.png') no-repeat center center; + background-size: contain; +} +.ztree li span.button.chk.checkbox_false_full_focus { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/check_box_normal.png') no-repeat center center; + background-size: contain; +} +.ztree li span.button.chk.checkbox_false_part { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/check_box_normal.png') no-repeat center center; + background-size: contain; +} +.ztree li span.button.chk.checkbox_false_part_focus { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/half_selected.png') no-repeat center center; + background-size: contain; +} +.ztree li span.button.chk.checkbox_true_full { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/check_box_active.png') no-repeat center center; + background-size: contain; +} +.ztree li span.button.chk.checkbox_true_full_focus { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/check_box_active.png') no-repeat center center; + background-size: contain; +} +.ztree li span.button.chk.checkbox_true_part { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/half_selected.png') no-repeat center center; + background-size: contain; +} +.ztree li span.button.chk.checkbox_true_part_focus { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/half_selected.png') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.chk.checkbox_false_full { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/check_box_normal.png') no-repeat center center; +} +.ztree.hack li span.button.chk.checkbox_false_full_focus { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/check_box_normal.png') no-repeat center center; +} +.ztree.hack li span.button.chk.checkbox_false_part { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/check_box_normal.png') no-repeat center center; +} +.ztree.hack li span.button.chk.checkbox_false_part_focus { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/half_selected.png') no-repeat center center; +} +.ztree.hack li span.button.chk.checkbox_true_full { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/check_box_active.png') no-repeat center center; +} +.ztree.hack li span.button.chk.checkbox_true_full_focus { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/check_box_active.png') no-repeat center center; +} +.ztree.hack li span.button.chk.checkbox_true_part { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/half_selected.png') no-repeat center center; +} +.ztree.hack li span.button.chk.checkbox_true_part_focus { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/half_selected.png') no-repeat center center; +} +.ztree li span.button.root_open { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_expand_1.png') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.root_open { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_expand_1.png') no-repeat center center; +} +.bi-theme-dark .ztree li span.button.root_open { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/dark/tree_expand_1.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .ztree.hack li span.button.root_open { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_expand_1.png') no-repeat center center; +} +.ztree li span.button.root_close { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_collapse_1.png') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.root_close { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_collapse_1.png') no-repeat center center; +} +.bi-theme-dark .ztree li span.button.root_close { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/dark/tree_collapse_1.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .ztree.hack li span.button.root_close { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_collapse_1.png') no-repeat center center; +} +.ztree li span.button.roots_open { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_expand_2.png') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.roots_open { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_expand_2.png') no-repeat center center; +} +.bi-theme-dark .ztree li span.button.roots_open { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/dark/tree_expand_2.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .ztree.hack li span.button.roots_open { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_expand_2.png') no-repeat center center; +} +.ztree li span.button.roots_close { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_collapse_2.png') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.roots_close { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_collapse_2.png') no-repeat center center; +} +.bi-theme-dark .ztree li span.button.roots_close { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/dark/tree_collapse_2.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .ztree.hack li span.button.roots_close { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_collapse_2.png') no-repeat center center; +} +.ztree li span.button.center_open { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_expand_3.png') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.center_open { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_expand_3.png') no-repeat center center; +} +.bi-theme-dark .ztree li span.button.center_open { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/dark/tree_expand_3.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .ztree.hack li span.button.center_open { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_expand_3.png') no-repeat center center; +} +.ztree li span.button.center_close { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_collapse_3.png') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.center_close { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_collapse_3.png') no-repeat center center; +} +.bi-theme-dark .ztree li span.button.center_close { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/dark/tree_collapse_3.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .ztree.hack li span.button.center_close { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_collapse_3.png') no-repeat center center; +} +.ztree li span.button.bottom_open { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_expand_4.png') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.bottom_open { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_expand_4.png') no-repeat center center; +} +.bi-theme-dark .ztree li span.button.bottom_open { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/dark/tree_expand_4.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .ztree.hack li span.button.bottom_open { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_expand_4.png') no-repeat center center; +} +.ztree li span.button.bottom_close { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_collapse_4.png') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.bottom_close { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_collapse_4.png') no-repeat center center; +} +.bi-theme-dark .ztree li span.button.bottom_close { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/dark/tree_collapse_4.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .ztree.hack li span.button.bottom_close { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_collapse_4.png') no-repeat center center; +} +.ztree li span.button.roots_docu { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_vertical_line_2.png') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.roots_docu { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_vertical_line_2.png') no-repeat center center; +} +.bi-theme-dark .ztree li span.button.roots_docu { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/dark/tree_vertical_line_2.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .ztree.hack li span.button.roots_docu { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_vertical_line_2.png') no-repeat center center; +} +.ztree li span.button.center_docu { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_vertical_line_3.png') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.center_docu { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_vertical_line_3.png') no-repeat center center; +} +.bi-theme-dark .ztree li span.button.center_docu { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/dark/tree_vertical_line_3.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .ztree.hack li span.button.center_docu { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_vertical_line_3.png') no-repeat center center; +} +.ztree li span.button.bottom_docu { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_vertical_line_4.png') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.bottom_docu { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_vertical_line_4.png') no-repeat center center; +} +.bi-theme-dark .ztree li span.button.bottom_docu { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/dark/tree_vertical_line_4.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .ztree.hack li span.button.bottom_docu { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_vertical_line_4.png') no-repeat center center; +} +.ztree li span.button.ico_loading { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/loading.gif') no-repeat center center; + background-size: contain; +} +.ztree.hack li span.button.ico_loading { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/loading.gif') no-repeat center center; +} +.base-line-conn-background { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_vertical_line_1.png') repeat-y 0 0; +} +.bi-theme-dark .base-line-conn-background { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_vertical_line_1.png') repeat-y 0 0; +} +.first-line-conn-background { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_vertical_line_2.png') no-repeat center center; +} +.bi-theme-dark .first-line-conn-background { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_vertical_line_2.png') no-repeat center center; +} +.mid-line-conn-background { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_vertical_line_3.png') no-repeat center center; +} +.bi-theme-dark .mid-line-conn-background { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_vertical_line_3.png') no-repeat center center; +} +.last-line-conn-background { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_vertical_line_4.png') no-repeat center center; +} +.bi-theme-dark .last-line-conn-background { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_vertical_line_4.png') no-repeat center center; +} +.loading-background { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/loading.gif') no-repeat center center; + background-size: contain; +} +.auto-color-background { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/background/auto_color.png') no-repeat center center; + background-size: contain; +} +.auto-color-normal-background { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/background/auto_color_normal.png') no-repeat center center; + background-size: contain; +} +.auto-color-normal-disabled-background { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/background/auto_color_normal_disable.png') no-repeat center center; + background-size: contain; +} +.trans-color-background { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/background/trans_normal.png') no-repeat center center; + background-size: contain; +} +.trans-color-disabled-background { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/background/trans_disable.png') no-repeat center center; + background-size: contain; +} +.auto-color-background.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/background/auto_color.png') no-repeat center center; +} +.auto-color-normal-background.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/background/auto_color_normal.png') no-repeat center center; +} +.auto-color-normal-disabled-background.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/background/auto_color_normal_disable.png') no-repeat center center; +} +.trans-color-background.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/background/trans_normal.png') no-repeat center center; +} +.trans-color-disabled-background.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/background/trans_disable.png') no-repeat center center; +} +.wave-loading { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/wave_loading.gif') no-repeat center center; + background-size: contain; +} +.wave-loading.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/wave_loading.gif') no-repeat center center; +} +@font-face { + font-family: "fineui"; + src: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/font/iconfont.eot'); + src: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/font/iconfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/font/iconfont.woff') format('woff'), /* chrome、firefox */ url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/font/iconfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/ url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/font/iconfont.svg#svgFontName') format('svg'); + /* iOS 4.1- */ +} +.b-font { + font-family: 'fineui'; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.close-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.close-font .b-font:before { + content: "\e6d0"; + color: inherit; +} +.close-font.disabled .b-font:before { + content: "\e6d0"; + color: inherit; +} +.close-h-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.close-h-font .b-font:before { + content: "\e6d0"; + color: inherit; +} +.close-h-font:hover .b-font:before, +.close-h-font.hover .b-font:before { + content: "\e6d0"; + color: inherit; +} +.close-h-font.disabled .b-font:before { + content: "\e6d0"; + color: inherit; +} +.close-ha-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.close-ha-font .b-font:before { + content: "\e6d0"; + color: inherit; +} +.close-ha-font:hover .b-font:before, +.close-ha-font.hover .b-font:before { + content: "\e6d0"; + color: inherit; +} +.close-ha-font:active .b-font:before, +.close-ha-font.active .b-font:before { + content: "\e6d0"; + color: #3f8ce8; +} +.close-ha-font.disabled .b-font:before { + content: "\e6d0"; + color: inherit; +} +.circle-close-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.circle-close-font .b-font:before { + content: "\e6d5"; + color: inherit; +} +.circle-close-font.disabled .b-font:before { + content: "\e6d5"; + color: inherit; +} +.search-close-h-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.search-close-h-font .b-font:before { + content: "\e6d0"; + color: inherit; +} +.search-close-h-font:hover .b-font:before, +.search-close-h-font.hover .b-font:before { + content: "\e6d0"; + color: #e65251; +} +.search-close-h-font.disabled .b-font:before { + content: "\e6d0"; + color: inherit; +} +.pre-page-h-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.pre-page-h-font .b-font:before { + content: "\e70d"; + color: inherit; +} +.pre-page-h-font:hover .b-font:before, +.pre-page-h-font.hover .b-font:before { + content: "\e70d"; + color: inherit; +} +.pre-page-h-font.disabled .b-font:before { + content: "\e70d"; + color: inherit; +} +.next-page-h-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.next-page-h-font .b-font:before { + content: "\e70c"; + color: inherit; +} +.next-page-h-font:hover .b-font:before, +.next-page-h-font.hover .b-font:before { + content: "\e70c"; + color: inherit; +} +.next-page-h-font.disabled .b-font:before { + content: "\e70c"; + color: inherit; +} +.search-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.search-font .b-font:before { + content: "\e6dc"; + color: inherit; +} +.search-font.disabled .b-font:before { + content: "\e6dc"; + color: inherit; +} +.date-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.date-font .b-font:before { + content: "\e733"; + color: inherit; +} +.date-font.disabled .b-font:before { + content: "\e733"; + color: inherit; +} +.time-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.time-font .b-font:before { + content: "\e6b1"; + color: inherit; +} +.time-font.disabled .b-font:before { + content: "\e6b1"; + color: inherit; +} +.date-change-h-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.date-change-h-font .b-font:before { + content: "\e72f"; + color: inherit; +} +.date-change-h-font:hover .b-font:before, +.date-change-h-font.hover .b-font:before { + content: "\e72f"; + color: inherit; +} +.date-change-h-font.disabled .b-font:before { + content: "\e72f"; + color: inherit; +} +.dot-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.dot-font .b-font:before { + content: "\e762"; + color: #232e40; +} +.dot-font.disabled .b-font:before { + content: "\e762"; + color: #232e40; +} +.dot-h-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.dot-h-font .b-font:before { + content: "\e762"; + color: #232e40; +} +.dot-h-font:hover .b-font:before, +.dot-h-font.hover .b-font:before { + content: "\e762"; + color: inherit; +} +.dot-h-font.disabled .b-font:before { + content: "\e762"; + color: #232e40; +} +.dot-ha-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.dot-ha-font .b-font:before { + content: "\e762"; + color: #ffffff; +} +.dot-ha-font:hover .b-font:before, +.dot-ha-font.hover .b-font:before { + content: "\e762"; + color: #999999; +} +.dot-ha-font:active .b-font:before, +.dot-ha-font.active .b-font:before { + content: "\e762"; + color: #232e40; +} +.dot-ha-font.disabled .b-font:before { + content: "\e762"; + color: #ffffff; +} +.dot-e-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.dot-e-font .b-font:before { + content: "\e762"; + color: transparent; +} +.dot-e-font:hover .b-font:before, +.dot-e-font.hover .b-font:before { + content: "\e762"; + color: transparent; +} +.dot-e-font:active .b-font:before { + content: "\e762"; + color: transparent; +} +.dot-e-font.active .b-font:before { + content: "\e762"; + color: #3685f2; +} +.dot-e-font.disabled .b-font:before { + content: "\e762"; + color: transparent; +} +.pull-right-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.pull-right-font .b-font:before { + content: "\e70c"; + color: inherit; +} +.pull-right-font.disabled .b-font:before { + content: "\e70c"; + color: inherit; +} +.pull-right-h-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.pull-right-h-font .b-font:before { + content: "\e70c"; + color: inherit; +} +.pull-right-h-font:hover .b-font:before, +.pull-right-h-font.hover .b-font:before { + content: "\e70c"; + color: inherit; +} +.pull-right-h-font.disabled .b-font:before { + content: "\e70c"; + color: inherit; +} +.pull-right-ha-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.pull-right-ha-font .b-font:before { + content: "\e70c"; + color: inherit; +} +.pull-right-ha-font:hover .b-font:before, +.pull-right-ha-font.hover .b-font:before { + content: "\e70c"; + color: inherit; +} +.pull-right-ha-font:active .b-font:before, +.pull-right-ha-font.active .b-font:before { + content: "\e70c"; + color: #3f8ce8; +} +.pull-right-ha-font.disabled .b-font:before { + content: "\e70c"; + color: inherit; +} +.pull-right-e-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.pull-right-e-font .b-font:before { + content: "\e70c"; + color: inherit; +} +.pull-right-e-font:hover .b-font:before, +.pull-right-e-font.hover .b-font:before { + content: "\e70c"; + color: inherit; +} +.pull-right-e-font:active .b-font:before { + content: "\e70c"; + color: #3f8ce8; +} +.pull-right-e-font.active .b-font:before { + content: "\e70c"; + color: #3f8ce8; +} +.pull-right-e-font.disabled .b-font:before { + content: "\e70c"; + color: inherit; +} +.copy-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.copy-font .b-font:before { + content: "\e6bd"; + color: inherit; +} +.copy-font.disabled .b-font:before { + content: "\e6bd"; + color: inherit; +} +.copy-h-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.copy-h-font .b-font:before { + content: "\e6bd"; + color: #232e40; +} +.copy-h-font:hover .b-font:before, +.copy-h-font.hover .b-font:before { + content: "\e6bd"; + color: inherit; +} +.copy-h-font.disabled .b-font:before { + content: "\e6bd"; + color: #232e40; +} +.copy-ha-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.copy-ha-font .b-font:before { + content: "\e6bd"; + color: inherit; +} +.copy-ha-font:hover .b-font:before, +.copy-ha-font.hover .b-font:before { + content: "\e6bd"; + color: inherit; +} +.copy-ha-font:active .b-font:before, +.copy-ha-font.active .b-font:before { + content: "\e6bd"; + color: #3f8ce8; +} +.copy-ha-font.disabled .b-font:before { + content: "\e6bd"; + color: inherit; +} +.copy-e-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.copy-e-font .b-font:before { + content: "\e6bd"; + color: inherit; +} +.copy-e-font:hover .b-font:before, +.copy-e-font.hover .b-font:before { + content: "\e6bd"; + color: inherit; +} +.copy-e-font:active .b-font:before { + content: "\e6bd"; + color: #3f8ce8; +} +.copy-e-font.active .b-font:before { + content: "\e6bd"; + color: #3f8ce8; +} +.copy-e-font.disabled .b-font:before { + content: "\e6bd"; + color: inherit; +} +.check-mark-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.check-mark-font .b-font:before { + content: "\e6cf"; + color: inherit; +} +.check-mark-font.disabled .b-font:before { + content: "\e6cf"; + color: inherit; +} +.check-mark-h-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.check-mark-h-font .b-font:before { + content: "\e6cf"; + color: inherit; +} +.check-mark-h-font:hover .b-font:before, +.check-mark-h-font.hover .b-font:before { + content: "\e6cf"; + color: inherit; +} +.check-mark-h-font.disabled .b-font:before { + content: "\e6cf"; + color: inherit; +} +.check-mark-ha-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.check-mark-ha-font .b-font:before { + content: "\e6cf"; + color: inherit; +} +.check-mark-ha-font:hover .b-font:before, +.check-mark-ha-font.hover .b-font:before { + content: "\e6cf"; + color: inherit; +} +.check-mark-ha-font:active .b-font:before, +.check-mark-ha-font.active .b-font:before { + content: "\e6cf"; + color: #3f8ce8; +} +.check-mark-ha-font.disabled .b-font:before { + content: "\e6cf"; + color: inherit; +} +.check-mark-e-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.check-mark-e-font .b-font:before { + content: "\e6cf"; + color: inherit; +} +.check-mark-e-font:hover .b-font:before, +.check-mark-e-font.hover .b-font:before { + content: "\e6cf"; + color: inherit; +} +.check-mark-e-font:active .b-font:before { + content: "\e6cf"; + color: #3f8ce8; +} +.check-mark-e-font.active .b-font:before { + content: "\e6cf"; + color: #3f8ce8; +} +.check-mark-e-font.disabled .b-font:before { + content: "\e6cf"; + color: inherit; +} +/** dashboard组件/控件 下拉列表图标字体 ~end~**/ +.row-pre-page-h-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.row-pre-page-h-font .b-font:before { + content: "\e70d"; + color: inherit; +} +.row-pre-page-h-font:hover .b-font:before, +.row-pre-page-h-font.hover .b-font:before { + content: "\e70d"; + color: inherit; +} +.row-pre-page-h-font.disabled .b-font:before { + content: "\e70d"; + color: inherit; +} +.row-next-page-h-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.row-next-page-h-font .b-font:before { + content: "\e70c"; + color: inherit; +} +.row-next-page-h-font:hover .b-font:before, +.row-next-page-h-font.hover .b-font:before { + content: "\e70c"; + color: inherit; +} +.row-next-page-h-font.disabled .b-font:before { + content: "\e70c"; + color: inherit; +} +.column-pre-page-h-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.column-pre-page-h-font .b-font:before { + content: "\e70a"; + color: inherit; +} +.column-pre-page-h-font:hover .b-font:before, +.column-pre-page-h-font.hover .b-font:before { + content: "\e70a"; + color: inherit; +} +.column-pre-page-h-font.disabled .b-font:before { + content: "\e70a"; + color: inherit; +} +.column-next-page-h-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.column-next-page-h-font .b-font:before { + content: "\e70b"; + color: inherit; +} +.column-next-page-h-font:hover .b-font:before, +.column-next-page-h-font.hover .b-font:before { + content: "\e70b"; + color: inherit; +} +.column-next-page-h-font.disabled .b-font:before { + content: "\e70b"; + color: inherit; +} +.expander-right-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.expander-right-font .b-font:before { + content: "\e6d8"; + color: inherit; +} +.expander-right-font.disabled .b-font:before { + content: "\e6d8"; + color: inherit; +} +.expander-down-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.expander-down-font .b-font:before { + content: "\e6d7"; + color: inherit; +} +.expander-down-font.disabled .b-font:before { + content: "\e6d7"; + color: inherit; +} +.solid-triangle-top-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.solid-triangle-top-font .b-font:before { + content: "\e6d6"; + color: inherit; +} +.solid-triangle-top-font:hover .b-font:before, +.solid-triangle-top-font.hover .b-font:before { + content: "\e6d6"; + color: inherit; +} +.solid-triangle-top-font.disabled .b-font:before { + content: "\e6d6"; + color: inherit; +} +.solid-triangle-bottom-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.solid-triangle-bottom-font .b-font:before { + content: "\e6d7"; + color: inherit; +} +.solid-triangle-bottom-font:hover .b-font:before, +.solid-triangle-bottom-font.hover .b-font:before { + content: "\e6d7"; + color: inherit; +} +.solid-triangle-bottom-font.disabled .b-font:before { + content: "\e6d7"; + color: inherit; +} +.trigger-triangle-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.trigger-triangle-font .b-font:before { + content: "\e64e"; + color: inherit; +} +.trigger-triangle-font.disabled .b-font:before { + content: "\e64e"; + color: inherit; +} +.pull-up-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.pull-up-font .b-font:before { + content: "\e70a"; + color: inherit; +} +.pull-up-font.disabled .b-font:before { + content: "\e70a"; + color: inherit; +} +.pull-down-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.pull-down-font .b-font:before { + content: "\e70b"; + color: inherit; +} +.pull-down-font.disabled .b-font:before { + content: "\e70b"; + color: inherit; +} +.pull-down-h-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.pull-down-h-font .b-font:before { + content: "\e70b"; + color: #647185; +} +.pull-down-h-font:hover .b-font:before, +.pull-down-h-font.hover .b-font:before { + content: "\e70b"; + color: inherit; +} +.pull-down-h-font.disabled .b-font:before { + content: "\e70b"; + color: #647185; +} +.pull-down-ha-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.pull-down-ha-font .b-font:before { + content: "\e70b"; + color: #647185; +} +.pull-down-ha-font:hover .b-font:before, +.pull-down-ha-font.hover .b-font:before { + content: "\e70b"; + color: inherit; +} +.pull-down-ha-font:active .b-font:before, +.pull-down-ha-font.active .b-font:before { + content: "\e70b"; + color: #3f8ce8; +} +.pull-down-ha-font.disabled .b-font:before { + content: "\e70b"; + color: #647185; +} +.check-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.check-font .b-font:before { + content: "\e6cf"; + color: #3685f2; +} +.check-font.disabled .b-font:before { + content: "\e6cf"; + color: #3685f2; +} +.item-check-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.item-check-font .b-font:before { + content: "\e6cf"; + color: #ffffff; +} +.item-check-font:hover .b-font:before, +.item-check-font.hover .b-font:before { + content: "\e6cf"; + color: #999999; +} +.item-check-font:active .b-font:before, +.item-check-font.active .b-font:before { + content: "\e6cf"; + color: #3f8ce8; +} +.item-check-font.disabled .b-font:before { + content: "\e6cf"; + color: #ffffff; +} +.primary-key-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.primary-key-font .b-font:before { + content: "\e740"; + color: inherit; +} +.primary-key-font:hover .b-font:before, +.primary-key-font.hover .b-font:before { + content: "\e740"; + color: inherit; +} +.primary-key-font.disabled .b-font:before { + content: "\e740"; + color: inherit; +} +.drag-tag-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.drag-tag-font .b-font:before { + content: "\e6d0"; + color: #faaa39; +} +.drag-tag-font.disabled .b-font:before { + content: "\e6d0"; + color: #faaa39; +} +.less-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.less-font .b-font:before { + content: "\e75e"; + color: inherit; +} +.less-font.disabled .b-font:before { + content: "\e75e"; + color: inherit; +} +.less-equal-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.less-equal-font .b-font:before { + content: "\e761"; + color: inherit; +} +.less-equal-font.disabled .b-font:before { + content: "\e761"; + color: inherit; +} +.text-bold-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.text-bold-font .b-font:before { + content: "\e697"; + color: inherit; +} +.text-bold-font.disabled .b-font:before { + content: "\e697"; + color: inherit; +} +.text-italic-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.text-italic-font .b-font:before { + content: "\e69d"; + color: inherit; +} +.text-italic-font.disabled .b-font:before { + content: "\e69d"; + color: inherit; +} +.text-underline-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.text-underline-font .b-font:before { + content: "\e69c"; + color: inherit; +} +.text-underline-font.disabled .b-font:before { + content: "\e69c"; + color: inherit; +} +.text-color-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.text-color-font .b-font:before { + content: "\e698"; + color: inherit; +} +.text-color-font.disabled .b-font:before { + content: "\e698"; + color: inherit; +} +.text-background-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.text-background-font .b-font:before { + content: "\e699"; + color: inherit; +} +.text-background-font.disabled .b-font:before { + content: "\e699"; + color: inherit; +} +.text-color-underline-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.text-color-underline-font .b-font:before { + content: "\e69a"; + color: inherit; +} +.text-color-underline-font.disabled .b-font:before { + content: "\e69a"; + color: inherit; +} +.text-align-left-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.text-align-left-font .b-font:before { + content: "\e6ca"; + color: inherit; +} +.text-align-left-font.disabled .b-font:before { + content: "\e6ca"; + color: inherit; +} +.text-align-center-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.text-align-center-font .b-font:before { + content: "\e6bf"; + color: inherit; +} +.text-align-center-font.disabled .b-font:before { + content: "\e6bf"; + color: inherit; +} +.text-align-right-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.text-align-right-font .b-font:before { + content: "\e6c8"; + color: inherit; +} +.text-align-right-font.disabled .b-font:before { + content: "\e6c8"; + color: inherit; +} +.toast-error-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.toast-error-font .b-font:before { + content: "\e757"; + color: inherit; +} +.toast-error-font.disabled .b-font:before { + content: "\e757"; + color: inherit; +} +.toast-success-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.toast-success-font .b-font:before { + content: "\e756"; + color: inherit; +} +.toast-success-font.disabled .b-font:before { + content: "\e756"; + color: inherit; +} +.toast-warning-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.toast-warning-font .b-font:before { + content: "\e755"; + color: inherit; +} +.toast-warning-font.disabled .b-font:before { + content: "\e755"; + color: inherit; +} +.toast-message-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.toast-message-font .b-font:before { + content: "\e74b"; + color: inherit; +} +.toast-message-font.disabled .b-font:before { + content: "\e74b"; + color: inherit; +} +.text-add-tip-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.text-add-tip-font .b-font:before { + content: "\e6dd"; + color: #13cd66; +} +.text-add-tip-font.disabled .b-font:before { + content: "\e6dd"; + color: #13cd66; +} +.add-up-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.add-up-font .b-font:before { + content: "\e70a"; + color: inherit; +} +.add-up-font.disabled .b-font:before { + content: "\e70a"; + color: inherit; +} +.minus-down-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.minus-down-font .b-font:before { + content: "\e70b"; + color: inherit; +} +.minus-down-font.disabled .b-font:before { + content: "\e70b"; + color: inherit; +} +.tree-collapse-icon-type1 .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_collapse_1.png') no-repeat center center; + background-size: contain; +} +.tree-collapse-icon-type1 .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_collapse_1.png') no-repeat center center; +} +.tree-collapse-icon-type2 .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_collapse_2.png') no-repeat center center; + background-size: contain; +} +.tree-collapse-icon-type2 .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_collapse_2.png') no-repeat center center; +} +.tree-collapse-icon-type3 .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_collapse_3.png') no-repeat center center; + background-size: contain; +} +.tree-collapse-icon-type3 .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_collapse_3.png') no-repeat center center; +} +.tree-collapse-icon-type4 .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_collapse_4.png') no-repeat center center; + background-size: contain; +} +.tree-collapse-icon-type4 .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_collapse_4.png') no-repeat center center; +} +.tree-expand-icon-type1 .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_expand_1.png') no-repeat center center; + background-size: contain; +} +.tree-expand-icon-type1 .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_expand_1.png') no-repeat center center; +} +.tree-expand-icon-type2 .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_expand_2.png') no-repeat center center; + background-size: contain; +} +.tree-expand-icon-type2 .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_expand_2.png') no-repeat center center; +} +.tree-expand-icon-type3 .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_expand_3.png') no-repeat center center; + background-size: contain; +} +.tree-expand-icon-type3 .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_expand_3.png') no-repeat center center; +} +.tree-expand-icon-type4 .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_expand_4.png') no-repeat center center; + background-size: contain; +} +.tree-expand-icon-type4 .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_expand_4.png') no-repeat center center; +} +.tree-vertical-line-type2 .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_vertical_line_2.png') no-repeat center center; + background-size: contain; +} +.tree-vertical-line-type2 .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_vertical_line_2.png') no-repeat center center; +} +.tree-vertical-line-type3 .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_vertical_line_3.png') no-repeat center center; + background-size: contain; +} +.tree-vertical-line-type3 .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_vertical_line_3.png') no-repeat center center; +} +.tree-vertical-line-type4 .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/tree_vertical_line_4.png') no-repeat center center; + background-size: contain; +} +.tree-vertical-line-type4 .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/tree_vertical_line_4.png') no-repeat center center; +} +.bi-theme-dark .tree-collapse-icon-type1 .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/dark/tree_collapse_1.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .tree-collapse-icon-type1 .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_collapse_1.png') no-repeat center center; +} +.bi-theme-dark .tree-collapse-icon-type2 .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/dark/tree_collapse_2.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .tree-collapse-icon-type2 .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_collapse_2.png') no-repeat center center; +} +.bi-theme-dark .tree-collapse-icon-type3 .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/dark/tree_collapse_3.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .tree-collapse-icon-type3 .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_collapse_3.png') no-repeat center center; +} +.bi-theme-dark .tree-collapse-icon-type4 .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/dark/tree_collapse_4.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .tree-collapse-icon-type4 .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_collapse_4.png') no-repeat center center; +} +.bi-theme-dark .tree-expand-icon-type1 .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/dark/tree_expand_1.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .tree-expand-icon-type1 .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_expand_1.png') no-repeat center center; +} +.bi-theme-dark .tree-expand-icon-type2 .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/dark/tree_expand_2.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .tree-expand-icon-type2 .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_expand_2.png') no-repeat center center; +} +.bi-theme-dark .tree-expand-icon-type3 .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/dark/tree_expand_3.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .tree-expand-icon-type3 .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_expand_3.png') no-repeat center center; +} +.bi-theme-dark .tree-expand-icon-type4 .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/dark/tree_expand_4.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .tree-expand-icon-type4 .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_expand_4.png') no-repeat center center; +} +.bi-theme-dark .tree-vertical-line-type2 .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/dark/tree_vertical_line_2.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .tree-vertical-line-type2 .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_vertical_line_2.png') no-repeat center center; +} +.bi-theme-dark .tree-vertical-line-type3 .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/dark/tree_vertical_line_3.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .tree-vertical-line-type3 .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_vertical_line_3.png') no-repeat center center; +} +.bi-theme-dark .tree-vertical-line-type4 .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/dark/tree_vertical_line_4.png') no-repeat center center; + background-size: contain; +} +.bi-theme-dark .tree-vertical-line-type4 .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/dark/tree_vertical_line_4.png') no-repeat center center; +} +.check-box-icon .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/check_box_normal.png') no-repeat center center; + background-size: contain; +} +.check-box-icon .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/check_box_normal.png') no-repeat center center; +} +.check-box-icon:hover .x-icon, +.check-box-icon.hover .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/check_box_normal.png') no-repeat center center; + background-size: contain; +} +.check-box-icon:hover .x-icon.hack, +.check-box-icon.hover .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/check_box_normal.png') no-repeat center center; +} +.check-box-icon:active .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/check_box_normal.png') no-repeat center center; + background-size: contain; +} +.check-box-icon:active .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/check_box_normal.png') no-repeat center center; +} +.check-box-icon.active .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/check_box_active.png') no-repeat center center; + background-size: contain; +} +.check-box-icon.active .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/check_box_active.png') no-repeat center center; +} +.check-box-icon.disabled .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/check_box_disable.png') no-repeat center center; + background-size: contain; +} +.check-box-icon.disabled .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/check_box_disable.png') no-repeat center center; +} +.check-box-icon.disabled.active .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/check_box_disable2.png') no-repeat center center; + background-size: contain; +} +.check-box-icon.disabled.active .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/check_box_disable2.png') no-repeat center center; +} +.radio-icon .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/radio_normal.png') no-repeat center center; + background-size: contain; +} +.radio-icon .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/radio_normal.png') no-repeat center center; +} +.radio-icon:hover .x-icon, +.radio-icon.hover .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/radio_normal.png') no-repeat center center; + background-size: contain; +} +.radio-icon:hover .x-icon.hack, +.radio-icon.hover .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/radio_normal.png') no-repeat center center; +} +.radio-icon:active .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/radio_normal.png') no-repeat center center; + background-size: contain; +} +.radio-icon:active .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/radio_normal.png') no-repeat center center; +} +.radio-icon.active .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/radio_active.png') no-repeat center center; + background-size: contain; +} +.radio-icon.active .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/radio_active.png') no-repeat center center; +} +.radio-icon.disabled .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/radio_disable.png') no-repeat center center; + background-size: contain; +} +.radio-icon.disabled .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/radio_disable.png') no-repeat center center; +} +.radio-icon.disabled.active .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/radio_disable2.png') no-repeat center center; + background-size: contain; +} +.radio-icon.disabled.active .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/radio_disable2.png') no-repeat center center; +} +.check-half-select-icon .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/half_selected.png') no-repeat center center; + background-size: contain; +} +.check-half-select-icon .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/half_selected.png') no-repeat center center; +} +.check-half-select-icon.disabled .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/half_selected_disable.png') no-repeat center center; + background-size: contain; +} +.check-half-select-icon.disabled .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/half_selected_disable.png') no-repeat center center; +} +.slider-icon .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/slider_normal_small.png') no-repeat center center; + background-size: contain; +} +.slider-icon .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/slider_normal_small.png') no-repeat center center; +} +.slider-icon:hover .x-icon, +.slider-icon.hover .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/slider_active_small.png') no-repeat center center; + background-size: contain; +} +.slider-icon:hover .x-icon.hack, +.slider-icon.hover .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/slider_active_small.png') no-repeat center center; +} +.slider-icon.disabled .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/slider_normal_small.png') no-repeat center center; + background-size: contain; +} +.slider-icon.disabled .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/slider_normal_small.png') no-repeat center center; +} +.auto-color-icon .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/auto_normal.png') no-repeat center center; + background-size: contain; +} +.auto-color-icon .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/auto_normal.png') no-repeat center center; +} +.auto-color-icon.active .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/auto_select.png') no-repeat center center; + background-size: contain; +} +.auto-color-icon.active .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/auto_select.png') no-repeat center center; +} +.auto-color-icon.disabled .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/auto_disable.png') no-repeat center center; + background-size: contain; +} +.auto-color-icon.disabled .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/auto_disable.png') no-repeat center center; +} +.trans-color-icon .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/trans_normal.png') no-repeat center center; + background-size: contain; +} +.trans-color-icon .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/trans_normal.png') no-repeat center center; +} +.trans-color-icon.active .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/trans_select.png') no-repeat center center; + background-size: contain; +} +.trans-color-icon.active .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/trans_select.png') no-repeat center center; +} +.trans-color-icon.disabled .x-icon { + display: block; + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/2x/icon/trans_disable.png') no-repeat center center; + background-size: contain; +} +.trans-color-icon.disabled .x-icon.hack { + background: url('http://fine-design-storage.oss-cn-shanghai.aliyuncs.com/fineui/2.0/images/1x/icon/trans_disable.png') no-repeat center center; +} +.icon-size-12 .b-font { + font-size: 12px; +} +.icon-size-16 .b-font { + font-size: 16px; +} +.icon-size-24 .b-font { + font-size: 24px; +} +.icon-size-40 .b-font { + font-size: 40px; +} +.icon-size-50 .b-font { + font-size: 50px; +} +.icon-size-70 .b-font { + font-size: 70px; +} diff --git a/designer-base/src/main/resources/com/fr/design/login/lib/fineui.ie.min.js b/designer-base/src/main/resources/com/fr/design/login/lib/fineui.ie.min.js new file mode 100644 index 0000000000..02e3faccee --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/login/lib/fineui.ie.min.js @@ -0,0 +1,53 @@ +/*! fineui 2019-10-24 10:46:55 */ + +function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}var _global;_global="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,null==_global.BI&&(_global.BI={prepares:[]}),null==_global.BI.prepares&&(_global.BI.prepares=[]),Array.prototype.indexOf||(Array.prototype.indexOf=function(searchElement,fromIndex){var k;if(null==this)throw new TypeError('"this" is null or not defined');var o=Object(this),len=o.length>>>0;if(0===len)return-1;var n=0|fromIndex;if(n>=len)return-1;for(k=Math.max(n>=0?n:len-Math.abs(n),0);k>>0;if(0===len)return-1;for(n=len-1,arguments.length>1&&(n=Number(arguments[1]),n!=n?n=0:0!=n&&n!=1/0&&n!=-(1/0)&&(n=(n>0||-1)*Math.floor(Math.abs(n)))),k=n>=0?Math.min(n,len-1):len-Math.abs(n);k>=0;k--)if(k in t&&t[k]===searchElement)return k;return-1}),_global.console=_global.console||function(){var c={};return c.log=c.warn=c.debug=c.info=c.error=c.time=c.dir=c.profile=c.clear=c.exception=c.trace=c.assert=function(){},c}(),_global.localStorage||(_global.localStorage={items:{},setItem:function(k,v){BI.Cache.addCookie(k,v)},getItem:function(k){return BI.Cache.getCookie(k)},removeItem:function(k){BI.Cache.deleteCookie(k)},key:function(){},clear:function(){this.items={}}}),Object.keys||(Object.keys=function(o){if(o!==Object(o))throw new TypeError("Object.keys called on a non-object");var falsy,skipArray={__ob__:falsy,$accessors:falsy,$vbthis:falsy,$vbsetter:falsy},k=[],p;for(p in o)p in skipArray||Object.prototype.hasOwnProperty.call(o,p)&&k.push(p);return k}),Array.isArray||(Array.isArray=function(arg){return"[object Array]"===Object.prototype.toString.call(arg)}),"function"!=typeof Object.getPrototypeOf&&(Object.getPrototypeOf="".__proto__===String.prototype?function(object){return object.__proto__}:function(object){return object.constructor.prototype}),Date.now||(Date.now=function(){return(new Date).valueOf()}),"undefined"!=typeof Set&&Set.toString().match(/native code/)||(Set=function(){this.set={}},Set.prototype.has=function(key){return void 0!==this.set[key]},Set.prototype.add=function(key){this.set[key]=1},Set.prototype.clear=function(){this.set={}}),!function(window){var ua=window.navigator.userAgent.toLowerCase(),reg=/msie/;if(reg.test(ua)){var _sort=Array.prototype.sort;Array.prototype.sort=function(fn){if(fn&&"function"==typeof fn){if(this.length<2)return this;for(var i=0,j=i+1,l=this.length,tmp,r=!1,t=0;i0,r===!0&&(tmp=this[i],this[i]=this[j],this[j]=tmp);return this}return _sort.call(this)}}}(window);var _global;_global="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,null==_global.BI&&(_global.BI={prepares:[]}),null==_global.BI.prepares&&(_global.BI.prepares=[]),function(){function apply(func,thisArg,args){switch(args.length){case 0:return func.call(thisArg);case 1:return func.call(thisArg,args[0]);case 2:return func.call(thisArg,args[0],args[1]);case 3:return func.call(thisArg,args[0],args[1],args[2])}return func.apply(thisArg,args)}function arrayAggregator(array,setter,iteratee,accumulator){for(var index=-1,length=null==array?0:array.length;++index-1}function arrayIncludesWith(array,value,comparator){for(var index=-1,length=null==array?0:array.length;++index-1;);return index}function charsEndIndex(strSymbols,chrSymbols){for(var index=strSymbols.length;index--&&baseIndexOf(chrSymbols,strSymbols[index],0)>-1;);return index}function countHolders(array,placeholder){for(var length=array.length,result=0;length--;)array[length]===placeholder&&++result;return result}function getValue(object,key){return null==object?undefined:object[key]}function hasUnicode(string){return reHasUnicode.test(string)}function iteratorToArray(iterator){for(var data,result=[];!(data=iterator.next()).done;)result.push(data.value);return result}function mapToArray(map){var index=-1,result=Array(map.size);return map.forEach(function(value,key){result[++index]=[key,value]}),result}function overArg(func,transform){return function(arg){return func(transform(arg))}}function replaceHolders(array,placeholder){for(var index=-1,length=array.length,resIndex=0,result=[];++index-1}function listCacheSet(key,value){var data=this.__data__,index=assocIndexOf(data,key);return index<0?(++this.size,data.push([key,value])):data[index][1]=value,this}function MapCache(entries){var index=-1,length=null==entries?0:entries.length;for(this.clear();++index=lower?number:lower)),number}function baseClone(value,bitmask,customizer,key,object,stack){var result,isDeep=bitmask&CLONE_DEEP_FLAG,isFlat=bitmask&CLONE_FLAT_FLAG,isFull=bitmask&CLONE_SYMBOLS_FLAG;if(customizer&&(result=object?customizer(value,key,object,stack):customizer(value)),result!==undefined)return result;if(!isObject(value))return value;var isArr=isArray(value);if(isArr){if(result=initCloneArray(value),!isDeep)return copyArray(value,result)}else{var tag=getTag(value),isFunc=tag==funcTag||tag==genTag;if(isBuffer(value))return cloneBuffer(value,isDeep);if(tag==objectTag||tag==argsTag||isFunc&&!object){if(result=isFlat||isFunc?{}:initCloneObject(value),!isDeep)return isFlat?copySymbolsIn(value,baseAssignIn(result,value)):copySymbols(value,baseAssign(result,value))}else{if(!cloneableTags[tag])return object?value:{};result=initCloneByTag(value,tag,isDeep)}}stack||(stack=new Stack);var stacked=stack.get(value);if(stacked)return stacked;if(stack.set(value,result),isSet(value))return value.forEach(function(subValue){result.add(baseClone(subValue,bitmask,customizer,subValue,value,stack))}),result;if(isMap(value))return value.forEach(function(subValue,key){result.set(key,baseClone(subValue,bitmask,customizer,key,value,stack))}),result;var keysFunc=isFull?isFlat?getAllKeysIn:getAllKeys:isFlat?keysIn:keys,props=isArr?undefined:keysFunc(value);return arrayEach(props||value,function(subValue,key){props&&(key=subValue,subValue=value[key]),assignValue(result,key,baseClone(subValue,bitmask,customizer,key,value,stack))}),result}function baseDelay(func,wait,args){if("function"!=typeof func)throw new TypeError(FUNC_ERROR_TEXT);return setTimeout(function(){func.apply(undefined,args)},wait)}function baseDifference(array,values,iteratee,comparator){var index=-1,includes=arrayIncludes,isCommon=!0,length=array.length,result=[],valuesLength=values.length;if(!length)return result;iteratee&&(values=arrayMap(values,baseUnary(iteratee))),comparator?(includes=arrayIncludesWith,isCommon=!1):values.length>=LARGE_ARRAY_SIZE&&(includes=cacheHas,isCommon=!1,values=new SetCache(values));outer:for(;++index0&&predicate(value)?depth>1?baseFlatten(value,depth-1,predicate,isStrict,result):arrayPush(result,value):isStrict||(result[result.length]=value)}return result}function baseForOwn(object,iteratee){return object&&baseFor(object,iteratee,keys)}function baseForOwnRight(object,iteratee){return object&&baseForRight(object,iteratee,keys)}function baseFunctions(object,props){return arrayFilter(props,function(key){return isFunction(object[key])})}function baseGet(object,path){path=castPath(path,object);for(var index=0,length=path.length;null!=object&&indexother}function baseHas(object,key){return null!=object&&hasOwnProperty.call(object,key)}function baseHasIn(object,key){return null!=object&&key in Object(object)}function baseIntersection(arrays,iteratee,comparator){for(var includes=comparator?arrayIncludesWith:arrayIncludes,length=arrays[0].length,othLength=arrays.length,othIndex=othLength,caches=Array(othLength),maxLength=1/0,result=[];othIndex--;){var array=arrays[othIndex];othIndex&&iteratee&&(array=arrayMap(array,baseUnary(iteratee))),maxLength=nativeMin(array.length,maxLength),caches[othIndex]=!comparator&&(iteratee||length>=120&&array.length>=120)?new SetCache(othIndex&&array):undefined}array=arrays[0];var index=-1,seen=caches[0];outer:for(;++indexlength?0:length+start),end=end>length?length:end,end<0&&(end+=length),length=start>end?0:end-start>>>0,start>>>=0;for(var result=Array(length);++index=LARGE_ARRAY_SIZE){var set=iteratee?null:createSet(array);if(set)return setToArray(set);isCommon=!1,includes=cacheHas,seen=new SetCache}else seen=iteratee?[]:result;outer:for(;++index=length?array:baseSlice(array,start,end)}function cloneBuffer(buffer,isDeep){if(isDeep)return buffer.slice();var length=buffer.length,result=allocUnsafe?allocUnsafe(length):new buffer.constructor(length);return buffer.copy(result),result}function cloneArrayBuffer(arrayBuffer){var result=new arrayBuffer.constructor(arrayBuffer.byteLength);return new Uint8Array(result).set(new Uint8Array(arrayBuffer)), +result}function cloneDataView(dataView,isDeep){var buffer=isDeep?cloneArrayBuffer(dataView.buffer):dataView.buffer;return new dataView.constructor(buffer,dataView.byteOffset,dataView.byteLength)}function cloneRegExp(regexp){var result=new regexp.constructor(regexp.source,reFlags.exec(regexp));return result.lastIndex=regexp.lastIndex,result}function cloneSymbol(symbol){return symbolValueOf?Object(symbolValueOf.call(symbol)):{}}function cloneTypedArray(typedArray,isDeep){var buffer=isDeep?cloneArrayBuffer(typedArray.buffer):typedArray.buffer;return new typedArray.constructor(buffer,typedArray.byteOffset,typedArray.length)}function compareAscending(value,other){if(value!==other){var valIsDefined=value!==undefined,valIsNull=null===value,valIsReflexive=value===value,valIsSymbol=isSymbol(value),othIsDefined=other!==undefined,othIsNull=null===other,othIsReflexive=other===other,othIsSymbol=isSymbol(other);if(!othIsNull&&!othIsSymbol&&!valIsSymbol&&value>other||valIsSymbol&&othIsDefined&&othIsReflexive&&!othIsNull&&!othIsSymbol||valIsNull&&othIsDefined&&othIsReflexive||!valIsDefined&&othIsReflexive||!valIsReflexive)return 1;if(!valIsNull&&!valIsSymbol&&!othIsSymbol&&value=ordersLength)return result;var order=orders[index];return result*("desc"==order?-1:1)}}return object.index-other.index}function composeArgs(args,partials,holders,isCurried){for(var argsIndex=-1,argsLength=args.length,holdersLength=holders.length,leftIndex=-1,leftLength=partials.length,rangeLength=nativeMax(argsLength-holdersLength,0),result=Array(leftLength+rangeLength),isUncurried=!isCurried;++leftIndex1?sources[length-1]:undefined,guard=length>2?sources[2]:undefined;for(customizer=assigner.length>3&&"function"==typeof customizer?(length--,customizer):undefined,guard&&isIterateeCall(sources[0],sources[1],guard)&&(customizer=length<3?undefined:customizer,length=1),object=Object(object);++index-1?iterable[iteratee?collection[index]:index]:undefined}}function createHybrid(func,bitmask,thisArg,partials,holders,partialsRight,holdersRight,argPos,ary,arity){function wrapper(){for(var length=arguments.length,args=Array(length),index=length;index--;)args[index]=arguments[index];if(isCurried)var placeholder=getHolder(wrapper),holdersCount=countHolders(args,placeholder);if(partials&&(args=composeArgs(args,partials,holders,isCurried)),partialsRight&&(args=composeArgsRight(args,partialsRight,holdersRight,isCurried)),length-=holdersCount,isCurried&&length1&&args.reverse(),isAry&&aryarrLength))return!1;var stacked=stack.get(array);if(stacked&&stack.get(other))return stacked==other;var index=-1,result=!0,seen=bitmask&COMPARE_UNORDERED_FLAG?new SetCache:undefined;for(stack.set(array,other),stack.set(other,array);++index1?"& ":"")+details[lastIndex],details=details.join(length>2?", ":" "),source.replace(reWrapComment,"{\n/* [wrapped with "+details+"] */\n")}function isFlattenable(value){return isArray(value)||isArguments(value)||!!(spreadableSymbol&&value&&value[spreadableSymbol])}function isIndex(value,length){var type=typeof value;return length=null==length?MAX_SAFE_INTEGER:length,!!length&&("number"==type||"symbol"!=type&&reIsUint.test(value))&&value>-1&&value%1==0&&value0){if(++count>=HOT_COUNT)return arguments[0]}else count=0;return func.apply(undefined,arguments)}}function toKey(value){if("string"==typeof value||isSymbol(value))return value;var result=value+"";return"0"==result&&1/value==-INFINITY?"-0":result}function toSource(func){if(null!=func){try{return funcToString.call(func)}catch(e){}try{return func+""}catch(e){}}return""}function updateWrapDetails(details,bitmask){return arrayEach(wrapFlags,function(pair){var value="_."+pair[0];bitmask&pair[1]&&!arrayIncludes(details,value)&&details.push(value)}),details.sort()}function wrapperClone(wrapper){if(wrapper instanceof LazyWrapper)return wrapper.clone();var result=new LodashWrapper(wrapper.__wrapped__,wrapper.__chain__);return result.__actions__=copyArray(wrapper.__actions__),result.__index__=wrapper.__index__,result.__values__=wrapper.__values__,result}function compact(array){for(var index=-1,length=null==array?0:array.length,resIndex=0,result=[];++index=this.__values__.length,value=done?undefined:this.__values__[this.__index__++];return{done:done,value:value}}function wrapperToIterator(){return this}function wrapperPlant(value){for(var result,parent=this;parent instanceof baseLodash;){var clone=wrapperClone(parent);clone.__index__=0,clone.__values__=undefined,result?previous.__wrapped__=clone:result=clone;var previous=clone;parent=parent.__wrapped__}return previous.__wrapped__=value,result}function wrapperReverse(){var value=this.__wrapped__;if(value instanceof LazyWrapper){var wrapped=value;return this.__actions__.length&&(wrapped=new LazyWrapper(this)),wrapped=wrapped.reverse(),wrapped.__actions__.push({func:thru,args:[reverse],thisArg:undefined}),new LodashWrapper(wrapped,this.__chain__)}return this.thru(reverse)}function wrapperValue(){return baseWrapperValue(this.__wrapped__,this.__actions__)}function every(collection,predicate,guard){var func=isArray(collection)?arrayEvery:baseEvery;return guard&&isIterateeCall(collection,predicate,guard)&&(predicate=undefined),func(collection,baseIteratee(predicate,3))}function filter(collection,predicate){var func=isArray(collection)?arrayFilter:baseFilter;return func(collection,baseIteratee(predicate,3))}function forEach(collection,iteratee){var func=isArray(collection)?arrayEach:baseEach;return func(collection,baseIteratee(iteratee,3))}function map(collection,iteratee){var func=isArray(collection)?arrayMap:baseMap;return func(collection,baseIteratee(iteratee,3))}function reduce(collection,iteratee,accumulator){var func=isArray(collection)?arrayReduce:baseReduce,initAccum=arguments.length<3;return func(collection,baseIteratee(iteratee,4),accumulator,initAccum,baseEach)}function reject(collection,predicate){var func=isArray(collection)?arrayFilter:baseFilter;return func(collection,negate(baseIteratee(predicate,3)))}function size(collection){if(null==collection)return 0;if(isArrayLike(collection))return isString(collection)?stringSize(collection):collection.length;var tag=getTag(collection);return tag==mapTag||tag==setTag?collection.size:baseKeys(collection).length}function some(collection,predicate,guard){var func=isArray(collection)?arraySome:baseSome;return guard&&isIterateeCall(collection,predicate,guard)&&(predicate=undefined),func(collection,baseIteratee(predicate,3))}function before(n,func){var result;if("function"!=typeof func)throw new TypeError(FUNC_ERROR_TEXT);return n=toInteger(n),function(){return--n>0&&(result=func.apply(this,arguments)),n<=1&&(func=undefined),result}}function debounce(func,wait,options){function invokeFunc(time){var args=lastArgs,thisArg=lastThis;return lastArgs=lastThis=undefined,lastInvokeTime=time,result=func.apply(thisArg,args)}function leadingEdge(time){return lastInvokeTime=time,timerId=setTimeout(timerExpired,wait),leading?invokeFunc(time):result}function remainingWait(time){var timeSinceLastCall=time-lastCallTime,timeSinceLastInvoke=time-lastInvokeTime,timeWaiting=wait-timeSinceLastCall;return maxing?nativeMin(timeWaiting,maxWait-timeSinceLastInvoke):timeWaiting}function shouldInvoke(time){var timeSinceLastCall=time-lastCallTime,timeSinceLastInvoke=time-lastInvokeTime;return lastCallTime===undefined||timeSinceLastCall>=wait||timeSinceLastCall<0||maxing&&timeSinceLastInvoke>=maxWait}function timerExpired(){var time=now();return shouldInvoke(time)?trailingEdge(time):void(timerId=setTimeout(timerExpired,remainingWait(time)))}function trailingEdge(time){return timerId=undefined,trailing&&lastArgs?invokeFunc(time):(lastArgs=lastThis=undefined,result)}function cancel(){timerId!==undefined&&clearTimeout(timerId),lastInvokeTime=0,lastArgs=lastCallTime=lastThis=timerId=undefined}function flush(){return timerId===undefined?result:trailingEdge(now())}function debounced(){var time=now(),isInvoking=shouldInvoke(time);if(lastArgs=arguments,lastThis=this,lastCallTime=time,isInvoking){if(timerId===undefined)return leadingEdge(lastCallTime);if(maxing)return timerId=setTimeout(timerExpired,wait),invokeFunc(lastCallTime)}return timerId===undefined&&(timerId=setTimeout(timerExpired,wait)),result}var lastArgs,lastThis,maxWait,result,timerId,lastCallTime,lastInvokeTime=0,leading=!1,maxing=!1,trailing=!0;if("function"!=typeof func)throw new TypeError(FUNC_ERROR_TEXT);return wait=toNumber(wait)||0,isObject(options)&&(leading=!!options.leading,maxing="maxWait"in options,maxWait=maxing?nativeMax(toNumber(options.maxWait)||0,wait):maxWait,trailing="trailing"in options?!!options.trailing:trailing),debounced.cancel=cancel,debounced.flush=flush,debounced}function memoize(func,resolver){if("function"!=typeof func||null!=resolver&&"function"!=typeof resolver)throw new TypeError(FUNC_ERROR_TEXT);var memoized=function(){var args=arguments,key=resolver?resolver.apply(this,args):args[0],cache=memoized.cache;if(cache.has(key))return cache.get(key);var result=func.apply(this,args);return memoized.cache=cache.set(key,result)||cache,result};return memoized.cache=new(memoize.Cache||MapCache), +memoized}function negate(predicate){if("function"!=typeof predicate)throw new TypeError(FUNC_ERROR_TEXT);return function(){var args=arguments;switch(args.length){case 0:return!predicate.call(this);case 1:return!predicate.call(this,args[0]);case 2:return!predicate.call(this,args[0],args[1]);case 3:return!predicate.call(this,args[0],args[1],args[2])}return!predicate.apply(this,args)}}function once(func){return before(2,func)}function rest(func,start){if("function"!=typeof func)throw new TypeError(FUNC_ERROR_TEXT);return start=start===undefined?start:toInteger(start),baseRest(func,start)}function throttle(func,wait,options){var leading=!0,trailing=!0;if("function"!=typeof func)throw new TypeError(FUNC_ERROR_TEXT);return isObject(options)&&(leading="leading"in options?!!options.leading:leading,trailing="trailing"in options?!!options.trailing:trailing),debounce(func,wait,{leading:leading,maxWait:wait,trailing:trailing})}function clone(value){return baseClone(value,CLONE_SYMBOLS_FLAG)}function cloneDeep(value){return baseClone(value,CLONE_DEEP_FLAG|CLONE_SYMBOLS_FLAG)}function eq(value,other){return value===other||value!==value&&other!==other}function isArrayLike(value){return null!=value&&isLength(value.length)&&!isFunction(value)}function isArrayLikeObject(value){return isObjectLike(value)&&isArrayLike(value)}function isBoolean(value){return value===!0||value===!1||isObjectLike(value)&&baseGetTag(value)==boolTag}function isEmpty(value){if(null==value)return!0;if(isArrayLike(value)&&(isArray(value)||"string"==typeof value||"function"==typeof value.splice||isBuffer(value)||isTypedArray(value)||isArguments(value)))return!value.length;var tag=getTag(value);if(tag==mapTag||tag==setTag)return!value.size;if(isPrototype(value))return!baseKeys(value).length;for(var key in value)if(hasOwnProperty.call(value,key))return!1;return!0}function isEqual(value,other){return baseIsEqual(value,other)}function isFinite(value){return"number"==typeof value&&nativeIsFinite(value)}function isFunction(value){if(!isObject(value))return!1;var tag=baseGetTag(value);return tag==funcTag||tag==genTag||tag==asyncTag||tag==proxyTag}function isLength(value){return"number"==typeof value&&value>-1&&value%1==0&&value<=MAX_SAFE_INTEGER}function isObject(value){var type=typeof value;return null!=value&&("object"==type||"function"==type)}function isObjectLike(value){return null!=value&&"object"==typeof value}function isNaN(value){return isNumber(value)&&value!=+value}function isNull(value){return null===value}function isNumber(value){return"number"==typeof value||isObjectLike(value)&&baseGetTag(value)==numberTag}function isPlainObject(value){if(!isObjectLike(value)||baseGetTag(value)!=objectTag)return!1;var proto=getPrototype(value);if(null===proto)return!0;var Ctor=hasOwnProperty.call(proto,"constructor")&&proto.constructor;return"function"==typeof Ctor&&Ctor instanceof Ctor&&funcToString.call(Ctor)==objectCtorString}function isString(value){return"string"==typeof value||!isArray(value)&&isObjectLike(value)&&baseGetTag(value)==stringTag}function isSymbol(value){return"symbol"==typeof value||isObjectLike(value)&&baseGetTag(value)==symbolTag}function isUndefined(value){return value===undefined}function toArray(value){if(!value)return[];if(isArrayLike(value))return isString(value)?stringToArray(value):copyArray(value);if(symIterator&&value[symIterator])return iteratorToArray(value[symIterator]());var tag=getTag(value),func=tag==mapTag?mapToArray:tag==setTag?setToArray:values;return func(value)}function toFinite(value){if(!value)return 0===value?value:0;if(value=toNumber(value),value===INFINITY||value===-INFINITY){var sign=value<0?-1:1;return sign*MAX_INTEGER}return value===value?value:0}function toInteger(value){var result=toFinite(value),remainder=result%1;return result===result?remainder?result-remainder:result:0}function toNumber(value){if("number"==typeof value)return value;if(isSymbol(value))return NAN;if(isObject(value)){var other="function"==typeof value.valueOf?value.valueOf():value;value=isObject(other)?other+"":other}if("string"!=typeof value)return 0===value?value:+value;value=value.replace(reTrim,"");var isBinary=reIsBinary.test(value);return isBinary||reIsOctal.test(value)?freeParseInt(value.slice(2),isBinary?2:8):reIsBadHex.test(value)?NAN:+value}function toPlainObject(value){return copyObject(value,keysIn(value))}function toString(value){return null==value?"":baseToString(value)}function create(prototype,properties){var result=baseCreate(prototype);return null==properties?result:baseAssign(result,properties)}function findKey(object,predicate){return baseFindKey(object,baseIteratee(predicate,3),baseForOwn)}function findLastKey(object,predicate){return baseFindKey(object,baseIteratee(predicate,3),baseForOwnRight)}function get(object,path,defaultValue){var result=null==object?undefined:baseGet(object,path);return result===undefined?defaultValue:result}function has(object,path){return null!=object&&hasPath(object,path,baseHas)}function hasIn(object,path){return null!=object&&hasPath(object,path,baseHasIn)}function keys(object){return isArrayLike(object)?arrayLikeKeys(object):baseKeys(object)}function keysIn(object){return isArrayLike(object)?arrayLikeKeys(object,!0):baseKeysIn(object)}function omitBy(object,predicate){return pickBy(object,negate(baseIteratee(predicate)))}function pickBy(object,predicate){if(null==object)return{};var props=arrayMap(getAllKeysIn(object),function(prop){return[prop]});return predicate=baseIteratee(predicate),basePickBy(object,props,function(value,path){return predicate(value,path[0])})}function result(object,path,defaultValue){path=castPath(path,object);var index=-1,length=path.length;for(length||(length=1,object=undefined);++indexupper){var temp=lower;lower=upper,upper=temp}if(floating||lower%1||upper%1){var rand=nativeRandom();return nativeMin(lower+rand*(upper-lower+freeParseFloat("1e-"+((rand+"").length-1))),upper)}return baseRandom(lower,upper)}function escape(string){return string=toString(string),string&&reHasUnescapedHtml.test(string)?string.replace(reUnescapedHtml,escapeHtmlChar):string}function trim(string,chars,guard){if(string=toString(string),string&&(guard||chars===undefined))return string.replace(reTrim,"");if(!string||!(chars=baseToString(chars)))return string;var strSymbols=stringToArray(string),chrSymbols=stringToArray(chars),start=charsStartIndex(strSymbols,chrSymbols),end=charsEndIndex(strSymbols,chrSymbols)+1;return castSlice(strSymbols,start,end).join("")}function constant(value){return function(){return value}}function identity(value){return value}function iteratee(func){return baseIteratee("function"==typeof func?func:baseClone(func,CLONE_DEEP_FLAG))}function matches(source){return baseMatches(baseClone(source,CLONE_DEEP_FLAG))}function mixin(object,source,options){var props=keys(source),methodNames=baseFunctions(source,props);null!=options||isObject(source)&&(methodNames.length||!props.length)||(options=source,source=object,object=this,methodNames=baseFunctions(source,keys(source)));var chain=!(isObject(options)&&"chain"in options&&!options.chain),isFunc=isFunction(object);return arrayEach(methodNames,function(methodName){var func=source[methodName];object[methodName]=func,isFunc&&(object.prototype[methodName]=function(){var chainAll=this.__chain__;if(chain||chainAll){var result=object(this.__wrapped__),actions=result.__actions__=copyArray(this.__actions__);return actions.push({func:func,args:arguments,thisArg:object}),result.__chain__=chainAll,result}return func.apply(object,arrayPush([this.value()],arguments))})}),object}function noConflict(){return root._===this&&(root._=oldDash),this}function noop(){}function property(path){return isKey(path)?baseProperty(toKey(path)):basePropertyDeep(path)}function stubArray(){return[]}function stubFalse(){return!1}function uniqueId(prefix){var id=++idCounter;return toString(prefix)+id}function max(array){return array&&array.length?baseExtremum(array,identity,baseGt):undefined}function min(array){return array&&array.length?baseExtremum(array,identity,baseLt):undefined}var undefined,VERSION="4.17.5",LARGE_ARRAY_SIZE=200,FUNC_ERROR_TEXT="Expected a function",HASH_UNDEFINED="__lodash_hash_undefined__",MAX_MEMOIZE_SIZE=500,PLACEHOLDER="__lodash_placeholder__",CLONE_DEEP_FLAG=1,CLONE_FLAT_FLAG=2,CLONE_SYMBOLS_FLAG=4,COMPARE_PARTIAL_FLAG=1,COMPARE_UNORDERED_FLAG=2,WRAP_BIND_FLAG=1,WRAP_BIND_KEY_FLAG=2,WRAP_CURRY_BOUND_FLAG=4,WRAP_CURRY_FLAG=8,WRAP_CURRY_RIGHT_FLAG=16,WRAP_PARTIAL_FLAG=32,WRAP_PARTIAL_RIGHT_FLAG=64,WRAP_ARY_FLAG=128,WRAP_REARG_FLAG=256,WRAP_FLIP_FLAG=512,HOT_COUNT=800,HOT_SPAN=16,LAZY_FILTER_FLAG=1,LAZY_MAP_FLAG=2,LAZY_WHILE_FLAG=3,INFINITY=1/0,MAX_SAFE_INTEGER=9007199254740991,MAX_INTEGER=1.7976931348623157e308,NAN=NaN,MAX_ARRAY_LENGTH=4294967295,wrapFlags=[["ary",WRAP_ARY_FLAG],["bind",WRAP_BIND_FLAG],["bindKey",WRAP_BIND_KEY_FLAG],["curry",WRAP_CURRY_FLAG],["curryRight",WRAP_CURRY_RIGHT_FLAG],["flip",WRAP_FLIP_FLAG],["partial",WRAP_PARTIAL_FLAG],["partialRight",WRAP_PARTIAL_RIGHT_FLAG],["rearg",WRAP_REARG_FLAG]],argsTag="[object Arguments]",arrayTag="[object Array]",asyncTag="[object AsyncFunction]",boolTag="[object Boolean]",dateTag="[object Date]",errorTag="[object Error]",funcTag="[object Function]",genTag="[object GeneratorFunction]",mapTag="[object Map]",numberTag="[object Number]",nullTag="[object Null]",objectTag="[object Object]",promiseTag="[object Promise]",proxyTag="[object Proxy]",regexpTag="[object RegExp]",setTag="[object Set]",stringTag="[object String]",symbolTag="[object Symbol]",undefinedTag="[object Undefined]",weakMapTag="[object WeakMap]",arrayBufferTag="[object ArrayBuffer]",dataViewTag="[object DataView]",float32Tag="[object Float32Array]",float64Tag="[object Float64Array]",int8Tag="[object Int8Array]",int16Tag="[object Int16Array]",int32Tag="[object Int32Array]",uint8Tag="[object Uint8Array]",uint8ClampedTag="[object Uint8ClampedArray]",uint16Tag="[object Uint16Array]",uint32Tag="[object Uint32Array]",reUnescapedHtml=/[&<>"']/g,reHasUnescapedHtml=RegExp(reUnescapedHtml.source),reIsDeepProp=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,reIsPlainProp=/^\w*$/,rePropName=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,reRegExpChar=/[\\^$.*+?()[\]{}|]/g,reTrim=/^\s+|\s+$/g,reWrapComment=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,reWrapDetails=/\{\n\/\* \[wrapped with (.+)\] \*/,reSplitDetails=/,? & /,reEscapeChar=/\\(\\)?/g,reFlags=/\w*$/,reIsBadHex=/^[-+]0x[0-9a-f]+$/i,reIsBinary=/^0b[01]+$/i,reIsHostCtor=/^\[object .+?Constructor\]$/,reIsOctal=/^0o[0-7]+$/i,reIsUint=/^(?:0|[1-9]\d*)$/,rsAstralRange="\\ud800-\\udfff",rsComboMarksRange="\\u0300-\\u036f",reComboHalfMarksRange="\\ufe20-\\ufe2f",rsComboSymbolsRange="\\u20d0-\\u20ff",rsComboRange=rsComboMarksRange+reComboHalfMarksRange+rsComboSymbolsRange,rsVarRange="\\ufe0e\\ufe0f",rsAstral="["+rsAstralRange+"]",rsCombo="["+rsComboRange+"]",rsFitz="\\ud83c[\\udffb-\\udfff]",rsModifier="(?:"+rsCombo+"|"+rsFitz+")",rsNonAstral="[^"+rsAstralRange+"]",rsRegional="(?:\\ud83c[\\udde6-\\uddff]){2}",rsSurrPair="[\\ud800-\\udbff][\\udc00-\\udfff]",rsZWJ="\\u200d",reOptMod=rsModifier+"?",rsOptVar="["+rsVarRange+"]?",rsOptJoin="(?:"+rsZWJ+"(?:"+[rsNonAstral,rsRegional,rsSurrPair].join("|")+")"+rsOptVar+reOptMod+")*",rsSeq=rsOptVar+reOptMod+rsOptJoin,rsSymbol="(?:"+[rsNonAstral+rsCombo+"?",rsCombo,rsRegional,rsSurrPair,rsAstral].join("|")+")",reUnicode=RegExp(rsFitz+"(?="+rsFitz+")|"+rsSymbol+rsSeq,"g"),reHasUnicode=RegExp("["+rsZWJ+rsAstralRange+rsComboRange+rsVarRange+"]"),typedArrayTags={};typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=!0,typedArrayTags[argsTag]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag]=typedArrayTags[dataViewTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag]=typedArrayTags[mapTag]=typedArrayTags[numberTag]=typedArrayTags[objectTag]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag]=typedArrayTags[weakMapTag]=!1;var cloneableTags={};cloneableTags[argsTag]=cloneableTags[arrayTag]=cloneableTags[arrayBufferTag]=cloneableTags[dataViewTag]=cloneableTags[boolTag]=cloneableTags[dateTag]=cloneableTags[float32Tag]=cloneableTags[float64Tag]=cloneableTags[int8Tag]=cloneableTags[int16Tag]=cloneableTags[int32Tag]=cloneableTags[mapTag]=cloneableTags[numberTag]=cloneableTags[objectTag]=cloneableTags[regexpTag]=cloneableTags[setTag]=cloneableTags[stringTag]=cloneableTags[symbolTag]=cloneableTags[uint8Tag]=cloneableTags[uint8ClampedTag]=cloneableTags[uint16Tag]=cloneableTags[uint32Tag]=!0,cloneableTags[errorTag]=cloneableTags[funcTag]=cloneableTags[weakMapTag]=!1;var htmlEscapes={"&":"&","<":"<",">":">",'"':""","'":"'"},freeParseFloat=parseFloat,freeParseInt=parseInt,freeGlobal="object"==typeof global&&global&&global.Object===Object&&global,freeSelf="object"==typeof self&&self&&self.Object===Object&&self,root=freeGlobal||freeSelf||Function("return this")(),freeExports="object"==typeof exports&&exports&&!exports.nodeType&&exports,freeModule=freeExports&&"object"==typeof module&&module&&!module.nodeType&&module,moduleExports=freeModule&&freeModule.exports===freeExports,freeProcess=moduleExports&&freeGlobal.process,nodeUtil=function(){try{return freeProcess&&freeProcess.binding&&freeProcess.binding("util")}catch(e){}}(),nodeIsDate=nodeUtil&&nodeUtil.isDate,nodeIsMap=nodeUtil&&nodeUtil.isMap,nodeIsRegExp=nodeUtil&&nodeUtil.isRegExp,nodeIsSet=nodeUtil&&nodeUtil.isSet,nodeIsTypedArray=nodeUtil&&nodeUtil.isTypedArray,asciiSize=baseProperty("length"),escapeHtmlChar=basePropertyOf(htmlEscapes),arrayProto=Array.prototype,funcProto=Function.prototype,objectProto=Object.prototype,coreJsData=root["__core-js_shared__"],funcToString=funcProto.toString,hasOwnProperty=objectProto.hasOwnProperty,idCounter=0,maskSrcKey=function(){var uid=/[^.]+$/.exec(coreJsData&&coreJsData.keys&&coreJsData.keys.IE_PROTO||"");return uid?"Symbol(src)_1."+uid:""}(),nativeObjectToString=objectProto.toString,objectCtorString=funcToString.call(Object),oldDash=root._,reIsNative=RegExp("^"+funcToString.call(hasOwnProperty).replace(reRegExpChar,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Buffer=moduleExports?root.Buffer:undefined,Symbol=root.Symbol,Uint8Array=root.Uint8Array,allocUnsafe=Buffer?Buffer.allocUnsafe:undefined,getPrototype=overArg(Object.getPrototypeOf,Object),objectCreate=Object.create,propertyIsEnumerable=objectProto.propertyIsEnumerable,splice=arrayProto.splice,spreadableSymbol=Symbol?Symbol.isConcatSpreadable:undefined,symIterator=Symbol?Symbol.iterator:undefined,symToStringTag=Symbol?Symbol.toStringTag:undefined,defineProperty=function(){try{var func=getNative(Object,"defineProperty");return func({},"",{}),func}catch(e){}}(),nativeCeil=Math.ceil,nativeFloor=Math.floor,nativeGetSymbols=Object.getOwnPropertySymbols,nativeIsBuffer=Buffer?Buffer.isBuffer:undefined,nativeIsFinite=root.isFinite,nativeKeys=overArg(Object.keys,Object),nativeMax=Math.max,nativeMin=Math.min,nativeNow=Date.now,nativeRandom=Math.random,nativeReverse=arrayProto.reverse,DataView=getNative(root,"DataView"),Map=getNative(root,"Map"),Promise=getNative(root,"Promise"),Set=getNative(root,"Set"),WeakMap=getNative(root,"WeakMap"),nativeCreate=getNative(Object,"create"),metaMap=WeakMap&&new WeakMap,realNames={},dataViewCtorString=toSource(DataView),mapCtorString=toSource(Map),promiseCtorString=toSource(Promise),setCtorString=toSource(Set),weakMapCtorString=toSource(WeakMap),symbolProto=Symbol?Symbol.prototype:undefined,symbolValueOf=symbolProto?symbolProto.valueOf:undefined,symbolToString=symbolProto?symbolProto.toString:undefined,baseCreate=function(){function object(){}return function(proto){if(!isObject(proto))return{};if(objectCreate)return objectCreate(proto);object.prototype=proto;var result=new object;return object.prototype=undefined,result}}();lodash.prototype=baseLodash.prototype,lodash.prototype.constructor=lodash,LodashWrapper.prototype=baseCreate(baseLodash.prototype),LodashWrapper.prototype.constructor=LodashWrapper,LazyWrapper.prototype=baseCreate(baseLodash.prototype),LazyWrapper.prototype.constructor=LazyWrapper,Hash.prototype.clear=hashClear,Hash.prototype["delete"]=hashDelete,Hash.prototype.get=hashGet,Hash.prototype.has=hashHas,Hash.prototype.set=hashSet,ListCache.prototype.clear=listCacheClear,ListCache.prototype["delete"]=listCacheDelete,ListCache.prototype.get=listCacheGet,ListCache.prototype.has=listCacheHas,ListCache.prototype.set=listCacheSet,MapCache.prototype.clear=mapCacheClear,MapCache.prototype["delete"]=mapCacheDelete,MapCache.prototype.get=mapCacheGet,MapCache.prototype.has=mapCacheHas,MapCache.prototype.set=mapCacheSet,SetCache.prototype.add=SetCache.prototype.push=setCacheAdd,SetCache.prototype.has=setCacheHas,Stack.prototype.clear=stackClear,Stack.prototype["delete"]=stackDelete,Stack.prototype.get=stackGet,Stack.prototype.has=stackHas,Stack.prototype.set=stackSet;var baseEach=createBaseEach(baseForOwn),baseFor=createBaseFor(),baseForRight=createBaseFor(!0),baseSetData=metaMap?function(func,data){return metaMap.set(func,data),func}:identity,baseSetToString=defineProperty?function(func,string){return defineProperty(func,"toString",{configurable:!0,enumerable:!1,value:constant(string),writable:!0})}:identity,createSet=Set&&1/setToArray(new Set([,-0]))[1]==INFINITY?function(values){return new Set(values)}:noop,getData=metaMap?function(func){return metaMap.get(func)}:noop,getSymbols=nativeGetSymbols?function(object){return null==object?[]:(object=Object(object),arrayFilter(nativeGetSymbols(object),function(symbol){return propertyIsEnumerable.call(object,symbol)}))}:stubArray,getSymbolsIn=nativeGetSymbols?function(object){for(var result=[];object;)arrayPush(result,getSymbols(object)),object=getPrototype(object);return result}:stubArray,getTag=baseGetTag;(DataView&&getTag(new DataView(new ArrayBuffer(1)))!=dataViewTag||Map&&getTag(new Map)!=mapTag||Promise&&getTag(Promise.resolve())!=promiseTag||Set&&getTag(new Set)!=setTag||WeakMap&&getTag(new WeakMap)!=weakMapTag)&&(getTag=function(value){var result=baseGetTag(value),Ctor=result==objectTag?value.constructor:undefined,ctorString=Ctor?toSource(Ctor):"";if(ctorString)switch(ctorString){case dataViewCtorString:return dataViewTag;case mapCtorString:return mapTag;case promiseCtorString:return promiseTag;case setCtorString:return setTag;case weakMapCtorString:return weakMapTag}return result});var setData=shortOut(baseSetData),setToString=shortOut(baseSetToString),stringToPath=memoizeCapped(function(string){var result=[];return 46===string.charCodeAt(0)&&result.push(""),string.replace(rePropName,function(match,number,quote,subString){result.push(quote?subString.replace(reEscapeChar,"$1"):number||match)}),result}),difference=baseRest(function(array,values){return isArrayLikeObject(array)?baseDifference(array,baseFlatten(values,1,isArrayLikeObject,!0)):[]}),intersection=baseRest(function(arrays){var mapped=arrayMap(arrays,castArrayLikeObject);return mapped.length&&mapped[0]===arrays[0]?baseIntersection(mapped):[]}),union=baseRest(function(arrays){return baseUniq(baseFlatten(arrays,1,isArrayLikeObject,!0))}),without=baseRest(function(array,values){return isArrayLikeObject(array)?baseDifference(array,values):[]}),zip=baseRest(unzip),wrapperAt=flatRest(function(paths){var length=paths.length,start=length?paths[0]:0,value=this.__wrapped__,interceptor=function(object){return baseAt(object,paths)};return!(length>1||this.__actions__.length)&&value instanceof LazyWrapper&&isIndex(start)?(value=value.slice(start,+start+(length?1:0)),value.__actions__.push({func:thru,args:[interceptor],thisArg:undefined}),new LodashWrapper(value,this.__chain__).thru(function(array){return length&&!array.length&&array.push(undefined),array})):this.thru(interceptor)}),countBy=createAggregator(function(result,value,key){hasOwnProperty.call(result,key)?++result[key]:baseAssignValue(result,key,1)}),find=createFind(findIndex),groupBy=createAggregator(function(result,value,key){hasOwnProperty.call(result,key)?result[key].push(value):baseAssignValue(result,key,[value])}),sortBy=baseRest(function(collection,iteratees){if(null==collection)return[];var length=iteratees.length;return length>1&&isIterateeCall(collection,iteratees[0],iteratees[1])?iteratees=[]:length>2&&isIterateeCall(iteratees[0],iteratees[1],iteratees[2])&&(iteratees=[iteratees[0]]),baseOrderBy(collection,baseFlatten(iteratees,1),[])}),now=function(){return root.Date.now()},bind=baseRest(function(func,thisArg,partials){var bitmask=WRAP_BIND_FLAG;if(partials.length){var holders=replaceHolders(partials,getHolder(bind));bitmask|=WRAP_PARTIAL_FLAG}return createWrap(func,bitmask,thisArg,partials,holders)}),defer=baseRest(function(func,args){return baseDelay(func,1,args)}),delay=baseRest(function(func,wait,args){return baseDelay(func,toNumber(wait)||0,args)});memoize.Cache=MapCache;var isArguments=baseIsArguments(function(){return arguments}())?baseIsArguments:function(value){return isObjectLike(value)&&hasOwnProperty.call(value,"callee")&&!propertyIsEnumerable.call(value,"callee")},isArray=Array.isArray,isBuffer=nativeIsBuffer||stubFalse,isDate=nodeIsDate?baseUnary(nodeIsDate):baseIsDate,isMap=nodeIsMap?baseUnary(nodeIsMap):baseIsMap,isRegExp=nodeIsRegExp?baseUnary(nodeIsRegExp):baseIsRegExp,isSet=nodeIsSet?baseUnary(nodeIsSet):baseIsSet,isTypedArray=nodeIsTypedArray?baseUnary(nodeIsTypedArray):baseIsTypedArray,assignIn=createAssigner(function(object,source){copyObject(source,keysIn(source),object)}),defaults=baseRest(function(object,sources){object=Object(object);var index=-1,length=sources.length,guard=length>2?sources[2]:undefined;for(guard&&isIterateeCall(sources[0],sources[1],guard)&&(length=1);++index1),path}),copyObject(object,getAllKeysIn(object),result),isDeep&&(result=baseClone(result,CLONE_DEEP_FLAG|CLONE_FLAT_FLAG|CLONE_SYMBOLS_FLAG,customOmitClone));for(var length=paths.length;length--;)baseUnset(result,paths[length]);return result}),pick=flatRest(function(object,paths){return null==object?{}:basePick(object,paths)}),range=createRange();lodash.assignIn=assignIn,lodash.before=before,lodash.bind=bind,lodash.chain=chain,lodash.compact=compact,lodash.concat=concat,lodash.countBy=countBy,lodash.create=create,lodash.debounce=debounce,lodash.defaults=defaults,lodash.defaultsDeep=defaultsDeep,lodash.defer=defer,lodash.delay=delay,lodash.difference=difference,lodash.drop=drop,lodash.filter=filter,lodash.flatten=flatten,lodash.flattenDeep=flattenDeep,lodash.groupBy=groupBy,lodash.initial=initial,lodash.intersection=intersection,lodash.invert=invert,lodash.invertBy=invertBy,lodash.iteratee=iteratee,lodash.keys=keys,lodash.map=map,lodash.matches=matches,lodash.merge=merge,lodash.mixin=mixin,lodash.negate=negate,lodash.omit=omit,lodash.omitBy=omitBy,lodash.once=once,lodash.pick=pick,lodash.range=range,lodash.reject=reject,lodash.rest=rest,lodash.slice=slice,lodash.sortBy=sortBy,lodash.take=take,lodash.takeRight=takeRight,lodash.tap=tap,lodash.throttle=throttle,lodash.thru=thru,lodash.toArray=toArray,lodash.union=union,lodash.uniq=uniq,lodash.uniqBy=uniqBy,lodash.unzip=unzip,lodash.values=values,lodash.without=without,lodash.zip=zip,lodash.zipObject=zipObject,lodash.extend=assignIn,mixin(lodash,lodash),lodash.clamp=clamp,lodash.clone=clone,lodash.cloneDeep=cloneDeep,lodash.escape=escape,lodash.every=every,lodash.find=find,lodash.findIndex=findIndex,lodash.findKey=findKey,lodash.findLastIndex=findLastIndex,lodash.findLastKey=findLastKey,lodash.forEach=forEach,lodash.get=get,lodash.has=has,lodash.head=head,lodash.identity=identity,lodash.indexOf=indexOf,lodash.isArguments=isArguments,lodash.isArray=isArray,lodash.isArrayLike=isArrayLike,lodash.isBoolean=isBoolean,lodash.isDate=isDate,lodash.isEmpty=isEmpty,lodash.isEqual=isEqual,lodash.isFinite=isFinite,lodash.isFunction=isFunction,lodash.isNaN=isNaN,lodash.isNull=isNull,lodash.isNumber=isNumber,lodash.isObject=isObject,lodash.isPlainObject=isPlainObject,lodash.isRegExp=isRegExp,lodash.isString=isString,lodash.isUndefined=isUndefined,lodash.last=last,lodash.max=max,lodash.min=min,lodash.noConflict=noConflict,lodash.noop=noop,lodash.random=random,lodash.reduce=reduce,lodash.result=result,lodash.size=size,lodash.some=some,lodash.trim=trim,lodash.uniqueId=uniqueId,lodash.each=forEach,lodash.first=head,mixin(lodash,function(){var source={};return baseForOwn(lodash,function(func,methodName){hasOwnProperty.call(lodash.prototype,methodName)||(source[methodName]=func)}),source}(),{chain:!1}),lodash.VERSION=VERSION,arrayEach(["drop","take"],function(methodName,index){LazyWrapper.prototype[methodName]=function(n){n=n===undefined?1:nativeMax(toInteger(n),0);var result=this.__filtered__&&!index?new LazyWrapper(this):this.clone();return result.__filtered__?result.__takeCount__=nativeMin(n,result.__takeCount__):result.__views__.push({size:nativeMin(n,MAX_ARRAY_LENGTH),type:methodName+(result.__dir__<0?"Right":"")}),result},LazyWrapper.prototype[methodName+"Right"]=function(n){return this.reverse()[methodName](n).reverse()}}),arrayEach(["filter","map","takeWhile"],function(methodName,index){var type=index+1,isFilter=type==LAZY_FILTER_FLAG||type==LAZY_WHILE_FLAG;LazyWrapper.prototype[methodName]=function(iteratee){var result=this.clone();return result.__iteratees__.push({iteratee:getIteratee(iteratee,3),type:type}),result.__filtered__=result.__filtered__||isFilter,result}}),arrayEach(["head","last"],function(methodName,index){var takeName="take"+(index?"Right":"");LazyWrapper.prototype[methodName]=function(){return this[takeName](1).value()[0]}}),arrayEach(["initial","tail"],function(methodName,index){var dropName="drop"+(index?"":"Right");LazyWrapper.prototype[methodName]=function(){return this.__filtered__?new LazyWrapper(this):this[dropName](1)}}),LazyWrapper.prototype.compact=function(){return this.filter(identity)},LazyWrapper.prototype.find=function(predicate){return this.filter(predicate).head()},LazyWrapper.prototype.findLast=function(predicate){return this.reverse().find(predicate)},LazyWrapper.prototype.invokeMap=baseRest(function(path,args){return"function"==typeof path?new LazyWrapper(this):this.map(function(value){return baseInvoke(value,path,args)})}),LazyWrapper.prototype.reject=function(predicate){return this.filter(negate(getIteratee(predicate)))},LazyWrapper.prototype.slice=function(start,end){start=toInteger(start);var result=this;return result.__filtered__&&(start>0||end<0)?new LazyWrapper(result):(start<0?result=result.takeRight(-start):start&&(result=result.drop(start)),end!==undefined&&(end=toInteger(end),result=end<0?result.dropRight(-end):result.take(end-start)),result)},LazyWrapper.prototype.takeRightWhile=function(predicate){return this.reverse().takeWhile(predicate).reverse()},LazyWrapper.prototype.toArray=function(){return this.take(MAX_ARRAY_LENGTH)},baseForOwn(LazyWrapper.prototype,function(func,methodName){var checkIteratee=/^(?:filter|find|map|reject)|While$/.test(methodName),isTaker=/^(?:head|last)$/.test(methodName),lodashFunc=lodash[isTaker?"take"+("last"==methodName?"Right":""):methodName],retUnwrapped=isTaker||/^find/.test(methodName);lodashFunc&&(lodash.prototype[methodName]=function(){var value=this.__wrapped__,args=isTaker?[1]:arguments,isLazy=value instanceof LazyWrapper,iteratee=args[0],useLazy=isLazy||isArray(value),interceptor=function(value){var result=lodashFunc.apply(lodash,arrayPush([value],args));return isTaker&&chainAll?result[0]:result};useLazy&&checkIteratee&&"function"==typeof iteratee&&1!=iteratee.length&&(isLazy=useLazy=!1);var chainAll=this.__chain__,isHybrid=!!this.__actions__.length,isUnwrapped=retUnwrapped&&!chainAll,onlyLazy=isLazy&&!isHybrid;if(!retUnwrapped&&useLazy){value=onlyLazy?value:new LazyWrapper(this);var result=func.apply(value,args);return result.__actions__.push({func:thru,args:[interceptor],thisArg:undefined}),new LodashWrapper(result,chainAll)}return isUnwrapped&&onlyLazy?func.apply(this,args):(result=this.thru(interceptor),isUnwrapped?isTaker?result.value()[0]:result.value():result)})}),arrayEach(["pop","push","shift","sort","splice","unshift"],function(methodName){var func=arrayProto[methodName],chainName=/^(?:push|sort|unshift)$/.test(methodName)?"tap":"thru",retUnwrapped=/^(?:pop|shift)$/.test(methodName);lodash.prototype[methodName]=function(){var args=arguments;if(retUnwrapped&&!this.__chain__){var value=this.value();return func.apply(isArray(value)?value:[],args)}return this[chainName](function(value){return func.apply(isArray(value)?value:[],args)})}}),baseForOwn(LazyWrapper.prototype,function(func,methodName){var lodashFunc=lodash[methodName];if(lodashFunc){var key=lodashFunc.name+"",names=realNames[key]||(realNames[key]=[]);names.push({name:methodName,func:lodashFunc})}}),realNames[createHybrid(undefined,WRAP_BIND_KEY_FLAG).name]=[{name:"wrapper",func:undefined}],LazyWrapper.prototype.clone=lazyClone,LazyWrapper.prototype.reverse=lazyReverse,LazyWrapper.prototype.value=lazyValue,lodash.prototype.first=lodash.prototype.head,symIterator&&(lodash.prototype[symIterator]=wrapperToIterator),"function"==typeof define&&"object"==typeof define.amd&&define.amd?(root._=lodash,define(function(){return lodash})):freeModule?((freeModule.exports=lodash)._=lodash,freeExports._=lodash):root._=lodash}.call(this);var _global;_global="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,_global.BI||(_global.BI={}),!function(undefined){var traverse=function(func,context){return function(value,key,obj){return func.call(context,key,value,obj); +}},_apply=function(name){return function(){return _[name].apply(_,arguments)}},_applyFunc=function(name){return function(){var args=Array.prototype.slice.call(arguments,0);return args[1]=_.isFunction(args[1])?traverse(args[1],args[2]):args[1],_[name].apply(_,args)}};_.extend(BI,{assert:function(v,is){if(this.isFunction(is)){if(is(v))return!0;throw new Error(v+" error")}if(this.isArray(is)||(is=[is]),!this.deepContains(is,v))throw new Error(v+" error")},warn:function(message){console.warn(message)},UUID:function(){for(var f=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"],str="",i=0;i<16;i++){var r=parseInt(f.length*Math.random(),10);str+=f[r]}return str},isWidget:function(widget){return widget instanceof BI.Widget||BI.View&&widget instanceof BI.View},createWidgets:function(items,options,context){if(!BI.isArray(items))throw new Error("cannot create Widgets");return BI.isWidget(options)?(context=options,options={}):options||(options={}),BI.map(BI.flatten(items),function(i,item){return BI.createWidget(item,BI.deepClone(options))})},createItems:function(data,innerAttr,outerAttr){return innerAttr=BI.isArray(innerAttr)?innerAttr:BI.makeArray(BI.flatten(data).length,innerAttr||{}),outerAttr=BI.isArray(outerAttr)?outerAttr:BI.makeArray(BI.flatten(data).length,outerAttr||{}),BI.map(data,function(i,item){return BI.isArray(item)?BI.createItems(item,innerAttr,outerAttr):item instanceof BI.Widget?BI.extend({},innerAttr.shift(),outerAttr.shift(),{type:null,el:item}):innerAttr[0]instanceof BI.Widget?(outerAttr.shift(),BI.extend({},item,{el:innerAttr.shift()})):item.el instanceof BI.Widget||BI.View&&item.el instanceof BI.View?(innerAttr.shift(),BI.extend({},outerAttr.shift(),{type:null},item)):item.el?BI.extend({},outerAttr.shift(),item,{el:BI.extend({},innerAttr.shift(),item.el)}):BI.extend({},outerAttr.shift(),{el:BI.extend({},innerAttr.shift(),item)})})},packageItems:function(items,layouts){for(var i=layouts.length-1;i>=0;i--)items=BI.map(items,function(k,it){return BI.extend({},layouts[i],{items:[BI.extend({},layouts[i].el,{el:it})]})});return items},formatEL:function(obj){return obj&&!obj.type&&obj.el?obj:{el:obj}},stripEL:function(obj){return obj.type&&obj||obj.el||obj},trans2Element:function(widgets){return BI.map(widgets,function(i,wi){return wi.element})}}),_.each(["where","findWhere","invoke","pluck","shuffle","sample","toArray","size"],function(name){BI[name]=_apply(name)}),_.each(["get","each","map","reduce","reduceRight","find","filter","reject","every","all","some","any","max","min","sortBy","groupBy","indexBy","countBy","partition","clamp"],function(name){"any"===name?BI[name]=_applyFunc("some"):BI[name]=_applyFunc(name)}),_.extend(BI,{count:function(from,to,predicate){var t;if(predicate)for(t=from;t=0;index--)predicate(index,obj[index],obj);return!1},backAny:function(obj,predicate,context){predicate=BI.iteratee(predicate,context);for(var index=obj.length-1;index>=0;index--)if(predicate(index,obj[index],obj))return!0;return!1},backEvery:function(obj,predicate,context){predicate=BI.iteratee(predicate,context);for(var index=obj.length-1;index>=0;index--)if(!predicate(index,obj[index],obj))return!1;return!0},backFindKey:function(obj,predicate,context){predicate=BI.iteratee(predicate,context);for(var keys=_.keys(obj),key,i=keys.length-1;i>=0;i--)if(key=keys[i],predicate(obj[key],key,obj))return key},backFind:function(obj,predicate,context){var key;if(key=BI.isArray(obj)?BI.findLastIndex(obj,predicate,context):BI.backFindKey(obj,predicate,context),void 0!==key&&key!==-1)return obj[key]},remove:function(obj,target,context){var isFunction=BI.isFunction(target);target=isFunction||BI.isArray(target)?target:[target];var i;if(BI.isArray(obj))for(i=0;i(2147483646-str.charAt(i).charCodeAt(0)+start.charCodeAt(0))/26)return 0;return idx},int2Abc:function(num){var DIGITS=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"],idx=num,str="";if(0===num)return"";for(;0!==idx;){var t=idx%26;0===t&&(t=26),str=DIGITS[t-1]+str,idx=(idx-t)/26}return str}}),_.each(["first","initial","last","rest","compact","flatten","without","union","intersection","difference","zip","unzip","object","indexOf","lastIndexOf","sortedIndex","range","take","takeRight","uniqBy"],function(name){BI[name]=_apply(name)}),_.each(["findIndex","findLastIndex"],function(name){BI[name]=_applyFunc(name)}),_.extend(BI,{makeArray:function(length,value){for(var res=[],i=0;i0;)BI.prepares.shift()()},has:function(obj,keys){return BI.isArray(keys)?0!==keys.length&&BI.every(keys,function(i,key){return _.has(obj,key)}):_.has.apply(_,arguments)},freeze:function(value){return Object.freeze&&BI.isObject(value)?Object.freeze(value):value},isKey:function(key){return BI.isNumber(key)||BI.isString(key)&&key.length>0},isCapitalEqual:function(a,b){return a=BI.isNull(a)?a:(""+a).toLowerCase(),b=BI.isNull(b)?b:(""+b).toLowerCase(),BI.isEqual(a,b)},isWidthOrHeight:function(w){return"number"==typeof w?w>=0:"string"==typeof w?/^\d{1,3}%$/.exec(w)||"auto"==w||/^\d+px$/.exec(w):void 0},isNotNull:function(obj){return!BI.isNull(obj)},isNull:function(obj){return"undefined"==typeof obj||null===obj},isEmptyArray:function(arr){return BI.isArray(arr)&&BI.isEmpty(arr)},isNotEmptyArray:function(arr){return BI.isArray(arr)&&!BI.isEmpty(arr)},isEmptyObject:function(obj){return BI.isEqual(obj,{})},isNotEmptyObject:function(obj){return BI.isPlainObject(obj)&&!BI.isEmptyObject(obj)},isEmptyString:function(obj){return BI.isString(obj)&&0===obj.length},isNotEmptyString:function(obj){return BI.isString(obj)&&!BI.isEmptyString(obj)},isWindow:function(obj){return null!=obj&&obj==obj.window}}),_.extend(BI,{deepClone:_.cloneDeep,deepExtend:_.merge,isDeepMatch:function(object,attrs){var keys=BI.keys(attrs),length=keys.length;if(null==object)return!length;for(var obj=Object(object),i=0;i=0},deepContains:function(obj,copy){return BI.isObject(copy)?BI.any(obj,function(i,v){if(BI.isEqual(v,copy))return!0}):BI.contains(obj,copy)},deepIndexOf:function(obj,target){for(var i=0;imaxDate[0]?back=["y",1]:YY>=minDate[0]&&YY<=maxDate[0]&&(YY==minDate[0]&&(MMmaxDate[1]?back=["m",1]:MM==maxDate[1]&&DD>maxDate[2]&&(back=["d",1]))),back},checkDateLegal:function(str){var ar=str.match(/\d+/g),YY=0|ar[0],MM=0|ar[1],DD=0|ar[2];if(ar.length<=1)return!0;if(ar.length<=2)return MM>=1&&MM<=12;var MD=BI.Date._MD.slice(0);return MD[1]=BI.isLeapYear(YY)?29:28,MM>=1&&MM<=12&&DD<=MD[MM-1]},parseDateTime:function(str,fmt){var today=BI.getDate(),y=0,m=0,d=1,a=str.split(/\W+/);if("%y%x"==fmt.toLowerCase()||"%y%x%d"==fmt.toLowerCase()){var yearlength=4,otherlength=2;a[0]=str.substring(0,yearlength),a[1]=str.substring(yearlength,yearlength+otherlength),a[2]=str.substring(yearlength+otherlength,yearlength+2*otherlength)}var b=fmt.match(/%./g),i=0,j=0,hr=0,min=0,sec=0;for(i=0;i29?1900:2e3);break;case"%b":case"%B":for(j=0;j<12;++j)if(BI.Date._MN[j].substr(0,a[i].length).toLowerCase()==a[i].toLowerCase()){m=j;break}break;case"%H":case"%I":case"%k":case"%l":hr=parseInt(a[i],10);break;case"%P":case"%p":/pm/i.test(a[i])&&hr<12?hr+=12:/am/i.test(a[i])&&hr>=12&&(hr-=12);break;case"%M":min=parseInt(a[i],10);case"%S":sec=parseInt(a[i],10)}if(isNaN(y)&&(y=today.getFullYear()),isNaN(m)&&(m=today.getMonth()),isNaN(d)&&(d=today.getDate()),isNaN(hr)&&(hr=today.getHours()),isNaN(min)&&(min=today.getMinutes()),isNaN(sec)&&(sec=today.getSeconds()),0!=y)return BI.getDate(y,m,d,hr,min,sec);for(y=0,m=-1,d=0,i=0;i31&&0==y?(y=parseInt(a[i],10),y<100&&(y+=y>29?1900:2e3)):0==d&&(d=a[i]);return 0==y&&(y=today.getFullYear()),m!=-1&&0!=d?BI.getDate(y,m,d,hr,min,sec):today},getDate:function(){var length=arguments.length,args=arguments,dt;switch(length){case 0:dt=new Date;break;case 1:dt=new Date(args[0]);break;case 2:dt=new Date(args[0],args[1]);break;case 3:dt=new Date(args[0],args[1],args[2]);break;case 4:dt=new Date(args[0],args[1],args[2],args[3]);break;case 5:dt=new Date(args[0],args[1],args[2],args[3],args[4]);break;case 6:dt=new Date(args[0],args[1],args[2],args[3],args[4],args[5]);break;case 7:dt=new Date(args[0],args[1],args[2],args[3],args[4],args[5],args[6]);break;default:dt=new Date}if(BI.isNotNull(BI.timeZone)&&(0===arguments.length||1===arguments.length&&BI.isNumber(arguments[0]))){var localTime=dt.getTime(),localOffset=6e4*dt.getTimezoneOffset(),utc=localTime+localOffset;return new Date(utc+BI.timeZone)}return dt},getTime:function(){var length=arguments.length,args=arguments,dt;switch(length){case 0:dt=new Date;break;case 1:dt=new Date(args[0]);break;case 2:dt=new Date(args[0],args[1]);break;case 3:dt=new Date(args[0],args[1],args[2]);break;case 4:dt=new Date(args[0],args[1],args[2],args[3]);break;case 5:dt=new Date(args[0],args[1],args[2],args[3],args[4]);break;case 6:dt=new Date(args[0],args[1],args[2],args[3],args[4],args[5]);break;case 7:dt=new Date(args[0],args[1],args[2],args[3],args[4],args[5],args[6]);break;default:dt=new Date}return BI.isNotNull(BI.timeZone)?dt.getTime()-BI.timeZone-6e4*(new Date).getTimezoneOffset():dt.getTime()}})}(),!function(){function extend(){for(var target=arguments[0]||{},length=arguments.length,i=1,options,name,src,copy;i0;)BI.prepares.shift()();var el,w;if(item||(item={}),BI.isWidget(options)?(context=options,options={}):options||(options={}),BI.isEmpty(item)&&BI.isEmpty(options))return BI.createWidget({type:"bi.layout"});if(BI.isWidget(item))return item;if(item.type||options.type)return el=BI.extend({},options,item),w=BI.Plugin.getWidget(el.type,el),w.listeners=(w.listeners||[]).concat([{eventName:BI.Events.MOUNT,action:function(){BI.Plugin.getObject(el.type,this)}}]),w.type===el.type?createWidget(w):BI.createWidget(BI.extend({},item,{type:w.type},options));if(item.el&&(item.el.type||options.type))return el=BI.extend({},options,item.el),w=BI.Plugin.getWidget(el.type,el),w.listeners=(w.listeners||[]).concat([{eventName:BI.Events.MOUNT,action:function(){BI.Plugin.getObject(el.type,this)}}]),w.type===el.type?createWidget(w):BI.createWidget(BI.extend({},item,{type:w.type},options));if(BI.isWidget(item.el))return item.el;throw new Error("无法根据item创建组件")},BI.createElement=function(){var widget=BI.createWidget.apply(this,arguments);return widget.element}}(),!function(){BI.CRYPT_TYPE=BI.CRYPT_TYPE||{},BI.CRYPT_TYPE.AES="aes";var CryptoJS=CryptoJS||function(Math,undefined){var C={},C_lib=C.lib={},Base=C_lib.Base=function(){function F(){}return{extend:function(overrides){F.prototype=this;var subtype=new F;return overrides&&subtype.mixIn(overrides),subtype.hasOwnProperty("init")||(subtype.init=function(){subtype.$super.init.apply(this,arguments)}),subtype.init.prototype=subtype,subtype.$super=this,subtype},create:function(){var instance=this.extend();return instance.init.apply(instance,arguments),instance},init:function(){},mixIn:function(properties){for(var propertyName in properties)properties.hasOwnProperty(propertyName)&&(this[propertyName]=properties[propertyName]);properties.hasOwnProperty("toString")&&(this.toString=properties.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),WordArray=C_lib.WordArray=Base.extend({init:function(words,sigBytes){words=this.words=words||[],sigBytes!=undefined?this.sigBytes=sigBytes:this.sigBytes=4*words.length},toString:function(encoder){return(encoder||Hex).stringify(this)},concat:function(wordArray){var thisWords=this.words,thatWords=wordArray.words,thisSigBytes=this.sigBytes,thatSigBytes=wordArray.sigBytes;if(this.clamp(),thisSigBytes%4)for(var i=0;i>>2]>>>24-i%4*8&255;thisWords[thisSigBytes+i>>>2]|=thatByte<<24-(thisSigBytes+i)%4*8}else if(thatWords.length>65535)for(var i=0;i>>2]=thatWords[i>>>2];else thisWords.push.apply(thisWords,thatWords);return this.sigBytes+=thatSigBytes,this},clamp:function(){var words=this.words,sigBytes=this.sigBytes;words[sigBytes>>>2]&=4294967295<<32-sigBytes%4*8,words.length=Math.ceil(sigBytes/4); +},clone:function(){var clone=Base.clone.call(this);return clone.words=this.words.slice(0),clone},random:function(nBytes){for(var words=[],i=0;i>>2]>>>24-i%4*8&255;hexChars.push((bite>>>4).toString(16)),hexChars.push((15&bite).toString(16))}return hexChars.join("")},parse:function(hexStr){for(var hexStrLength=hexStr.length,words=[],i=0;i>>3]|=parseInt(hexStr.substr(i,2),16)<<24-i%8*4;return new WordArray.init(words,hexStrLength/2)}},Latin1=C_enc.Latin1={stringify:function(wordArray){for(var words=wordArray.words,sigBytes=wordArray.sigBytes,latin1Chars=[],i=0;i>>2]>>>24-i%4*8&255;latin1Chars.push(String.fromCharCode(bite))}return latin1Chars.join("")},parse:function(latin1Str){for(var latin1StrLength=latin1Str.length,words=[],i=0;i>>2]|=(255&latin1Str.charCodeAt(i))<<24-i%4*8;return new WordArray.init(words,latin1StrLength)}},Utf8=C_enc.Utf8={stringify:function(wordArray){try{return decodeURIComponent(escape(Latin1.stringify(wordArray)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(utf8Str){return Latin1.parse(unescape(encodeURIComponent(utf8Str)))}},BufferedBlockAlgorithm=C_lib.BufferedBlockAlgorithm=Base.extend({reset:function(){this._data=new WordArray.init,this._nDataBytes=0},_append:function(data){"string"==typeof data&&(data=Utf8.parse(data)),this._data.concat(data),this._nDataBytes+=data.sigBytes},_process:function(doFlush){var data=this._data,dataWords=data.words,dataSigBytes=data.sigBytes,blockSize=this.blockSize,blockSizeBytes=4*blockSize,nBlocksReady=dataSigBytes/blockSizeBytes;nBlocksReady=doFlush?Math.ceil(nBlocksReady):Math.max((0|nBlocksReady)-this._minBufferSize,0);var nWordsReady=nBlocksReady*blockSize,nBytesReady=Math.min(4*nWordsReady,dataSigBytes);if(nWordsReady){for(var offset=0;offset>>2]>>>24-i%4*8&255,byte2=words[i+1>>>2]>>>24-(i+1)%4*8&255,byte3=words[i+2>>>2]>>>24-(i+2)%4*8&255,triplet=byte1<<16|byte2<<8|byte3,j=0;j<4&&i+.75*j>>6*(3-j)&63));var paddingChar=map.charAt(64);if(paddingChar)for(;base64Chars.length%4;)base64Chars.push(paddingChar);return base64Chars.join("")},parse:function(base64Str){var base64StrLength=base64Str.length,map=this._map,paddingChar=map.charAt(64);if(paddingChar){var paddingIndex=base64Str.indexOf(paddingChar);paddingIndex!=-1&&(base64StrLength=paddingIndex)}for(var words=[],nBytes=0,i=0;i>>6-i%4*2;words[nBytes>>>2]|=(bits1|bits2)<<24-nBytes%4*8,nBytes++}return WordArray.create(words,nBytes)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(Math){function FF(a,b,c,d,x,s,t){var n=a+(b&c|~b&d)+x+t;return(n<>>32-s)+b}function GG(a,b,c,d,x,s,t){var n=a+(b&d|c&~d)+x+t;return(n<>>32-s)+b}function HH(a,b,c,d,x,s,t){var n=a+(b^c^d)+x+t;return(n<>>32-s)+b}function II(a,b,c,d,x,s,t){var n=a+(c^(b|~d))+x+t;return(n<>>32-s)+b}var C=CryptoJS,C_lib=C.lib,WordArray=C_lib.WordArray,Hasher=C_lib.Hasher,C_algo=C.algo,T=[];!function(){for(var i=0;i<64;i++)T[i]=4294967296*Math.abs(Math.sin(i+1))|0}();var MD5=C_algo.MD5=Hasher.extend({_doReset:function(){this._hash=new WordArray.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(M,offset){for(var i=0;i<16;i++){var offset_i=offset+i,M_offset_i=M[offset_i];M[offset_i]=16711935&(M_offset_i<<8|M_offset_i>>>24)|4278255360&(M_offset_i<<24|M_offset_i>>>8)}var H=this._hash.words,M_offset_0=M[offset+0],M_offset_1=M[offset+1],M_offset_2=M[offset+2],M_offset_3=M[offset+3],M_offset_4=M[offset+4],M_offset_5=M[offset+5],M_offset_6=M[offset+6],M_offset_7=M[offset+7],M_offset_8=M[offset+8],M_offset_9=M[offset+9],M_offset_10=M[offset+10],M_offset_11=M[offset+11],M_offset_12=M[offset+12],M_offset_13=M[offset+13],M_offset_14=M[offset+14],M_offset_15=M[offset+15],a=H[0],b=H[1],c=H[2],d=H[3];a=FF(a,b,c,d,M_offset_0,7,T[0]),d=FF(d,a,b,c,M_offset_1,12,T[1]),c=FF(c,d,a,b,M_offset_2,17,T[2]),b=FF(b,c,d,a,M_offset_3,22,T[3]),a=FF(a,b,c,d,M_offset_4,7,T[4]),d=FF(d,a,b,c,M_offset_5,12,T[5]),c=FF(c,d,a,b,M_offset_6,17,T[6]),b=FF(b,c,d,a,M_offset_7,22,T[7]),a=FF(a,b,c,d,M_offset_8,7,T[8]),d=FF(d,a,b,c,M_offset_9,12,T[9]),c=FF(c,d,a,b,M_offset_10,17,T[10]),b=FF(b,c,d,a,M_offset_11,22,T[11]),a=FF(a,b,c,d,M_offset_12,7,T[12]),d=FF(d,a,b,c,M_offset_13,12,T[13]),c=FF(c,d,a,b,M_offset_14,17,T[14]),b=FF(b,c,d,a,M_offset_15,22,T[15]),a=GG(a,b,c,d,M_offset_1,5,T[16]),d=GG(d,a,b,c,M_offset_6,9,T[17]),c=GG(c,d,a,b,M_offset_11,14,T[18]),b=GG(b,c,d,a,M_offset_0,20,T[19]),a=GG(a,b,c,d,M_offset_5,5,T[20]),d=GG(d,a,b,c,M_offset_10,9,T[21]),c=GG(c,d,a,b,M_offset_15,14,T[22]),b=GG(b,c,d,a,M_offset_4,20,T[23]),a=GG(a,b,c,d,M_offset_9,5,T[24]),d=GG(d,a,b,c,M_offset_14,9,T[25]),c=GG(c,d,a,b,M_offset_3,14,T[26]),b=GG(b,c,d,a,M_offset_8,20,T[27]),a=GG(a,b,c,d,M_offset_13,5,T[28]),d=GG(d,a,b,c,M_offset_2,9,T[29]),c=GG(c,d,a,b,M_offset_7,14,T[30]),b=GG(b,c,d,a,M_offset_12,20,T[31]),a=HH(a,b,c,d,M_offset_5,4,T[32]),d=HH(d,a,b,c,M_offset_8,11,T[33]),c=HH(c,d,a,b,M_offset_11,16,T[34]),b=HH(b,c,d,a,M_offset_14,23,T[35]),a=HH(a,b,c,d,M_offset_1,4,T[36]),d=HH(d,a,b,c,M_offset_4,11,T[37]),c=HH(c,d,a,b,M_offset_7,16,T[38]),b=HH(b,c,d,a,M_offset_10,23,T[39]),a=HH(a,b,c,d,M_offset_13,4,T[40]),d=HH(d,a,b,c,M_offset_0,11,T[41]),c=HH(c,d,a,b,M_offset_3,16,T[42]),b=HH(b,c,d,a,M_offset_6,23,T[43]),a=HH(a,b,c,d,M_offset_9,4,T[44]),d=HH(d,a,b,c,M_offset_12,11,T[45]),c=HH(c,d,a,b,M_offset_15,16,T[46]),b=HH(b,c,d,a,M_offset_2,23,T[47]),a=II(a,b,c,d,M_offset_0,6,T[48]),d=II(d,a,b,c,M_offset_7,10,T[49]),c=II(c,d,a,b,M_offset_14,15,T[50]),b=II(b,c,d,a,M_offset_5,21,T[51]),a=II(a,b,c,d,M_offset_12,6,T[52]),d=II(d,a,b,c,M_offset_3,10,T[53]),c=II(c,d,a,b,M_offset_10,15,T[54]),b=II(b,c,d,a,M_offset_1,21,T[55]),a=II(a,b,c,d,M_offset_8,6,T[56]),d=II(d,a,b,c,M_offset_15,10,T[57]),c=II(c,d,a,b,M_offset_6,15,T[58]),b=II(b,c,d,a,M_offset_13,21,T[59]),a=II(a,b,c,d,M_offset_4,6,T[60]),d=II(d,a,b,c,M_offset_11,10,T[61]),c=II(c,d,a,b,M_offset_2,15,T[62]),b=II(b,c,d,a,M_offset_9,21,T[63]),H[0]=H[0]+a|0,H[1]=H[1]+b|0,H[2]=H[2]+c|0,H[3]=H[3]+d|0},_doFinalize:function(){var data=this._data,dataWords=data.words,nBitsTotal=8*this._nDataBytes,nBitsLeft=8*data.sigBytes;dataWords[nBitsLeft>>>5]|=128<<24-nBitsLeft%32;var nBitsTotalH=Math.floor(nBitsTotal/4294967296),nBitsTotalL=nBitsTotal;dataWords[(nBitsLeft+64>>>9<<4)+15]=16711935&(nBitsTotalH<<8|nBitsTotalH>>>24)|4278255360&(nBitsTotalH<<24|nBitsTotalH>>>8),dataWords[(nBitsLeft+64>>>9<<4)+14]=16711935&(nBitsTotalL<<8|nBitsTotalL>>>24)|4278255360&(nBitsTotalL<<24|nBitsTotalL>>>8),data.sigBytes=4*(dataWords.length+1),this._process();for(var hash=this._hash,H=hash.words,i=0;i<4;i++){var H_i=H[i];H[i]=16711935&(H_i<<8|H_i>>>24)|4278255360&(H_i<<24|H_i>>>8)}return hash},clone:function(){var clone=Hasher.clone.call(this);return clone._hash=this._hash.clone(),clone}});C.MD5=Hasher._createHelper(MD5),C.HmacMD5=Hasher._createHmacHelper(MD5)}(Math),function(){var C=CryptoJS,C_lib=C.lib,Base=C_lib.Base,WordArray=C_lib.WordArray,C_algo=C.algo,MD5=C_algo.MD5,EvpKDF=C_algo.EvpKDF=Base.extend({cfg:Base.extend({keySize:4,hasher:MD5,iterations:1}),init:function(cfg){this.cfg=this.cfg.extend(cfg)},compute:function(password,salt){for(var cfg=this.cfg,hasher=cfg.hasher.create(),derivedKey=WordArray.create(),derivedKeyWords=derivedKey.words,keySize=cfg.keySize,iterations=cfg.iterations;derivedKeyWords.length>>2];data.sigBytes-=nPaddingBytes}},BlockCipher=C_lib.BlockCipher=Cipher.extend({cfg:Cipher.cfg.extend({mode:CBC,padding:Pkcs7}),reset:function(){Cipher.reset.call(this);var cfg=this.cfg,iv=cfg.iv,mode=cfg.mode;if(this._xformMode==this._ENC_XFORM_MODE)var modeCreator=mode.createEncryptor;else{var modeCreator=mode.createDecryptor;this._minBufferSize=1}this._mode=modeCreator.call(mode,this,iv&&iv.words)},_doProcessBlock:function(words,offset){this._mode.processBlock(words,offset)},_doFinalize:function(){var padding=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){padding.pad(this._data,this.blockSize);var finalProcessedBlocks=this._process(!0)}else{var finalProcessedBlocks=this._process(!0);padding.unpad(finalProcessedBlocks)}return finalProcessedBlocks},blockSize:4}),CipherParams=C_lib.CipherParams=Base.extend({init:function(cipherParams){this.mixIn(cipherParams)},toString:function(formatter){return(formatter||this.formatter).stringify(this)}}),C_format=C.format={},OpenSSLFormatter=C_format.OpenSSL={stringify:function(cipherParams){var ciphertext=cipherParams.ciphertext,salt=cipherParams.salt;if(salt)var wordArray=WordArray.create([1398893684,1701076831]).concat(salt).concat(ciphertext);else var wordArray=ciphertext;return wordArray.toString(Base64)},parse:function(openSSLStr){var ciphertext=Base64.parse(openSSLStr),ciphertextWords=ciphertext.words;if(1398893684==ciphertextWords[0]&&1701076831==ciphertextWords[1]){var salt=WordArray.create(ciphertextWords.slice(2,4));ciphertextWords.splice(0,4),ciphertext.sigBytes-=16}return CipherParams.create({ciphertext:ciphertext,salt:salt})}},SerializableCipher=C_lib.SerializableCipher=Base.extend({cfg:Base.extend({format:OpenSSLFormatter}),encrypt:function(cipher,message,key,cfg){cfg=this.cfg.extend(cfg);var encryptor=cipher.createEncryptor(key,cfg),ciphertext=encryptor.finalize(message),cipherCfg=encryptor.cfg;return CipherParams.create({ciphertext:ciphertext,key:key,iv:cipherCfg.iv,algorithm:cipher,mode:cipherCfg.mode,padding:cipherCfg.padding,blockSize:cipher.blockSize,formatter:cfg.format})},decrypt:function(cipher,ciphertext,key,cfg){cfg=this.cfg.extend(cfg),ciphertext=this._parse(ciphertext,cfg.format);var plaintext=cipher.createDecryptor(key,cfg).finalize(ciphertext.ciphertext);return plaintext},_parse:function(ciphertext,format){return"string"==typeof ciphertext?format.parse(ciphertext,this):ciphertext}}),C_kdf=C.kdf={},OpenSSLKdf=C_kdf.OpenSSL={execute:function(password,keySize,ivSize,salt){salt||(salt=WordArray.random(8));var key=EvpKDF.create({keySize:keySize+ivSize}).compute(password,salt),iv=WordArray.create(key.words.slice(keySize),4*ivSize);return key.sigBytes=4*keySize,CipherParams.create({key:key,iv:iv,salt:salt})}},PasswordBasedCipher=C_lib.PasswordBasedCipher=SerializableCipher.extend({cfg:SerializableCipher.cfg.extend({kdf:OpenSSLKdf}),encrypt:function(cipher,message,password,cfg){cfg=this.cfg.extend(cfg);var derivedParams=cfg.kdf.execute(password,cipher.keySize,cipher.ivSize);cfg.iv=derivedParams.iv;var ciphertext=SerializableCipher.encrypt.call(this,cipher,message,derivedParams.key,cfg);return ciphertext.mixIn(derivedParams),ciphertext},decrypt:function(cipher,ciphertext,password,cfg){cfg=this.cfg.extend(cfg),ciphertext=this._parse(ciphertext,cfg.format);var derivedParams=cfg.kdf.execute(password,cipher.keySize,cipher.ivSize,ciphertext.salt);cfg.iv=derivedParams.iv;var plaintext=SerializableCipher.decrypt.call(this,cipher,ciphertext,derivedParams.key,cfg);return plaintext}})}(),CryptoJS.mode.ECB=function(){var ECB=CryptoJS.lib.BlockCipherMode.extend();return ECB.Encryptor=ECB.extend({processBlock:function(words,offset){this._cipher.encryptBlock(words,offset)}}),ECB.Decryptor=ECB.extend({processBlock:function(words,offset){this._cipher.decryptBlock(words,offset)}}),ECB}(),function(){var C=CryptoJS,C_lib=C.lib,BlockCipher=C_lib.BlockCipher,C_algo=C.algo,SBOX=[],INV_SBOX=[],SUB_MIX_0=[],SUB_MIX_1=[],SUB_MIX_2=[],SUB_MIX_3=[],INV_SUB_MIX_0=[],INV_SUB_MIX_1=[],INV_SUB_MIX_2=[],INV_SUB_MIX_3=[];!function(){for(var d=[],i=0;i<256;i++)i<128?d[i]=i<<1:d[i]=i<<1^283;for(var x=0,xi=0,i=0;i<256;i++){var sx=xi^xi<<1^xi<<2^xi<<3^xi<<4;sx=sx>>>8^255&sx^99,SBOX[x]=sx,INV_SBOX[sx]=x;var x2=d[x],x4=d[x2],x8=d[x4],t=257*d[sx]^16843008*sx;SUB_MIX_0[x]=t<<24|t>>>8,SUB_MIX_1[x]=t<<16|t>>>16,SUB_MIX_2[x]=t<<8|t>>>24,SUB_MIX_3[x]=t;var t=16843009*x8^65537*x4^257*x2^16843008*x;INV_SUB_MIX_0[sx]=t<<24|t>>>8,INV_SUB_MIX_1[sx]=t<<16|t>>>16,INV_SUB_MIX_2[sx]=t<<8|t>>>24,INV_SUB_MIX_3[sx]=t,x?(x=x2^d[d[d[x8^x2]]],xi^=d[d[xi]]):x=xi=1}}();var RCON=[0,1,2,4,8,16,32,64,128,27,54],AES=C_algo.AES=BlockCipher.extend({_doReset:function(){for(var key=this._key,keyWords=key.words,keySize=key.sigBytes/4,nRounds=this._nRounds=keySize+6,ksRows=4*(nRounds+1),keySchedule=this._keySchedule=[],ksRow=0;ksRow6&&ksRow%keySize==4&&(t=SBOX[t>>>24]<<24|SBOX[t>>>16&255]<<16|SBOX[t>>>8&255]<<8|SBOX[255&t]):(t=t<<8|t>>>24,t=SBOX[t>>>24]<<24|SBOX[t>>>16&255]<<16|SBOX[t>>>8&255]<<8|SBOX[255&t],t^=RCON[ksRow/keySize|0]<<24),keySchedule[ksRow]=keySchedule[ksRow-keySize]^t}for(var invKeySchedule=this._invKeySchedule=[],invKsRow=0;invKsRow>>24]]^INV_SUB_MIX_1[SBOX[t>>>16&255]]^INV_SUB_MIX_2[SBOX[t>>>8&255]]^INV_SUB_MIX_3[SBOX[255&t]]}},encryptBlock:function(M,offset){this._doCryptBlock(M,offset,this._keySchedule,SUB_MIX_0,SUB_MIX_1,SUB_MIX_2,SUB_MIX_3,SBOX)},decryptBlock:function(M,offset){var t=M[offset+1];M[offset+1]=M[offset+3],M[offset+3]=t,this._doCryptBlock(M,offset,this._invKeySchedule,INV_SUB_MIX_0,INV_SUB_MIX_1,INV_SUB_MIX_2,INV_SUB_MIX_3,INV_SBOX);var t=M[offset+1];M[offset+1]=M[offset+3],M[offset+3]=t},_doCryptBlock:function(M,offset,keySchedule,SUB_MIX_0,SUB_MIX_1,SUB_MIX_2,SUB_MIX_3,SBOX){for(var nRounds=this._nRounds,s0=M[offset]^keySchedule[0],s1=M[offset+1]^keySchedule[1],s2=M[offset+2]^keySchedule[2],s3=M[offset+3]^keySchedule[3],ksRow=4,round=1;round>>24]^SUB_MIX_1[s1>>>16&255]^SUB_MIX_2[s2>>>8&255]^SUB_MIX_3[255&s3]^keySchedule[ksRow++],t1=SUB_MIX_0[s1>>>24]^SUB_MIX_1[s2>>>16&255]^SUB_MIX_2[s3>>>8&255]^SUB_MIX_3[255&s0]^keySchedule[ksRow++],t2=SUB_MIX_0[s2>>>24]^SUB_MIX_1[s3>>>16&255]^SUB_MIX_2[s0>>>8&255]^SUB_MIX_3[255&s1]^keySchedule[ksRow++],t3=SUB_MIX_0[s3>>>24]^SUB_MIX_1[s0>>>16&255]^SUB_MIX_2[s1>>>8&255]^SUB_MIX_3[255&s2]^keySchedule[ksRow++];s0=t0,s1=t1,s2=t2,s3=t3}var t0=(SBOX[s0>>>24]<<24|SBOX[s1>>>16&255]<<16|SBOX[s2>>>8&255]<<8|SBOX[255&s3])^keySchedule[ksRow++],t1=(SBOX[s1>>>24]<<24|SBOX[s2>>>16&255]<<16|SBOX[s3>>>8&255]<<8|SBOX[255&s0])^keySchedule[ksRow++],t2=(SBOX[s2>>>24]<<24|SBOX[s3>>>16&255]<<16|SBOX[s0>>>8&255]<<8|SBOX[255&s1])^keySchedule[ksRow++],t3=(SBOX[s3>>>24]<<24|SBOX[s0>>>16&255]<<16|SBOX[s1>>>8&255]<<8|SBOX[255&s2])^keySchedule[ksRow++];M[offset]=t0,M[offset+1]=t1,M[offset+2]=t2,M[offset+3]=t3},keySize:8});C.AES=BlockCipher._createHelper(AES)}(),_.extend(BI,{aesEncrypt:function(text,key){key=CryptoJS.enc.Utf8.parse(key);var cipher=CryptoJS.AES.encrypt(text,key,{mode:CryptoJS.mode.ECB,padding:CryptoJS.pad.Pkcs7}),base64Cipher=cipher.ciphertext.toString(CryptoJS.enc.Base64);return base64Cipher}})}(),!function(){function aspect(type){return function(target,methodName,advice){var exist=target[methodName],dispatcher;exist&&exist.target==target||(dispatcher=target[methodName]=function(){for(var beforeArr=dispatcher.before,args=arguments,next,l=beforeArr.length;l--;){if(next=beforeArr[l].advice.apply(this,args),next===!1)return!1;args=next||args}for(var rs=dispatcher.method.apply(this,args),afterArr=dispatcher.after,i=0,ii=afterArr.length;i127&&c<2048?(utftext+=String.fromCharCode(c>>6|192),utftext+=String.fromCharCode(63&c|128)):(utftext+=String.fromCharCode(c>>12|224),utftext+=String.fromCharCode(c>>6&63|128),utftext+=String.fromCharCode(63&c|128))}return utftext},_utf8_decode=function(utftext){for(var string="",i=0,c=0,c3=0,c2=0;i191&&c<224?(c2=utftext.charCodeAt(i+1),string+=String.fromCharCode((31&c)<<6|63&c2),i+=2):(c2=utftext.charCodeAt(i+1),c3=utftext.charCodeAt(i+2),string+=String.fromCharCode((15&c)<<12|(63&c2)<<6|63&c3),i+=3);return string};_.extend(BI,{encode:function(input){var output="",chr1,chr2,chr3,enc1,enc2,enc3,enc4,i=0;for(input=_utf8_encode(input);i>2,enc2=(3&chr1)<<4|chr2>>4,enc3=(15&chr2)<<2|chr3>>6,enc4=63&chr3,isNaN(chr2)?enc3=enc4=64:isNaN(chr3)&&(enc4=64),output=output+_keyStr.charAt(enc1)+_keyStr.charAt(enc2)+_keyStr.charAt(enc3)+_keyStr.charAt(enc4);return output},decode:function(input){var output="",chr1,chr2,chr3,enc1,enc2,enc3,enc4,i=0;for(input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");i>4,chr2=(15&enc2)<<4|enc3>>2,chr3=(3&enc3)<<6|enc4,output+=String.fromCharCode(chr1),64!=enc3&&(output+=String.fromCharCode(chr2)),64!=enc4&&(output+=String.fromCharCode(chr3));return output=_utf8_decode(output)}})}(),BI.Cache={_prefix:"bi",setUsername:function(username){localStorage.setItem(BI.Cache._prefix+".username",(username+""||"").toUpperCase())},getUsername:function(){return localStorage.getItem(BI.Cache._prefix+".username")||""},_getKeyPrefix:function(){return BI.Cache.getUsername()+"."+BI.Cache._prefix+"."},_generateKey:function(key){return BI.Cache._getKeyPrefix()+(key||"")},getItem:function(key){return localStorage.getItem(BI.Cache._generateKey(key))},setItem:function(key,value){localStorage.setItem(BI.Cache._generateKey(key),value)},removeItem:function(key){localStorage.removeItem(BI.Cache._generateKey(key))},clear:function(){for(var i=localStorage.length;i>=0;i--){var key=localStorage.key(i);key&&0===key.indexOf(BI.Cache._getKeyPrefix())&&localStorage.removeItem(key)}},keys:function(){for(var result=[],i=localStorage.length;i>=0;i--){var key=localStorage.key(i);if(key){var prefix=BI.Cache._getKeyPrefix();0===key.indexOf(prefix)&&(result[result.length]=key.substring(prefix.length))}}return result},addCookie:function(name,value,path,expiresHours){var cookieString=name+"="+escape(value);if(expiresHours&&expiresHours>0){var date=new Date;date.setTime(BI.getTime()+3600*expiresHours*1e3),cookieString=cookieString+"; expires="+date.toGMTString()}path&&(cookieString=cookieString+"; path="+path),document.cookie=cookieString},getCookie:function(name){var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");return(arr=document.cookie.match(reg))?unescape(arr[2]):null},deleteCookie:function(name,path){var date=new Date;date.setTime(BI.getTime()-1e4);var cookieString=name+"=v; expires="+date.toGMTString();path&&(cookieString=cookieString+"; path="+path),document.cookie=cookieString}},BI.CellSizeAndPositionManager=function(cellCount,cellSizeGetter,estimatedCellSize){this._cellSizeGetter=cellSizeGetter,this._cellCount=cellCount,this._estimatedCellSize=estimatedCellSize,this._cellSizeAndPositionData={},this._lastMeasuredIndex=-1},BI.CellSizeAndPositionManager.prototype={constructor:BI.CellSizeAndPositionManager,configure:function(cellCount,estimatedCellSize){this._cellCount=cellCount,this._estimatedCellSize=estimatedCellSize},getCellCount:function(){return this._cellCount},getEstimatedCellSize:function(){return this._estimatedCellSize},getLastMeasuredIndex:function(){return this._lastMeasuredIndex},getSizeAndPositionOfCell:function(index){if(!(index<0||index>=this._cellCount)){if(index>this._lastMeasuredIndex){for(var lastMeasuredCellSizeAndPosition=this.getSizeAndPositionOfLastMeasuredCell(),offset=lastMeasuredCellSizeAndPosition.offset+lastMeasuredCellSizeAndPosition.size,i=this._lastMeasuredIndex+1;i<=index;i++){var size=this._cellSizeGetter(i);null==size||isNaN(size)||(this._cellSizeAndPositionData[i]={offset:offset,size:size},offset+=size)}this._lastMeasuredIndex=index}return this._cellSizeAndPositionData[index]}},getSizeAndPositionOfLastMeasuredCell:function(){return this._lastMeasuredIndex>=0?this._cellSizeAndPositionData[this._lastMeasuredIndex]:{offset:0,size:0}},getTotalSize:function(){var lastMeasuredCellSizeAndPosition=this.getSizeAndPositionOfLastMeasuredCell();return lastMeasuredCellSizeAndPosition.offset+lastMeasuredCellSizeAndPosition.size+(this._cellCount-this._lastMeasuredIndex-1)*this._estimatedCellSize},getUpdatedOffsetForIndex:function(align,containerSize,currentOffset,targetIndex){var datum=this.getSizeAndPositionOfCell(targetIndex),maxOffset=datum.offset,minOffset=maxOffset-containerSize+datum.size,idealOffset;switch(align){case"start":idealOffset=maxOffset;break;case"end":idealOffset=minOffset;break;case"center":idealOffset=maxOffset-(containerSize-datum.size)/2;break;default:idealOffset=Math.max(minOffset,Math.min(maxOffset,currentOffset))}var totalSize=this.getTotalSize();return Math.max(0,Math.min(totalSize-containerSize,idealOffset))},getVisibleCellRange:function(containerSize,offset){var totalSize=this.getTotalSize();if(0===totalSize)return{};var maxOffset=offset+containerSize,start=this._findNearestCell(offset),datum=this.getSizeAndPositionOfCell(start);offset=datum.offset+datum.size;for(var stop=start;offsetoffset&&(high=middle-1)}if(low>0)return low-1},_exponentialSearch:function(index,offset){for(var interval=1;index=offset?this._binarySearch(lastMeasuredIndex,0,offset):this._exponentialSearch(lastMeasuredIndex,offset)}}},BI.ScalingCellSizeAndPositionManager=function(cellCount,cellSizeGetter,estimatedCellSize,maxScrollSize){this._cellSizeAndPositionManager=new BI.CellSizeAndPositionManager(cellCount,cellSizeGetter,estimatedCellSize),this._maxScrollSize=maxScrollSize||1e7},BI.ScalingCellSizeAndPositionManager.prototype={constructor:BI.ScalingCellSizeAndPositionManager,configure:function(){this._cellSizeAndPositionManager.configure.apply(this._cellSizeAndPositionManager,arguments)},getCellCount:function(){return this._cellSizeAndPositionManager.getCellCount()},getEstimatedCellSize:function(){return this._cellSizeAndPositionManager.getEstimatedCellSize()},getLastMeasuredIndex:function(){return this._cellSizeAndPositionManager.getLastMeasuredIndex()},getOffsetAdjustment:function(containerSize,offset){var totalSize=this._cellSizeAndPositionManager.getTotalSize(),safeTotalSize=this.getTotalSize(),offsetPercentage=this._getOffsetPercentage(containerSize,offset,safeTotalSize);return Math.round(offsetPercentage*(safeTotalSize-totalSize))},getSizeAndPositionOfCell:function(index){return this._cellSizeAndPositionManager.getSizeAndPositionOfCell(index)},getSizeAndPositionOfLastMeasuredCell:function(){return this._cellSizeAndPositionManager.getSizeAndPositionOfLastMeasuredCell()},getTotalSize:function(){return Math.min(this._maxScrollSize,this._cellSizeAndPositionManager.getTotalSize())},getUpdatedOffsetForIndex:function(align,containerSize,currentOffset,targetIndex){currentOffset=this._safeOffsetToOffset(containerSize,currentOffset);var offset=this._cellSizeAndPositionManager.getUpdatedOffsetForIndex(align,containerSize,currentOffset,targetIndex);return this._offsetToSafeOffset(containerSize,offset)},getVisibleCellRange:function(containerSize,offset){return offset=this._safeOffsetToOffset(containerSize,offset),this._cellSizeAndPositionManager.getVisibleCellRange(containerSize,offset)},resetCell:function(index){this._cellSizeAndPositionManager.resetCell(index)},_getOffsetPercentage:function(containerSize,offset,totalSize){return totalSize<=containerSize?0:offset/(totalSize-containerSize)},_offsetToSafeOffset:function(containerSize,offset){var totalSize=this._cellSizeAndPositionManager.getTotalSize(),safeTotalSize=this.getTotalSize();if(totalSize===safeTotalSize)return offset;var offsetPercentage=this._getOffsetPercentage(containerSize,offset,totalSize);return Math.round(offsetPercentage*(safeTotalSize-containerSize))},_safeOffsetToOffset:function(containerSize,offset){var totalSize=this._cellSizeAndPositionManager.getTotalSize(),safeTotalSize=this.getTotalSize();if(totalSize===safeTotalSize)return offset;var offsetPercentage=this._getOffsetPercentage(containerSize,offset,safeTotalSize);return Math.round(offsetPercentage*(totalSize-containerSize))}},!function(){var _ChineseFirstPY="YDYQSXMWZSSXJBYMGCCZQPSSQBYCDSCDQLDYLYBSSJGYZZJJFKCCLZDHWDWZJLJPFYYNWJJTMYHZWZHFLZPPQHGSCYYYNJQYXXGJHHSDSJNKKTMOMLCRXYPSNQSECCQZGGLLYJLMYZZSECYKYYHQWJSSGGYXYZYJWWKDJHYCHMYXJTLXJYQBYXZLDWRDJRWYSRLDZJPCBZJJBRCFTLECZSTZFXXZHTRQHYBDLYCZSSYMMRFMYQZPWWJJYFCRWFDFZQPYDDWYXKYJAWJFFXYPSFTZYHHYZYSWCJYXSCLCXXWZZXNBGNNXBXLZSZSBSGPYSYZDHMDZBQBZCWDZZYYTZHBTSYYBZGNTNXQYWQSKBPHHLXGYBFMJEBJHHGQTJCYSXSTKZHLYCKGLYSMZXYALMELDCCXGZYRJXSDLTYZCQKCNNJWHJTZZCQLJSTSTBNXBTYXCEQXGKWJYFLZQLYHYXSPSFXLMPBYSXXXYDJCZYLLLSJXFHJXPJBTFFYABYXBHZZBJYZLWLCZGGBTSSMDTJZXPTHYQTGLJSCQFZKJZJQNLZWLSLHDZBWJNCJZYZSQQYCQYRZCJJWYBRTWPYFTWEXCSKDZCTBZHYZZYYJXZCFFZZMJYXXSDZZOTTBZLQWFCKSZSXFYRLNYJMBDTHJXSQQCCSBXYYTSYFBXDZTGBCNSLCYZZPSAZYZZSCJCSHZQYDXLBPJLLMQXTYDZXSQJTZPXLCGLQTZWJBHCTSYJSFXYEJJTLBGXSXJMYJQQPFZASYJNTYDJXKJCDJSZCBARTDCLYJQMWNQNCLLLKBYBZZSYHQQLTWLCCXTXLLZNTYLNEWYZYXCZXXGRKRMTCNDNJTSYYSSDQDGHSDBJGHRWRQLYBGLXHLGTGXBQJDZPYJSJYJCTMRNYMGRZJCZGJMZMGXMPRYXKJNYMSGMZJYMKMFXMLDTGFBHCJHKYLPFMDXLQJJSMTQGZSJLQDLDGJYCALCMZCSDJLLNXDJFFFFJCZFMZFFPFKHKGDPSXKTACJDHHZDDCRRCFQYJKQCCWJDXHWJLYLLZGCFCQDSMLZPBJJPLSBCJGGDCKKDEZSQCCKJGCGKDJTJDLZYCXKLQSCGJCLTFPCQCZGWPJDQYZJJBYJHSJDZWGFSJGZKQCCZLLPSPKJGQJHZZLJPLGJGJJTHJJYJZCZMLZLYQBGJWMLJKXZDZNJQSYZMLJLLJKYWXMKJLHSKJGBMCLYYMKXJQLBMLLKMDXXKWYXYSLMLPSJQQJQXYXFJTJDXMXXLLCXQBSYJBGWYMBGGBCYXPJYGPEPFGDJGBHBNSQJYZJKJKHXQFGQZKFHYGKHDKLLSDJQXPQYKYBNQSXQNSZSWHBSXWHXWBZZXDMNSJBSBKBBZKLYLXGWXDRWYQZMYWSJQLCJXXJXKJEQXSCYETLZHLYYYSDZPAQYZCMTLSHTZCFYZYXYLJSDCJQAGYSLCQLYYYSHMRQQKLDXZSCSSSYDYCJYSFSJBFRSSZQSBXXPXJYSDRCKGJLGDKZJZBDKTCSYQPYHSTCLDJDHMXMCGXYZHJDDTMHLTXZXYLYMOHYJCLTYFBQQXPFBDFHHTKSQHZYYWCNXXCRWHOWGYJLEGWDQCWGFJYCSNTMYTOLBYGWQWESJPWNMLRYDZSZTXYQPZGCWXHNGPYXSHMYQJXZTDPPBFYHZHTJYFDZWKGKZBLDNTSXHQEEGZZYLZMMZYJZGXZXKHKSTXNXXWYLYAPSTHXDWHZYMPXAGKYDXBHNHXKDPJNMYHYLPMGOCSLNZHKXXLPZZLBMLSFBHHGYGYYGGBHSCYAQTYWLXTZQCEZYDQDQMMHTKLLSZHLSJZWFYHQSWSCWLQAZYNYTLSXTHAZNKZZSZZLAXXZWWCTGQQTDDYZTCCHYQZFLXPSLZYGPZSZNGLNDQTBDLXGTCTAJDKYWNSYZLJHHZZCWNYYZYWMHYCHHYXHJKZWSXHZYXLYSKQYSPSLYZWMYPPKBYGLKZHTYXAXQSYSHXASMCHKDSCRSWJPWXSGZJLWWSCHSJHSQNHCSEGNDAQTBAALZZMSSTDQJCJKTSCJAXPLGGXHHGXXZCXPDMMHLDGTYBYSJMXHMRCPXXJZCKZXSHMLQXXTTHXWZFKHCCZDYTCJYXQHLXDHYPJQXYLSYYDZOZJNYXQEZYSQYAYXWYPDGXDDXSPPYZNDLTWRHXYDXZZJHTCXMCZLHPYYYYMHZLLHNXMYLLLMDCPPXHMXDKYCYRDLTXJCHHZZXZLCCLYLNZSHZJZZLNNRLWHYQSNJHXYNTTTKYJPYCHHYEGKCTTWLGQRLGGTGTYGYHPYHYLQYQGCWYQKPYYYTTTTLHYHLLTYTTSPLKYZXGZWGPYDSSZZDQXSKCQNMJJZZBXYQMJRTFFBTKHZKBXLJJKDXJTLBWFZPPTKQTZTGPDGNTPJYFALQMKGXBDCLZFHZCLLLLADPMXDJHLCCLGYHDZFGYDDGCYYFGYDXKSSEBDHYKDKDKHNAXXYBPBYYHXZQGAFFQYJXDMLJCSQZLLPCHBSXGJYNDYBYQSPZWJLZKSDDTACTBXZDYZYPJZQSJNKKTKNJDJGYYPGTLFYQKASDNTCYHBLWDZHBBYDWJRYGKZYHEYYFJMSDTYFZJJHGCXPLXHLDWXXJKYTCYKSSSMTWCTTQZLPBSZDZWZXGZAGYKTYWXLHLSPBCLLOQMMZSSLCMBJCSZZKYDCZJGQQDSMCYTZQQLWZQZXSSFPTTFQMDDZDSHDTDWFHTDYZJYQJQKYPBDJYYXTLJHDRQXXXHAYDHRJLKLYTWHLLRLLRCXYLBWSRSZZSYMKZZHHKYHXKSMDSYDYCJPBZBSQLFCXXXNXKXWYWSDZYQOGGQMMYHCDZTTFJYYBGSTTTYBYKJDHKYXBELHTYPJQNFXFDYKZHQKZBYJTZBXHFDXKDASWTAWAJLDYJSFHBLDNNTNQJTJNCHXFJSRFWHZFMDRYJYJWZPDJKZYJYMPCYZNYNXFBYTFYFWYGDBNZZZDNYTXZEMMQBSQEHXFZMBMFLZZSRXYMJGSXWZJSPRYDJSJGXHJJGLJJYNZZJXHGXKYMLPYYYCXYTWQZSWHWLYRJLPXSLSXMFSWWKLCTNXNYNPSJSZHDZEPTXMYYWXYYSYWLXJQZQXZDCLEEELMCPJPCLWBXSQHFWWTFFJTNQJHJQDXHWLBYZNFJLALKYYJLDXHHYCSTYYWNRJYXYWTRMDRQHWQCMFJDYZMHMYYXJWMYZQZXTLMRSPWWCHAQBXYGZYPXYYRRCLMPYMGKSJSZYSRMYJSNXTPLNBAPPYPYLXYYZKYNLDZYJZCZNNLMZHHARQMPGWQTZMXXMLLHGDZXYHXKYXYCJMFFYYHJFSBSSQLXXNDYCANNMTCJCYPRRNYTYQNYYMBMSXNDLYLYSLJRLXYSXQMLLYZLZJJJKYZZCSFBZXXMSTBJGNXYZHLXNMCWSCYZYFZLXBRNNNYLBNRTGZQYSATSWRYHYJZMZDHZGZDWYBSSCSKXSYHYTXXGCQGXZZSHYXJSCRHMKKBXCZJYJYMKQHZJFNBHMQHYSNJNZYBKNQMCLGQHWLZNZSWXKHLJHYYBQLBFCDSXDLDSPFZPSKJYZWZXZDDXJSMMEGJSCSSMGCLXXKYYYLNYPWWWGYDKZJGGGZGGSYCKNJWNJPCXBJJTQTJWDSSPJXZXNZXUMELPXFSXTLLXCLJXJJLJZXCTPSWXLYDHLYQRWHSYCSQYYBYAYWJJJQFWQCQQCJQGXALDBZZYJGKGXPLTZYFXJLTPADKYQHPMATLCPDCKBMTXYBHKLENXDLEEGQDYMSAWHZMLJTWYGXLYQZLJEEYYBQQFFNLYXRDSCTGJGXYYNKLLYQKCCTLHJLQMKKZGCYYGLLLJDZGYDHZWXPYSJBZKDZGYZZHYWYFQYTYZSZYEZZLYMHJJHTSMQWYZLKYYWZCSRKQYTLTDXWCTYJKLWSQZWBDCQYNCJSRSZJLKCDCDTLZZZACQQZZDDXYPLXZBQJYLZLLLQDDZQJYJYJZYXNYYYNYJXKXDAZWYRDLJYYYRJLXLLDYXJCYWYWNQCCLDDNYYYNYCKCZHXXCCLGZQJGKWPPCQQJYSBZZXYJSQPXJPZBSBDSFNSFPZXHDWZTDWPPTFLZZBZDMYYPQJRSDZSQZSQXBDGCPZSWDWCSQZGMDHZXMWWFYBPDGPHTMJTHZSMMBGZMBZJCFZWFZBBZMQCFMBDMCJXLGPNJBBXGYHYYJGPTZGZMQBQTCGYXJXLWZKYDPDYMGCFTPFXYZTZXDZXTGKMTYBBCLBJASKYTSSQYYMSZXFJEWLXLLSZBQJJJAKLYLXLYCCTSXMCWFKKKBSXLLLLJYXTYLTJYYTDPJHNHNNKBYQNFQYYZBYYESSESSGDYHFHWTCJBSDZZTFDMXHCNJZYMQWSRYJDZJQPDQBBSTJGGFBKJBXTGQHNGWJXJGDLLTHZHHYYYYYYSXWTYYYCCBDBPYPZYCCZYJPZYWCBDLFWZCWJDXXHYHLHWZZXJTCZLCDPXUJCZZZLYXJJTXPHFXWPYWXZPTDZZBDZCYHJHMLXBQXSBYLRDTGJRRCTTTHYTCZWMXFYTWWZCWJWXJYWCSKYBZSCCTZQNHXNWXXKHKFHTSWOCCJYBCMPZZYKBNNZPBZHHZDLSYDDYTYFJPXYNGFXBYQXCBHXCPSXTYZDMKYSNXSXLHKMZXLYHDHKWHXXSSKQYHHCJYXGLHZXCSNHEKDTGZXQYPKDHEXTYKCNYMYYYPKQYYYKXZLTHJQTBYQHXBMYHSQCKWWYLLHCYYLNNEQXQWMCFBDCCMLJGGXDQKTLXKGNQCDGZJWYJJLYHHQTTTNWCHMXCXWHWSZJYDJCCDBQCDGDNYXZTHCQRXCBHZTQCBXWGQWYYBXHMBYMYQTYEXMQKYAQYRGYZSLFYKKQHYSSQYSHJGJCNXKZYCXSBXYXHYYLSTYCXQTHYSMGSCPMMGCCCCCMTZTASMGQZJHKLOSQYLSWTMXSYQKDZLJQQYPLSYCZTCQQPBBQJZCLPKHQZYYXXDTDDTSJCXFFLLCHQXMJLWCJCXTSPYCXNDTJSHJWXDQQJSKXYAMYLSJHMLALYKXCYYDMNMDQMXMCZNNCYBZKKYFLMCHCMLHXRCJJHSYLNMTJZGZGYWJXSRXCWJGJQHQZDQJDCJJZKJKGDZQGJJYJYLXZXXCDQHHHEYTMHLFSBDJSYYSHFYSTCZQLPBDRFRZTZYKYWHSZYQKWDQZRKMSYNBCRXQBJYFAZPZZEDZCJYWBCJWHYJBQSZYWRYSZPTDKZPFPBNZTKLQYHBBZPNPPTYZZYBQNYDCPJMMCYCQMCYFZZDCMNLFPBPLNGQJTBTTNJZPZBBZNJKLJQYLNBZQHKSJZNGGQSZZKYXSHPZSNBCGZKDDZQANZHJKDRTLZLSWJLJZLYWTJNDJZJHXYAYNCBGTZCSSQMNJPJYTYSWXZFKWJQTKHTZPLBHSNJZSYZBWZZZZLSYLSBJHDWWQPSLMMFBJDWAQYZTCJTBNNWZXQXCDSLQGDSDPDZHJTQQPSWLYYJZLGYXYZLCTCBJTKTYCZJTQKBSJLGMGZDMCSGPYNJZYQYYKNXRPWSZXMTNCSZZYXYBYHYZAXYWQCJTLLCKJJTJHGDXDXYQYZZBYWDLWQCGLZGJGQRQZCZSSBCRPCSKYDZNXJSQGXSSJMYDNSTZTPBDLTKZWXQWQTZEXNQCZGWEZKSSBYBRTSSSLCCGBPSZQSZLCCGLLLZXHZQTHCZMQGYZQZNMCOCSZJMMZSQPJYGQLJYJPPLDXRGZYXCCSXHSHGTZNLZWZKJCXTCFCJXLBMQBCZZWPQDNHXLJCTHYZLGYLNLSZZPCXDSCQQHJQKSXZPBAJYEMSMJTZDXLCJYRYYNWJBNGZZTMJXLTBSLYRZPYLSSCNXPHLLHYLLQQZQLXYMRSYCXZLMMCZLTZSDWTJJLLNZGGQXPFSKYGYGHBFZPDKMWGHCXMSGDXJMCJZDYCABXJDLNBCDQYGSKYDQTXDJJYXMSZQAZDZFSLQXYJSJZYLBTXXWXQQZBJZUFBBLYLWDSLJHXJYZJWTDJCZFQZQZZDZSXZZQLZCDZFJHYSPYMPQZMLPPLFFXJJNZZYLSJEYQZFPFZKSYWJJJHRDJZZXTXXGLGHYDXCSKYSWMMZCWYBAZBJKSHFHJCXMHFQHYXXYZFTSJYZFXYXPZLCHMZMBXHZZSXYFYMNCWDABAZLXKTCSHHXKXJJZJSTHYGXSXYYHHHJWXKZXSSBZZWHHHCWTZZZPJXSNXQQJGZYZYWLLCWXZFXXYXYHXMKYYSWSQMNLNAYCYSPMJKHWCQHYLAJJMZXHMMCNZHBHXCLXTJPLTXYJHDYYLTTXFSZHYXXSJBJYAYRSMXYPLCKDUYHLXRLNLLSTYZYYQYGYHHSCCSMZCTZQXKYQFPYYRPFFLKQUNTSZLLZMWWTCQQYZWTLLMLMPWMBZSSTZRBPDDTLQJJBXZCSRZQQYGWCSXFWZLXCCRSZDZMCYGGDZQSGTJSWLJMYMMZYHFBJDGYXCCPSHXNZCSBSJYJGJMPPWAFFYFNXHYZXZYLREMZGZCYZSSZDLLJCSQFNXZKPTXZGXJJGFMYYYSNBTYLBNLHPFZDCYFBMGQRRSSSZXYSGTZRNYDZZCDGPJAFJFZKNZBLCZSZPSGCYCJSZLMLRSZBZZLDLSLLYSXSQZQLYXZLSKKBRXBRBZCYCXZZZEEYFGKLZLYYHGZSGZLFJHGTGWKRAAJYZKZQTSSHJJXDCYZUYJLZYRZDQQHGJZXSSZBYKJPBFRTJXLLFQWJHYLQTYMBLPZDXTZYGBDHZZRBGXHWNJTJXLKSCFSMWLSDQYSJTXKZSCFWJLBXFTZLLJZLLQBLSQMQQCGCZFPBPHZCZJLPYYGGDTGWDCFCZQYYYQYSSCLXZSKLZZZGFFCQNWGLHQYZJJCZLQZZYJPJZZBPDCCMHJGXDQDGDLZQMFGPSYTSDYFWWDJZJYSXYYCZCYHZWPBYKXRYLYBHKJKSFXTZJMMCKHLLTNYYMSYXYZPYJQYCSYCWMTJJKQYRHLLQXPSGTLYYCLJSCPXJYZFNMLRGJJTYZBXYZMSJYJHHFZQMSYXRSZCWTLRTQZSSTKXGQKGSPTGCZNJSJCQCXHMXGGZTQYDJKZDLBZSXJLHYQGGGTHQSZPYHJHHGYYGKGGCWJZZYLCZLXQSFTGZSLLLMLJSKCTBLLZZSZMMNYTPZSXQHJCJYQXYZXZQZCPSHKZZYSXCDFGMWQRLLQXRFZTLYSTCTMJCXJJXHJNXTNRZTZFQYHQGLLGCXSZSJDJLJCYDSJTLNYXHSZXCGJZYQPYLFHDJSBPCCZHJJJQZJQDYBSSLLCMYTTMQTBHJQNNYGKYRQYQMZGCJKPDCGMYZHQLLSLLCLMHOLZGDYYFZSLJCQZLYLZQJESHNYLLJXGJXLYSYYYXNBZLJSSZCQQCJYLLZLTJYLLZLLBNYLGQCHXYYXOXCXQKYJXXXYKLXSXXYQXCYKQXQCSGYXXYQXYGYTQOHXHXPYXXXULCYEYCHZZCBWQBBWJQZSCSZSSLZYLKDESJZWMYMCYTSDSXXSCJPQQSQYLYYZYCMDJDZYWCBTJSYDJKCYDDJLBDJJSODZYSYXQQYXDHHGQQYQHDYXWGMMMAJDYBBBPPBCMUUPLJZSMTXERXJMHQNUTPJDCBSSMSSSTKJTSSMMTRCPLZSZMLQDSDMJMQPNQDXCFYNBFSDQXYXHYAYKQYDDLQYYYSSZBYDSLNTFQTZQPZMCHDHCZCWFDXTMYQSPHQYYXSRGJCWTJTZZQMGWJJTJHTQJBBHWZPXXHYQFXXQYWYYHYSCDYDHHQMNMTMWCPBSZPPZZGLMZFOLLCFWHMMSJZTTDHZZYFFYTZZGZYSKYJXQYJZQBHMBZZLYGHGFMSHPZFZSNCLPBQSNJXZSLXXFPMTYJYGBXLLDLXPZJYZJYHHZCYWHJYLSJEXFSZZYWXKZJLUYDTMLYMQJPWXYHXSKTQJEZRPXXZHHMHWQPWQLYJJQJJZSZCPHJLCHHNXJLQWZJHBMZYXBDHHYPZLHLHLGFWLCHYYTLHJXCJMSCPXSTKPNHQXSRTYXXTESYJCTLSSLSTDLLLWWYHDHRJZSFGXTSYCZYNYHTDHWJSLHTZDQDJZXXQHGYLTZPHCSQFCLNJTCLZPFSTPDYNYLGMJLLYCQHYSSHCHYLHQYQTMZYPBYWRFQYKQSYSLZDQJMPXYYSSRHZJNYWTQDFZBWWTWWRXCWHGYHXMKMYYYQMSMZHNGCEPMLQQMTCWCTMMPXJPJJHFXYYZSXZHTYBMSTSYJTTQQQYYLHYNPYQZLCYZHZWSMYLKFJXLWGXYPJYTYSYXYMZCKTTWLKSMZSYLMPWLZWXWQZSSAQSYXYRHSSNTSRAPXCPWCMGDXHXZDZYFJHGZTTSBJHGYZSZYSMYCLLLXBTYXHBBZJKSSDMALXHYCFYGMQYPJYCQXJLLLJGSLZGQLYCJCCZOTYXMTMTTLLWTGPXYMZMKLPSZZZXHKQYSXCTYJZYHXSHYXZKXLZWPSQPYHJWPJPWXQQYLXSDHMRSLZZYZWTTCYXYSZZSHBSCCSTPLWSSCJCHNLCGCHSSPHYLHFHHXJSXYLLNYLSZDHZXYLSXLWZYKCLDYAXZCMDDYSPJTQJZLNWQPSSSWCTSTSZLBLNXSMNYYMJQBQHRZWTYYDCHQLXKPZWBGQYBKFCMZWPZLLYYLSZYDWHXPSBCMLJBSCGBHXLQHYRLJXYSWXWXZSLDFHLSLYNJLZYFLYJYCDRJLFSYZFSLLCQYQFGJYHYXZLYLMSTDJCYHBZLLNWLXXYGYYHSMGDHXXHHLZZJZXCZZZCYQZFNGWPYLCPKPYYPMCLQKDGXZGGWQBDXZZKZFBXXLZXJTPJPTTBYTSZZDWSLCHZHSLTYXHQLHYXXXYYZYSWTXZKHLXZXZPYHGCHKCFSYHUTJRLXFJXPTZTWHPLYXFCRHXSHXKYXXYHZQDXQWULHYHMJTBFLKHTXCWHJFWJCFPQRYQXCYYYQYGRPYWSGSUNGWCHKZDXYFLXXHJJBYZWTSXXNCYJJYMSWZJQRMHXZWFQSYLZJZGBHYNSLBGTTCSYBYXXWXYHXYYXNSQYXMQYWRGYQLXBBZLJSYLPSYTJZYHYZAWLRORJMKSCZJXXXYXCHDYXRYXXJDTSQFXLYLTSFFYXLMTYJMJUYYYXLTZCSXQZQHZXLYYXZHDNBRXXXJCTYHLBRLMBRLLAXKYLLLJLYXXLYCRYLCJTGJCMTLZLLCYZZPZPCYAWHJJFYBDYYZSMPCKZDQYQPBPCJPDCYZMDPBCYYDYCNNPLMTMLRMFMMGWYZBSJGYGSMZQQQZTXMKQWGXLLPJGZBQCDJJJFPKJKCXBLJMSWMDTQJXLDLPPBXCWRCQFBFQJCZAHZGMYKPHYYHZYKNDKZMBPJYXPXYHLFPNYYGXJDBKXNXHJMZJXSTRSTLDXSKZYSYBZXJLXYSLBZYSLHXJPFXPQNBYLLJQKYGZMCYZZYMCCSLCLHZFWFWYXZMWSXTYNXJHPYYMCYSPMHYSMYDYSHQYZCHMJJMZCAAGCFJBBHPLYZYLXXSDJGXDHKXXTXXNBHRMLYJSLTXMRHNLXQJXYZLLYSWQGDLBJHDCGJYQYCMHWFMJYBMBYJYJWYMDPWHXQLDYGPDFXXBCGJSPCKRSSYZJMSLBZZJFLJJJLGXZGYXYXLSZQYXBEXYXHGCXBPLDYHWETTWWCJMBTXCHXYQXLLXFLYXLLJLSSFWDPZSMYJCLMWYTCZPCHQEKCQBWLCQYDPLQPPQZQFJQDJHYMMCXTXDRMJWRHXCJZYLQXDYYNHYYHRSLSRSYWWZJYMTLTLLGTQCJZYABTCKZCJYCCQLJZQXALMZYHYWLWDXZXQDLLQSHGPJFJLJHJABCQZDJGTKHSSTCYJLPSWZLXZXRWGLDLZRLZXTGSLLLLZLYXXWGDZYGBDPHZPBRLWSXQBPFDWOFMWHLYPCBJCCLDMBZPBZZLCYQXLDOMZBLZWPDWYYGDSTTHCSQSCCRSSSYSLFYBFNTYJSZDFNDPDHDZZMBBLSLCMYFFGTJJQWFTMTPJWFNLBZCMMJTGBDZLQLPYFHYYMJYLSDCHDZJWJCCTLJCLDTLJJCPDDSQDSSZYBNDBJLGGJZXSXNLYCYBJXQYCBYLZCFZPPGKCXZDZFZTJJFJSJXZBNZYJQTTYJYHTYCZHYMDJXTTMPXSPLZCDWSLSHXYPZGTFMLCJTYCBPMGDKWYCYZCDSZZYHFLYCTYGWHKJYYLSJCXGYWJCBLLCSNDDBTZBSCLYZCZZSSQDLLMQYYHFSLQLLXFTYHABXGWNYWYYPLLSDLDLLBJCYXJZMLHLJDXYYQYTDLLLBUGBFDFBBQJZZMDPJHGCLGMJJPGAEHHBWCQXAXHHHZCHXYPHJAXHLPHJPGPZJQCQZGJJZZUZDMQYYBZZPHYHYBWHAZYJHYKFGDPFQSDLZMLJXKXGALXZDAGLMDGXMWZQYXXDXXPFDMMSSYMPFMDMMKXKSYZYSHDZKXSYSMMZZZMSYDNZZCZXFPLSTMZDNMXCKJMZTYYMZMZZMSXHHDCZJEMXXKLJSTLWLSQLYJZLLZJSSDPPMHNLZJCZYHMXXHGZCJMDHXTKGRMXFWMCGMWKDTKSXQMMMFZZYDKMSCLCMPCGMHSPXQPZDSSLCXKYXTWLWJYAHZJGZQMCSNXYYMMPMLKJXMHLMLQMXCTKZMJQYSZJSYSZHSYJZJCDAJZYBSDQJZGWZQQXFKDMSDJLFWEHKZQKJPEYPZYSZCDWYJFFMZZYLTTDZZEFMZLBNPPLPLPEPSZALLTYLKCKQZKGENQLWAGYXYDPXLHSXQQWQCQXQCLHYXXMLYCCWLYMQYSKGCHLCJNSZKPYZKCQZQLJPDMDZHLASXLBYDWQLWDNBQCRYDDZTJYBKBWSZDXDTNPJDTCTQDFXQQMGNXECLTTBKPWSLCTYQLPWYZZKLPYGZCQQPLLKCCYLPQMZCZQCLJSLQZDJXLDDHPZQDLJJXZQDXYZQKZLJCYQDYJPPYPQYKJYRMPCBYMCXKLLZLLFQPYLLLMBSGLCYSSLRSYSQTMXYXZQZFDZUYSYZTFFMZZSMZQHZSSCCMLYXWTPZGXZJGZGSJSGKDDHTQGGZLLBJDZLCBCHYXYZHZFYWXYZYMSDBZZYJGTSMTFXQYXQSTDGSLNXDLRYZZLRYYLXQHTXSRTZNGZXBNQQZFMYKMZJBZYMKBPNLYZPBLMCNQYZZZSJZHJCTZKHYZZJRDYZHNPXGLFZTLKGJTCTSSYLLGZRZBBQZZKLPKLCZYSSUYXBJFPNJZZXCDWXZYJXZZDJJKGGRSRJKMSMZJLSJYWQSKYHQJSXPJZZZLSNSHRNYPZTWCHKLPSRZLZXYJQXQKYSJYCZTLQZYBBYBWZPQDWWYZCYTJCJXCKCWDKKZXSGKDZXWWYYJQYYTCYTDLLXWKCZKKLCCLZCQQDZLQLCSFQCHQHSFSMQZZLNBJJZBSJHTSZDYSJQJPDLZCDCWJKJZZLPYCGMZWDJJBSJQZSYZYHHXJPBJYDSSXDZNCGLQMBTSFSBPDZDLZNFGFJGFSMPXJQLMBLGQCYYXBQKDJJQYRFKZTJDHCZKLBSDZCFJTPLLJGXHYXZCSSZZXSTJYGKGCKGYOQXJPLZPBPGTGYJZGHZQZZLBJLSQFZGKQQJZGYCZBZQTLDXRJXBSXXPZXHYZYCLWDXJJHXMFDZPFZHQHQMQGKSLYHTYCGFRZGNQXCLPDLBZCSCZQLLJBLHBZCYPZZPPDYMZZSGYHCKCPZJGSLJLNSCDSLDLXBMSTLDDFJMKDJDHZLZXLSZQPQPGJLLYBDSZGQLBZLSLKYYHZTTNTJYQTZZPSZQZTLLJTYYLLQLLQYZQLBDZLSLYYZYMDFSZSNHLXZNCZQZPBWSKRFBSYZMTHBLGJPMCZZLSTLXSHTCSYZLZBLFEQHLXFLCJLYLJQCBZLZJHHSSTBRMHXZHJZCLXFNBGXGTQJCZTMSFZKJMSSNXLJKBHSJXNTNLZDNTLMSJXGZJYJCZXYJYJWRWWQNZTNFJSZPZSHZJFYRDJSFSZJZBJFZQZZHZLXFYSBZQLZSGYFTZDCSZXZJBQMSZKJRHYJZCKMJKHCHGTXKXQGLXPXFXTRTYLXJXHDTSJXHJZJXZWZLCQSBTXWXGXTXXHXFTSDKFJHZYJFJXRZSDLLLTQSQQZQWZXSYQTWGWBZCGZLLYZBCLMQQTZHZXZXLJFRMYZFLXYSQXXJKXRMQDZDMMYYBSQBHGZMWFWXGMXLZPYYTGZYCCDXYZXYWGSYJYZNBHPZJSQSYXSXRTFYZGRHZTXSZZTHCBFCLSYXZLZQMZLMPLMXZJXSFLBYZMYQHXJSXRXSQZZZSSLYFRCZJRCRXHHZXQYDYHXSJJHZCXZBTYNSYSXJBQLPXZQPYMLXZKYXLXCJLCYSXXZZLXDLLLJJYHZXGYJWKJRWYHCPSGNRZLFZWFZZNSXGXFLZSXZZZBFCSYJDBRJKRDHHGXJLJJTGXJXXSTJTJXLYXQFCSGSWMSBCTLQZZWLZZKXJMLTMJYHSDDBXGZHDLBMYJFRZFSGCLYJBPMLYSMSXLSZJQQHJZFXGFQFQBPXZGYYQXGZTCQWYLTLGWSGWHRLFSFGZJMGMGBGTJFSYZZGZYZAFLSSPMLPFLCWBJZCLJJMZLPJJLYMQDMYYYFBGYGYZMLYZDXQYXRQQQHSYYYQXYLJTYXFSFSLLGNQCYHYCWFHCCCFXPYLYPLLZYXXXXXKQHHXSHJZCFZSCZJXCPZWHHHHHAPYLQALPQAFYHXDYLUKMZQGGGDDESRNNZLTZGCHYPPYSQJJHCLLJTOLNJPZLJLHYMHEYDYDSQYCDDHGZUNDZCLZYZLLZNTNYZGSLHSLPJJBDGWXPCDUTJCKLKCLWKLLCASSTKZZDNQNTTLYYZSSYSSZZRYLJQKCQDHHCRXRZYDGRGCWCGZQFFFPPJFZYNAKRGYWYQPQXXFKJTSZZXSWZDDFBBXTBGTZKZNPZZPZXZPJSZBMQHKCYXYLDKLJNYPKYGHGDZJXXEAHPNZKZTZCMXCXMMJXNKSZQNMNLWBWWXJKYHCPSTMCSQTZJYXTPCTPDTNNPGLLLZSJLSPBLPLQHDTNJNLYYRSZFFJFQWDPHZDWMRZCCLODAXNSSNYZRESTYJWJYJDBCFXNMWTTBYLWSTSZGYBLJPXGLBOCLHPCBJLTMXZLJYLZXCLTPNCLCKXTPZJSWCYXSFYSZDKNTLBYJCYJLLSTGQCBXRYZXBXKLYLHZLQZLNZCXWJZLJZJNCJHXMNZZGJZZXTZJXYCYYCXXJYYXJJXSSSJSTSSTTPPGQTCSXWZDCSYFPTFBFHFBBLZJCLZZDBXGCXLQPXKFZFLSYLTUWBMQJHSZBMDDBCYSCCLDXYCDDQLYJJWMQLLCSGLJJSYFPYYCCYLTJANTJJPWYCMMGQYYSXDXQMZHSZXPFTWWZQSWQRFKJLZJQQYFBRXJHHFWJJZYQAZMYFRHCYYBYQWLPEXCCZSTYRLTTDMQLYKMBBGMYYJPRKZNPBSXYXBHYZDJDNGHPMFSGMWFZMFQMMBCMZZCJJLCNUXYQLMLRYGQZCYXZLWJGCJCGGMCJNFYZZJHYCPRRCMTZQZXHFQGTJXCCJEAQCRJYHPLQLSZDJRBCQHQDYRHYLYXJSYMHZYDWLDFRYHBPYDTSSCNWBXGLPZMLZZTQSSCPJMXXYCSJYTYCGHYCJWYRXXLFEMWJNMKLLSWTXHYYYNCMMCWJDQDJZGLLJWJRKHPZGGFLCCSCZMCBLTBHBQJXQDSPDJZZGHGLFQYWBZYZJLTSTDHQHCTCBCHFLQMPWDSHYYTQWCNZZJTLBYMBPDYYYXSQKXWYYFLXXNCWCXYPMAELYKKJMZZZBRXYYQJFLJPFHHHYTZZXSGQQMHSPGDZQWBWPJHZJDYSCQWZKTXXSQLZYYMYSDZGRXCKKUJLWPYSYSCSYZLRMLQSYLJXBCXTLWDQZPCYCYKPPPNSXFYZJJRCEMHSZMSXLXGLRWGCSTLRSXBZGBZGZTCPLUJLSLYLYMTXMTZPALZXPXJTJWTCYYZLBLXBZLQMYLXPGHDSLSSDMXMBDZZSXWHAMLCZCPJMCNHJYSNSYGCHSKQMZZQDLLKABLWJXSFMOCDXJRRLYQZKJMYBYQLYHETFJZFRFKSRYXFJTWDSXXSYSQJYSLYXWJHSNLXYYXHBHAWHHJZXWMYLJCSSLKYDZTXBZSYFDXGXZJKHSXXYBSSXDPYNZWRPTQZCZENYGCXQFJYKJBZMLJCMQQXUOXSLYXXLYLLJDZBTYMHPFSTTQQWLHOKYBLZZALZXQLHZWRRQHLSTMYPYXJJXMQSJFNBXYXYJXXYQYLTHYLQYFMLKLJTMLLHSZWKZHLJMLHLJKLJSTLQXYLMBHHLNLZXQJHXCFXXLHYHJJGBYZZKBXSCQDJQDSUJZYYHZHHMGSXCSYMXFEBCQWWRBPYYJQTYZCYQYQQZYHMWFFHGZFRJFCDPXNTQYZPDYKHJLFRZXPPXZDBBGZQSTLGDGYLCQMLCHHMFYWLZYXKJLYPQHSYWMQQGQZMLZJNSQXJQSYJYCBEHSXFSZPXZWFLLBCYYJDYTDTHWZSFJMQQYJLMQXXLLDTTKHHYBFPWTYYSQQWNQWLGWDEBZWCMYGCULKJXTMXMYJSXHYBRWFYMWFRXYQMXYSZTZZTFYKMLDHQDXWYYNLCRYJBLPSXCXYWLSPRRJWXHQYPHTYDNXHHMMYWYTZCSQMTSSCCDALWZTCPQPYJLLQZYJSWXMZZMMYLMXCLMXCZMXMZSQTZPPQQBLPGXQZHFLJJHYTJSRXWZXSCCDLXTYJDCQJXSLQYCLZXLZZXMXQRJMHRHZJBHMFLJLMLCLQNLDXZLLLPYPSYJYSXCQQDCMQJZZXHNPNXZMEKMXHYKYQLXSXTXJYYHWDCWDZHQYYBGYBCYSCFGPSJNZDYZZJZXRZRQJJYMCANYRJTLDPPYZBSTJKXXZYPFDWFGZZRPYMTNGXZQBYXNBUFNQKRJQZMJEGRZGYCLKXZDSKKNSXKCLJSPJYYZLQQJYBZSSQLLLKJXTBKTYLCCDDBLSPPFYLGYDTZJYQGGKQTTFZXBDKTYYHYBBFYTYYBCLPDYTGDHRYRNJSPTCSNYJQHKLLLZSLYDXXWBCJQSPXBPJZJCJDZFFXXBRMLAZHCSNDLBJDSZBLPRZTSWSBXBCLLXXLZDJZSJPYLYXXYFTFFFBHJJXGBYXJPMMMPSSJZJMTLYZJXSWXTYLEDQPJMYGQZJGDJLQJWJQLLSJGJGYGMSCLJJXDTYGJQJQJCJZCJGDZZSXQGSJGGCXHQXSNQLZZBXHSGZXCXYLJXYXYYDFQQJHJFXDHCTXJYRXYSQTJXYEFYYSSYYJXNCYZXFXMSYSZXYYSCHSHXZZZGZZZGFJDLTYLNPZGYJYZYYQZPBXQBDZTZCZYXXYHHSQXSHDHGQHJHGYWSZTMZMLHYXGEBTYLZKQWYTJZRCLEKYSTDBCYKQQSAYXCJXWWGSBHJYZYDHCSJKQCXSWXFLTYNYZPZCCZJQTZWJQDZZZQZLJJXLSBHPYXXPSXSHHEZTXFPTLQYZZXHYTXNCFZYYHXGNXMYWXTZSJPTHHGYMXMXQZXTSBCZYJYXXTYYZYPCQLMMSZMJZZLLZXGXZAAJZYXJMZXWDXZSXZDZXLEYJJZQBHZWZZZQTZPSXZTDSXJJJZNYAZPHXYYSRNQDTHZHYYKYJHDZXZLSWCLYBZYECWCYCRYLCXNHZYDZYDYJDFRJJHTRSQTXYXJRJHOJYNXELXSFSFJZGHPZSXZSZDZCQZBYYKLSGSJHCZSHDGQGXYZGXCHXZJWYQWGYHKSSEQZZNDZFKWYSSTCLZSTSYMCDHJXXYWEYXCZAYDMPXMDSXYBSQMJMZJMTZQLPJYQZCGQHXJHHLXXHLHDLDJQCLDWBSXFZZYYSCHTYTYYBHECXHYKGJPXHHYZJFXHWHBDZFYZBCAPNPGNYDMSXHMMMMAMYNBYJTMPXYYMCTHJBZYFCGTYHWPHFTWZZEZSBZEGPFMTSKFTYCMHFLLHGPZJXZJGZJYXZSBBQSCZZLZCCSTPGXMJSFTCCZJZDJXCYBZLFCJSYZFGSZLYBCWZZBYZDZYPSWYJZXZBDSYUXLZZBZFYGCZXBZHZFTPBGZGEJBSTGKDMFHYZZJHZLLZZGJQZLSFDJSSCBZGPDLFZFZSZYZYZSYGCXSNXXCHCZXTZZLJFZGQSQYXZJQDCCZTQCDXZJYQJQCHXZTDLGSCXZSYQJQTZWLQDQZTQCHQQJZYEZZZPBWKDJFCJPZTYPQYQTTYNLMBDKTJZPQZQZZFPZSBNJLGYJDXJDZZKZGQKXDLPZJTCJDQBXDJQJSTCKNXBXZMSLYJCQMTJQWWCJQNJNLLLHJCWQTBZQYDZCZPZZDZYDDCYZZZCCJTTJFZDPRRTZTJDCQTQZDTJNPLZBCLLCTZSXKJZQZPZLBZRBTJDCXFCZDBCCJJLTQQPLDCGZDBBZJCQDCJWYNLLZYZCCDWLLXWZLXRXNTQQCZXKQLSGDFQTDDGLRLAJJTKUYMKQLLTZYTDYYCZGJWYXDXFRSKSTQTENQMRKQZHHQKDLDAZFKYPBGGPZREBZZYKZZSPEGJXGYKQZZZSLYSYYYZWFQZYLZZLZHWCHKYPQGNPGBLPLRRJYXCCSYYHSFZFYBZYYTGZXYLXCZWXXZJZBLFFLGSKHYJZEYJHLPLLLLCZGXDRZELRHGKLZZYHZLYQSZZJZQLJZFLNBHGWLCZCFJYSPYXZLZLXGCCPZBLLCYBBBBUBBCBPCRNNZCZYRBFSRLDCGQYYQXYGMQZWTZYTYJXYFWTEHZZJYWLCCNTZYJJZDEDPZDZTSYQJHDYMBJNYJZLXTSSTPHNDJXXBYXQTZQDDTJTDYYTGWSCSZQFLSHLGLBCZPHDLYZJYCKWTYTYLBNYTSDSYCCTYSZYYEBHEXHQDTWNYGYCLXTSZYSTQMYGZAZCCSZZDSLZCLZRQXYYELJSBYMXSXZTEMBBLLYYLLYTDQYSHYMRQWKFKBFXNXSBYCHXBWJYHTQBPBSBWDZYLKGZSKYHXQZJXHXJXGNLJKZLYYCDXLFYFGHLJGJYBXQLYBXQPQGZTZPLNCYPXDJYQYDYMRBESJYYHKXXSTMXRCZZYWXYQYBMCLLYZHQYZWQXDBXBZWZMSLPDMYSKFMZKLZCYQYCZLQXFZZYDQZPZYGYJYZMZXDZFYFYTTQTZHGSPCZMLCCYTZXJCYTJMKSLPZHYSNZLLYTPZCTZZCKTXDHXXTQCYFKSMQCCYYAZHTJPCYLZLYJBJXTPNYLJYYNRXSYLMMNXJSMYBCSYSYLZYLXJJQYLDZLPQBFZZBLFNDXQKCZFYWHGQMRDSXYCYTXNQQJZYYPFZXDYZFPRXEJDGYQBXRCNFYYQPGHYJDYZXGRHTKYLNWDZNTSMPKLBTHBPYSZBZTJZSZZJTYYXZPHSSZZBZCZPTQFZMYFLYPYBBJQXZMXXDJMTSYSKKBJZXHJCKLPSMKYJZCXTMLJYXRZZQSLXXQPYZXMKYXXXJCLJPRMYYGADYSKQLSNDHYZKQXZYZTCGHZTLMLWZYBWSYCTBHJHJFCWZTXWYTKZLXQSHLYJZJXTMPLPYCGLTBZZTLZJCYJGDTCLKLPLLQPJMZPAPXYZLKKTKDZCZZBNZDYDYQZJYJGMCTXLTGXSZLMLHBGLKFWNWZHDXUHLFMKYSLGXDTWWFRJEJZTZHYDXYKSHWFZCQSHKTMQQHTZHYMJDJSKHXZJZBZZXYMPAGQMSTPXLSKLZYNWRTSQLSZBPSPSGZWYHTLKSSSWHZZLYYTNXJGMJSZSUFWNLSOZTXGXLSAMMLBWLDSZYLAKQCQCTMYCFJBSLXCLZZCLXXKSBZQCLHJPSQPLSXXCKSLNHPSFQQYTXYJZLQLDXZQJZDYYDJNZPTUZDSKJFSLJHYLZSQZLBTXYDGTQFDBYAZXDZHZJNHHQBYKNXJJQCZMLLJZKSPLDYCLBBLXKLELXJLBQYCXJXGCNLCQPLZLZYJTZLJGYZDZPLTQCSXFDMNYCXGBTJDCZNBGBQYQJWGKFHTNPYQZQGBKPBBYZMTJDYTBLSQMPSXTBNPDXKLEMYYCJYNZCTLDYKZZXDDXHQSHDGMZSJYCCTAYRZLPYLTLKXSLZCGGEXCLFXLKJRTLQJAQZNCMBYDKKCXGLCZJZXJHPTDJJMZQYKQSECQZDSHHADMLZFMMZBGNTJNNLGBYJBRBTMLBYJDZXLCJLPLDLPCQDHLXZLYCBLCXZZJADJLNZMMSSSMYBHBSQKBHRSXXJMXSDZNZPXLGBRHWGGFCXGMSKLLTSJYYCQLTSKYWYYHYWXBXQYWPYWYKQLSQPTNTKHQCWDQKTWPXXHCPTHTWUMSSYHBWCRWXHJMKMZNGWTMLKFGHKJYLSYYCXWHYECLQHKQHTTQKHFZLDXQWYZYYDESBPKYRZPJFYYZJCEQDZZDLATZBBFJLLCXDLMJSSXEGYGSJQXCWBXSSZPDYZCXDNYXPPZYDLYJCZPLTXLSXYZYRXCYYYDYLWWNZSAHJSYQYHGYWWAXTJZDAXYSRLTDPSSYYFNEJDXYZHLXLLLZQZSJNYQYQQXYJGHZGZCYJCHZLYCDSHWSHJZYJXCLLNXZJJYYXNFXMWFPYLCYLLABWDDHWDXJMCXZTZPMLQZHSFHZYNZTLLDYWLSLXHYMMYLMBWWKYXYADTXYLLDJPYBPWUXJMWMLLSAFDLLYFLBHHHBQQLTZJCQJLDJTFFKMMMBYTHYGDCQRDDWRQJXNBYSNWZDBYYTBJHPYBYTTJXAAHGQDQTMYSTQXKBTZPKJLZRBEQQSSMJJBDJOTGTBXPGBKTLHQXJJJCTHXQDWJLWRFWQGWSHCKRYSWGFTGYGBXSDWDWRFHWYTJJXXXJYZYSLPYYYPAYXHYDQKXSHXYXGSKQHYWFDDDPPLCJLQQEEWXKSYYKDYPLTJTHKJLTCYYHHJTTPLTZZCDLTHQKZXQYSTEEYWYYZYXXYYSTTJKLLPZMCYHQGXYHSRMBXPLLNQYDQHXSXXWGDQBSHYLLPJJJTHYJKYPPTHYYKTYEZYENMDSHLCRPQFDGFXZPSFTLJXXJBSWYYSKSFLXLPPLBBBLBSFXFYZBSJSSYLPBBFFFFSSCJDSTZSXZRYYSYFFSYZYZBJTBCTSBSDHRTJJBYTCXYJEYLXCBNEBJDSYXYKGSJZBXBYTFZWGENYHHTHZHHXFWGCSTBGXKLSXYWMTMBYXJSTZSCDYQRCYTWXZFHMYMCXLZNSDJTTTXRYCFYJSBSDYERXJLJXBBDEYNJGHXGCKGSCYMBLXJMSZNSKGXFBNBPTHFJAAFXYXFPXMYPQDTZCXZZPXRSYWZDLYBBKTYQPQJPZYPZJZNJPZJLZZFYSBTTSLMPTZRTDXQSJEHBZYLZDHLJSQMLHTXTJECXSLZZSPKTLZKQQYFSYGYWPCPQFHQHYTQXZKRSGTTSQCZLPTXCDYYZXSQZSLXLZMYCPCQBZYXHBSXLZDLTCDXTYLZJYYZPZYZLTXJSJXHLPMYTXCQRBLZSSFJZZTNJYTXMYJHLHPPLCYXQJQQKZZSCPZKSWALQSBLCCZJSXGWWWYGYKTJBBZTDKHXHKGTGPBKQYSLPXPJCKBMLLXDZSTBKLGGQKQLSBKKTFXRMDKBFTPZFRTBBRFERQGXYJPZSSTLBZTPSZQZSJDHLJQLZBPMSMMSXLQQNHKNBLRDDNXXDHDDJCYYGYLXGZLXSYGMQQGKHBPMXYXLYTQWLWGCPBMQXCYZYDRJBHTDJYHQSHTMJSBYPLWHLZFFNYPMHXXHPLTBQPFBJWQDBYGPNZTPFZJGSDDTQSHZEAWZZYLLTYYBWJKXXGHLFKXDJTMSZSQYNZGGSWQSPHTLSSKMCLZXYSZQZXNCJDQGZDLFNYKLJCJLLZLMZZNHYDSSHTHZZLZZBBHQZWWYCRZHLYQQJBEYFXXXWHSRXWQHWPSLMSSKZTTYGYQQWRSLALHMJTQJSMXQBJJZJXZYZKXBYQXBJXSHZTSFJLXMXZXFGHKZSZGGYLCLSARJYHSLLLMZXELGLXYDJYTLFBHBPNLYZFBBHPTGJKWETZHKJJXZXXGLLJLSTGSHJJYQLQZFKCGNNDJSSZFDBCTWWSEQFHQJBSAQTGYPQLBXBMMYWXGSLZHGLZGQYFLZBYFZJFRYSFMBYZHQGFWZSYFYJJPHZBYYZFFWODGRLMFTWLBZGYCQXCDJYGZYYYYTYTYDWEGAZYHXJLZYYHLRMGRXXZCLHNELJJTJTPWJYBJJBXJJTJTEEKHWSLJPLPSFYZPQQBDLQJJTYYQLYZKDKSQJYYQZLDQTGJQYZJSUCMRYQTHTEJMFCTYHYPKMHYZWJDQFHYYXWSHCTXRLJHQXHCCYYYJLTKTTYTMXGTCJTZAYYOCZLYLBSZYWJYTSJYHBYSHFJLYGJXXTMZYYLTXXYPZLXYJZYZYYPNHMYMDYYLBLHLSYYQQLLNJJYMSOYQBZGDLYXYLCQYXTSZEGXHZGLHWBLJHEYXTWQMAKBPQCGYSHHEGQCMWYYWLJYJHYYZLLJJYLHZYHMGSLJLJXCJJYCLYCJPCPZJZJMMYLCQLNQLJQJSXYJMLSZLJQLYCMMHCFMMFPQQMFYLQMCFFQMMMMHMZNFHHJGTTHHKHSLNCHHYQDXTMMQDCYZYXYQMYQYLTDCYYYZAZZCYMZYDLZFFFMMYCQZWZZMABTBYZTDMNZZGGDFTYPCGQYTTSSFFWFDTZQSSYSTWXJHXYTSXXYLBYQHWWKXHZXWZNNZZJZJJQJCCCHYYXBZXZCYZTLLCQXYNJYCYYCYNZZQYYYEWYCZDCJYCCHYJLBTZYYCQWMPWPYMLGKDLDLGKQQBGYCHJXY",oMultiDiff={ +19969:"DZ",19975:"WM",19988:"QJ",20048:"YL",20056:"SC",20060:"NM",20094:"QG",20127:"QJ",20167:"QC",20193:"YG",20250:"KH",20256:"ZC",20282:"SC",20285:"QJG",20291:"TD",20314:"YD",20315:"BF",20340:"NE",20375:"TD",20389:"YJ",20391:"CZ",20415:"PB",20446:"YS",20447:"SQ",20504:"TC",20608:"KG",20854:"QJ",20857:"ZC",20911:"PF",20985:"AW",21032:"PB",21048:"XQ",21049:"SC",21089:"YS",21119:"JC",21242:"SB",21273:"SC",21305:"YP",21306:"QO",21330:"ZC",21333:"SDC",21345:"QK",21378:"CA",21397:"SC",21414:"XS",21442:"SC",21477:"JG",21480:"TD",21484:"ZS",21494:"YX",21505:"YX",21512:"HG",21523:"XH",21537:"PB",21542:"PF",21549:"KH",21571:"E",21574:"DA",21588:"TD",21589:"O",21618:"ZC",21621:"KHA",21632:"ZJ",21654:"KG",21679:"LKG",21683:"KH",21710:"A",21719:"YH",21734:"WOE",21769:"A",21780:"WN",21804:"XH",21834:"A",21899:"ZD",21903:"RN",21908:"WO",21939:"ZC",21956:"SA",21964:"YA",21970:"TD",22003:"A",22031:"JG",22040:"XS",22060:"ZC",22066:"ZC",22079:"MH",22129:"XJ",22179:"XA",22237:"NJ",22244:"TD",22280:"JQ",22300:"YH",22313:"XW",22331:"YQ",22343:"YJ",22351:"PH",22395:"DC",22412:"TD",22484:"PB",22500:"PB",22534:"ZD",22549:"DH",22561:"PB",22612:"TD",22771:"KQ",22831:"HB",22841:"JG",22855:"QJ",22865:"XQ",23013:"ML",23081:"WM",23487:"SX",23558:"QJ",23561:"YW",23586:"YW",23614:"YW",23615:"SN",23631:"PB",23646:"ZS",23663:"ZT",23673:"YG",23762:"TD",23769:"ZS",23780:"QJ",23884:"QK",24055:"XH",24113:"DC",24162:"ZC",24191:"GA",24273:"QJ",24324:"NL",24377:"TD",24378:"QJ",24439:"PF",24554:"ZS",24683:"TD",24694:"WE",24733:"LK",24925:"TN",25094:"ZG",25100:"XQ",25103:"XH",25153:"PB",25170:"PB",25179:"KG",25203:"PB",25240:"ZS",25282:"FB",25303:"NA",25324:"KG",25341:"ZY",25373:"WZ",25375:"XJ",25384:"A",25457:"A",25528:"SD",25530:"SC",25552:"TD",25774:"ZC",25874:"ZC",26044:"YW",26080:"WM",26292:"PB",26333:"PB",26355:"ZY",26366:"CZ",26397:"ZC",26399:"QJ",26415:"ZS",26451:"SB",26526:"ZC",26552:"JG",26561:"TD",26588:"JG",26597:"CZ",26629:"ZS",26638:"YL",26646:"XQ",26653:"KG",26657:"XJ",26727:"HG",26894:"ZC",26937:"ZS",26946:"ZC",26999:"KJ",27099:"KJ",27449:"YQ",27481:"XS",27542:"ZS",27663:"ZS",27748:"TS",27784:"SC",27788:"ZD",27795:"TD",27812:"O",27850:"PB",27852:"MB",27895:"SL",27898:"PL",27973:"QJ",27981:"KH",27986:"HX",27994:"XJ",28044:"YC",28065:"WG",28177:"SM",28267:"QJ",28291:"KH",28337:"ZQ",28463:"TL",28548:"DC",28601:"TD",28689:"PB",28805:"JG",28820:"QG",28846:"PB",28952:"TD",28975:"ZC",29100:"A",29325:"QJ",29575:"SL",29602:"FB",30010:"TD",30044:"CX",30058:"PF",30091:"YSP",30111:"YN",30229:"XJ",30427:"SC",30465:"SX",30631:"YQ",30655:"QJ",30684:"QJG",30707:"SD",30729:"XH",30796:"LG",30917:"PB",31074:"NM",31085:"JZ",31109:"SC",31181:"ZC",31192:"MLB",31293:"JQ",31400:"YX",31584:"YJ",31896:"ZN",31909:"ZY",31995:"XJ",32321:"PF",32327:"ZY",32418:"HG",32420:"XQ",32421:"HG",32438:"LG",32473:"GJ",32488:"TD",32521:"QJ",32527:"PB",32562:"ZSQ",32564:"JZ",32735:"ZD",32793:"PB",33071:"PF",33098:"XL",33100:"YA",33152:"PB",33261:"CX",33324:"BP",33333:"TD",33406:"YA",33426:"WM",33432:"PB",33445:"JG",33486:"ZN",33493:"TS",33507:"QJ",33540:"QJ",33544:"ZC",33564:"XQ",33617:"YT",33632:"QJ",33636:"XH",33637:"YX",33694:"WG",33705:"PF",33728:"YW",33882:"SR",34067:"WM",34074:"YW",34121:"QJ",34255:"ZC",34259:"XL",34425:"JH",34430:"XH",34485:"KH",34503:"YS",34532:"HG",34552:"XS",34558:"YE",34593:"ZL",34660:"YQ",34892:"XH",34928:"SC",34999:"QJ",35048:"PB",35059:"SC",35098:"ZC",35203:"TQ",35265:"JX",35299:"JX",35782:"SZ",35828:"YS",35830:"E",35843:"TD",35895:"YG",35977:"MH",36158:"JG",36228:"QJ",36426:"XQ",36466:"DC",36710:"JC",36711:"ZYG",36767:"PB",36866:"SK",36951:"YW",37034:"YX",37063:"XH",37218:"ZC",37325:"ZC",38063:"PB",38079:"TD",38085:"QY",38107:"DC",38116:"TD",38123:"YD",38224:"HG",38241:"XTC",38271:"ZC",38415:"YE",38426:"KH",38461:"YD",38463:"AE",38466:"PB",38477:"XJ",38518:"YT",38551:"WK",38585:"ZC",38704:"XS",38739:"LJ",38761:"GJ",38808:"SQ",39048:"JG",39049:"XJ",39052:"HG",39076:"CZ",39271:"XT",39534:"TD",39552:"TD",39584:"PB",39647:"SB",39730:"LG",39748:"TPB",40109:"ZQ",40479:"ND",40516:"HG",40536:"HG",40583:"QJ",40765:"YQ",40784:"QJ",40840:"YK",40863:"QJG"},_checkPYCh=function(ch){var uni=ch.charCodeAt(0);return uni>40869||uni<19968?ch:oMultiDiff[uni]?oMultiDiff[uni]:_ChineseFirstPY.charAt(uni-19968)},_mkPYRslt=function(arr,ignoreMulti){for(var arrRslt=[""],k,multiLen=0,i=0,len=arr.length;i14||ignoreMulti){var tmpStr=str.substring(0,1);for(k=0;k0&&(this._items[0]=lastElt,this._sinkDown(0)),elt}},push:function(item){this._items[this._size++]=item,this._bubbleUp(this._size-1)},size:function(){return this._size},peek:function(){if(0!==this._size)return this._items[0]},_heapify:function(){for(var index=Math.floor((this._size+1)/2);index>=0;index--)this._sinkDown(index)},_bubbleUp:function(index){for(var elt=this._items[index];index>0;){var parentIndex=Math.floor((index+1)/2)-1,parentElt=this._items[parentIndex];if(this._comparator(parentElt,elt))return;this._items[parentIndex]=elt,this._items[index]=parentElt,index=parentIndex}},_sinkDown:function(index){for(var elt=this._items[index];;){var leftChildIndex=2*(index+1)-1,rightChildIndex=2*(index+1),swapIndex=-1;if(leftChildIndex=0;--i)xs[i]=0;return xs},ceilLog2=function(x){for(var y=1;y0;--i)this._heap[i]=this._heap[2*i]+this._heap[2*i+1]},BI.PrefixIntervalTree.prototype={constructor:BI.PrefixIntervalTree,set:function(index,value){var node=this._half+index;for(this._heap[node]=value,node=parent(node);0!==node;node=parent(node))this._heap[node]=this._heap[2*node]+this._heap[2*node+1]},get:function(index){var node=this._half+index;return this._heap[node]},getSize:function(){return this._size},sumUntil:function(end){if(0===end)return 0;for(var node=this._half+end-1,sum=this._heap[node];1!==node;node=parent(node))node%2===1&&(sum+=this._heap[node-1]);return sum},sumTo:function(inclusiveEnd){return this.sumUntil(inclusiveEnd+1)},sum:function(begin,end){return this.sumUntil(end)-this.sumUntil(begin)},greatestLowerBound:function(t){if(t<0)return-1;var node=1;if(this._heap[node]<=t)return this._size;for(;node=0;--i)xs[i]=initialValue;return new BI.PrefixIntervalTree(xs)},BI.PrefixIntervalTree.empty=function(size){return BI.PrefixIntervalTree.uniform(size,0)}}(),!function(){BI.Queue=function(capacity){this.capacity=capacity,this.array=[]},BI.Queue.prototype={constructor:BI.Queue,contains:function(v){return BI.contains(this.array,v)},indexOf:function(v){return BI.contains(this.array,v)},getElementByIndex:function(index){return this.array[index]},push:function(v){this.array.push(v),this.capacity&&this.array.length>this.capacity&&this.array.shift()},pop:function(){this.array.pop()},shift:function(){this.array.shift()},unshift:function(v){this.array.unshift(v),this.capacity&&this.array.length>this.capacity&&this.array.pop()},remove:function(v){BI.remove(this.array,v)},splice:function(){this.array.splice.apply(this.array,arguments)},slice:function(){this.array.slice.apply(this.array,arguments)},size:function(){return this.array.length},each:function(fn,scope){var scope=scope||window,fn=fn||null;if(null!=fn&&"function"==typeof fn)for(var i=0;i0?{children:children}:{})},toJSON:function(node){var self=this,result=[];return BI.each((node||this.root).getChildren(),function(i,child){result.push(self._toJSON(child))}),result},_toJSONWithNode:function(node){var self=this,children=[];return BI.each(node.getChildren(),function(i,child){children.push(self._toJSONWithNode(child))}),BI.extend({id:node.id},BI.deepClone(node.get("data")),{node:node},children.length>0?{children:children}:{})},toJSONWithNode:function(node){var self=this,result=[];return BI.each((node||this.root).getChildren(),function(i,child){result.push(self._toJSONWithNode(child))}),result},search:function(root,target,param){if(!(root instanceof BI.Node))return arguments.callee.apply(this,[this.root,root,target]);var self=this,next=null;return BI.isNull(target)?null:BI.isEqual(root[param||"id"],target)?root:(BI.any(root.getChildren(),function(i,child){if(next=self.search(child,target,param),null!==next)return!0}),next)},_traverse:function(node,callback){var queue=[];for(queue.push(node);!BI.isEmpty(queue);){var temp=queue.shift(),b=callback&&callback(temp);if(b===!1)break;b!==!0&&null!=temp&&(queue=queue.concat(temp.getChildren()))}},traverse:function(callback){this._traverse(this.root,callback)},_recursion:function(node,route,callback){var self=this;return BI.every(node.getChildren(),function(i,child){var next=BI.clone(route);next.push(child.id);var b=callback&&callback(child,next);return b!==!1&&(b===!0||self._recursion(child,next,callback))})},recursion:function(callback){this._recursion(this.root,[],callback)},inOrderTraverse:function(callback){this._inOrderTraverse(this.root,callback)},_inOrderTraverse:function(node,callback){null!=node&&(this._inOrderTraverse(node.getLeft()),callback&&callback(node),this._inOrderTraverse(node.getRight()))},nrInOrderTraverse:function(callback){for(var stack=[],node=this.root;null!=node||!BI.isEmpty(stack);){for(;null!=node;)stack.push(node),node=node.getLeft();node=stack.pop(),callback&&callback(node),node=node.getRight()}},preOrderTraverse:function(callback){this._preOrderTraverse(this.root,callback)},_preOrderTraverse:function(node,callback){null!=node&&(callback&&callback(node),this._preOrderTraverse(node.getLeft()),this._preOrderTraverse(node.getRight()))},nrPreOrderTraverse:function(callback){for(var stack=[],node=this.root;null!=node||!BI.isEmpty(stack);){for(;null!=node;)callback&&callback(node),stack.push(node),node=node.getLeft();node=stack.pop(),node=node.getRight()}},postOrderTraverse:function(callback){this._postOrderTraverse(this.root,callback)},_postOrderTraverse:function(node,callback){null!=node&&(this._postOrderTraverse(node.getLeft()),this._postOrderTraverse(node.getRight()),callback&&callback(node))},nrPostOrderTraverse:function(callback){for(var stack=[],node=this.root,preNode=null;null!=node||!BI.isEmpty(stack);){for(;null!=node;)stack.push(node),node=node.getLeft();node=BI.last(stack),null==node.getRight()||node.getRight()==preNode?(callback&&callback(node),node=stack.pop(),preNode=node,node=null):node=node.getRight()}}},BI.Node=function(id){BI.isObject(id)?BI.extend(this,id):this.id=id,this.clear.apply(this,arguments)},BI.Node.prototype={constructor:BI.Node,set:function(key,value){return BI.isObject(key)?void BI.extend(this,key):void(this[key]=value)},get:function(key){return this[key]},isLeaf:function(){return BI.isEmpty(this.children)},getChildren:function(){return this.children},getChildrenLength:function(){return this.children.length},getFirstChild:function(){return BI.first(this.children)},getLastChild:function(){return BI.last(this.children)},setLeft:function(left){this.left=left},getLeft:function(){return this.left},setRight:function(right){this.right=right},getRight:function(){return this.right},setParent:function(parent){this.parent=parent},getParent:function(){return this.parent},getChild:function(index){return this.children[index]},getChildIndex:function(id){return BI.findIndex(this.children,function(i,ch){return ch.get("id")===id})},removeChild:function(id){this.removeChildByIndex(this.getChildIndex(id))},removeChildByIndex:function(index){var before=this.getChild(index-1),behind=this.getChild(index+1);null!=before&&before.setRight(behind||null),null!=behind&&behind.setLeft(before||null),this.children.splice(index,1)},removeAllChilds:function(){this.children=[]},addChild:function(child,index){var cur=null;cur=BI.isUndefined(index)?this.children.length-1:index-1,child.setParent(this),cur>=0&&(this.getChild(cur)&&this.getChild(cur).setRight(child),child.setLeft(this.getChild(cur))),BI.isUndefined(index)?this.children.push(child):this.children.splice(index,0,child)},equals:function(obj){return this===obj||this.id===obj.id},clear:function(){this.parent=null,this.left=null,this.right=null,this.children=[]}},BI.extend(BI.Tree,{transformToArrayFormat:function(nodes,pId){if(!nodes)return[];var r=[];if(BI.isArray(nodes))for(var i=0,l=nodes.length;i=this.x&&x<=this.x+this.w&&y>=this.y&&y<=this.y+this.h)},getPosition:function(){var pos=[];return pos.push(this.x+this.w/2),pos.push(this.y+this.h/2),pos}},BI.BehaviorFactory={createBehavior:function(key,options){var behavior;switch(key){case"highlight":behavior=BI.HighlightBehavior;break;case"redmark":behavior=BI.RedMarkBehavior}return new behavior(options)}},BI.Behavior=BI.inherit(BI.OB,{_defaultConfig:function(){return BI.extend(BI.Behavior.superclass._defaultConfig.apply(this,arguments),{rule:function(){return!0}})},_init:function(){BI.Behavior.superclass._init.apply(this,arguments)},doBehavior:function(){}}),BI.Layout=BI.inherit(BI.Widget,{props:function(){return{scrollable:null,scrollx:!1,scrolly:!1,items:[]}},render:function(){this._init4Margin(),this._init4Scroll()},_init4Margin:function(){this.options.top&&this.element.css("top",this.options.top),this.options.left&&this.element.css("left",this.options.left),this.options.bottom&&this.element.css("bottom",this.options.bottom),this.options.right&&this.element.css("right",this.options.right)},_init4Scroll:function(){switch(this.options.scrollable){case!0:this.element.css("overflow","auto");break;case!1:this.element.css("overflow","hidden")}this.options.scrollx&&this.element.css({"overflow-x":"auto","overflow-y":"hidden"}),this.options.scrolly&&this.element.css({"overflow-x":"hidden","overflow-y":"auto"})},appendFragment:function(frag){this.element.append(frag)},_mountChildren:function(){var self=this,frag=BI.Widget._renderEngine.createFragment(),hasChild=!1;BI.each(this._children,function(i,widget){widget.element!==self.element&&(frag.appendChild(widget.element[0]),hasChild=!0)}),hasChild===!0&&this.appendFragment(frag)},_getChildName:function(index){return index+""},_addElement:function(i,item,context){var self=this,w;return this.hasWidget(this._getChildName(i))?w=this.getWidgetByName(this._getChildName(i)):(w=BI.createWidget(item,context),w.on(BI.Events.DESTROY,function(){BI.each(self._children,function(name,child){child===w&&(BI.remove(self._children,child),self.removeItemAt(0|name))})}),this.addWidget(this._getChildName(i),w)),w},_getOptions:function(item){return item instanceof BI.Widget&&(item=item.options),item=BI.stripEL(item),item instanceof BI.Widget&&(item=item.options),item},_compare:function(item1,item2){function eq(a,b,aStack,bStack){if(a===b)return 0!==a||1/a===1/b;if(null==a||null==b)return a===b;var className=Object.prototype.toString.call(a);switch(className){case"[object RegExp]":case"[object String]":return""+a==""+b;case"[object Number]":return+a!==+a?+b!==+b:0===+a?1/+a===1/b:+a===+b;case"[object Date]":case"[object Boolean]":return+a===+b}var areArrays="[object Array]"===className;if(!areArrays){if(BI.isFunction(a)&&BI.isFunction(b))return!0;a=self._getOptions(a),b=self._getOptions(b)}aStack=aStack||[],bStack=bStack||[];for(var length=aStack.length;length--;)if(aStack[length]===a)return bStack[length]===b;if(aStack.push(a),bStack.push(b),areArrays){if(length=a.length,length!==b.length)return!1;for(;length--;)if(!eq(a[length],b[length],aStack,bStack))return!1}else{var keys=_.keys(a),key;if(length=keys.length,_.keys(b).length!==length)return!1;for(;length--;)if(key=keys[length],!_.has(b,key)||!eq(a[key],b[key],aStack,bStack))return!1}return aStack.pop(),bStack.pop(),!0}var self=this;return eq(item1,item2)},_getWrapper:function(){return this.element},_addItemAt:function(index,item){for(var i=this.options.items.length;i>index;i--)this._children[this._getChildName(i)]=this._children[this._getChildName(i-1)];delete this._children[this._getChildName(index)],this.options.items.splice(index,0,item)},_removeItemAt:function(index){for(var i=index;ithis.options.items.length)){this._addItemAt(index,item);var w=this._addElement(index,item);return index>0?this._children[this._getChildName(index-1)].element.after(w.element):w.element.prependTo(this._getWrapper()),w._mount(),w}},removeItemAt:function(indexes){indexes=BI.isArray(indexes)?indexes:[indexes];for(var deleted=[],newItems=[],newChildren={},i=0,len=this.options.items.length;ithis.options.items.length-1)return!1;var child=this._children[this._getChildName(index)];return child.shouldUpdate?child.shouldUpdate(this._getOptions(item))===!0:null},updateItemAt:function(index,item){if(!(index<0||index>this.options.items.length-1)){ +var child=this._children[this._getChildName(index)],updated;if(updated=child.update(this._getOptions(item)))return updated;var del=this._children[this._getChildName(index)];delete this._children[this._getChildName(index)],this.options.items.splice(index,1);var w=this._addElement(index,item);this.options.items.splice(index,0,item),this._children[this._getChildName(index)]=w,index>0?this._children[this._getChildName(index-1)].element.after(w.element):w.element.prependTo(this._getWrapper()),del._destroy(),w._mount()}},addItems:function(items,context){var self=this,o=this.options,fragment=BI.Widget._renderEngine.createFragment(),added=[];BI.each(items,function(i,item){var w=self._addElement(o.items.length,item,context);self._children[self._getChildName(o.items.length)]=w,o.items.push(item),added.push(w),fragment.appendChild(w.element[0])}),this._isMounted&&(this._getWrapper().append(fragment),BI.each(added,function(i,w){w._mount()}))},prependItems:function(items,context){var self=this;items=items||[];for(var fragment=BI.Widget._renderEngine.createFragment(),added=[],i=items.length-1;i>=0;i--){this._addItemAt(0,items[i]);var w=this._addElement(0,items[i],context);self._children[self._getChildName(0)]=w,this.options.items.unshift(items[i]),added.push(w),fragment.appendChild(w.element[0])}this._isMounted&&(this._getWrapper().prepend(fragment),BI.each(added,function(i,w){w._mount()}))},getValue:function(){var self=this,value=[],child;return BI.each(this.options.items,function(i){if(child=self._children[self._getChildName(i)]){var v=child.getValue();v=BI.isArray(v)?v:[v],value=value.concat(v)}}),value},setValue:function(v){var self=this,child;BI.each(this.options.items,function(i){(child=self._children[self._getChildName(i)])&&child.setValue(v)})},setText:function(v){var self=this,child;BI.each(this.options.items,function(i){(child=self._children[self._getChildName(i)])&&child.setText(v)})},patchItem:function(oldVnode,vnode,index){var shouldUpdate=this.shouldUpdateItem(index,vnode);if(shouldUpdate===!0||null===shouldUpdate&&!this._compare(oldVnode,vnode))return this.updateItemAt(index,vnode)},updateChildren:function(oldCh,newCh){function sameVnode(vnode1,vnode2,oldIndex,newIndex){return vnode1=self._getOptions(vnode1),vnode2=self._getOptions(vnode2),BI.isKey(vnode1.key)?vnode1.key===vnode2.key:oldIndex>=0?oldIndex===newIndex:void 0}function addNode(vnode,index){var opt=self._getOptions(vnode),key=null==opt.key?self._getChildName(index):opt.key;return children[key]=self._addElement(key,vnode)}function addVnodes(before,vnodes,startIdx,endIdx){for(;startIdx<=endIdx;++startIdx){var node=addNode(vnodes[startIdx],startIdx);insertBefore(node,before,!1,startIdx)}}function removeVnodes(vnodes,startIdx,endIdx){for(;startIdx<=endIdx;++startIdx){var ch=vnodes[startIdx];if(BI.isNotNull(ch)){var node=self._getOptions(ch),key=null==node.key?self._getChildName(startIdx):node.key;delete self._children[self._getChildName(key)],children[key]._destroy()}}}function insertBefore(insert,before,isNext,index){insert=self._getOptions(insert),before=before&&self._getOptions(before);var insertKey=BI.isKey(insert.key)?insert.key:self._getChildName(index);if(before&&children[before.key]){var beforeKey=BI.isKey(before.key)?before.key:self._getChildName(index),next;next=isNext?children[beforeKey].element.next():children[beforeKey].element,next.length>0?next.before(children[insertKey].element):self._getWrapper().append(children[insertKey].element)}else self._getWrapper().append(children[insertKey].element)}function findOldVnode(vnodes,vNode,beginIdx,endIdx){var i,found;for(i=beginIdx;i<=endIdx;++i)vnodes[i]&&sameVnode(vnodes[i],vNode)&&(found=vnodes[i]);return found}var self=this,oldStartIdx=0,newStartIdx=0,oldEndIdx=oldCh.length-1,oldStartVnode=oldCh[0],oldEndVnode=oldCh[oldEndIdx],newEndIdx=newCh.length-1,newStartVnode=newCh[0],newEndVnode=newCh[newEndIdx],before,updated,children={};for(BI.each(oldCh,function(i,child){child=self._getOptions(child);var key=null==child.key?i:child.key;BI.isKey(key)&&(children[key]=self._children[self._getChildName(i)])});oldStartIdx<=oldEndIdx&&newStartIdx<=newEndIdx;)if(BI.isNull(oldStartVnode))oldStartVnode=oldCh[++oldStartIdx];else if(BI.isNull(oldEndVnode))oldEndVnode=oldCh[--oldEndIdx];else if(sameVnode(oldStartVnode,newStartVnode,oldStartIdx,newStartIdx))updated=this.patchItem(oldStartVnode,newStartVnode,oldStartIdx)||updated,children[null==oldStartVnode.key?this._getChildName(oldStartIdx):oldStartVnode.key]=this._children[this._getChildName(oldStartIdx)],oldStartVnode=oldCh[++oldStartIdx],newStartVnode=newCh[++newStartIdx];else if(sameVnode(oldEndVnode,newEndVnode,oldEndIdx,newEndIdx))updated=this.patchItem(oldEndVnode,newEndVnode,oldEndIdx)||updated,children[null==oldEndVnode.key?this._getChildName(oldEndIdx):oldEndVnode.key]=this._children[this._getChildName(oldEndIdx)],oldEndVnode=oldCh[--oldEndIdx],newEndVnode=newCh[--newEndIdx];else if(sameVnode(oldStartVnode,newEndVnode))updated=this.patchItem(oldStartVnode,newEndVnode,oldStartIdx)||updated,children[null==oldStartVnode.key?this._getChildName(oldStartIdx):oldStartVnode.key]=this._children[this._getChildName(oldStartIdx)],insertBefore(oldStartVnode,oldEndVnode,!0),oldStartVnode=oldCh[++oldStartIdx],newEndVnode=newCh[--newEndIdx];else if(sameVnode(oldEndVnode,newStartVnode))updated=this.patchItem(oldEndVnode,newStartVnode,oldEndIdx)||updated,children[null==oldEndVnode.key?this._getChildName(oldEndIdx):oldEndVnode.key]=this._children[this._getChildName(oldEndIdx)],insertBefore(oldEndVnode,oldStartVnode),oldEndVnode=oldCh[--oldEndIdx],newStartVnode=newCh[++newStartIdx];else{var sameOldVnode=findOldVnode(oldCh,newStartVnode,oldStartIdx,oldEndIdx);if(BI.isNull(sameOldVnode)){var node=addNode(newStartVnode);insertBefore(node,oldStartVnode),newStartVnode=newCh[++newStartIdx]}else BI.each(oldCh,function(index,child){child&&sameVnode(child,newStartVnode)&&(updated=self.patchItem(sameOldVnode,newStartVnode,index)||updated,children[null==sameOldVnode.key?self._getChildName(index):sameOldVnode.key]=self._children[self._getChildName(index)],oldCh[index]=void 0,insertBefore(sameOldVnode,oldStartVnode))}),newStartVnode=newCh[++newStartIdx]}return oldStartIdx>oldEndIdx?(before=BI.isNull(newCh[newEndIdx+1])?null:newCh[newEndIdx+1],addVnodes(before,newCh,newStartIdx,newEndIdx)):newStartIdx>newEndIdx&&removeVnodes(oldCh,oldStartIdx,oldEndIdx),this._children={},BI.each(newCh,function(i,child){var node=self._getOptions(child),key=null==node.key?self._getChildName(i):node.key;children[key]._mount(),self._children[self._getChildName(i)]=children[key]}),updated},update:function(opt){var o=this.options,items=opt.items||[],updated=this.updateChildren(o.items,items);return this.options.items=items,updated},stroke:function(items){var self=this;BI.each(items,function(i,item){item&&self._addElement(i,item)})},removeWidget:function(nameOrWidget){var removeIndex;BI.isWidget(nameOrWidget)?BI.each(this._children,function(name,child){child===nameOrWidget&&(removeIndex=name)}):removeIndex=nameOrWidget,removeIndex&&this._removeItemAt(0|removeIndex)},empty:function(){BI.Layout.superclass.empty.apply(this,arguments),this.options.items=[]},destroy:function(){BI.Layout.superclass.destroy.apply(this,arguments),this.options.items=[]},populate:function(items){var self=this,o=this.options;return items=items||[],this._isMounted?void this.update({items:items}):(this.options.items=items,void this.stroke(items))},resize:function(){}}),BI.shortcut("bi.layout",BI.Layout),BI.Plugin=BI.Plugin||{},!function(){var _WidgetsPlugin={},_ObjectPlugin={},_ConfigPlugin={},_GlobalWidgetConfigFn,_GlobalObjectConfigFn;BI.extend(BI.Plugin,{getWidget:function(type,options){if(_GlobalWidgetConfigFn&&_GlobalWidgetConfigFn(type,options),_ConfigPlugin[type])for(var i=_ConfigPlugin[type].length-1;i>=0;i--)_ConfigPlugin[type][i](options);if(_WidgetsPlugin[type])for(var res,i=_WidgetsPlugin[type].length-1;i>=0;i--)if(res=_WidgetsPlugin[type][i](options))return res;return options},config:function(widgetConfigFn,objectConfigFn){_GlobalWidgetConfigFn=widgetConfigFn,_GlobalObjectConfigFn=objectConfigFn},configWidget:function(type,fn){_ConfigPlugin[type]||(_ConfigPlugin[type]=[]),_ConfigPlugin[type].push(fn)},registerWidget:function(type,fn){_WidgetsPlugin[type]||(_WidgetsPlugin[type]=[]),_WidgetsPlugin[type].length>0&&console.log("组件已经注册过了!"),_WidgetsPlugin[type].push(fn)},relieveWidget:function(type){delete _WidgetsPlugin[type]},getObject:function(type,object){if(_GlobalObjectConfigFn&&_GlobalObjectConfigFn(type,object),_ObjectPlugin[type])for(var res,i=0,len=_ObjectPlugin[type].length;i0&&console.log("对象已经注册过了!"),_ObjectPlugin[type].push(fn)},relieveObject:function(type){delete _ObjectPlugin[type]}})}(),BI.Action=BI.inherit(BI.OB,{_defaultConfig:function(){return BI.extend(BI.Action.superclass._defaultConfig.apply(this,arguments),{src:null,tar:null})},_init:function(){BI.Action.superclass._init.apply(this,arguments)},actionPerformed:function(src,tar,callback){},actionBack:function(tar,src,callback){}}),BI.ActionFactory={createAction:function(key,options){var action;switch(key){case"show":action=BI.ShowAction}return new action(options)}},BI.ShowAction=BI.inherit(BI.Action,{_defaultConfig:function(){return BI.extend(BI.ShowAction.superclass._defaultConfig.apply(this,arguments),{})},_init:function(){BI.ShowAction.superclass._init.apply(this,arguments)},actionPerformed:function(src,tar,callback){tar=tar||this.options.tar,tar.setVisible(!0),callback&&callback()},actionBack:function(tar,src,callback){tar=tar||this.options.tar,tar.setVisible(!1),callback&&callback()}}),function(){function isEmpty(value){var result=""===value||null===value||void 0===value;return result}function isInvalidDate(date){return"Invalid Date"==date||"NaN"==date}function _eFormat(text,fmt){function eFormat(num,format){var neg=num<0?(num*=-1,"-"):"",magnitudeNeg="",funcName=num>0&&num<1?"floor":"ceil",magnitude=Math[funcName](Math.log(num)/Math.log(10));if(!isFinite(magnitude))return format.replace(/#/gi,"").replace(/\.e/gi,"E");num/=Math.pow(10,magnitude),num>0&&num<1&&(num*=10,magnitude-=1);var integerLen=getInteger(magnitude,format);integerLen>1&&(magnitude-=integerLen-1,num*=Math.pow(10,integerLen-1)),magnitude<0&&(magnitudeNeg="-",magnitude*=-1);var precision=getPrecision(format),isValueCarry=isValueCarried(num);return num*=Math.pow(10,precision),num=Math.round(num),isValueCarry&&(num/=10,magnitude+="-"===magnitudeNeg?-1:1),num/=Math.pow(10,precision),num=num.toFixed(precision),magnitude=formatExponential(format,magnitude,magnitudeNeg),neg+num+"E"+magnitude}function formatExponential(format,num,magnitudeNeg){if(num+="",!/e/gi.test(format))return num;for(format=format.split(/e/gi)[1];num.length1?arr[1].length:0}function getInteger(magnitude,format){if(!/e/gi.test(format))return 0;var formatLeft=format.split(/e/gi)[0].split(".")[0],i,f,len=formatLeft.length,valueLeftLen=0;for(i=0;i-1)return text>=0?_numberFormat(text+"",format.substring(0,numMod)):_numberFormat(-text+"",format.substr(numMod+1));if(+text<0&&"-"!==format.charAt(0))return _numberFormat(-text+"","-"+format);var fp=format.split("."),fleft=fp[0]||"",fright=fp[1]||"";text=_dealNumberPrecision(text,fright);var tp=text.split("."),tleft=tp[0]||"",tright=tp[1]||"";if(/[%‰]$/.test(format)){var paddingZero=/[%]$/.test(format)?"00":"000";tright+=paddingZero,tleft+=tright.substr(0,paddingZero.length),tleft=tleft.replace(/^0+/gi,""),tright=tright.substr(paddingZero.length).replace(/0+$/gi,"")}var right=_dealWithRight(tright,fright);right.leftPlus&&(tleft=parseInt(tleft)+1+"",tleft=isNaN(tleft)?"1":tleft),right=right.num;var left=_dealWithLeft(tleft,fleft);return/[0-9]/.test(left)||(left+="0"),/[0-9]/.test(right)?left+"."+right:left+right}function _dealWithRight(tright,fright){for(var right="",j=0,i=0,len=fright.length;i4){result.leftPlus=!0;var numReg=right.match(/^[0-9]+/);if(numReg){var num=numReg[0],orilen=num.length,newnum=parseInt(num)+1+"";newnum.length>orilen?newnum=newnum.substr(1):(newnum=BI.leftPad(newnum,orilen,"0"),result.leftPlus=!1),right=right.replace(/^[0-9]+/,newnum)}}return result.num=right,result}function _dealWithLeft(tleft,fleft){for(var left="",j=tleft.length-1,combo=-1,last=-1,i=fleft.length-1;i>=0;i--){var ch=fleft.charAt(i),c=tleft.charAt(j);switch(ch){case"0":isEmpty(c)&&(c="0"),last=-1,left=c+left,j--;break;case"#":last=i,left=c+left,j--;break;case",":if(!isEmpty(c)){var com=fleft.match(/,[#0]+/);com&&(combo=com[0].length-1),left=","+left}break;default:left=ch+left}}if(last>-1){var tll=tleft.substr(0,j+1);left=left.substr(0,last)+tll+left.substr(last)}if(combo>0){var res=left.match(/[0-9]+,/);if(res){res=res[0];for(var newstr="",n=res.length-1-combo;n>=0;n-=combo)newstr=res.substr(n,combo)+","+newstr;var lres=res.substr(0,n+combo);isEmpty(lres)||(newstr=lres+","+newstr)}left=left.replace(/[0-9]+,/,newstr)}return left}var _global;_global="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,_global.BI||(_global.BI={}),BI.cjkEncode=function(text){if("string"!=typeof text)return text;for(var newText="",i=0;i=128||91===code||93===code?"["+code.toString(16)+"]":text.charAt(i)}return newText},BI.cjkDecode=function(text){if(null==text)return"";if(!isNaN(text)||text.indexOf("[")==-1)return text;for(var newText="",i=0;ii+1){var subText=text.substring(i+1,rightIdx);subText.length>0&&(ch=String.fromCharCode(eval("0x"+subText))),i=rightIdx}}newText+=ch}return newText};var SPECIAL_TAGS={"&":"&",'"':""","<":"<",">":">"," ":" "};BI.htmlEncode=function(text){return BI.isNull(text)?"":BI.replaceAll(text+"",'&|"|<|>|\\s',function(v){return SPECIAL_TAGS[v]?SPECIAL_TAGS[v]:" "})},BI.htmlDecode=function(text){return BI.isNull(text)?"":BI.replaceAll(text+"","&|"|<|>| ",function(v){switch(v){case"&":return"&";case""":return'"';case"<":return"<";case">":return">";case" ":default:return" "}})},BI.cjkEncodeDO=function(o){if(BI.isPlainObject(o)){var result={};return _.each(o,function(v,k){"string"!=typeof v&&(v=BI.jsonEncode(v)),k=BI.cjkEncode(k),result[k]=BI.cjkEncode(v)}),result}return o},BI.jsonEncode=function(o){var useHasOwn=!!{}.hasOwnProperty,m={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},encodeString=function(s){return/["\\\x00-\x1f]/.test(s)?'"'+s.replace(/([\x00-\x1f\\"])/g,function(a,b){var c=m[b];return c?c:(c=b.charCodeAt(),"\\u00"+Math.floor(c/16).toString(16)+(c%16).toString(16))})+'"':'"'+s+'"'},encodeArray=function(o){var a=["["],b,i,l=o.length,v;for(i=0;i2?BI.Date._MN[date.getMonth()]:len<2?date.getMonth()+1:BI.leftPad(date.getMonth()+1+"",2,"0");break;case"d":str=len>1?BI.leftPad(date.getDate()+"",2,"0"):date.getDate();break;case"h":var hour=date.getHours()%12;0===hour&&(hour=12),str=len>1?BI.leftPad(hour+"",2,"0"):hour;break;case"H":str=len>1?BI.leftPad(date.getHours()+"",2,"0"):date.getHours();break;case"m":str=len>1?BI.leftPad(date.getMinutes()+"",2,"0"):date.getMinutes();break;case"s":str=len>1?BI.leftPad(date.getSeconds()+"",2,"0"):date.getSeconds();break;case"a":str=date.getHours()<12?"am":"pm";break;case"z":str=BI.getTimezone(date);break;default:str=jfmt.str}return str}if(!date)return"";var len=format.length,result="";if(len>0){for(var flagch=format.charAt(0),start=0,str=flagch,i=1;iBI.Widget._renderEngine.createElement("body").outerWidth()&&(x-=tooltip.element.outerWidth()+15);var bodyHeight=BI.Widget._renderEngine.createElement("body").outerHeight();return y+tooltip.element.outerHeight()>bodyHeight||top+tooltip.element.outerHeight()>bodyHeight?(y-=tooltip.element.outerHeight()+15,!opt.belowMouse&&(y=Math.min(y,offset.top-tooltip.element.outerHeight()-5))):!opt.belowMouse&&(y=Math.max(y,top)),tooltip.element.css({left:x<0?0:x+"px",top:y<0?0:y+"px"}),tooltip.element.hover(function(){self.remove(name),context.element.trigger("mouseleave.title"+context.getName())}),this},add:function(name,bubble){return this.has(name)?this:(this.set(name,bubble),this)},get:function(name){return this.tooltipsManager[name]},set:function(name,bubble){this.tooltipsManager[name]=bubble},has:function(name){return null!=this.tooltipsManager[name]},remove:function(name){return this.has(name)?(this.tooltipsManager[name].destroy(),delete this.tooltipsManager[name],this):this}}),_.extend(BI,{Events:{KEYDOWN:"_KEYDOWN",BACKSPACE:"_BACKSPACE",SPACE:"_SPACE",ENTER:"_ENTER",CONFIRM:"_CONFIRM",ERROR:"_ERROR",PAUSE:"_PAUSE",DESTROY:"_DESTROY",MOUNT:"_MOUNT",UNMOUNT:"_UNMOUNT",CLEAR:"_CLEAR",ADD:"_ADD",EDITING:"_EDITING",EMPTY:"_EMPTY",VIEW:"_VIEW",RESIZE:"_RESIZE",BEFOREEDIT:"_BEFOREEDIT",AFTEREDIT:"_AFTEREDIT",STARTEDIT:"_STARTEDIT",STOPEDIT:"_STOPEDIT",CHANGE:"_CHANGE",EXPAND:"_EXPAND",COLLAPSE:"_COLLAPSE",CALLBACK:"_CALLBACK",CLICK:"_CLICK",STATECHANGE:"_STATECHANGE",BEFORESTATECHANGE:"_BEFORESTATECHANGE",INIT:"_INIT",AFTERINIT:"_AFTERINIT",SCROLL:"_SCROLL",STARTLOAD:"_STARTLOAD",AFTERLOAD:"_AFTERLOAD",BS:"beforesubmit",AS:"aftersubmit",SC:"submitcomplete",SF:"submitfailure",SS:"submitsuccess",BVW:"beforeverifywrite",AVW:"afterverifywrite",AV:"afterverify",BW:"beforewrite",AW:"afterwrite",WS:"writesuccess",WF:"writefailure",BA:"beforeappend",AA:"afterappend",BD:"beforedelete",AD:"beforedelete",UC:"unloadcheck",BTOPDF:"beforetopdf",ATOPDF:"aftertopdf",BTOEXCEL:"beforetoexcel",ATOEXCEL:"aftertoexcel",BTOWORD:"beforetoword",ATOWORD:"aftertoword",BTOIMAGE:"beforetoimage",ATOIMAGE:"aftertoimage",BTOHTML:"beforetohtml",ATOHTML:"aftertohtml",BIMEXCEL:"beforeimportexcel",AIMEXCEL:"afterimportexcel",BPDFPRINT:"beforepdfprint",APDFPRINT:"afterpdfprint",BFLASHPRINT:"beforeflashprint",AFLASHPRINT:"afterflashprint",BAPPLETPRINT:"beforeappletprint",AAPPLETPRINT:"afterappletprint",BSEVERPRINT:"beforeserverprint",ASERVERPRINT:"afterserverprint",BEMAIL:"beforeemail",AEMAIL:"afteremail"}}),_.extend(BI,{pushArray:function(sArray,array){for(var i=0;imonthDay&&(day=monthDay),dt.setDate(day),dt.setMonth(dt.getMonth()+3*parseInt(n)),dt},getQuarterStartMonth:function(date){var quarterStartMonth=0,nowMonth=date.getMonth();return nowMonth<3&&(quarterStartMonth=0),28&&(quarterStartMonth=9),quarterStartMonth},getQuarterStartDate:function(date){return BI.getDate(date.getFullYear(),BI.getQuarterStartMonth(date),1)},getQuarterEndDate:function(date){var quarterEndMonth=BI.getQuarterStartMonth(date)+2;return BI.getDate(date.getFullYear(),quarterEndMonth,BI.getMonthDays(date,quarterEndMonth))},getOffsetMonth:function(date,n){var dt=BI.getDate(BI.getTime(date.getFullYear(),date.getMonth(),date.getDate(),date.getHours(),date.getMinutes(),date.getSeconds())),day=dt.getDate(),monthDay=BI.getMonthDays(BI.getDate(dt.getFullYear(),dt.getMonth()+parseInt(n),1));return day>monthDay&&(day=monthDay),dt.setDate(day),dt.setMonth(dt.getMonth()+parseInt(n)),dt},getWeekStartDate:function(date){var w=date.getDay(),startOfWeek=BI.StartOfWeek%7;return BI.getOffsetDate(date,BI.Date._OFFSET[w=12,ir=pm?hr-12:hr,dy=BI.getDayOfYear(date);0==ir&&(ir=12);var min=date.getMinutes(),sec=date.getSeconds();s["%a"]=BI.Date._SDN[w],s["%A"]=BI.Date._DN[w],s["%b"]=BI.Date._SMN[m],s["%B"]=BI.Date._MN[m],s["%C"]=1+Math.floor(y/100),s["%d"]=d<10?"0"+d:d,s["%e"]=d,s["%H"]=hr<10?"0"+hr:hr,s["%I"]=ir<10?"0"+ir:ir,s["%j"]=dy<100?dy<10?"00"+dy:"0"+dy:dy,s["%k"]=hr+"",s["%l"]=ir+"",s["%X"]=m<9?"0"+(1+m):1+m,s["%x"]=m+1,s["%M"]=min<10?"0"+min:min,s["%n"]="\n",s["%p"]=pm?"PM":"AM",s["%P"]=pm?"pm":"am",s["%s"]=Math.floor(date.getTime()/1e3),s["%S"]=sec<10?"0"+sec:sec,s["%t"]="\t",s["%U"]=s["%W"]=s["%V"]=wn<10?"0"+wn:wn,s["%u"]=w+1,s["%w"]=w,s["%y"]=yWith4number.substr(2,2),s["%Y"]=yWith4number,s["%%"]="%",s["%Q"]=qr;var re=/%./g;if(BI.isKhtml=BI.isKhtml||function(){return!!_global.navigator&&/Konqueror|Safari|KHTML/i.test(navigator.userAgent)},!(str.indexOf("%Y")===-1&&str.indexOf("%y")===-1||str.indexOf("%W")===-1&&str.indexOf("%U")===-1&&str.indexOf("%V")===-1))switch(wn){case 1:11===m&&(s["%y"]=parseInt(s["%y"])+1,s["%Y"]=parseInt(s["%Y"])+1);break;case 53:0===m&&(s["%y"]=parseInt(s["%y"])-1,s["%Y"]=parseInt(s["%Y"])-1)}if(!BI.isKhtml())return str.replace(re,function(par){return s[par]||par});for(var a=str.match(re),i=0;i-1?text===keyword?isArray?matched.push(item):matched[i]=item:isArray?find.push(item):find[i]=item:(pidx=py.indexOf(keyword),pidx>-1&&Math.floor(pidx/text.length)===Math.floor((pidx+keyword.length-1)/text.length)&&(text===keyword||keyword.length===text.length?isArray?matched.push(item):matched[i]=item:isArray?find.push(item):find[i]=item))}}),{match:matched,find:find}}}),_.extend(BI,{beforeFunc:function(sFunc,func){var __self=sFunc;return function(){return func.apply(sFunc,arguments)!==!1&&__self.apply(sFunc,arguments)}},afterFunc:function(sFunc,func){var __self=sFunc;return function(){var ret=__self.apply(sFunc,arguments);return ret!==!1&&(func.apply(sFunc,arguments),ret)}}}),_.extend(BI,{add:function(num,arg){function accAdd(arg1,arg2){var r1,r2,m,c;try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}if(c=Math.abs(r1-r2),m=Math.pow(10,Math.max(r1,r2)),c>0){var cm=Math.pow(10,c);r1>r2?(arg1=Number(arg1.toString().replace(".","")),arg2=Number(arg2.toString().replace(".",""))*cm):(arg1=Number(arg1.toString().replace(".",""))*cm,arg2=Number(arg2.toString().replace(".","")))}else arg1=Number(arg1.toString().replace(".","")),arg2=Number(arg2.toString().replace(".",""));return(arg1+arg2)/m}return accAdd(arg,num)},sub:function(num,arg){function accSub(arg1,arg2){var r1,r2,m,n;try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}return m=Math.pow(10,Math.max(r1,r2)),n=r1>=r2?r1:r2,((arg1*m-arg2*m)/m).toFixed(n)}return accSub(num,arg)},mul:function(num,arg){function accMul(arg1,arg2){var m=0,s1=arg1.toString(),s2=arg2.toString();try{m+=s1.split(".")[1].length}catch(e){}try{m+=s2.split(".")[1].length}catch(e){}return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)}return accMul(arg,num)},div:function(num,arg){function digitLength(num){var eSplit=num.toString().split(/[eE]/),len=(eSplit[0].split(".")[1]||"").length-+(eSplit[1]||0);return len>0?len:0}function float2Fixed(num){if(num.toString().indexOf("e")===-1)return Number(num.toString().replace(".",""));var dLen=digitLength(num);return dLen>0?num*Math.pow(10,dLen):num}function times(num1,num2){for(var others=[],_i=2;_i0)return times.apply(void 0,[times(num1,num2),others[0]].concat(others.slice(1)));var num1Changed=float2Fixed(num1),num2Changed=float2Fixed(num2),baseNum=digitLength(num1)+digitLength(num2),leftValue=num1Changed*num2Changed;return leftValue/Math.pow(10,baseNum)}function accDivide(num1,num2){for(var others=[],_i=2;_i0)return accDivide.apply(void 0,[accDivide(num1,num2),others[0]].concat(others.slice(1)));var num1Changed=float2Fixed(num1),num2Changed=float2Fixed(num2);return times(num1Changed/num2Changed,Math.pow(10,digitLength(num2)-digitLength(num1)))}return accDivide(num,arg)}}),_.extend(BI,{startWith:function(str,startTag){return str=str||"",!(null==startTag||""==startTag||0===str.length||startTag.length>str.length)&&str.substr(0,startTag.length)==startTag},endWith:function(str,endTag){return!(null==endTag||""==endTag||0===str.length||endTag.length>str.length)&&str.substring(str.length-endTag.length)==endTag},getQuery:function(str,name){var reg=new RegExp("(^|&)"+name+"=([^&]*)(&|$)"),r=str.substr(str.indexOf("?")+1).match(reg);return r?unescape(r[2]):null},appendQuery:function(str,paras){if(!paras)return str;var src=str;return src.indexOf("?")===-1&&(src+="?"),src.endWith("?")!==!1||(src+="&"),_.each(paras,function(value,name){"string"==typeof name&&(src+=name+"="+value+"&")}),src=src.substr(0,src.length-1)},replaceAll:function(str,s1,s2){return str.replace(new RegExp(s1,"gm"),s2)},perfectStart:function(str,start){return str.startWith(start)?str:start+str},allIndexOf:function(str,sub){if("string"!=typeof sub)return[];for(var location=[],offset=0;str.length>0;){var loc=str.indexOf(sub);if(loc===-1)break;location.push(offset+loc),str=str.substring(loc+sub.length,str.length),offset+=loc+sub.length}return location}}),!function(){var i18nStore={};_.extend(BI,{addI18n:function(i18n){BI.extend(i18nStore,i18n)},i18nText:function(key){var localeText=i18nStore[key]||BI.i18n&&BI.i18n[key]||"";localeText||(localeText=key);var len=arguments.length;if(len>1){if(!(localeText.indexOf("{R1}")>-1)){var args=Array.prototype.slice.call(arguments),count=1;return BI.replaceAll(localeText,"\\{\\s*\\}",function(){return args[count++]+""})}for(var i=1;i1?v.toString():v[0]:v,BI.isNull(v))throw new Error("value cannot be null");var cardName=o.cardNameCreator(v);if(!o.cardLayout.isCardExisted(cardName)){var card=o.cardCreator(cardName);o.cardLayout.addCardByName(cardName,card),o.afterCardCreated(cardName)}o.cardLayout.showCardByName(cardName),BI.nextTick(function(){o.afterCardShow(cardName),self.fireEvent(BI.ShowListener.EVENT_CHANGE,cardName)})}})}}),BI.ShowListener.EVENT_CHANGE="EVENT_CHANGE",BI.StyleLoaderManager=BI.inherit(BI.OB,{_defaultConfig:function(){return BI.extend(BI.StyleLoaderManager.superclass._defaultConfig.apply(this,arguments),{})},_init:function(){BI.StyleLoaderManager.superclass._init.apply(this,arguments),this.stylesManager={}},loadStyle:function(name,styleString){if(_global.document){var d=document,styles=d.createElement("style");return d.getElementsByTagName("head")[0].appendChild(styles),styles.setAttribute("type","text/css"),styles.styleSheet?styles.styleSheet.cssText=styleString:styles.appendChild(document.createTextNode(styleString)),this.stylesManager[name]=styles,this}},get:function(name){return this.stylesManager[name]},has:function(name){return null!=this.stylesManager[name]},removeStyle:function(name){return this.has(name)?(this.stylesManager[name].parentNode.removeChild(this.stylesManager[name]),delete this.stylesManager[name],this):this}}),BI.Logic=BI.inherit(BI.OB,{createLogic:function(){return this.options||{}}}),BI.LogicFactory={Type:{Vertical:"vertical",Horizontal:"horizontal",Table:"table",HorizontalFill:"horizontal_fill"},createLogic:function(key,options){var logic;switch(key){case BI.LogicFactory.Type.Vertical:logic=BI.VerticalLayoutLogic;break;case BI.LogicFactory.Type.Horizontal:logic=BI.HorizontalLayoutLogic;break;case BI.LogicFactory.Type.Table:logic=BI.TableLayoutLogic;break;case BI.LogicFactory.Type.HorizontalFill:logic=BI.HorizontalFillLayoutLogic;break;default:logic=BI.Logic}return new logic(options).createLogic()},createLogicTypeByDirection:function(direction){switch(direction){case BI.Direction.Top:case BI.Direction.Bottom:case BI.Direction.Custom:return BI.LogicFactory.Type.Vertical;case BI.Direction.Left:case BI.Direction.Right:return BI.LogicFactory.Type.Horizontal}},createLogicItemsByDirection:function(direction){var layout,items=Array.prototype.slice.call(arguments,1);switch(items=BI.map(items,function(i,item){return BI.isWidget(item)?{el:item,width:item.options.width,height:item.options.height}:item}),direction){case BI.Direction.Bottom:layout=BI.LogicFactory.Type.Vertical,items.reverse();break;case BI.Direction.Right:layout=BI.LogicFactory.Type.Horizontal,items.reverse();break;case BI.Direction.Custom:items=items.slice(1)}return items}},BI.VerticalLayoutLogic=BI.inherit(BI.Logic,{_defaultConfig:function(){return BI.extend(BI.VerticalLayoutLogic.superclass._defaultConfig.apply(this,arguments),{dynamic:!1,scrollable:null,scrolly:!1,scrollx:!1,items:[],hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},createLogic:function(){var layout,o=this.options;return layout=o.dynamic?"bi.vertical":"bi.vtape",{type:layout,scrollable:o.scrollable,scrolly:o.scrolly,scrollx:o.scrollx,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,items:o.items}},_init:function(){BI.VerticalLayoutLogic.superclass._init.apply(this,arguments)}}),BI.HorizontalLayoutLogic=BI.inherit(BI.Logic,{_defaultConfig:function(){return BI.extend(BI.HorizontalLayoutLogic.superclass._defaultConfig.apply(this,arguments),{dynamic:!1,scrollable:null,scrolly:!1,scrollx:!1,items:[],hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},createLogic:function(){var layout,o=this.options;return layout=o.dynamic?"bi.vertical_adapt":"bi.htape",{type:layout,scrollable:o.scrollable,scrolly:o.scrolly,scrollx:o.scrollx,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,items:o.items}},_init:function(){BI.HorizontalLayoutLogic.superclass._init.apply(this,arguments)}}),BI.TableLayoutLogic=BI.inherit(BI.Logic,{_defaultConfig:function(){return BI.extend(BI.TableLayoutLogic.superclass._defaultConfig.apply(this,arguments),{dynamic:!1,scrollable:null,scrolly:!1,scrollx:!1,columns:0,rows:0,columnSize:[],rowSize:[],hgap:0,vgap:0,items:[]})},createLogic:function(){var layout,o=this.options;return layout=o.dynamic?"bi.table":"bi.window",{type:layout,scrollable:o.scrollable,scrolly:o.scrolly,scrollx:o.scrollx,columns:o.columns,rows:o.rows,columnSize:o.columnSize,rowSize:o.rowSize,hgap:o.hgap,vgap:o.vgap,items:o.items}},_init:function(){BI.TableLayoutLogic.superclass._init.apply(this,arguments)}}),BI.HorizontalFillLayoutLogic=BI.inherit(BI.Logic,{_defaultConfig:function(){return BI.extend(BI.HorizontalFillLayoutLogic.superclass._defaultConfig.apply(this,arguments),{dynamic:!1,scrollable:null,scrolly:!1,scrollx:!1,items:[],hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},createLogic:function(){var layout,o=this.options,columnSize=[];return BI.each(o.items,function(i,item){columnSize.push(item.width||0)}),layout=o.dynamic?"bi.horizontal_adapt":"bi.htape",{type:layout,columnSize:columnSize,scrollable:o.scrollable,scrolly:o.scrolly,scrollx:o.scrollx,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,items:o.items}},_init:function(){BI.HorizontalFillLayoutLogic.superclass._init.apply(this,arguments)}}),BI.prepares.push(function(){var _isSupportFlex,isSupportFlex=function(){return null==_isSupportFlex&&(_isSupportFlex=!(!BI.isSupportCss3||!BI.isSupportCss3("flex"))),_isSupportFlex};BI.Plugin.registerWidget("bi.horizontal",function(ob){var isIE=BI.isIE(),supportFlex=isSupportFlex(),isLessIE8=isIE&&BI.getIEVersion()<8;return ob.verticalAlign===BI.VerticalAlign.Middle&&ob.horizontalAlign===BI.HorizontalAlign.Center?isLessIE8?ob:BI.extend(ob,{type:"bi.table_adapt"}):ob.verticalAlign===BI.VerticalAlign.Middle&&ob.horizontalAlign===BI.HorizontalAlign.Left?isLessIE8?ob:BI.extend(ob,{type:"bi.table_adapt"}):ob.verticalAlign===BI.VerticalAlign.Top&&ob.horizontalAlign===BI.HorizontalAlign.Center?isLessIE8?ob:BI.extend(ob,{type:"bi.table_adapt"}):isIE?ob:supportFlex?BI.extend(ob,{type:"bi.flex_horizontal"}):BI.extend(ob,{type:"bi.table_adapt"})}),BI.Plugin.registerWidget("bi.center_adapt",function(ob){var isIE=BI.isIE(),supportFlex=isSupportFlex(),justOneItem=ob.items&&ob.items.length<=1;return!isIE&&supportFlex&&justOneItem?ob.scrollable===!0||ob.scrollx===!0||ob.scrolly===!0?BI.extend(ob,{type:"bi.flex_scrollable_center_adapt"}):BI.extend(ob,{type:"bi.flex_center_adapt"}):justOneItem?BI.extend(ob,{type:"bi.inline_center_adapt"}):ob}),BI.Plugin.registerWidget("bi.vertical_adapt",function(ob){ +var isIE=BI.isIE(),supportFlex=isSupportFlex();return!isIE&&supportFlex?ob.scrollable===!0||ob.scrollx===!0||ob.scrolly===!0?BI.extend({},ob,{type:"bi.flex_scrollable_vertical_center_adapt"}):BI.extend(ob,{type:"bi.flex_vertical_center_adapt"}):BI.extend(ob,{type:"bi.inline_vertical_adapt"})}),BI.Plugin.registerWidget("bi.horizontal_adapt",function(ob){return ob.items&&ob.items.length<=1?BI.extend(ob,{type:"bi.horizontal_auto"}):ob}),BI.Plugin.registerWidget("bi.float_center_adapt",function(ob){return!BI.isIE()&&isSupportFlex()?ob.scrollable===!0||ob.scrollx===!0||ob.scrolly===!0?BI.extend({},ob,{type:"bi.flex_scrollable_center_adapt"}):BI.extend(ob,{type:"bi.flex_center_adapt"}):BI.extend(ob,{type:"bi.inline_center_adapt"})}),BI.Plugin.registerWidget("bi.flex_horizontal",function(ob){if(ob.scrollable===!0||ob.scrolly===!0)return BI.extend({},ob,{type:"bi.flex_scrollable_horizontal"})}),BI.Plugin.registerWidget("bi.flex_vertical",function(ob){if(ob.scrollable===!0||ob.scrollx===!0)return BI.extend({},ob,{type:"bi.flex_scrollable_vertical"})}),BI.Plugin.registerWidget("bi.flex_horizontal_adapt",function(ob){if(ob.scrollable===!0||ob.scrollx===!0)return BI.extend({},ob,{type:"bi.flex_scrollable_horizontal_adapt"})}),BI.Plugin.registerWidget("bi.flex_vertical_adapt",function(ob){if(ob.scrollable===!0||ob.scrolly===!0)return BI.extend({},ob,{type:"bi.flex_scrollable_vertical_adapt"})}),BI.Plugin.registerWidget("bi.flex_horizontal_center_adapt",function(ob){if(ob.scrollable===!0||ob.scrollx===!0)return BI.extend({},ob,{type:"bi.flex_scrollable_horizontal_adapt"})}),BI.Plugin.registerWidget("bi.flex_vertical_center_adapt",function(ob){if(ob.scrollable===!0||ob.scrolly===!0)return BI.extend({},ob,{type:"bi.flex_scrollable_vertical_adapt"})}),BI.Plugin.registerWidget("bi.flex_center_adapt",function(ob){if(ob.scrollable===!0||ob.scrolly===!0||ob.scrollx===!0)return BI.extend({},ob,{type:"bi.flex_scrollable_center_adapt"})}),BI.Plugin.registerWidget("bi.radio",function(ob){return BI.isIE()&&BI.getIEVersion()<9?BI.extend(ob,{type:"bi.image_radio"}):ob}),BI.Plugin.registerWidget("bi.checkbox",function(ob){return BI.isIE()&&BI.getIEVersion()<9?BI.extend(ob,{type:"bi.image_checkbox"}):ob}),BI.Plugin.registerWidget("bi.half_icon_button",function(ob){return BI.isIE()&&BI.getIEVersion()<9?ob:BI.extend(ob,{type:"bi.half_button"})})}),!function(){var attachEvent=_global.document&&_global.document.attachEvent,stylesCreated=!1;if(_global.document&&!attachEvent){var requestFrame=function(){var raf=_global.requestAnimationFrame||_global.mozRequestAnimationFrame||_global.webkitRequestAnimationFrame||function(fn){return _global.setTimeout(fn,20)};return function(fn){return raf(fn)}}(),cancelFrame=function(){var cancel=_global.cancelAnimationFrame||_global.mozCancelAnimationFrame||_global.webkitCancelAnimationFrame||_global.clearTimeout;return function(id){return cancel(id)}}(),resetTriggers=function(element){var triggers=element.__resizeTriggers__,expand=triggers.firstElementChild,contract=triggers.lastElementChild,expandChild=expand.firstElementChild;contract.scrollLeft=contract.scrollWidth,contract.scrollTop=contract.scrollHeight,expandChild.style.width=expand.offsetWidth+1+"px",expandChild.style.height=expand.offsetHeight+1+"px",expand.scrollLeft=expand.scrollWidth,expand.scrollTop=expand.scrollHeight},checkTriggers=function(element){return element.offsetWidth!==element.__resizeLast__.width||element.offsetHeight!==element.__resizeLast__.height},scrollListener=function(e){var element=this;resetTriggers(this),this.__resizeRAF__&&cancelFrame(this.__resizeRAF__),this.__resizeRAF__=requestFrame(function(){checkTriggers(element)&&(element.__resizeLast__.width=element.offsetWidth,element.__resizeLast__.height=element.offsetHeight,element.__resizeListeners__.forEach(function(fn){fn.call(element,e)}))})},animation=!1,animationstring="animation",keyframeprefix="",animationstartevent="animationstart",domPrefixes="Webkit Moz O ms".split(" "),startEvents="webkitAnimationStart animationstart oAnimationStart MSAnimationStart".split(" "),pfx="",elm=document.createElement("fakeelement");if(void 0!==elm.style.animationName&&(animation=!0),animation===!1)for(var i=0;i div, .contract-trigger:before { content: " "; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',head=document.head||document.getElementsByTagName("head")[0],style=document.createElement("style");style.type="text/css",style.styleSheet?style.styleSheet.cssText=css:style.appendChild(document.createTextNode(css)),head.appendChild(style),stylesCreated=!0}},addResizeListener=function(element,fn){attachEvent?(element.attachEvent("onresize",fn),BI.nextTick(fn)):(element.__resizeTriggers__||("static"===getComputedStyle(element).position&&(element.style.position="relative"),createStyles(),element.__resizeLast__={},element.__resizeListeners__=[],(element.__resizeTriggers__=document.createElement("div")).className="resize-triggers",element.__resizeTriggers__.innerHTML='

',element.appendChild(element.__resizeTriggers__),resetTriggers(element),element.addEventListener("scroll",scrollListener,!0),animationstartevent&&element.__resizeTriggers__.addEventListener(animationstartevent,function(e){e.animationName===animationName&&resetTriggers(element)})),element.__resizeListeners__.push(fn))},removeResizeListener=function(element,fn){attachEvent?element.detachEvent("onresize",fn):(element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn),1),element.__resizeListeners__.length||(element.removeEventListener("scroll",scrollListener),element.__resizeTriggers__=!element.removeChild(element.__resizeTriggers__)))};BI.ResizeDetector={addResizeListener:function(widget,fn){return addResizeListener(widget.element[0],fn),function(){removeResizeListener(widget.element[0],fn)}},removeResizeListener:function(widget,fn){removeResizeListener(widget.element[0],fn)}}}(),!function(){BI.DOM={},BI.extend(BI.DOM,{ready:function(fn){BI.Widget._renderEngine.createElement(document).ready(fn)}}),BI.extend(BI.DOM,{patchProps:function(fromElement,toElement){var elemData=BI.jQuery._data(fromElement[0]),events=elemData.events;BI.each(events,function(eventKey,event){BI.each(event,function(i,handler){toElement.on(eventKey+(handler.namespace?"."+handler.namespace:""),handler)})});var fromChildren=fromElement.children(),toChildren=toElement.children();if(fromChildren.length!==toChildren.length)throw new Error("不匹配");BI.each(fromChildren,function(i,child){BI.DOM.patchProps(BI.jQuery(child),BI.jQuery(toChildren[i]))}),BI.each(fromElement.data("__widgets"),function(i,widget){widget.element=toElement})},hang:function(doms){if(!BI.isEmpty(doms)){var frag=BI.Widget._renderEngine.createFragment();return BI.each(doms,function(i,dom){dom instanceof BI.Widget&&(dom=dom.element),dom instanceof BI.$&&dom[0]&&frag.appendChild(dom[0])}),frag}},isExist:function(obj){return BI.Widget._renderEngine.createElement("body").find(obj.element).length>0},preloadImages:function(srcArray,onload){function complete(){count++,count>=srcArray.length&&onload()}var count=0,images=[];BI.each(srcArray,function(i,src){images[i]=new Image,images[i].src=src,images[i].onload=function(){complete()},images[i].onerror=function(){complete()}})},getTextSizeWidth:function(text,fontSize){var span=BI.Widget._renderEngine.createElement("").addClass("text-width-span").appendTo("body");null==fontSize&&(fontSize=12),fontSize+="px",span.css("font-size",fontSize).text(text);var width=span.width();return span.remove(),width},getTextSizeHeight:function(text,fontSize){var span=BI.Widget._renderEngine.createElement("").addClass("text-width-span").appendTo("body");null==fontSize&&(fontSize=12),fontSize+="px",span.css("font-size",fontSize).text(text);var height=span.height();return span.remove(),height},getScrollWidth:function(){if(BI.isNull(this._scrollWidth)||0===this._scrollWidth){var ul=BI.Widget._renderEngine.createElement("
").width(50).height(50).css({position:"absolute",top:"-9999px",overflow:"scroll"}).appendTo("body");this._scrollWidth=ul[0].offsetWidth-ul[0].clientWidth,ul.destroy()}return this._scrollWidth},getImage:function(param,fillStyle,backgroundColor){var canvas=document.createElement("canvas"),ratio=2;BI.Widget._renderEngine.createElement("body").append(canvas);var ctx=canvas.getContext("2d");ctx.font="12px Georgia";var w=ctx.measureText(param).width+4;canvas.width=w*ratio,canvas.height=16*ratio,ctx.font=12*ratio+"px Georgia",ctx.fillStyle=fillStyle||"#3685f2",ctx.textBaseline="middle",ctx.fillText(param,2*ratio,9*ratio),BI.Widget._renderEngine.createElement(canvas).destroy();var backColor=backgroundColor||"rgba(54, 133, 242, 0.1)";return{width:w,height:16,src:canvas.toDataURL("image/png"),style:"background-color: "+backColor+";vertical-align: middle; margin: 0 1px; width:"+w+"px;height: 16px; max-width:"+w+"px;max-height: 16px; min-width:"+w+"px;min-height: 16px",param:param}}}),BI.extend(BI.DOM,{isColor:function(color){return color&&(this.isRGBColor(color)||this.isHexColor(color))},isRGBColor:function(color){return!!color&&"rgb"===color.substr(0,3)},isHexColor:function(color){return!!color&&("#"===color[0]&&7===color.length)},isDarkColor:function(hex){if(!hex||!this.isHexColor(hex))return!1;var rgb=this.rgb2json(this.hex2rgb(hex)),grayLevel=Math.round(.299*rgb.r+.587*rgb.g+.114*rgb.b);return grayLevel<192},getContrastColor:function(color){return color&&this.isColor(color)?this.isDarkColor(color)?"#ffffff":"#1a1a1a":""},rgb2hex:function(rgbColour){if(!rgbColour||"rgb"!=rgbColour.substr(0,3))return"";var rgbValues=rgbColour.match(/\d+(\.\d+)?/g),red=BI.parseInt(rgbValues[0]),green=BI.parseInt(rgbValues[1]),blue=BI.parseInt(rgbValues[2]),hexColour="#"+this.int2hex(red)+this.int2hex(green)+this.int2hex(blue);return hexColour},rgb2json:function(rgbColour){if(!rgbColour)return{};if(!this.isRGBColor(rgbColour))return{};var rgbValues=rgbColour.match(/\d+(\.\d+)?/g);return{r:BI.parseInt(rgbValues[0]),g:BI.parseInt(rgbValues[1]),b:BI.parseInt(rgbValues[2])}},rgba2json:function(rgbColour){if(!rgbColour)return{};var rgbValues=rgbColour.match(/\d+(\.\d+)?/g);return{r:BI.parseInt(rgbValues[0]),g:BI.parseInt(rgbValues[1]),b:BI.parseInt(rgbValues[2]),a:BI.parseFloat(rgbValues[3])}},json2rgb:function(rgb){return BI.isKey(rgb.r)&&BI.isKey(rgb.g)&&BI.isKey(rgb.b)?"rgb("+rgb.r+","+rgb.g+","+rgb.b+")":""},json2rgba:function(rgba){return BI.isKey(rgba.r)&&BI.isKey(rgba.g)&&BI.isKey(rgba.b)?"rgba("+rgba.r+","+rgba.g+","+rgba.b+","+rgba.a+")":""},int2hex:function(strNum){var hexdig=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];return hexdig[strNum>>>4]+""+hexdig[15&strNum]},hex2rgb:function(color){if(!color)return"";if(!this.isHexColor(color))return color;var tempValue="rgb(",colorArray;return 7===color.length?colorArray=[BI.parseInt("0x"+color.substring(1,3)),BI.parseInt("0x"+color.substring(3,5)),BI.parseInt("0x"+color.substring(5,7))]:4===color.length&&(colorArray=[BI.parseInt("0x"+color.substring(1,2)),BI.parseInt("0x"+color.substring(2,3)),BI.parseInt("0x"+color.substring(3,4))]),tempValue+=colorArray[0]+",",tempValue+=colorArray[1]+",",tempValue+=colorArray[2]+")"},rgba2rgb:function(rgbColor,bgColor){if(BI.isNull(bgColor)&&(bgColor=1),"rgba"!=rgbColor.substr(0,4))return"";var rgbValues=rgbColor.match(/\d+(\.\d+)?/g);if(rgbValues.length<4)return"";var R=BI.parseFloat(rgbValues[0]),G=BI.parseFloat(rgbValues[1]),B=BI.parseFloat(rgbValues[2]),A=BI.parseFloat(rgbValues[3]);return"rgb("+Math.floor(255*(bgColor*(1-A))+R*A)+","+Math.floor(255*(bgColor*(1-A))+G*A)+","+Math.floor(255*(bgColor*(1-A))+B*A)+")"}}),BI.extend(BI.DOM,{getLeftPosition:function(combo,popup,extraWidth){return{left:combo.element.offset().left-popup.element.outerWidth()-(extraWidth||0)}},getInnerLeftPosition:function(combo,popup,extraWidth){return{left:combo.element.offset().left+(extraWidth||0)}},getRightPosition:function(combo,popup,extraWidth){var el=combo.element;return{left:el.offset().left+el.outerWidth()+(extraWidth||0)}},getInnerRightPosition:function(combo,popup,extraWidth){var el=combo.element,viewBounds=popup.element.bounds();return{left:el.offset().left+el.outerWidth()-viewBounds.width-(extraWidth||0)}},getTopPosition:function(combo,popup,extraHeight){return{top:combo.element.offset().top-popup.element.outerHeight()-(extraHeight||0)}},getBottomPosition:function(combo,popup,extraHeight){var el=combo.element;return{top:el.offset().top+el.outerHeight()+(extraHeight||0)}},isLeftSpaceEnough:function(combo,popup,extraWidth){return BI.DOM.getLeftPosition(combo,popup,extraWidth).left>=0},isInnerLeftSpaceEnough:function(combo,popup,extraWidth){var viewBounds=popup.element.bounds(),windowBounds=BI.Widget._renderEngine.createElement("body").bounds();return BI.DOM.getInnerLeftPosition(combo,popup,extraWidth).left+viewBounds.width<=windowBounds.width},isRightSpaceEnough:function(combo,popup,extraWidth){var viewBounds=popup.element.bounds(),windowBounds=BI.Widget._renderEngine.createElement("body").bounds();return BI.DOM.getRightPosition(combo,popup,extraWidth).left+viewBounds.width<=windowBounds.width},isInnerRightSpaceEnough:function(combo,popup,extraWidth){return BI.DOM.getInnerRightPosition(combo,popup,extraWidth).left>=0},isTopSpaceEnough:function(combo,popup,extraHeight){return BI.DOM.getTopPosition(combo,popup,extraHeight).top>=0},isBottomSpaceEnough:function(combo,popup,extraHeight){var viewBounds=popup.element.bounds(),windowBounds=BI.Widget._renderEngine.createElement("body").bounds();return BI.DOM.getBottomPosition(combo,popup,extraHeight).top+viewBounds.height<=windowBounds.height},isRightSpaceLarger:function(combo){var windowBounds=BI.Widget._renderEngine.createElement("body").bounds();return windowBounds.width-combo.element.offset().left-combo.element.bounds().width>=combo.element.offset().left},isBottomSpaceLarger:function(combo){var windowBounds=BI.Widget._renderEngine.createElement("body").bounds();return windowBounds.height-combo.element.offset().top-combo.element.bounds().height>=combo.element.offset().top},getLeftAlignPosition:function(combo,popup,extraWidth){var viewBounds=popup.element.bounds(),windowBounds=BI.Widget._renderEngine.createElement("body").bounds(),left=combo.element.offset().left+extraWidth;return left+viewBounds.width>windowBounds.width&&(left=windowBounds.width-viewBounds.width),left<0&&(left=0),{left:left}},getLeftAdaptPosition:function(combo,popup,extraWidth){return BI.DOM.isLeftSpaceEnough(combo,popup,extraWidth)?BI.DOM.getLeftPosition(combo,popup,extraWidth):{left:0}},getRightAlignPosition:function(combo,popup,extraWidth){var comboBounds=combo.element.bounds(),viewBounds=popup.element.bounds(),left=combo.element.offset().left+comboBounds.width-viewBounds.width-extraWidth;return left<0&&(left=0),{left:left}},getRightAdaptPosition:function(combo,popup,extraWidth){return BI.DOM.isRightSpaceEnough(combo,popup,extraWidth)?BI.DOM.getRightPosition(combo,popup,extraWidth):{left:BI.Widget._renderEngine.createElement("body").bounds().width-popup.element.bounds().width}},getTopAlignPosition:function(combo,popup,extraHeight,needAdaptHeight){var comboOffset=combo.element.offset(),comboBounds=combo.element.bounds(),popupBounds=popup.element.bounds(),windowBounds=BI.Widget._renderEngine.createElement("body").bounds(),top,adaptHeight;return BI.DOM.isBottomSpaceEnough(combo,popup,-1*comboBounds.height+extraHeight)?top=comboOffset.top+extraHeight:needAdaptHeight?(top=comboOffset.top+extraHeight,adaptHeight=windowBounds.height-top):(top=windowBounds.height-popupBounds.height,topwindowBounds.height?{top:0,adaptHeight:windowBounds.height-extraHeight}:{top:0}},getBottomAlignPosition:function(combo,popup,extraHeight,needAdaptHeight){var comboOffset=combo.element.offset(),comboBounds=combo.element.bounds(),popupBounds=popup.element.bounds(),windowBounds=BI.Widget._renderEngine.createElement("body").bounds(),top,adaptHeight;return BI.DOM.isTopSpaceEnough(combo,popup,-1*comboBounds.height+extraHeight)?top=comboOffset.top+comboBounds.height-popupBounds.height-extraHeight:needAdaptHeight?(top=0,adaptHeight=comboOffset.top+comboBounds.height-extraHeight):(top=0,popupBounds.height+extraHeight>windowBounds.height&&(adaptHeight=windowBounds.height-extraHeight)),top<0&&(top=0),adaptHeight?{top:top,adaptHeight:adaptHeight}:{top:top}},getBottomAdaptPosition:function(combo,popup,extraHeight,needAdaptHeight){var comboOffset=combo.element.offset(),comboBounds=combo.element.bounds(),popupBounds=popup.element.bounds(),windowBounds=BI.Widget._renderEngine.createElement("body").bounds();return BI.DOM.isBottomSpaceEnough(combo,popup,extraHeight)?BI.DOM.getBottomPosition(combo,popup,extraHeight):needAdaptHeight?{top:comboOffset.top+comboBounds.height+extraHeight,adaptHeight:windowBounds.height-comboOffset.top-comboBounds.height-extraHeight}:popupBounds.height+extraHeight>windowBounds.height?{top:extraHeight,adaptHeight:windowBounds.height-extraHeight}:{top:windowBounds.height-popupBounds.height-extraHeight}},getCenterAdaptPosition:function(combo,popup){var comboOffset=combo.element.offset(),comboBounds=combo.element.bounds(),popupBounds=popup.element.bounds(),windowBounds=BI.Widget._renderEngine.createElement("body").bounds(),left;return left=comboOffset.left+comboBounds.width/2+popupBounds.width/2>windowBounds.width?windowBounds.width-popupBounds.width:comboOffset.left+comboBounds.width/2-popupBounds.width/2,left<0&&(left=0),{left:left}},getMiddleAdaptPosition:function(combo,popup){var comboOffset=combo.element.offset(),comboBounds=combo.element.bounds(),popupBounds=popup.element.bounds(),windowBounds=BI.Widget._renderEngine.createElement("body").bounds(),top;return top=comboOffset.top+comboBounds.height/2+popupBounds.height/2>windowBounds.height?windowBounds.height-popupBounds.height:comboOffset.top+comboBounds.height/2-popupBounds.height/2,top<0&&(top=0),{top:top}},getComboPositionByDirections:function(combo,popup,extraWidth,extraHeight,needAdaptHeight,directions){extraWidth||(extraWidth=0),extraHeight||(extraHeight=0);var i,direct,leftRight=[],topBottom=[],innerLeftRight=[],isNeedAdaptHeight=!1,tbFirst=!1,lrFirst=!1,left,top,pos,firstDir=directions[0];for(i=0;i0&&length-1 in obj)))}function createOptions(options){var object=optionsCache[options]={};return jQuery.each(options.match(core_rnotwhite)||[],function(_,flag){object[flag]=!0}),object}function internalData(elem,name,data,pvt){if(jQuery.acceptData(elem)){var thisCache,ret,internalKey=jQuery.expando,getByName="string"==typeof name,isNode=elem.nodeType,cache=isNode?jQuery.cache:elem,id=isNode?elem[internalKey]:elem[internalKey]&&internalKey;if(id&&cache[id]&&(pvt||cache[id].data)||!getByName||data!==undefined)return id||(isNode?elem[internalKey]=id=core_deletedIds.pop()||jQuery.guid++:id=internalKey),cache[id]||(cache[id]={},isNode||(cache[id].toJSON=jQuery.noop)),"object"!=typeof name&&"function"!=typeof name||(pvt?cache[id]=jQuery.extend(cache[id],name):cache[id].data=jQuery.extend(cache[id].data,name)),thisCache=cache[id],pvt||(thisCache.data||(thisCache.data={}),thisCache=thisCache.data),data!==undefined&&(thisCache[jQuery.camelCase(name)]=data),getByName?(ret=thisCache[name],null==ret&&(ret=thisCache[jQuery.camelCase(name)])):ret=thisCache,ret}}function internalRemoveData(elem,name,pvt){if(jQuery.acceptData(elem)){var i,l,thisCache,isNode=elem.nodeType,cache=isNode?jQuery.cache:elem,id=isNode?elem[jQuery.expando]:jQuery.expando;if(cache[id]){if(name&&(thisCache=pvt?cache[id]:cache[id].data)){jQuery.isArray(name)?name=name.concat(jQuery.map(name,jQuery.camelCase)):name in thisCache?name=[name]:(name=jQuery.camelCase(name),name=name in thisCache?[name]:name.split(" "));for(i=0,l=name.length;i=0===keep})}function createSafeFragment(document){var list=nodeNames.split("|"),safeFrag=document.createDocumentFragment();if(safeFrag.createElement)for(;list.length;)safeFrag.createElement(list.pop());return safeFrag}function findOrAppend(elem,tag){return elem.getElementsByTagName(tag)[0]||elem.appendChild(elem.ownerDocument.createElement(tag))}function disableScript(elem){var attr=elem.getAttributeNode("type");return elem.type=(attr&&attr.specified)+"/"+elem.type,elem}function restoreScript(elem){var match=rscriptTypeMasked.exec(elem.type);return match?elem.type=match[1]:elem.removeAttribute("type"),elem}function setGlobalEval(elems,refElements){for(var elem,i=0;null!=(elem=elems[i]);i++)jQuery._data(elem,"globalEval",!refElements||jQuery._data(refElements[i],"globalEval"))}function cloneCopyEvent(src,dest){if(1===dest.nodeType&&jQuery.hasData(src)){var type,i,l,oldData=jQuery._data(src),curData=jQuery._data(dest,oldData),events=oldData.events;if(events){delete curData.handle,curData.events={};for(type in events)for(i=0,l=events[type].length;i").css("cssText","display:block !important")).appendTo(doc.documentElement),doc=(iframe[0].contentWindow||iframe[0].contentDocument).document,doc.write(""),doc.close(),display=actualDisplay(nodeName,doc),iframe.detach()),elemdisplay[nodeName]=display),display}function actualDisplay(name,doc){var elem=jQuery(doc.createElement(name)).appendTo(doc.body),display=jQuery.css(elem[0],"display");return elem.remove(),display}function buildParams(prefix,obj,traditional,add){var name;if(jQuery.isArray(obj))jQuery.each(obj,function(i,v){traditional||rbracket.test(prefix)?add(prefix,v):buildParams(prefix+"["+("object"==typeof v?i:"")+"]",v,traditional,add)});else if(traditional||"object"!==jQuery.type(obj))add(prefix,obj);else for(name in obj)buildParams(prefix+"["+name+"]",obj[name],traditional,add)}function addToPrefiltersOrTransports(structure){return function(dataTypeExpression,func){"string"!=typeof dataTypeExpression&&(func=dataTypeExpression,dataTypeExpression="*");var dataType,i=0,dataTypes=dataTypeExpression.toLowerCase().match(core_rnotwhite)||[];if(jQuery.isFunction(func))for(;dataType=dataTypes[i++];)"+"===dataType[0]?(dataType=dataType.slice(1)||"*",(structure[dataType]=structure[dataType]||[]).unshift(func)):(structure[dataType]=structure[dataType]||[]).push(func)}}function inspectPrefiltersOrTransports(structure,options,originalOptions,jqXHR){function inspect(dataType){var selected;return inspected[dataType]=!0,jQuery.each(structure[dataType]||[],function(_,prefilterOrFactory){var dataTypeOrTransport=prefilterOrFactory(options,originalOptions,jqXHR);return"string"!=typeof dataTypeOrTransport||seekingTransport||inspected[dataTypeOrTransport]?seekingTransport?!(selected=dataTypeOrTransport):void 0:(options.dataTypes.unshift(dataTypeOrTransport),inspect(dataTypeOrTransport),!1)}),selected}var inspected={},seekingTransport=structure===transports;return inspect(options.dataTypes[0])||!inspected["*"]&&inspect("*")}function ajaxExtend(target,src){var deep,key,flatOptions=jQuery.ajaxSettings.flatOptions||{};for(key in src)src[key]!==undefined&&((flatOptions[key]?target:deep||(deep={}))[key]=src[key]);return deep&&jQuery.extend(!0,target,deep),target}function ajaxHandleResponses(s,jqXHR,responses){var firstDataType,ct,finalDataType,type,contents=s.contents,dataTypes=s.dataTypes,responseFields=s.responseFields;for(type in responseFields)type in responses&&(jqXHR[responseFields[type]]=responses[type]);for(;"*"===dataTypes[0];)dataTypes.shift(),ct===undefined&&(ct=s.mimeType||jqXHR.getResponseHeader("Content-Type"));if(ct)for(type in contents)if(contents[type]&&contents[type].test(ct)){dataTypes.unshift(type);break}if(dataTypes[0]in responses)finalDataType=dataTypes[0];else{for(type in responses){if(!dataTypes[0]||s.converters[type+" "+dataTypes[0]]){finalDataType=type;break}firstDataType||(firstDataType=type)}finalDataType=finalDataType||firstDataType}if(finalDataType)return finalDataType!==dataTypes[0]&&dataTypes.unshift(finalDataType),responses[finalDataType]}function ajaxConvert(s,response){var conv2,current,conv,tmp,converters={},i=0,dataTypes=s.dataTypes.slice(),prev=dataTypes[0];if(s.dataFilter&&(response=s.dataFilter(response,s.dataType)),dataTypes[1])for(conv in s.converters)converters[conv.toLowerCase()]=s.converters[conv];for(;current=dataTypes[++i];)if("*"!==current){if("*"!==prev&&prev!==current){if(conv=converters[prev+" "+current]||converters["* "+current],!conv)for(conv2 in converters)if(tmp=conv2.split(" "),tmp[1]===current&&(conv=converters[prev+" "+tmp[0]]||converters["* "+tmp[0]])){conv===!0?conv=converters[conv2]:converters[conv2]!==!0&&(current=tmp[0],dataTypes.splice(i--,0,current));break}if(conv!==!0)if(conv&&s["throws"])response=conv(response);else try{response=conv(response)}catch(e){return{state:"parsererror",error:conv?e:"No conversion from "+prev+" to "+current}}}prev=current}return{state:"success",data:response}}function createStandardXHR(){try{return new window.XMLHttpRequest}catch(e){}}function createActiveXHR(){try{return new window.ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}function createFxNow(){return setTimeout(function(){fxNow=undefined}),fxNow=jQuery.now()}function createTweens(animation,props){jQuery.each(props,function(prop,value){for(var collection=(tweeners[prop]||[]).concat(tweeners["*"]),index=0,length=collection.length;index)[^>]*|#([\w-]*))$/,rsingleTag=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,rvalidchars=/^[\],:{}\s]*$/,rvalidbraces=/(?:^|:|,)(?:\s*\[)+/g,rvalidescape=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,rvalidtokens=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,rmsPrefix=/^-ms-/,rdashAlpha=/-([\da-z])/gi,fcamelCase=function(all,letter){return letter.toUpperCase()},completed=function(event){(document.addEventListener||"load"===event.type||"complete"===document.readyState)&&(detach(),jQuery.ready())},detach=function(){document.addEventListener?(document.removeEventListener("DOMContentLoaded",completed,!1),window.removeEventListener("load",completed,!1)):(document.detachEvent("onreadystatechange",completed),window.detachEvent("onload",completed))};jQuery.fn=jQuery.prototype={jquery:core_version,constructor:jQuery,init:function(selector,context,rootjQuery){var match,elem;if(!selector)return this;if("string"==typeof selector){if(match="<"===selector.charAt(0)&&">"===selector.charAt(selector.length-1)&&selector.length>=3?[null,selector,null]:rquickExpr.exec(selector),!match||!match[1]&&context)return!context||context.jquery?(context||rootjQuery).find(selector):this.constructor(context).find(selector);if(match[1]){if(context=context instanceof jQuery?context[0]:context,jQuery.merge(this,jQuery.parseHTML(match[1],context&&context.nodeType?context.ownerDocument||context:document,!0)),rsingleTag.test(match[1])&&jQuery.isPlainObject(context))for(match in context)jQuery.isFunction(this[match])?this[match](context[match]):this.attr(match,context[match]);return this}if(elem=document.getElementById(match[2]),elem&&elem.parentNode){if(elem.id!==match[2])return rootjQuery.find(selector);this.length=1,this[0]=elem}return this.context=document,this.selector=selector,this}return selector.nodeType?(this.context=this[0]=selector,this.length=1,this):jQuery.isFunction(selector)?rootjQuery.ready(selector):(selector.selector!==undefined&&(this.selector=selector.selector,this.context=selector.context),jQuery.makeArray(selector,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return core_slice.call(this)},get:function(num){return null==num?this.toArray():num<0?this[this.length+num]:this[num]},pushStack:function(elems){var ret=jQuery.merge(this.constructor(),elems);return ret.prevObject=this,ret.context=this.context,ret},each:function(callback,args){return jQuery.each(this,callback,args)},ready:function(fn){return jQuery.ready.promise().done(fn),this},slice:function(){return this.pushStack(core_slice.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(i){var len=this.length,j=+i+(i<0?len:0);return this.pushStack(j>=0&&j0||(readyList.resolveWith(document,[jQuery]),jQuery.fn.trigger&&jQuery(document).trigger("ready").off("ready"))}},isFunction:function(obj){return"function"===jQuery.type(obj)},isArray:Array.isArray||function(obj){return"array"===jQuery.type(obj)},isWindow:function(obj){return null!=obj&&obj==obj.window},isNumeric:function(obj){return!isNaN(parseFloat(obj))&&isFinite(obj)},type:function(obj){return null==obj?String(obj):"object"==typeof obj||"function"==typeof obj?class2type[core_toString.call(obj)]||"object":typeof obj},isPlainObject:function(obj){if(!obj||"object"!==jQuery.type(obj)||obj.nodeType||jQuery.isWindow(obj))return!1;try{if(obj.constructor&&!core_hasOwn.call(obj,"constructor")&&!core_hasOwn.call(obj.constructor.prototype,"isPrototypeOf"))return!1}catch(e){return!1}var key;for(key in obj);return key===undefined||core_hasOwn.call(obj,key)},isEmptyObject:function(obj){var name;for(name in obj)return!1;return!0},error:function(msg){throw new Error(msg)},parseHTML:function(data,context,keepScripts){if(!data||"string"!=typeof data)return null;"boolean"==typeof context&&(keepScripts=context,context=!1),context=context||document;var parsed=rsingleTag.exec(data),scripts=!keepScripts&&[];return parsed?[context.createElement(parsed[1])]:(parsed=jQuery.buildFragment([data],context,scripts),scripts&&jQuery(scripts).remove(),jQuery.merge([],parsed.childNodes))},parseJSON:function(data){return window.JSON&&window.JSON.parse?window.JSON.parse(data):null===data?data:"string"==typeof data&&(data=jQuery.trim(data),data&&rvalidchars.test(data.replace(rvalidescape,"@").replace(rvalidtokens,"]").replace(rvalidbraces,"")))?new Function("return "+data)():void jQuery.error("Invalid JSON: "+data)},parseXML:function(data){var xml,tmp;if(!data||"string"!=typeof data)return null;try{window.DOMParser?(tmp=new DOMParser,xml=tmp.parseFromString(data,"text/xml")):(xml=new ActiveXObject("Microsoft.XMLDOM"),xml.async="false",xml.loadXML(data))}catch(e){xml=undefined}return xml&&xml.documentElement&&!xml.getElementsByTagName("parsererror").length||jQuery.error("Invalid XML: "+data),xml},noop:function(){},globalEval:function(data){data&&jQuery.trim(data)&&(window.execScript||function(data){window.eval.call(window,data)})(data)},camelCase:function(string){return string.replace(rmsPrefix,"ms-").replace(rdashAlpha,fcamelCase)},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toLowerCase()===name.toLowerCase()},each:function(obj,callback,args){var value,i=0,length=obj.length,isArray=isArraylike(obj);if(args){if(isArray)for(;i-1;)list.splice(index,1),firing&&(index<=firingLength&&firingLength--,index<=firingIndex&&firingIndex--)}),this},has:function(fn){return fn?jQuery.inArray(fn,list)>-1:!(!list||!list.length)},empty:function(){return list=[],this},disable:function(){return list=stack=memory=undefined,this},disabled:function(){return!list},lock:function(){return stack=undefined,memory||self.disable(),this},locked:function(){return!stack},fireWith:function(context,args){return args=args||[],args=[context,args.slice?args.slice():args],!list||fired&&!stack||(firing?stack.push(args):fire(args)),this},fire:function(){return self.fireWith(this,arguments),this},fired:function(){return!!fired}};return self},jQuery.extend({Deferred:function(func){var tuples=[["resolve","done",jQuery.Callbacks("once memory"),"resolved"],["reject","fail",jQuery.Callbacks("once memory"),"rejected"],["notify","progress",jQuery.Callbacks("memory")]],state="pending",promise={state:function(){return state},always:function(){return deferred.done(arguments).fail(arguments),this},then:function(){var fns=arguments;return jQuery.Deferred(function(newDefer){jQuery.each(tuples,function(i,tuple){var action=tuple[0],fn=jQuery.isFunction(fns[i])&&fns[i];deferred[tuple[1]](function(){var returned=fn&&fn.apply(this,arguments);returned&&jQuery.isFunction(returned.promise)?returned.promise().done(newDefer.resolve).fail(newDefer.reject).progress(newDefer.notify):newDefer[action+"With"](this===promise?newDefer.promise():this,fn?[returned]:arguments)})}),fns=null}).promise()},promise:function(obj){return null!=obj?jQuery.extend(obj,promise):promise}},deferred={};return promise.pipe=promise.then,jQuery.each(tuples,function(i,tuple){var list=tuple[2],stateString=tuple[3];promise[tuple[1]]=list.add,stateString&&list.add(function(){state=stateString},tuples[1^i][2].disable,tuples[2][2].lock),deferred[tuple[0]]=function(){return deferred[tuple[0]+"With"](this===deferred?promise:this,arguments),this},deferred[tuple[0]+"With"]=list.fireWith}),promise.promise(deferred),func&&func.call(deferred,deferred),deferred},when:function(subordinate){var i=0,resolveValues=core_slice.call(arguments),length=resolveValues.length,remaining=1!==length||subordinate&&jQuery.isFunction(subordinate.promise)?length:0,deferred=1===remaining?subordinate:jQuery.Deferred(),updateFunc=function(i,contexts,values){return function(value){contexts[i]=this,values[i]=arguments.length>1?core_slice.call(arguments):value,values===progressValues?deferred.notifyWith(contexts,values):--remaining||deferred.resolveWith(contexts,values)}},progressValues,progressContexts,resolveContexts;if(length>1)for(progressValues=new Array(length),progressContexts=new Array(length),resolveContexts=new Array(length);i
a",all=div.getElementsByTagName("*"),a=div.getElementsByTagName("a")[0],!all||!a||!all.length)return{};select=document.createElement("select"),opt=select.appendChild(document.createElement("option")),input=div.getElementsByTagName("input")[0],a.style.cssText="top:1px;float:left;opacity:.5",support={getSetAttribute:"t"!==div.className,leadingWhitespace:3===div.firstChild.nodeType,tbody:!div.getElementsByTagName("tbody").length,htmlSerialize:!!div.getElementsByTagName("link").length,style:/top/.test(a.getAttribute("style")),hrefNormalized:"/a"===a.getAttribute("href"),opacity:/^0.5/.test(a.style.opacity),cssFloat:!!a.style.cssFloat,checkOn:!!input.value,optSelected:opt.selected,enctype:!!document.createElement("form").enctype,html5Clone:"<:nav>"!==document.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===document.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},input.checked=!0,support.noCloneChecked=input.cloneNode(!0).checked,select.disabled=!0,support.optDisabled=!opt.disabled;try{delete div.test}catch(e){support.deleteExpando=!1}input=document.createElement("input"),input.setAttribute("value",""),support.input=""===input.getAttribute("value"),input.value="t",input.setAttribute("type","radio"),support.radioValue="t"===input.value,input.setAttribute("checked","t"),input.setAttribute("name","t"),fragment=document.createDocumentFragment(),fragment.appendChild(input),support.appendChecked=input.checked,support.checkClone=fragment.cloneNode(!0).cloneNode(!0).lastChild.checked,div.attachEvent&&(div.attachEvent("onclick",function(){support.noCloneEvent=!1}),div.cloneNode(!0).click());for(i in{submit:!0,change:!0,focusin:!0})div.setAttribute(eventName="on"+i,"t"),support[i+"Bubbles"]=eventName in window||div.attributes[eventName].expando===!1;return div.style.backgroundClip="content-box",div.cloneNode(!0).style.backgroundClip="",support.clearCloneStyle="content-box"===div.style.backgroundClip,jQuery(function(){var container,marginDiv,tds,divReset="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",body=document.getElementsByTagName("body")[0];body&&(container=document.createElement("div"),container.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",body.appendChild(container).appendChild(div),div.innerHTML="
t
",tds=div.getElementsByTagName("td"),tds[0].style.cssText="padding:0;margin:0;border:0;display:none",isSupported=0===tds[0].offsetHeight,tds[0].style.display="",tds[1].style.display="none",support.reliableHiddenOffsets=isSupported&&0===tds[0].offsetHeight,div.innerHTML="",div.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",support.boxSizing=4===div.offsetWidth,support.doesNotIncludeMarginInBodyOffset=1!==body.offsetTop,window.getComputedStyle&&(support.pixelPosition="1%"!==(window.getComputedStyle(div,null)||{}).top,support.boxSizingReliable="4px"===(window.getComputedStyle(div,null)||{width:"4px"}).width,marginDiv=div.appendChild(document.createElement("div")),marginDiv.style.cssText=div.style.cssText=divReset,marginDiv.style.marginRight=marginDiv.style.width="0",div.style.width="1px",support.reliableMarginRight=!parseFloat((window.getComputedStyle(marginDiv,null)||{}).marginRight)),typeof div.style.zoom!==core_strundefined&&(div.innerHTML="",div.style.cssText=divReset+"width:1px;padding:1px;display:inline;zoom:1",support.inlineBlockNeedsLayout=3===div.offsetWidth,div.style.display="block",div.innerHTML="
",div.firstChild.style.width="5px", +support.shrinkWrapBlocks=3!==div.offsetWidth,support.inlineBlockNeedsLayout&&(body.style.zoom=1)),body.removeChild(container),container=div=tds=marginDiv=null)}),all=select=fragment=opt=a=input=null,support}();var rbrace=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,rmultiDash=/([A-Z])/g;jQuery.extend({cache:{},expando:"jQuery"+(core_version+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(elem){return elem=elem.nodeType?jQuery.cache[elem[jQuery.expando]]:elem[jQuery.expando],!!elem&&!isEmptyDataObject(elem)},data:function(elem,name,data){return internalData(elem,name,data)},removeData:function(elem,name){return internalRemoveData(elem,name)},_data:function(elem,name,data){return internalData(elem,name,data,!0)},_removeData:function(elem,name){return internalRemoveData(elem,name,!0)},acceptData:function(elem){if(elem.nodeType&&1!==elem.nodeType&&9!==elem.nodeType)return!1;var noData=elem.nodeName&&jQuery.noData[elem.nodeName.toLowerCase()];return!noData||noData!==!0&&elem.getAttribute("classid")===noData}}),jQuery.fn.extend({data:function(key,value){var attrs,name,elem=this[0],i=0,data=null;if(key===undefined){if(this.length&&(data=jQuery.data(elem),1===elem.nodeType&&!jQuery._data(elem,"parsedAttrs"))){for(attrs=elem.attributes;i1,null,!0)},removeData:function(key){return this.each(function(){jQuery.removeData(this,key)})}}),jQuery.extend({queue:function(elem,type,data){var queue;if(elem)return type=(type||"fx")+"queue",queue=jQuery._data(elem,type),data&&(!queue||jQuery.isArray(data)?queue=jQuery._data(elem,type,jQuery.makeArray(data)):queue.push(data)),queue||[]},dequeue:function(elem,type){type=type||"fx";var queue=jQuery.queue(elem,type),startLength=queue.length,fn=queue.shift(),hooks=jQuery._queueHooks(elem,type),next=function(){jQuery.dequeue(elem,type)};"inprogress"===fn&&(fn=queue.shift(),startLength--),hooks.cur=fn,fn&&("fx"===type&&queue.unshift("inprogress"),delete hooks.stop,fn.call(elem,next,hooks)),!startLength&&hooks&&hooks.empty.fire()},_queueHooks:function(elem,type){var key=type+"queueHooks";return jQuery._data(elem,key)||jQuery._data(elem,key,{empty:jQuery.Callbacks("once memory").add(function(){jQuery._removeData(elem,type+"queue"),jQuery._removeData(elem,key)})})}}),jQuery.fn.extend({queue:function(type,data){var setter=2;return"string"!=typeof type&&(data=type,type="fx",setter--),arguments.length1)},removeAttr:function(name){return this.each(function(){jQuery.removeAttr(this,name)})},prop:function(name,value){return jQuery.access(this,jQuery.prop,name,value,arguments.length>1)},removeProp:function(name){return name=jQuery.propFix[name]||name,this.each(function(){try{this[name]=undefined,delete this[name]}catch(e){}})},addClass:function(value){var classes,elem,cur,clazz,j,i=0,len=this.length,proceed="string"==typeof value&&value;if(jQuery.isFunction(value))return this.each(function(j){jQuery(this).addClass(value.call(this,j,this.className))});if(proceed)for(classes=(value||"").match(core_rnotwhite)||[];i=0;)cur=cur.replace(" "+clazz+" "," ");elem.className=value?jQuery.trim(cur):""}return this},toggleClass:function(value,stateVal){var type=typeof value,isBool="boolean"==typeof stateVal;return jQuery.isFunction(value)?this.each(function(i){jQuery(this).toggleClass(value.call(this,i,this.className,stateVal),stateVal)}):this.each(function(){if("string"===type)for(var className,i=0,self=jQuery(this),state=stateVal,classNames=value.match(core_rnotwhite)||[];className=classNames[i++];)state=isBool?state:!self.hasClass(className),self[state?"addClass":"removeClass"](className);else type!==core_strundefined&&"boolean"!==type||(this.className&&jQuery._data(this,"__className__",this.className),this.className=this.className||value===!1?"":jQuery._data(this,"__className__")||"")})},hasClass:function(selector){for(var className=" "+selector+" ",i=0,l=this.length;i=0)return!0;return!1},val:function(value){var ret,hooks,isFunction,elem=this[0];{if(arguments.length)return isFunction=jQuery.isFunction(value),this.each(function(i){var val,self=jQuery(this);1===this.nodeType&&(val=isFunction?value.call(this,i,self.val()):value,null==val?val="":"number"==typeof val?val+="":jQuery.isArray(val)&&(val=jQuery.map(val,function(value){return null==value?"":value+""})),hooks=jQuery.valHooks[this.type]||jQuery.valHooks[this.nodeName.toLowerCase()],hooks&&"set"in hooks&&hooks.set(this,val,"value")!==undefined||(this.value=val))});if(elem)return hooks=jQuery.valHooks[elem.type]||jQuery.valHooks[elem.nodeName.toLowerCase()],hooks&&"get"in hooks&&(ret=hooks.get(elem,"value"))!==undefined?ret:(ret=elem.value,"string"==typeof ret?ret.replace(rreturn,""):null==ret?"":ret)}}}),jQuery.extend({valHooks:{option:{get:function(elem){var val=elem.attributes.value;return!val||val.specified?elem.value:elem.text}},select:{get:function(elem){for(var value,option,options=elem.options,index=elem.selectedIndex,one="select-one"===elem.type||index<0,values=one?null:[],max=one?index+1:options.length,i=index<0?max:one?index:0;i=0}),values.length||(elem.selectedIndex=-1),values}}},attr:function(elem,name,value){var hooks,notxml,ret,nType=elem.nodeType;if(elem&&3!==nType&&8!==nType&&2!==nType)return typeof elem.getAttribute===core_strundefined?jQuery.prop(elem,name,value):(notxml=1!==nType||!jQuery.isXMLDoc(elem),notxml&&(name=name.toLowerCase(),hooks=jQuery.attrHooks[name]||(rboolean.test(name)?boolHook:nodeHook)),value===undefined?hooks&¬xml&&"get"in hooks&&null!==(ret=hooks.get(elem,name))?ret:(typeof elem.getAttribute!==core_strundefined&&(ret=elem.getAttribute(name)),null==ret?undefined:ret):null!==value?hooks&¬xml&&"set"in hooks&&(ret=hooks.set(elem,value,name))!==undefined?ret:(elem.setAttribute(name,value+""),value):void jQuery.removeAttr(elem,name))},removeAttr:function(elem,value){var name,propName,i=0,attrNames=value&&value.match(core_rnotwhite);if(attrNames&&1===elem.nodeType)for(;name=attrNames[i++];)propName=jQuery.propFix[name]||name,rboolean.test(name)?!getSetAttribute&&ruseDefault.test(name)?elem[jQuery.camelCase("default-"+name)]=elem[propName]=!1:elem[propName]=!1:jQuery.attr(elem,name,""),elem.removeAttribute(getSetAttribute?name:propName)},attrHooks:{type:{set:function(elem,value){if(!jQuery.support.radioValue&&"radio"===value&&jQuery.nodeName(elem,"input")){var val=elem.value;return elem.setAttribute("type",value),val&&(elem.value=val),value}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(elem,name,value){var ret,hooks,notxml,nType=elem.nodeType;if(elem&&3!==nType&&8!==nType&&2!==nType)return notxml=1!==nType||!jQuery.isXMLDoc(elem),notxml&&(name=jQuery.propFix[name]||name,hooks=jQuery.propHooks[name]),value!==undefined?hooks&&"set"in hooks&&(ret=hooks.set(elem,value,name))!==undefined?ret:elem[name]=value:hooks&&"get"in hooks&&null!==(ret=hooks.get(elem,name))?ret:elem[name]},propHooks:{tabIndex:{get:function(elem){var attributeNode=elem.getAttributeNode("tabindex");return attributeNode&&attributeNode.specified?parseInt(attributeNode.value,10):rfocusable.test(elem.nodeName)||rclickable.test(elem.nodeName)&&elem.href?0:undefined}}}}),boolHook={get:function(elem,name){var prop=jQuery.prop(elem,name),attr="boolean"==typeof prop&&elem.getAttribute(name),detail="boolean"==typeof prop?getSetInput&&getSetAttribute?null!=attr:ruseDefault.test(name)?elem[jQuery.camelCase("default-"+name)]:!!attr:elem.getAttributeNode(name);return detail&&detail.value!==!1?name.toLowerCase():undefined},set:function(elem,value,name){return value===!1?jQuery.removeAttr(elem,name):getSetInput&&getSetAttribute||!ruseDefault.test(name)?elem.setAttribute(!getSetAttribute&&jQuery.propFix[name]||name,name):elem[jQuery.camelCase("default-"+name)]=elem[name]=!0,name}},getSetInput&&getSetAttribute||(jQuery.attrHooks.value={get:function(elem,name){var ret=elem.getAttributeNode(name);return jQuery.nodeName(elem,"input")?elem.defaultValue:ret&&ret.specified?ret.value:undefined},set:function(elem,value,name){return jQuery.nodeName(elem,"input")?void(elem.defaultValue=value):nodeHook&&nodeHook.set(elem,value,name)}}),getSetAttribute||(nodeHook=jQuery.valHooks.button={get:function(elem,name){var ret=elem.getAttributeNode(name);return ret&&("id"===name||"name"===name||"coords"===name?""!==ret.value:ret.specified)?ret.value:undefined},set:function(elem,value,name){var ret=elem.getAttributeNode(name);return ret||elem.setAttributeNode(ret=elem.ownerDocument.createAttribute(name)),ret.value=value+="","value"===name||value===elem.getAttribute(name)?value:undefined}},jQuery.attrHooks.contenteditable={get:nodeHook.get,set:function(elem,value,name){nodeHook.set(elem,""!==value&&value,name)}},jQuery.each(["width","height"],function(i,name){jQuery.attrHooks[name]=jQuery.extend(jQuery.attrHooks[name],{set:function(elem,value){if(""===value)return elem.setAttribute(name,"auto"),value}})})),jQuery.support.hrefNormalized||(jQuery.each(["href","src","width","height"],function(i,name){jQuery.attrHooks[name]=jQuery.extend(jQuery.attrHooks[name],{get:function(elem){var ret=elem.getAttribute(name,2);return null==ret?undefined:ret}})}),jQuery.each(["href","src"],function(i,name){jQuery.propHooks[name]={get:function(elem){return elem.getAttribute(name,4)}}})),jQuery.support.style||(jQuery.attrHooks.style={get:function(elem){return elem.style.cssText||undefined},set:function(elem,value){return elem.style.cssText=value+""}}),jQuery.support.optSelected||(jQuery.propHooks.selected=jQuery.extend(jQuery.propHooks.selected,{get:function(elem){var parent=elem.parentNode;return parent&&(parent.selectedIndex,parent.parentNode&&parent.parentNode.selectedIndex),null}})),jQuery.support.enctype||(jQuery.propFix.enctype="encoding"),jQuery.support.checkOn||jQuery.each(["radio","checkbox"],function(){jQuery.valHooks[this]={get:function(elem){return null===elem.getAttribute("value")?"on":elem.value}}}),jQuery.each(["radio","checkbox"],function(){jQuery.valHooks[this]=jQuery.extend(jQuery.valHooks[this],{set:function(elem,value){if(jQuery.isArray(value))return elem.checked=jQuery.inArray(jQuery(elem).val(),value)>=0}})});var rformElems=/^(?:input|select|textarea)$/i,rkeyEvent=/^key/,rmouseEvent=/^(?:mouse|contextmenu)|click/,rfocusMorph=/^(?:focusinfocus|focusoutblur)$/,rtypenamespace=/^([^.]*)(?:\.(.+)|)$/;jQuery.event={global:{},add:function(elem,types,handler,data,selector){var tmp,events,t,handleObjIn,special,eventHandle,handleObj,handlers,type,namespaces,origType,elemData=jQuery._data(elem);if(elemData){for(handler.handler&&(handleObjIn=handler,handler=handleObjIn.handler,selector=handleObjIn.selector),handler.guid||(handler.guid=jQuery.guid++),(events=elemData.events)||(events=elemData.events={}),(eventHandle=elemData.handle)||(eventHandle=elemData.handle=function(e){return typeof jQuery===core_strundefined||e&&jQuery.event.triggered===e.type?undefined:jQuery.event.dispatch.apply(eventHandle.elem,arguments)},eventHandle.elem=elem),types=(types||"").match(core_rnotwhite)||[""],t=types.length;t--;)tmp=rtypenamespace.exec(types[t])||[],type=origType=tmp[1],namespaces=(tmp[2]||"").split(".").sort(),special=jQuery.event.special[type]||{},type=(selector?special.delegateType:special.bindType)||type,special=jQuery.event.special[type]||{},handleObj=jQuery.extend({type:type,origType:origType,data:data,handler:handler,guid:handler.guid,selector:selector,needsContext:selector&&jQuery.expr.match.needsContext.test(selector),namespace:namespaces.join(".")},handleObjIn),(handlers=events[type])||(handlers=events[type]=[],handlers.delegateCount=0,special.setup&&special.setup.call(elem,data,namespaces,eventHandle)!==!1||(elem.addEventListener?elem.addEventListener(type,eventHandle,!1):elem.attachEvent&&elem.attachEvent("on"+type,eventHandle))),special.add&&(special.add.call(elem,handleObj),handleObj.handler.guid||(handleObj.handler.guid=handler.guid)),selector?handlers.splice(handlers.delegateCount++,0,handleObj):handlers.push(handleObj),jQuery.event.global[type]=!0;elem=null}},remove:function(elem,types,handler,selector,mappedTypes){var j,handleObj,tmp,origCount,t,events,special,handlers,type,namespaces,origType,elemData=jQuery.hasData(elem)&&jQuery._data(elem);if(elemData&&(events=elemData.events)){for(types=(types||"").match(core_rnotwhite)||[""],t=types.length;t--;)if(tmp=rtypenamespace.exec(types[t])||[],type=origType=tmp[1],namespaces=(tmp[2]||"").split(".").sort(),type){for(special=jQuery.event.special[type]||{},type=(selector?special.delegateType:special.bindType)||type,handlers=events[type]||[],tmp=tmp[2]&&new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.|)")+"(\\.|$)"),origCount=j=handlers.length;j--;)handleObj=handlers[j],!mappedTypes&&origType!==handleObj.origType||handler&&handler.guid!==handleObj.guid||tmp&&!tmp.test(handleObj.namespace)||selector&&selector!==handleObj.selector&&("**"!==selector||!handleObj.selector)||(handlers.splice(j,1),handleObj.selector&&handlers.delegateCount--,special.remove&&special.remove.call(elem,handleObj));origCount&&!handlers.length&&(special.teardown&&special.teardown.call(elem,namespaces,elemData.handle)!==!1||jQuery.removeEvent(elem,type,elemData.handle),delete events[type])}else for(type in events)jQuery.event.remove(elem,type+types[t],handler,selector,!0);jQuery.isEmptyObject(events)&&(delete elemData.handle,jQuery._removeData(elem,"events"))}},trigger:function(event,data,elem,onlyHandlers){var handle,ontype,cur,bubbleType,special,tmp,i,eventPath=[elem||document],type=core_hasOwn.call(event,"type")?event.type:event,namespaces=core_hasOwn.call(event,"namespace")?event.namespace.split("."):[];if(cur=tmp=elem=elem||document,3!==elem.nodeType&&8!==elem.nodeType&&!rfocusMorph.test(type+jQuery.event.triggered)&&(type.indexOf(".")>=0&&(namespaces=type.split("."),type=namespaces.shift(),namespaces.sort()),ontype=type.indexOf(":")<0&&"on"+type,event=event[jQuery.expando]?event:new jQuery.Event(type,"object"==typeof event&&event),event.isTrigger=!0,event.namespace=namespaces.join("."),event.namespace_re=event.namespace?new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,event.result=undefined,event.target||(event.target=elem),data=null==data?[event]:jQuery.makeArray(data,[event]),special=jQuery.event.special[type]||{},onlyHandlers||!special.trigger||special.trigger.apply(elem,data)!==!1)){if(!onlyHandlers&&!special.noBubble&&!jQuery.isWindow(elem)){for(bubbleType=special.delegateType||type,rfocusMorph.test(bubbleType+type)||(cur=cur.parentNode);cur;cur=cur.parentNode)eventPath.push(cur),tmp=cur;tmp===(elem.ownerDocument||document)&&eventPath.push(tmp.defaultView||tmp.parentWindow||window)}for(i=0;(cur=eventPath[i++])&&!event.isPropagationStopped();)event.type=i>1?bubbleType:special.bindType||type,handle=(jQuery._data(cur,"events")||{})[event.type]&&jQuery._data(cur,"handle"),handle&&handle.apply(cur,data),handle=ontype&&cur[ontype],handle&&jQuery.acceptData(cur)&&handle.apply&&handle.apply(cur,data)===!1&&event.preventDefault();if(event.type=type,!onlyHandlers&&!event.isDefaultPrevented()&&(!special._default||special._default.apply(elem.ownerDocument,data)===!1)&&("click"!==type||!jQuery.nodeName(elem,"a"))&&jQuery.acceptData(elem)&&ontype&&elem[type]&&!jQuery.isWindow(elem)){tmp=elem[ontype],tmp&&(elem[ontype]=null),jQuery.event.triggered=type;try{elem[type]()}catch(e){}jQuery.event.triggered=undefined,tmp&&(elem[ontype]=tmp)}return event.result}},dispatch:function(event){event=jQuery.event.fix(event);var i,ret,handleObj,matched,j,handlerQueue=[],args=core_slice.call(arguments),handlers=(jQuery._data(this,"events")||{})[event.type]||[],special=jQuery.event.special[event.type]||{};if(args[0]=event,event.delegateTarget=this,!special.preDispatch||special.preDispatch.call(this,event)!==!1){for(handlerQueue=jQuery.event.handlers.call(this,event,handlers),i=0;(matched=handlerQueue[i++])&&!event.isPropagationStopped();)for(event.currentTarget=matched.elem,j=0;(handleObj=matched.handlers[j++])&&!event.isImmediatePropagationStopped();)if(!event.namespace_re||event.namespace_re.test(handleObj.namespace)){event.handleObj=handleObj,event.data=handleObj.data;var obj=(jQuery.event.special[handleObj.origType]||{}).handle||handleObj.handler;obj.apply&&(ret=obj.apply(matched.elem,args)),ret!==undefined&&(event.result=ret)===!1&&(event.preventDefault(),event.stopPropagation())}return special.postDispatch&&special.postDispatch.call(this,event),event.result}},handlers:function(event,handlers){var sel,handleObj,matches,i,handlerQueue=[],delegateCount=handlers.delegateCount,cur=event.target;if(delegateCount&&cur.nodeType&&(!event.button||"click"!==event.type))for(;cur!=this;cur=cur.parentNode||this)if(1===cur.nodeType&&(cur.disabled!==!0||"click"!==event.type)){for(matches=[],i=0;i=0:jQuery.find(sel,this,null,[cur]).length),matches[sel]&&matches.push(handleObj);matches.length&&handlerQueue.push({elem:cur,handlers:matches})}return delegateCountExpr.cacheLength&&delete cache[keys.shift()],cache[key]=value}}function markFunction(fn){return fn[expando]=!0,fn}function assert(fn){var div=document.createElement("div");try{return fn(div)}catch(e){return!1}finally{div=null}}function Sizzle(selector,context,results,seed){var match,elem,m,nodeType,i,groups,old,nid,newContext,newSelector;if((context?context.ownerDocument||context:preferredDoc)!==document&&setDocument(context),context=context||document,results=results||[],!selector||"string"!=typeof selector)return results;if(1!==(nodeType=context.nodeType)&&9!==nodeType)return[];if(!documentIsXML&&!seed){if(match=rquickExpr.exec(selector))if(m=match[1]){if(9===nodeType){if(elem=context.getElementById(m),!elem||!elem.parentNode)return results;if(elem.id===m)return results.push(elem),results}else if(context.ownerDocument&&(elem=context.ownerDocument.getElementById(m))&&contains(context,elem)&&elem.id===m)return results.push(elem),results}else{if(match[2])return push.apply(results,slice.call(context.getElementsByTagName(selector),0)),results;if((m=match[3])&&support.getByClassName&&context.getElementsByClassName)return push.apply(results,slice.call(context.getElementsByClassName(m),0)),results}if(support.qsa&&!rbuggyQSA.test(selector)){if(old=!0,nid=expando,newContext=context,newSelector=9===nodeType&&selector,1===nodeType&&"object"!==context.nodeName.toLowerCase()){for(groups=tokenize(selector),(old=context.getAttribute("id"))?nid=old.replace(rescape,"\\$&"):context.setAttribute("id",nid),nid="[id='"+nid+"'] ",i=groups.length;i--;)groups[i]=nid+toSelector(groups[i]);newContext=rsibling.test(selector)&&context.parentNode||context,newSelector=groups.join(",")}if(newSelector)try{return push.apply(results,slice.call(newContext.querySelectorAll(newSelector),0)),results}catch(qsaError){}finally{old||context.removeAttribute("id")}}}return select(selector.replace(rtrim,"$1"),context,results,seed)}function siblingCheck(a,b){var cur=b&&a,diff=cur&&(~b.sourceIndex||MAX_NEGATIVE)-(~a.sourceIndex||MAX_NEGATIVE);if(diff)return diff;if(cur)for(;cur=cur.nextSibling;)if(cur===b)return-1;return a?1:-1}function createInputPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return"input"===name&&elem.type===type}}function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return("input"===name||"button"===name)&&elem.type===type}}function createPositionalPseudo(fn){return markFunction(function(argument){return argument=+argument,markFunction(function(seed,matches){for(var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length;i--;)seed[j=matchIndexes[i]]&&(seed[j]=!(matches[j]=seed[j]))})})}function tokenize(selector,parseOnly){var matched,match,tokens,type,soFar,groups,preFilters,cached=tokenCache[selector+" "];if(cached)return parseOnly?0:cached.slice(0);for(soFar=selector,groups=[],preFilters=Expr.preFilter;soFar;){ +matched&&!(match=rcomma.exec(soFar))||(match&&(soFar=soFar.slice(match[0].length)||soFar),groups.push(tokens=[])),matched=!1,(match=rcombinators.exec(soFar))&&(matched=match.shift(),tokens.push({value:matched,type:match[0].replace(rtrim," ")}),soFar=soFar.slice(matched.length));for(type in Expr.filter)!(match=matchExpr[type].exec(soFar))||preFilters[type]&&!(match=preFilters[type](match))||(matched=match.shift(),tokens.push({value:matched,type:type,matches:match}),soFar=soFar.slice(matched.length));if(!matched)break}return parseOnly?soFar.length:soFar?Sizzle.error(selector):tokenCache(selector,groups).slice(0)}function toSelector(tokens){for(var i=0,len=tokens.length,selector="";i1?function(elem,context,xml){for(var i=matchers.length;i--;)if(!matchers[i](elem,context,xml))return!1;return!0}:matchers[0]}function condense(unmatched,map,filter,context,xml){for(var elem,newUnmatched=[],i=0,len=unmatched.length,mapped=null!=map;i-1&&(seed[temp]=!(results[temp]=elem))}}else matcherOut=condense(matcherOut===results?matcherOut.splice(preexisting,matcherOut.length):matcherOut),postFinder?postFinder(null,results,matcherOut,xml):push.apply(results,matcherOut)})}function matcherFromTokens(tokens){for(var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],implicitRelative=leadingRelative||Expr.relative[" "],i=leadingRelative?1:0,matchContext=addCombinator(function(elem){return elem===checkContext},implicitRelative,!0),matchAnyContext=addCombinator(function(elem){return indexOf.call(checkContext,elem)>-1},implicitRelative,!0),matchers=[function(elem,context,xml){return!leadingRelative&&(xml||context!==outermostContext)||((checkContext=context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml))}];i1&&elementMatcher(matchers),i>1&&toSelector(tokens.slice(0,i-1)).replace(rtrim,"$1"),matcher,i0,byElement=elementMatchers.length>0,superMatcher=function(seed,context,xml,results,expandContext){var elem,j,matcher,setMatched=[],matchedCount=0,i="0",unmatched=seed&&[],outermost=null!=expandContext,contextBackup=outermostContext,elems=seed||byElement&&Expr.find.TAG("*",expandContext&&context.parentNode||context),dirrunsUnique=dirruns+=null==contextBackup?1:Math.random()||.1;for(outermost&&(outermostContext=context!==document&&context,cachedruns=matcherCachedRuns);null!=(elem=elems[i]);i++){if(byElement&&elem){for(j=0;matcher=elementMatchers[j++];)if(matcher(elem,context,xml)){results.push(elem);break}outermost&&(dirruns=dirrunsUnique,cachedruns=++matcherCachedRuns)}bySet&&((elem=!matcher&&elem)&&matchedCount--,seed&&unmatched.push(elem))}if(matchedCount+=i,bySet&&i!==matchedCount){for(j=0;matcher=setMatchers[j++];)matcher(unmatched,setMatched,context,xml);if(seed){if(matchedCount>0)for(;i--;)unmatched[i]||setMatched[i]||(setMatched[i]=pop.call(results));setMatched=condense(setMatched)}push.apply(results,setMatched),outermost&&!seed&&setMatched.length>0&&matchedCount+setMatchers.length>1&&Sizzle.uniqueSort(results)}return outermost&&(dirruns=dirrunsUnique,outermostContext=contextBackup),unmatched};return bySet?markFunction(superMatcher):superMatcher}function multipleContexts(selector,contexts,results){for(var i=0,len=contexts.length;i2&&"ID"===(token=tokens[0]).type&&9===context.nodeType&&!documentIsXML&&Expr.relative[tokens[1].type]){if(context=Expr.find.ID(token.matches[0].replace(runescape,funescape),context)[0],!context)return results;selector=selector.slice(tokens.shift().value.length)}for(i=matchExpr.needsContext.test(selector)?0:tokens.length;i--&&(token=tokens[i],!Expr.relative[type=token.type]);)if((find=Expr.find[type])&&(seed=find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type)&&context.parentNode||context))){if(tokens.splice(i,1),selector=seed.length&&toSelector(tokens),!selector)return push.apply(results,slice.call(seed,0)),results;break}}return compile(selector,match)(seed,context,documentIsXML,results,rsibling.test(selector)),results}function setFilters(){}var i,cachedruns,Expr,getText,isXML,compile,hasDuplicate,outermostContext,setDocument,document,docElem,documentIsXML,rbuggyQSA,rbuggyMatches,matches,contains,sortOrder,expando="sizzle"+-new Date,preferredDoc=window.document,support={},dirruns=0,done=0,classCache=createCache(),tokenCache=createCache(),compilerCache=createCache(),strundefined=typeof undefined,MAX_NEGATIVE=1<<31,arr=[],pop=arr.pop,push=arr.push,slice=arr.slice,indexOf=arr.indexOf||function(elem){for(var i=0,len=this.length;i+~])"+whitespace+"*"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp("^"+identifier+"$"),matchExpr={ID:new RegExp("^#("+characterEncoding+")"),CLASS:new RegExp("^\\.("+characterEncoding+")"),NAME:new RegExp("^\\[name=['\"]?("+characterEncoding+")['\"]?\\]"),TAG:new RegExp("^("+characterEncoding.replace("w","w*")+")"),ATTR:new RegExp("^"+attributes),PSEUDO:new RegExp("^"+pseudos),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+whitespace+"*(even|odd|(([+-]|)(\\d*)n|)"+whitespace+"*(?:([+-]|)"+whitespace+"*(\\d+)|))"+whitespace+"*\\)|)","i"),needsContext:new RegExp("^"+whitespace+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+whitespace+"*((?:-\\d)?\\d*)"+whitespace+"*\\)|)(?=[^-]|$)","i")},rsibling=/[\x20\t\r\n\f]*[+~]/,rnative=/^[^{]+\{\s*\[native code/,rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\d$/i,rescape=/'|\\/g,rattributeQuotes=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,runescape=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,funescape=function(_,escaped){var high="0x"+escaped-65536;return high!==high?escaped:high<0?String.fromCharCode(high+65536):String.fromCharCode(high>>10|55296,1023&high|56320)};try{slice.call(preferredDoc.documentElement.childNodes,0)[0].nodeType}catch(e){slice=function(i){for(var elem,results=[];elem=this[i++];)results.push(elem);return results}}isXML=Sizzle.isXML=function(elem){var documentElement=elem&&(elem.ownerDocument||elem).documentElement;return!!documentElement&&"HTML"!==documentElement.nodeName},setDocument=Sizzle.setDocument=function(node){var doc=node?node.ownerDocument||node:preferredDoc;return doc!==document&&9===doc.nodeType&&doc.documentElement?(document=doc,docElem=doc.documentElement,documentIsXML=isXML(doc),support.tagNameNoComments=assert(function(div){return div.appendChild(doc.createComment("")),!div.getElementsByTagName("*").length}),support.attributes=assert(function(div){div.innerHTML="";var type=typeof div.lastChild.getAttribute("multiple");return"boolean"!==type&&"string"!==type}),support.getByClassName=assert(function(div){return div.innerHTML="",!(!div.getElementsByClassName||!div.getElementsByClassName("e").length)&&(div.lastChild.className="e",2===div.getElementsByClassName("e").length)}),support.getByName=assert(function(div){div.id=expando+0,div.innerHTML="
",docElem.insertBefore(div,docElem.firstChild);var pass=doc.getElementsByName&&doc.getElementsByName(expando).length===2+doc.getElementsByName(expando+0).length;return support.getIdNotName=!doc.getElementById(expando),docElem.removeChild(div),pass}),Expr.attrHandle=assert(function(div){return div.innerHTML="",div.firstChild&&typeof div.firstChild.getAttribute!==strundefined&&"#"===div.firstChild.getAttribute("href")})?{}:{href:function(elem){return elem.getAttribute("href",2)},type:function(elem){return elem.getAttribute("type")}},support.getIdNotName?(Expr.find.ID=function(id,context){if(typeof context.getElementById!==strundefined&&!documentIsXML){var m=context.getElementById(id);return m&&m.parentNode?[m]:[]}},Expr.filter.ID=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId}}):(Expr.find.ID=function(id,context){if(typeof context.getElementById!==strundefined&&!documentIsXML){var m=context.getElementById(id);return m?m.id===id||typeof m.getAttributeNode!==strundefined&&m.getAttributeNode("id").value===id?[m]:undefined:[]}},Expr.filter.ID=function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=typeof elem.getAttributeNode!==strundefined&&elem.getAttributeNode("id");return node&&node.value===attrId}}),Expr.find.TAG=support.tagNameNoComments?function(tag,context){if(typeof context.getElementsByTagName!==strundefined)return context.getElementsByTagName(tag)}:function(tag,context){var elem,tmp=[],i=0,results=context.getElementsByTagName(tag);if("*"===tag){for(;elem=results[i++];)1===elem.nodeType&&tmp.push(elem);return tmp}return results},Expr.find.NAME=support.getByName&&function(tag,context){if(typeof context.getElementsByName!==strundefined)return context.getElementsByName(name)},Expr.find.CLASS=support.getByClassName&&function(className,context){if(typeof context.getElementsByClassName!==strundefined&&!documentIsXML)return context.getElementsByClassName(className)},rbuggyMatches=[],rbuggyQSA=[":focus"],(support.qsa=isNative(doc.querySelectorAll))&&(assert(function(div){div.innerHTML="",div.querySelectorAll("[selected]").length||rbuggyQSA.push("\\["+whitespace+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),div.querySelectorAll(":checked").length||rbuggyQSA.push(":checked")}),assert(function(div){div.innerHTML="",div.querySelectorAll("[i^='']").length&&rbuggyQSA.push("[*^$]="+whitespace+"*(?:\"\"|'')"),div.querySelectorAll(":enabled").length||rbuggyQSA.push(":enabled",":disabled"),div.querySelectorAll("*,:x"),rbuggyQSA.push(",.*:")})),(support.matchesSelector=isNative(matches=docElem.matchesSelector||docElem.mozMatchesSelector||docElem.webkitMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector))&&assert(function(div){support.disconnectedMatch=matches.call(div,"div"),matches.call(div,"[s!='']:x"),rbuggyMatches.push("!=",pseudos)}),rbuggyQSA=new RegExp(rbuggyQSA.join("|")),rbuggyMatches=new RegExp(rbuggyMatches.join("|")),contains=isNative(docElem.contains)||docElem.compareDocumentPosition?function(a,b){var adown=9===a.nodeType?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!(!bup||1!==bup.nodeType||!(adown.contains?adown.contains(bup):a.compareDocumentPosition&&16&a.compareDocumentPosition(bup)))}:function(a,b){if(b)for(;b=b.parentNode;)if(b===a)return!0;return!1},sortOrder=docElem.compareDocumentPosition?function(a,b){var compare;return a===b?(hasDuplicate=!0,0):(compare=b.compareDocumentPosition&&a.compareDocumentPosition&&a.compareDocumentPosition(b))?1&compare||a.parentNode&&11===a.parentNode.nodeType?a===doc||contains(preferredDoc,a)?-1:b===doc||contains(preferredDoc,b)?1:0:4&compare?-1:1:a.compareDocumentPosition?-1:1}:function(a,b){var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b];if(a===b)return hasDuplicate=!0,0;if(!aup||!bup)return a===doc?-1:b===doc?1:aup?-1:bup?1:0;if(aup===bup)return siblingCheck(a,b);for(cur=a;cur=cur.parentNode;)ap.unshift(cur);for(cur=b;cur=cur.parentNode;)bp.unshift(cur);for(;ap[i]===bp[i];)i++;return i?siblingCheck(ap[i],bp[i]):ap[i]===preferredDoc?-1:bp[i]===preferredDoc?1:0},hasDuplicate=!1,[0,0].sort(sortOrder),support.detectDuplicates=hasDuplicate,document):document},Sizzle.matches=function(expr,elements){return Sizzle(expr,null,null,elements)},Sizzle.matchesSelector=function(elem,expr){if((elem.ownerDocument||elem)!==document&&setDocument(elem),expr=expr.replace(rattributeQuotes,"='$1']"),support.matchesSelector&&!documentIsXML&&(!rbuggyMatches||!rbuggyMatches.test(expr))&&!rbuggyQSA.test(expr))try{var ret=matches.call(elem,expr);if(ret||support.disconnectedMatch||elem.document&&11!==elem.document.nodeType)return ret}catch(e){}return Sizzle(expr,document,null,[elem]).length>0},Sizzle.contains=function(context,elem){return(context.ownerDocument||context)!==document&&setDocument(context),contains(context,elem)},Sizzle.attr=function(elem,name){var val;return(elem.ownerDocument||elem)!==document&&setDocument(elem),documentIsXML||(name=name.toLowerCase()),(val=Expr.attrHandle[name])?val(elem):documentIsXML||support.attributes?elem.getAttribute(name):((val=elem.getAttributeNode(name))||elem.getAttribute(name))&&elem[name]===!0?name:val&&val.specified?val.value:null},Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg)},Sizzle.uniqueSort=function(results){var elem,duplicates=[],i=1,j=0;if(hasDuplicate=!support.detectDuplicates,results.sort(sortOrder),hasDuplicate){for(;elem=results[i];i++)elem===results[i-1]&&(j=duplicates.push(i));for(;j--;)results.splice(duplicates[j],1)}return results},getText=Sizzle.getText=function(elem){var node,ret="",i=0,nodeType=elem.nodeType;if(nodeType){if(1===nodeType||9===nodeType||11===nodeType){if("string"==typeof elem.textContent)return elem.textContent;for(elem=elem.firstChild;elem;elem=elem.nextSibling)ret+=getText(elem)}else if(3===nodeType||4===nodeType)return elem.nodeValue}else for(;node=elem[i];i++)ret+=getText(node);return ret},Expr=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:matchExpr,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(match){return match[1]=match[1].replace(runescape,funescape),match[3]=(match[4]||match[5]||"").replace(runescape,funescape),"~="===match[2]&&(match[3]=" "+match[3]+" "),match.slice(0,4)},CHILD:function(match){return match[1]=match[1].toLowerCase(),"nth"===match[1].slice(0,3)?(match[3]||Sizzle.error(match[0]),match[4]=+(match[4]?match[5]+(match[6]||1):2*("even"===match[3]||"odd"===match[3])),match[5]=+(match[7]+match[8]||"odd"===match[3])):match[3]&&Sizzle.error(match[0]),match},PSEUDO:function(match){var excess,unquoted=!match[5]&&match[2];return matchExpr.CHILD.test(match[0])?null:(match[4]?match[2]=match[4]:unquoted&&rpseudo.test(unquoted)&&(excess=tokenize(unquoted,!0))&&(excess=unquoted.indexOf(")",unquoted.length-excess)-unquoted.length)&&(match[0]=match[0].slice(0,excess),match[2]=unquoted.slice(0,excess)),match.slice(0,3))}},filter:{TAG:function(nodeName){return"*"===nodeName?function(){return!0}:(nodeName=nodeName.replace(runescape,funescape).toLowerCase(),function(elem){return elem.nodeName&&elem.nodeName.toLowerCase()===nodeName})},CLASS:function(className){var pattern=classCache[className+" "];return pattern||(pattern=new RegExp("(^|"+whitespace+")"+className+"("+whitespace+"|$)"))&&classCache(className,function(elem){return pattern.test(elem.className||typeof elem.getAttribute!==strundefined&&elem.getAttribute("class")||"")})},ATTR:function(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);return null==result?"!="===operator:!operator||(result+="","="===operator?result===check:"!="===operator?result!==check:"^="===operator?check&&0===result.indexOf(check):"*="===operator?check&&result.indexOf(check)>-1:"$="===operator?check&&result.slice(-check.length)===check:"~="===operator?(" "+result+" ").indexOf(check)>-1:"|="===operator&&(result===check||result.slice(0,check.length+1)===check+"-"))}},CHILD:function(type,what,argument,first,last){var simple="nth"!==type.slice(0,3),forward="last"!==type.slice(-4),ofType="of-type"===what;return 1===first&&0===last?function(elem){return!!elem.parentNode}:function(elem,context,xml){var cache,outerCache,node,diff,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType;if(parent){if(simple){for(;dir;){for(node=elem;node=node[dir];)if(ofType?node.nodeName.toLowerCase()===name:1===node.nodeType)return!1;start=dir="only"===type&&!start&&"nextSibling"}return!0}if(start=[forward?parent.firstChild:parent.lastChild],forward&&useCache){for(outerCache=parent[expando]||(parent[expando]={}),cache=outerCache[type]||[],nodeIndex=cache[0]===dirruns&&cache[1],diff=cache[0]===dirruns&&cache[2],node=nodeIndex&&parent.childNodes[nodeIndex];node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop();)if(1===node.nodeType&&++diff&&node===elem){outerCache[type]=[dirruns,nodeIndex,diff];break}}else if(useCache&&(cache=(elem[expando]||(elem[expando]={}))[type])&&cache[0]===dirruns)diff=cache[1];else for(;(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop())&&((ofType?node.nodeName.toLowerCase()!==name:1!==node.nodeType)||!++diff||(useCache&&((node[expando]||(node[expando]={}))[type]=[dirruns,diff]),node!==elem)););return diff-=last,diff===first||diff%first===0&&diff/first>=0}}},PSEUDO:function(pseudo,argument){var args,fn=Expr.pseudos[pseudo]||Expr.setFilters[pseudo.toLowerCase()]||Sizzle.error("unsupported pseudo: "+pseudo);return fn[expando]?fn(argument):fn.length>1?(args=[pseudo,pseudo,"",argument],Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?markFunction(function(seed,matches){for(var idx,matched=fn(seed,argument),i=matched.length;i--;)idx=indexOf.call(seed,matched[i]),seed[idx]=!(matches[idx]=matched[i])}):function(elem){return fn(elem,0,args)}):fn}},pseudos:{not:markFunction(function(selector){var input=[],results=[],matcher=compile(selector.replace(rtrim,"$1"));return matcher[expando]?markFunction(function(seed,matches,context,xml){for(var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length;i--;)(elem=unmatched[i])&&(seed[i]=!(matches[i]=elem))}):function(elem,context,xml){return input[0]=elem,matcher(input,null,xml,results),!results.pop()}}),has:markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length>0}}),contains:markFunction(function(text){return function(elem){return(elem.textContent||elem.innerText||getText(elem)).indexOf(text)>-1}}),lang:markFunction(function(lang){return ridentifier.test(lang||"")||Sizzle.error("unsupported lang: "+lang),lang=lang.replace(runescape,funescape).toLowerCase(),function(elem){var elemLang;do if(elemLang=documentIsXML?elem.getAttribute("xml:lang")||elem.getAttribute("lang"):elem.lang)return elemLang=elemLang.toLowerCase(),elemLang===lang||0===elemLang.indexOf(lang+"-");while((elem=elem.parentNode)&&1===elem.nodeType);return!1}}),target:function(elem){var hash=window.location&&window.location.hash;return hash&&hash.slice(1)===elem.id},root:function(elem){return elem===docElem},focus:function(elem){return elem===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(elem.type||elem.href||~elem.tabIndex)},enabled:function(elem){return elem.disabled===!1},disabled:function(elem){return elem.disabled===!0},checked:function(elem){var nodeName=elem.nodeName.toLowerCase();return"input"===nodeName&&!!elem.checked||"option"===nodeName&&!!elem.selected},selected:function(elem){return elem.parentNode&&elem.parentNode.selectedIndex,elem.selected===!0},empty:function(elem){for(elem=elem.firstChild;elem;elem=elem.nextSibling)if(elem.nodeName>"@"||3===elem.nodeType||4===elem.nodeType)return!1;return!0},parent:function(elem){return!Expr.pseudos.empty(elem)},header:function(elem){return rheader.test(elem.nodeName)},input:function(elem){return rinputs.test(elem.nodeName)},button:function(elem){var name=elem.nodeName.toLowerCase();return"input"===name&&"button"===elem.type||"button"===name},text:function(elem){var attr;return"input"===elem.nodeName.toLowerCase()&&"text"===elem.type&&(null==(attr=elem.getAttribute("type"))||attr.toLowerCase()===elem.type)},first:createPositionalPseudo(function(){return[0]}),last:createPositionalPseudo(function(matchIndexes,length){return[length-1]}),eq:createPositionalPseudo(function(matchIndexes,length,argument){return[argument<0?argument+length:argument]}),even:createPositionalPseudo(function(matchIndexes,length){for(var i=0;i=0;)matchIndexes.push(i);return matchIndexes}),gt:createPositionalPseudo(function(matchIndexes,length,argument){for(var i=argument<0?argument+length:argument;++i1?jQuery.unique(ret):ret),ret.selector=(this.selector?this.selector+" ":"")+selector,ret},has:function(target){var i,targets=jQuery(target,this),len=targets.length;return this.filter(function(){for(i=0;i=0:jQuery.filter(selector,this).length>0:this.filter(selector).length>0)},closest:function(selectors,context){for(var cur,i=0,l=this.length,ret=[],pos=rneedsContext.test(selectors)||"string"!=typeof selectors?jQuery(selectors,context||this.context):0;i-1:jQuery.find.matchesSelector(cur,selectors)){ret.push(cur);break}cur=cur.parentNode}return this.pushStack(ret.length>1?jQuery.unique(ret):ret)},index:function(elem){return elem?"string"==typeof elem?jQuery.inArray(this[0],jQuery(elem)):jQuery.inArray(elem.jquery?elem[0]:elem,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(selector,context){var set="string"==typeof selector?jQuery(selector,context):jQuery.makeArray(selector&&selector.nodeType?[selector]:selector),all=jQuery.merge(this.get(),set);return this.pushStack(jQuery.unique(all))},addBack:function(selector){return this.add(null==selector?this.prevObject:this.prevObject.filter(selector))}}),jQuery.fn.andSelf=jQuery.fn.addBack,jQuery.each({parent:function(elem){var parent=elem.parentNode;return parent&&11!==parent.nodeType?parent:null},parents:function(elem){return jQuery.dir(elem,"parentNode")},parentsUntil:function(elem,i,until){return jQuery.dir(elem,"parentNode",until)},next:function(elem){return sibling(elem,"nextSibling")},prev:function(elem){return sibling(elem,"previousSibling")},nextAll:function(elem){return jQuery.dir(elem,"nextSibling")},prevAll:function(elem){return jQuery.dir(elem,"previousSibling")},nextUntil:function(elem,i,until){return jQuery.dir(elem,"nextSibling",until)},prevUntil:function(elem,i,until){return jQuery.dir(elem,"previousSibling",until)},siblings:function(elem){return jQuery.sibling((elem.parentNode||{}).firstChild,elem)},children:function(elem){return jQuery.sibling(elem.firstChild)},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.merge([],elem.childNodes)}},function(name,fn){jQuery.fn[name]=function(until,selector){var ret=jQuery.map(this,fn,until);return runtil.test(name)||(selector=until),selector&&"string"==typeof selector&&(ret=jQuery.filter(selector,ret)),ret=this.length>1&&!guaranteedUnique[name]?jQuery.unique(ret):ret,this.length>1&&rparentsprev.test(name)&&(ret=ret.reverse()),this.pushStack(ret)}}),jQuery.extend({filter:function(expr,elems,not){return not&&(expr=":not("+expr+")"),1===elems.length?jQuery.find.matchesSelector(elems[0],expr)?[elems[0]]:[]:jQuery.find.matches(expr,elems)},dir:function(elem,dir,until){for(var matched=[],cur=elem[dir];cur&&9!==cur.nodeType&&(until===undefined||1!==cur.nodeType||!jQuery(cur).is(until));)1===cur.nodeType&&matched.push(cur),cur=cur[dir];return matched},sibling:function(n,elem){for(var r=[];n;n=n.nextSibling)1===n.nodeType&&n!==elem&&r.push(n);return r}});var nodeNames="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",rinlinejQuery=/ jQuery\d+="(?:null|\d+)"/g,rnoshimcache=new RegExp("<(?:"+nodeNames+")[\\s/>]","i"),rleadingWhitespace=/^\s+/,rxhtmlTag=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,rtagName=/<([\w:]+)/,rtbody=/\s*$/g,wrapMap={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:jQuery.support.htmlSerialize?[0,"",""]:[1,"X
","
"]},safeFragment=createSafeFragment(document),fragmentDiv=safeFragment.appendChild(document.createElement("div"));wrapMap.optgroup=wrapMap.option,wrapMap.tbody=wrapMap.tfoot=wrapMap.colgroup=wrapMap.caption=wrapMap.thead,wrapMap.th=wrapMap.td,jQuery.fn.extend({text:function(value){return jQuery.access(this,function(value){return value===undefined?jQuery.text(this):this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(value))},null,value,arguments.length)},wrapAll:function(html){if(jQuery.isFunction(html))return this.each(function(i){jQuery(this).wrapAll(html.call(this,i))});if(this[0]){var wrap=jQuery(html,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&wrap.insertBefore(this[0]),wrap.map(function(){for(var elem=this;elem.firstChild&&1===elem.firstChild.nodeType;)elem=elem.firstChild;return elem}).append(this)}return this},wrapInner:function(html){return jQuery.isFunction(html)?this.each(function(i){jQuery(this).wrapInner(html.call(this,i))}):this.each(function(){var self=jQuery(this),contents=self.contents();contents.length?contents.wrapAll(html):self.append(html)})},wrap:function(html){var isFunction=jQuery.isFunction(html);return this.each(function(i){jQuery(this).wrapAll(isFunction?html.call(this,i):html)})},unwrap:function(){return this.parent().each(function(){jQuery.nodeName(this,"body")||jQuery(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(elem){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||this.appendChild(elem)})},prepend:function(){return this.domManip(arguments,!0,function(elem){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||this.insertBefore(elem,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(elem){this.parentNode&&this.parentNode.insertBefore(elem,this)})},after:function(){return this.domManip(arguments,!1,function(elem){this.parentNode&&this.parentNode.insertBefore(elem,this.nextSibling)})},remove:function(selector,keepData){for(var elem,i=0;null!=(elem=this[i]);i++)(!selector||jQuery.filter(selector,[elem]).length>0)&&(keepData||1!==elem.nodeType||jQuery.cleanData(getAll(elem)), +elem.parentNode&&(keepData&&jQuery.contains(elem.ownerDocument,elem)&&setGlobalEval(getAll(elem,"script")),elem.parentNode.removeChild(elem)));return this},empty:function(){for(var elem,i=0;null!=(elem=this[i]);i++){for(1===elem.nodeType&&jQuery.cleanData(getAll(elem,!1));elem.firstChild;)elem.removeChild(elem.firstChild);elem.options&&jQuery.nodeName(elem,"select")&&(elem.options.length=0)}return this},clone:function(dataAndEvents,deepDataAndEvents){return dataAndEvents=null!=dataAndEvents&&dataAndEvents,deepDataAndEvents=null==deepDataAndEvents?dataAndEvents:deepDataAndEvents,this.map(function(){return jQuery.clone(this,dataAndEvents,deepDataAndEvents)})},html:function(value){return jQuery.access(this,function(value){var elem=this[0]||{},i=0,l=this.length;if(value===undefined)return 1===elem.nodeType?elem.innerHTML.replace(rinlinejQuery,""):undefined;if("string"==typeof value&&!rnoInnerhtml.test(value)&&(jQuery.support.htmlSerialize||!rnoshimcache.test(value))&&(jQuery.support.leadingWhitespace||!rleadingWhitespace.test(value))&&!wrapMap[(rtagName.exec(value)||["",""])[1].toLowerCase()]){value=value.replace(rxhtmlTag,"<$1>");try{for(;i")?clone=elem.cloneNode(!0):(fragmentDiv.innerHTML=elem.outerHTML,fragmentDiv.removeChild(clone=fragmentDiv.firstChild)),!(jQuery.support.noCloneEvent&&jQuery.support.noCloneChecked||1!==elem.nodeType&&11!==elem.nodeType||jQuery.isXMLDoc(elem)))for(destElements=getAll(clone),srcElements=getAll(elem),i=0;null!=(node=srcElements[i]);++i)destElements[i]&&fixCloneNodeIssues(node,destElements[i]);if(dataAndEvents)if(deepDataAndEvents)for(srcElements=srcElements||getAll(elem),destElements=destElements||getAll(clone),i=0;null!=(node=srcElements[i]);i++)cloneCopyEvent(node,destElements[i]);else cloneCopyEvent(elem,clone);return destElements=getAll(clone,"script"),destElements.length>0&&setGlobalEval(destElements,!inPage&&getAll(elem,"script")),destElements=srcElements=node=null,clone},buildFragment:function(elems,context,scripts,selection){for(var j,elem,contains,tmp,tag,tbody,wrap,l=elems.length,safe=createSafeFragment(context),nodes=[],i=0;i")+wrap[2],j=wrap[0];j--;)tmp=tmp.lastChild;if(!jQuery.support.leadingWhitespace&&rleadingWhitespace.test(elem)&&nodes.push(context.createTextNode(rleadingWhitespace.exec(elem)[0])),!jQuery.support.tbody)for(elem="table"!==tag||rtbody.test(elem)?""!==wrap[1]||rtbody.test(elem)?0:tmp:tmp.firstChild,j=elem&&elem.childNodes.length;j--;)jQuery.nodeName(tbody=elem.childNodes[j],"tbody")&&!tbody.childNodes.length&&elem.removeChild(tbody);for(jQuery.merge(nodes,tmp.childNodes),tmp.textContent="";tmp.firstChild;)tmp.removeChild(tmp.firstChild);tmp=safe.lastChild}else nodes.push(context.createTextNode(elem));for(tmp&&safe.removeChild(tmp),jQuery.support.appendChecked||jQuery.grep(getAll(nodes,"input"),fixDefaultChecked),i=0;elem=nodes[i++];)if((!selection||jQuery.inArray(elem,selection)===-1)&&(contains=jQuery.contains(elem.ownerDocument,elem),tmp=getAll(safe.appendChild(elem),"script"),contains&&setGlobalEval(tmp),scripts))for(j=0;elem=tmp[j++];)rscriptType.test(elem.type||"")&&scripts.push(elem);return tmp=null,safe},cleanData:function(elems,acceptData){for(var elem,type,id,data,i=0,internalKey=jQuery.expando,cache=jQuery.cache,deleteExpando=jQuery.support.deleteExpando,special=jQuery.event.special;null!=(elem=elems[i]);i++)if((acceptData||jQuery.acceptData(elem))&&(id=elem[internalKey],data=id&&cache[id])){if(data.events)for(type in data.events)special[type]?jQuery.event.remove(elem,type):jQuery.removeEvent(elem,type,data.handle);cache[id]&&(delete cache[id],deleteExpando?delete elem[internalKey]:typeof elem.removeAttribute!==core_strundefined?elem.removeAttribute(internalKey):elem[internalKey]=null,core_deletedIds.push(id))}}});var iframe,getStyles,curCSS,ralpha=/alpha\([^)]*\)/i,ropacity=/opacity\s*=\s*([^)]*)/,rposition=/^(top|right|bottom|left)$/,rdisplayswap=/^(none|table(?!-c[ea]).+)/,rmargin=/^margin/,rnumsplit=new RegExp("^("+core_pnum+")(.*)$","i"),rnumnonpx=new RegExp("^("+core_pnum+")(?!px)[a-z%]+$","i"),rrelNum=new RegExp("^([+-])=("+core_pnum+")","i"),elemdisplay={BODY:"block"},cssShow={position:"absolute",visibility:"hidden",display:"block"},cssNormalTransform={letterSpacing:0,fontWeight:400},cssExpand=["Top","Right","Bottom","Left"],cssPrefixes=["Webkit","O","Moz","ms"];jQuery.fn.extend({css:function(name,value){return jQuery.access(this,function(elem,name,value){var len,styles,map={},i=0;if(jQuery.isArray(name)){for(styles=getStyles(elem),len=name.length;i1)},show:function(){return showHide(this,!0)},hide:function(){return showHide(this)},toggle:function(state){var bool="boolean"==typeof state;return this.each(function(){(bool?state:isHidden(this))?jQuery(this).show():jQuery(this).hide()})}}),jQuery.extend({cssHooks:{opacity:{get:function(elem,computed){if(computed){var ret=curCSS(elem,"opacity");return""===ret?"1":ret}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":jQuery.support.cssFloat?"cssFloat":"styleFloat"},style:function(elem,name,value,extra){if(elem&&3!==elem.nodeType&&8!==elem.nodeType&&elem.style){var ret,type,hooks,origName=jQuery.camelCase(name),style=elem.style;if(name=jQuery.cssProps[origName]||(jQuery.cssProps[origName]=vendorPropName(style,origName)),hooks=jQuery.cssHooks[name]||jQuery.cssHooks[origName],value===undefined)return hooks&&"get"in hooks&&(ret=hooks.get(elem,!1,extra))!==undefined?ret:style[name];if(type=typeof value,"string"===type&&(ret=rrelNum.exec(value))&&(value=(ret[1]+1)*ret[2]+parseFloat(jQuery.css(elem,name)),type="number"),!(null==value||"number"===type&&isNaN(value)||("number"!==type||jQuery.cssNumber[origName]||(value+="px"),jQuery.support.clearCloneStyle||""!==value||0!==name.indexOf("background")||(style[name]="inherit"),hooks&&"set"in hooks&&(value=hooks.set(elem,value,extra))===undefined)))try{style[name]=value}catch(e){}}},css:function(elem,name,extra,styles){var num,val,hooks,origName=jQuery.camelCase(name);return name=jQuery.cssProps[origName]||(jQuery.cssProps[origName]=vendorPropName(elem.style,origName)),hooks=jQuery.cssHooks[name]||jQuery.cssHooks[origName],hooks&&"get"in hooks&&(val=hooks.get(elem,!0,extra)),val===undefined&&(val=curCSS(elem,name,styles)),"normal"===val&&name in cssNormalTransform&&(val=cssNormalTransform[name]),""===extra||extra?(num=parseFloat(val),extra===!0||jQuery.isNumeric(num)?num||0:val):val},swap:function(elem,options,callback,args){var ret,name,old={};for(name in options)old[name]=elem.style[name],elem.style[name]=options[name];ret=callback.apply(elem,args||[]);for(name in options)elem.style[name]=old[name];return ret}}),window.getComputedStyle?(getStyles=function(elem){return window.getComputedStyle(elem,null)},curCSS=function(elem,name,_computed){var width,minWidth,maxWidth,computed=_computed||getStyles(elem),ret=computed?computed.getPropertyValue(name)||computed[name]:undefined,style=elem.style;return computed&&(""!==ret||jQuery.contains(elem.ownerDocument,elem)||(ret=jQuery.style(elem,name)),rnumnonpx.test(ret)&&rmargin.test(name)&&(width=style.width,minWidth=style.minWidth,maxWidth=style.maxWidth,style.minWidth=style.maxWidth=style.width=ret,ret=computed.width,style.width=width,style.minWidth=minWidth,style.maxWidth=maxWidth)),ret}):document.documentElement.currentStyle&&(getStyles=function(elem){return elem.currentStyle},curCSS=function(elem,name,_computed){var left,rs,rsLeft,computed=_computed||getStyles(elem),ret=computed?computed[name]:undefined,style=elem.style;return null==ret&&style&&style[name]&&(ret=style[name]),rnumnonpx.test(ret)&&!rposition.test(name)&&(left=style.left,rs=elem.runtimeStyle,rsLeft=rs&&rs.left,rsLeft&&(rs.left=elem.currentStyle.left),style.left="fontSize"===name?"1em":ret,ret=style.pixelLeft+"px",style.left=left,rsLeft&&(rs.left=rsLeft)),""===ret?"auto":ret}),jQuery.each(["height","width"],function(i,name){jQuery.cssHooks[name]={get:function(elem,computed,extra){if(computed)return 0===elem.offsetWidth&&rdisplayswap.test(jQuery.css(elem,"display"))?jQuery.swap(elem,cssShow,function(){return getWidthOrHeight(elem,name,extra)}):getWidthOrHeight(elem,name,extra)},set:function(elem,value,extra){var styles=extra&&getStyles(elem);return setPositiveNumber(elem,value,extra?augmentWidthOrHeight(elem,name,extra,jQuery.support.boxSizing&&"border-box"===jQuery.css(elem,"boxSizing",!1,styles),styles):0)}}}),jQuery.support.opacity||(jQuery.cssHooks.opacity={get:function(elem,computed){return ropacity.test((computed&&elem.currentStyle?elem.currentStyle.filter:elem.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":computed?"1":""},set:function(elem,value){var style=elem.style,currentStyle=elem.currentStyle,opacity=jQuery.isNumeric(value)?"alpha(opacity="+100*value+")":"",filter=currentStyle&¤tStyle.filter||style.filter||"";style.zoom=1,(value>=1||""===value)&&""===jQuery.trim(filter.replace(ralpha,""))&&style.removeAttribute&&(style.removeAttribute("filter"),""===value||currentStyle&&!currentStyle.filter)||(style.filter=ralpha.test(filter)?filter.replace(ralpha,opacity):filter+" "+opacity)}}),jQuery(function(){jQuery.support.reliableMarginRight||(jQuery.cssHooks.marginRight={get:function(elem,computed){if(computed)return jQuery.swap(elem,{display:"inline-block"},curCSS,[elem,"marginRight"])}}),!jQuery.support.pixelPosition&&jQuery.fn.position&&jQuery.each(["top","left"],function(i,prop){jQuery.cssHooks[prop]={get:function(elem,computed){if(computed)return computed=curCSS(elem,prop),rnumnonpx.test(computed)?jQuery(elem).position()[prop]+"px":computed}}})}),jQuery.expr&&jQuery.expr.filters&&(jQuery.expr.filters.hidden=function(elem){return elem.offsetWidth<=0&&elem.offsetHeight<=0||!jQuery.support.reliableHiddenOffsets&&"none"===(elem.style&&elem.style.display||jQuery.css(elem,"display"))},jQuery.expr.filters.visible=function(elem){return!jQuery.expr.filters.hidden(elem)}),jQuery.each({margin:"",padding:"",border:"Width"},function(prefix,suffix){jQuery.cssHooks[prefix+suffix]={expand:function(value){for(var i=0,expanded={},parts="string"==typeof value?value.split(" "):[value];i<4;i++)expanded[prefix+cssExpand[i]+suffix]=parts[i]||parts[i-2]||parts[0];return expanded}},rmargin.test(prefix)||(jQuery.cssHooks[prefix+suffix].set=setPositiveNumber)});var r20=/%20/g,rbracket=/\[\]$/,rCRLF=/\r?\n/g,rsubmitterTypes=/^(?:submit|button|image|reset|file)$/i,rsubmittable=/^(?:input|select|textarea|keygen)/i;jQuery.fn.extend({serialize:function(){return jQuery.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var elements=jQuery.prop(this,"elements");return elements?jQuery.makeArray(elements):this}).filter(function(){var type=this.type;return this.name&&!jQuery(this).is(":disabled")&&rsubmittable.test(this.nodeName)&&!rsubmitterTypes.test(type)&&(this.checked||!manipulation_rcheckableType.test(type))}).map(function(i,elem){var val=jQuery(this).val();return null==val?null:jQuery.isArray(val)?jQuery.map(val,function(val){return{name:elem.name,value:val.replace(rCRLF,"\r\n")}}):{name:elem.name,value:val.replace(rCRLF,"\r\n")}}).get()}}),jQuery.param=function(a,traditional){var prefix,s=[],add=function(key,value){value=jQuery.isFunction(value)?value():null==value?"":value,s[s.length]=encodeURIComponent(key)+"="+encodeURIComponent(value)};if(traditional===undefined&&(traditional=jQuery.ajaxSettings&&jQuery.ajaxSettings.traditional),jQuery.isArray(a)||a.jquery&&!jQuery.isPlainObject(a))jQuery.each(a,function(){add(this.name,this.value)});else for(prefix in a)buildParams(prefix,a[prefix],traditional,add);return s.join("&").replace(r20,"+")},jQuery.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(i,name){jQuery.fn[name]=function(data,fn){return arguments.length>0?this.on(name,null,data,fn):this.trigger(name)}}),jQuery.fn.hover=function(fnOver,fnOut){return this.mouseenter(fnOver).mouseleave(fnOut||fnOver)};var ajaxLocParts,ajaxLocation,ajax_nonce=jQuery.now(),ajax_rquery=/\?/,rhash=/#.*$/,rts=/([?&])_=[^&]*/,rheaders=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,rlocalProtocol=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,rnoContent=/^(?:GET|HEAD)$/,rprotocol=/^\/\//,rurl=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,_load=jQuery.fn.load,prefilters={},transports={},allTypes="*/".concat("*");try{ajaxLocation=location.href}catch(e){ajaxLocation=document.createElement("a"),ajaxLocation.href="",ajaxLocation=ajaxLocation.href}ajaxLocParts=rurl.exec(ajaxLocation.toLowerCase())||[],jQuery.fn.load=function(url,params,callback){if("string"!=typeof url&&_load)return _load.apply(this,arguments);var selector,response,type,self=this,off=url.indexOf(" ");return off>=0&&(selector=url.slice(off,url.length),url=url.slice(0,off)),jQuery.isFunction(params)?(callback=params,params=undefined):params&&"object"==typeof params&&(type="POST"),self.length>0&&jQuery.ajax({url:url,type:type,dataType:"html",data:params}).done(function(responseText){response=arguments,self.html(selector?jQuery("
").append(jQuery.parseHTML(responseText)).find(selector):responseText)}).complete(callback&&function(jqXHR,status){self.each(callback,response||[jqXHR.responseText,status,jqXHR])}),this},jQuery.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(i,type){jQuery.fn[type]=function(fn){return this.on(type,fn)}}),jQuery.each(["get","post"],function(i,method){jQuery[method]=function(url,data,callback,type){return jQuery.isFunction(data)&&(type=type||callback,callback=data,data=undefined),jQuery.ajax({url:url,type:method,dataType:type,data:data,success:callback})}}),jQuery.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:ajaxLocation,type:"GET",isLocal:rlocalProtocol.test(ajaxLocParts[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":allTypes,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":window.String,"text html":!0,"text json":jQuery.parseJSON,"text xml":jQuery.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(target,settings){return settings?ajaxExtend(ajaxExtend(target,jQuery.ajaxSettings),settings):ajaxExtend(jQuery.ajaxSettings,target)},ajaxPrefilter:addToPrefiltersOrTransports(prefilters),ajaxTransport:addToPrefiltersOrTransports(transports),ajax:function(url,options){function done(status,nativeStatusText,responses,headers){var isSuccess,success,error,response,modified,statusText=nativeStatusText;2!==state&&(state=2,timeoutTimer&&clearTimeout(timeoutTimer),transport=undefined,responseHeadersString=headers||"",jqXHR.readyState=status>0?4:0,responses&&(response=ajaxHandleResponses(s,jqXHR,responses)),status>=200&&status<300||304===status?(s.ifModified&&(modified=jqXHR.getResponseHeader("Last-Modified"),modified&&(jQuery.lastModified[cacheURL]=modified),modified=jqXHR.getResponseHeader("etag"),modified&&(jQuery.etag[cacheURL]=modified)),204===status?(isSuccess=!0,statusText="nocontent"):304===status?(isSuccess=!0,statusText="notmodified"):(isSuccess=ajaxConvert(s,response),statusText=isSuccess.state,success=isSuccess.data,error=isSuccess.error,isSuccess=!error)):(error=statusText,!status&&statusText||(statusText="error",status<0&&(status=0))),jqXHR.status=status,jqXHR.statusText=(nativeStatusText||statusText)+"",isSuccess?deferred.resolveWith(callbackContext,[success,statusText,jqXHR]):deferred.rejectWith(callbackContext,[jqXHR,statusText,error]),jqXHR.statusCode(statusCode),statusCode=undefined,fireGlobals&&globalEventContext.trigger(isSuccess?"ajaxSuccess":"ajaxError",[jqXHR,s,isSuccess?success:error]),completeDeferred.fireWith(callbackContext,[jqXHR,statusText]),fireGlobals&&(globalEventContext.trigger("ajaxComplete",[jqXHR,s]),--jQuery.active||jQuery.event.trigger("ajaxStop")))}"object"==typeof url&&(options=url,url=undefined),options=options||{};var parts,i,cacheURL,responseHeadersString,timeoutTimer,fireGlobals,transport,responseHeaders,s=jQuery.ajaxSetup({},options),callbackContext=s.context||s,globalEventContext=s.context&&(callbackContext.nodeType||callbackContext.jquery)?jQuery(callbackContext):jQuery.event,deferred=jQuery.Deferred(),completeDeferred=jQuery.Callbacks("once memory"),statusCode=s.statusCode||{},requestHeaders={},requestHeadersNames={},state=0,strAbort="canceled",jqXHR={readyState:0,getResponseHeader:function(key){var match;if(2===state){if(!responseHeaders)for(responseHeaders={};match=rheaders.exec(responseHeadersString);)responseHeaders[match[1].toLowerCase()]=match[2];match=responseHeaders[key.toLowerCase()]}return null==match?null:match},getAllResponseHeaders:function(){return 2===state?responseHeadersString:null},setRequestHeader:function(name,value){var lname=name.toLowerCase();return state||(name=requestHeadersNames[lname]=requestHeadersNames[lname]||name,requestHeaders[name]=value),this},overrideMimeType:function(type){return state||(s.mimeType=type),this},statusCode:function(map){var code;if(map)if(state<2)for(code in map)statusCode[code]=[statusCode[code],map[code]];else jqXHR.always(map[jqXHR.status]);return this},abort:function(statusText){var finalText=statusText||strAbort;return transport&&transport.abort(finalText),done(0,finalText),this}};if(deferred.promise(jqXHR).complete=completeDeferred.add,jqXHR.success=jqXHR.done,jqXHR.error=jqXHR.fail,s.url=((url||s.url||ajaxLocation)+"").replace(rhash,"").replace(rprotocol,ajaxLocParts[1]+"//"),s.type=options.method||options.type||s.method||s.type,s.dataTypes=jQuery.trim(s.dataType||"*").toLowerCase().match(core_rnotwhite)||[""],null==s.crossDomain&&(parts=rurl.exec(s.url.toLowerCase()),s.crossDomain=!(!parts||parts[1]===ajaxLocParts[1]&&parts[2]===ajaxLocParts[2]&&(parts[3]||("http:"===parts[1]?80:443))==(ajaxLocParts[3]||("http:"===ajaxLocParts[1]?80:443)))),s.data&&s.processData&&"string"!=typeof s.data&&(s.data=jQuery.param(s.data,s.traditional)),inspectPrefiltersOrTransports(prefilters,s,options,jqXHR),2===state)return jqXHR;fireGlobals=s.global,fireGlobals&&0===jQuery.active++&&jQuery.event.trigger("ajaxStart"),s.type=s.type.toUpperCase(),s.hasContent=!rnoContent.test(s.type),cacheURL=s.url,s.hasContent||(s.data&&(cacheURL=s.url+=(ajax_rquery.test(cacheURL)?"&":"?")+s.data,delete s.data),s.cache===!1&&(s.url=rts.test(cacheURL)?cacheURL.replace(rts,"$1_="+ajax_nonce++):cacheURL+(ajax_rquery.test(cacheURL)?"&":"?")+"_="+ajax_nonce++)),s.ifModified&&(jQuery.lastModified[cacheURL]&&jqXHR.setRequestHeader("If-Modified-Since",jQuery.lastModified[cacheURL]),jQuery.etag[cacheURL]&&jqXHR.setRequestHeader("If-None-Match",jQuery.etag[cacheURL])),(s.data&&s.hasContent&&s.contentType!==!1||options.contentType)&&jqXHR.setRequestHeader("Content-Type",s.contentType),jqXHR.setRequestHeader("Accept",s.dataTypes[0]&&s.accepts[s.dataTypes[0]]?s.accepts[s.dataTypes[0]]+("*"!==s.dataTypes[0]?", "+allTypes+"; q=0.01":""):s.accepts["*"]);for(i in s.headers)jqXHR.setRequestHeader(i,s.headers[i]);if(s.beforeSend&&(s.beforeSend.call(callbackContext,jqXHR,s)===!1||2===state))return jqXHR.abort();strAbort="abort";for(i in{success:1,error:1,complete:1})jqXHR[i](s[i]);if(transport=inspectPrefiltersOrTransports(transports,s,options,jqXHR)){jqXHR.readyState=1,fireGlobals&&globalEventContext.trigger("ajaxSend",[jqXHR,s]),s.async&&s.timeout>0&&(timeoutTimer=setTimeout(function(){jqXHR.abort("timeout")},s.timeout));try{state=1,transport.send(requestHeaders,done)}catch(e){if(!(state<2))throw e;done(-1,e)}}else done(-1,"No Transport");return jqXHR},getScript:function(url,callback){return jQuery.get(url,undefined,callback,"script")},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json")}}),jQuery.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(text){return jQuery.globalEval(text),text}}}),jQuery.ajaxPrefilter("script",function(s){s.cache===undefined&&(s.cache=!1),s.crossDomain&&(s.type="GET",s.global=!1)}),jQuery.ajaxTransport("script",function(s){if(s.crossDomain){var script,head=document.head||jQuery("head")[0]||document.documentElement;return{send:function(_,callback){script=document.createElement("script"),script.async=!0,s.scriptCharset&&(script.charset=s.scriptCharset),script.src=s.url,script.onload=script.onreadystatechange=function(_,isAbort){(isAbort||!script.readyState||/loaded|complete/.test(script.readyState))&&(script.onload=script.onreadystatechange=null,script.parentNode&&script.parentNode.removeChild(script),script=null,isAbort||callback(200,"success"))},head.insertBefore(script,head.firstChild)},abort:function(){script&&script.onload(undefined,!0)}}}});var oldCallbacks=[],rjsonp=/(=)\?(?=&|$)|\?\?/;jQuery.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var callback=oldCallbacks.pop()||jQuery.expando+"_"+ajax_nonce++;return this[callback]=!0,callback}}),jQuery.ajaxPrefilter("json jsonp",function(s,originalSettings,jqXHR){var callbackName,overwritten,responseContainer,jsonProp=s.jsonp!==!1&&(rjsonp.test(s.url)?"url":"string"==typeof s.data&&!(s.contentType||"").indexOf("application/x-www-form-urlencoded")&&rjsonp.test(s.data)&&"data");if(jsonProp||"jsonp"===s.dataTypes[0])return callbackName=s.jsonpCallback=jQuery.isFunction(s.jsonpCallback)?s.jsonpCallback():s.jsonpCallback,jsonProp?s[jsonProp]=s[jsonProp].replace(rjsonp,"$1"+callbackName):s.jsonp!==!1&&(s.url+=(ajax_rquery.test(s.url)?"&":"?")+s.jsonp+"="+callbackName),s.converters["script json"]=function(){return responseContainer||jQuery.error(callbackName+" was not called"),responseContainer[0]},s.dataTypes[0]="json",overwritten=window[callbackName],window[callbackName]=function(){responseContainer=arguments},jqXHR.always(function(){window[callbackName]=overwritten,s[callbackName]&&(s.jsonpCallback=originalSettings.jsonpCallback,oldCallbacks.push(callbackName)),responseContainer&&jQuery.isFunction(overwritten)&&overwritten(responseContainer[0]),responseContainer=overwritten=undefined}),"script"});var xhrCallbacks,xhrSupported,xhrId=0,xhrOnUnloadAbort=window.ActiveXObject&&function(){var key;for(key in xhrCallbacks)xhrCallbacks[key](undefined,!0)};jQuery.ajaxSettings.xhr=window.ActiveXObject?function(){return!this.isLocal&&createStandardXHR()||createActiveXHR()}:createStandardXHR,xhrSupported=jQuery.ajaxSettings.xhr(),jQuery.support.cors=!!xhrSupported&&"withCredentials"in xhrSupported,xhrSupported=jQuery.support.ajax=!!xhrSupported,xhrSupported&&jQuery.ajaxTransport(function(s){if(!s.crossDomain||jQuery.support.cors){var callback;return{send:function(headers,complete){var handle,i,xhr=s.xhr();if(s.username?xhr.open(s.type,s.url,s.async,s.username,s.password):xhr.open(s.type,s.url,s.async),s.xhrFields)for(i in s.xhrFields)xhr[i]=s.xhrFields[i];s.mimeType&&xhr.overrideMimeType&&xhr.overrideMimeType(s.mimeType),s.crossDomain||headers["X-Requested-With"]||(headers["X-Requested-With"]="XMLHttpRequest");try{for(i in headers)xhr.setRequestHeader(i,headers[i])}catch(err){}xhr.send(s.hasContent&&s.data||null),callback=function(_,isAbort){var status,responseHeaders,statusText,responses;try{if(callback&&(isAbort||4===xhr.readyState))if(callback=undefined,handle&&(xhr.onreadystatechange=jQuery.noop,xhrOnUnloadAbort&&delete xhrCallbacks[handle]),isAbort)4!==xhr.readyState&&xhr.abort();else{responses={},status=xhr.status,responseHeaders=xhr.getAllResponseHeaders(),"string"==typeof xhr.responseText&&(responses.text=xhr.responseText);try{statusText=xhr.statusText}catch(e){statusText=""}status||!s.isLocal||s.crossDomain?1223===status&&(status=204):status=responses.text?200:404}}catch(firefoxAccessException){isAbort||complete(-1,firefoxAccessException)}responses&&complete(status,statusText,responses,responseHeaders)},s.async?4===xhr.readyState?setTimeout(callback):(handle=++xhrId,xhrOnUnloadAbort&&(xhrCallbacks||(xhrCallbacks={},jQuery(window).unload(xhrOnUnloadAbort)),xhrCallbacks[handle]=callback),xhr.onreadystatechange=callback):callback()},abort:function(){callback&&callback(undefined,!0)}}}});var fxNow,timerId,rfxtypes=/^(?:toggle|show|hide)$/,rfxnum=new RegExp("^(?:([+-])=|)("+core_pnum+")([a-z%]*)$","i"),rrun=/queueHooks$/,animationPrefilters=[defaultPrefilter],tweeners={"*":[function(prop,value){var end,unit,tween=this.createTween(prop,value),parts=rfxnum.exec(value),target=tween.cur(),start=+target||0,scale=1,maxIterations=20;if(parts){if(end=+parts[2],unit=parts[3]||(jQuery.cssNumber[prop]?"":"px"),"px"!==unit&&start){start=jQuery.css(tween.elem,prop,!0)||end||1;do scale=scale||".5",start/=scale,jQuery.style(tween.elem,prop,start+unit);while(scale!==(scale=tween.cur()/target)&&1!==scale&&--maxIterations)}tween.unit=unit,tween.start=start,tween.end=parts[1]?start+(parts[1]+1)*end:end}return tween}]};jQuery.Animation=jQuery.extend(Animation,{tweener:function(props,callback){jQuery.isFunction(props)?(callback=props,props=["*"]):props=props.split(" ");for(var prop,index=0,length=props.length;index-1,props={},curPosition={},curTop,curLeft;calculatePosition?(curPosition=curElem.position(),curTop=curPosition.top,curLeft=curPosition.left):(curTop=parseFloat(curCSSTop)||0,curLeft=parseFloat(curCSSLeft)||0),jQuery.isFunction(options)&&(options=options.call(elem,i,curOffset)),null!=options.top&&(props.top=options.top-curOffset.top+curTop),null!=options.left&&(props.left=options.left-curOffset.left+curLeft),"using"in options?options.using.call(elem,props):curElem.css(props)}},jQuery.fn.extend({position:function(){if(this[0]){var offsetParent,offset,parentOffset={top:0,left:0},elem=this[0];return"fixed"===jQuery.css(elem,"position")?offset=elem.getBoundingClientRect():(offsetParent=this.offsetParent(),offset=this.offset(),jQuery.nodeName(offsetParent[0],"html")||(parentOffset=offsetParent.offset()),parentOffset.top+=jQuery.css(offsetParent[0],"borderTopWidth",!0),parentOffset.left+=jQuery.css(offsetParent[0],"borderLeftWidth",!0)),{top:offset.top-parentOffset.top-jQuery.css(elem,"marginTop",!0),left:offset.left-parentOffset.left-jQuery.css(elem,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var offsetParent=this.offsetParent||document.documentElement;offsetParent&&!jQuery.nodeName(offsetParent,"html")&&"static"===jQuery.css(offsetParent,"position");)offsetParent=offsetParent.offsetParent;return offsetParent||document.documentElement})}}),jQuery.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(method,prop){var top=/Y/.test(prop);jQuery.fn[method]=function(val){return jQuery.access(this,function(elem,method,val){var win=getWindow(elem);return val===undefined?win?prop in win?win[prop]:win.document.documentElement[method]:elem[method]:void(win?win.scrollTo(top?jQuery(win).scrollLeft():val,top?val:jQuery(win).scrollTop()):elem[method]=val)},method,val,arguments.length,null)}}),jQuery.each({Height:"height",Width:"width"},function(name,type){jQuery.each({padding:"inner"+name,content:type,"":"outer"+name},function(defaultExtra,funcName){jQuery.fn[funcName]=function(margin,value){var chainable=arguments.length&&(defaultExtra||"boolean"!=typeof margin),extra=defaultExtra||(margin===!0||value===!0?"margin":"border");return jQuery.access(this,function(elem,type,value){var doc;return jQuery.isWindow(elem)?elem.document.documentElement["client"+name]:9===elem.nodeType?(doc=elem.documentElement,Math.max(elem.body["scroll"+name],doc["scroll"+name],elem.body["offset"+name],doc["offset"+name],doc["client"+name])):value===undefined?jQuery.css(elem,type,extra):jQuery.style(elem,type,value,extra)},type,chainable?margin:undefined,chainable,null)}})}),BI.jQuery=BI.$=jQuery,window.$=window.$||jQuery,window.jQuery=window.jQuery||jQuery,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return jQuery})}(window),BI.$.extend(BI.$.Event.prototype,{stopEvent:function(){this.stopPropagation(),this.preventDefault()}}),BI.jQuery&&(!function($){$.fn.insets||($.fn.insets=function(){var p=this.padding(),b=this.border();return{top:p.top,bottom:p.bottom+b.bottom+b.top,left:p.left,right:p.right+b.right+b.left}}),$.fn.bounds||($.fn.bounds=function(value){var tmp={hasIgnoredBounds:!0};return value?(isNaN(value.x)||(tmp.left=value.x),isNaN(value.y)||(tmp.top=value.y),null!=value.width&&(tmp.width=value.width-(this.outerWidth(!0)-this.width()),tmp.width=tmp.width>=0?tmp.width:value.width),null!=value.height&&(tmp.height=value.height-(this.outerHeight(!0)-this.height()),tmp.height=tmp.height>=0?tmp.height:value.height),this.css(tmp),this):(tmp=this.position(),{x:tmp.left,y:tmp.top,width:this.outerWidth(),height:this.outerHeight()})})}(BI.jQuery),BI.extend(BI.jQuery.fn,{destroy:function(){this.remove(),BI.isIE()===!0&&(this[0].outerHTML="")},__textKeywordMarked__:function(text,keyword,py){if(!BI.isKey(keyword)||(text+"").length>100)return this.html(BI.htmlEncode(text));keyword+="",keyword=BI.toUpperCase(keyword);var textLeft=(text||"")+"";for(py=(py||BI.makeFirstPY(text))+"",null!=py&&(py=BI.toUpperCase(py)),this.empty();py.length>0&&textLeft.length>0;){var tidx=BI.toUpperCase(textLeft).indexOf(keyword),pidx=null;if(null!=py&&(pidx=py.indexOf(keyword),pidx>=0&&(pidx%=text.length)),tidx>=0)this.append(BI.htmlEncode(textLeft.substr(0,tidx))),this.append(BI.$("").addClass("bi-keyword-red-mark").html(BI.htmlEncode(textLeft.substr(tidx,keyword.length)))),textLeft=textLeft.substr(tidx+keyword.length),null!=py&&(py=py.substr(tidx+keyword.length));else{if(!(null!=pidx&&pidx>=0&&Math.floor(pidx/text.length)===Math.floor((pidx+keyword.length-1)/text.length))){this.append(BI.htmlEncode(textLeft));break}this.append(BI.htmlEncode(textLeft.substr(0,pidx))),this.append(BI.$("").addClass("bi-keyword-red-mark").html(BI.htmlEncode(textLeft.substr(pidx,keyword.length)))),null!=py&&(py=py.substr(pidx+keyword.length)),textLeft=textLeft.substr(pidx+keyword.length)}}return this},getDomHeight:function(parent){var clone=BI.$(this).clone();clone.appendTo(BI.$(parent||"body"));var height=clone.height();return clone.remove(),height},hasVerticalScroll:function(){return this.height()>0&&this[0].clientWidth0&&this[0].clientHeightoffset2Body.left+width||e.pageYoffset2Body.top+height)},__hasZIndexMask__:function(zindex){return zindex&&null!=this.zIndexMask[zindex]},__buildZIndexMask__:function(zindex,domArray){this.zIndexMask=this.zIndexMask||{},this.indexMask=this.indexMask||[];var mask=BI.createWidget({type:"bi.center_adapt",cls:"bi-z-index-mask",items:domArray});return mask.element.css({"z-index":zindex}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:mask,left:0,right:0,top:0,bottom:0}]}),this.indexMask.push(mask),zindex&&(this.zIndexMask[zindex]=mask),mask.element},__releaseZIndexMask__:function(zindex){if(zindex&&this.zIndexMask[zindex])return BI.remove(this.indexMask,this.zIndexMask[zindex]),void this.zIndexMask[zindex].destroy();this.indexMask=this.indexMask||[];var indexMask=this.indexMask.pop();indexMask&&indexMask.destroy()}})),_.extend(BI,{$import:function(){function loadReady(src,must){var $scripts=BI.$("head script, body script");BI.$.each($scripts,function(i,item){item.src.indexOf(src)!=-1&&(_LOADED[src]=!0)});var $links=BI.$("head link");BI.$.each($links,function(i,item){item.href.indexOf(src)!=-1&&must&&(_LOADED[src]=!1,BI.$(item).remove())})}var _LOADED={};return function(src,ext,must){if(loadReady(src,must),_LOADED[src]!==!0)if("css"===ext){var link=document.createElement("link");link.rel="stylesheet",link.type="text/css",link.href=src;var head=document.getElementsByTagName("head")[0];head.appendChild(link),_LOADED[src]=!0}else BI.$.ajax({url:src,dataType:"script",async:!1,cache:!0,complete:function(res,status){"success"==status&&(_LOADED[src]=!0)}})}}()}),Number.prototype.toFixed&&"0.000"===8e-5.toFixed(3)&&"0"!==.9.toFixed(0)&&"1.25"===1.255.toFixed(2)&&"1000000000000000128"===(0xde0b6b3a7640080).toFixed(0)||!function(){function multiply(n,c){for(var i=-1;++i=0;)c+=data[i],data[i]=Math.floor(c/n),c=c%n*base}function toString(){for(var i=size,s="";--i>=0;)if(""!==s||0===i||0!==data[i]){var t=String(data[i]);""===s?s=t:s+="0000000".slice(0,7-t.length)+t}return s}function pow(x,n,acc){return 0===n?acc:n%2===1?pow(x,n-1,acc*x):pow(x*x,n/2,acc)}function log(x){for(var n=0;x>=4096;)n+=12,x/=4096;for(;x>=2;)n+=1,x/=2;return n}var base,size,data,i;base=1e7,size=6,data=[0,0,0,0,0,0],Number.prototype.toFixed=function(fractionDigits){var f,x,s,m,e,z,j,k;if(f=Number(fractionDigits),f=f!==f?0:Math.floor(f),f<0||f>20)throw new RangeError("Number.toFixed called with invalid number of decimals");if(x=Number(this),x!==x)return"NaN";if(x<=-1e21||x>1e21)return String(x);if(s="",x<0&&(s="-",x=-x),m="0",x>1e-21)if(e=log(x*pow(2,69,1))-69,z=e<0?x*pow(2,-e,1):x/pow(2,e,1),z*=4503599627370496,e=52-e,e>0){for(multiply(0,z),j=f;j>=7;)multiply(1e7,0),j-=7;for(multiply(pow(10,j,1),0),j=e-1;j>=23;)divide(1<<23),j-=23;divide(1<0?(k=m.length,m=k<=f?s+"0.0000000000000000000".slice(0,f-k+2)+m:s+m.slice(0,k-f)+"."+m.slice(k-f)):m=s+m,m}}(),_.extend(BI,{MAX:0x1000000000000000,MIN:-0x1000000000000000,EVENT_RESPONSE_TIME:200,zIndex_layer:1e5,zIndex_popover:1e6,zIndex_popup:1e7,zIndex_masker:1e8,zIndex_tip:1e9,emptyStr:"",emptyFn:function(){},empty:null,Key:{48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9",106:"*",107:"+",109:"-",110:".",111:"/"},KeyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},Status:{SUCCESS:1,WRONG:2,START:3,END:4,WAITING:5,READY:6,RUNNING:7,OUTOFBOUNDS:8,NULL:-1},Direction:{Top:"top",Bottom:"bottom",Left:"left",Right:"right",Custom:"custom"},Axis:{Vertical:"vertical",Horizontal:"horizontal"},Selection:{Default:-2,None:-1,Single:0,Multi:1,All:2},HorizontalAlign:{Left:"left",Right:"right",Center:"center",Stretch:"stretch"},VerticalAlign:{Middle:"middle",Top:"top",Bottom:"bottom",Stretch:"stretch"},StartOfWeek:1}),BI.version="2.0",BI.AbsoluteCenterLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.AbsoluteCenterLayout.superclass.props.apply(this,arguments),{baseCls:"bi-absolute-center-layout",hgap:0,lgap:0,rgap:0,vgap:0,tgap:0,bgap:0})},render:function(){BI.AbsoluteCenterLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.AbsoluteCenterLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"absolute",left:o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0),right:o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0),top:o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0),bottom:o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0),margin:"auto"}),w},resize:function(){},populate:function(items){BI.AbsoluteCenterLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.absolute_center_adapt",BI.AbsoluteCenterLayout),BI.AbsoluteHorizontalLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.AbsoluteHorizontalLayout.superclass.props.apply(this,arguments),{baseCls:"bi-absolute-horizontal-layout",hgap:0,lgap:0,rgap:0,vgap:0,tgap:0,bgap:0})},render:function(){BI.AbsoluteHorizontalLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.AbsoluteHorizontalLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"absolute",left:o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0),right:o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0),margin:"auto"}),o.vgap+o.tgap+(item.vgap||0)+(item.tgap||0)!==0&&w.element.css("top",o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)),o.vgap+o.bgap+(item.vgap||0)+(item.bgap||0)!==0&&w.element.css("bottom",o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)),w},resize:function(){},populate:function(items){BI.AbsoluteHorizontalLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.absolute_horizontal_adapt",BI.AbsoluteHorizontalLayout),BI.AbsoluteVerticalLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.AbsoluteVerticalLayout.superclass.props.apply(this,arguments),{baseCls:"bi-absolute-vertical-layout",hgap:0,lgap:0,rgap:0,vgap:0,tgap:0,bgap:0})},render:function(){BI.AbsoluteVerticalLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.AbsoluteVerticalLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"absolute",left:item.lgap,right:item.rgap,top:o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0),bottom:o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0),margin:"auto"}),o.hgap+o.lgap+(item.hgap||0)+(item.lgap||0)!==0&&w.element.css("left",o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)),o.hgap+o.rgap+(item.hgap||0)+(item.rgap||0)!==0&&w.element.css("right",o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)),w},resize:function(){},populate:function(items){BI.AbsoluteVerticalLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.absolute_vertical_adapt",BI.AbsoluteVerticalLayout),BI.CenterAdaptLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.CenterAdaptLayout.superclass.props.apply(this,arguments),{baseCls:"bi-center-adapt-layout",horizontalAlign:BI.HorizontalAlign.Center,columnSize:[],scrollx:!1,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){var o=this.options,self=this;return BI.CenterAdaptLayout.superclass.render.apply(this,arguments),{type:"bi.horizontal",verticalAlign:BI.VerticalAlign.Middle,horizontalAlign:o.horizontalAlign,columnSize:o.columnSize,scrollx:o.scrollx,items:o.items,ref:function(_ref){self.layout=_ref},hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap}},resize:function(){},populate:function(items){this.layout.populate.apply(this,arguments)}}),BI.shortcut("bi.center_adapt",BI.CenterAdaptLayout),BI.HorizontalAdaptLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.HorizontalAdaptLayout.superclass.props.apply(this,arguments),{baseCls:"bi-horizontal-adapt-layout",verticalAlign:BI.VerticalAlign.Top,horizontalAlign:BI.HorizontalAlign.Center,columnSize:[],scrollx:!1,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){var self=this,o=this.options;return BI.HorizontalAdaptLayout.superclass.render.apply(this,arguments),{type:"bi.horizontal",verticalAlign:BI.VerticalAlign.Top,horizontalAlign:o.horizontalAlign,columnSize:o.columnSize,items:o.items,scrollx:o.scrollx,ref:function(_ref){self.layout=_ref},hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap}},resize:function(){},populate:function(items){this.layout.populate.apply(this,arguments)}}),BI.shortcut("bi.horizontal_adapt",BI.HorizontalAdaptLayout),BI.LeftRightVerticalAdaptLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.LeftRightVerticalAdaptLayout.superclass.props.apply(this,arguments),{baseCls:"bi-left-right-vertical-adapt-layout",items:{},llgap:0,lrgap:0,lhgap:0,rlgap:0,rrgap:0,rhgap:0})},render:function(){var o=this.options,self=this;BI.LeftRightVerticalAdaptLayout.superclass.render.apply(this,arguments);var layoutArray=[];return"left"in o.items&&layoutArray.push({type:"bi.left",items:[{el:{type:"bi.vertical_adapt",height:"100%",items:o.items.left,hgap:o.lhgap,lgap:o.llgap,rgap:o.lrgap}}]}),"right"in o.items&&layoutArray.push({type:"bi.right",items:[{el:{type:"bi.vertical_adapt",height:"100%",items:o.items.right,textAlign:"right",hgap:o.rhgap,lgap:o.rlgap,rgap:o.rrgap}}]}),layoutArray},resize:function(){},addItem:function(){throw new Error("cannot be added")},populate:function(items){BI.LeftRightVerticalAdaptLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.left_right_vertical_adapt",BI.LeftRightVerticalAdaptLayout),BI.LeftVerticalAdaptLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.LeftRightVerticalAdaptLayout.superclass.props.apply(this,arguments),{baseCls:"bi-left-vertical-adapt-layout",items:[],lgap:0,rgap:0,hgap:0})},render:function(){var o=this.options,self=this;return BI.LeftVerticalAdaptLayout.superclass.render.apply(this,arguments),{type:"bi.left",ref:function(_ref){self.layout=_ref},items:[{el:{type:"bi.vertical_adapt",height:"100%",items:o.items,lgap:o.lgap,hgap:o.hgap,rgap:o.rgap}}]}},resize:function(){},addItem:function(){throw new Error("cannot be added")},populate:function(items){this.layout.populate.apply(this,arguments)}}),BI.shortcut("bi.left_vertical_adapt",BI.LeftVerticalAdaptLayout),BI.RightVerticalAdaptLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.RightVerticalAdaptLayout.superclass.props.apply(this,arguments),{baseCls:"bi-right-vertical-adapt-layout",items:[],lgap:0,rgap:0,hgap:0})},render:function(){var o=this.options,self=this;return BI.RightVerticalAdaptLayout.superclass.render.apply(this,arguments),{type:"bi.right",ref:function(_ref){self.layout=_ref},items:[{el:{type:"bi.vertical_adapt",height:"100%",textAlign:"right",items:o.items,lgap:o.lgap,hgap:o.hgap,rgap:o.rgap}}]}},resize:function(){},addItem:function(){throw new Error("cannot be added")},populate:function(items){this.layout.populate.apply(this,arguments)}}),BI.shortcut("bi.right_vertical_adapt",BI.RightVerticalAdaptLayout),BI.TableAdaptLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.TableAdaptLayout.superclass.props.apply(this,arguments),{baseCls:"bi-table-center-adapt-layout",columnSize:[],verticalAlign:BI.VerticalAlign.Top,horizontalAlign:BI.HorizontalAlign.Left,scrollx:!0,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){var o=this.options;BI.TableAdaptLayout.superclass.render.apply(this,arguments),this.$table=BI.Widget._renderEngine.createElement("
").css({position:"relative",display:"table",height:o.verticalAlign===BI.VerticalAlign.Middle?"100%":"auto",width:o.horizontalAlign===BI.HorizontalAlign.Center?"100%":"auto","white-space":"nowrap"}),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,td,width=o.columnSize[i]<=1?100*o.columnSize[i]+"%":o.columnSize[i];if(this.hasWidget(this._getChildName(i)))td=this.getWidgetByName(this._getChildName(i)),td.element.width(width);else{var w=BI.createWidget(item);w.element.css({position:"relative",top:"0",left:"0",margin:"0px auto"}),td=BI.createWidget({type:"bi.default",width:width,items:[w]}),this.addWidget(this._getChildName(i),td)}return td.element.css({"max-width":o.columnSize[i]<=1?width:width+"px"}),0===i&&td.element.addClass("first-element"),td.element.css({position:"relative",display:"table-cell","vertical-align":o.verticalAlign,margin:"0",padding:"0",height:"100%"}),o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-top":o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)+"px"}),o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-left":(0===i?o.hgap:0)+o.lgap+(item.lgap||0)+(item.hgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-right":o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)+"px"}),td},appendFragment:function(frag){this.$table.append(frag),this.element.append(this.$table)},resize:function(){},populate:function(items){BI.TableAdaptLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.table_adapt",BI.TableAdaptLayout),BI.VerticalAdaptLayout=BI.inherit(BI.Layout,{props:{baseCls:"bi-vertical-adapt-layout",horizontalAlign:BI.HorizontalAlign.Left,columnSize:[],scrollx:!1,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0},render:function(){var self=this,o=this.options;return BI.VerticalAdaptLayout.superclass.render.apply(this,arguments),{type:"bi.horizontal",verticalAlign:BI.VerticalAlign.Middle,horizontalAlign:o.horizontalAlign,columnSize:o.columnSize,items:o.items,scrollx:o.scrollx,ref:function(_ref){self.layout=_ref},hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap}},resize:function(){},populate:function(items){this.layout.populate.apply(this,arguments)}}),BI.shortcut("bi.vertical_adapt",BI.VerticalAdaptLayout),BI.HorizontalAutoLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.HorizontalAutoLayout.superclass.props.apply(this,arguments),{baseCls:"bi-horizon-auto-layout",hgap:0,lgap:0,rgap:0,vgap:0,tgap:0,bgap:0})},render:function(){BI.HorizontalAutoLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.HorizontalAutoLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"relative",margin:"0px auto"}),o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-top":(0===i?o.vgap:0)+o.tgap+(item.tgap||0)+(item.vgap||0)+"px"}),o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-left":o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-right":o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)+"px"}),w},resize:function(){},populate:function(items){BI.HorizontalAutoLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.horizontal_auto",BI.HorizontalAutoLayout),BI.FloatHorizontalLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FloatHorizontalLayout.superclass.props.apply(this,arguments),{baseCls:"bi-float-horizontal-adapt-layout",items:[],hgap:0,vgap:0,tgap:0,bgap:0,lgap:0,rgap:0})},render:function(){BI.FloatHorizontalLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},resize:function(){},mounted:function(){var self=this,width=this.left.element.width(),height=this.left.element.height();this.left.element.width(width).height(height).css("float","none"),BI.remove(this._children,function(i,wi){wi===self.container&&delete self._children[i]}),BI.createWidget({type:"bi.horizontal_auto",element:this,items:[this.left]})},_addElement:function(i,item){var self=this,o=this.options;return this.left=BI.createWidget({type:"bi.vertical",items:[item],hgap:o.hgap,vgap:o.vgap,tgap:o.tgap,bgap:o.bgap,lgap:o.lgap,rgap:o.rgap}),this.container=BI.createWidget({type:"bi.left",element:this,items:[this.left]}),this.left},populate:function(items){BI.HorizontalAutoLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.horizontal_float",BI.FloatHorizontalLayout),BI.InlineCenterAdaptLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.InlineLayout.superclass.props.apply(this,arguments),{baseCls:"bi-inline-center-adapt-layout",hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){BI.InlineCenterAdaptLayout.superclass.render.apply(this,arguments),this.element.css({whiteSpace:"nowrap",textAlign:"center"}),this.populate(this.options.items)},_addElement:function(i,item,length){var o=this.options,w=BI.InlineVerticalAdaptLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"relative","vertical-align":"middle"}),w.element.addClass("inline-center-adapt-item"),o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-top":o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)+"px"}),o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-left":(0===i?o.hgap:0)+o.lgap+(item.lgap||0)+(item.hgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-right":o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)+"px"}),w},resize:function(){this.stroke(this.options.items)},addItem:function(item){throw new Error("不能添加元素")},stroke:function(items){var self=this;BI.each(items,function(i,item){item&&self._addElement(i,item,items.length)})},populate:function(items){BI.InlineCenterAdaptLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.inline_center_adapt",BI.InlineCenterAdaptLayout),BI.InlineVerticalAdaptLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.InlineLayout.superclass.props.apply(this,arguments),{baseCls:"bi-inline-vertical-adapt-layout",hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0,textAlign:"left"})},render:function(){BI.InlineVerticalAdaptLayout.superclass.render.apply(this,arguments);var o=this.options;this.element.css({whiteSpace:"nowrap",textAlign:o.textAlign}),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.InlineVerticalAdaptLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"relative","vertical-align":"middle"}),w.element.addClass("inline-vertical-adapt-item"),o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-top":o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)+"px"}),o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-left":(0===i?o.hgap:0)+o.lgap+(item.lgap||0)+(item.hgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-right":o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)+"px"}),w},resize:function(){this.stroke(this.options.items)},populate:function(items){BI.InlineVerticalAdaptLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.inline_vertical_adapt",BI.InlineVerticalAdaptLayout),BI.FlexCenterLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FlexCenterLayout.superclass.props.apply(this,arguments),{baseCls:"bi-flex-center-adapt-layout",hgap:0,vgap:0})},render:function(){BI.FlexCenterLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.FlexCenterLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"relative","flex-shrink":"0","margin-left":(0===i?o.hgap:0)+"px","margin-right":o.hgap+"px","margin-top":o.vgap+"px","margin-bottom":o.vgap+"px"}),w},resize:function(){},populate:function(items){BI.FlexCenterLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.flex_center_adapt",BI.FlexCenterLayout),BI.FlexHorizontalCenter=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FlexHorizontalCenter.superclass.props.apply(this,arguments),{baseCls:"bi-flex-horizontal-center-adapt-layout",verticalAlign:BI.VerticalAlign.Top,rowSize:[],scrolly:!1,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){var self=this,o=this.options;return{type:"bi.flex_vertical",ref:function(_ref){self.wrapper=_ref},horizontalAlign:BI.HorizontalAlign.Center,verticalAlign:o.verticalAlign,rowSize:o.rowSize,scrollx:o.scrollx,scrolly:o.scrolly,scrollable:o.scrollable,hgap:o.hgap,vgap:o.vgap,tgap:o.tgap,bgap:o.bgap,items:o.items}},resize:function(){},update:function(opt){return this.wrapper.update(opt)},populate:function(items){this.wrapper.populate(items)}}),BI.shortcut("bi.flex_horizontal_adapt",BI.FlexHorizontalCenter),BI.shortcut("bi.flex_horizontal_center_adapt",BI.FlexHorizontalCenter),BI.FlexHorizontalLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FlexHorizontalLayout.superclass.props.apply(this,arguments),{baseCls:"bi-flex-horizontal-layout",verticalAlign:BI.VerticalAlign.Top,horizontalAlign:BI.HorizontalAlign.Left,columnSize:[],scrollx:!0,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){BI.FlexHorizontalLayout.superclass.render.apply(this,arguments);var o=this.options;this.element.addClass("v-"+o.verticalAlign).addClass("h-"+o.horizontalAlign),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.FlexHorizontalLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"relative","flex-shrink":"0"}),o.columnSize[i]>0&&w.element.width(o.columnSize[i]),"fill"===o.columnSize[i]&&w.element.css("flex","1"),o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-top":o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)+"px"}),o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-left":(0===i?o.hgap:0)+o.lgap+(item.lgap||0)+(item.hgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)!==0&&w.element.css({ +"margin-right":o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)+"px"}),w},resize:function(){},populate:function(items){BI.FlexHorizontalLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.flex_horizontal",BI.FlexHorizontalLayout),BI.FlexVerticalCenter=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FlexVerticalCenter.superclass.props.apply(this,arguments),{baseCls:"bi-flex-vertical-center-adapt-layout",horizontalAlign:BI.HorizontalAlign.Left,columnSize:[],scrollx:!1,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){var self=this,o=this.options;return{type:"bi.flex_horizontal",ref:function(_ref){self.wrapper=_ref},verticalAlign:BI.VerticalAlign.Middle,horizontalAlign:o.horizontalAlign,columnSize:o.columnSize,scrollx:o.scrollx,scrolly:o.scrolly,scrollable:o.scrollable,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,hgap:o.hgap,items:o.items}},resize:function(){},update:function(opt){return this.wrapper.update(opt)},populate:function(items){this.wrapper.populate(items)}}),BI.shortcut("bi.flex_vertical_adapt",BI.FlexVerticalCenter),BI.shortcut("bi.flex_vertical_center_adapt",BI.FlexVerticalCenter),BI.FlexVerticalLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FlexVerticalLayout.superclass.props.apply(this,arguments),{baseCls:"bi-flex-vertical-layout",horizontalAlign:BI.HorizontalAlign.Left,verticalAlign:BI.VerticalAlign.Top,rowSize:[],scrolly:!0,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){BI.FlexVerticalLayout.superclass.render.apply(this,arguments);var o=this.options;this.element.addClass("h-"+o.horizontalAlign).addClass("v-"+o.verticalAlign),this.populate(this.options.items)},_addElement:function(i,item){var w=BI.FlexVerticalLayout.superclass._addElement.apply(this,arguments),o=this.options;return w.element.css({position:"relative","flex-shrink":"0"}),o.rowSize[i]>0&&w.element.height(o.rowSize[i]),"fill"===o.rowSize[i]&&w.element.css("flex","1"),o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-top":(0===i?o.vgap:0)+o.tgap+(item.tgap||0)+(item.vgap||0)+"px"}),o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-left":o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-right":o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)+"px"}),w},resize:function(){},populate:function(items){BI.FlexVerticalLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.flex_vertical",BI.FlexVerticalLayout),BI.FlexWrapperCenterLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FlexWrapperCenterLayout.superclass.props.apply(this,arguments),{baseCls:"bi-flex-scrollable-center-adapt-layout clearfix",scrollable:!0})},render:function(){BI.FlexWrapperCenterLayout.superclass.render.apply(this,arguments),this.$wrapper=BI.Widget._renderEngine.createElement("
").addClass("flex-scrollable-center-adapt-layout-wrapper"),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.FlexWrapperCenterLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"relative","margin-left":(0===i?o.hgap:0)+"px","margin-right":o.hgap+"px","margin-top":o.vgap+"px","margin-bottom":o.vgap+"px"}),w},appendFragment:function(frag){this.$wrapper.append(frag),this.element.append(this.$wrapper)},_getWrapper:function(){return this.$wrapper},resize:function(){},populate:function(items){BI.FlexWrapperCenterLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.flex_scrollable_center_adapt",BI.FlexWrapperCenterLayout),BI.FlexWrapperHorizontalCenter=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FlexWrapperHorizontalCenter.superclass.props.apply(this,arguments),{baseCls:"bi-flex-scrollable-vertical-center-adapt-layout clearfix",verticalAlign:BI.VerticalAlign.Top,rowSize:[],scrollable:!0,scrolly:!1,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){var self=this,o=this.options;return{type:"bi.flex_scrollable_vertical",ref:function(_ref){self.wrapper=_ref},horizontalAlign:BI.HorizontalAlign.Center,verticalAlign:o.verticalAlign,rowSize:o.rowSize,scrollx:o.scrollx,scrolly:o.scrolly,scrollable:o.scrollable,hgap:o.hgap,vgap:o.vgap,tgap:o.tgap,bgap:o.bgap,items:o.items}},update:function(opt){return this.wrapper.update(opt)},populate:function(items){this.wrapper.populate(items)}}),BI.shortcut("bi.flex_scrollable_horizontal_adapt",BI.FlexWrapperHorizontalCenter),BI.shortcut("bi.flex_scrollable_horizontal_center_adapt",BI.FlexWrapperHorizontalCenter),BI.FlexWrapperHorizontalLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FlexWrapperHorizontalLayout.superclass.props.apply(this,arguments),{baseCls:"bi-flex-scrollable-horizontal-layout clearfix",verticalAlign:BI.VerticalAlign.Top,horizontalAlign:BI.HorizontalAlign.Left,columnSize:[],scrollable:null,scrollx:!0,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){BI.FlexWrapperHorizontalLayout.superclass.render.apply(this,arguments);var o=this.options;this.$wrapper=BI.Widget._renderEngine.createElement("
").addClass("flex-scrollable-horizontal-layout-wrapper v-"+o.verticalAlign).addClass("h-"+o.horizontalAlign),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.FlexWrapperHorizontalLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"relative","flex-shrink":"0"}),o.columnSize[i]>0&&w.element.width(o.columnSize[i]),"fill"===o.columnSize[i]&&w.element.css("flex","1"),o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-top":o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)+"px"}),o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-left":(0===i?o.hgap:0)+o.lgap+(item.lgap||0)+(item.hgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-right":o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)+"px"}),w},appendFragment:function(frag){this.$wrapper.append(frag),this.element.append(this.$wrapper)},_getWrapper:function(){return this.$wrapper},resize:function(){},populate:function(items){BI.FlexWrapperHorizontalLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.flex_scrollable_horizontal",BI.FlexWrapperHorizontalLayout),BI.FlexWrapperVerticalCenter=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FlexWrapperVerticalCenter.superclass.props.apply(this,arguments),{baseCls:"bi-flex-scrollable-vertical-center-adapt-layout clearfix",horizontalAlign:BI.HorizontalAlign.Left,columnSize:[],scrollx:!1,scrollable:!0,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){var self=this,o=this.options;return{type:"bi.flex_scrollable_horizontal",ref:function(_ref){self.wrapper=_ref},verticalAlign:BI.VerticalAlign.Middle,horizontalAlign:o.horizontalAlign,columnSize:o.columnSize,scrollx:o.scrollx,scrolly:o.scrolly,scrollable:o.scrollable,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,items:o.items}},update:function(opt){return this.wrapper.update(opt)},populate:function(items){this.wrapper.populate(items)}}),BI.shortcut("bi.flex_scrollable_vertical_adapt",BI.FlexWrapperVerticalCenter),BI.shortcut("bi.flex_scrollable_vertical_center_adapt",BI.FlexWrapperVerticalCenter),BI.FlexWrapperVerticalLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FlexWrapperVerticalLayout.superclass.props.apply(this,arguments),{baseCls:"bi-flex-scrollable-vertical-layout clearfix",horizontalAlign:BI.HorizontalAlign.Left,verticalAlign:BI.VerticalAlign.Top,rowSize:[],scrollable:null,scrolly:!0,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){BI.FlexWrapperVerticalLayout.superclass.render.apply(this,arguments);var o=this.options;this.$wrapper=BI.Widget._renderEngine.createElement("
").addClass("flex-scrollable-vertical-layout-wrapper h-"+o.horizontalAlign).addClass("v-"+o.verticalAlign),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.FlexWrapperVerticalLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"relative","flex-shrink":"0"}),o.rowSize[i]>0&&w.element.height(o.rowSize[i]),"fill"===o.rowSize[i]&&w.element.css("flex","1"),o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-top":(0===i?o.vgap:0)+o.tgap+(item.tgap||0)+(item.vgap||0)+"px"}),o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-left":o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-right":o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)+"px"}),w},appendFragment:function(frag){this.$wrapper.append(frag),this.element.append(this.$wrapper)},_getWrapper:function(){return this.$wrapper},resize:function(){},populate:function(items){BI.FlexWrapperVerticalLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.flex_scrollable_vertical",BI.FlexWrapperVerticalLayout),BI.AbsoluteLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.AbsoluteLayout.superclass.props.apply(this,arguments),{baseCls:"bi-absolute-layout",hgap:null,vgap:null,lgap:null,rgap:null,tgap:null,bgap:null})},render:function(){BI.AbsoluteLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.AbsoluteLayout.superclass._addElement.apply(this,arguments),left=0,right=0,top=0,bottom=0;return BI.isNotNull(item.left)&&(w.element.css({left:item.left}),left+=item.left),BI.isNotNull(item.right)&&(w.element.css({right:item.right}),right+=item.right),BI.isNotNull(item.top)&&(w.element.css({top:item.top}),top+=item.top),BI.isNotNull(item.bottom)&&(w.element.css({bottom:item.bottom}),bottom+=item.bottom),BI.isNotNull(o.hgap)&&(left+=o.hgap,w.element.css({left:left}),right+=o.hgap,w.element.css({right:right})),BI.isNotNull(o.vgap)&&(top+=o.vgap,w.element.css({top:top}),bottom+=o.vgap,w.element.css({bottom:bottom})),BI.isNotNull(o.lgap)&&(left+=o.lgap,w.element.css({left:left})),BI.isNotNull(o.rgap)&&(right+=o.rgap,w.element.css({right:right})),BI.isNotNull(o.tgap)&&(top+=o.tgap,w.element.css({top:top})),BI.isNotNull(o.bgap)&&(bottom+=o.bgap,w.element.css({bottom:bottom})),BI.isNotNull(item.width)&&w.element.css({width:item.width}),BI.isNotNull(item.height)&&w.element.css({height:item.height}),w.element.css({position:"absolute"}),w},resize:function(){this.stroke(this.options.items)},stroke:function(items){this.options.items=items||[];var self=this;BI.each(items,function(i,item){if(item){if(!BI.isWidget(item)&&!item.el)throw new Error("el must be exist");self._addElement(i,item)}})},populate:function(items){BI.AbsoluteLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.absolute",BI.AbsoluteLayout),BI.AdaptiveLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.AdaptiveLayout.superclass.props.apply(this,arguments),{baseCls:"bi-adaptive-layout",hgap:null,vgap:null,lgap:null,rgap:null,tgap:null,bgap:null})},render:function(){BI.AdaptiveLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.AdaptiveLayout.superclass._addElement.apply(this,arguments);w.element.css({position:"relative"});var left=0,right=0,top=0,bottom=0;return BI.isNotNull(item.left)&&w.element.css({left:item.left}),BI.isNotNull(item.right)&&w.element.css({right:item.right}),BI.isNotNull(item.top)&&w.element.css({top:item.top}),BI.isNotNull(item.bottom)&&w.element.css({bottom:item.bottom}),BI.isNotNull(o.hgap)&&(left+=o.hgap,w.element.css({"margin-left":left}),right+=o.hgap,w.element.css({"margin-right":right})),BI.isNotNull(o.vgap)&&(top+=o.vgap,w.element.css({"margin-top":top}),bottom+=o.vgap,w.element.css({"margin-bottom":bottom})),BI.isNotNull(o.lgap)&&(left+=o.lgap,w.element.css({"margin-left":left})),BI.isNotNull(o.rgap)&&(right+=o.rgap,w.element.css({"margin-right":right})),BI.isNotNull(o.tgap)&&(top+=o.tgap,w.element.css({"margin-top":top})),BI.isNotNull(o.bgap)&&(bottom+=o.bgap,w.element.css({"margin-bottom":bottom})),BI.isNotNull(item.width)&&w.element.css({width:item.width}),BI.isNotNull(item.height)&&w.element.css({height:item.height}),w},resize:function(){this.stroke(this.options.items)},populate:function(items){BI.AbsoluteLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.adaptive",BI.AdaptiveLayout),BI.BorderLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.BorderLayout.superclass.props.apply(this,arguments),{baseCls:"bi-border-layout",items:{}})},render:function(){BI.BorderLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},resize:function(){this.stroke(this.options.items)},addItem:function(item){throw new Error("cannot be added")},stroke:function(regions){var item,top=0,bottom=0,left=0,right=0;if("north"in regions&&(item=regions.north,null!=item)){if(item.el){if(!this.hasWidget(this.getName()+"north")){var w=BI.createWidget(item);this.addWidget(this.getName()+"north",w)}this.getWidgetByName(this.getName()+"north").element.height(item.height).css({position:"absolute",top:item.top||0,left:item.left||0,right:item.right||0,bottom:"initial"})}top=(item.height||0)+(item.top||0)+(item.bottom||0)}if("south"in regions&&(item=regions.south,null!=item)){if(item.el){if(!this.hasWidget(this.getName()+"south")){var w=BI.createWidget(item);this.addWidget(this.getName()+"south",w)}this.getWidgetByName(this.getName()+"south").element.height(item.height).css({position:"absolute",bottom:item.bottom||0,left:item.left||0,right:item.right||0,top:"initial"})}bottom=(item.height||0)+(item.top||0)+(item.bottom||0)}if("west"in regions&&(item=regions.west,null!=item)){if(item.el){if(!this.hasWidget(this.getName()+"west")){var w=BI.createWidget(item);this.addWidget(this.getName()+"west",w)}this.getWidgetByName(this.getName()+"west").element.width(item.width).css({position:"absolute",left:item.left||0,top:top,bottom:bottom,right:"initial"})}left=(item.width||0)+(item.left||0)+(item.right||0)}if("east"in regions&&(item=regions.east,null!=item)){if(item.el){if(!this.hasWidget(this.getName()+"east")){var w=BI.createWidget(item);this.addWidget(this.getName()+"east",w)}this.getWidgetByName(this.getName()+"east").element.width(item.width).css({position:"absolute",right:item.right||0,top:top,bottom:bottom,left:"initial"})}right=(item.width||0)+(item.left||0)+(item.right||0)}if("center"in regions&&(item=regions.center,null!=item)){if(!this.hasWidget(this.getName()+"center")){var w=BI.createWidget(item);this.addWidget(this.getName()+"center",w)}this.getWidgetByName(this.getName()+"center").element.css({position:"absolute",top:top,bottom:bottom,left:left,right:right})}},update:function(opt){},populate:function(items){BI.BorderLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.border",BI.BorderLayout),BI.CardLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.CardLayout.superclass.props.apply(this,arguments),{baseCls:"bi-card-layout",items:[]})},render:function(){BI.CardLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},resize:function(){},stroke:function(items){var self=this,o=this.options;this.showIndex=void 0,BI.each(items,function(i,item){if(item){if(self.hasWidget(item.cardName))var w=self.getWidgetByName(item.cardName);else{var w=BI.createWidget(item);w.on(BI.Events.DESTROY,function(){var index=BI.findIndex(o.items,function(i,tItem){return tItem.cardName==item.cardName});index>-1&&o.items.splice(index,1)}),self.addWidget(item.cardName,w)}w.element.css({position:"absolute",top:"0",right:"0",bottom:"0",left:"0"}),w.setVisible(!1)}})},update:function(){},empty:function(){BI.CardLayout.superclass.empty.apply(this,arguments),this.options.items=[]},populate:function(items){BI.CardLayout.superclass.populate.apply(this,arguments),this._mount(),this.options.defaultShowName&&this.showCardByName(this.options.defaultShowName)},isCardExisted:function(cardName){return BI.some(this.options.items,function(i,item){return item.cardName==cardName&&item.el})},getCardByName:function(cardName){if(!this.isCardExisted(cardName))throw new Error("cardName is not exist");return this._children[cardName]},_deleteCardByName:function(cardName){delete this._children[cardName];var index=BI.findIndex(this.options.items,function(i,item){return item.cardName==cardName});index>-1&&this.options.items.splice(index,1)},deleteCardByName:function(cardName){if(!this.isCardExisted(cardName))throw new Error("cardName is not exist");var child=this._children[cardName];this._deleteCardByName(cardName),child&&child._destroy()},addCardByName:function(cardName,cardItem){if(this.isCardExisted(cardName))throw new Error("cardName is already exist");var widget=BI.createWidget(cardItem,this);return widget.element.css({position:"relative",top:"0",left:"0",width:"100%",height:"100%"}).appendTo(this.element),widget.invisible(),this.addWidget(cardName,widget),this.options.items.push({el:cardItem,cardName:cardName}),widget},showCardByName:function(name,action,callback){var self=this,exist=this.isCardExisted(name);null!=this.showIndex&&(this.lastShowIndex=this.showIndex),this.showIndex=name;var flag=!1;BI.each(this.options.items,function(i,item){var el=self._children[item.cardName];el&&(name!=item.cardName?!flag&&!exist&&BI.Action&&action instanceof BI.Action?(action.actionBack(el),flag=!0):el.invisible():BI.Action&&action instanceof BI.Action?action.actionPerformed(void 0,el,callback):(el.visible(),callback&&callback()))})},showLastCard:function(){var self=this;this.showIndex=this.lastShowIndex,BI.each(this.options.items,function(i,item){self._children[item.cardName].setVisible(self.showIndex==i)})},setDefaultShowName:function(name){return this.options.defaultShowName=name,this},getDefaultShowName:function(){return this.options.defaultShowName},getAllCardNames:function(){return BI.map(this.options.items,function(i,item){return item.cardName})},getShowingCard:function(){if(BI.isKey(this.showIndex))return this.getWidgetByName(this.showIndex)},deleteAllCard:function(){var self=this;BI.each(this.getAllCardNames(),function(i,name){self.deleteCardByName(name)})},hideAllCard:function(){var self=this;BI.each(this.options.items,function(i,item){self._children[item.cardName].invisible()})},isAllCardHide:function(){var self=this,flag=!0;return BI.some(this.options.items,function(i,item){if(self._children[item.cardName].isVisible())return flag=!1,!1}),flag},removeWidget:function(nameOrWidget){var removeName;BI.isWidget(nameOrWidget)?BI.each(this._children,function(name,child){child===nameOrWidget&&(removeName=name)}):removeName=nameOrWidget,removeName&&this._deleteCardByName(removeName)}}),BI.shortcut("bi.card",BI.CardLayout),BI.DefaultLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.DefaultLayout.superclass.props.apply(this,arguments),{hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0,items:[]})},render:function(){BI.DefaultLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.DefaultLayout.superclass._addElement.apply(this,arguments);return o.vgap+o.tgap+(item.tgap||0)!==0&&w.element.css({"margin-top":o.vgap+o.tgap+(item.tgap||0)+"px"}),o.hgap+o.lgap+(item.lgap||0)!==0&&w.element.css({"margin-left":o.hgap+o.lgap+(item.lgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)!==0&&w.element.css({"margin-right":o.hgap+o.rgap+(item.rgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+"px"}),w},resize:function(){},populate:function(items){BI.DefaultLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.default",BI.DefaultLayout),BI.DivisionLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.DivisionLayout.superclass.props.apply(this,arguments),{baseCls:"bi-division-layout",columns:null,rows:null,items:[]})},render:function(){BI.DivisionLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},resize:function(){this.stroke(this.opitons.items)},addItem:function(item){throw new Error("cannot be added")},stroke:function(items){function firstElement(item,row,col){0===row&&item.addClass("first-row"),0===col&&item.addClass("first-col"),item.addClass(BI.isOdd(row+1)?"odd-row":"even-row"),item.addClass(BI.isOdd(col+1)?"odd-col":"even-col"),item.addClass("center-element")}function firstObject(item,row,col){var cls="";0===row&&(cls+=" first-row"),0===col&&(cls+=" first-col"),cls+=BI.isOdd(row+1)?" odd-row":" even-row",cls+=BI.isOdd(col+1)?" odd-col":" even-col",item.cls=(item.cls||"")+cls+" center-element"}function first(item,row,col){item instanceof BI.Widget?firstElement(item.element,row,col):item.el instanceof BI.Widget?firstElement(item.el.element,row,col):item.el?firstObject(item.el,row,col):firstObject(item,row,col)}var o=this.options,rows=o.rows||o.items.length,columns=o.columns||0|(o.items[0]&&o.items[0].length),map=BI.makeArray(rows),widths={},heights={};BI.each(map,function(i){map[i]=BI.makeArray(columns)}),BI.each(items,function(i,item){return BI.isArray(item)?void BI.each(item,function(j,el){widths[i]=(widths[i]||0)+item.width,heights[j]=(heights[j]||0)+item.height,map[i][j]=el}):(widths[item.row]=(widths[item.row]||0)+item.width,heights[item.column]=(heights[item.column]||0)+item.height,void(map[item.row][item.column]=item))});for(var i=0;i0){var lastW=this.getWidgetByName(this.getName()+i+"_"+(j-1));lastW.element.css({right:100-left+"%"})}j==o.columns-1&&w.element.css({right:"0%"}),first(w,i,j),totalW+=map[i][j].width}for(var j=0;j0){var lastW=this.getWidgetByName(this.getName()+(i-1)+"_"+j);lastW.element.css({bottom:100-top+"%"})}i==o.rows-1&&w.element.css({bottom:"0%"}),totalH+=map[i][j].height}},update:function(){},populate:function(items){BI.DivisionLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.division",BI.DivisionLayout),BI.FloatLeftLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FloatLeftLayout.superclass.props.apply(this,arguments),{baseCls:"bi-float-left-layout clearfix",hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){BI.FloatLeftLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.FloatLeftLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"relative","float":"left"}),BI.isNotNull(item.left)&&w.element.css({left:item.left}),BI.isNotNull(item.right)&&w.element.css({right:item.right}),BI.isNotNull(item.top)&&w.element.css({top:item.top}),BI.isNotNull(item.bottom)&&w.element.css({bottom:item.bottom}),o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-top":o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)+"px"}),o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-left":(0===i?o.hgap:0)+o.lgap+(item.lgap||0)+(item.hgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-right":o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)+"px"}),w},resize:function(){this.stroke(this.options.items)},populate:function(items){BI.FloatLeftLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.left",BI.FloatLeftLayout),BI.FloatRightLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FloatRightLayout.superclass.props.apply(this,arguments),{baseCls:"bi-float-right-layout clearfix",hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){BI.FloatRightLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.FloatRightLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"relative","float":"right"}),BI.isNotNull(item.left)&&w.element.css({left:item.left}),BI.isNotNull(item.right)&&w.element.css({right:item.right}),BI.isNotNull(item.top)&&w.element.css({top:item.top}),BI.isNotNull(item.bottom)&&w.element.css({bottom:item.bottom}),o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-top":o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)+"px"}),o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-left":o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-right":(0===i?o.hgap:0)+o.rgap+(item.rgap||0)+(item.hgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)+"px"}),w},resize:function(){this.stroke(this.options.items)},populate:function(items){BI.FloatRightLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.right",BI.FloatRightLayout),BI.GridLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.GridLayout.superclass.props.apply(this,arguments),{baseCls:"bi-grid-layout",columns:null,rows:null,items:[]})},render:function(){BI.GridLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},resize:function(){},addItem:function(){throw new Error("cannot be added")},stroke:function(items){function firstElement(item,row,col){0===row&&item.addClass("first-row"),0===col&&item.addClass("first-col"),item.addClass(BI.isOdd(row+1)?"odd-row":"even-row"),item.addClass(BI.isOdd(col+1)?"odd-col":"even-col"),item.addClass("center-element")}function firstObject(item,row,col){var cls="";0===row&&(cls+=" first-row"),0===col&&(cls+=" first-col"),cls+=BI.isOdd(row+1)?" odd-row":" even-row",cls+=BI.isOdd(col+1)?" odd-col":" even-col",item.cls=(item.cls||"")+cls+" center-element"}function first(item,row,col){item instanceof BI.Widget?firstElement(item.element,row,col):item.el instanceof BI.Widget?firstElement(item.el.element,row,col):item.el?firstObject(item.el,row,col):firstObject(item,row,col)}for(var self=this,o=this.options,rows=o.rows||o.items.length,columns=o.columns||0|(o.items[0]&&o.items[0].length),width=100/columns,height=100/rows,els=[],i=0;i").attr({cellspacing:0,cellpadding:0}).css({position:"relative","white-space":"nowrap",height:o.verticalAlign===BI.VerticalAlign.Middle?"100%":"auto",width:o.horizontalAlign===BI.HorizontalAlign.Center||o.horizontalAlign===BI.HorizontalAlign.Stretch?"100%":"auto","border-spacing":"0px",border:"none","border-collapse":"separate"}),this.$tr=BI.Widget._renderEngine.createElement("
"),this.$tr.appendTo(this.$table),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,td,width=o.columnSize[i]<=1?100*o.columnSize[i]+"%":o.columnSize[i];if(this.hasWidget(this._getChildName(i)))td=this.getWidgetByName(this._getChildName(i)),td.element.attr("width",width);else{var w=BI.createWidget(item);w.element.css({position:"relative",margin:"0px auto"}),td=BI.createWidget({type:"bi.default",tagName:"td",attributes:{width:width},items:[w]}),this.addWidget(this._getChildName(i),td)}return td.element.css({"max-width":o.columnSize[i]<=1?width:width+"px"}),0===i&&td.element.addClass("first-element"),td.element.css({position:"relative","vertical-align":o.verticalAlign,margin:"0",padding:"0",border:"none"}),o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-top":o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)+"px"}),o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-left":(0===i?o.hgap:0)+o.lgap+(item.lgap||0)+(item.hgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-right":o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)+"px"}),td},appendFragment:function(frag){this.$tr.append(frag),this.element.append(this.$table)},resize:function(){},_getWrapper:function(){return this.$tr},populate:function(items){BI.HorizontalLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.horizontal",BI.HorizontalLayout),BI.HorizontalCellLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.HorizontalCellLayout.superclass.props.apply(this,arguments),{baseCls:"bi-horizontal-cell-layout",scrollable:!0,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){BI.HorizontalCellLayout.superclass.render.apply(this,arguments),this.element.css({display:"table","vertical-align":"top"}),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.HorizontalCellLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"relative",display:"table-cell","vertical-align":"middle"}),o.hgap+o.lgap>0&&w.element.css({"margin-left":o.hgap+o.lgap+"px"}),o.hgap+o.rgap>0&&w.element.css({"margin-right":o.hgap+o.rgap+"px"}),o.vgap+o.tgap>0&&w.element.css({"margin-top":o.vgap+o.tgap+"px"}),o.vgap+o.bgap>0&&w.element.css({"margin-bottom":o.vgap+o.bgap+"px"}),w},resize:function(){},populate:function(items){BI.HorizontalCellLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.horizontal_cell",BI.HorizontalCellLayout),BI.InlineLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.InlineLayout.superclass.props.apply(this,arguments),{baseCls:"bi-inline-layout",hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){BI.InlineLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.InlineLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"relative",display:"inline-block","*display":"inline","*zoom":1}),o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-top":o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)+"px" +}),o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-left":(0===i?o.hgap:0)+o.lgap+(item.lgap||0)+(item.hgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-right":o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)+"px"}),w},resize:function(){this.stroke(this.options.items)},populate:function(items){BI.InlineLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.inline",BI.InlineLayout),BI.LatticeLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.LatticeLayout.superclass.props.apply(this,arguments),{baseCls:"bi-lattice-layout clearfix"})},render:function(){BI.LatticeLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.LatticeLayout.superclass._addElement.apply(this,arguments);if(o.columnSize&&o.columnSize[i])var width=o.columnSize[i]/BI.sum(o.columnSize)*100+"%";else var width=1/this.options.items.length*100+"%";return w.element.css({position:"relative","float":"left",width:width}),w},addItem:function(item){var w=BI.LatticeLayout.superclass.addItem.apply(this,arguments);return this.resize(),w},addItemAt:function(item){var w=BI.LatticeLayout.superclass.addItemAt.apply(this,arguments);return this.resize(),w},resize:function(){this.stroke(this.options.items)},populate:function(items){BI.LatticeLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.lattice",BI.LatticeLayout),BI.TableLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.TableLayout.superclass.props.apply(this,arguments),{baseCls:"bi-table-layout",scrolly:!0,columnSize:[200,200,"fill"],rowSize:30,hgap:0,vgap:0,items:[[{el:{text:"label1"}},{el:{text:"label2"}},{el:{text:"label3"}}]]})},render:function(){BI.TableLayout.superclass.render.apply(this,arguments),this.rows=0,this.populate(this.options.items)},_addElement:function(idx,arr){function firstElement(item,row,col){0===row&&item.addClass("first-row"),0===col&&item.addClass("first-col"),item.addClass(BI.isOdd(row+1)?"odd-row":"even-row"),item.addClass(BI.isOdd(col+1)?"odd-col":"even-col"),item.addClass("center-element")}function firstObject(item,row,col){var cls="";0===row&&(cls+=" first-row"),0===col&&(cls+=" first-col"),cls+=BI.isOdd(row+1)?" odd-row":" even-row",cls+=BI.isOdd(col+1)?" odd-col":" even-col",item.cls=(item.cls||"")+cls+" center-element"}function first(item,row,col){item instanceof BI.Widget?firstElement(item.element,row,col):item.el instanceof BI.Widget?firstElement(item.el.element,row,col):item.el?firstObject(item.el,row,col):firstObject(item,row,col)}var o=this.options,abs=[],left=0,right=0,i,j;for(i=0;ii;j--){if(!BI.isNumber(o.columnSize[j]))throw new Error("item with fill can only be one");first(arr[j],this.rows,j),abs.push(BI.extend({top:0,bottom:0,right:o.columnSize[j]<=1?100*right+"%":right,width:o.columnSize[j]<=1?100*o.columnSize[j]+"%":o.columnSize[j]},arr[j])),right+=o.columnSize[j]+(o.columnSize[j]<1?0:o.hgap)}i>=0&&i0&&this.getWidgetByName(this.getName()+(this.rows-1)).element.css({"margin-bottom":o.vgap}),w.element.css({position:"relative"}),this.addWidget(this.getName()+this.rows++,w),w},resize:function(){},addItem:function(arr){if(!BI.isArray(arr))throw new Error("item must be array");return BI.TableLayout.superclass.addItem.apply(this,arguments)},update:function(){},populate:function(items){BI.TableLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.table",BI.TableLayout),BI.HTapeLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.HTapeLayout.superclass.props.apply(this,arguments),{baseCls:"bi-h-tape-layout",hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0,items:[{width:100,el:{type:"bi.button",text:"button1"}},{width:"fill",el:{type:"bi.button",text:"button2"}},{width:200,el:{type:"bi.button",text:"button3"}}]})},render:function(){BI.HTapeLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},resize:function(){this.stroke(this.options.items)},addItem:function(item){throw new Error("cannot be added")},stroke:function(items){var self=this,o=this.options;items=BI.compact(items),BI.each(items,function(i,item){if(self.hasWidget(self.getName()+i+""))w=self.getWidgetByName(self.getName()+i+"");else{var w=BI.createWidget(item);self.addWidget(self.getName()+i+"",w)}w.element.css({position:"absolute",top:(item.vgap||0)+(item.tgap||0)+o.vgap+o.tgap+"px",bottom:(item.bgap||0)+(item.vgap||0)+o.vgap+o.bgap+"px"})});var left={},right={};left[0]=0,right[items.length-1]=0,BI.any(items,function(i,item){var w=self.getWidgetByName(self.getName()+i+"");if(BI.isNull(left[i])&&(left[i]=left[i-1]+items[i-1].width+(items[i-1].lgap||0)+2*(items[i-1].hgap||0)+o.hgap+o.lgap+o.rgap),item.width<1&&item.width>=0?w.element.css({left:100*left[i]+"%",width:100*item.width+"%"}):w.element.css({left:left[i]+(item.lgap||0)+(item.hgap||0)+o.hgap+o.lgap+"px",width:BI.isNumber(item.width)?item.width:""}),!BI.isNumber(item.width))return!0}),BI.backAny(items,function(i,item){var w=self.getWidgetByName(self.getName()+i+"");if(BI.isNull(right[i])&&(right[i]=right[i+1]+items[i+1].width+(items[i+1].rgap||0)+2*(items[i+1].hgap||0)+o.hgap+o.lgap+o.rgap),item.width<1&&item.width>=0?w.element.css({right:100*right[i]+"%",width:100*item.width+"%"}):w.element.css({right:right[i]+(item.rgap||0)+(item.hgap||0)+o.hgap+o.rgap+"px",width:BI.isNumber(item.width)?item.width:""}),!BI.isNumber(item.width))return!0})},update:function(){var updated;return BI.each(this._children,function(i,child){updated=child.update()||updated}),updated},populate:function(items){BI.HTapeLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.htape",BI.HTapeLayout),BI.VTapeLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.VTapeLayout.superclass.props.apply(this,arguments),{baseCls:"bi-v-tape-layout",hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0,items:[{height:100,el:{type:"bi.button",text:"button1"}},{height:"fill",el:{type:"bi.button",text:"button2"}},{height:200,el:{type:"bi.button",text:"button3"}}]})},render:function(){BI.VTapeLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},resize:function(){this.stroke(this.options.items)},addItem:function(item){throw new Error("cannot be added")},stroke:function(items){var self=this,o=this.options;items=BI.compact(items),BI.each(items,function(i,item){if(self.hasWidget(self.getName()+i+""))w=self.getWidgetByName(self.getName()+i+"");else{var w=BI.createWidget(item);self.addWidget(self.getName()+i+"",w)}w.element.css({position:"absolute",left:(item.lgap||0)+(item.hgap||0)+o.hgap+o.lgap+"px",right:+(item.hgap||0)+(item.rgap||0)+o.hgap+o.rgap+"px"})});var top={},bottom={};top[0]=0,bottom[items.length-1]=0,BI.any(items,function(i,item){var w=self.getWidgetByName(self.getName()+i+"");if(BI.isNull(top[i])&&(top[i]=top[i-1]+items[i-1].height+(items[i-1].tgap||0)+2*(items[i-1].vgap||0)+o.vgap+o.tgap+o.bgap),item.height<1&&item.height>=0?w.element.css({top:100*top[i]+"%",height:100*item.height+"%"}):w.element.css({top:top[i]+(item.vgap||0)+(item.tgap||0)+o.vgap+o.tgap+"px",height:BI.isNumber(item.height)?item.height:""}),!BI.isNumber(item.height))return!0}),BI.backAny(items,function(i,item){var w=self.getWidgetByName(self.getName()+i+"");if(BI.isNull(bottom[i])&&(bottom[i]=bottom[i+1]+items[i+1].height+(items[i+1].bgap||0)+2*(items[i+1].vgap||0)+o.vgap+o.tgap+o.bgap),item.height<1&&item.height>=0?w.element.css({bottom:100*bottom[i]+"%",height:100*item.height+"%"}):w.element.css({bottom:bottom[i]+(item.vgap||0)+(item.bgap||0)+o.vgap+o.bgap+"px",height:BI.isNumber(item.height)?item.height:""}),!BI.isNumber(item.height))return!0})},update:function(){},populate:function(items){BI.VTapeLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.vtape",BI.VTapeLayout),BI.TdLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.TdLayout.superclass.props.apply(this,arguments),{baseCls:"bi-td-layout",columnSize:[200,200,200],hgap:0,vgap:0,items:[[{el:{text:"label1"}},{el:{text:"label2"}},{el:{text:"label3"}}]]})},render:function(){BI.TdLayout.superclass.render.apply(this,arguments),this.$table=BI.Widget._renderEngine.createElement("
").attr({cellspacing:0,cellpadding:0}).css({position:"relative",width:"100%",height:"100%","border-spacing":"0px",border:"none","border-collapse":"separate"}),this.rows=0,this.populate(this.options.items)},_addElement:function(idx,arr){function firstElement(item,row,col){0===row&&item.addClass("first-row"),0===col&&item.addClass("first-col"),item.addClass(BI.isOdd(row+1)?"odd-row":"even-row"),item.addClass(BI.isOdd(col+1)?"odd-col":"even-col"),item.addClass("center-element")}function firstObject(item,row,col){var cls="";0===row&&(cls+=" first-row"),0===col&&(cls+=" first-col"),cls+=BI.isOdd(row+1)?" odd-row":" even-row",cls+=BI.isOdd(col+1)?" odd-col":" even-col",item.cls=(item.cls||"")+cls+" center-element"}function first(item,row,col){item instanceof BI.Widget?firstElement(item.element,row,col):item.el instanceof BI.Widget?firstElement(item.el.element,row,col):item.el?firstObject(item.el,row,col):firstObject(item,row,col)}for(var o=this.options,tr=BI.createWidget({type:"bi.default",tagName:"tr"}),i=0;i=0;i--){for(var j=0;j=0;j--){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:"bi";return String(Math.random()+Math.random()).replace(rhashcode,prefix)}function isIE(){return"undefined"!=typeof navigator&&/(msie|trident)/i.test(navigator.userAgent.toLowerCase())}function getIEVersion(){var version=0;if("undefined"==typeof navigator)return!1;var agent=navigator.userAgent.toLowerCase(),v1=agent.match(/(?:msie\s([\w.]+))/),v2=agent.match(/(?:trident.*rv:([\w.]+))/);return version=v1&&v2&&v1[1]&&v2[1]?Math.max(1*v1[1],1*v2[1]):v1&&v1[1]?1*v1[1]:v2&&v2[1]?1*v2[1]:0}function isPlainObject(obj){return"[object Object]"===_toString.call(obj)}function parsePath(path){if(!bailRE.test(path)){var segments=path.split(".");return function(obj){for(var i=0;i3&&void 0!==arguments[3]?arguments[3]:{},model=vm;!model.$watch&&model.$vm&&(model=model.$vm),isPlainObject(cb)&&(options=cb,cb=cb.handler),"string"==typeof cb&&(cb=model[cb]),options=options||{},options.user=!0;var exps=void 0;if(_$1.isFunction(expOrFn)||!(exps=expOrFn.match(/[a-zA-Z0-9_.*]+|[|][|]|[&][&]|[(]|[)]/g))||1===exps.length&&!/\*/.test(expOrFn))return model.$watch(expOrFn,cb,options),[];var watchers=[],fns=exps.slice(),complete=!1,running=!1,callback=function callback(index,newValue,oldValue,attrs){complete!==!0&&(fns[index]=!0,runBinaryFunction(fns)&&(complete=!0,cb.call(vm,newValue,oldValue,attrs)),options&&options.sync?(complete=!1,running=!1,fns=exps.slice()):running||(running=!0,nextTick(function(){complete=!1,running=!1,fns=exps.slice()})))};return _$1.each(exps,function(exp,i){if(!_$1.has(operators,exp)){if(/^[1-9a-zA-Z.]+(\*\*$|\*$)/.test(exp)||"**"===exp){var isGlobal=/\*\*$/.test(exp);exp=isGlobal?exp.replace(".**",""):exp.replace(".*","");var getter=isGlobal?exp:function(){var result={};return _$1.each(model.model,function(v,key){key in $$skipArray||(result[key]=v)}),result};return void model.$watch(getter,function(newValue,oldValue,attrs){callback(i,newValue,oldValue,_$1.extend({index:i},attrs))},_$1.extend(options,{deep:isGlobal}))}if(/\*\*$|\*$/.test(exp))throw new Error("not support");if(/\*/.test(exp)){var paths=exp.split("."),_getter=function _getter(){for(var currentModels={root:model.model},_loop=(function _loop(len,_i){var models={};"*"===paths[_i]?_$1.each(currentModels,function(model,key){_$1.each(model,function(v,k){key+k in $$skipArray||(models[key+k]=v)})}):_$1.each(currentModels,function(model,key){key+paths[_i]in $$skipArray||(models[key+paths[_i]]=model[paths[_i]])}),currentModels=models}),_i=0,len=paths.length;_i3&&void 0!==arguments[3]?arguments[3]:{};isPlainObject(cb)&&(options=cb,cb=cb.handler),"string"==typeof cb&&(cb=vm[cb]);var getter=_$1.isFunction(expOrFn)?_$1.bind(expOrFn,vm):_$1.bind(function(){return parsePath("model."+expOrFn)(vm)},vm);return new Watcher({get:getter,listener:_$1.bind(cb,vm),last:getter(),sync:options.sync,deep:options.deep,id:options.id})}function injectMethod(method,vm){return function(){var result=method.apply(vm,[].concat(Array.prototype.slice.call(arguments)));return vm.$digest(),result}}function initMethods(vm,methods){for(var key in methods)vm[key]=null==methods[key]?noop:injectMethod(methods[key],vm)}function initMixins(vm){var mixins=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];_$1.each(mixins.reverse(),function(mixinType){var mixin$$1=getMixins(mixinType);for(var key in mixin$$1)"function"==typeof mixin$$1[key]&&(_$1.has(vm,key)||(vm[key]=injectMethod(mixin$$1[key],vm)))})}function defineContext(vm,keys){function getSingleContext(key){for(var p=vm._parent;p;){if(p.childContext&&p.childContext.indexOf(key)>-1)return p.$watch(key,function(cur,last,p){vm._contextWatchers[key]&&(vm.model[key]=cur,vm._contextWatchers[key].last=cloneShadow(cur),vm.$digest())},{id:vm._modelHashId+"-"+key}),{p:p,value:p.model[key]};p=p._parent}}var watchers=vm._contextWatchers={};_$1.each(keys,function(key){var context=getSingleContext(key);context&&(vm.model[key]=context.p?context.p.model[key]:void 0,watchers[key]=new Watcher({id:context.p._modelHashId+"-"+key,get:function get(){return vm.model[key]},last:vm.model[key],listener:_$1.bind(function(c){context.p.model[key]=c,context.p.$digest()},context.p)}))})}function digestState(vm){var dirty=!1;return _$1.each(vm._stateWatchers,function(watcher,key){var cur=watcher.get(),last=watcher.last;isShadowEqual(cur,last)||(vm.model[key]=cur,dirty=!0,watcher.last=cloneShadow(cur))}),dirty}function digestComputed(vm){var dirty=!1,dirtyQueue=[],cleanQueue=[];return _$1.each(vm._computedOrder,function(key){var watcher=vm._computedWatchers[key];try{var cur=watcher.get(),last=watcher.last;isShadowEqual(cur,last)?cleanQueue.push(key):(vm.model[key]=cur,dirty=!0,dirtyQueue.push(key),watcher.last=cloneShadow(cur))}catch(err){dirty=!0,dirtyQueue.push(key)}}),vm._computedOrder=[].concat(cleanQueue,dirtyQueue),dirty}function digestContext(vm){var dirty=!1;return _$1.each(vm._contextWatchers,function(watcher,key){var cur=watcher.get(),last=watcher.last;if(!isShadowEqual(cur,last)){var listener={id:watcher.id,cb:_$1.bind(watcher.listener,vm,cur,last,vm)};vm.contextListeners.push(listener),vm.model[key]=cur,dirty=!0,watcher.last=cloneShadow(cur)}}),dirty}function digest(vm){for(var stateDirty=!0,contextDirty=!0,computedDirty=!0,ttl=TTL;stateDirty&&ttl>0;ttl--)stateDirty=digestState(vm);for(var _ttl=TTL;contextDirty&&_ttl>0;_ttl--)contextDirty=digestContext(vm);for(var _ttl2=TTL;computedDirty&&_ttl2>0;_ttl2--)computedDirty=digestComputed(vm)}function executeWatchListeners(vm){var syncListeners=[].concat(vm.syncListeners||[]),asyncListeners=[].concat(vm.asyncListeners||[]),contextListeners=[].concat(vm.contextListeners||[]);vm.asyncListeners=[],vm.syncListeners=[];var watchers=[].concat(vm._watchers);_$1.each(watchers,function(watcher){if(watcher){var cur=watcher.get(),last=watcher.last;if(!isShadowEqual(cur,last)){var listner={id:watcher.id,cb:_$1.bind(watcher.listener,vm,cur,last,vm)};watcher.sync===!0?syncListeners.push(listner):asyncListeners.push(listner),watcher.last=cloneShadow(cur)}}}),_$1.each(syncListeners,function(listener){listener.cb()}),0===contextListeners.length&&0===asyncListeners.length||nextTick(function(){_$1.each(BI.uniqBy(contextListeners.reverse(),"id").reverse(),function(listener){listener.cb()}),_$1.each(asyncListeners,function(listener){listener.cb()})})}function refreshAllDefineModel(){_$1.each(allDefineModelInstances,function(insta){insta&&insta.$digest&&insta.$digest()})}function getAllModelInstances(){return allModelInstances}function refreshAll(){_$1.each(getAllModelInstances(),function(insta){insta&&insta.$digest&&insta.$digest()})}function define(model){var OB=inherit(Model,{state:function state(){return model}}),ob=new OB;return ob._constructor({define:!0}),allDefineModelInstances[ob.getModelID()]=ob,ob.model}_$1="default"in _$1?_$1["default"]:_$1;var falsy=void 0,$$skipArray={$accessors:falsy,$vbthis:falsy,$vbsetter:falsy, +$vm:falsy},$$skips=["$accessors","$vbthis","$vbsetter","$vm"],originalMethods=[];_$1.each(["slice","splice"],function(method){originalMethods[method]=Array.prototype[method]}),Array.prototype.splice=function(){this.__ref__=makeHashCode();for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return originalMethods.splice.apply(this,args)};var rhashcode=/\d\.\d{4}/,isIE9Below=isIE()&&getIEVersion()<9,_toString=Object.prototype.toString,bailRE=/[^\w.$]/,nextTick=function(){function nextTickHandler(){pending=!1;var copies=callbacks.slice(0);callbacks.length=0;for(var i=0;i=1?"floor":"ceil"](delta/lowestDelta),deltaX=Math[deltaX>=1?"floor":"ceil"](deltaX/lowestDelta),deltaY=Math[deltaY>=1?"floor":"ceil"](deltaY/lowestDelta),special.settings.normalizeOffset&&this.getBoundingClientRect){var boundingRect=this.getBoundingClientRect();offsetX=event.clientX-boundingRect.left,offsetY=event.clientY-boundingRect.top}return event.deltaX=deltaX,event.deltaY=deltaY,event.deltaFactor=lowestDelta,event.offsetX=offsetX,event.offsetY=offsetY,event.deltaMode=0,args.unshift(event,delta,deltaX,deltaY),nullLowestDeltaTimeout&&clearTimeout(nullLowestDeltaTimeout),nullLowestDeltaTimeout=setTimeout(nullLowestDelta,200),($.event.dispatch||$.event.handle).apply(this,args)}}function nullLowestDelta(){lowestDelta=null}function shouldAdjustOldDeltas(orgEvent,absDelta){return special.settings.adjustOldDeltas&&"mousewheel"===orgEvent.type&&absDelta%120===0}var toFix=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],toBind="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],slice=Array.prototype.slice,nullLowestDeltaTimeout,lowestDelta;if($.event.fixHooks)for(var i=toFix.length;i;)$.event.fixHooks[toFix[--i]]=$.event.mouseHooks;var special=$.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var i=toBind.length;i;)this.addEventListener(toBind[--i],handler,!1);else this.onmousewheel=handler},teardown:function(){if(this.removeEventListener)for(var i=toBind.length;i;)this.removeEventListener(toBind[--i],handler,!1);else this.onmousewheel=null},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};$.fn.extend({mousewheel:function(fn){return fn?this.bind("mousewheel",fn):this.trigger("mousewheel")},unmousewheel:function(fn){return this.unbind("mousewheel",fn)}})}),BI.Pane=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.Pane.superclass._defaultConfig.apply(this,arguments),{_baseCls:"bi-pane",tipText:BI.i18nText("BI-No_Selected_Item"),overlap:!0,onLoaded:BI.emptyFn})},_assertTip:function(){var o=this.options;this._tipText||(this._tipText=BI.createWidget({type:"bi.label",cls:"bi-tips",text:o.tipText,height:25}),BI.createWidget({type:"bi.absolute_center_adapt",element:this,items:[this._tipText]}))},loading:function(){var self=this,o=this.options,isIE=BI.isIE(),loadingAnimation=BI.createWidget({type:"bi.horizontal",cls:"bi-loading-widget"+(isIE?" wave-loading hack":""),height:30,width:30,hgap:5,vgap:2.5,items:isIE?[]:[{type:"bi.layout",cls:"animate-rect rect1",height:25,width:3},{type:"bi.layout",cls:"animate-rect rect2",height:25,width:3},{type:"bi.layout",cls:"animate-rect rect3",height:25,width:3}]});this.setTipVisible(!1),o.overlap===!0?(BI.Layers.has(this.getName())||BI.createWidget({type:"bi.absolute_center_adapt",cls:"loading-container",items:[{el:loadingAnimation}],element:BI.Layers.make(this.getName(),this)}),BI.Layers.show(self.getName())):BI.isNull(this._loading)&&(this._loading=loadingAnimation,this._loading.element.css("zIndex",1),BI.createWidget({type:"bi.absolute_center_adapt",element:this,cls:"loading-container",items:[{el:this._loading,left:0,right:0,top:0}]})),this.element.addClass("loading-status")},loaded:function(){var self=this,o=this.options;BI.Layers.remove(self.getName()),this._loading&&this._loading.destroy(),this._loading&&(this._loading=null),o.onLoaded(),self.fireEvent(BI.Pane.EVENT_LOADED),this.element.removeClass("loading-status")},check:function(){this.setTipVisible(BI.isEmpty(this.options.items))},setTipVisible:function(b){b===!0?(this._assertTip(),this._tipText.setVisible(!0)):this._tipText&&this._tipText.setVisible(!1)},populate:function(items){this.options.items=items||[],this.check()},empty:function(){}}),BI.Pane.EVENT_LOADED="EVENT_LOADED",BI.Single=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.Single.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{_baseCls:(conf._baseCls||"")+" bi-single",readonly:!1,title:null,warningTitle:null,tipType:null,value:null,belowMouse:!1})},_showToolTip:function(e,opt){opt||(opt={});var self=this,o=this.options,type=this.getTipType()||(this.isEnabled()?"success":"warning"),title="success"===type?this.getTitle():this.getWarningTitle()||this.getTitle();BI.isKey(title)&&(BI.Tooltips.show(e,this.getName(),title,type,this,opt),o.action&&BI.Actions.runAction(o.action,"hover",o,this),BI.Actions.runGlobalAction("hover",o,this))},_hideTooltip:function(){var self=this,tooltip=BI.Tooltips.get(this.getName());BI.isNotNull(tooltip)&&tooltip.element.fadeOut(200,function(){BI.Tooltips.remove(self.getName())})},_init:function(){BI.Single.superclass._init.apply(this,arguments);var self=this,o=this.options;(BI.isKey(o.title)||BI.isKey(o.warningTitle)||BI.isFunction(o.title)||BI.isFunction(o.warningTitle))&&this.enableHover({belowMouse:o.belowMouse,container:o.container})},_clearTimeOut:function(){BI.isNotNull(this.showTimeout)&&(clearTimeout(this.showTimeout),this.showTimeout=null),BI.isNotNull(this.hideTimeout)&&(clearTimeout(this.hideTimeout),this.hideTimeout=null)},enableHover:function(opt){opt||(opt={});var self=this;this._hoverBinded||(this.element.on("mouseenter.title"+this.getName(),function(e){self._e=e,"warning"===self.getTipType()||BI.isKey(self.getWarningTitle())&&!self.isEnabled()?self.showTimeout=BI.delay(function(){BI.isNotNull(self.showTimeout)&&self._showToolTip(self._e||e,opt)},200):("success"===self.getTipType()||self.isEnabled())&&(self.showTimeout=BI.delay(function(){BI.isNotNull(self.showTimeout)&&self._showToolTip(self._e||e,opt)},500))}),this.element.on("mousemove.title"+this.getName(),function(e){self._e=e,BI.isNotNull(self.showTimeout)&&(clearTimeout(self.showTimeout),self.showTimeout=null),BI.isNull(self.hideTimeout)&&(self.hideTimeout=BI.delay(function(){BI.isNotNull(self.hideTimeout)&&self._hideTooltip()},500)),self.showTimeout=BI.delay(function(){BI.isNotNull(self.showTimeout)&&(BI.isNotNull(self.hideTimeout)&&(clearTimeout(self.hideTimeout),self.hideTimeout=null),self.element.__isMouseInBounds__(self._e||e)&&self._showToolTip(self._e||e,opt))},500)}),this.element.on("mouseleave.title"+this.getName(),function(e){self._e=null,self._clearTimeOut(),self._hideTooltip()}),this._hoverBinded=!0)},disabledHover:function(){this._clearTimeOut(),this._hideTooltip(),this.element.unbind("mouseenter.title"+this.getName()).unbind("mousemove.title"+this.getName()).unbind("mouseleave.title"+this.getName()),this._hoverBinded=!1},populate:function(items){this.items=items||[]},setTitle:function(title,opt){this.options.title=title,BI.isKey(title)||BI.isFunction(title)?this.enableHover(opt):this.disabledHover()},setWarningTitle:function(title,opt){this.options.warningTitle=title,BI.isKey(title)||BI.isFunction(title)?this.enableHover(opt):this.disabledHover()},getTipType:function(){return this.options.tipType},isReadOnly:function(){return!!this.options.readonly},getTitle:function(){var title=this.options.title;return BI.isFunction(title)?title():title},getWarningTitle:function(){var title=this.options.warningTitle;return BI.isFunction(title)?title():title},setValue:function(val){this.options.readonly||(this.options.value=val)},getValue:function(){return this.options.value},_unMount:function(){BI.Single.superclass._unMount.apply(this,arguments),BI.Tooltips.remove(this.getName())}}),BI.Text=BI.inherit(BI.Single,{props:{baseCls:"bi-text",textAlign:"left",whiteSpace:"normal",lineHeight:null,handler:null,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0,text:"",py:"",highLight:!1},render:function(){var self=this,o=this.options;o.hgap+o.lgap>0&&this.element.css({"padding-left":o.hgap+o.lgap+"px"}),o.hgap+o.rgap>0&&this.element.css({"padding-right":o.hgap+o.rgap+"px"}),o.vgap+o.tgap>0&&this.element.css({"padding-top":o.vgap+o.tgap+"px"}),o.vgap+o.bgap>0&&this.element.css({"padding-bottom":o.vgap+o.bgap+"px"}),BI.isNumber(o.height)&&this.element.css({lineHeight:o.height+"px"}),BI.isNumber(o.lineHeight)&&this.element.css({lineHeight:o.lineHeight+"px"}),BI.isWidthOrHeight(o.maxWidth)&&this.element.css({maxWidth:o.maxWidth}),this.element.css({textAlign:o.textAlign,whiteSpace:o.whiteSpace,textOverflow:"nowrap"===o.whiteSpace?"ellipsis":"",overflow:"nowrap"===o.whiteSpace?"":BI.isWidthOrHeight(o.height)?"auto":""}),o.handler?(this.text=BI.createWidget({type:"bi.layout",tagName:"span"}),this.text.element.click(function(){o.handler(self.getValue())}),BI.createWidget({type:"bi.default",element:this,items:[this.text]})):this.text=this;var text=this._getShowText();BI.isKey(text)?this.setText(text):BI.isKey(o.value)&&this.setText(o.value),BI.isKey(o.keyword)&&this.doRedMark(o.keyword),o.highLight&&this.doHighLight()},_getShowText:function(){var o=this.options;return BI.isFunction(o.text)?o.text():o.text},doRedMark:function(keyword){var o=this.options;o.keyword=keyword,this.text.element.__textKeywordMarked__(this._getShowText()||o.value,keyword,o.py)},unRedMark:function(){var o=this.options;o.keyword="",this.text.element.__textKeywordMarked__(this._getShowText()||o.value,"",o.py)},doHighLight:function(){this.text.element.addClass("bi-high-light")},unHighLight:function(){this.text.element.removeClass("bi-high-light")},setValue:function(text){BI.Text.superclass.setValue.apply(this,arguments),this.isReadOnly()||this.setText(text)},setStyle:function(css){this.text.element.css(css)},setText:function(text){return BI.Text.superclass.setText.apply(this,arguments),this.options.text=BI.isNotNull(text)?text:"",BI.isIE9Below()?void this.text.element.html(BI.htmlEncode(this._getShowText())):void(/\s/.test(text)?this.text.element[0].innerHTML=BI.htmlEncode(this._getShowText()):this.text.element[0].textContent=this._getShowText())}}),BI.shortcut("bi.text",BI.Text),BI.BasicButton=BI.inherit(BI.Single,{_defaultConfig:function(){var conf=BI.BasicButton.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{_baseCls:(conf._baseCls||"")+" bi-basic-button"+(conf.invalid?"":" cursor-pointer")+(BI.isIE()&&BI.getIEVersion()<10?" hack":""),value:"",text:"",stopEvent:!1,stopPropagation:!1,selected:!1,once:!1,forceSelected:!1,forceNotSelected:!1,disableSelected:!1,shadow:!1,isShadowShowingOnSelected:!1,trigger:null,handler:BI.emptyFn,bubble:null})},_init:function(){BI.BasicButton.superclass._init.apply(this,arguments);var opts=this.options;opts.selected===!0&&BI.nextTick(BI.bind(function(){this.setSelected(opts.selected)},this)),BI.nextTick(BI.bind(this.bindEvent,this)),opts.shadow&&this._createShadow(),opts.level&&this.element.addClass("button-"+opts.level)},_createShadow:function(){var self=this,o=this.options,assertMask=function(){self.$mask||(self.$mask=BI.createWidget(BI.isObject(o.shadow)?o.shadow:{},{type:"bi.layout",cls:"bi-button-mask"}),self.$mask.invisible(),BI.createWidget({type:"bi.absolute",element:self,items:[{el:self.$mask,left:0,right:0,top:0,bottom:0}]}))};this.element.mouseup(function(){self._hover||o.isShadowShowingOnSelected||(assertMask(),self.$mask.invisible())}),this.element.on("mouseenter."+this.getName(),function(e){self.element.__isMouseInBounds__(e)&&(!self.isEnabled()||self._hover||!o.isShadowShowingOnSelected&&self.isSelected()||(assertMask(),self.$mask.visible()))}),this.element.on("mousemove."+this.getName(),function(e){self.element.__isMouseInBounds__(e)||self.isEnabled()&&!self._hover&&(assertMask(),self.$mask.invisible())}),this.element.on("mouseleave."+this.getName(),function(){self.isEnabled()&&!self._hover&&(assertMask(),self.$mask.invisible())})},bindEvent:function(){function ev(e){o.stopEvent&&e.stopEvent(),o.stopPropagation&&e.stopPropagation()}function clk(e){if(ev(e),!(!self.isEnabled()||self.isOnce()&&self.isSelected())){if(BI.isKey(o.bubble)||BI.isFunction(o.bubble)){if(BI.isNull(self.combo)){var popup;BI.createWidget({type:"bi.absolute",element:self,items:[{el:{type:"bi.bubble_combo",trigger:"",destroyWhenHide:!0,ref:function(){self.combo=this},el:{type:"bi.layout",height:"100%"},popup:{type:"bi.text_bubble_bar_popup_view",text:getBubble(),ref:function(){popup=this},listeners:[{eventName:BI.BubblePopupBarView.EVENT_CLICK_TOOLBAR_BUTTON,action:function(v){self.combo.hideView(),v&&onClick.apply(self,arguments)}}]},listeners:[{eventName:BI.BubbleCombo.EVENT_BEFORE_POPUPVIEW,action:function(){popup.populate(getBubble())}}]},left:0,right:0,bottom:0,top:0}]})}return void(self.combo.isViewVisible()?self.combo.hideView():self.combo.showView())}onClick.apply(self,arguments)}}function getBubble(){var bubble=self.options.bubble;return BI.isFunction(bubble)?bubble():bubble}var self=this,o=this.options,hand=this.handle();if(hand){hand=hand.element;var triggerArr=(o.trigger||"").split(",");BI.each(triggerArr,function(idx,trigger){switch(trigger){case"mouseup":var mouseDown=!1;hand.mousedown(function(){mouseDown=!0}),hand.mouseup(function(e){mouseDown===!0&&clk(e),mouseDown=!1,ev(e)});break;case"mousedown":var mouseDown=!1,selected=!1;hand.mousedown(function(e){BI.Widget._renderEngine.createElement(document).bind("mouseup."+self.getName(),function(e){!BI.DOM.isExist(self)||hand.__isMouseInBounds__(e)||mouseDown!==!0||selected||self._trigger(),mouseDown=!1,BI.Widget._renderEngine.createElement(document).unbind("mouseup."+self.getName())}),mouseDown!==!0&&(self.isSelected()?selected=!0:clk(e),mouseDown=!0,ev(e))}),hand.mouseup(function(e){BI.DOM.isExist(self)&&mouseDown===!0&&selected===!0&&clk(e),mouseDown=!1,selected=!1,BI.Widget._renderEngine.createElement(document).unbind("mouseup."+self.getName())});break;case"dblclick":hand.dblclick(clk);break;case"lclick":var mouseDown=!1,interval;hand.mousedown(function(e){BI.Widget._renderEngine.createElement(document).bind("mouseup."+self.getName(),function(e){interval&&clearInterval(interval),interval=null,mouseDown=!1,BI.Widget._renderEngine.createElement(document).unbind("mouseup."+self.getName())}),mouseDown!==!0&&(!self.isEnabled()||self.isOnce()&&self.isSelected()||(interval=setInterval(function(){self.isEnabled()&&self.doClick()},180),mouseDown=!0,ev(e)))});break;default:(o.stopEvent||o.stopPropagation)&&hand.mousedown(function(e){ev(e)}),hand.click(clk)}});var onClick=BI.debounce(this._doClick,BI.EVENT_RESPONSE_TIME,{leading:!0,trailing:!1})}},_trigger:function(e){var o=this.options;if(this.isEnabled()&&(this.isDisableSelected()||(this.isForceSelected()?this.setSelected(!0):this.isForceNotSelected()?this.setSelected(!1):this.setSelected(!this.isSelected())),this.isValid())){o.handler.call(this,this.getValue(),this,e);var v=this.getValue();this.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.CLICK,v,this,e),this.fireEvent(BI.BasicButton.EVENT_CHANGE,v,this),o.action&&BI.Actions.runAction(o.action,"click",o,this),BI.Actions.runGlobalAction("click",o,this)}},_doClick:function(e){this.isValid()&&this.beforeClick(e),this._trigger(e),this.isValid()&&this.doClick(e)},beforeClick:function(){},doClick:function(){},handle:function(){return this},hover:function(){this._hover=!0,this.handle().element.addClass("hover"),this.options.shadow&&this.$mask&&this.$mask.setVisible(!0)},dishover:function(){this._hover=!1,this.handle().element.removeClass("hover"),this.options.shadow&&this.$mask&&this.$mask.setVisible(!1)},setSelected:function(b){var o=this.options;o.selected=b,b?this.handle().element.addClass("active"):this.handle().element.removeClass("active"),o.shadow&&!o.isShadowShowingOnSelected&&this.$mask&&this.$mask.setVisible(!1)},isSelected:function(){return this.options.selected},isOnce:function(){return this.options.once},isForceSelected:function(){return this.options.forceSelected},isForceNotSelected:function(){return this.options.forceNotSelected},isDisableSelected:function(){return this.options.disableSelected},setText:function(text){this.options.text=text},getText:function(){return this.options.text},_setEnable:function(enable){BI.BasicButton.superclass._setEnable.apply(this,arguments),enable===!0?this.element.removeClass("base-disabled disabled"):enable===!1&&this.element.addClass("base-disabled disabled"),enable||this.options.shadow&&this.$mask&&this.$mask.setVisible(!1)},empty:function(){BI.Widget._renderEngine.createElement(document).unbind("mouseup."+this.getName()),BI.BasicButton.superclass.empty.apply(this,arguments)},destroy:function(){BI.BasicButton.superclass.destroy.apply(this,arguments)}}),BI.BasicButton.EVENT_CHANGE="BasicButton.EVENT_CHANGE",BI.NodeButton=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.NodeButton.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{_baseCls:(conf._baseCls||"")+" bi-node",open:!1})},_init:function(){BI.NodeButton.superclass._init.apply(this,arguments);var self=this;BI.nextTick(function(){self.setOpened(self.isOpened())})},doClick:function(){BI.NodeButton.superclass.doClick.apply(this,arguments),this.setOpened(!this.isOpened())},isOnce:function(){return!1},isOpened:function(){return!!this.options.open},setOpened:function(b){this.options.open=!!b},triggerCollapse:function(){this.isOpened()&&(this.setOpened(!1),this.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.COLLAPSE,this.getValue(),this))},triggerExpand:function(){this.isOpened()||(this.setOpened(!0),this.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.EXPAND,this.getValue(),this))}}),BI.Tip=BI.inherit(BI.Single,{_defaultConfig:function(){var conf=BI.Tip.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{_baseCls:(conf._baseCls||"")+" bi-tip",zIndex:BI.zIndex_tip})},_init:function(){BI.Tip.superclass._init.apply(this,arguments),this.element.css({zIndex:this.options.zIndex})}}),BI.ButtonGroup=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.ButtonGroup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-button-group",behaviors:{},items:[],value:"",chooseType:BI.Selection.Single,layouts:[{type:"bi.center",hgap:0,vgap:0}]})},_init:function(){BI.ButtonGroup.superclass._init.apply(this,arguments);var o=this.options,behaviors={};BI.each(o.behaviors,function(key,rule){behaviors[key]=BI.BehaviorFactory.createBehavior(key,{rule:rule})}),this.behaviors=behaviors,this.populate(o.items),(BI.isKey(o.value)||BI.isNotEmptyArray(o.value))&&this.setValue(o.value)},_createBtns:function(items){var o=this.options;return BI.createWidgets(BI.createItems(items,{type:"bi.text_button"}))},_btnsCreator:function(items){var self=this,args=Array.prototype.slice.call(arguments),o=this.options,buttons=this._createBtns(items);return args[0]=buttons,BI.each(this.behaviors,function(i,behavior){behavior.doBehavior.apply(behavior,args)}),BI.each(buttons,function(i,btn){btn.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){if(type===BI.Events.CLICK){switch(o.chooseType){case BI.ButtonGroup.CHOOSE_TYPE_SINGLE:self.setValue(btn.getValue());break;case BI.ButtonGroup.CHOOSE_TYPE_NONE:self.setValue([])}self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),self.fireEvent(BI.ButtonGroup.EVENT_CHANGE,value,obj)}else self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),btn.on(BI.Events.DESTROY,function(){BI.remove(self.buttons,btn)})}),buttons},_packageBtns:function(btns){for(var o=this.options,i=o.layouts.length-1;i>0;i--)btns=BI.map(btns,function(k,it){return BI.extend({},o.layouts[i],{items:[BI.extend({},o.layouts[i].el,{el:it})]})});return btns},_packageSimpleItems:function(btns){var o=this.options;return BI.map(o.items,function(i,item){return BI.stripEL(item)===item?btns[i]:BI.extend({},item,{el:btns[i]})})},_packageItems:function(items,packBtns){return BI.createItems(BI.makeArrayByArray(items,{}),BI.clone(packBtns))},_packageLayout:function(items){for(var o=this.options,layout=BI.deepClone(o.layouts[0]),lay=BI.formatEL(layout).el;lay&&lay.items&&!BI.isEmpty(lay.items);)lay=BI.formatEL(lay.items[0]).el;return lay.items=items,layout},_isSimpleLayout:function(){var o=this.options;return 1===o.layouts.length&&!BI.isArray(o.items[0])},doBehavior:function(){var args=Array.prototype.slice.call(arguments);args.unshift(this.buttons),BI.each(this.behaviors,function(i,behavior){behavior.doBehavior.apply(behavior,args)})},prependItems:function(items){var o=this.options,btns=this._btnsCreator.apply(this,arguments);return this.buttons=BI.concat(btns,this.buttons),this._isSimpleLayout()&&this.layouts&&this.layouts.prependItems?void this.layouts.prependItems(btns):(items=this._packageItems(items,this._packageBtns(btns)),void this.layouts.prependItems(this._packageLayout(items).items))},addItems:function(items){var o=this.options,btns=this._btnsCreator.apply(this,arguments);return this.buttons=BI.concat(this.buttons,btns),this._isSimpleLayout()&&this.layouts&&this.layouts.addItems?void this.layouts.addItems(btns):(items=this._packageItems(items,this._packageBtns(btns)),void this.layouts.addItems(this._packageLayout(items).items))},removeItemAt:function(indexes){BI.removeAt(this.buttons,indexes),this.layouts.removeItemAt(indexes)},removeItems:function(values){values=BI.isArray(values)?values:[values];var deleted=[];BI.each(this.buttons,function(i,button){BI.deepContains(values,button.getValue())&&deleted.push(i)}),BI.removeAt(this.buttons,deleted),this.layouts.removeItemAt(deleted)},populate:function(items){items=items||[],this.empty(),this.options.items=items,this.buttons=this._btnsCreator.apply(this,arguments),items=this._isSimpleLayout()?this._packageSimpleItems(this.buttons):this._packageItems(items,this._packageBtns(this.buttons)),this.layouts=BI.createWidget(BI.extend({element:this},this._packageLayout(items)))},setNotSelectedValue:function(v){v=BI.isArray(v)?v:[v],BI.each(this.buttons,function(i,item){BI.deepContains(v,item.getValue())?item.setSelected&&item.setSelected(!1):item.setSelected&&item.setSelected(!0)})},setEnabledValue:function(v){v=BI.isArray(v)?v:[v],BI.each(this.buttons,function(i,item){BI.deepContains(v,item.getValue())?item.setEnable(!0):item.setEnable(!1)})},setValue:function(v){v=BI.isArray(v)?v:[v],BI.each(this.buttons,function(i,item){BI.deepContains(v,item.getValue())?item.setSelected&&item.setSelected(!0):item.setSelected&&item.setSelected(!1)})},getNotSelectedValue:function(){var v=[];return BI.each(this.buttons,function(i,item){!item.isEnabled()||item.isSelected&&item.isSelected()||v.push(item.getValue())}),v},getValue:function(){var v=[];return BI.each(this.buttons,function(i,item){item.isEnabled()&&item.isSelected&&item.isSelected()&&v.push(item.getValue())}),v},getAllButtons:function(){return this.buttons},getAllLeaves:function(){return this.buttons},getSelectedButtons:function(){var btns=[];return BI.each(this.buttons,function(i,item){item.isSelected&&item.isSelected()&&btns.push(item)}),btns},getNotSelectedButtons:function(){var btns=[];return BI.each(this.buttons,function(i,item){item.isSelected&&!item.isSelected()&&btns.push(item)}),btns},getIndexByValue:function(value){var index=-1;return BI.any(this.buttons,function(i,item){if(item.isEnabled()&&item.getValue()===value)return index=i,!0}),index},getNodeById:function(id){var node;return BI.any(this.buttons,function(i,item){if(item.isEnabled()&&item.options.id===id)return node=item,!0}),node},getNodeByValue:function(value){var node;return BI.any(this.buttons,function(i,item){if(item.isEnabled()&&item.getValue()===value)return node=item,!0}),node},empty:function(){BI.ButtonGroup.superclass.empty.apply(this,arguments),this.options.items=[]},destroy:function(){BI.ButtonGroup.superclass.destroy.apply(this,arguments),this.options.items=[]}}),BI.extend(BI.ButtonGroup,{CHOOSE_TYPE_SINGLE:BI.Selection.Single,CHOOSE_TYPE_MULTI:BI.Selection.Multi,CHOOSE_TYPE_ALL:BI.Selection.All,CHOOSE_TYPE_NONE:BI.Selection.None,CHOOSE_TYPE_DEFAULT:BI.Selection.Default}),BI.ButtonGroup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.button_group",BI.ButtonGroup),BI.ButtonTree=BI.inherit(BI.ButtonGroup,{_defaultConfig:function(){return BI.extend(BI.ButtonTree.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-button-tree"})},_init:function(){BI.ButtonTree.superclass._init.apply(this,arguments)},setNotSelectedValue:function(v){v=BI.isArray(v)?v:[v],BI.each(this.buttons,function(i,item){return BI.isFunction(item.setSelected)?void(BI.deepContains(v,item.getValue())?item.setSelected(!1):item.setSelected(!0)):void item.setNotSelectedValue(v)})},setEnabledValue:function(v){v=BI.isArray(v)?v:[v],BI.each(this.buttons,function(i,item){return BI.isFunction(item.setEnabledValue)?void item.setEnabledValue(v):void(BI.deepContains(v,item.getValue())?item.setEnable(!0):item.setEnable(!1))})},setValue:function(v){v=BI.isArray(v)?v:[v],BI.each(this.buttons,function(i,item){return BI.isFunction(item.setSelected)?void(BI.deepContains(v,item.getValue())?item.setSelected(!0):item.setSelected(!1)):void item.setValue(v)})},getNotSelectedValue:function(){ +var v=[];return BI.each(this.buttons,function(i,item){return item.isEnabled()&&!BI.isFunction(item.setSelected)?void(v=BI.concat(v,item.getNotSelectedValue())):void(item.isEnabled()&&item.isSelected&&!item.isSelected()&&v.push(item.getValue()))}),v},getValue:function(){var v=[];return BI.each(this.buttons,function(i,item){return item.isEnabled()&&!BI.isFunction(item.setSelected)?void(v=BI.concat(v,item.getValue())):void(item.isEnabled()&&item.isSelected&&item.isSelected()&&v.push(item.getValue()))}),v},getSelectedButtons:function(){var btns=[];return BI.each(this.buttons,function(i,item){return item.isEnabled()&&!BI.isFunction(item.setSelected)?void(btns=btns.concat(item.getSelectedButtons())):void(item.isSelected&&item.isSelected()&&btns.push(item))}),btns},getNotSelectedButtons:function(){var btns=[];return BI.each(this.buttons,function(i,item){return item.isEnabled()&&!BI.isFunction(item.setSelected)?void(btns=btns.concat(item.getNotSelectedButtons())):void(item.isSelected&&!item.isSelected()&&btns.push(item))}),btns},getAllLeaves:function(){var leaves=[];return BI.each(this.buttons,function(i,item){return item.isEnabled()&&!BI.isFunction(item.setSelected)?void(leaves=leaves.concat(item.getAllLeaves())):void(item.isEnabled()&&leaves.push(item))}),leaves},getIndexByValue:function(value){var index=-1;return BI.any(this.buttons,function(i,item){var vs=item.getValue();if(item.isEnabled()&&(vs===value||BI.contains(vs,value)))return index=i,!0}),index},getNodeById:function(id){var node;return BI.any(this.buttons,function(i,item){if(item.isEnabled()){if(item.attr("id")===id)return node=item,!0;if(BI.isFunction(item.getNodeById)&&(node=item.getNodeById(id)))return!0}}),node},getNodeByValue:function(value){var node;return BI.any(this.buttons,function(i,item){if(item.isEnabled())if(BI.isFunction(item.getNodeByValue)){if(node=item.getNodeByValue(value))return!0}else if(item.attr("value")===value)return node=item,!0}),node}}),BI.ButtonTree.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.button_tree",BI.ButtonTree),BI.TreeView=BI.inherit(BI.Pane,{_defaultConfig:function(){return BI.extend(BI.TreeView.superclass._defaultConfig.apply(this,arguments),{_baseCls:"bi-tree",paras:{selectedValues:{}},itemsCreator:BI.emptyFn})},_init:function(){BI.TreeView.superclass._init.apply(this,arguments);var o=this.options;this._stop=!1,this._createTree(),this.tip=BI.createWidget({type:"bi.loading_bar",invisible:!0,handler:BI.bind(this._loadMore,this)}),BI.createWidget({type:"bi.vertical",scrollable:!0,scrolly:!1,element:this,items:[this.tip]}),BI.isNotNull(o.value)&&this.setSelectedValue(o.value),BI.isIE9Below&&BI.isIE9Below()&&this.element.addClass("hack")},_createTree:function(){this.id="bi-tree"+BI.UUID(),this.nodes&&this.nodes.destroy(),this.tree&&this.tree.destroy(),this.tree=BI.createWidget({type:"bi.layout",element:"
    "}),BI.createWidget({type:"bi.default",element:this.element,items:[this.tree]})},_selectTreeNode:function(treeId,treeNode){this.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.CLICK,treeNode,this),this.fireEvent(BI.TreeView.EVENT_CHANGE,treeNode,this)},_configSetting:function(){function onClick(event,treeId,treeNode){var checked=treeNode.checked,status=treeNode.getCheckStatus();status.half===!0&&status.checked===!0&&(checked=!1),self.nodes.checkNode(treeNode,!checked,!0,!0)}function getUrl(treeId,treeNode){var parentNode=self._getParentValues(treeNode);treeNode.times=treeNode.times||1;var param="id="+treeNode.id+"×="+treeNode.times++ +"&parentValues= "+_global.encodeURIComponent(BI.jsonEncode(parentNode))+"&checkState="+_global.encodeURIComponent(BI.jsonEncode(treeNode.getCheckStatus()));return"&"+param}function beforeExpand(treeId,treeNode){return treeNode.isAjaxing?(BI.Msg.toast("Please Wait。","warning"),!1):(treeNode.children||(treeNode.times=1,ajaxGetNodes(treeNode,"refresh")),!0)}function onAsyncSuccess(event,treeId,treeNode,msg){if(treeNode.halfCheck=!1,msg&&0!==msg.length&&!/^[\s,\S]*<\/html>$/gi.test(msg)&&!self._stop){var zTree=self.nodes,totalCount=treeNode.count||0;treeNode.children.length>totalCount?(treeNode.count=treeNode.children.length,BI.delay(function(){ajaxGetNodes(treeNode)},perTime)):(zTree.updateNode(treeNode),zTree.selectNode(treeNode.children[0]))}}function onAsyncError(event,treeId,treeNode,XMLHttpRequest,textStatus,errorThrown){var zTree=self.nodes;BI.Msg.toast("Error!","warning")}function ajaxGetNodes(treeNode,reloadType){var zTree=self.nodes;"refresh"==reloadType&&zTree.updateNode(treeNode),zTree.reAsyncChildNodes(treeNode,reloadType,!0)}function beforeCheck(treeId,treeNode){function track(children){BI.each(children,function(i,ch){ch.halfCheck===!0&&(ch.halfCheck=!1,track(ch.children))})}if(treeNode.halfCheck=!1,treeNode.checked===!0){track(treeNode.children);var treeObj=self.nodes,nodes=treeObj.getSelectedNodes();BI.$.each(nodes,function(index,node){node.halfCheck=!1})}var status=treeNode.getCheckStatus();status.half===!0&&status.checked===!0&&(treeNode.checked=!1)}function onCheck(event,treeId,treeNode){self._selectTreeNode(treeId,treeNode)}function onExpand(event,treeId,treeNode){treeNode.halfCheck=!1}function onCollapse(event,treeId,treeNode){}var paras=this.options.paras,self=this,setting={async:{enable:!0,url:getUrl,autoParam:["id","name"],otherParam:BI.cjkEncodeDO(paras)},check:{enable:!0},data:{key:{title:"title",name:"text"},simpleData:{enable:!0}},view:{showIcon:!1,expandSpeed:"",nameIsHTML:!0,dblClickExpand:!1},callback:{beforeExpand:beforeExpand,onAsyncSuccess:onAsyncSuccess,onAsyncError:onAsyncError,beforeCheck:beforeCheck,onCheck:onCheck,onExpand:onExpand,onCollapse:onCollapse,onClick:onClick}},className="dark",perTime=100;return setting},_getParentValues:function(treeNode){if(!treeNode.getParentNode())return[];var parentNode=treeNode.getParentNode(),result=this._getParentValues(parentNode);return result=result.concat([this._getNodeValue(parentNode)])},_getNodeValue:function(node){return null==node.value?BI.replaceAll(node.text.replace(/<[^>]+>/g,"")," "," "):node.value},_getHalfSelectedValues:function(map,node){var self=this,checkState=node.getCheckStatus();if(checkState.checked!==!1||checkState.half!==!1){if(BI.isNotEmptyArray(node.children)&&checkState.half===!0){var children=node.children;return void BI.each(children,function(i,ch){self._getHalfSelectedValues(map,ch)})}var parent=node.parentValues||self._getParentValues(node),path=parent.concat(this._getNodeValue(node));if(BI.isNotEmptyArray(node.children)||checkState.half===!1)return void this._buildTree(map,path);var storeValues=BI.deepClone(this.options.paras.selectedValues),treeNode=this._getTree(storeValues,path);this._addTreeNode(map,parent,this._getNodeValue(node),treeNode)}},_getTree:function(map,values){var cur=map;return BI.any(values,function(i,value){return null==cur[value]||void(cur=cur[value])}),cur},_addTreeNode:function(map,values,key,value){var cur=map;BI.each(values,function(i,value){null==cur[value]&&(cur[value]={}),cur=cur[value]}),cur[key]=value},_buildTree:function(map,values){var cur=map;BI.each(values,function(i,value){null==cur[value]&&(cur[value]={}),cur=cur[value]})},_getSelectedValues:function(){function track(nodes){BI.each(nodes,function(i,node){var checkState=node.getCheckStatus();if(checkState.checked===!0||checkState.half===!0)if(checkState.half===!0)self._getHalfSelectedValues(hashMap,node);else{var parentValues=node.parentValues||self._getParentValues(node),values=parentValues.concat([self._getNodeValue(node)]);self._buildTree(hashMap,values)}})}var self=this,hashMap={},rootNoots=this.nodes.getNodes();return track(rootNoots),hashMap},_dealWidthNodes:function(nodes){var self=this,o=this.options,ns=BI.Tree.arrayFormat(nodes);return BI.each(ns,function(i,n){n.title=n.title||n.text||n.value,n.isParent=n.isParent||n.parent,BI.isKey(o.paras.keyword)?n.text=BI.$("
    ").__textKeywordMarked__(n.text,o.paras.keyword,n.py).html():n.text=BI.htmlEncode(n.text+"")}),nodes},_loadMore:function(){var self=this,o=this.options;this.tip.setLoading();var op=BI.extend({},o.paras,{times:++this.times});o.itemsCreator(op,function(res){if(self._stop!==!0){var hasNext=!!res.hasNext,nodes=res.items||[];hasNext?self.tip.setLoaded():self.tip.setEnd(),nodes.length>0&&self.nodes.addNodes(null,self._dealWidthNodes(nodes))}})},_initTree:function(setting){var self=this,o=this.options;self.fireEvent(BI.Events.INIT),this.times=1;var tree=this.tree;tree.empty(),this.loading(),this.tip.setVisible(!1);var callback=function(nodes){self._stop!==!0&&(self.nodes=BI.$.fn.zTree.init(tree.element,setting,nodes))},op=BI.extend({},o.paras,{times:1});o.itemsCreator(op,function(res){if(self._stop!==!0){var hasNext=!!res.hasNext,nodes=res.items||[];nodes.length>0&&callback(self._dealWidthNodes(nodes)),self.setTipVisible(nodes.length<=0),self.loaded(),hasNext?self.tip.setLoaded():self.tip.invisible(),1===op.times&&self.fireEvent(BI.Events.AFTERINIT)}})},initTree:function(nodes,setting){var setting=setting||{async:{enable:!1},check:{enable:!1},data:{key:{title:"title",name:"text"},simpleData:{enable:!0}},view:{showIcon:!1,expandSpeed:"",nameIsHTML:!0},callback:{}};this.nodes=BI.$.fn.zTree.init(this.tree.element,setting,nodes)},start:function(){this._stop=!1},stop:function(){this._stop=!0},stroke:function(config){delete this.options.keyword,BI.extend(this.options.paras,config);var setting=this._configSetting();this._createTree(),this.start(),this._initTree(setting)},populate:function(){this.stroke.apply(this,arguments)},hasChecked:function(){var treeObj=this.nodes;return treeObj.getCheckedNodes(!0).length>0},checkAll:function(checked){function setNode(children){BI.each(children,function(i,child){child.halfCheck=!1,setNode(child.children)})}this.nodes&&(BI.each(this.nodes.getNodes(),function(i,node){node.halfCheck=!1,setNode(node.children)}),this.nodes.checkAllNodes(checked))},expandAll:function(flag){this.nodes&&this.nodes.expandAll(flag)},setValue:function(value,param){this.checkAll(!1),this.updateValue(value,param),this.refresh()},setSelectedValue:function(value){this.options.paras.selectedValues=BI.deepClone(value||{})},updateValue:function(values,param){if(this.nodes){param||(param="value");var treeObj=this.nodes;BI.each(values,function(v,op){var nodes=treeObj.getNodesByParam(param,v,null);BI.each(nodes,function(j,node){BI.extend(node,{checked:!0},op),treeObj.updateNode(node)})})}},refresh:function(){this.nodes&&this.nodes.refresh()},getValue:function(){return this.nodes?this._getSelectedValues():null},destroyed:function(){this.stop(),this.nodes&&this.nodes.destroy()}}),BI.extend(BI.TreeView,{REQ_TYPE_INIT_DATA:1,REQ_TYPE_ADJUST_DATA:2,REQ_TYPE_SELECT_DATA:3,REQ_TYPE_GET_SELECTED_DATA:4}),BI.TreeView.EVENT_CHANGE="EVENT_CHANGE",BI.TreeView.EVENT_INIT=BI.Events.INIT,BI.TreeView.EVENT_AFTERINIT=BI.Events.AFTERINIT,BI.shortcut("bi.tree_view",BI.TreeView),BI.AsyncTree=BI.inherit(BI.TreeView,{_defaultConfig:function(){return BI.extend(BI.AsyncTree.superclass._defaultConfig.apply(this,arguments),{})},_init:function(){BI.AsyncTree.superclass._init.apply(this,arguments)},_configSetting:function(){function onClick(event,treeId,treeNode){var zTree=BI.$.fn.zTree.getZTreeObj(treeId),checked=treeNode.checked,status=treeNode.getCheckStatus();status.half===!0&&status.checked===!0&&(checked=!1),zTree.checkNode(treeNode,!checked,!0,!0)}function beforeCheck(treeId,treeNode){function track(children){BI.each(children,function(i,ch){ch.halfCheck===!0&&(ch.halfCheck=!1,track(ch.children))})}if(treeNode.halfCheck=!1,treeNode.checked===!0){track(treeNode.children);var treeObj=BI.$.fn.zTree.getZTreeObj(treeId),nodes=treeObj.getSelectedNodes();BI.each(nodes,function(index,node){node.halfCheck=!1})}var status=treeNode.getCheckStatus();status.half===!0&&status.checked===!0&&(treeNode.checked=!1)}function beforeExpand(treeId,treeNode){self._beforeExpandNode(treeId,treeNode)}function onCheck(event,treeId,treeNode){self._selectTreeNode(treeId,treeNode)}function onExpand(event,treeId,treeNode){treeNode.halfCheck=!1}function onCollapse(event,treeId,treeNode){treeNode.halfCheck=!1}var paras=this.options.paras,self=this,setting={async:{enable:!1,otherParam:BI.cjkEncodeDO(paras)},check:{enable:!0},data:{key:{title:"title",name:"text"},simpleData:{enable:!0}},view:{showIcon:!1,expandSpeed:"",nameIsHTML:!0,dblClickExpand:!1},callback:{beforeCheck:beforeCheck,onCheck:onCheck,beforeExpand:beforeExpand,onExpand:onExpand,onCollapse:onCollapse,onClick:onClick}};return setting},_selectTreeNode:function(treeId,treeNode){var self=this,o=this.options,parentValues=BI.deepClone(treeNode.parentValues||self._getParentValues(treeNode)),name=this._getNodeValue(treeNode);if(treeNode.checked===!0);else{var tNode=treeNode,pNode=this._getTree(this.options.paras.selectedValues,parentValues);for(BI.isNotNull(pNode[name])&&delete pNode[name];null!=tNode&&BI.isEmpty(pNode);)parentValues=parentValues.slice(0,parentValues.length-1),tNode=tNode.getParentNode(),null!=tNode&&(pNode=this._getTree(this.options.paras.selectedValues,parentValues),name=this._getNodeValue(tNode),delete pNode[name])}BI.AsyncTree.superclass._selectTreeNode.apply(self,arguments)},_beforeExpandNode:function(treeId,treeNode){function callback(nodes,hasNext){self.nodes.addNodes(treeNode,nodes),hasNext===!0&&BI.delay(function(){times++,op.times=times,o.itemsCreator(op,complete)},100)}var self=this,o=this.options,parentValues=treeNode.parentValues||self._getParentValues(treeNode),op=BI.extend({},o.paras,{id:treeNode.id,times:1,parentValues:parentValues.concat(this._getNodeValue(treeNode)),checkState:treeNode.getCheckStatus()}),complete=function(d){var nodes=d.items||[];nodes.length>0&&callback(self._dealWidthNodes(nodes),!!d.hasNext)},times=1;treeNode.children||setTimeout(function(){o.itemsCreator(op,complete)},17)},_join:function(valueA,valueB){function track(parent,node,compare){BI.each(node,function(n,item){BI.isNull(compare[n])?self._addTreeNode(map,parent,n,item):BI.isEmpty(compare[n])?self._addTreeNode(map,parent,n,{}):track(parent.concat([n]),node[n],compare[n])})}var self=this,map={};return track([],valueA,valueB),track([],valueB,valueA),map},hasChecked:function(){return!BI.isEmpty(this.options.paras.selectedValues)||BI.AsyncTree.superclass.hasChecked.apply(this,arguments)},_getJoinValue:function(){if(!this.nodes)return{};var checkedValues=this._getSelectedValues();return BI.isEmpty(checkedValues)?BI.deepClone(this.options.paras.selectedValues):BI.isEmpty(this.options.paras.selectedValues)?checkedValues:this._join(checkedValues,this.options.paras.selectedValues)},getValue:function(){return this._getJoinValue()},stroke:function(config){delete this.options.keyword,BI.extend(this.options.paras,config);var setting=this._configSetting();this._initTree(setting)}}),BI.shortcut("bi.async_tree",BI.AsyncTree),BI.PartTree=BI.inherit(BI.AsyncTree,{_defaultConfig:function(){return BI.extend(BI.PartTree.superclass._defaultConfig.apply(this,arguments),{})},_init:function(){BI.PartTree.superclass._init.apply(this,arguments)},_loadMore:function(){var self=this,o=this.options,op=BI.extend({},o.paras,{type:BI.TreeView.REQ_TYPE_INIT_DATA,times:++this.times});this.tip.setLoading(),o.itemsCreator(op,function(d){var hasNext=!!d.hasNext,nodes=d.items||[];o.paras.lastSearchValue=d.lastSearchValue,self._stop!==!0&&(hasNext?self.tip.setLoaded():self.tip.setEnd(),nodes.length>0&&self.nodes.addNodes(null,self._dealWidthNodes(nodes)))})},_selectTreeNode:function(treeId,treeNode){var self=this,o=this.options,parentValues=BI.deepClone(treeNode.parentValues||self._getParentValues(treeNode)),name=this._getNodeValue(treeNode);if(treeNode.checked===!0)this.options.paras.selectedValues=this._getJoinValue(),o.itemsCreator(BI.extend({},o.paras,{type:BI.TreeView.REQ_TYPE_ADJUST_DATA,curSelectedValue:name,parentValues:parentValues}),function(res){self.options.paras.selectedValues=res,BI.AsyncTree.superclass._selectTreeNode.apply(self,arguments)});else{for(var t=this.options.paras.selectedValues,p=parentValues.concat(name),i=0,len=p.length;i0?self._dealWidthNodes(nodes):[]),self.setTipVisible(nodes.length<=0),self.loaded(),hasNext?self.tip.setLoaded():self.tip.invisible(),self.fireEvent(BI.Events.AFTERINIT)}};BI.delay(function(){o.itemsCreator(op,complete)},100)},getValue:function(){return BI.deepClone(this.options.paras.selectedValues||{})},stroke:function(config){var o=this.options;delete o.paras.keyword,BI.extend(o.paras,config),delete o.paras.lastSearchValue;var setting=this._configSetting();this._initTree(setting,o.paras.keyword)}}),BI.shortcut("bi.part_tree",BI.PartTree),BI.ListTreeView=BI.inherit(BI.TreeView,{_constants:{SPLIT:"<|>"},_defaultConfig:function(){return BI.extend(BI.ListTreeView.superclass._defaultConfig.apply(this,arguments),{})},_init:function(){BI.ListTreeView.superclass._init.apply(this,arguments);var o=this.options;this.storeValue=o.value||{}},_configSetting:function(){function onClick(event,treeId,treeNode){var zTree=BI.$.fn.zTree.getZTreeObj(treeId),checked=treeNode.checked;self._checkValue(treeNode,!checked),zTree.checkNode(treeNode,!checked,!0,!0)}function onCheck(event,treeId,treeNode){self._selectTreeNode(treeId,treeNode)}var paras=this.options.paras,self=this,setting={async:{enable:!1},check:{enable:!0,chkboxType:{Y:"",N:""}},data:{key:{title:"title",name:"text"},simpleData:{enable:!0}},view:{showIcon:!1,expandSpeed:"",nameIsHTML:!0,dblClickExpand:!1},callback:{onCheck:onCheck,onClick:onClick}};return setting},_selectTreeNode:function(treeId,treeNode){this._checkValue(treeNode,treeNode.checked),BI.ListTreeView.superclass._selectTreeNode.apply(this,arguments)},_transArrayToMap:function(treeArrays){var self=this,map={};return BI.each(treeArrays,function(idx,array){var key=array.join(self._constants.SPLIT);map[key]=!0}),map},_transMapToArray:function(treeMap){var self=this,array=[];return BI.each(treeMap,function(key){var item=key.split(self._constants.SPLIT);array.push(item)}),array},_checkValue:function(treeNode,checked){var key=BI.concat(this._getParentValues(treeNode),this._getNodeValue(treeNode)).join(this._constants.SPLIT);checked?this.storeValue[key]=!0:delete this.storeValue[key]},setSelectedValue:function(value){this.options.paras.selectedValues=value||[],this.storeValue=this._transArrayToMap(value)},getValue:function(){return this._transMapToArray(this.storeValue)}}),BI.shortcut("bi.list_tree_view",BI.ListTreeView),BI.ListAsyncTree=BI.inherit(BI.ListTreeView,{_defaultConfig:function(){return BI.extend(BI.ListAsyncTree.superclass._defaultConfig.apply(this,arguments),{})},_init:function(){BI.ListAsyncTree.superclass._init.apply(this,arguments)},_configSetting:function(){function beforeCheck(treeId,treeNode){treeNode.half=!1}function onClick(event,treeId,treeNode){var zTree=BI.$.fn.zTree.getZTreeObj(treeId),checked=treeNode.checked;self._checkValue(treeNode,!checked),zTree.checkNode(treeNode,!checked,!0,!0)}function beforeExpand(treeId,treeNode){self._beforeExpandNode(treeId,treeNode)}function onCheck(event,treeId,treeNode){self._selectTreeNode(treeId,treeNode)}var paras=this.options.paras,self=this,setting={async:{enable:!1,otherParam:BI.cjkEncodeDO(paras)},check:{enable:!0,chkboxType:{Y:"",N:""}},data:{key:{title:"title",name:"text"},simpleData:{enable:!0}},view:{showIcon:!1,expandSpeed:"",nameIsHTML:!0,dblClickExpand:!1},callback:{onCheck:onCheck,beforeExpand:beforeExpand,beforeCheck:beforeCheck,onClick:onClick}};return setting},_beforeExpandNode:function(treeId,treeNode){function callback(nodes,hasNext){self.nodes.addNodes(treeNode,nodes),hasNext===!0&&BI.delay(function(){times++,op.times=times,o.itemsCreator(op,complete)},100)}var self=this,o=this.options,parentValues=treeNode.parentValues||self._getParentValues(treeNode),op=BI.extend({},o.paras,{id:treeNode.id,times:1,parentValues:parentValues.concat(this._getNodeValue(treeNode))}),complete=function(d){var nodes=d.items||[];nodes.length>0&&callback(self._dealWidthNodes(nodes),!!d.hasNext)},times=1;treeNode.children||setTimeout(function(){o.itemsCreator(op,complete)},17)},hasChecked:function(){return!BI.isEmpty(this.options.paras.selectedValues)||BI.ListAsyncTree.superclass.hasChecked.apply(this,arguments)},stroke:function(config){delete this.options.keyword,BI.extend(this.options.paras,config);var setting=this._configSetting();this._initTree(setting)}}),BI.shortcut("bi.list_async_tree",BI.ListAsyncTree),BI.ListPartTree=BI.inherit(BI.ListAsyncTree,{_defaultConfig:function(){return BI.extend(BI.ListPartTree.superclass._defaultConfig.apply(this,arguments),{})},_init:function(){BI.ListPartTree.superclass._init.apply(this,arguments)},_loadMore:function(){var self=this,o=this.options,op=BI.extend({},o.paras,{type:BI.TreeView.REQ_TYPE_INIT_DATA,times:++this.times});this.tip.setLoading(),o.itemsCreator(op,function(d){var hasNext=!!d.hasNext,nodes=d.items||[];o.paras.lastSearchValue=d.lastSearchValue,self._stop!==!0&&(hasNext?self.tip.setLoaded():self.tip.setEnd(),nodes.length>0&&self.nodes.addNodes(null,self._dealWidthNodes(nodes)))})},_initTree:function(setting,keyword){function callback(nodes){self._stop!==!0&&(self.nodes=BI.$.fn.zTree.init(tree.element,setting,nodes))}var self=this,o=this.options;this.times=1;var tree=this.tree;tree.empty(),self.tip.setVisible(!1),this.loading();var op=BI.extend({},o.paras,{type:BI.TreeView.REQ_TYPE_INIT_DATA,times:this.times}),complete=function(d){if(self._stop!==!0&&keyword==o.paras.keyword){var hasNext=!!d.hasNext,nodes=d.items||[];o.paras.lastSearchValue=d.lastSearchValue,callback(nodes.length>0?self._dealWidthNodes(nodes):[]),self.setTipVisible(nodes.length<=0),self.loaded(),hasNext?self.tip.setLoaded():self.tip.invisible(),self.fireEvent(BI.Events.AFTERINIT)}};BI.delay(function(){o.itemsCreator(op,complete)},100)},stroke:function(config){var o=this.options;delete o.paras.keyword,BI.extend(o.paras,config),delete o.paras.lastSearchValue;var setting=this._configSetting();this._initTree(setting,o.paras.keyword)}}),BI.shortcut("bi.list_part_tree",BI.ListPartTree),BI.prepares.push(function(){BI.Resizers=new BI.ResizeController,BI.Layers=new BI.LayerController,BI.Maskers=new BI.MaskersController,BI.Bubbles=new BI.BubblesController,BI.Tooltips=new BI.TooltipsController,BI.Popovers=new BI.PopoverController,BI.Broadcasts=new BI.BroadcastController,BI.StyleLoaders=new BI.StyleLoaderManager}),BI.CollectionView=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.CollectionView.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-collection",overflowX:!0,overflowY:!0,cellSizeAndPositionGetter:BI.emptyFn,horizontalOverscanSize:0,verticalOverscanSize:0,scrollLeft:0,scrollTop:0,items:[]})},_init:function(){BI.CollectionView.superclass._init.apply(this,arguments);var self=this,o=this.options;this.renderedCells=[],this.renderedKeys=[],this.renderRange={},this._scrollLock=!1,this._debounceRelease=BI.debounce(function(){self._scrollLock=!1},1e3/60),this.container=BI.createWidget({type:"bi.absolute"}),this.element.scroll(function(){self._scrollLock!==!0&&(o.scrollLeft=self.element.scrollLeft(),o.scrollTop=self.element.scrollTop(),self._calculateChildrenToRender(),self.fireEvent(BI.CollectionView.EVENT_SCROLL,{scrollLeft:o.scrollLeft,scrollTop:o.scrollTop}))}),BI.createWidget({type:"bi.vertical",element:this,scrollable:o.overflowX===!0&&o.overflowY===!0,scrolly:o.overflowX===!1&&o.overflowY===!0,scrollx:o.overflowX===!0&&o.overflowY===!1,items:[this.container]}),o.items.length>0&&(this._calculateSizeAndPositionData(),this._populate())},mounted:function(){var o=this.options;0===o.scrollLeft&&0===o.scrollTop||(this.element.scrollTop(o.scrollTop),this.element.scrollLeft(o.scrollLeft))},_calculateSizeAndPositionData:function(){for(var o=this.options,cellMetadata=[],sectionManager=new BI.SectionManager,height=0,width=0,index=0,len=o.items.length;index0&&bottom>0){if(top>=this.renderRange.minY&&bottom<=this.renderRange.maxY&&left>=this.renderRange.minX&&right<=this.renderRange.maxX)return;for(var childrenToDisplay=this._cellRenderers(bottom-top,right-left,left,top),renderedCells=[],renderedKeys={},renderedWidgets={},lefts={},tops={},i=0,len=childrenToDisplay.length;i=0?(datum.width!==this.renderedCells[index]._width&&(this.renderedCells[index]._width=datum.width,this.renderedCells[index].el.setWidth(datum.width)),datum.height!==this.renderedCells[index]._height&&(this.renderedCells[index]._height=datum.height,this.renderedCells[index].el.setHeight(datum.height)),this.renderedCells[index]._left!==datum.x&&this.renderedCells[index].el.element.css("left",datum.x+"px"),this.renderedCells[index]._top!==datum.y&&this.renderedCells[index].el.element.css("top",datum.y+"px"),renderedCells.push(child=this.renderedCells[index])):(child=BI.createWidget(BI.extend({type:"bi.label",width:datum.width,height:datum.height},o.items[datum.index],{cls:(o.items[datum.index].cls||"")+" container-cell"+(0===datum.y?" first-row":"")+(0===datum.x?" first-col":""),_left:datum.x,_top:datum.y})),renderedCells.push({el:child,left:datum.x,top:datum.y,_left:datum.x,_top:datum.y,_width:datum.width,_height:datum.height}));for(var startTopIndex=0|topMap[datum.y],endTopIndex=0|topMap[datum.y+datum.height],k=startTopIndex;k<=endTopIndex;k++){var t=tops[k];assertMinBorder(leftBorder,t),assertMaxBorder(rightBorder,t),leftBorder[t]=Math.min(leftBorder[t],datum.x),rightBorder[t]=Math.max(rightBorder[t],datum.x+datum.width)}for(var startLeftIndex=0|leftMap[datum.x],endLeftIndex=0|leftMap[datum.x+datum.width],k=startLeftIndex;k<=endLeftIndex;k++){var l=lefts[k];assertMinBorder(topBorder,l),assertMaxBorder(bottomBorder,l),topBorder[l]=Math.min(topBorder[l],datum.y),bottomBorder[l]=Math.max(bottomBorder[l],datum.y+datum.height)}renderedKeys[datum.index]=[datum.index,i],renderedWidgets[i]=child}var existSet={},addSet={},deleteArray=[];BI.each(renderedKeys,function(i,key){self.renderedKeys[i]?existSet[i]=key:addSet[i]=key}),BI.each(this.renderedKeys,function(i,key){existSet[i]||addSet[i]||deleteArray.push(key[1])}),BI.each(deleteArray,function(i,index){self.renderedCells[index].el._destroy()});var addedItems=[];BI.each(addSet,function(index,key){addedItems.push(renderedCells[key[1]])}),this.container.addItems(addedItems),this.container._children=renderedWidgets,this.container.attr("items",renderedCells),this.renderedCells=renderedCells,this.renderedKeys=renderedKeys;var minX=BI.min(leftBorder),maxX=BI.max(rightBorder),minY=BI.max(topBorder),maxY=BI.min(bottomBorder);this.renderRange={minX:minX,minY:minY,maxX:maxX,maxY:maxY}}},_getMaxScrollLeft:function(){return Math.max(0,this._width-this.options.width+(this.options.overflowX?BI.DOM.getScrollWidth():0))},_getMaxScrollTop:function(){return Math.max(0,this._height-this.options.height+(this.options.overflowY?BI.DOM.getScrollWidth():0))},_populate:function(items){var o=this.options;if(this._reRange(),items&&items!==this.options.items&&(this.options.items=items,this._calculateSizeAndPositionData()),o.items.length>0){this.container.setWidth(this._width),this.container.setHeight(this._height),this._calculateChildrenToRender();try{this.element.scrollTop(o.scrollTop),this.element.scrollLeft(o.scrollLeft)}catch(e){}}},setScrollLeft:function(scrollLeft){this.options.scrollLeft!==scrollLeft&&(this._scrollLock=!0,this.options.scrollLeft=BI.clamp(scrollLeft||0,0,this._getMaxScrollLeft()),this._debounceRelease(),this._calculateChildrenToRender(),this.element.scrollLeft(this.options.scrollLeft))},setScrollTop:function(scrollTop){this.options.scrollTop!==scrollTop&&(this._scrollLock=!0,this.options.scrollTop=BI.clamp(scrollTop||0,0,this._getMaxScrollTop()),this._debounceRelease(),this._calculateChildrenToRender(),this.element.scrollTop(this.options.scrollTop))},setOverflowX:function(b){var self=this;this.options.overflowX!==!!b&&(this.options.overflowX=!!b,BI.nextTick(function(){self.element.css({overflowX:b?"auto":"hidden"})}))},setOverflowY:function(b){var self=this;this.options.overflowY!==!!b&&(this.options.overflowY=!!b,BI.nextTick(function(){self.element.css({overflowY:b?"auto":"hidden"})}))},getScrollLeft:function(){return this.options.scrollLeft},getScrollTop:function(){return this.options.scrollTop},getMaxScrollLeft:function(){return this._getMaxScrollLeft()},getMaxScrollTop:function(){return this._getMaxScrollTop()},_reRange:function(){this.renderRange={}},_clearChildren:function(){this.container._children={},this.container.attr("items",[])},restore:function(){BI.each(this.renderedCells,function(i,cell){cell.el._destroy()}),this._clearChildren(), +this.renderedCells=[],this.renderedKeys=[],this.renderRange={},this._scrollLock=!1},populate:function(items){items&&items!==this.options.items&&this.restore(),this._populate(items)}}),BI.CollectionView.EVENT_SCROLL="EVENT_SCROLL",BI.shortcut("bi.collection_view",BI.CollectionView),BI.Combo=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.Combo.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-combo",trigger:"click",toggle:!0,direction:"bottom",logic:{dynamic:!0},container:null,isDefaultInit:!1,destroyWhenHide:!1,isNeedAdjustHeight:!0,isNeedAdjustWidth:!0,stopEvent:!1,stopPropagation:!1,adjustLength:0,adjustXOffset:0,adjustYOffset:0,hideChecker:BI.emptyFn,offsetStyle:"left",el:{},popup:{},comboClass:"bi-combo-popup",hoverClass:"bi-combo-hover"})},_init:function(){BI.Combo.superclass._init.apply(this,arguments);var self=this,o=this.options;this._initCombo(),this._initPullDownAction(),this.combo.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){self.isEnabled()&&self.isValid()&&(type===BI.Events.EXPAND&&self._popupView(),type===BI.Events.COLLAPSE&&self._hideView(),type===BI.Events.EXPAND&&(self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),self.fireEvent(BI.Combo.EVENT_EXPAND)),type===BI.Events.COLLAPSE&&(self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),self.isViewVisible()&&self.fireEvent(BI.Combo.EVENT_COLLAPSE)),type===BI.Events.CLICK&&self.fireEvent(BI.Combo.EVENT_TRIGGER_CHANGE,obj))}),self.element.on("mouseenter."+self.getName(),function(e){self.isEnabled()&&self.isValid()&&self.combo.isEnabled()&&self.combo.isValid()&&self.element.addClass(o.hoverClass)}),self.element.on("mouseleave."+self.getName(),function(e){self.isEnabled()&&self.isValid()&&self.combo.isEnabled()&&self.combo.isValid()&&self.element.removeClass(o.hoverClass)}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("vertical",BI.extend(o.logic,{items:[{el:this.combo}]})))),o.isDefaultInit&&this._assertPopupView(),BI.Resizers.add(this.getName(),BI.bind(function(){this.isViewVisible()&&this._hideView()},this))},_toggle:function(){this._assertPopupViewRender(),this.popupView.isVisible()?this._hideView():this.isEnabled()&&this._popupView()},_initPullDownAction:function(){function hide(){self.isEnabled()&&self.isValid()&&self.combo.isEnabled()&&self.combo.isValid()&&o.toggle===!0&&(self._hideView(),self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.COLLAPSE,"",self.combo),self.fireEvent(BI.Combo.EVENT_COLLAPSE)),self.popupView&&self.popupView.element.off("mouseenter."+self.getName()).off("mouseleave."+self.getName()),enterPopup=!1}var self=this,o=this.options,evs=(this.options.trigger||"").split(","),st=function(e){o.stopEvent&&e.stopEvent(),o.stopPropagation&&e.stopPropagation()},enterPopup=!1;BI.each(evs,function(i,ev){switch(ev){case"hover":self.element.on("mouseenter."+self.getName(),function(e){self.isEnabled()&&self.isValid()&&self.combo.isEnabled()&&self.combo.isValid()&&(self._popupView(),self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.EXPAND,"",self.combo),self.fireEvent(BI.Combo.EVENT_EXPAND))}),self.element.on("mouseleave."+self.getName(),function(e){self.popupView&&(self.popupView.element.on("mouseenter."+self.getName(),function(e){enterPopup=!0,self.popupView.element.on("mouseleave."+self.getName(),function(e){hide()}),self.popupView.element.off("mouseenter."+self.getName())}),BI.defer(function(){enterPopup||hide()},50))});break;case"click":var debounce=BI.debounce(function(e){self.combo.element.__isMouseInBounds__(e)&&self.isEnabled()&&self.isValid()&&self.combo.isEnabled()&&self.combo.isValid()&&(o.toggle?self._toggle():self._popupView(),self.isViewVisible()?(self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.EXPAND,"",self.combo),self.fireEvent(BI.Combo.EVENT_EXPAND)):(self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.COLLAPSE,"",self.combo),self.fireEvent(BI.Combo.EVENT_COLLAPSE)))},BI.EVENT_RESPONSE_TIME,{leading:!0,trailing:!1});self.element.off(ev+"."+self.getName()).on(ev+"."+self.getName(),function(e){debounce(e),st(e)});break;case"click-hover":var debounce=BI.debounce(function(e){self.combo.element.__isMouseInBounds__(e)&&self.isEnabled()&&self.isValid()&&self.combo.isEnabled()&&self.combo.isValid()&&(self._popupView(),self.isViewVisible()&&(self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.EXPAND,"",self.combo),self.fireEvent(BI.Combo.EVENT_EXPAND)))},BI.EVENT_RESPONSE_TIME,{leading:!0,trailing:!1});self.element.off("click."+self.getName()).on("click."+self.getName(),function(e){debounce(e),st(e)}),self.element.on("mouseleave."+self.getName(),function(e){self.popupView&&(self.popupView.element.on("mouseenter."+self.getName(),function(e){enterPopup=!0,self.popupView.element.on("mouseleave."+self.getName(),function(e){hide()}),self.popupView.element.off("mouseenter."+self.getName())}),BI.defer(function(){enterPopup||hide()},50))})}})},_initCombo:function(){this.combo=BI.createWidget(this.options.el,{value:this.options.value})},_assertPopupView:function(){var self=this,o=this.options;null==this.popupView&&(this.popupView=BI.createWidget(this.options.popup,{type:"bi.popup_view",value:o.value},this),this.popupView.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){type===BI.Events.CLICK&&(self.combo.setValue(self.getValue()),self.fireEvent(BI.Combo.EVENT_CHANGE,value,obj)),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.popupView.setVisible(!1),BI.nextTick(function(){self.fireEvent(BI.Combo.EVENT_AFTER_INIT)}))},_assertPopupViewRender:function(){this._assertPopupView(),this._rendered||(BI.createWidget({type:"bi.vertical",scrolly:!1,element:this.options.container||this,items:[{el:this.popupView}]}),this._rendered=!0)},_hideIf:function(e){if(this.element.find(e.target).length>0||this.popupView&&this.popupView.element.find(e.target).length>0||"CodeMirror-cursor"===e.target.className||BI.Widget._renderEngine.createElement(e.target).closest(".CodeMirror-hints").length>0){var directions=this.options.direction.split(",");return void((BI.contains(directions,"innerLeft")||BI.contains(directions,"innerRight"))&&(this.adjustWidth(),this.adjustHeight()))}var isHide=this.options.hideChecker.apply(this,[e]);isHide!==!1&&this._hideView()},_hideView:function(){this.fireEvent(BI.Combo.EVENT_BEFORE_HIDEVIEW),this.options.destroyWhenHide===!0?(this.popupView&&this.popupView.destroy(),this.popupView=null,this._rendered=!1):this.popupView&&this.popupView.invisible(),this.element.removeClass(this.options.comboClass),BI.Widget._renderEngine.createElement(document).unbind("mousedown."+this.getName()).unbind("mousewheel."+this.getName()),this.fireEvent(BI.Combo.EVENT_AFTER_HIDEVIEW)},_popupView:function(e){this._assertPopupViewRender(),this.fireEvent(BI.Combo.EVENT_BEFORE_POPUPVIEW),this.popupView.visible(),this.adjustWidth(e),this.adjustHeight(e),this.element.addClass(this.options.comboClass),BI.Widget._renderEngine.createElement(document).unbind("mousedown."+this.getName()).unbind("mousewheel."+this.getName()),BI.Widget._renderEngine.createElement(document).bind("mousedown."+this.getName(),BI.bind(this._hideIf,this)).bind("mousewheel."+this.getName(),BI.bind(this._hideIf,this)),this.fireEvent(BI.Combo.EVENT_AFTER_POPUPVIEW)},adjustWidth:function(e){var o=this.options;if(this.popupView&&o.isNeedAdjustWidth===!0){this.resetListWidth("");var width=this.popupView.element.outerWidth(),maxW=this.element.outerWidth()||o.width;width>maxW+80?maxW+=80:width>maxW&&(maxW=width),this.resetListWidth(maxW<100?100:maxW)}},adjustHeight:function(e){var o=this.options,p={};if(this.popupView){var isVisible=this.popupView.isVisible();this.popupView.visible();var combo=BI.isNotNull(e)?{element:{offset:function(){return{left:e.pageX,top:e.pageY}},bounds:function(){return{x:e.offsetX,y:e.offsetY,width:0,height:24}},outerWidth:function(){return 0},outerHeight:function(){return 24}}}:this.combo;switch(o.direction){case"bottom":case"bottom,right":p=BI.DOM.getComboPosition(combo,this.popupView,o.adjustXOffset,o.adjustYOffset||o.adjustLength,o.isNeedAdjustHeight,["bottom","top","right","left"],o.offsetStyle);break;case"top":case"top,right":p=BI.DOM.getComboPosition(combo,this.popupView,o.adjustXOffset,o.adjustYOffset||o.adjustLength,o.isNeedAdjustHeight,["top","bottom","right","left"],o.offsetStyle);break;case"left":case"left,bottom":p=BI.DOM.getComboPosition(combo,this.popupView,o.adjustXOffset||o.adjustLength,o.adjustYOffset,o.isNeedAdjustHeight,["left","right","bottom","top"],o.offsetStyle);break;case"right":case"right,bottom":p=BI.DOM.getComboPosition(combo,this.popupView,o.adjustXOffset||o.adjustLength,o.adjustYOffset,o.isNeedAdjustHeight,["right","left","bottom","top"],o.offsetStyle);break;case"top,left":p=BI.DOM.getComboPosition(combo,this.popupView,o.adjustXOffset,o.adjustYOffset||o.adjustLength,o.isNeedAdjustHeight,["top","bottom","left","right"],o.offsetStyle);break;case"bottom,left":p=BI.DOM.getComboPosition(combo,this.popupView,o.adjustXOffset,o.adjustYOffset||o.adjustLength,o.isNeedAdjustHeight,["bottom","top","left","right"],o.offsetStyle);break;case"left,top":p=BI.DOM.getComboPosition(combo,this.popupView,o.adjustXOffset||o.adjustLength,o.adjustYOffset,o.isNeedAdjustHeight,["left","right","top","bottom"],o.offsetStyle);break;case"right,top":p=BI.DOM.getComboPosition(combo,this.popupView,o.adjustXOffset||o.adjustLength,o.adjustYOffset,o.isNeedAdjustHeight,["right","left","top","bottom"],o.offsetStyle);break;case"right,innerRight":p=BI.DOM.getComboPosition(combo,this.popupView,o.adjustXOffset||o.adjustLength,o.adjustYOffset,o.isNeedAdjustHeight,["right","left","innerRight","innerLeft","bottom","top"],o.offsetStyle);break;case"right,innerLeft":p=BI.DOM.getComboPosition(combo,this.popupView,o.adjustXOffset||o.adjustLength,o.adjustYOffset,o.isNeedAdjustHeight,["right","left","innerLeft","innerRight","bottom","top"],o.offsetStyle);break;case"innerRight":p=BI.DOM.getComboPosition(combo,this.popupView,o.adjustXOffset||o.adjustLength,o.adjustYOffset,o.isNeedAdjustHeight,["innerRight","innerLeft","right","left","bottom","top"],o.offsetStyle);break;case"innerLeft":p=BI.DOM.getComboPosition(combo,this.popupView,o.adjustXOffset||o.adjustLength,o.adjustYOffset,o.isNeedAdjustHeight,["innerLeft","innerRight","left","right","bottom","top"],o.offsetStyle);break;case"top,custom":case"custom,top":p=BI.DOM.getTopAdaptPosition(combo,this.popupView,o.adjustYOffset||o.adjustLength,o.isNeedAdjustHeight);break;case"custom,bottom":case"bottom,custom":p=BI.DOM.getBottomAdaptPosition(combo,this.popupView,o.adjustYOffset||o.adjustLength,o.isNeedAdjustHeight);break;case"left,custom":case"custom,left":p=BI.DOM.getLeftAdaptPosition(combo,this.popupView,o.adjustXOffset||o.adjustLength),delete p.top,delete p.adaptHeight;break;case"custom,right":case"right,custom":p=BI.DOM.getRightAdaptPosition(combo,this.popupView,o.adjustXOffset||o.adjustLength),delete p.top,delete p.adaptHeight}"adaptHeight"in p&&this.resetListHeight(p.adaptHeight),"left"in p&&this.popupView.element.css({left:p.left}),"top"in p&&this.popupView.element.css({top:p.top}),this.position=p,this.popupView.setVisible(isVisible)}},resetListHeight:function(h){this._assertPopupView(),this.popupView.resetHeight&&this.popupView.resetHeight(h)},resetListWidth:function(w){this._assertPopupView(),this.popupView.resetWidth&&this.popupView.resetWidth(w)},populate:function(items){this._assertPopupView(),this.popupView.populate.apply(this.popupView,arguments),this.combo.populate.apply(this.combo,arguments)},_setEnable:function(arg){BI.Combo.superclass._setEnable.apply(this,arguments),arg===!0?this.element.removeClass("base-disabled disabled"):arg===!1&&this.element.addClass("base-disabled disabled"),!arg&&this.element.removeClass(this.options.hoverClass),!arg&&this.isViewVisible()&&this._hideView()},setValue:function(v){this.combo.setValue(v),BI.isNull(this.popupView)?this.options.popup.value=v:this.popupView.setValue(v)},getValue:function(){return BI.isNull(this.popupView)?this.options.popup.value:this.popupView.getValue()},isViewVisible:function(){return this.isEnabled()&&this.combo.isEnabled()&&!!this.popupView&&this.popupView.isVisible()},showView:function(e){this.isEnabled()&&this.combo.isEnabled()&&!this.isViewVisible()&&this._popupView(e)},hideView:function(){this._hideView()},getView:function(){return this.popupView},getPopupPosition:function(){return this.position},toggle:function(){this._toggle()},destroyed:function(){BI.Widget._renderEngine.createElement(document).unbind("mousedown."+this.getName()).unbind("mousewheel."+this.getName()).unbind("mouseenter."+this.getName()).unbind("mousemove."+this.getName()).unbind("mouseleave."+this.getName()),BI.Resizers.remove(this.getName())}}),BI.Combo.EVENT_TRIGGER_CHANGE="EVENT_TRIGGER_CHANGE",BI.Combo.EVENT_CHANGE="EVENT_CHANGE",BI.Combo.EVENT_EXPAND="EVENT_EXPAND",BI.Combo.EVENT_COLLAPSE="EVENT_COLLAPSE",BI.Combo.EVENT_AFTER_INIT="EVENT_AFTER_INIT",BI.Combo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.Combo.EVENT_AFTER_POPUPVIEW="EVENT_AFTER_POPUPVIEW",BI.Combo.EVENT_BEFORE_HIDEVIEW="EVENT_BEFORE_HIDEVIEW",BI.Combo.EVENT_AFTER_HIDEVIEW="EVENT_AFTER_HIDEVIEW",BI.shortcut("bi.combo",BI.Combo),BI.Expander=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.Expander.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-expander",trigger:"click",toggle:!0,isDefaultInit:!1,el:{},popup:{},expanderClass:"bi-expander-popup",hoverClass:"bi-expander-hover"})},_init:function(){BI.Expander.superclass._init.apply(this,arguments);var self=this,o=this.options;this._expanded=!!o.el.open,this._initExpander(),this._initPullDownAction(),this.expander.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){self.isEnabled()&&self.isValid()&&(type===BI.Events.EXPAND&&self._popupView(),type===BI.Events.COLLAPSE&&self._hideView(),type===BI.Events.EXPAND&&(self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),self.fireEvent(BI.Expander.EVENT_EXPAND)),type===BI.Events.COLLAPSE&&(self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),self.isViewVisible()&&self.fireEvent(BI.Expander.EVENT_COLLAPSE)),type===BI.Events.CLICK&&self.fireEvent(BI.Expander.EVENT_TRIGGER_CHANGE,value,obj))}),this.element.hover(function(){self.isEnabled()&&self.isValid()&&self.expander.isEnabled()&&self.expander.isValid()&&self.element.addClass(o.hoverClass)},function(){self.isEnabled()&&self.isValid()&&self.expander.isEnabled()&&self.expander.isValid()&&self.element.removeClass(o.hoverClass)}),BI.createWidget({type:"bi.vertical",scrolly:!1,element:this,items:[{el:this.expander}]}),o.isDefaultInit&&this._assertPopupView(),this.expander.isOpened()===!0&&this._popupView()},_toggle:function(){this._assertPopupViewRender(),this.popupView.isVisible()?this._hideView():this.isEnabled()&&this._popupView()},_initPullDownAction:function(){var self=this,o=this.options,evs=this.options.trigger.split(",");BI.each(evs,function(i,e){switch(e){case"hover":self.element[e](function(e){self.isEnabled()&&self.isValid()&&self.expander.isEnabled()&&self.expander.isValid()&&(self._popupView(),self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.EXPAND,"",self.expander),self.fireEvent(BI.Expander.EVENT_EXPAND))},function(){self.isEnabled()&&self.isValid()&&self.expander.isEnabled()&&self.expander.isValid()&&o.toggle&&(self._hideView(),self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.COLLAPSE,"",self.expander),self.fireEvent(BI.Expander.EVENT_COLLAPSE))});break;case"click":e&&self.element.off(e+"."+self.getName()).on(e+"."+self.getName(),BI.debounce(function(e){self.expander.element.__isMouseInBounds__(e)&&self.isEnabled()&&self.isValid()&&self.expander.isEnabled()&&self.expander.isValid()&&(o.toggle?self._toggle():self._popupView(),self.isExpanded()?(self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.EXPAND,"",self.expander),self.fireEvent(BI.Expander.EVENT_EXPAND)):(self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.COLLAPSE,"",self.expander),self.fireEvent(BI.Expander.EVENT_COLLAPSE)))},BI.EVENT_RESPONSE_TIME,{leading:!0,trailing:!1}))}})},_initExpander:function(){this.expander=BI.createWidget(this.options.el)},_assertPopupView:function(){var self=this,o=this.options;null==this.popupView&&(this.popupView=BI.createWidget(this.options.popup,{type:"bi.button_group",cls:"expander-popup",layouts:[{type:"bi.vertical",hgap:0,vgap:0}],value:o.value},this),this.popupView.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.Expander.EVENT_CHANGE,value,obj)}),this.popupView.setVisible(this.isExpanded()),BI.nextTick(function(){self.fireEvent(BI.Expander.EVENT_AFTER_INIT)}))},_assertPopupViewRender:function(){this._assertPopupView(),this._rendered||(BI.createWidget({type:"bi.vertical",scrolly:!1,element:this,items:[{el:this.popupView}]}),this._rendered=!0)},_hideView:function(){this.fireEvent(BI.Expander.EVENT_BEFORE_HIDEVIEW),this._expanded=!1,this.expander.setOpened(!1),this.popupView&&this.popupView.invisible(),this.element.removeClass(this.options.expanderClass),this.fireEvent(BI.Expander.EVENT_AFTER_HIDEVIEW)},_popupView:function(){this._assertPopupViewRender(),this.fireEvent(BI.Expander.EVENT_BEFORE_POPUPVIEW),this._expanded=!0,this.expander.setOpened(!0),this.popupView.visible(),this.element.addClass(this.options.expanderClass),this.fireEvent(BI.Expander.EVENT_AFTER_POPUPVIEW)},populate:function(items){this.popupView&&this.popupView.populate.apply(this.popupView,arguments),this.expander.populate.apply(this.expander,arguments)},_setEnable:function(arg){BI.Expander.superclass._setEnable.apply(this,arguments),!arg&&this.element.removeClass(this.options.hoverClass),!arg&&this.isViewVisible()&&this._hideView()},setValue:function(v){this.expander.setValue(v),BI.isNull(this.popupView)?this.options.popup.value=v:this.popupView.setValue(v)},getValue:function(){return BI.isNull(this.popupView)?this.options.popup.value:this.popupView.getValue()},isViewVisible:function(){return this.isEnabled()&&this.expander.isEnabled()&&!!this.popupView&&this.popupView.isVisible()},isExpanded:function(){return this._expanded},showView:function(){this.isEnabled()&&this.expander.isEnabled()&&this._popupView()},hideView:function(){this._hideView()},getView:function(){return this.popupView},getAllLeaves:function(){return this.popupView&&this.popupView.getAllLeaves()},getNodeById:function(id){return this.expander.options.id===id?this.expander:this.popupView&&this.popupView.getNodeById(id)},getNodeByValue:function(value){return this.expander.getValue()===value?this.expander:this.popupView&&this.popupView.getNodeByValue(value)},destroy:function(){BI.Expander.superclass.destroy.apply(this,arguments)}}),BI.Expander.EVENT_EXPAND="EVENT_EXPAND",BI.Expander.EVENT_COLLAPSE="EVENT_COLLAPSE",BI.Expander.EVENT_TRIGGER_CHANGE="EVENT_TRIGGER_CHANGE",BI.Expander.EVENT_CHANGE="EVENT_CHANGE",BI.Expander.EVENT_AFTER_INIT="EVENT_AFTER_INIT",BI.Expander.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.Expander.EVENT_AFTER_POPUPVIEW="EVENT_AFTER_POPUPVIEW",BI.Expander.EVENT_BEFORE_HIDEVIEW="EVENT_BEFORE_HIDEVIEW",BI.Expander.EVENT_AFTER_HIDEVIEW="EVENT_AFTER_HIDEVIEW",BI.shortcut("bi.expander",BI.Expander),BI.ComboGroup=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.ComboGroup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-combo-group bi-list-item",trigger:"click,hover",direction:"right",adjustLength:0,isDefaultInit:!1,isNeedAdjustHeight:!1,isNeedAdjustWidth:!1,el:{type:"bi.text_button",text:"",value:""},children:[],popup:{el:{type:"bi.button_tree",chooseType:0,layouts:[{type:"bi.vertical"}]}}})},_init:function(){BI.ComboGroup.superclass._init.apply(this,arguments),this._populate(this.options.el)},_populate:function(item){var self=this,o=this.options,children=o.children;if(BI.isEmpty(children))throw new Error("ComboGroup构造错误");BI.each(children,function(i,ch){var son=BI.formatEL(ch).el.children;ch=BI.formatEL(ch).el,BI.isEmpty(son)||(ch.el=BI.clone(ch),ch.children=son,ch.type="bi.combo_group",ch.action=o.action,ch.height=o.height,ch.direction=o.direction,ch.isDefaultInit=o.isDefaultInit,ch.isNeedAdjustHeight=o.isNeedAdjustHeight,ch.isNeedAdjustWidth=o.isNeedAdjustWidth,ch.adjustLength=o.adjustLength,ch.popup=o.popup)}),this.combo=BI.createWidget({type:"bi.combo",element:this,container:o.container,height:o.height,trigger:o.trigger,direction:o.direction,isDefaultInit:o.isDefaultInit,isNeedAdjustWidth:o.isNeedAdjustWidth,isNeedAdjustHeight:o.isNeedAdjustHeight,adjustLength:o.adjustLength,el:item,popup:BI.extend({},o.popup,{el:BI.extend({items:children},o.popup.el)})}),this.combo.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.ComboGroup.EVENT_CHANGE,obj)})},getValue:function(){return this.combo.getValue()},setValue:function(v){this.combo.setValue(v)}}),BI.ComboGroup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.combo_group",BI.ComboGroup),BI.VirtualGroup=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.VirtualGroup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-virtual-group",items:[],layouts:[{type:"bi.center",hgap:0,vgap:0}]})},render:function(){var o=this.options;this.populate(o.items),BI.isKey(o.value)&&this.setValue(o.value)},_packageBtns:function(items){for(var o=this.options,map=this.buttonMap={},i=o.layouts.length-1;i>0;i--)items=BI.map(items,function(k,it){var el=BI.stripEL(it);return BI.extend({},o.layouts[i],{items:[BI.extend({},o.layouts[i].el,{el:BI.extend({ref:function(_ref){BI.isKey(map[el.value])&&(map[el.value]=_ref)}},el)})]})});return items},_packageLayout:function(items){for(var o=this.options,layout=BI.deepClone(o.layouts[0]),lay=BI.formatEL(layout).el;lay&&lay.items&&!BI.isEmpty(lay.items);)lay=BI.formatEL(lay.items[0]).el;return lay.items=items,layout},addItems:function(items){this.layouts.addItems(items)},prependItems:function(items){this.layouts.prependItems(items)},setValue:function(v){v=BI.isArray(v)?v:[v],BI.each(this.buttonMap,function(key,item){item&&(v.deepContains(key)?item.setSelected&&item.setSelected(!0):item.setSelected&&item.setSelected(!1))})},getNotSelectedValue:function(){var v=[];return BI.each(this.buttonMap,function(i,item){item&&(!item.isEnabled()||item.isSelected&&item.isSelected()||v.push(item.getValue()))}),v},getValue:function(){var v=[];return BI.each(this.buttonMap,function(i,item){item&&item.isEnabled()&&item.isSelected&&item.isSelected()&&v.push(item.getValue())}),v},populate:function(items){var self=this;items=items||[],this.options.items=items,items=this._packageBtns(items),this.layouts?this.layouts.populate(items):this.layouts=BI.createWidget(BI.extend({element:this},this._packageLayout(items)))}}),BI.VirtualGroup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.virtual_group",BI.VirtualGroup),BI.Loader=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.Loader.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-loader",direction:"top",isDefaultInit:!0,logic:{dynamic:!0,scrolly:!0},el:{type:"bi.button_group"},items:[],itemsCreator:BI.emptyFn,onLoaded:BI.emptyFn,count:!1,prev:!1,next:{},hasPrev:BI.emptyFn,hasNext:BI.emptyFn})},_prevLoad:function(){var self=this,o=this.options;this.prev.setLoading(),o.itemsCreator.apply(this,[{times:--this.times},function(){self.prev.setLoaded(),self.prependItems.apply(self,arguments)}])},_nextLoad:function(){var self=this,o=this.options;this.next.setLoading(),o.itemsCreator.apply(this,[{times:++this.times},function(){self.next.setLoaded(),self.addItems.apply(self,arguments)}])},_init:function(){BI.Loader.superclass._init.apply(this,arguments);var self=this,o=this.options;o.itemsCreator===!1&&(o.prev=!1,o.next=!1),o.prev!==!1&&(this.prev=BI.createWidget(BI.extend({type:"bi.loading_bar"},o.prev)),this.prev.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&self._prevLoad()})),this.button_group=BI.createWidget(o.el,{type:"bi.button_group",chooseType:0,items:o.items,behaviors:{},layouts:[{type:"bi.vertical"}],value:o.value}),this.button_group.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.Loader.EVENT_CHANGE,obj)}),o.next!==!1&&(this.next=BI.createWidget(BI.extend({type:"bi.loading_bar"},o.next)),this.next.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&self._nextLoad()})),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction),BI.extend({scrolly:!0},o.logic,{items:BI.LogicFactory.createLogicItemsByDirection(o.direction,this.prev,this.button_group,this.next)})))),o.isDefaultInit&&BI.isEmpty(o.items)&&BI.nextTick(BI.bind(function(){o.isDefaultInit&&BI.isEmpty(o.items)&&this._populate()},this)),BI.isNotEmptyArray(o.items)&&this._populate(o.items)},hasPrev:function(){var o=this.options;return BI.isNumber(o.count)?this.count0&&args.push(keyword),BI.Maskers.show(self.getName()),self.popupView.populate.apply(self.popupView,args),o.isAutoSync&&o.adapter&&o.adapter.getValue&&self.popupView.setValue(o.adapter.getValue()),self.popupView.loaded&&self.popupView.loaded(),self.fireEvent(BI.Searcher.EVENT_SEARCHING)}})}},setAdapter:function(adapter){this.options.adapter=adapter,BI.Maskers.remove(this.getName())},doSearch:function(){this.isSearching()&&this._search()},stopSearch:function(){this._stopSearch();try{this.editor.blur()}catch(e){if(!this.editor.blur)throw new Error("editor没有实现blur方法")}finally{this.editor.setValue("")}},isSearching:function(){return this._isSearching},isViewVisible:function(){return this.editor.isEnabled()&&BI.Maskers.isVisible(this.getName())},getView:function(){return this.popupView},hasMatched:function(){return this._assertPopupView(),this.popupView.hasMatched()},adjustHeight:function(){BI.Maskers.has(this.getName())&&BI.Maskers.get(this.getName()).isVisible()&&BI.Maskers.show(this.getName())},adjustView:function(){this.isViewVisible()&&BI.Maskers.show(this.getName())},setValue:function(v){BI.isNull(this.popupView)?this.options.popup.value=v:this.popupView.setValue(v)},getKeyword:function(){return this.editor.getValue()},getKeywords:function(){return this.editor.getKeywords()},getValue:function(){var o=this.options;return o.isAutoSync&&o.adapter&&o.adapter.getValue?o.adapter.getValue():this.isSearching()?this.popupView.getValue():o.adapter&&o.adapter.getValue?o.adapter.getValue():BI.isNull(this.popupView)?o.popup.value:this.popupView.getValue()},populate:function(result,searchResult,keyword){var o=this.options;this._assertPopupView(),this.popupView.populate.apply(this.popupView,arguments),o.isAutoSync&&o.adapter&&o.adapter.getValue&&this.popupView.setValue(o.adapter.getValue())},empty:function(){this.popupView&&this.popupView.empty()},destroyed:function(){BI.Maskers.remove(this.getName())}}),BI.Searcher.EVENT_CHANGE="EVENT_CHANGE",BI.Searcher.EVENT_START="EVENT_START",BI.Searcher.EVENT_STOP="EVENT_STOP",BI.Searcher.EVENT_PAUSE="EVENT_PAUSE",BI.Searcher.EVENT_SEARCHING="EVENT_SEARCHING",BI.Searcher.EVENT_AFTER_INIT="EVENT_AFTER_INIT",BI.shortcut("bi.searcher",BI.Searcher),BI.Switcher=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.Switcher.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-switcher",direction:BI.Direction.Top,trigger:"click",toggle:!0,el:{},popup:{},adapter:null,masker:{},switcherClass:"bi-switcher-popup",hoverClass:"bi-switcher-hover"})},_init:function(){BI.Switcher.superclass._init.apply(this,arguments);var self=this,o=this.options;this._initSwitcher(),this._initPullDownAction(),this.switcher.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){self.isEnabled()&&self.isValid()&&(type===BI.Events.EXPAND&&self._popupView(),type===BI.Events.COLLAPSE&&self._hideView(),type===BI.Events.EXPAND&&(self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),self.fireEvent(BI.Switcher.EVENT_EXPAND)),type===BI.Events.COLLAPSE&&(self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),self.isViewVisible()&&self.fireEvent(BI.Switcher.EVENT_COLLAPSE)),type===BI.Events.CLICK&&self.fireEvent(BI.Switcher.EVENT_TRIGGER_CHANGE,value,obj))}),this.element.hover(function(){self.isEnabled()&&self.switcher.isEnabled()&&self.element.addClass(o.hoverClass)},function(){self.isEnabled()&&self.switcher.isEnabled()&&self.element.removeClass(o.hoverClass)}),BI.createWidget({type:"bi.vertical",scrolly:!1,element:this,items:[{el:this.switcher}]}),o.isDefaultInit&&this._assertPopupView()},_toggle:function(){this._assertPopupView(),this.isExpanded()?this._hideView():this.isEnabled()&&this._popupView()},_initPullDownAction:function(){var self=this,o=this.options,evs=this.options.trigger.split(",");BI.each(evs,function(i,e){switch(e){case"hover":self.element[e](function(e){self.isEnabled()&&self.switcher.isEnabled()&&(self._popupView(),self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.EXPAND,"",self.switcher),self.fireEvent(BI.Switcher.EVENT_EXPAND))},function(){self.isEnabled()&&self.switcher.isEnabled()&&o.toggle&&(self._hideView(),self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.COLLAPSE,"",self.switcher),self.fireEvent(BI.Switcher.EVENT_COLLAPSE))});break;default:e&&self.element.off(e+"."+self.getName()).on(e+"."+self.getName(),BI.debounce(function(e){self.switcher.element.__isMouseInBounds__(e)&&self.isEnabled()&&self.switcher.isEnabled()&&(o.toggle?self._toggle():self._popupView(),self.isExpanded()?(self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.EXPAND,"",self.switcher),self.fireEvent(BI.Switcher.EVENT_EXPAND)):(self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.COLLAPSE,"",self.switcher),self.fireEvent(BI.Switcher.EVENT_COLLAPSE)))},BI.EVENT_RESPONSE_TIME,{leading:!0,trailing:!1}))}})},_initSwitcher:function(){this.switcher=BI.createWidget(this.options.el,{value:this.options.value})},_assertPopupView:function(){var self=this,o=this.options;this._created||(this.popupView=BI.createWidget(o.popup,{type:"bi.button_group",element:o.adapter&&BI.Maskers.create(this.getName(),o.adapter,BI.extend({container:this},o.masker)),cls:"switcher-popup",layouts:[{type:"bi.vertical",hgap:0,vgap:0}],value:o.value},this),this.popupView.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.Switcher.EVENT_CHANGE,value,obj)}),o.direction===BI.Direction.Custom||o.adapter||BI.createWidget({type:"bi.vertical",scrolly:!1,element:this,items:[{el:this.popupView}]}),this._created=!0,BI.nextTick(function(){self.fireEvent(BI.Switcher.EVENT_AFTER_INIT)}))},_hideView:function(){this.fireEvent(BI.Switcher.EVENT_BEFORE_HIDEVIEW);var self=this,o=this.options;o.adapter?BI.Maskers.hide(self.getName()):self.popupView&&self.popupView.setVisible(!1),BI.nextTick(function(){o.adapter?BI.Maskers.hide(self.getName()):self.popupView&&self.popupView.setVisible(!1),self.element.removeClass(o.switcherClass),self.fireEvent(BI.Switcher.EVENT_AFTER_HIDEVIEW)})},_popupView:function(){var self=this,o=this.options;this._assertPopupView(),this.fireEvent(BI.Switcher.EVENT_BEFORE_POPUPVIEW),o.adapter?BI.Maskers.show(this.getName()):self.popupView.setVisible(!0),BI.nextTick(function(name){o.adapter?BI.Maskers.show(name):self.popupView.setVisible(!0),self.element.addClass(o.switcherClass),self.fireEvent(BI.Switcher.EVENT_AFTER_POPUPVIEW)},this.getName())},populate:function(items){this._assertPopupView(),this.popupView.populate.apply(this.popupView,arguments),this.switcher.populate.apply(this.switcher,arguments)},_setEnable:function(arg){BI.Switcher.superclass._setEnable.apply(this,arguments),!arg&&this.isViewVisible()&&this._hideView()},setValue:function(v){this.switcher.setValue(v),BI.isNull(this.popupView)?this.options.popup.value=v:this.popupView.setValue(v)},getValue:function(){return BI.isNull(this.popupView)?this.options.popup.value:this.popupView.getValue()},setAdapter:function(adapter){this.options.adapter=adapter,BI.Maskers.remove(this.getName())},isViewVisible:function(){return this.isEnabled()&&this.switcher.isEnabled()&&(this.options.adapter?BI.Maskers.isVisible(this.getName()):this.popupView&&this.popupView.isVisible())},isExpanded:function(){return this.isViewVisible()},showView:function(){this.isEnabled()&&this.switcher.isEnabled()&&this._popupView()},hideView:function(){this._hideView()},getView:function(){return this.popupView},adjustView:function(){this.isViewVisible()&&BI.Maskers.show(this.getName())},getAllLeaves:function(){return this.popupView&&this.popupView.getAllLeaves()},getNodeById:function(id){return this.switcher.attr("id")===id?this.switcher:this.popupView&&this.popupView.getNodeById(id)},getNodeByValue:function(value){return this.switcher.getValue()===value?this.switcher:this.popupView&&this.popupView.getNodeByValue(value)},empty:function(){this.popupView&&this.popupView.empty()},destroy:function(){BI.Switcher.superclass.destroy.apply(this,arguments)}}),BI.Switcher.EVENT_EXPAND="EVENT_EXPAND",BI.Switcher.EVENT_COLLAPSE="EVENT_COLLAPSE",BI.Switcher.EVENT_TRIGGER_CHANGE="EVENT_TRIGGER_CHANGE",BI.Switcher.EVENT_CHANGE="EVENT_CHANGE",BI.Switcher.EVENT_AFTER_INIT="EVENT_AFTER_INIT",BI.Switcher.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.Switcher.EVENT_AFTER_POPUPVIEW="EVENT_AFTER_POPUPVIEW",BI.Switcher.EVENT_BEFORE_HIDEVIEW="EVENT_BEFORE_HIDEVIEW",BI.Switcher.EVENT_AFTER_HIDEVIEW="EVENT_AFTER_HIDEVIEW",BI.shortcut("bi.switcher",BI.Switcher),BI.Tab=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.Tab.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-tab",direction:"top",single:!1,logic:{dynamic:!1},showIndex:!1,tab:!1,cardCreator:function(v){return BI.createWidget()}})},render:function(){var self=this,o=this.options;BI.isObject(o.tab)&&(this.tab=BI.createWidget(this.options.tab,{type:"bi.button_group"}),this.tab.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)})),this.cardMap={},this.layout=BI.createWidget({type:"bi.card"}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction),BI.extend({},o.logic,{items:BI.LogicFactory.createLogicItemsByDirection(o.direction,this.tab,this.layout)}))));var listener=new BI.ShowListener({eventObj:this.tab,cardLayout:this.layout,cardCreator:function(v){var card=o.cardCreator.apply(self,arguments);return self.cardMap[v]=card,card},afterCardShow:function(v){self._deleteOtherCards(v),self.curr=v}});listener.on(BI.ShowListener.EVENT_CHANGE,function(value){self.fireEvent(BI.Tab.EVENT_CHANGE,value,self)})},_deleteOtherCards:function(currCardName){var self=this,o=this.options;o.single===!0&&BI.each(this.cardMap,function(name,card){name!==currCardName+""&&(self.layout.deleteCardByName(name),delete self.cardMap[name])})},_assertCard:function(v){if(!this.layout.isCardExisted(v)){var card=this.options.cardCreator(v);this.cardMap[v]=card,this.layout.addCardByName(v,card)}},mounted:function(){var o=this.options;o.showIndex!==!1&&this.setSelect(o.showIndex)},setSelect:function(v){this.tab&&this.tab.setValue(v),this._assertCard(v),this.layout.showCardByName(v),this._deleteOtherCards(v),this.curr!==v&&(this.curr=v)},removeTab:function(cardname){var self=this,o=this.options;BI.any(this.cardMap,function(name,card){if(BI.isEqual(name,cardname+""))return self.layout.deleteCardByName(name),delete self.cardMap[name],!0})},getSelect:function(){return this.curr},getSelectedTab:function(){return this.layout.getShowingCard()},getTab:function(v){return this._assertCard(v),this.layout.getCardByName(v)},setValue:function(v){var card=this.layout.getShowingCard();card&&card.setValue(v)},getValue:function(){var card=this.layout.getShowingCard();if(card)return card.getValue()},populate:function(){var card=this.layout.getShowingCard();if(card)return card.populate&&card.populate.apply(card,arguments)},empty:function(){this.layout.deleteAllCard(),this.cardMap={}},destroy:function(){this.cardMap={},BI.Tab.superclass.destroy.apply(this,arguments)}}),BI.Tab.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.tab",BI.Tab),BI.EL=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.EL.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-el",el:{},layout:{}})},_init:function(){BI.EL.superclass._init.apply(this,arguments);var self=this,o=this.options;this.ele=BI.createWidget(o.el),BI.createWidget(o.layout,{type:"bi.adaptive",element:this,items:[this.ele]}),this.ele.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)})},setValue:function(v){this.ele.setValue(v)},getValue:function(){return this.ele.getValue()},populate:function(){this.ele.populate.apply(this,arguments)}}),BI.shortcut("bi.el",BI.EL),BI.Msg=function(){var messageShow,$mask,$pop,toastStack=[];return{alert:function(title,message,callback){this._show(!1,title,message,callback)},confirm:function(title,message,callback){this._show(!0,title,message,callback)},prompt:function(title,message,value,callback,min_width){},toast:function(message,options,context){options=options||{},context=context||BI.Widget._renderEngine.createElement("body");var level=options.level||"normal",autoClose=!!BI.isNull(options.autoClose)||options.autoClose,toast=BI.createWidget({type:"bi.toast",cls:"bi-message-animate bi-message-leave",level:level,autoClose:autoClose,text:message,listeners:[{eventName:BI.Toast.EVENT_DESTORY,action:function(){BI.remove(toastStack,toast.element);var _height=10;BI.each(toastStack,function(i,element){element.css({top:_height}),_height+=element.outerHeight()+10})}}]}),height=10;BI.each(toastStack,function(i,element){height+=element.outerHeight()+10}),BI.createWidget({type:"bi.absolute",element:context,items:[{el:toast,left:"50%",top:height}]}),toastStack.push(toast.element),toast.element.css({"margin-left":-1*toast.element.outerWidth()/2}),toast.element.removeClass("bi-message-leave").addClass("bi-message-enter"),autoClose&&BI.delay(function(){toast.element.removeClass("bi-message-enter").addClass("bi-message-leave"),toast.destroy()},5e3)},_show:function(hasCancel,title,message,callback){$mask=BI.Widget._renderEngine.createElement('
    ').css({position:"absolute",zIndex:BI.zIndex_tip-2,top:0,left:0,right:0,bottom:0,opacity:.5}).appendTo("body"),$pop=BI.Widget._renderEngine.createElement('
    ').css({position:"absolute",zIndex:BI.zIndex_tip-1,top:0,left:0,right:0,bottom:0}).appendTo("body");var close=function(){messageShow.destroy(),$mask.remove()},controlItems=[];hasCancel===!0&&controlItems.push({el:{type:"bi.button",text:BI.i18nText("BI-Basic_Cancel"),level:"ignore",handler:function(){close(),BI.isFunction(callback)&&callback.apply(null,[!1])}}}),controlItems.push({el:{type:"bi.button",text:BI.i18nText("BI-Basic_OK"),handler:function(){close(),BI.isFunction(callback)&&callback.apply(null,[!0])}}});var conf={element:$pop,type:"bi.center_adapt",items:[{type:"bi.border",cls:"bi-card",items:{north:{el:{type:"bi.border",cls:"bi-message-title bi-background",items:{center:{el:{type:"bi.label",cls:"bi-font-bold",text:title||BI.i18nText("BI-Basic_Prompt"),textAlign:"left",hgap:20,height:40}},east:{el:{type:"bi.icon_button",cls:"bi-message-close close-font",handler:function(){close(),BI.isFunction(callback)&&callback.apply(null,[!1])}},width:60}}},height:40},center:{el:{type:"bi.label",vgap:10,hgap:20,whiteSpace:"normal",text:message}},south:{el:{type:"bi.absolute",items:[{el:{type:"bi.right_vertical_adapt",lgap:10,items:controlItems},top:0,left:20,right:20,bottom:0}]},height:44}},width:450,height:200}]};messageShow=BI.createWidget(conf)}}}(),BI.GridView=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.GridView.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-grid-view",overflowX:!0,overflowY:!0,overscanColumnCount:0,overscanRowCount:0,rowHeightGetter:BI.emptyFn,columnWidthGetter:BI.emptyFn,scrollLeft:0,scrollTop:0,items:[]})},_init:function(){BI.GridView.superclass._init.apply(this,arguments);var self=this,o=this.options;this.renderedCells=[],this.renderedKeys=[],this.renderRange={},this._scrollLock=!1,this._debounceRelease=BI.debounce(function(){self._scrollLock=!1},1e3/60),this.container=BI.createWidget({type:"bi.absolute"}),this.element.scroll(function(){self._scrollLock!==!0&&(o.scrollLeft=self.element.scrollLeft(),o.scrollTop=self.element.scrollTop(),self._calculateChildrenToRender(),self.fireEvent(BI.GridView.EVENT_SCROLL,{scrollLeft:o.scrollLeft,scrollTop:o.scrollTop}))}),BI.createWidget({type:"bi.vertical",element:this,scrollable:o.overflowX===!0&&o.overflowY===!0,scrolly:o.overflowX===!1&&o.overflowY===!0,scrollx:o.overflowX===!0&&o.overflowY===!1,items:[this.container]}),o.items.length>0&&this._populate()},mounted:function(){var o=this.options;0===o.scrollLeft&&0===o.scrollTop||(this.element.scrollTop(o.scrollTop),this.element.scrollLeft(o.scrollLeft))},_getOverscanIndices:function(cellCount,overscanCellsCount,startIndex,stopIndex){return{overscanStartIndex:Math.max(0,startIndex-overscanCellsCount),overscanStopIndex:Math.min(cellCount-1,stopIndex+overscanCellsCount)}},_calculateChildrenToRender:function(){var self=this,o=this.options,width=o.width,height=o.height,scrollLeft=BI.clamp(o.scrollLeft,0,this._getMaxScrollLeft()),scrollTop=BI.clamp(o.scrollTop,0,this._getMaxScrollTop()),overscanColumnCount=o.overscanColumnCount,overscanRowCount=o.overscanRowCount;if(height>0&&width>0){var visibleColumnIndices=this._columnSizeAndPositionManager.getVisibleCellRange(width,scrollLeft),visibleRowIndices=this._rowSizeAndPositionManager.getVisibleCellRange(height,scrollTop);if(BI.isEmpty(visibleColumnIndices)||BI.isEmpty(visibleRowIndices))return;var horizontalOffsetAdjustment=this._columnSizeAndPositionManager.getOffsetAdjustment(width,scrollLeft),verticalOffsetAdjustment=this._rowSizeAndPositionManager.getOffsetAdjustment(height,scrollTop);this._renderedColumnStartIndex=visibleColumnIndices.start,this._renderedColumnStopIndex=visibleColumnIndices.stop,this._renderedRowStartIndex=visibleRowIndices.start,this._renderedRowStopIndex=visibleRowIndices.stop;var overscanColumnIndices=this._getOverscanIndices(this.columnCount,overscanColumnCount,this._renderedColumnStartIndex,this._renderedColumnStopIndex),overscanRowIndices=this._getOverscanIndices(this.rowCount,overscanRowCount,this._renderedRowStartIndex,this._renderedRowStopIndex),columnStartIndex=overscanColumnIndices.overscanStartIndex,columnStopIndex=overscanColumnIndices.overscanStopIndex,rowStartIndex=overscanRowIndices.overscanStartIndex,rowStopIndex=overscanRowIndices.overscanStopIndex,minRowDatum=this._rowSizeAndPositionManager.getSizeAndPositionOfCell(rowStartIndex),minColumnDatum=this._columnSizeAndPositionManager.getSizeAndPositionOfCell(columnStartIndex),maxRowDatum=this._rowSizeAndPositionManager.getSizeAndPositionOfCell(rowStopIndex),maxColumnDatum=this._columnSizeAndPositionManager.getSizeAndPositionOfCell(columnStopIndex),top=minRowDatum.offset+verticalOffsetAdjustment,left=minColumnDatum.offset+horizontalOffsetAdjustment,bottom=maxRowDatum.offset+verticalOffsetAdjustment+maxRowDatum.size,right=maxColumnDatum.offset+horizontalOffsetAdjustment+maxColumnDatum.size;if(top>=this.renderRange.minY&&bottom<=this.renderRange.maxY&&left>=this.renderRange.minX&&right<=this.renderRange.maxX)return;for(var renderedCells=[],renderedKeys={},renderedWidgets={},minX=this._getMaxScrollLeft(),minY=this._getMaxScrollTop(),maxX=0,maxY=0,count=0,rowIndex=rowStartIndex;rowIndex<=rowStopIndex;rowIndex++)for(var rowDatum=this._rowSizeAndPositionManager.getSizeAndPositionOfCell(rowIndex),columnIndex=columnStartIndex;columnIndex<=columnStopIndex;columnIndex++){var key=rowIndex+"-"+columnIndex,columnDatum=this._columnSizeAndPositionManager.getSizeAndPositionOfCell(columnIndex),index=this.renderedKeys[key]&&this.renderedKeys[key][2],child;index>=0?(columnDatum.size!==this.renderedCells[index]._width&&(this.renderedCells[index]._width=columnDatum.size,this.renderedCells[index].el.setWidth(columnDatum.size)),rowDatum.size!==this.renderedCells[index]._height&&(this.renderedCells[index]._height=rowDatum.size,this.renderedCells[index].el.setHeight(rowDatum.size)),this.renderedCells[index]._left!==columnDatum.offset+horizontalOffsetAdjustment&&this.renderedCells[index].el.element.css("left",columnDatum.offset+horizontalOffsetAdjustment+"px"),this.renderedCells[index]._top!==rowDatum.offset+verticalOffsetAdjustment&&this.renderedCells[index].el.element.css("top",rowDatum.offset+verticalOffsetAdjustment+"px"),renderedCells.push(child=this.renderedCells[index])):(child=BI.createWidget(BI.extend({type:"bi.label",width:columnDatum.size,height:rowDatum.size},o.items[rowIndex][columnIndex],{cls:(o.items[rowIndex][columnIndex].cls||"")+" grid-cell"+(0===rowIndex?" first-row":"")+(0===columnIndex?" first-col":""),_rowIndex:rowIndex,_columnIndex:columnIndex,_left:columnDatum.offset+horizontalOffsetAdjustment,_top:rowDatum.offset+verticalOffsetAdjustment}),this),renderedCells.push({el:child,left:columnDatum.offset+horizontalOffsetAdjustment,top:rowDatum.offset+verticalOffsetAdjustment,_left:columnDatum.offset+horizontalOffsetAdjustment,_top:rowDatum.offset+verticalOffsetAdjustment,_width:columnDatum.size,_height:rowDatum.size})),minX=Math.min(minX,columnDatum.offset+horizontalOffsetAdjustment),maxX=Math.max(maxX,columnDatum.offset+horizontalOffsetAdjustment+columnDatum.size),minY=Math.min(minY,rowDatum.offset+verticalOffsetAdjustment),maxY=Math.max(maxY,rowDatum.offset+verticalOffsetAdjustment+rowDatum.size),renderedKeys[key]=[rowIndex,columnIndex,count],renderedWidgets[count]=child,count++}var existSet={},addSet={},deleteArray=[];BI.each(renderedKeys,function(i,key){self.renderedKeys[i]?existSet[i]=key:addSet[i]=key}),BI.each(this.renderedKeys,function(i,key){existSet[i]||addSet[i]||deleteArray.push(key[2])}),BI.each(deleteArray,function(i,index){self.renderedCells[index].el._destroy()});var addedItems=[];BI.each(addSet,function(index,key){addedItems.push(renderedCells[key[2]])}),this.container.addItems(addedItems,this),this.container._children=renderedWidgets,this.container.attr("items",renderedCells),this.renderedCells=renderedCells,this.renderedKeys=renderedKeys,this.renderRange={minX:minX,minY:minY,maxX:maxX,maxY:maxY}}},_getRealMaxScrollLeft:function(){var o=this.options,totalWidth=0;return BI.count(0,this.columnCount,function(index){totalWidth+=o.columnWidthGetter(index)}),Math.max(0,totalWidth-this.options.width+(this.options.overflowX?BI.DOM.getScrollWidth():0))},_getMaxScrollLeft:function(){return Math.max(0,this._columnSizeAndPositionManager.getTotalSize()-this.options.width+(this.options.overflowX?BI.DOM.getScrollWidth():0))},_getMaxScrollTop:function(){return Math.max(0,this._rowSizeAndPositionManager.getTotalSize()-this.options.height+(this.options.overflowY?BI.DOM.getScrollWidth():0))},_populate:function(items){var self=this,o=this.options;this._reRange(),this.columnCount=0,this.rowCount=0,items&&items!==this.options.items&&(this.options.items=items),BI.isNumber(o.columnCount)?this.columnCount=o.columnCount:o.items.length>0&&(this.columnCount=o.items[0].length),BI.isNumber(o.rowCount)?this.rowCount=o.rowCount:this.rowCount=o.items.length,this.container.setWidth(this.columnCount*o.estimatedColumnSize),this.container.setHeight(this.rowCount*o.estimatedRowSize),this._columnSizeAndPositionManager=new BI.ScalingCellSizeAndPositionManager(this.columnCount,o.columnWidthGetter,o.estimatedColumnSize),this._rowSizeAndPositionManager=new BI.ScalingCellSizeAndPositionManager(this.rowCount,o.rowHeightGetter,o.estimatedRowSize),this._calculateChildrenToRender();try{this.element.scrollTop(o.scrollTop),this.element.scrollLeft(o.scrollLeft)}catch(e){}},setScrollLeft:function(scrollLeft){this.options.scrollLeft!==scrollLeft&&(this._scrollLock=!0,this.options.scrollLeft=BI.clamp(scrollLeft||0,0,this._getRealMaxScrollLeft()),this._debounceRelease(),this._calculateChildrenToRender(),this.element.scrollLeft(this.options.scrollLeft))},setScrollTop:function(scrollTop){this.options.scrollTop!==scrollTop&&(this._scrollLock=!0,this.options.scrollTop=BI.clamp(scrollTop||0,0,this._getMaxScrollTop()),this._debounceRelease(),this._calculateChildrenToRender(),this.element.scrollTop(this.options.scrollTop))},setColumnCount:function(columnCount){this.options.columnCount=columnCount},setRowCount:function(rowCount){this.options.rowCount=rowCount},setOverflowX:function(b){var self=this;this.options.overflowX!==!!b&&(this.options.overflowX=!!b,BI.nextTick(function(){self.element.css({overflowX:b?"auto":"hidden"})}))},setOverflowY:function(b){var self=this;this.options.overflowY!==!!b&&(this.options.overflowY=!!b,BI.nextTick(function(){self.element.css({overflowY:b?"auto":"hidden"})}))},getScrollLeft:function(){return this.options.scrollLeft},getScrollTop:function(){return this.options.scrollTop},getMaxScrollLeft:function(){return this._getMaxScrollLeft()},getMaxScrollTop:function(){return this._getMaxScrollTop()},setEstimatedColumnSize:function(width){this.options.estimatedColumnSize=width},setEstimatedRowSize:function(height){this.options.estimatedRowSize=height},_reRange:function(){this.renderRange={}},_clearChildren:function(){this.container._children={},this.container.attr("items",[])},restore:function(){BI.each(this.renderedCells,function(i,cell){cell.el._destroy()}),this._clearChildren(),this.renderedCells=[],this.renderedKeys=[],this.renderRange={},this._scrollLock=!1},populate:function(items){items&&items!==this.options.items&&this.restore(),this._populate(items)}}),BI.GridView.EVENT_SCROLL="EVENT_SCROLL",BI.shortcut("bi.grid_view",BI.GridView),BI.Popover=BI.inherit(BI.Widget,{_constant:{SIZE:{SMALL:"small",NORMAL:"normal",BIG:"big"},HEADER_HEIGHT:40},_defaultConfig:function(){return BI.extend(BI.Popover.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-popover bi-card bi-border-radius",size:"normal",logic:{dynamic:!1},header:null,body:null,footer:null,closable:!0})},render:function(){var self=this,o=this.options;this.startX=0,this.startY=0,this.tracker=new BI.MouseMoveTracker(function(deltaX,deltaY){var size=self._calculateSize(),W=BI.Widget._renderEngine.createElement("body").width(),H=BI.Widget._renderEngine.createElement("body").height();self.startX+=deltaX,self.startY+=deltaY,self.element.css({left:BI.clamp(self.startX,0,W-self.element.width())+"px",top:BI.clamp(self.startY,0,H-self.element.height())+"px"}),BI.Resizers._resize()},function(){self.tracker.releaseMouseMoves()},_global);var items=[{el:{type:"bi.htape",cls:"bi-message-title bi-header-background",ref:function(_ref){self.dragger=_ref},items:[{type:"bi.absolute",items:[{el:BI.isPlainObject(o.header)?BI.createWidget(o.header,{extraCls:"bi-font-bold"}):{type:"bi.label",cls:"bi-font-bold",height:this._constant.HEADER_HEIGHT,text:o.header,title:o.header,textAlign:"left"},left:20,top:0,right:0,bottom:0}]},{el:o.closable?{type:"bi.icon_button",cls:"bi-message-close close-font",height:this._constant.HEADER_HEIGHT,handler:function(){self.close()}}:{type:"bi.layout"},width:56}],height:this._constant.HEADER_HEIGHT},height:this._constant.HEADER_HEIGHT},{el:o.logic.dynamic?{type:"bi.vertical",scrolly:!1,cls:"popover-body",ref:function(){self.body=this},hgap:20,tgap:10,items:[{el:BI.createWidget(o.body)}]}:{type:"bi.absolute",items:[{el:BI.createWidget(o.body),left:20,top:10,right:20,bottom:0}]}}];o.footer&&items.push({el:{type:"bi.absolute",items:[{el:BI.createWidget(o.footer),left:20,top:0,right:20,bottom:0}],height:44},height:44});var size=this._calculateSize();return BI.extend({type:o.logic.dynamic?"bi.vertical":"bi.vtape",items:items,width:size.width},o.logic.dynamic?{type:"bi.vertical",scrolly:!1}:{type:"bi.vtape",height:size.height})},mounted:function(){var self=this,o=this.options;if(this.dragger.element.mousedown(function(e){var pos=self.element.offset();self.startX=pos.left,self.startY=pos.top,self.tracker.captureMouseMoves(e)}),o.logic.dynamic){var size=this._calculateSize(),height=this.element.height(),compareHeight=BI.clamp(height,size.height,600)-(o.footer?84:44);this.body.element.height(compareHeight)}},_calculateSize:function(){var o=this.options,size={};if(BI.isNotNull(o.size))switch(o.size){case this._constant.SIZE.SMALL:size.width=450,size.height=200;break;case this._constant.SIZE.BIG:size.width=900,size.height=500;break;default:size.width=550,size.height=500}return{width:o.width||size.width,height:o.height||size.height}},hide:function(){},open:function(){this.show(),this.fireEvent(BI.Popover.EVENT_OPEN,arguments)},close:function(){this.hide(),this.fireEvent(BI.Popover.EVENT_CLOSE,arguments)},setZindex:function(zindex){this.element.css({"z-index":zindex})},destroyed:function(){}}),BI.shortcut("bi.popover",BI.Popover),BI.BarPopover=BI.inherit(BI.Popover,{_defaultConfig:function(){return BI.extend(BI.BarPopover.superclass._defaultConfig.apply(this,arguments),{btns:[BI.i18nText("BI-Basic_Sure"),BI.i18nText("BI-Basic_Cancel")]})},beforeCreate:function(){var self=this,o=this.options;o.footer||(o.footer={type:"bi.right_vertical_adapt",lgap:10,items:[{type:"bi.button",text:this.options.btns[1],value:1,level:"ignore",handler:function(v){self.fireEvent(BI.Popover.EVENT_CANCEL,v),self.close(v)}},{type:"bi.button",text:this.options.btns[0],warningTitle:o.warningTitle,value:0,handler:function(v){self.fireEvent(BI.Popover.EVENT_CONFIRM,v),self.close(v)}}]})}}),BI.shortcut("bi.bar_popover",BI.BarPopover),BI.Popover.EVENT_CLOSE="EVENT_CLOSE",BI.Popover.EVENT_OPEN="EVENT_OPEN",BI.Popover.EVENT_CANCEL="EVENT_CANCEL",BI.Popover.EVENT_CONFIRM="EVENT_CONFIRM",BI.PopupView=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.PopupView.superclass._defaultConfig.apply(this,arguments),{_baseCls:"bi-popup-view",maxWidth:"auto",minWidth:100,minHeight:24,lgap:0,rgap:0,tgap:0,bgap:0,vgap:0,hgap:0,innerVGap:0,direction:BI.Direction.Top,stopEvent:!1,stopPropagation:!1,logic:{dynamic:!0},tool:!1,tabs:[],buttons:[],el:{type:"bi.button_group",items:[],chooseType:0,behaviors:{},layouts:[{type:"bi.vertical"}]}})},_init:function(){BI.PopupView.superclass._init.apply(this,arguments);var self=this,o=this.options,fn=function(e){e.stopPropagation()},stop=function(e){return e.stopEvent(),!1};this.element.css({"z-index":BI.zIndex_popup,"min-width":o.minWidth+"px","max-width":o.maxWidth+"px"}).bind({click:fn}),this.element.bind("mousewheel",fn),o.stopPropagation&&this.element.bind({mousedown:fn,mouseup:fn,mouseover:fn}),o.stopEvent&&this.element.bind({mousedown:stop,mouseup:stop,mouseover:stop}),this.tool=this._createTool(),this.tab=this._createTab(),this.view=this._createView(),this.toolbar=this._createToolBar(),this.view.on(BI.Controller.EVENT_CHANGE,function(type){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.PopupView.EVENT_CHANGE)}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction),BI.extend({},o.logic,{ +scrolly:!1,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,vgap:o.vgap,hgap:o.hgap,items:BI.LogicFactory.createLogicItemsByDirection(o.direction,BI.extend({cls:"list-view-outer bi-card list-view-shadow"},BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction),BI.extend({},o.logic,{items:BI.LogicFactory.createLogicItemsByDirection(o.direction,this.tool,this.tab,this.view,this.toolbar)}))))}))))},_createView:function(){var o=this.options;return this.button_group=BI.createWidget(o.el,{type:"bi.button_group",value:o.value}),this.button_group.element.css({"min-height":o.minHeight+"px","padding-top":o.innerVGap+"px","padding-bottom":o.innerVGap+"px"}),this.button_group},_createTool:function(){var o=this.options;if(!1!==o.tool)return BI.createWidget(o.tool)},_createTab:function(){var o=this.options;if(0!==o.tabs.length)return BI.createWidget({type:"bi.center",cls:"list-view-tab",height:25,items:o.tabs,value:o.value})},_createToolBar:function(){var o=this.options;if(0!==o.buttons.length)return BI.createWidget({type:"bi.center",cls:"list-view-toolbar bi-high-light bi-split-top",height:24,items:BI.createItems(o.buttons,{once:!1,shadow:!0,isShadowShowingOnSelected:!0})})},getView:function(){return this.view},populate:function(items){this.view.populate.apply(this.view,arguments)},resetWidth:function(w){this.options.width=w,this.element.width(w)},resetHeight:function(h){var tbHeight=this.toolbar?this.toolbar.attr("height")||24:0,tabHeight=this.tab?this.tab.attr("height")||24:0,toolHeight=(this.tool&&this.tool.attr("height")||24)*(this.tool&&this.tool.isVisible()?1:0),resetHeight=h-tbHeight-tabHeight-toolHeight-2*this.options.innerVGap;this.view.resetHeight?this.view.resetHeight(resetHeight):this.view.element.css({"max-height":resetHeight+"px"})},setValue:function(selectedValues){this.tab&&this.tab.setValue(selectedValues),this.view.setValue(selectedValues)},getValue:function(){return this.view.getValue()}}),BI.PopupView.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.popup_view",BI.PopupView),BI.SearcherView=BI.inherit(BI.Pane,{_defaultConfig:function(){var conf=BI.SearcherView.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-searcher-view bi-card",tipText:BI.i18nText("BI-No_Select"),chooseType:BI.Selection.Single,matcher:{type:"bi.button_group",behaviors:{redmark:function(){return!0}},items:[],layouts:[{type:"bi.vertical"}]},searcher:{type:"bi.button_group",behaviors:{redmark:function(){return!0}},items:[],layouts:[{type:"bi.vertical"}]}})},_init:function(){BI.SearcherView.superclass._init.apply(this,arguments);var self=this,o=this.options;this.matcher=BI.createWidget(o.matcher,{type:"bi.button_group",chooseType:o.chooseType,behaviors:{redmark:function(){return!0}},layouts:[{type:"bi.vertical"}],value:o.value}),this.matcher.on(BI.Controller.EVENT_CHANGE,function(type,val,ob){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.SearcherView.EVENT_CHANGE,val,ob)}),this.spliter=BI.createWidget({type:"bi.vertical",height:1,hgap:10,items:[{type:"bi.layout",height:1,cls:"searcher-view-spliter bi-background"}]}),this.searcher=BI.createWidget(o.searcher,{type:"bi.button_group",chooseType:o.chooseType,behaviors:{redmark:function(){return!0}},layouts:[{type:"bi.vertical"}],value:o.value}),this.searcher.on(BI.Controller.EVENT_CHANGE,function(type,val,ob){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.SearcherView.EVENT_CHANGE,val,ob)}),BI.createWidget({type:"bi.vertical",element:this,items:[this.matcher,this.spliter,this.searcher]})},startSearch:function(){},stopSearch:function(){},setValue:function(v){this.matcher.setValue(v),this.searcher.setValue(v)},getValue:function(){return this.matcher.getValue().concat(this.searcher.getValue())},populate:function(searchResult,matchResult,keyword){searchResult||(searchResult=[]),matchResult||(matchResult=[]),this.setTipVisible(searchResult.length+matchResult.length===0),this.spliter.setVisible(BI.isNotEmptyArray(matchResult)&&BI.isNotEmptyArray(searchResult)),this.matcher.populate(matchResult,keyword),this.searcher.populate(searchResult,keyword)},empty:function(){this.searcher.empty(),this.matcher.empty()},hasMatched:function(){return this.matcher.getAllButtons().length>0}}),BI.SearcherView.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.searcher_view",BI.SearcherView),BI.ListView=BI.inherit(BI.Widget,{props:function(){return{baseCls:"bi-list-view",overscanHeight:100,blockSize:10,scrollTop:0,el:{},items:[]}},init:function(){var self=this;this.renderedIndex=-1,this.cache={}},render:function(){var self=this,o=this.options;return{type:"bi.vertical",items:[BI.extend({type:"bi.vertical",scrolly:!1,ref:function(){self.container=this}},o.el)],element:this}},mounted:function(){var self=this,o=this.options;this._populate(),this.element.scroll(function(e){o.scrollTop=self.element.scrollTop(),self._calculateBlocksToRender()});var lastWidth=this.element.width(),lastHeight=this.element.height();BI.ResizeDetector.addResizeListener(this,function(){var width=self.element.width(),height=self.element.height();width===lastWidth&&height===lastHeight||(lastWidth=width,lastHeight=height,self._calculateBlocksToRender())})},_renderMoreIf:function(){for(var self=this,o=this.options,height=this.element.height(),minContentHeight=o.scrollTop+height+o.overscanHeight,index=this.cache[this.renderedIndex]&&this.cache[this.renderedIndex].index+o.blockSize||0,cnt=this.renderedIndex+1,lastHeight,getElementHeight=function(){return self.container.element.height()};(lastHeight=getElementHeight())pages&&(groups=pages),dict.index=Math.ceil((curr+(groups>1&&groups!==pages?1:0))/(0===groups?1:groups)),(!o.dynamicShow&&!o.dynamicShowPrevNext||curr>1)&&prev!==!1&&(BI.isKey(prev)?view.push({text:prev,value:"prev",disabled:pages===!1?o.hasPrev(curr)===!1:!(curr>1&&prev!==!1)}):view.push(BI.extend({disabled:pages===!1?o.hasPrev(curr)===!1:!(curr>1&&prev!==!1)},prev))),(!o.dynamicShow&&!o.dynamicShowFirstLast||dict.index>1&&0!==groups)&&first&&(view.push({text:first,value:"first",disabled:!(dict.index>1&&0!==groups)}),dict.index>1&&0!==groups&&view.push({type:"bi.label",cls:"page-ellipsis",text:"…"})),dict.poor=Math.floor((groups-1)/2),dict.start=dict.index>1?curr-dict.poor:1,dict.end=dict.index>1?function(){var max=curr+(groups-dict.poor-1);return max>pages?pages:max}():groups,dict.end-dict.start1&&0!==groups&&pages>groups&&dict.endgroups&&dict.endgroups&&dict.endgroups&&dict.end1},hasNext:function(v){v||(v=1);var o=this.options,pages=this.options.pages;return pages===!1?o.hasNext(v):vlastPage?lastPage:(firstPage=BI.result(o,"firstPage"),vo.pages?o.pages:v,this.currPage=v;this._populate()},getValue:function(){var val=this.button_group.getValue()[0];switch(val){case"prev":return-1;case"next":return 1;case"first":return BI.MIN;case"last":return BI.MAX;default:return val}},attr:function(key,value){BI.Pager.superclass.attr.apply(this,arguments),"curr"===key&&(this.currPage=BI.result(this.options,"curr"))},populate:function(){this._populate()}}),BI.Pager.EVENT_CHANGE="EVENT_CHANGE",BI.Pager.EVENT_AFTER_POPULATE="EVENT_AFTER_POPULATE",BI.shortcut("bi.pager",BI.Pager),BI.A=BI.inherit(BI.Text,{_defaultConfig:function(){var conf=BI.A.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-a display-block",href:"",target:"_blank",el:null,tagName:"a"})},_init:function(){var o=this.options;BI.A.superclass._init.apply(this,arguments),this.element.attr({href:o.href,target:o.target}),o.el&&BI.createWidget(o.el,{element:this})}}),BI.shortcut("bi.a",BI.A),BI.LoadingBar=BI.inherit(BI.Single,{_defaultConfig:function(){var conf=BI.LoadingBar.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-loading-bar bi-tips",height:30,handler:BI.emptyFn})},_init:function(){BI.LoadingBar.superclass._init.apply(this,arguments);var self=this;this.loaded=BI.createWidget({type:"bi.text_button",cls:"loading-text bi-list-item-simple",text:BI.i18nText("BI-Load_More"),width:120,handler:this.options.handler}),this.loaded.on(BI.Controller.EVENT_CHANGE,function(type){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.loading=BI.createWidget({type:"bi.layout",width:this.options.height,height:this.options.height,cls:"loading-background cursor-default"});var loaded=BI.createWidget({type:"bi.center_adapt",items:[this.loaded]}),loading=BI.createWidget({type:"bi.center_adapt",items:[this.loading]});this.cardLayout=BI.createWidget({type:"bi.card",element:this,items:[{el:loaded,cardName:"loaded"},{el:loading,cardName:"loading"}]}),this.invisible()},_reset:function(){this.visible(),this.loaded.setText(BI.i18nText("BI-Load_More")),this.loaded.enable()},setLoaded:function(){this._reset(),this.cardLayout.showCardByName("loaded")},setEnd:function(){this.setLoaded(),this.loaded.setText(BI.i18nText("BI-No_More_Data")),this.loaded.disable()},setLoading:function(){this._reset(),this.cardLayout.showCardByName("loading")}}),BI.shortcut("bi.loading_bar",BI.LoadingBar),BI.IconButton=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.IconButton.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{_baseCls:(conf._baseCls||"")+" bi-icon-button horizon-center",iconWidth:null,iconHeight:null})},_init:function(){BI.IconButton.superclass._init.apply(this,arguments);var o=this.options;this.element.css({textAlign:"center"}),this.icon=BI.createWidget({type:"bi.icon",width:o.iconWidth,height:o.iconHeight}),BI.isNumber(o.height)&&o.height>0&&BI.isNull(o.iconWidth)&&BI.isNull(o.iconHeight)?(this.element.css("lineHeight",o.height+"px"),BI.createWidget({type:"bi.default",element:this,items:[this.icon]})):(this.element.css("lineHeight","1"),BI.createWidget({element:this,type:"bi.center_adapt",items:[this.icon]}))},doClick:function(){BI.IconButton.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.IconButton.EVENT_CHANGE,this)}}),BI.IconButton.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.icon_button",BI.IconButton),BI.ImageButton=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.ImageButton.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-image-button",src:"",iconWidth:"100%",iconHeight:"100%"})},_init:function(){BI.ImageButton.superclass._init.apply(this,arguments);var o=this.options;this.image=BI.createWidget({type:"bi.img",width:o.iconWidth,height:o.iconHeight,src:o.src}),BI.isNumber(o.iconWidth)||BI.isNumber(o.iconHeight)?BI.createWidget({type:"bi.center_adapt",element:this,items:[this.image]}):BI.createWidget({type:"bi.adaptive",element:this,items:[this.image],scrollable:!1})},setWidth:function(w){BI.ImageButton.superclass.setWidth.apply(this,arguments),this.options.width=w},setHeight:function(h){BI.ImageButton.superclass.setHeight.apply(this,arguments),this.options.height=h},setImageWidth:function(w){this.image.setWidth(w)},setImageHeight:function(h){this.image.setHeight(h)},getImageWidth:function(){return this.image.element.width()},getImageHeight:function(){return this.image.element.height()},setSrc:function(src){this.options.src=src,this.image.setSrc(src)},getSrc:function(){return this.image.getSrc()},doClick:function(){BI.ImageButton.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.ImageButton.EVENT_CHANGE,this)}}),BI.ImageButton.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.image_button",BI.ImageButton),BI.Button=BI.inherit(BI.BasicButton,{_defaultConfig:function(props){var conf=BI.Button.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-button"+(BI.isIE()&&BI.isIE9Below()?" hack":""),minWidth:props.block===!0||props.clear===!0?0:80,height:24,shadow:props.clear!==!0,isShadowShowingOnSelected:!0,readonly:!0,iconCls:"",level:"common",block:!1,clear:!1,ghost:!1,textAlign:"center",whiteSpace:"nowrap",textWidth:null,textHeight:null,hgap:props.clear?0:10,vgap:0,tgap:0,bgap:0,lgap:0,rgap:0})},_init:function(){BI.Button.superclass._init.apply(this,arguments);var o=this.options,self=this;!BI.isNumber(o.height)||o.clear||o.block?o.clear||o.block?this.element.css({lineHeight:o.height+"px"}):this.element.css({lineHeight:o.height-2+"px"}):this.element.css({height:o.height+"px",lineHeight:o.height-2+"px"}),BI.isKey(o.iconCls)?(this.icon=BI.createWidget({type:"bi.icon_label",cls:o.iconCls,width:18,height:o.height-2,iconWidth:o.iconWidth,iconHeight:o.iconHeight}),this.text=BI.createWidget({type:"bi.label",text:o.text,value:o.value,height:o.height-2}),BI.createWidget({type:"bi.center_adapt",element:this,hgap:o.hgap,vgap:o.vgap,items:[{type:"bi.horizontal",items:[this.icon,this.text]}]})):this.text=BI.createWidget({type:"bi.label",textAlign:o.textAlign,whiteSpace:o.whiteSpace,textWidth:o.textWidth,textHeight:o.textHeight,hgap:o.hgap,vgap:o.vgap,tgap:o.tgap,bgap:o.bgap,lgap:o.lgap,rgap:o.rgap,element:this,text:o.text,value:o.value}),o.block===!0&&this.element.addClass("block"),o.clear===!0&&this.element.addClass("clear"),o.ghost===!0&&this.element.addClass("ghost"),o.minWidth>0&&this.element.css({"min-width":o.minWidth+"px"})},doClick:function(){BI.Button.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.Button.EVENT_CHANGE,this)},setText:function(text){BI.Button.superclass.setText.apply(this,arguments),this.text.setText(text)},setValue:function(text){BI.Button.superclass.setValue.apply(this,arguments),this.isReadOnly()||this.text.setValue(text)},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},destroy:function(){BI.Button.superclass.destroy.apply(this,arguments)}}),BI.shortcut("bi.button",BI.Button),BI.Button.EVENT_CHANGE="EVENT_CHANGE",BI.TextButton=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.TextButton.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-text-button",textAlign:"center",whiteSpace:"nowrap",textWidth:null,textHeight:null,hgap:0,lgap:0,rgap:0,text:"",py:""})},_init:function(){BI.TextButton.superclass._init.apply(this,arguments);var o=this.options;this.text=BI.createWidget({type:"bi.label",element:this,textAlign:o.textAlign,whiteSpace:o.whiteSpace,textWidth:o.textWidth,textHeight:o.textHeight,width:o.width,height:o.height,hgap:o.hgap,lgap:o.lgap,rgap:o.rgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword})},doClick:function(){BI.TextButton.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.TextButton.EVENT_CHANGE,this.getValue(),this)},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},setText:function(text){BI.TextButton.superclass.setText.apply(this,arguments),text=BI.isArray(text)?text.join(","):text,this.text.setText(text)},setStyle:function(style){this.text.setStyle(style)},setValue:function(text){BI.TextButton.superclass.setValue.apply(this,arguments),this.isReadOnly()||(text=BI.isArray(text)?text.join(","):text,this.text.setValue(text))}}),BI.TextButton.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.text_button",BI.TextButton),BI.BlankIconIconTextItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.BlankIconIconTextItem.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-blank-icon-text-item",logic:{dynamic:!1},iconCls1:"close-ha-font",iconCls2:"close-ha-font",blankWidth:0,iconHeight:null,iconWidth:null,textHgap:0,textVgap:0,textLgap:0,textRgap:0})},_init:function(){BI.BlankIconIconTextItem.superclass._init.apply(this,arguments);var o=this.options,c=this._const,blank=BI.createWidget({type:"bi.layout",width:o.blankWidth,height:o.height});this.text=BI.createWidget({type:"bi.label",cls:"list-item-text",textAlign:"left",hgap:o.textHgap,vgap:o.textVgap,lgap:o.textLgap,rgap:o.textRgap,text:o.text,value:o.value,keyword:o.keyword,height:o.height}),this.icon1=BI.createWidget({type:"bi.icon_button",cls:o.iconCls1,forceNotSelected:!0,width:o.height,height:o.height}),this.icon2=BI.createWidget({type:"bi.icon_button",cls:o.iconCls2,forceNotSelected:!0,width:o.height,height:o.height}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("horizontal",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("left",blank,this.icon1,this.icon2,this.text)}))))},doClick:function(){BI.BlankIconIconTextItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.BlankIconIconTextItem.EVENT_CHANGE,this.getValue(),this)},setSelected:function(b){BI.BlankIconIconTextItem.superclass.setSelected.apply(this,arguments),this.icon1.setSelected(b),this.icon2.setSelected(b)},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},getValue:function(){return this.text.getValue()},setText:function(){this.text.setText.apply(this.text,arguments)},getText:function(){return this.text.getText()},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)}}),BI.BlankIconIconTextItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.blank_icon_icon_text_item",BI.BlankIconIconTextItem),BI.BlankIconTextIconItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.BlankIconTextIconItem.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-blank-icon-text-icon-item",logic:{dynamic:!1},iconCls1:"close-ha-font",iconCls2:"close-ha-font",blankWidth:0,iconHeight:null,iconWidth:null,textHgap:0,textVgap:0,textLgap:0,textRgap:0})},_init:function(){BI.BlankIconTextIconItem.superclass._init.apply(this,arguments);var o=this.options,c=this._const;this.text=BI.createWidget({type:"bi.label",textAlign:"left",hgap:o.textHgap,vgap:o.textVgap,lgap:o.textLgap,rgap:o.textRgap,text:o.text,value:o.value,keyword:o.keyword,height:o.height});var icon1=BI.createWidget({type:"bi.icon_label",cls:o.iconCls1,width:o.height,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight});BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.icon_label",cls:o.iconCls2,width:o.height,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight},top:0,bottom:0,right:0}]}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("horizontal",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("left",{type:"bi.layout",width:o.blankWidth},icon1,this.text,{type:"bi.layout",width:o.height})}))))},doClick:function(){BI.BlankIconTextIconItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.BlankIconTextIconItem.EVENT_CHANGE,this.getValue(),this)},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},getValue:function(){return this.text.getValue()},setText:function(){this.text.setText.apply(this.text,arguments)},getText:function(){return this.text.getText()}}),BI.BlankIconTextIconItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.blank_icon_text_icon_item",BI.BlankIconTextIconItem),BI.BlankIconTextItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.BlankIconTextItem.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-blank-icon-text-item",logic:{dynamic:!1},cls:"close-ha-font",blankWidth:0,iconHeight:null,iconWidth:null,textHgap:0,textVgap:0,textLgap:0,textRgap:0})},_init:function(){BI.BlankIconTextItem.superclass._init.apply(this,arguments);var o=this.options,c=this._const,blank=BI.createWidget({type:"bi.layout",width:o.blankWidth});this.text=BI.createWidget({type:"bi.label",cls:"list-item-text",textAlign:"left",hgap:o.textHgap,vgap:o.textVgap,lgap:o.textLgap,rgap:o.textRgap,text:o.text,value:o.value,keyword:o.keyword,height:o.height}),this.icon=BI.createWidget({type:"bi.icon_label",width:o.height,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("horizontal",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("left",blank,this.icon,this.text)}))))},doClick:function(){BI.BlankIconTextItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.BlankIconTextItem.EVENT_CHANGE,this.getValue(),this)},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},getValue:function(){return this.text.getValue()},setText:function(){this.text.setText.apply(this.text,arguments)},getText:function(){return this.text.getText()},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)}}),BI.BlankIconTextItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.blank_icon_text_item",BI.BlankIconTextItem),BI.IconTextIconItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.IconTextIconItem.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-icon-text-icon-item",logic:{dynamic:!1},iconCls1:"close-ha-font",iconCls2:"close-ha-font",iconHeight:null,iconWidth:null,textHgap:0,textVgap:0,textLgap:0,textRgap:0})},_init:function(){BI.IconTextIconItem.superclass._init.apply(this,arguments);var o=this.options,c=this._const;this.text=BI.createWidget({type:"bi.label",textAlign:"left",hgap:o.textHgap,vgap:o.textVgap,lgap:o.textLgap,rgap:o.textRgap,text:o.text,value:o.value,keyword:o.keyword,height:o.height});var icon1=BI.createWidget({type:"bi.icon_label",cls:o.iconCls1,width:o.leftIconWrapperWidth,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight}),blank=BI.createWidget({type:"bi.layout",width:o.height});BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.icon_label",cls:o.iconCls2,width:o.rightIconWrapperWidth,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight},top:0,bottom:0,right:0}]}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("horizontal",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("left",icon1,this.text,blank)}))))},doClick:function(){BI.IconTextIconItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.IconTextIconItem.EVENT_CHANGE,this.getValue(),this)},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},getValue:function(){return this.text.getValue()},setText:function(){this.text.setText.apply(this.text,arguments)},getText:function(){return this.text.getText()}}),BI.IconTextIconItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.icon_text_icon_item",BI.IconTextIconItem),BI.IconTextItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.IconTextItem.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-icon-text-item",direction:BI.Direction.Left,logic:{dynamic:!1},iconWrapperWidth:null,iconHeight:null,iconWidth:null,textHgap:0,textVgap:0,textLgap:0,textRgap:0})},_init:function(){BI.IconTextItem.superclass._init.apply(this,arguments); +var o=this.options,c=this._const;this.text=BI.createWidget({type:"bi.label",cls:"list-item-text",textAlign:"left",hgap:o.textHgap,vgap:o.textVgap,lgap:o.textLgap,rgap:o.textRgap,text:o.text,value:o.value,keyword:o.keyword,height:o.height}),this.icon=BI.createWidget({type:"bi.icon_label",width:o.iconWrapperWidth||o.height,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction),BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection(o.direction,this.icon,this.text)}))))},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},getValue:function(){return this.text.getValue()},setText:function(){this.text.setText.apply(this.text,arguments)},getText:function(){return this.text.getText()},doClick:function(){BI.IconTextItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.IconTextItem.EVENT_CHANGE,this.getValue(),this)},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)}}),BI.IconTextItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.icon_text_item",BI.IconTextItem),BI.TextIconItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.TextIconItem.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-text-icon-item",logic:{dynamic:!1},cls:"close-ha-font",iconHeight:null,iconWidth:null,textHgap:0,textVgap:0,textLgap:0,textRgap:0})},_init:function(){BI.TextIconItem.superclass._init.apply(this,arguments);var o=this.options,c=this._const;this.text=BI.createWidget({type:"bi.label",cls:"list-item-text",textAlign:"left",hgap:o.textHgap,vgap:o.textVgap,lgap:o.textLgap,rgap:o.textRgap,text:o.text,value:o.value,keyword:o.keyword,height:o.height}),this.icon=BI.createWidget({type:"bi.icon_label",width:o.height,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("horizontal",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("left",this.text,this.icon)}))))},doClick:function(){BI.TextIconItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.TextIconItem.EVENT_CHANGE,this.getValue(),this)},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},getValue:function(){return this.text.getValue()},setText:function(){this.text.setText.apply(this.text,arguments)},getText:function(){return this.text.getText()},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)}}),BI.TextIconItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.text_icon_item",BI.TextIconItem),BI.TextItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.TextItem.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-text-item",textAlign:"left",whiteSpace:"nowrap",textHgap:0,textVgap:0,textLgap:0,textRgap:0})},_init:function(){BI.TextItem.superclass._init.apply(this,arguments);var o=this.options;this.text=BI.createWidget({type:"bi.label",element:this,textAlign:o.textAlign,whiteSpace:o.whiteSpace,textHeight:"nowrap"==o.whiteSpace?o.height:o.textHeight,height:o.height,hgap:o.textHgap,vgap:o.textVgap,lgap:o.textLgap,rgap:o.textRgap,text:o.text,value:o.value,keyword:o.keyword,py:o.py})},doClick:function(){BI.TextItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.TextItem.EVENT_CHANGE,this.getValue(),this)},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},getValue:function(){return this.text.getValue()},setText:function(){this.text.setText.apply(this.text,arguments)},getText:function(){return this.text.getText()}}),BI.TextItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.text_item",BI.TextItem),BI.IconTextIconNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.IconTextIconNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-icon-text-icon-node",logic:{dynamic:!1},iconCls1:"close-ha-font",iconCls2:"close-ha-font",iconHeight:null,iconWidth:null,textHgap:0,textVgap:0,textLgap:0,textRgap:0})},_init:function(){BI.IconTextIconNode.superclass._init.apply(this,arguments);var o=this.options,c=this._const;this.text=BI.createWidget({type:"bi.label",textAlign:"left",hgap:o.textHgap,vgap:o.textVgap,lgap:o.textLgap,rgap:o.textRgap,text:o.text,value:o.value,keyword:o.keyword,height:o.height});var icon1=BI.createWidget({type:"bi.icon_label",cls:o.iconCls1,width:o.height,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight}),blank=BI.createWidget({type:"bi.layout",width:o.height,height:o.height});BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.icon_label",cls:o.iconCls2,width:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight},top:0,bottom:0,right:0}]}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("horizontal",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("left",icon1,this.text,blank)}))))},doClick:function(){BI.IconTextIconNode.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.IconTextIconNode.EVENT_CHANGE,this.getValue(),this)},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},getValue:function(){return this.text.getValue()},setText:function(){this.text.setText.apply(this.text,arguments)},getText:function(){return this.text.getText()}}),BI.IconTextIconNode.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.icon_text_icon_node",BI.IconTextIconNode),BI.IconTextNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.IconTextNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-icon-text-node",logic:{dynamic:!1},cls:"close-ha-font",iconHeight:null,iconWidth:null,textHgap:0,textVgap:0,textLgap:0,textRgap:0})},_init:function(){BI.IconTextNode.superclass._init.apply(this,arguments);var o=this.options,c=this._const;this.text=BI.createWidget({type:"bi.label",cls:"list-item-text",textAlign:"left",hgap:o.textHgap,vgap:o.textVgap,lgap:o.textLgap,rgap:o.textRgap,text:o.text,value:o.value,keyword:o.keyword,height:o.height}),this.icon=BI.createWidget({type:"bi.icon_label",width:o.height,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("horizontal",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("left",this.icon,this.text)}))))},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},getValue:function(){return this.text.getValue()},setText:function(){this.text.setText.apply(this.text,arguments)},getText:function(){return this.text.getText()},doClick:function(){BI.IconTextNode.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.IconTextNode.EVENT_CHANGE,this.getValue(),this)},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)}}),BI.IconTextNode.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.icon_text_node",BI.IconTextNode),BI.TextIconNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.TextIconNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-text-icon-node",logic:{dynamic:!1},cls:"close-ha-font",iconHeight:null,iconWidth:null,textHgap:0,textVgap:0,textLgap:0,textRgap:0})},_init:function(){BI.TextIconNode.superclass._init.apply(this,arguments);var o=this.options,c=this._const;this.text=BI.createWidget({type:"bi.label",cls:"list-item-text",textAlign:"left",hgap:o.textHgap,vgap:o.textVgap,lgap:o.textLgap,rgap:o.textRgap,text:o.text,value:o.value,keyword:o.keyword,height:o.height}),this.icon=BI.createWidget({type:"bi.icon_label",width:o.height,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("horizontal",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("left",this.text,this.icon)}))))},doClick:function(){BI.TextIconNode.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.TextIconNode.EVENT_CHANGE,this.getValue(),this)},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},getValue:function(){return this.text.getValue()},setText:function(){this.text.setText.apply(this.text,arguments)},getText:function(){return this.text.getText()},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)}}),BI.TextIconNode.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.text_icon_node",BI.TextIconNode),BI.TextNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.TextNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-text-node",textAlign:"left",whiteSpace:"nowrap",textHgap:0,textVgap:0,textLgap:0,textRgap:0})},_init:function(){BI.TextNode.superclass._init.apply(this,arguments);var o=this.options;this.text=BI.createWidget({type:"bi.label",element:this,textAlign:o.textAlign,whiteSpace:o.whiteSpace,textHeight:"nowrap"==o.whiteSpace?o.height:o.textHeight,height:o.height,hgap:o.textHgap,vgap:o.textVgap,lgap:o.textLgap,rgap:o.textRgap,text:o.text,value:o.value,keyword:o.keyword,py:o.py})},doClick:function(){BI.TextNode.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.TextNode.EVENT_CHANGE,this.getValue(),this)},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},getValue:function(){return this.text.getValue()},setText:function(){this.text.setText.apply(this.text,arguments)},getText:function(){return this.text.getText()}}),BI.TextNode.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.text_node",BI.TextNode),BI.Editor=BI.inherit(BI.Single,{_defaultConfig:function(){var conf=BI.Editor.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-editor bi-focus-shadow",hgap:4,vgap:2,lgap:0,rgap:0,tgap:0,bgap:0,tipType:"warning",inputType:"text",validationChecker:BI.emptyFn,quitChecker:BI.emptyFn,allowBlank:!1,watermark:"",errorText:""})},_init:function(){BI.Editor.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=this.addWidget(BI.createWidget({type:"bi.input",element:"",root:!0,value:o.value,watermark:o.watermark,validationChecker:o.validationChecker,quitChecker:o.quitChecker,allowBlank:o.allowBlank})),this.editor.element.css({width:"100%",height:"100%",border:"none",outline:"none",padding:"0",margin:"0"}),BI.isKey(this.options.watermark)&&this._assertWaterMark();var _items=[];this.watermark&&_items.push({el:this.watermark,left:3,right:3,top:0,bottom:0}),_items.push({el:this.editor,left:0,right:0,top:0,bottom:0});var items=[{el:{type:"bi.absolute",ref:function(_ref){self.contentWrapper=_ref},items:_items},left:o.hgap+o.lgap,right:o.hgap+o.rgap,top:o.vgap+o.tgap,bottom:o.vgap+o.bgap}];BI.createWidget({type:"bi.absolute",element:this,items:items}),this.editor.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editor.on(BI.Input.EVENT_FOCUS,function(){self._checkError(),self.element.addClass("bi-editor-focus"),self.fireEvent(BI.Editor.EVENT_FOCUS,arguments)}),this.editor.on(BI.Input.EVENT_BLUR,function(){self._setErrorVisible(!1),self.element.removeClass("bi-editor-focus"),self.fireEvent(BI.Editor.EVENT_BLUR,arguments)}),this.editor.on(BI.Input.EVENT_CLICK,function(){self.fireEvent(BI.Editor.EVENT_CLICK,arguments)}),this.editor.on(BI.Input.EVENT_CHANGE,function(){self.fireEvent(BI.Editor.EVENT_CHANGE,arguments)}),this.editor.on(BI.Input.EVENT_KEY_DOWN,function(v){self.fireEvent(BI.Editor.EVENT_KEY_DOWN,arguments)}),this.editor.on(BI.Input.EVENT_QUICK_DOWN,function(e){e.keyCode!==BI.KeyCode.TAB&&self.watermark&&self.watermark.invisible()}),this.editor.on(BI.Input.EVENT_VALID,function(){self._checkWaterMark(),self._setErrorVisible(!1),self.fireEvent(BI.Editor.EVENT_VALID,arguments)}),this.editor.on(BI.Input.EVENT_ERROR,function(){self._checkWaterMark(),self.fireEvent(BI.Editor.EVENT_ERROR,arguments),self._setErrorVisible(self.isEditing())}),this.editor.on(BI.Input.EVENT_RESTRICT,function(){self._checkWaterMark();var tip=self._setErrorVisible(!0);tip&&tip.element.fadeOut(100,function(){tip.element.fadeIn(100)}),self.fireEvent(BI.Editor.EVENT_RESTRICT,arguments)}),this.editor.on(BI.Input.EVENT_EMPTY,function(){self._checkWaterMark(),self.fireEvent(BI.Editor.EVENT_EMPTY,arguments)}),this.editor.on(BI.Input.EVENT_ENTER,function(){self.fireEvent(BI.Editor.EVENT_ENTER,arguments)}),this.editor.on(BI.Input.EVENT_SPACE,function(){self.fireEvent(BI.Editor.EVENT_SPACE,arguments)}),this.editor.on(BI.Input.EVENT_BACKSPACE,function(){self.fireEvent(BI.Editor.EVENT_BACKSPACE,arguments)}),this.editor.on(BI.Input.EVENT_REMOVE,function(){self.fireEvent(BI.Editor.EVENT_REMOVE,arguments)}),this.editor.on(BI.Input.EVENT_START,function(){self.fireEvent(BI.Editor.EVENT_START,arguments)}),this.editor.on(BI.Input.EVENT_PAUSE,function(){self.fireEvent(BI.Editor.EVENT_PAUSE,arguments)}),this.editor.on(BI.Input.EVENT_STOP,function(){self.fireEvent(BI.Editor.EVENT_STOP,arguments)}),this.editor.on(BI.Input.EVENT_CONFIRM,function(){self.fireEvent(BI.Editor.EVENT_CONFIRM,arguments)}),this.editor.on(BI.Input.EVENT_CHANGE_CONFIRM,function(){self.fireEvent(BI.Editor.EVENT_CHANGE_CONFIRM,arguments)}),this.element.click(function(e){return e.stopPropagation(),!1}),BI.isKey(this.options.value)||BI.isEmptyString(this.options.value)?(this._checkError(),this._checkWaterMark()):this._checkWaterMark()},_checkToolTip:function(){var o=this.options,errorText=o.errorText;BI.isFunction(errorText)&&(errorText=errorText(this.editor.getValue())),BI.isKey(errorText)&&(!this.isEnabled()||this.isValid()||BI.Bubbles.has(this.getName())&&BI.Bubbles.get(this.getName()).isVisible()?this.setTitle(""):this.setTitle(errorText))},_assertWaterMark:function(){var self=this,o=this.options;BI.isNull(this.watermark)&&(this.watermark=BI.createWidget({type:"bi.label",cls:"bi-water-mark",text:this.options.watermark,height:o.height-2*(o.vgap+o.tgap),whiteSpace:"nowrap",textAlign:"left"}),this.watermark.element.bind({mousedown:function(e){self.isEnabled()?self.editor.isEditing()||self.editor.focus():self.editor.isEditing()&&self.editor.blur(),e.stopEvent()}}),this.watermark.element.bind("click",function(e){self.isEnabled()?self.editor.isEditing()||self.editor.focus():self.editor.isEditing()&&self.editor.blur(),e.stopEvent()}))},_checkError:function(){this._setErrorVisible(this.isEnabled()&&!this.isValid()),this._checkToolTip()},_checkWaterMark:function(){var o=this.options;!this.disabledWaterMark&&""===this.editor.getValue()&&BI.isKey(o.watermark)?this.watermark&&this.watermark.visible():this.watermark&&this.watermark.invisible()},setErrorText:function(text){this.options.errorText=text},getErrorText:function(){return this.options.errorText},setWaterMark:function(v){this.options.watermark=v,BI.isNull(this.watermark)&&(this._assertWaterMark(),BI.createWidget({type:"bi.absolute",element:this.contentWrapper,items:[{el:this.watermark,left:3,right:3,top:0,bottom:0}]})),BI.isKey(v)&&this.watermark.setText(v)},_setErrorVisible:function(b){var o=this.options,errorText=o.errorText;if(BI.isFunction(errorText)&&(errorText=errorText(BI.trim(this.editor.getValue()))),!this.disabledError&&BI.isKey(errorText))return BI.Bubbles[b?"show":"hide"](this.getName(),errorText,this,{adjustYOffset:2}),this._checkToolTip(),BI.Bubbles.get(this.getName())},disableError:function(){this.disabledError=!0,this._checkError()},enableError:function(){this.disabledError=!1,this._checkError()},disableWaterMark:function(){this.disabledWaterMark=!0,this._checkWaterMark()},enableWaterMark:function(){this.disabledWaterMark=!1,this._checkWaterMark()},focus:function(){this.element.addClass("text-editor-focus"),this.editor.focus()},blur:function(){this.element.removeClass("text-editor-focus"),this.editor.blur()},selectAll:function(){this.editor.selectAll()},onKeyDown:function(k){this.editor.onKeyDown(k)},setValue:function(v){BI.Editor.superclass.setValue.apply(this,arguments),this.editor.setValue(v),this._checkError(),this._checkWaterMark()},getLastValidValue:function(){return this.editor.getLastValidValue()},getLastChangedValue:function(){return this.editor.getLastChangedValue()},getValue:function(){return this.isValid()?BI.trim(this.editor.getValue()):BI.trim(this.editor.getLastValidValue())},isEditing:function(){return this.editor.isEditing()},isValid:function(){return this.editor.isValid()},destroyed:function(){BI.Bubbles.remove(this.getName())}}),BI.Editor.EVENT_CHANGE="EVENT_CHANGE",BI.Editor.EVENT_FOCUS="EVENT_FOCUS",BI.Editor.EVENT_BLUR="EVENT_BLUR",BI.Editor.EVENT_CLICK="EVENT_CLICK",BI.Editor.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.Editor.EVENT_SPACE="EVENT_SPACE",BI.Editor.EVENT_BACKSPACE="EVENT_BACKSPACE",BI.Editor.EVENT_START="EVENT_START",BI.Editor.EVENT_PAUSE="EVENT_PAUSE",BI.Editor.EVENT_STOP="EVENT_STOP",BI.Editor.EVENT_CONFIRM="EVENT_CONFIRM",BI.Editor.EVENT_CHANGE_CONFIRM="EVENT_CHANGE_CONFIRM",BI.Editor.EVENT_VALID="EVENT_VALID",BI.Editor.EVENT_ERROR="EVENT_ERROR",BI.Editor.EVENT_ENTER="EVENT_ENTER",BI.Editor.EVENT_RESTRICT="EVENT_RESTRICT",BI.Editor.EVENT_REMOVE="EVENT_REMOVE",BI.Editor.EVENT_EMPTY="EVENT_EMPTY",BI.shortcut("bi.editor",BI.Editor),BI.MultifileEditor=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.MultifileEditor.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-multifile-editor",multiple:!1,maxSize:-1,accept:"",url:""})},_init:function(){var self=this,o=this.options;BI.MultifileEditor.superclass._init.apply(this,arguments),this.file=BI.createWidget({type:"bi.file",cls:"multifile-editor",width:"100%",height:"100%",name:o.name,url:o.url,multiple:o.multiple,accept:o.accept,maxSize:o.maxSize,title:o.title}),this.file.on(BI.File.EVENT_CHANGE,function(){self.fireEvent(BI.MultifileEditor.EVENT_CHANGE,arguments)}),this.file.on(BI.File.EVENT_UPLOADSTART,function(){self.fireEvent(BI.MultifileEditor.EVENT_UPLOADSTART,arguments)}),this.file.on(BI.File.EVENT_ERROR,function(){self.fireEvent(BI.MultifileEditor.EVENT_ERROR,arguments)}),this.file.on(BI.File.EVENT_PROGRESS,function(){self.fireEvent(BI.MultifileEditor.EVENT_PROGRESS,arguments)}),this.file.on(BI.File.EVENT_UPLOADED,function(){self.fireEvent(BI.MultifileEditor.EVENT_UPLOADED,arguments)}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.adaptive",scrollable:!1,items:[this.file]},top:0,right:0,left:0,bottom:0}]})},select:function(){this.file.select()},getValue:function(){return this.file.getValue()},upload:function(){this.file.upload()},reset:function(){this.file.reset()}}),BI.MultifileEditor.EVENT_CHANGE="EVENT_CHANGE",BI.MultifileEditor.EVENT_UPLOADSTART="EVENT_UPLOADSTART",BI.MultifileEditor.EVENT_ERROR="EVENT_ERROR",BI.MultifileEditor.EVENT_PROGRESS="EVENT_PROGRESS",BI.MultifileEditor.EVENT_UPLOADED="EVENT_UPLOADED",BI.shortcut("bi.multifile_editor",BI.MultifileEditor),BI.TextAreaEditor=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.TextAreaEditor.superclass._defaultConfig.apply(),{baseCls:"bi-textarea-editor",value:""})},render:function(){var o=this.options,self=this;this.content=BI.createWidget({type:"bi.layout",tagName:"textarea",width:"100%",height:"100%",cls:"bi-textarea textarea-editor-content display-block"}),this.content.element.css({resize:"none"}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.adaptive",items:[this.content]},left:4,right:4,top:4,bottom:8}]}),this.content.element.on("input propertychange",function(e){self._checkWaterMark(),self.fireEvent(BI.TextAreaEditor.EVENT_CHANGE)}),this.content.element.focus(function(){self.isValid()&&(self._focus(),self.fireEvent(BI.TextAreaEditor.EVENT_FOCUS)),BI.Widget._renderEngine.createElement(document).bind("mousedown."+self.getName(),function(e){BI.DOM.isExist(self)&&!self.element.__isMouseInBounds__(e)&&(BI.Widget._renderEngine.createElement(document).unbind("mousedown."+self.getName()),self.content.element.blur())})}),this.content.element.blur(function(){self.isValid()&&(self._blur(),self.fireEvent(BI.TextAreaEditor.EVENT_BLUR)),BI.Widget._renderEngine.createElement(document).unbind("mousedown."+self.getName())}),BI.isKey(o.value)&&this.setValue(o.value),BI.isNotNull(o.style)&&this.setStyle(o.style),this._checkWaterMark()},_checkWaterMark:function(){var self=this,o=this.options,val=this.getValue();BI.isNotEmptyString(val)?(this.watermark&&this.watermark.destroy(),this.watermark=null):BI.isNotEmptyString(o.watermark)&&(this.watermark?(this.watermark.setText(o.watermark),this.watermark.setValid(!o.invalid),this.watermark.setEnable(!o.disabled)):(this.watermark=BI.createWidget({type:"bi.text_button",cls:"bi-water-mark cursor-default",textAlign:"left",whiteSpace:"normal",text:o.watermark,invalid:o.invalid,disabled:o.disabled}),this.watermark.on(BI.TextButton.EVENT_CHANGE,function(){self.focus()}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.watermark,left:4,top:4,right:0}]})))},_focus:function(){this.content.element.addClass("textarea-editor-focus"),this._checkWaterMark()},_blur:function(){this.content.element.removeClass("textarea-editor-focus"),this._checkWaterMark()},focus:function(){this._focus(),this.content.element.focus()},blur:function(){this._blur(),this.content.element.blur()},getValue:function(){return this.content.element.val()},setValue:function(value){this.content.element.val(value),this._checkWaterMark()},setStyle:function(style){this.style=style,this.element.css(style),this.content.element.css(BI.extend({},style,{color:style.color||BI.DOM.getContrastColor(BI.DOM.isRGBColor(style.backgroundColor)?BI.DOM.rgb2hex(style.backgroundColor):style.backgroundColor)}))},getStyle:function(){return this.style},_setValid:function(b){BI.TextAreaEditor.superclass._setValid.apply(this,arguments)},_setEnable:function(b){BI.TextAreaEditor.superclass._setEnable.apply(this,[b]),this.content&&(this.content.element[0].disabled=!b)}}),BI.TextAreaEditor.EVENT_CHANGE="EVENT_CHANGE",BI.TextAreaEditor.EVENT_BLUR="EVENT_BLUR",BI.TextAreaEditor.EVENT_FOCUS="EVENT_FOCUS",BI.shortcut("bi.textarea_editor",BI.TextAreaEditor),BI.Html=BI.inherit(BI.Single,{props:{baseCls:"bi-html",textAlign:"left",whiteSpace:"normal",lineHeight:null,handler:null,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0,text:"",highLight:!1},render:function(){var self=this,o=this.options;o.hgap+o.lgap>0&&this.element.css({"padding-left":o.hgap+o.lgap+"px"}),o.hgap+o.rgap>0&&this.element.css({"padding-right":o.hgap+o.rgap+"px"}),o.vgap+o.tgap>0&&this.element.css({"padding-top":o.vgap+o.tgap+"px"}),o.vgap+o.bgap>0&&this.element.css({"padding-bottom":o.vgap+o.bgap+"px"}),BI.isNumber(o.height)&&this.element.css({lineHeight:o.height+"px"}),BI.isNumber(o.lineHeight)&&this.element.css({lineHeight:o.lineHeight+"px"}),BI.isWidthOrHeight(o.maxWidth)&&this.element.css({maxWidth:o.maxWidth}),this.element.css({textAlign:o.textAlign,whiteSpace:o.whiteSpace,textOverflow:"nowrap"===o.whiteSpace?"ellipsis":"",overflow:"nowrap"===o.whiteSpace?"":"auto"}),o.handler?(this.text=BI.createWidget({type:"bi.layout",tagName:"span"}),this.text.element.click(function(){o.handler(self.getValue())}),BI.createWidget({type:"bi.default",element:this,items:[this.text]})):this.text=this,BI.isKey(o.text)?this.setText(o.text):BI.isKey(o.value)&&this.setText(o.value),o.highLight&&this.doHighLight()},doHighLight:function(){this.text.element.addClass("bi-high-light")},unHighLight:function(){this.text.element.removeClass("bi-high-light")},setValue:function(text){BI.Html.superclass.setValue.apply(this,arguments),this.isReadOnly()||this.setText(text)},setStyle:function(css){this.text.element.css(css)},setText:function(text){BI.Html.superclass.setText.apply(this,arguments),this.options.text=text,this.text.element.html(text)}}),BI.shortcut("bi.html",BI.Html),BI.Icon=BI.inherit(BI.Single,{_defaultConfig:function(){var conf=BI.Icon.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{tagName:"i",baseCls:(conf.baseCls||"")+" x-icon b-font horizon-center display-block"})},_init:function(){BI.Icon.superclass._init.apply(this,arguments),BI.isIE9Below&&BI.isIE9Below()&&this.element.addClass("hack")}}),BI.shortcut("bi.icon",BI.Icon),BI.Iframe=BI.inherit(BI.Single,{_defaultConfig:function(){var conf=BI.Iframe.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{tagName:"iframe",baseCls:(conf.baseCls||"")+" bi-iframe",src:"",name:"",attributes:{},width:"100%",height:"100%"})},_init:function(){var o=this.options;o.attributes.frameborder="0",o.attributes.src=o.src,o.attributes.name=o.name,BI.Iframe.superclass._init.apply(this,arguments)},setSrc:function(src){this.options.src=src,this.element.attr("src",src)},getSrc:function(){return this.options.src},setName:function(name){this.options.name=name,this.element.attr("name",name)},getName:function(){return this.options.name}}),BI.shortcut("bi.iframe",BI.Iframe),BI.Img=BI.inherit(BI.Single,{_defaultConfig:function(){var conf=BI.Img.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{tagName:"img",baseCls:(conf.baseCls||"")+" bi-img display-block",src:"",attributes:{},width:"100%",height:"100%"})},_init:function(){var o=this.options;o.attributes.src=o.src,BI.Img.superclass._init.apply(this,arguments)},setSrc:function(src){this.options.src=src,this.element.attr("src",src)},getSrc:function(){return this.options.src}}),BI.shortcut("bi.img",BI.Img),BI.ImageCheckbox=BI.inherit(BI.IconButton,{_defaultConfig:function(){var conf=BI.ImageCheckbox.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-image-checkbox check-box-icon",selected:!1,handler:BI.emptyFn,width:16,height:16,iconWidth:16,iconHeight:16})}}),BI.ImageCheckbox.EVENT_CHANGE=BI.IconButton.EVENT_CHANGE,BI.shortcut("bi.image_checkbox",BI.ImageCheckbox),BI.Checkbox=BI.inherit(BI.BasicButton,{props:{baseCls:"bi-checkbox",selected:!1,handler:BI.emptyFn,width:16,height:16,iconWidth:16,iconHeight:16},render:function(){var self=this,o=this.options;return{type:"bi.center_adapt",items:[{type:"bi.default",ref:function(_ref){self.checkbox=_ref},cls:"checkbox-content",width:o.iconWidth-2,height:o.iconHeight-2}]}},_setEnable:function(enable){BI.Checkbox.superclass._setEnable.apply(this,arguments),enable===!0?this.checkbox.element.removeClass("base-disabled disabled"):this.checkbox.element.addClass("base-disabled disabled")},doClick:function(){BI.Checkbox.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.Checkbox.EVENT_CHANGE)},setSelected:function(b){BI.Checkbox.superclass.setSelected.apply(this,arguments),b?this.checkbox.element.addClass("bi-high-light-background"):this.checkbox.element.removeClass("bi-high-light-background")}}),BI.Checkbox.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.checkbox",BI.Checkbox),function(document){var F=function(item){return function(input){var files=input.files||[input];return files.item||(files.item=item),files}}(function(i){return this[i]}),event={add:document.addEventListener?function(node,name,callback){return node.addEventListener(name,callback,!1),this}:function(node,name,callback){return node.attachEvent("on"+name,callback),this},del:document.removeEventListener?function(node,name,callback){return node.removeEventListener(name,callback,!1),this}:function(node,name,callback){return node.detachEvent("on"+name,callback),this},stop:function(e){return e?(e.stopPropagation?e.stopPropagation():e.cancelBubble=!0,e.preventDefault?e.preventDefault():e.returnValue=!1):self.event&&(event.returnValue=!(event.cancelBubble=!0)),!1}},sendFile=function(toString){var multipart=function(boundary,name,file){return"--".concat(boundary,CRLF,'Content-Disposition: form-data; name="',name,'"; filename="',_global.encodeURIComponent(file.fileName),'"',CRLF,"Content-Type: application/octet-stream",CRLF,CRLF,file.getAsBinary(),CRLF,"--",boundary,"--",CRLF)},isFunction=function(Function){return"[object Function]"===toString.call(Function)},split="onabort.onerror.onloadstart.onprogress".split("."),length=split.length,CRLF="\r\n",xhr=this.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP"),sendFile;return sendFile=xhr.upload||xhr.sendAsBinary?function(handler,maxSize,width,height){if(-1'),iframe=handler.iframe||(handler.iframe=document.createElement(''))}catch(e){var form=document.createElement("form"),iframe=handler.iframe||(handler.iframe=document.createElement("iframe"));form.setAttribute("enctype","multipart/form-data"),iframe.setAttribute("name",iframe.id=target),iframe.setAttribute("src",url)}with(iframe.style.position="absolute",iframe.style.left=iframe.style.top="-10000px",iframe.onload=onload,iframe.onerror=function(event){isFunction(handler.onerror)&&handler.onerror(rpe,event||_global.event)},iframe.onreadystatechange=function(){/loaded|complete/i.test(iframe.readyState)?onload():isFunction(handler.onloadprogress)&&(rpe.loadedxhr.status||xhr.status>399)return BI.Msg.toast(BI.i18nText("BI-Upload_File_Error"),{level:"error"}),void self.fireEvent(BI.File.EVENT_ERROR);var error=BI.some(_wrap.attach_array,function(index,attach){if(attach.errorCode)return BI.Msg.toast(attach.errorMsg,{level:"error"}),self.fireEvent(BI.File.EVENT_ERROR,attach),!0});!error&&self.fireEvent(BI.File.EVENT_UPLOADED)},1e3)},_wrap.url=o.url,_wrap.fileType=o.accept,_wrap.attach_array=[],_wrap.attach_names=[],_wrap.attachNum=0},_events:function(wrap){var self=this;return event.add(wrap.dom.input,"change",function(){event.del(wrap.dom.input,"change",arguments.callee);for(var input=wrap.dom.input.cloneNode(!0),i=0,files=F(wrap.dom.input);i0&&self.fireEvent(BI.File.EVENT_CHANGE,{files:wrap.files}),input.value="",wrap.dom.input.parentNode.replaceChild(input,wrap.dom.input),wrap.dom.input=input,event.add(wrap.dom.input,"change",arguments.callee)}),wrap},_wrap:function(){var self=this,o=this.options,input=this.element[0];return o.multiple===!0&&this.element.attr("multiple","multiple"),input.value="",this._events({dom:{input:input,disabled:!1},name:input.name,maxSize:o.maxSize?o.maxSize>>0:-1,files:[],clean:function(){this.files=[]},upload:function(handler){if(handler)for(var key in handler)this[key]=handler[key];return sendFiles(this,this.maxSize),this},hide:function(){this.dom.disabled&&(this.dom.disabled=!1,this.dom.input.removeAttribute("disabled"))},show:function(total,current,totalProp,currentProp){this.dom.disabled||(this.dom.disabled=!0,this.dom.input.setAttribute("disabled","disabled"))}})},select:function(){this.wrap&&BI.Widget._renderEngine.createElement(this.wrap.dom.input).click()},upload:function(handler){this.wrap&&this.wrap.upload(handler)},getValue:function(){return this.wrap?this.wrap.attach_array:[]},reset:function(){this.wrap&&(this.wrap.attach_array=[],this.wrap.attach_names=[],this.wrap.attachNum=0)},_setEnable:function(enable){BI.File.superclass._setEnable.apply(this,arguments),enable===!0?this.element.attr("disabled","disabled"):this.element.removeAttr("disabled")}}),BI.File.EVENT_CHANGE="EVENT_CHANGE",BI.File.EVENT_UPLOADSTART="EVENT_UPLOADSTART",BI.File.EVENT_ERROR="EVENT_ERROR",BI.File.EVENT_PROGRESS="EVENT_PROGRESS",BI.File.EVENT_UPLOADED="EVENT_UPLOADED",BI.shortcut("bi.file",BI.File)}(_global.document||{}),BI.Input=BI.inherit(BI.Single,{_defaultConfig:function(){var conf=BI.Input.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-input display-block overflow-dot",tagName:"input",validationChecker:BI.emptyFn,quitChecker:BI.emptyFn,allowBlank:!1})},_init:function(){BI.Input.superclass._init.apply(this,arguments);var self=this,ctrlKey=!1,keyCode=null,inputEventValid=!1,_keydown=BI.debounce(function(keyCode){self.onKeyDown(keyCode,ctrlKey),self._keydown_=!1},300),_clk=BI.debounce(BI.bind(this._click,this),BI.EVENT_RESPONSE_TIME,{leading:!0,trailing:!1});this._focusDebounce=BI.debounce(BI.bind(this._focus,this),BI.EVENT_RESPONSE_TIME,{leading:!0,trailing:!1}),this._blurDebounce=BI.debounce(BI.bind(this._blur,this),BI.EVENT_RESPONSE_TIME,{leading:!0,trailing:!1}),this.element.keydown(function(e){inputEventValid=!1,ctrlKey=e.ctrlKey||e.metaKey,keyCode=e.keyCode,self.fireEvent(BI.Input.EVENT_QUICK_DOWN,arguments)}).keyup(function(e){keyCode=null,inputEventValid&&e.keyCode===BI.KeyCode.ENTER||(self._keydown_=!0,_keydown(e.keyCode))}).on("input propertychange",function(e){var originalEvent=e.originalEvent;(BI.isNull(originalEvent.propertyName)||"value"===originalEvent.propertyName)&&(inputEventValid=!0,self._keydown_=!0,_keydown(keyCode),keyCode=null)}).click(function(e){e.stopPropagation(),_clk()}).mousedown(function(e){self.element.val(self.element.val())}).focus(function(e){self._focusDebounce()}).focusout(function(e){self._blurDebounce()}),(BI.isKey(this.options.value)||BI.isEmptyString(this.options.value))&&this.setValue(this.options.value)},_focus:function(){this.element.addClass("bi-input-focus"),this._checkValidationOnValueChange(),this._isEditing=!0,""==this.getValue()&&(this.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.EMPTY,this.getValue(),this),this.fireEvent(BI.Input.EVENT_EMPTY)),this.fireEvent(BI.Input.EVENT_FOCUS)},_blur:function(){function blur(){if(self.isValid()||self.options.quitChecker.apply(self,[BI.trim(self.getValue())])===!1||(self.element.val(self._lastValidValue?self._lastValidValue:""),self._checkValidationOnValueChange(),self._defaultState()),self.element.removeClass("bi-input-focus"),self._isEditing=!1,self._start=!1,self.isValid()){var lastValidValue=self._lastValidValue;self._lastValidValue=self.getValue(),self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.CONFIRM,self.getValue(),self),self.fireEvent(BI.Input.EVENT_CONFIRM),self._lastValidValue!==lastValidValue&&self.fireEvent(BI.Input.EVENT_CHANGE_CONFIRM)}self.fireEvent(BI.Input.EVENT_BLUR)}var self=this;self._keydown_===!0?BI.delay(blur,300):blur()},_click:function(){this._isEditing!==!0&&(this.selectAll(),this.fireEvent(BI.Input.EVENT_CLICK))},onClick:function(){this._click()},onKeyDown:function(keyCode,ctrlKey){this.isValid()&&BI.trim(this._lastChangedValue)===BI.trim(this.getValue())||this._checkValidationOnValueChange(),this.isValid()&&""!==BI.trim(this.getValue())&&((BI.trim(this.getValue())===this._lastValue||this._start&&null!=this._lastValue&&""!==this._lastValue)&&(this._pause!==!0||/(\s|\u00A0)$/.test(this.getValue()))||(this._start=!0,this._pause=!1,this.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.STARTEDIT,this.getValue(),this),this.fireEvent(BI.Input.EVENT_START))),keyCode==BI.KeyCode.ENTER&&(this.isValid()||this.options.quitChecker.apply(this,[BI.trim(this.getValue())])!==!1?(this.blur(),this.fireEvent(BI.Input.EVENT_ENTER)):this.fireEvent(BI.Input.EVENT_RESTRICT)),keyCode==BI.KeyCode.SPACE&&this.fireEvent(BI.Input.EVENT_SPACE),keyCode==BI.KeyCode.BACKSPACE&&""==this._lastValue&&this.fireEvent(BI.Input.EVENT_REMOVE),keyCode!=BI.KeyCode.BACKSPACE&&keyCode!=BI.KeyCode.DELETE||this.fireEvent(BI.Input.EVENT_BACKSPACE),this.fireEvent(BI.Input.EVENT_KEY_DOWN,arguments);var lastValue=this._lastValue;BI.trim(this.getValue())!==BI.trim(this._lastValue||"")&&this._valueChange(),BI.isEndWithBlank(this.getValue())?(this._pause=!0,this.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.PAUSE,"",this),this.fireEvent(BI.Input.EVENT_PAUSE),this._defaultState()):keyCode!==BI.KeyCode.BACKSPACE&&keyCode!==BI.KeyCode.DELETE||""!==BI.trim(this.getValue())||null===lastValue||""===BI.trim(lastValue)||(this.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.STOPEDIT,this.getValue(),this),this.fireEvent(BI.Input.EVENT_STOP))},_defaultState:function(){""==this.getValue()&&(this.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.EMPTY,this.getValue(),this),this.fireEvent(BI.Input.EVENT_EMPTY)),this._lastValue=this.getValue(),this._lastSubmitValue=null},_valueChange:function(){this.isValid()&&BI.trim(this.getValue())!==this._lastSubmitValue&&(this.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.CHANGE,this.getValue(),this),this.fireEvent(BI.Input.EVENT_CHANGE),this._lastSubmitValue=BI.trim(this.getValue())),""==this.getValue()&&(this.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.EMPTY,this.getValue(),this),this.fireEvent(BI.Input.EVENT_EMPTY)),this._lastValue=this.getValue()},_checkValidationOnValueChange:function(){var o=this.options,v=this.getValue();this.setValid(o.allowBlank===!0&&""==BI.trim(v)||BI.isNotEmptyString(BI.trim(v))&&o.validationChecker.apply(this,[BI.trim(v)])!==!1)},focus:function(){if(!this.element.is(":visible"))throw new Error("input输入框在不可见下不能focus");!this._isEditing==!0&&(this.element.focus(),this.selectAll())},blur:function(){if(!this.element.is(":visible"))throw new Error("input输入框在不可见下不能blur");this._isEditing===!0&&(this.element.blur(),this._blurDebounce())},selectAll:function(){if(!this.element.is(":visible"))throw new Error("input输入框在不可见下不能select");this.element.select(),this._isEditing=!0},setValue:function(textValue){this.element.val(textValue),BI.nextTick(BI.bind(function(){this._checkValidationOnValueChange(),this._defaultState(),this.isValid()&&(this._lastValidValue=this._lastSubmitValue=this.getValue())},this))},getValue:function(){return this.element.val()||""},isEditing:function(){return this._isEditing},getLastValidValue:function(){return this._lastValidValue},getLastChangedValue:function(){return this._lastChangedValue},_setValid:function(){BI.Input.superclass._setValid.apply(this,arguments),this.isValid()?(this._lastChangedValue=this.getValue(),this.element.removeClass("bi-input-error"),this.fireEvent(BI.Input.EVENT_VALID,BI.trim(this.getValue()),this)):(this._lastChangedValue===this.getValue()&&(this._lastChangedValue=null),this.element.addClass("bi-input-error"),this.fireEvent(BI.Input.EVENT_ERROR,BI.trim(this.getValue()),this))},_setEnable:function(b){BI.Input.superclass._setEnable.apply(this,[b]),this.element[0].disabled=!b}}),BI.Input.EVENT_CHANGE="EVENT_CHANGE",BI.Input.EVENT_FOCUS="EVENT_FOCUS",BI.Input.EVENT_CLICK="EVENT_CLICK",BI.Input.EVENT_BLUR="EVENT_BLUR",BI.Input.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.Input.EVENT_QUICK_DOWN="EVENT_QUICK_DOWN",BI.Input.EVENT_SPACE="EVENT_SPACE",BI.Input.EVENT_BACKSPACE="EVENT_BACKSPACE",BI.Input.EVENT_START="EVENT_START",BI.Input.EVENT_PAUSE="EVENT_PAUSE",BI.Input.EVENT_STOP="EVENT_STOP",BI.Input.EVENT_CHANGE_CONFIRM="EVENT_CHANGE_CONFIRM",BI.Input.EVENT_CONFIRM="EVENT_CONFIRM",BI.Input.EVENT_REMOVE="EVENT_REMOVE",BI.Input.EVENT_EMPTY="EVENT_EMPTY",BI.Input.EVENT_VALID="EVENT_VALID",BI.Input.EVENT_ERROR="EVENT_ERROR",BI.Input.EVENT_ENTER="EVENT_ENTER",BI.Input.EVENT_RESTRICT="EVENT_RESTRICT",BI.shortcut("bi.input",BI.Input),BI.ImageRadio=BI.inherit(BI.IconButton,{_defaultConfig:function(){var conf=BI.ImageRadio.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-radio radio-icon",selected:!1,handler:BI.emptyFn,width:16,height:16,iconWidth:16,iconHeight:16})},_init:function(){BI.ImageRadio.superclass._init.apply(this,arguments)},doClick:function(){BI.ImageRadio.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.ImageRadio.EVENT_CHANGE)}}),BI.ImageRadio.EVENT_CHANGE=BI.IconButton.EVENT_CHANGE,BI.shortcut("bi.image_radio",BI.ImageRadio),BI.Radio=BI.inherit(BI.BasicButton,{props:{baseCls:"bi-radio",selected:!1,handler:BI.emptyFn,width:16,height:16,iconWidth:14,iconHeight:14},render:function(){var self=this,o=this.options;return{type:"bi.center_adapt",element:this.element,items:[{type:"bi.layout",cls:"radio-content",ref:function(_ref){self.radio=_ref},width:o.iconWidth,height:o.iconHeight}]}},_setEnable:function(enable){BI.Radio.superclass._setEnable.apply(this,arguments),enable===!0?this.radio.element.removeClass("base-disabled disabled"):this.radio.element.addClass("base-disabled disabled")},doClick:function(){BI.Radio.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.Radio.EVENT_CHANGE)},setSelected:function(b){BI.Radio.superclass.setSelected.apply(this,arguments),b?this.radio.element.addClass("bi-high-light-background"):this.radio.element.removeClass("bi-high-light-background")}}),BI.Radio.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.radio",BI.Radio),BI.AbstractLabel=BI.inherit(BI.Single,{_defaultConfig:function(props){var conf=BI.AbstractLabel.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{textAlign:"center",whiteSpace:"nowrap",textWidth:null,textHeight:null,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0,text:"",highLight:!1})},_createJson:function(){var o=this.options;return{type:"bi.text",textAlign:o.textAlign,whiteSpace:o.whiteSpace,lineHeight:o.textHeight,text:o.text,value:o.value,py:o.py,keyword:o.keyword,highLight:o.highLight}},_init:function(){BI.AbstractLabel.superclass._init.apply(this,arguments),"center"===this.options.textAlign?this._createCenterEl():this._createNotCenterEl()},_createCenterEl:function(){var o=this.options,json=this._createJson();return json.textAlign="left",BI.isNumber(o.width)&&o.width>0?BI.isNumber(o.textWidth)&&o.textWidth>0?(json.maxWidth=o.textWidth,BI.isNumber(o.height)&&o.height>0?void BI.createWidget({type:"bi.center_adapt",height:o.height,scrollable:"normal"===o.whiteSpace,element:this,items:[{el:this.text=BI.createWidget(json)}]}):void BI.createWidget({type:"bi.center_adapt",scrollable:"normal"===o.whiteSpace,element:this,items:[{el:this.text=BI.createWidget(json)}]})):"normal"==o.whiteSpace?(BI.extend(json,{hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap}),this.text=BI.createWidget(json),void BI.createWidget({type:"bi.center_adapt",scrollable:"normal"===o.whiteSpace,element:this,items:[this.text]})):BI.isNumber(o.height)&&o.height>0?(this.element.css({"line-height":o.height+"px"}),json.textAlign=o.textAlign,void(this.text=BI.createWidget(BI.extend(json,{element:this,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap})))):(BI.extend(json,{hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,maxWidth:"100%"}),this.text=BI.createWidget(json),void BI.createWidget({type:"bi.center_adapt",scrollable:"normal"===o.whiteSpace,element:this,items:[this.text]})):BI.isNumber(o.textWidth)&&o.textWidth>0?(json.maxWidth=o.textWidth,void BI.createWidget({type:"bi.center_adapt",scrollable:"normal"===o.whiteSpace,element:this,items:[{el:this.text=BI.createWidget(json)}]})):"normal"==o.whiteSpace?(BI.extend(json,{hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap}),this.text=BI.createWidget(json),void BI.createWidget({type:"bi.center_adapt",scrollable:!0,element:this,items:[this.text]})):BI.isNumber(o.height)&&o.height>0?(this.element.css({"line-height":o.height+"px"}),json.textAlign=o.textAlign,void(this.text=BI.createWidget(BI.extend(json,{element:this,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap})))):(BI.extend(json,{hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap}),this.text=BI.createWidget(BI.extend(json,{maxWidth:"100%"})),void BI.createWidget({type:"bi.center_adapt",element:this,items:[this.text]}))},_createNotCenterEl:function(){var o=this.options,adaptLayout="right"===o.textAlign?"bi.right_vertical_adapt":"bi.vertical_adapt",json=this._createJson();return BI.isNumber(o.width)&&o.width>0?BI.isNumber(o.textWidth)&&o.textWidth>0?(json.width=o.textWidth,BI.isNumber(o.height)&&o.height>0?void BI.createWidget({type:adaptLayout,height:o.height,scrollable:"normal"===o.whiteSpace,element:this,items:[{el:this.text=BI.createWidget(json)}]}):void BI.createWidget({type:adaptLayout,scrollable:"normal"===o.whiteSpace,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,element:this,items:[{el:this.text=BI.createWidget(json)}]})):BI.isNumber(o.height)&&o.height>0?(this.text=BI.createWidget(BI.extend(json,{element:this,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap})),void("normal"!==o.whiteSpace&&this.element.css({"line-height":o.height-2*o.vgap+"px"}))):(json.width=o.width-2*o.hgap-o.lgap-o.rgap,void BI.createWidget({type:adaptLayout,scrollable:"normal"===o.whiteSpace,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,element:this,items:[{el:this.text=BI.createWidget(json)}]})):BI.isNumber(o.textWidth)&&o.textWidth>0?(json.width=o.textWidth,void BI.createWidget({type:adaptLayout,scrollable:"normal"===o.whiteSpace,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,element:this,items:[{el:this.text=BI.createWidget(json)}]})):BI.isNumber(o.height)&&o.height>0?("normal"!==o.whiteSpace&&this.element.css({"line-height":o.height-2*o.vgap+"px"}),void(this.text=BI.createWidget(BI.extend(json,{element:this,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap})))):(BI.extend(json,{hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap}),this.text=BI.createWidget(BI.extend(json,{maxWidth:"100%"})),void BI.createWidget({type:adaptLayout,element:this,items:[this.text]}))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},setText:function(v){this.options.text=v,this.text.setText(v)},getText:function(){return this.options.text},setStyle:function(css){this.text.setStyle(css)},setValue:function(v){BI.AbstractLabel.superclass.setValue.apply(this,arguments),this.isReadOnly()||this.text.setValue(v)},populate:function(){BI.AbstractLabel.superclass.populate.apply(this,arguments)}}),BI.HtmlLabel=BI.inherit(BI.AbstractLabel,{props:{baseCls:"bi-html-label"},_createJson:function(){var o=this.options;return{type:"bi.html",textAlign:o.textAlign,whiteSpace:o.whiteSpace,lineHeight:o.textHeight,text:o.text,value:o.value}}}),BI.shortcut("bi.html_label",BI.HtmlLabel),BI.IconLabel=BI.inherit(BI.Single,{props:{baseCls:"bi-icon-label horizon-center",iconWidth:null,iconHeight:null},_init:function(){BI.IconLabel.superclass._init.apply(this,arguments);var o=this.options;this.element.css({textAlign:"center"}),this.icon=BI.createWidget({type:"bi.icon",width:o.iconWidth,height:o.iconHeight}),BI.isNumber(o.height)&&o.height>0&&BI.isNull(o.iconWidth)&&BI.isNull(o.iconHeight)?(this.element.css("lineHeight",o.height+"px"),BI.createWidget({type:"bi.default",element:this,items:[this.icon]})):(this.element.css("lineHeight","1"),BI.createWidget({element:this,type:"bi.center_adapt",items:[this.icon]}))}}),BI.shortcut("bi.icon_label",BI.IconLabel),BI.Label=BI.inherit(BI.AbstractLabel,{props:{baseCls:"bi-label",py:"",keyword:""},_createJson:function(){var o=this.options;return{type:"bi.text",textAlign:o.textAlign,whiteSpace:o.whiteSpace,lineHeight:o.textHeight,text:o.text,value:o.value,py:o.py,keyword:o.keyword,highLight:o.highLight}},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)}}),BI.shortcut("bi.label",BI.Label),BI.Link=BI.inherit(BI.Label,{_defaultConfig:function(){var conf=BI.Link.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-link display-block",tagName:"a",href:"",target:"_blank"})},_createJson:function(){var o=this.options;return{type:"bi.a",textAlign:o.textAlign,whiteSpace:o.whiteSpace,lineHeight:o.textHeight,text:o.text,keyword:o.keyword,value:o.value,py:o.py,href:o.href,target:o.target}},_init:function(){BI.Link.superclass._init.apply(this,arguments)}}),BI.shortcut("bi.link",BI.Link),BI.Bubble=BI.inherit(BI.Tip,{_defaultConfig:function(){return BI.extend(BI.Bubble.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-bubble",direction:"top",text:"",level:"error",height:18})},_init:function(){BI.Bubble.superclass._init.apply(this,arguments);var fn=function(e){return e.stopPropagation(),e.stopEvent(),!1};this.element.bind({click:fn,mousedown:fn,mouseup:fn,mouseover:fn,mouseenter:fn,mouseleave:fn,mousemove:fn}),BI.createWidget({type:"bi.left",element:this,items:[this["_"+this.options.direction]()]})},_createBubbleText:function(){var o=this.options;return this.text=BI.createWidget({type:"bi.label",cls:"bubble-text bubble-"+o.level,text:o.text,hgap:5,height:18})},_top:function(){return BI.createWidget({type:"bi.vertical",items:[{el:this._createBubbleText(),height:18},{el:{type:"bi.layout"},height:3}]})},_bottom:function(){return BI.createWidget({type:"bi.vertical",items:[{el:{type:"bi.layout"},height:3},{el:this._createBubbleText(),height:18}]})},_left:function(){return BI.createWidget({type:"bi.right",items:[{el:{type:"bi.layout",width:3,height:18}},{el:this._createBubbleText()}]})},_right:function(){return BI.createWidget({type:"bi.left",items:[{el:{type:"bi.layout",width:3,height:18}},{el:this._createBubbleText()}]})},setText:function(text){this.text.setText(text)}}),BI.shortcut("bi.bubble",BI.Bubble),BI.Toast=BI.inherit(BI.Tip,{_const:{minWidth:200,hgap:10},_defaultConfig:function(){return BI.extend(BI.Toast.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-toast",text:"",level:"success"})},_init:function(){BI.Toast.superclass._init.apply(this,arguments);var self=this,o=this.options;this.element.css({minWidth:this._const.minWidth+"px"}),this.element.addClass("toast-"+o.level);var fn=function(e){return e.stopPropagation(),e.stopEvent(),!1};this.element.bind({click:fn,mousedown:fn,mouseup:fn,mouseover:fn,mouseenter:fn,mouseleave:fn,mousemove:fn});var cls="close-font";switch(o.level){case"success":cls="toast-success-font";break;case"error":cls="toast-error-font";break;case"warning":cls="toast-warning-font";break;case"normal":default:cls="toast-message-font"}var items=[{type:"bi.icon_label",cls:cls+" toast-icon",width:36},{el:{type:"bi.label",whiteSpace:"normal",text:o.text,textHeight:16,textAlign:"left"},rgap:o.autoClose?this._const.hgap:0}],columnSize=[36,""];o.autoClose===!1&&(items.push({type:"bi.icon_button",cls:"close-font toast-icon",handler:function(){self.destroy()},width:36}),columnSize.push(36)),this.text=BI.createWidget({type:"bi.horizontal_adapt",element:this,items:items,vgap:7,columnSize:columnSize})},setText:function(text){this.text.setText(text)},beforeDestroy:function(){this.fireEvent(BI.Toast.EVENT_DESTORY)}}),BI.Toast.EVENT_DESTORY="EVENT_DESTORY",BI.shortcut("bi.toast",BI.Toast),BI.Tooltip=BI.inherit(BI.Tip,{_const:{hgap:5,vgap:3},_defaultConfig:function(){return BI.extend(BI.Tooltip.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-tooltip",text:"",level:"success",stopEvent:!1,stopPropagation:!1})},_init:function(){BI.Tooltip.superclass._init.apply(this,arguments);var self=this,o=this.options;this.element.addClass("tooltip-"+o.level);var fn=function(e){o.stopPropagation&&e.stopPropagation(),o.stopEvent&&e.stopEvent()};this.element.bind({click:fn,mousedown:fn,mouseup:fn,mouseover:fn,mouseenter:fn,mouseleave:fn,mousemove:fn});var texts=(o.text+"").split("\n");texts.length>1?BI.createWidget({type:"bi.vertical",element:this,hgap:this._const.hgap,items:BI.map(texts,function(i,text){return{type:"bi.label",textAlign:"left",whiteSpace:"normal",text:text,textHeight:18}})}):this.text=BI.createWidget({type:"bi.label",element:this,textAlign:"left",whiteSpace:"normal",text:o.text,textHeight:18,hgap:this._const.hgap})},setWidth:function(width){this.element.width(width-2*this._const.hgap)},setText:function(text){this.text&&this.text.setText(text)},setLevel:function(level){this.element.removeClass("tooltip-success").removeClass("tooltip-warning"),this.element.addClass("tooltip-"+level)}}),BI.shortcut("bi.tooltip",BI.Tooltip),BI.Trigger=BI.inherit(BI.Single,{_defaultConfig:function(){var conf=BI.Trigger.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{_baseCls:(conf._baseCls||"")+" bi-trigger cursor-pointer",height:24})},_init:function(){BI.Trigger.superclass._init.apply(this,arguments)},setKey:function(){},getKey:function(){}}),BI.CustomTree=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.CustomTree.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-custom-tree",expander:{el:{},popup:{type:"bi.custom_tree"}},items:[],itemsCreator:BI.emptyFn,el:{type:"bi.button_tree",chooseType:0,layouts:[{type:"bi.vertical"}]}})},_init:function(){BI.CustomTree.superclass._init.apply(this,arguments),this.initTree(this.options.items)},_formatItems:function(nodes){var self=this,o=this.options;nodes=BI.Tree.transformToTreeFormat(nodes);var items=[];return BI.each(nodes,function(i,node){if(BI.isNotEmptyArray(node.children)||node.isParent===!0){var item=BI.extend({type:"bi.expander",el:{value:node.value},popup:{type:"bi.custom_tree"}},BI.deepClone(o.expander),{id:node.id,pId:node.pId}),el=BI.stripEL(node);BI.isWidget(el)?item.el=el:(el=BI.clone(el),delete el.children,BI.extend(item.el,el)),item.popup.expander=BI.deepClone(o.expander),item.items=item.popup.items=node.children,item.itemsCreator=item.popup.itemsCreator=function(op){if(BI.isNotNull(op.node))return o.itemsCreator.apply(self,arguments);var args=Array.prototype.slice.call(arguments,0);return args[0].node=node,o.itemsCreator.apply(self,args)},BI.isNull(item.popup.el)&&(item.popup.el=BI.deepClone(o.el)),items.push(item)}else items.push(node)}),items},initTree:function(nodes){var self=this,o=this.options;this.tree=BI.createWidget(o.el,{element:this,items:this._formatItems(nodes),itemsCreator:function(op,callback){o.itemsCreator.apply(this,[op,function(items){var args=Array.prototype.slice.call(arguments,0);args[0]=self._formatItems(items),callback.apply(null,args)}])},value:o.value}),this.tree.on(BI.Controller.EVENT_CHANGE,function(type,val,obj){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.CustomTree.EVENT_CHANGE,val,obj)})},stroke:function(nodes){this.populate.apply(this,arguments)},populate:function(nodes){var args=Array.prototype.slice.call(arguments,0);arguments.length>0&&(args[0]=this._formatItems(nodes)),this.tree.populate.apply(this.tree,args)},setValue:function(v){this.tree&&this.tree.setValue(v)},getValue:function(){return this.tree?this.tree.getValue():[]},getAllButtons:function(){return this.tree?this.tree.getAllButtons():[]},getAllLeaves:function(){return this.tree?this.tree.getAllLeaves():[]},getNodeById:function(id){return this.tree&&this.tree.getNodeById(id)},getNodeByValue:function(id){return this.tree&&this.tree.getNodeByValue(id)},empty:function(){this.tree.empty()}}),BI.CustomTree.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.custom_tree",BI.CustomTree),function($){var settings={},roots={},caches={},_consts={className:{BUTTON:"button",LEVEL:"level",ICO_LOADING:"ico_loading",SWITCH:"switch"},event:{NODECREATED:"ztree_nodeCreated",CLICK:"ztree_click",EXPAND:"ztree_expand",COLLAPSE:"ztree_collapse",ASYNC_SUCCESS:"ztree_async_success",ASYNC_ERROR:"ztree_async_error",REMOVE:"ztree_remove",SELECTED:"ztree_selected",UNSELECTED:"ztree_unselected"},id:{A:"_a",ICON:"_ico",SPAN:"_span",SWITCH:"_switch",UL:"_ul"},line:{ROOT:"root",ROOTS:"roots",CENTER:"center",BOTTOM:"bottom",NOLINE:"noline",LINE:"line"},folder:{OPEN:"open",CLOSE:"close",DOCU:"docu"},node:{CURSELECTED:"curSelectedNode"}},_setting={treeId:"",treeObj:null,view:{addDiyDom:null,autoCancelSelected:!0,dblClickExpand:!0,expandSpeed:"fast", +fontCss:{},nameIsHTML:!1,selectedMulti:!0,showIcon:!0,showLine:!0,showTitle:!0,txtSelectedEnable:!1},data:{key:{children:"children",name:"name",title:"",url:"url"},simpleData:{enable:!1,idKey:"id",pIdKey:"pId",rootPId:null},keep:{parent:!1,leaf:!1}},async:{enable:!1,contentType:"application/x-www-form-urlencoded",type:"post",dataType:"text",url:"",autoParam:[],otherParam:[],dataFilter:null},callback:{beforeAsync:null,beforeClick:null,beforeDblClick:null,beforeRightClick:null,beforeMouseDown:null,beforeMouseUp:null,beforeExpand:null,beforeCollapse:null,beforeRemove:null,onAsyncError:null,onAsyncSuccess:null,onNodeCreated:null,onClick:null,onDblClick:null,onRightClick:null,onMouseDown:null,onMouseUp:null,onExpand:null,onCollapse:null,onRemove:null}},_initRoot=function(setting){var r=data.getRoot(setting);r||(r={},data.setRoot(setting,r)),r[setting.data.key.children]=[],r.expandTriggerFlag=!1,r.curSelectedList=[],r.noSelection=!0,r.createdNodes=[],r.zId=0,r._ver=(new Date).getTime()},_initCache=function(setting){var c=data.getCache(setting);c||(c={},data.setCache(setting,c)),c.nodes=[],c.doms=[]},_bindEvent=function(setting){var o=setting.treeObj,c=consts.event;o.bind(c.NODECREATED,function(event,treeId,node){tools.apply(setting.callback.onNodeCreated,[event,treeId,node])}),o.bind(c.CLICK,function(event,srcEvent,treeId,node,clickFlag){tools.apply(setting.callback.onClick,[srcEvent,treeId,node,clickFlag])}),o.bind(c.EXPAND,function(event,treeId,node){tools.apply(setting.callback.onExpand,[event,treeId,node])}),o.bind(c.COLLAPSE,function(event,treeId,node){tools.apply(setting.callback.onCollapse,[event,treeId,node])}),o.bind(c.ASYNC_SUCCESS,function(event,treeId,node,msg){tools.apply(setting.callback.onAsyncSuccess,[event,treeId,node,msg])}),o.bind(c.ASYNC_ERROR,function(event,treeId,node,XMLHttpRequest,textStatus,errorThrown){tools.apply(setting.callback.onAsyncError,[event,treeId,node,XMLHttpRequest,textStatus,errorThrown])}),o.bind(c.REMOVE,function(event,treeId,treeNode){tools.apply(setting.callback.onRemove,[event,treeId,treeNode])}),o.bind(c.SELECTED,function(event,srcEvent,treeId,node){tools.apply(setting.callback.onSelected,[srcEvent,treeId,node])}),o.bind(c.UNSELECTED,function(event,srcEvent,treeId,node){tools.apply(setting.callback.onUnSelected,[srcEvent,treeId,node])})},_unbindEvent=function(setting){var o=setting.treeObj,c=consts.event;o.unbind(c.NODECREATED).unbind(c.CLICK).unbind(c.EXPAND).unbind(c.COLLAPSE).unbind(c.ASYNC_SUCCESS).unbind(c.ASYNC_ERROR).unbind(c.REMOVE).unbind(c.SELECTED).unbind(c.UNSELECTED)},_eventProxy=function(event){var target=event.target,setting=data.getSetting(event.data.treeId),tId="",node=null,nodeEventType="",treeEventType="",nodeEventCallback=null,treeEventCallback=null,tmp=null;if(tools.eqs(event.type,"mousedown")?treeEventType="mousedown":tools.eqs(event.type,"mouseup")?treeEventType="mouseup":tools.eqs(event.type,"contextmenu")?treeEventType="contextmenu":tools.eqs(event.type,"click")?tools.eqs(target.tagName,"span")&&null!==target.getAttribute("treeNode"+consts.id.SWITCH)?(tId=tools.getNodeMainDom(target).id,nodeEventType="switchNode"):(tmp=tools.getMDom(setting,target,[{tagName:"a",attrName:"treeNode"+consts.id.A}]),tmp&&(tId=tools.getNodeMainDom(tmp).id,nodeEventType="clickNode")):tools.eqs(event.type,"dblclick")&&(treeEventType="dblclick",tmp=tools.getMDom(setting,target,[{tagName:"a",attrName:"treeNode"+consts.id.A}]),tmp&&(tId=tools.getNodeMainDom(tmp).id,nodeEventType="switchNode")),treeEventType.length>0&&0==tId.length&&(tmp=tools.getMDom(setting,target,[{tagName:"a",attrName:"treeNode"+consts.id.A}]),tmp&&(tId=tools.getNodeMainDom(tmp).id)),tId.length>0)switch(node=data.getNodeCache(setting,tId),nodeEventType){case"switchNode":node.isParent&&(tools.eqs(event.type,"click")||tools.eqs(event.type,"dblclick")&&tools.apply(setting.view.dblClickExpand,[setting.treeId,node],setting.view.dblClickExpand))?nodeEventCallback=handler.onSwitchNode:nodeEventType="";break;case"clickNode":nodeEventCallback=handler.onClickNode}switch(treeEventType){case"mousedown":treeEventCallback=handler.onZTreeMousedown;break;case"mouseup":treeEventCallback=handler.onZTreeMouseup;break;case"dblclick":treeEventCallback=handler.onZTreeDblclick;break;case"contextmenu":treeEventCallback=handler.onZTreeContextmenu}var proxyResult={stop:!1,node:node,nodeEventType:nodeEventType,nodeEventCallback:nodeEventCallback,treeEventType:treeEventType,treeEventCallback:treeEventCallback};return proxyResult},_initNode=function(setting,level,n,parentNode,isFirstNode,isLastNode,openFlag){if(n){var r=data.getRoot(setting),childKey=setting.data.key.children;n.level=level,n.tId=setting.treeId+"_"+ ++r.zId,n.parentTId=parentNode?parentNode.tId:null,n.open="string"==typeof n.open?tools.eqs(n.open,"true"):!!n.open,n[childKey]&&n[childKey].length>0?(n.isParent=!0,n.zAsync=!0):(n.isParent="string"==typeof n.isParent?tools.eqs(n.isParent,"true"):!!n.isParent,n.open=!(!n.isParent||setting.async.enable)&&n.open,n.zAsync=!n.isParent),n.isFirstNode=isFirstNode,n.isLastNode=isLastNode,n.getParentNode=function(){return data.getNodeCache(setting,n.parentTId)},n.getPreNode=function(){return data.getPreNode(setting,n)},n.getNextNode=function(){return data.getNextNode(setting,n)},n.isAjaxing=!1,data.fixPIdKeyValue(setting,n)}},_init={bind:[_bindEvent],unbind:[_unbindEvent],caches:[_initCache],nodes:[_initNode],proxys:[_eventProxy],roots:[_initRoot],beforeA:[],afterA:[],innerBeforeA:[],innerAfterA:[],zTreeTools:[]},data={addNodeCache:function(setting,node){data.getCache(setting).nodes[data.getNodeCacheId(node.tId)]=node},getNodeCacheId:function(tId){return tId.substring(tId.lastIndexOf("_")+1)},addAfterA:function(afterA){_init.afterA.push(afterA)},addBeforeA:function(beforeA){_init.beforeA.push(beforeA)},addInnerAfterA:function(innerAfterA){_init.innerAfterA.push(innerAfterA)},addInnerBeforeA:function(innerBeforeA){_init.innerBeforeA.push(innerBeforeA)},addInitBind:function(bindEvent){_init.bind.push(bindEvent)},addInitUnBind:function(unbindEvent){_init.unbind.push(unbindEvent)},addInitCache:function(initCache){_init.caches.push(initCache)},addInitNode:function(initNode){_init.nodes.push(initNode)},addInitProxy:function(initProxy,isFirst){isFirst?_init.proxys.splice(0,0,initProxy):_init.proxys.push(initProxy)},addInitRoot:function(initRoot){_init.roots.push(initRoot)},addNodesData:function(setting,parentNode,nodes){var childKey=setting.data.key.children;parentNode[childKey]||(parentNode[childKey]=[]),parentNode[childKey].length>0&&(parentNode[childKey][parentNode[childKey].length-1].isLastNode=!1,view.setNodeLineIcos(setting,parentNode[childKey][parentNode[childKey].length-1])),parentNode.isParent=!0,parentNode[childKey]=parentNode[childKey].concat(nodes)},addSelectedNode:function(setting,node){var root=data.getRoot(setting);data.isSelectedNode(setting,node)||root.curSelectedList.push(node)},addCreatedNode:function(setting,node){if(setting.callback.onNodeCreated||setting.view.addDiyDom){var root=data.getRoot(setting);root.createdNodes.push(node)}},addZTreeTools:function(zTreeTools){_init.zTreeTools.push(zTreeTools)},exSetting:function(s){$.extend(!0,_setting,s)},fixPIdKeyValue:function(setting,node){setting.data.simpleData.enable&&(node[setting.data.simpleData.pIdKey]=node.parentTId?node.getParentNode()[setting.data.simpleData.idKey]:setting.data.simpleData.rootPId)},getAfterA:function(setting,node,array){for(var i=0,j=_init.afterA.length;i-1&&result.push(nodes[i]),result=result.concat(data.getNodesByParamFuzzy(setting,nodes[i][childKey],key,value));return result},getNodesByFilter:function(setting,nodes,filter,isSingle,invokeParam){if(!nodes)return isSingle?null:[];for(var childKey=setting.data.key.children,result=isSingle?null:[],i=0,l=nodes.length;i0)},clone:function(obj){if(null===obj)return null;var o=tools.isArray(obj)?[]:{};for(var i in obj)o[i]=obj[i]instanceof Date?new Date(obj[i].getTime()):"object"==typeof obj[i]?arguments.callee(obj[i]):obj[i];return o},eqs:function(str1,str2){return str1.toLowerCase()===str2.toLowerCase()},isArray:function(arr){return"[object Array]"===Object.prototype.toString.apply(arr)},$:function(node,exp,setting){return exp&&"string"!=typeof exp&&(setting=exp,exp=""),"string"==typeof node?$(node,setting?setting.treeObj.get(0).ownerDocument:null):$("#"+node.tId+exp,setting?setting.treeObj:null)},getMDom:function(setting,curDom,targetExpr){if(!curDom)return null;for(;curDom&&curDom.id!==setting.treeId;){for(var i=0,l=targetExpr.length;curDom.tagName&&i0},uCanDo:function(setting,e){return!0}},view={addNodes:function(setting,parentNode,newNodes,isSilent){if(!setting.data.keep.leaf||!parentNode||parentNode.isParent)if(tools.isArray(newNodes)||(newNodes=[newNodes]),setting.data.simpleData.enable&&(newNodes=data.transformTozTreeFormat(setting,newNodes)),parentNode){var target_switchObj=$$(parentNode,consts.id.SWITCH,setting),target_icoObj=$$(parentNode,consts.id.ICON,setting),target_ulObj=$$(parentNode,consts.id.UL,setting);parentNode.open||(view.replaceSwitchClass(parentNode,target_switchObj,consts.folder.CLOSE),view.replaceIcoClass(parentNode,target_icoObj,consts.folder.CLOSE),parentNode.open=!1,target_ulObj.css({display:"none"})),data.addNodesData(setting,parentNode,newNodes),view.createNodes(setting,parentNode.level+1,newNodes,parentNode),isSilent||view.expandCollapseParentNode(setting,parentNode,!0)}else data.addNodesData(setting,data.getRoot(setting),newNodes),view.createNodes(setting,0,newNodes,null)},appendNodes:function(setting,level,nodes,parentNode,initFlag,openFlag){if(!nodes)return[];for(var html=[],childKey=setting.data.key.children,i=0,l=nodes.length;i0&&(childHtml=view.appendNodes(setting,level+1,node[childKey],node,initFlag,openFlag&&node.open)),openFlag&&(view.makeDOMNodeMainBefore(html,setting,node),view.makeDOMNodeLine(html,setting,node),data.getBeforeA(setting,node,html),view.makeDOMNodeNameBefore(html,setting,node),data.getInnerBeforeA(setting,node,html),view.makeDOMNodeIcon(html,setting,node),data.getInnerAfterA(setting,node,html),view.makeDOMNodeNameAfter(html,setting,node),data.getAfterA(setting,node,html),node.isParent&&node.open&&view.makeUlHtml(setting,node,html,childHtml.join("")),view.makeDOMNodeMainAfter(html,setting,node),data.addCreatedNode(setting,node))}return html},appendParentULDom:function(setting,node){var html=[],nObj=$$(node,setting);!nObj.get(0)&&node.parentTId&&(view.appendParentULDom(setting,node.getParentNode()),nObj=$$(node,setting));var ulObj=$$(node,consts.id.UL,setting);ulObj.get(0)&&ulObj.remove();var childKey=setting.data.key.children,childHtml=view.appendNodes(setting,node.level+1,node[childKey],node,!1,!0);view.makeUlHtml(setting,node,html,childHtml.join("")),nObj.append(html.join(""))},asyncNode:function(setting,node,isSilent,callback){var i,l;if(node&&!node.isParent)return tools.apply(callback),!1;if(node&&node.isAjaxing)return!1;if(0==tools.apply(setting.callback.beforeAsync,[setting.treeId,node],!0))return tools.apply(callback),!1;if(node){node.isAjaxing=!0;var icoObj=$$(node,consts.id.ICON,setting);icoObj.attr({style:"","class":consts.className.BUTTON+" "+consts.className.ICO_LOADING})}var tmpParam={};for(i=0,l=setting.async.autoParam.length;node&&i1&&(spKey=pKey[1],pKey=pKey[0]),tmpParam[spKey]=node[pKey]}if(tools.isArray(setting.async.otherParam))for(i=0,l=setting.async.otherParam.length;i=0;i--)if(n=list[i],node===n||!node&&(!excludeNode||excludeNode!==n)){if($$(n,consts.id.A,setting).removeClass(consts.node.CURSELECTED),node){data.removeSelectedNode(setting,node),setting.treeObj.trigger(consts.event.UNSELECTED,[event,setting.treeId,n]);break}list.splice(i,1),setting.treeObj.trigger(consts.event.UNSELECTED,[event,setting.treeId,n])}},createNodeCallback:function(setting){if(setting.callback.onNodeCreated||setting.view.addDiyDom)for(var root=data.getRoot(setting);root.createdNodes.length>0;){var node=root.createdNodes.shift();tools.apply(setting.view.addDiyDom,[setting.treeId,node]),setting.callback.onNodeCreated&&setting.treeObj.trigger(consts.event.NODECREATED,[setting.treeId,node])}},createNodes:function(setting,level,nodes,parentNode){if(nodes&&0!=nodes.length){var root=data.getRoot(setting),childKey=setting.data.key.children,openFlag=!parentNode||parentNode.open||!!$$(parentNode[childKey][0],setting).get(0);root.createdNodes=[];var zTreeHtml=view.appendNodes(setting,level,nodes,parentNode,!0,openFlag);if(parentNode){var ulObj=$$(parentNode,consts.id.UL,setting);ulObj.get(0)&&ulObj.append(zTreeHtml.join(""))}else setting.treeObj.append(zTreeHtml.join(""));view.createNodeCallback(setting)}},destroy:function(setting){setting&&(data.initCache(setting),data.initRoot(setting),event.unbindTree(setting),event.unbindEvent(setting),setting.treeObj.empty(),delete settings[setting.treeId])},expandCollapseNode:function(setting,node,expandFlag,animateFlag,callback){var root=data.getRoot(setting),childKey=setting.data.key.children;if(!node)return void tools.apply(callback,[]);if(root.expandTriggerFlag){var _callback=callback;callback=function(){_callback&&_callback(),node.open?setting.treeObj.trigger(consts.event.EXPAND,[setting.treeId,node]):setting.treeObj.trigger(consts.event.COLLAPSE,[setting.treeId,node])},root.expandTriggerFlag=!1}if(!node.open&&node.isParent&&(!$$(node,consts.id.UL,setting).get(0)||node[childKey]&&node[childKey].length>0&&!$$(node[childKey][0],setting).get(0))&&(view.appendParentULDom(setting,node),view.createNodeCallback(setting)),node.open==expandFlag)return void tools.apply(callback,[]);var ulObj=$$(node,consts.id.UL,setting),switchObj=$$(node,consts.id.SWITCH,setting),icoObj=$$(node,consts.id.ICON,setting);node.isParent?(node.open=!node.open,node.iconOpen&&node.iconClose&&icoObj.attr("style",view.makeNodeIcoStyle(setting,node)),node.open?(view.replaceSwitchClass(node,switchObj,consts.folder.OPEN),view.replaceIcoClass(node,icoObj,consts.folder.OPEN),0==animateFlag||""==setting.view.expandSpeed?(ulObj.show(),tools.apply(callback,[])):node[childKey]&&node[childKey].length>0?ulObj.slideDown(setting.view.expandSpeed,callback):(ulObj.show(),tools.apply(callback,[]))):(view.replaceSwitchClass(node,switchObj,consts.folder.CLOSE),view.replaceIcoClass(node,icoObj,consts.folder.CLOSE),0!=animateFlag&&""!=setting.view.expandSpeed&&node[childKey]&&node[childKey].length>0?ulObj.slideUp(setting.view.expandSpeed,callback):(ulObj.hide(),tools.apply(callback,[])))):tools.apply(callback,[])},expandCollapseParentNode:function(setting,node,expandFlag,animateFlag,callback){if(node){if(!node.parentTId)return void view.expandCollapseNode(setting,node,expandFlag,animateFlag,callback);view.expandCollapseNode(setting,node,expandFlag,animateFlag),node.parentTId&&view.expandCollapseParentNode(setting,node.getParentNode(),expandFlag,animateFlag,callback)}},expandCollapseSonNode:function(setting,node,expandFlag,animateFlag,callback){var root=data.getRoot(setting),childKey=setting.data.key.children,treeNodes=node?node[childKey]:root[childKey],selfAnimateSign=!node&&animateFlag,expandTriggerFlag=data.getRoot(setting).expandTriggerFlag;if(data.getRoot(setting).expandTriggerFlag=!1,treeNodes)for(var i=0,l=treeNodes.length;i=0;i--)if(node===list[i])return!0;return!1},makeDOMNodeIcon:function(html,setting,node){var nameStr=data.getNodeName(setting,node),name=setting.view.nameIsHTML?nameStr:nameStr.replace(/&/g,"&").replace(//g,">");html.push("",name,"")},makeDOMNodeLine:function(html,setting,node){html.push("")},makeDOMNodeMainAfter:function(html,setting,node){html.push("")},makeDOMNodeMainBefore:function(html,setting,node){html.push("
  • ")},makeDOMNodeNameAfter:function(html,setting,node){html.push("")},makeDOMNodeNameBefore:function(html,setting,node){var title=data.getNodeTitle(setting,node),url=view.makeNodeUrl(setting,node),fontcss=view.makeNodeFontCss(setting,node),fontStyle=[];for(var f in fontcss)fontStyle.push(f,":",fontcss[f],";");html.push("0?"href='"+url+"'":""," target='",view.makeNodeTarget(node),"' style='",fontStyle.join(""),"'"),tools.apply(setting.view.showTitle,[setting.treeId,node],setting.view.showTitle)&&title&&html.push("title='",title.replace(/'/g,"'").replace(//g,">"),"'"),html.push(">")},makeNodeFontCss:function(setting,node){var fontCss=tools.apply(setting.view.fontCss,[setting.treeId,node],setting.view.fontCss);return fontCss&&"function"!=typeof fontCss?fontCss:{}},makeNodeIcoClass:function(setting,node){var icoCss=["ico"];return node.isAjaxing||(icoCss[0]=(node.iconSkin?node.iconSkin+"_":"")+icoCss[0],node.isParent?icoCss.push(node.open?consts.folder.OPEN:consts.folder.CLOSE):icoCss.push(consts.folder.DOCU)),consts.className.BUTTON+" "+icoCss.join("_")},makeNodeIcoStyle:function(setting,node){var icoStyle=[];if(!node.isAjaxing){var icon=node.isParent&&node.iconOpen&&node.iconClose?node.open?node.iconOpen:node.iconClose:node.icon;icon&&icoStyle.push("background:url(",icon,") 0 0 no-repeat;"),0!=setting.view.showIcon&&tools.apply(setting.view.showIcon,[setting.treeId,node],!0)||icoStyle.push("width:0px;height:0px;")}return icoStyle.join("")},makeNodeLineClass:function(setting,node){var lineClass=[];return setting.view.showLine?0==node.level&&node.isFirstNode&&node.isLastNode?lineClass.push(consts.line.ROOT):0==node.level&&node.isFirstNode?lineClass.push(consts.line.ROOTS):node.isLastNode?lineClass.push(consts.line.BOTTOM):lineClass.push(consts.line.CENTER):lineClass.push(consts.line.NOLINE),node.isParent?lineClass.push(node.open?consts.folder.OPEN:consts.folder.CLOSE):lineClass.push(consts.folder.DOCU),view.makeNodeLineClassEx(node)+lineClass.join("_")},makeNodeLineClassEx:function(node){return consts.className.BUTTON+" "+consts.className.LEVEL+node.level+" "+consts.className.SWITCH+" "},makeNodeTarget:function(node){return node.target||"_blank"},makeNodeUrl:function(setting,node){var urlKey=setting.data.key.url;return node[urlKey]?node[urlKey]:null},makeUlHtml:function(setting,node,html,content){html.push("
      "),html.push(content),html.push("
    ")},makeUlLineClass:function(setting,node){return setting.view.showLine&&!node.isLastNode?consts.line.LINE:""},removeChildNodes:function(setting,node){if(node){var childKey=setting.data.key.children,nodes=node[childKey];if(nodes){for(var i=0,l=nodes.length;i0&&(parentNode[childKey][0].isFirstNode=!0)},setLastNode:function(setting,parentNode){var childKey=setting.data.key.children,childLength=parentNode[childKey].length;childLength>0&&(parentNode[childKey][childLength-1].isLastNode=!0)},removeNode:function(setting,node){var root=data.getRoot(setting),childKey=setting.data.key.children,parentNode=node.parentTId?node.getParentNode():root;if(node.isFirstNode=!1,node.isLastNode=!1,node.getPreNode=function(){return null},node.getNextNode=function(){return null},data.getNodeCache(setting,node.tId)){$$(node,setting).remove(),data.removeNodeCache(setting,node),data.removeSelectedNode(setting,node); +for(var i=0,l=parentNode[childKey].length;i0){var newLast=parentNode[childKey][childLength-1];if(tmp_ulObj=$$(newLast,consts.id.UL,setting),tmp_switchObj=$$(newLast,consts.id.SWITCH,setting),tmp_icoObj=$$(newLast,consts.id.ICON,setting),parentNode==root)if(1==parentNode[childKey].length)view.replaceSwitchClass(newLast,tmp_switchObj,consts.line.ROOT);else{var tmp_first_switchObj=$$(parentNode[childKey][0],consts.id.SWITCH,setting);view.replaceSwitchClass(parentNode[childKey][0],tmp_first_switchObj,consts.line.ROOTS),view.replaceSwitchClass(newLast,tmp_switchObj,consts.line.BOTTOM)}else view.replaceSwitchClass(newLast,tmp_switchObj,consts.line.BOTTOM);tmp_ulObj.removeClass(consts.line.LINE)}}else parentNode.isParent=!1,parentNode.open=!1,tmp_ulObj=$$(parentNode,consts.id.UL,setting),tmp_switchObj=$$(parentNode,consts.id.SWITCH,setting),tmp_icoObj=$$(parentNode,consts.id.ICON,setting),view.replaceSwitchClass(parentNode,tmp_switchObj,consts.folder.DOCU),view.replaceIcoClass(parentNode,tmp_icoObj,consts.folder.DOCU),tmp_ulObj.css("display","none")}},replaceIcoClass:function(node,obj,newName){if(obj&&!node.isAjaxing){var tmpName=obj.attr("class");if(void 0!=tmpName){var tmpList=tmpName.split("_");switch(newName){case consts.folder.OPEN:case consts.folder.CLOSE:case consts.folder.DOCU:tmpList[tmpList.length-1]=newName}obj.attr("class",tmpList.join("_"))}}},replaceSwitchClass:function(node,obj,newName){if(obj){var tmpName=obj.attr("class");if(void 0!=tmpName){var tmpList=tmpName.split("_");switch(newName){case consts.line.ROOT:case consts.line.ROOTS:case consts.line.CENTER:case consts.line.BOTTOM:case consts.line.NOLINE:tmpList[0]=view.makeNodeLineClassEx(node)+newName;break;case consts.folder.OPEN:case consts.folder.CLOSE:case consts.folder.DOCU:tmpList[1]=newName}obj.attr("class",tmpList.join("_")),newName!==consts.folder.DOCU?obj.removeAttr("disabled"):obj.attr("disabled","disabled")}}},selectNode:function(setting,node,addFlag){addFlag||view.cancelPreSelectedNode(setting,null,node),$$(node,consts.id.A,setting).addClass(consts.node.CURSELECTED),data.addSelectedNode(setting,node),setting.treeObj.trigger(consts.event.SELECTED,[event,setting.treeId,node])},setNodeFontCss:function(setting,treeNode){var aObj=$$(treeNode,consts.id.A,setting),fontCss=view.makeNodeFontCss(setting,treeNode);fontCss&&aObj.css(fontCss)},setNodeLineIcos:function(setting,node){if(node){var switchObj=$$(node,consts.id.SWITCH,setting),ulObj=$$(node,consts.id.UL,setting),icoObj=$$(node,consts.id.ICON,setting),ulLine=view.makeUlLineClass(setting,node);0==ulLine.length?ulObj.removeClass(consts.line.LINE):ulObj.addClass(ulLine),switchObj.attr("class",view.makeNodeLineClass(setting,node)),node.isParent?switchObj.removeAttr("disabled"):switchObj.attr("disabled","disabled"),icoObj.removeAttr("style"),icoObj.attr("style",view.makeNodeIcoStyle(setting,node)),icoObj.attr("class",view.makeNodeIcoClass(setting,node))}},setNodeName:function(setting,node){var title=data.getNodeTitle(setting,node),nObj=$$(node,consts.id.SPAN,setting);if(nObj.empty(),setting.view.nameIsHTML?nObj.html(data.getNodeName(setting,node)):nObj.text(data.getNodeName(setting,node)),tools.apply(setting.view.showTitle,[setting.treeId,node],setting.view.showTitle)){var aObj=$$(node,consts.id.A,setting);aObj.attr("title",title?title:"")}},setNodeTarget:function(setting,node){var aObj=$$(node,consts.id.A,setting);aObj.attr("target",view.makeNodeTarget(node))},setNodeUrl:function(setting,node){var aObj=$$(node,consts.id.A,setting),url=view.makeNodeUrl(setting,node);null==url||0==url.length?aObj.removeAttr("href"):aObj.attr("href",url)},switchNode:function(setting,node){if(node.open||!tools.canAsync(setting,node))view.expandCollapseNode(setting,node,!node.open);else if(setting.async.enable){if(!view.asyncNode(setting,node))return void view.expandCollapseNode(setting,node,!node.open)}else node&&view.expandCollapseNode(setting,node,!node.open)}};$.fn.zTree={consts:_consts,_z:{tools:tools,view:view,event:event,data:data},getZTreeObj:function(treeId){var o=data.getZTreeTools(treeId);return o?o:null},destroy:function(treeId){if(treeId&&treeId.length>0)view.destroy(data.getSetting(treeId));else for(var s in settings)view.destroy(settings[s])},init:function(obj,zSetting,zNodes){var setting=tools.clone(_setting);$.extend(!0,setting,zSetting),setting.treeId=obj.attr("id"),setting.treeObj=obj,setting.treeObj.empty(),settings[setting.treeId]=setting,"undefined"==typeof document.body.style.maxHeight&&(setting.view.expandSpeed=""),data.initRoot(setting);var root=data.getRoot(setting),childKey=setting.data.key.children;zNodes=zNodes?tools.clone(tools.isArray(zNodes)?zNodes:[zNodes]):[],setting.data.simpleData.enable?root[childKey]=data.transformTozTreeFormat(setting,zNodes):root[childKey]=zNodes,data.initCache(setting),event.unbindTree(setting),event.bindTree(setting),event.unbindEvent(setting),event.bindEvent(setting);var zTreeTools={setting:setting,addNodes:function(parentNode,newNodes,isSilent){function addCallback(){view.addNodes(setting,parentNode,xNewNodes,1==isSilent)}if(!newNodes)return null;if(parentNode||(parentNode=null),parentNode&&!parentNode.isParent&&setting.data.keep.leaf)return null;var xNewNodes=tools.clone(tools.isArray(newNodes)?newNodes:[newNodes]);return tools.canAsync(setting,parentNode)?view.asyncNode(setting,parentNode,isSilent,addCallback):addCallback(),xNewNodes},cancelSelectedNode:function(node){view.cancelPreSelectedNode(setting,node)},destroy:function(){view.destroy(setting)},expandAll:function(expandFlag){return expandFlag=!!expandFlag,view.expandCollapseSonNode(setting,null,expandFlag,!0),expandFlag},expandNode:function(node,expandFlag,sonSign,focus,callbackFlag){if(!node||!node.isParent)return null;if(expandFlag!==!0&&expandFlag!==!1&&(expandFlag=!node.open),callbackFlag=!!callbackFlag,callbackFlag&&expandFlag&&0==tools.apply(setting.callback.beforeExpand,[setting.treeId,node],!0))return null;if(callbackFlag&&!expandFlag&&0==tools.apply(setting.callback.beforeCollapse,[setting.treeId,node],!0))return null;if(expandFlag&&node.parentTId&&view.expandCollapseParentNode(setting,node.getParentNode(),expandFlag,!1),expandFlag===node.open&&!sonSign)return null;if(data.getRoot(setting).expandTriggerFlag=callbackFlag,!tools.canAsync(setting,node)&&sonSign)view.expandCollapseSonNode(setting,node,expandFlag,!0,function(){if(focus!==!1)try{$$(node,setting).focus().blur()}catch(e){}});else if(node.open=!expandFlag,view.switchNode(this.setting,node),focus!==!1)try{$$(node,setting).focus().blur()}catch(e){}return expandFlag},getNodes:function(){return data.getNodes(setting)},getNodeByParam:function(key,value,parentNode){return key?data.getNodeByParam(setting,parentNode?parentNode[setting.data.key.children]:data.getNodes(setting),key,value):null},getNodeByTId:function(tId){return data.getNodeCache(setting,tId)},getNodesByParam:function(key,value,parentNode){return key?data.getNodesByParam(setting,parentNode?parentNode[setting.data.key.children]:data.getNodes(setting),key,value):null},getNodesByParamFuzzy:function(key,value,parentNode){return key?data.getNodesByParamFuzzy(setting,parentNode?parentNode[setting.data.key.children]:data.getNodes(setting),key,value):null},getNodesByFilter:function(filter,isSingle,parentNode,invokeParam){return isSingle=!!isSingle,filter&&"function"==typeof filter?data.getNodesByFilter(setting,parentNode?parentNode[setting.data.key.children]:data.getNodes(setting),filter,isSingle,invokeParam):isSingle?null:[]},getNodeIndex:function(node){if(!node)return null;for(var childKey=setting.data.key.children,parentNode=node.parentTId?node.getParentNode():data.getRoot(setting),i=0,l=parentNode[childKey].length;i0?view.createNodes(setting,0,root[childKey]):setting.async.enable&&setting.async.url&&""!==setting.async.url&&view.asyncNode(setting),zTreeTools}};var zt=$.fn.zTree,$$=tools.$,consts=zt.consts}(BI.jQuery),function($){var _consts={event:{CHECK:"ztree_check"},id:{CHECK:"_check"},checkbox:{STYLE:"checkbox",DEFAULT:"chk",DISABLED:"disable",FALSE:"false",TRUE:"true",FULL:"full",PART:"part",FOCUS:"focus"},radio:{STYLE:"radio",TYPE_ALL:"all",TYPE_LEVEL:"level"}},_setting={check:{enable:!1,autoCheckTrigger:!1,chkStyle:_consts.checkbox.STYLE,nocheckInherit:!1,chkDisabledInherit:!1,radioType:_consts.radio.TYPE_LEVEL,chkboxType:{Y:"ps",N:"ps"}},data:{key:{checked:"checked"}},callback:{beforeCheck:null,onCheck:null}},_initRoot=function(setting){var r=data.getRoot(setting);r.radioCheckedList=[]},_initCache=function(treeId){},_bindEvent=function(setting){var o=setting.treeObj,c=consts.event;o.bind(c.CHECK,function(event,srcEvent,treeId,node){event.srcEvent=srcEvent,tools.apply(setting.callback.onCheck,[event,treeId,node])})},_unbindEvent=function(setting){var o=setting.treeObj,c=consts.event;o.unbind(c.CHECK)},_eventProxy=function(e){var target=e.target,setting=data.getSetting(e.data.treeId),tId="",node=null,nodeEventType="",treeEventType="",nodeEventCallback=null,treeEventCallback=null;if(tools.eqs(e.type,"mouseover")?setting.check.enable&&tools.eqs(target.tagName,"span")&&null!==target.getAttribute("treeNode"+consts.id.CHECK)&&(tId=tools.getNodeMainDom(target).id,nodeEventType="mouseoverCheck"):tools.eqs(e.type,"mouseout")?setting.check.enable&&tools.eqs(target.tagName,"span")&&null!==target.getAttribute("treeNode"+consts.id.CHECK)&&(tId=tools.getNodeMainDom(target).id,nodeEventType="mouseoutCheck"):tools.eqs(e.type,"click")&&setting.check.enable&&tools.eqs(target.tagName,"span")&&null!==target.getAttribute("treeNode"+consts.id.CHECK)&&(tId=tools.getNodeMainDom(target).id,nodeEventType="checkNode"),tId.length>0)switch(node=data.getNodeCache(setting,tId),nodeEventType){case"checkNode":nodeEventCallback=_handler.onCheckNode;break;case"mouseoverCheck":nodeEventCallback=_handler.onMouseoverCheck;break;case"mouseoutCheck":nodeEventCallback=_handler.onMouseoutCheck}var proxyResult={stop:"checkNode"===nodeEventType,node:node,nodeEventType:nodeEventType,nodeEventCallback:nodeEventCallback,treeEventType:treeEventType,treeEventCallback:treeEventCallback};return proxyResult},_initNode=function(setting,level,n,parentNode,isFirstNode,isLastNode,openFlag){if(n){var checkedKey=setting.data.key.checked;if("string"==typeof n[checkedKey]&&(n[checkedKey]=tools.eqs(n[checkedKey],"true")),n[checkedKey]=!!n[checkedKey],n.checkedOld=n[checkedKey],"string"==typeof n.nocheck&&(n.nocheck=tools.eqs(n.nocheck,"true")),n.nocheck=!!n.nocheck||setting.check.nocheckInherit&&parentNode&&!!parentNode.nocheck,"string"==typeof n.chkDisabled&&(n.chkDisabled=tools.eqs(n.chkDisabled,"true")),n.chkDisabled=!!n.chkDisabled||setting.check.chkDisabledInherit&&parentNode&&!!parentNode.chkDisabled,"string"==typeof n.halfCheck&&(n.halfCheck=tools.eqs(n.halfCheck,"true")),n.halfCheck=!!n.halfCheck,n.check_Child_State=-1,n.check_Focus=!1,n.getCheckStatus=function(){return data.getCheckStatus(setting,n)},setting.check.chkStyle==consts.radio.STYLE&&setting.check.radioType==consts.radio.TYPE_ALL&&n[checkedKey]){var r=data.getRoot(setting);r.radioCheckedList.push(n)}}},_beforeA=function(setting,node,html){var checkedKey=setting.data.key.checked;setting.check.enable&&(data.makeChkFlag(setting,node),html.push(""))},_zTreeTools=function(setting,zTreeTools){zTreeTools.checkNode=function(node,checked,checkTypeFlag,callbackFlag){var checkedKey=this.setting.data.key.checked;if(node.chkDisabled!==!0&&(checked!==!0&&checked!==!1&&(checked=!node[checkedKey]),callbackFlag=!!callbackFlag,(node[checkedKey]!==checked||checkTypeFlag)&&(!callbackFlag||0!=tools.apply(this.setting.callback.beforeCheck,[this.setting.treeId,node],!0))&&tools.uCanDo(this.setting)&&this.setting.check.enable&&node.nocheck!==!0)){node[checkedKey]=checked;var checkObj=$$(node,consts.id.CHECK,this.setting);(checkTypeFlag||this.setting.check.chkStyle===consts.radio.STYLE)&&view.checkNodeRelation(this.setting,node),view.setChkClass(this.setting,checkObj,node),view.repairParentChkClassWithSelf(this.setting,node),callbackFlag&&this.setting.treeObj.trigger(consts.event.CHECK,[null,this.setting.treeId,node])}},zTreeTools.checkAllNodes=function(checked){view.repairAllChk(this.setting,!!checked)},zTreeTools.getCheckedNodes=function(checked){var childKey=this.setting.data.key.children;return checked=checked!==!1,data.getTreeCheckedNodes(this.setting,data.getRoot(this.setting)[childKey],checked)},zTreeTools.getChangeCheckedNodes=function(){var childKey=this.setting.data.key.children;return data.getTreeChangeCheckedNodes(this.setting,data.getRoot(this.setting)[childKey])},zTreeTools.setChkDisabled=function(node,disabled,inheritParent,inheritChildren){disabled=!!disabled,inheritParent=!!inheritParent,inheritChildren=!!inheritChildren,view.repairSonChkDisabled(this.setting,node,disabled,inheritChildren),view.repairParentChkDisabled(this.setting,node.getParentNode(),disabled,inheritParent)};var _updateNode=zTreeTools.updateNode;zTreeTools.updateNode=function(node,checkTypeFlag){if(_updateNode&&_updateNode.apply(zTreeTools,arguments),node&&this.setting.check.enable){var nObj=$$(node,this.setting);if(nObj.get(0)&&tools.uCanDo(this.setting)){var checkObj=$$(node,consts.id.CHECK,this.setting);1!=checkTypeFlag&&this.setting.check.chkStyle!==consts.radio.STYLE||view.checkNodeRelation(this.setting,node),view.setChkClass(this.setting,checkObj,node),view.repairParentChkClassWithSelf(this.setting,node)}}}},_data={getRadioCheckedList:function(setting){for(var checkedList=data.getRoot(setting).radioCheckedList,i=0,j=checkedList.length;i-1&&node.check_Child_State<2:node.check_Child_State>0};return r},getTreeCheckedNodes:function(setting,nodes,checked,results){if(!nodes)return[];var childKey=setting.data.key.children,checkedKey=setting.data.key.checked,onlyOne=checked&&setting.check.chkStyle==consts.radio.STYLE&&setting.check.radioType==consts.radio.TYPE_ALL;results=results?results:[];for(var i=0,l=nodes.length;i0));i++);return results},getTreeChangeCheckedNodes:function(setting,nodes,results){if(!nodes)return[];var childKey=setting.data.key.children,checkedKey=setting.data.key.checked;results=results?results:[];for(var i=0,l=nodes.length;i0?2:0,2==tmp){chkFlag=2;break}0==tmp&&(chkFlag=0)}else if(setting.check.chkStyle==consts.checkbox.STYLE){if(tmp=cNode.nocheck===!0||cNode.chkDisabled===!0?cNode.check_Child_State:cNode.halfCheck===!0?1:cNode[checkedKey]?cNode.check_Child_State===-1||2===cNode.check_Child_State?2:1:cNode.check_Child_State>0?1:0,1===tmp){chkFlag=1;break}if(2===tmp&&chkFlag>-1&&i>0&&tmp!==chkFlag){chkFlag=1;break}if(2===chkFlag&&tmp>-1&&tmp<2){chkFlag=1;break}tmp>-1&&(chkFlag=tmp)}}node.check_Child_State=chkFlag}}},_event={},_handler={onCheckNode:function(event,node){if(node.chkDisabled===!0)return!1;var setting=data.getSetting(event.data.treeId),checkedKey=setting.data.key.checked;if(0==tools.apply(setting.callback.beforeCheck,[setting.treeId,node],!0))return!0;node[checkedKey]=!node[checkedKey],view.checkNodeRelation(setting,node);var checkObj=$$(node,consts.id.CHECK,setting);return view.setChkClass(setting,checkObj,node),view.repairParentChkClassWithSelf(setting,node),setting.treeObj.trigger(consts.event.CHECK,[event,setting.treeId,node]),!0},onMouseoverCheck:function(event,node){if(node.chkDisabled===!0)return!1;var setting=data.getSetting(event.data.treeId),checkObj=$$(node,consts.id.CHECK,setting);return node.check_Focus=!0,view.setChkClass(setting,checkObj,node),!0},onMouseoutCheck:function(event,node){if(node.chkDisabled===!0)return!1;var setting=data.getSetting(event.data.treeId),checkObj=$$(node,consts.id.CHECK,setting);return node.check_Focus=!1,view.setChkClass(setting,checkObj,node),!0}},_tools={},_view={checkNodeRelation:function(setting,node){var pNode,i,l,childKey=setting.data.key.children,checkedKey=setting.data.key.checked,r=consts.radio;if(setting.check.chkStyle==r.STYLE){var checkedList=data.getRadioCheckedList(setting);if(node[checkedKey])if(setting.check.radioType==r.TYPE_ALL){for(i=checkedList.length-1;i>=0;i--)pNode=checkedList[i],pNode[checkedKey]&&pNode!=node&&(pNode[checkedKey]=!1,checkedList.splice(i,1),view.setChkClass(setting,$$(pNode,consts.id.CHECK,setting),pNode),pNode.parentTId!=node.parentTId&&view.repairParentChkClassWithSelf(setting,pNode));checkedList.push(node)}else{var parentNode=node.parentTId?node.getParentNode():data.getRoot(setting);for(i=0,l=parentNode[childKey].length;i-1)&&view.setSonNodeCheckBox(setting,node,!0),node[checkedKey]||node[childKey]&&0!=node[childKey].length&&!(setting.check.chkboxType.N.indexOf("s")>-1)||view.setSonNodeCheckBox(setting,node,!1),node[checkedKey]&&setting.check.chkboxType.Y.indexOf("p")>-1&&view.setParentNodeCheckBox(setting,node,!0),!node[checkedKey]&&setting.check.chkboxType.N.indexOf("p")>-1&&view.setParentNodeCheckBox(setting,node,!1)},makeChkClass:function(setting,node){var checkedKey=setting.data.key.checked,c=consts.checkbox,r=consts.radio,checkboxType=setting.check.chkboxType,notEffectByOtherNode=""===checkboxType.Y&&""===checkboxType.N;fullStyle="",node.chkDisabled===!0?fullStyle=c.DISABLED:node.halfCheck?fullStyle=c.PART:setting.check.chkStyle==r.STYLE?fullStyle=node.check_Child_State<1?c.FULL:c.PART:fullStyle=node[checkedKey]?2===node.check_Child_State||node.check_Child_State===-1||notEffectByOtherNode?c.FULL:c.PART:node.check_Child_State<1||notEffectByOtherNode?c.FULL:c.PART;var chkName=setting.check.chkStyle+"_"+(node[checkedKey]?c.TRUE:c.FALSE)+"_"+fullStyle;return chkName=node.check_Focus&&node.chkDisabled!==!0?chkName+"_"+c.FOCUS:chkName,consts.className.BUTTON+" "+c.DEFAULT+" "+chkName},repairAllChk:function(setting,checked){if(setting.check.enable&&setting.check.chkStyle===consts.checkbox.STYLE)for(var checkedKey=setting.data.key.checked,childKey=setting.data.key.children,root=data.getRoot(setting),i=0,l=root[childKey].length;i0?view.repairParentChkClass(setting,node[childKey][0]):view.repairParentChkClass(setting,node)}},repairSonChkDisabled:function(setting,node,chkDisabled,inherit){if(node){var childKey=setting.data.key.children;if(node.chkDisabled!=chkDisabled&&(node.chkDisabled=chkDisabled),view.repairChkClass(setting,node),node[childKey]&&inherit)for(var i=0,l=node[childKey].length;i0){pSign=!1;break}pSign&&view.setParentNodeCheckBox(setting,node.getParentNode(),value,srcNode)}},setSonNodeCheckBox:function(setting,node,value,srcNode){if(node){var childKey=setting.data.key.children,checkedKey=setting.data.key.checked,checkObj=$$(node,consts.id.CHECK,setting);srcNode||(srcNode=node);var hasDisable=!1;if(node[childKey])for(var i=0,l=node[childKey].length;i0?value?2:0:-1)):node.check_Child_State=-1,view.setChkClass(setting,checkObj,node),setting.check.autoCheckTrigger&&node!=srcNode&&node.nocheck!==!0&&node.chkDisabled!==!0&&setting.treeObj.trigger(consts.event.CHECK,[null,setting.treeId,node]))}}},_z={tools:_tools,view:_view,event:_event,data:_data};$.extend(!0,$.fn.zTree.consts,_consts),$.extend(!0,$.fn.zTree._z,_z);var zt=$.fn.zTree,tools=zt._z.tools,consts=zt.consts,view=zt._z.view,data=zt._z.data,event=zt._z.event,$$=tools.$;data.exSetting(_setting),data.addInitBind(_bindEvent),data.addInitUnBind(_unbindEvent),data.addInitCache(_initCache),data.addInitNode(_initNode),data.addInitProxy(_eventProxy,!0),data.addInitRoot(_initRoot),data.addBeforeA(_beforeA),data.addZTreeTools(_zTreeTools);var _createNodes=view.createNodes;view.createNodes=function(setting,level,nodes,parentNode){_createNodes&&_createNodes.apply(view,arguments),nodes&&view.repairParentChkClassWithSelf(setting,parentNode)};var _removeNode=view.removeNode;view.removeNode=function(setting,node){var parentNode=node.getParentNode();_removeNode&&_removeNode.apply(view,arguments),node&&parentNode&&(view.repairChkClass(setting,parentNode),view.repairParentChkClass(setting,parentNode))};var _appendNodes=view.appendNodes;view.appendNodes=function(setting,level,nodes,parentNode,initFlag,openFlag){var html="";return _appendNodes&&(html=_appendNodes.apply(view,arguments)),parentNode&&data.makeChkFlag(setting,parentNode),html}}(BI.jQuery),BI.IconChangeButton=BI.inherit(BI.Single,{_defaultConfig:function(){var conf=BI.IconChangeButton.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-icon-change-button",iconCls:"",iconWidth:null,iconHeight:null,stopEvent:!1,stopPropagation:!1,selected:!1,once:!1,forceSelected:!1,forceNotSelected:!1,disableSelected:!1,shadow:!1,isShadowShowingOnSelected:!1,trigger:null,handler:BI.emptyFn})},_init:function(){BI.IconChangeButton.superclass._init.apply(this,arguments);var self=this,o=this.options;this.button=BI.createWidget({type:"bi.icon_button",element:this,cls:o.iconCls,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight,stopEvent:o.stopEvent,stopPropagation:o.stopPropagation,selected:o.selected,once:o.once,forceSelected:o.forceSelected,forceNotSelected:o.forceNotSelected,disableSelected:o.disableSelected,shadow:o.shadow,isShadowShowingOnSelected:o.isShadowShowingOnSelected,trigger:o.trigger,handler:o.handler}),this.button.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.button.on(BI.IconButton.EVENT_CHANGE,function(){self.fireEvent(BI.IconChangeButton.EVENT_CHANGE,arguments)})},isSelected:function(){return this.button.isSelected()},setSelected:function(b){this.button.setSelected(b)},setIcon:function(cls){var o=this.options;o.iconCls!==cls&&(this.element.removeClass(o.iconCls).addClass(cls),o.iconCls=cls)}}),BI.IconChangeButton.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.icon_change_button",BI.IconChangeButton),BI.TriggerIconButton=BI.inherit(BI.IconButton,{_defaultConfig:function(){var conf=BI.TriggerIconButton.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-trigger-icon-button",extraCls:"pull-down-font"})}}),BI.TriggerIconButton.EVENT_CHANGE=BI.IconButton.EVENT_CHANGE,BI.shortcut("bi.trigger_icon_button",BI.TriggerIconButton),BI.HalfIconButton=BI.inherit(BI.IconButton,{_defaultConfig:function(){var conf=BI.HalfIconButton.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-half-icon-button check-half-select-icon",height:16,width:16,iconWidth:16,iconHeight:16,selected:!1})}}),BI.HalfIconButton.EVENT_CHANGE=BI.IconButton.EVENT_CHANGE,BI.shortcut("bi.half_icon_button",BI.HalfIconButton),BI.HalfButton=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.HalfIconButton.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-half-button bi-high-light-border",height:14,width:14,selected:!1})},_init:function(){BI.HalfButton.superclass._init.apply(this,arguments),BI.createWidget({type:"bi.center_adapt",element:this.element,items:[{type:"bi.layout",cls:"bi-high-light-background",width:8,height:8}]})},doClick:function(){BI.HalfButton.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.HalfButton.EVENT_CHANGE)}}),BI.HalfButton.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.half_button",BI.HalfButton),BI.MultiSelectItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.MultiSelectItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-multi-select-item",height:24,logic:{dynamic:!1},iconWrapperWidth:26})},_init:function(){BI.MultiSelectItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.checkbox"}),this.text=BI.createWidget({type:"bi.label",cls:"list-item-text",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,rgap:o.rgap,text:o.text,keyword:o.keyword,value:o.value,py:o.py}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&self.setSelected(self.isSelected())}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("horizontal",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("left",{type:"bi.center_adapt",items:[this.checkbox],width:o.iconWrapperWidth},this.text)}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.MultiSelectItem.superclass.doClick.apply(this,arguments),this.checkbox.setSelected(this.isSelected()),this.isValid()&&this.fireEvent(BI.MultiSelectItem.EVENT_CHANGE,this.getValue(),this)},setSelected:function(v){BI.MultiSelectItem.superclass.setSelected.apply(this,arguments),this.checkbox.setSelected(v)}}),BI.MultiSelectItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_select_item",BI.MultiSelectItem),BI.SingleSelectIconTextItem=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.SingleSelectIconTextItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-single-select-icon-text-item bi-list-item-active",iconCls:"",height:24})},_init:function(){BI.SingleSelectIconTextItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.text=BI.createWidget({type:"bi.icon_text_item",element:this,cls:o.iconCls,once:o.once,iconWrapperWidth:o.iconWrapperWidth,selected:o.selected,height:o.height,iconHeight:o.iconHeight, +iconWidth:o.iconWidth,text:o.text,keyword:o.keyword,value:o.value,py:o.py}),this.text.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)})},isSelected:function(){return this.text.isSelected()},setSelected:function(b){this.text.setSelected(b)},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.SingleSelectIconTextItem.superclass.doClick.apply(this,arguments)}}),BI.shortcut("bi.single_select_icon_text_item",BI.SingleSelectIconTextItem),BI.SingleSelectItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.SingleSelectItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-single-select-item bi-list-item-active",hgap:10,height:24,textAlign:"left"})},_init:function(){BI.SingleSelectItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.text=BI.createWidget({type:"bi.label",element:this,textAlign:o.textAlign,whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,keyword:o.keyword,value:o.value,title:o.title||o.text,warningTitle:o.warningTitle,py:o.py})},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.SingleSelectItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.SingleSelectItem.EVENT_CHANGE,this.isSelected(),this)},setSelected:function(v){BI.SingleSelectItem.superclass.setSelected.apply(this,arguments)}}),BI.SingleSelectItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.single_select_item",BI.SingleSelectItem),BI.SingleSelectRadioItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.SingleSelectRadioItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-single-select-radio-item",logic:{dynamic:!1},hgap:10,height:24})},_init:function(){BI.SingleSelectRadioItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.radio=BI.createWidget({type:"bi.radio"}),this.text=BI.createWidget({type:"bi.label",cls:"list-item-text",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,keyword:o.keyword,value:o.value,py:o.py}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("horizontal",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("left",{type:"bi.center_adapt",items:[this.radio],width:16},this.text)}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.SingleSelectRadioItem.superclass.doClick.apply(this,arguments),this.radio.setSelected(this.isSelected()),this.isValid()&&this.fireEvent(BI.SingleSelectRadioItem.EVENT_CHANGE,this.isSelected(),this)},setSelected:function(v){BI.SingleSelectRadioItem.superclass.setSelected.apply(this,arguments),this.radio.setSelected(v)}}),BI.SingleSelectRadioItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.single_select_radio_item",BI.SingleSelectRadioItem),BI.ArrowNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.ArrowNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-arrow-group-node bi-list-item",logic:{dynamic:!1},id:"",pId:"",open:!1,height:24})},_init:function(){var self=this,o=this.options;BI.ArrowNode.superclass._init.apply(this,arguments),this.checkbox=BI.createWidget({type:"bi.arrow_group_node_checkbox"}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&self.setSelected(self.isSelected()),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,{width:16,el:this.checkbox},this.text);BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.ArrowNode.superclass.doClick.apply(this,arguments),this.checkbox.setSelected(this.isOpened())},setText:function(text){BI.ArrowNode.superclass.setText.apply(this,arguments),this.text.setText(text)},setOpened:function(v){BI.ArrowNode.superclass.setOpened.apply(this,arguments),this.checkbox.setSelected(v)}}),BI.shortcut("bi.arrow_group_node",BI.ArrowNode),BI.FirstPlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.FirstPlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-first-plus-group-node bi-list-item",logic:{dynamic:!1},id:"",pId:"",open:!1,height:24})},_init:function(){BI.FirstPlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.first_tree_node_checkbox",stopPropagation:!0}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&(this.isSelected()?self.triggerExpand():self.triggerCollapse())});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,{width:24,el:this.checkbox},this.text);BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.FirstPlusGroupNode.superclass.doClick.apply(this,arguments),this.checkbox.setSelected(this.isSelected())},setOpened:function(v){BI.FirstPlusGroupNode.superclass.setOpened.apply(this,arguments),BI.isNotNull(this.checkbox)&&this.checkbox.setSelected(v)}}),BI.shortcut("bi.first_plus_group_node",BI.FirstPlusGroupNode),BI.IconArrowNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.IconArrowNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-icon-arrow-node bi-list-item",logic:{dynamic:!1},id:"",pId:"",open:!1,height:24,iconHeight:12,iconWidth:12,iconCls:""})},_init:function(){BI.IconArrowNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.arrow_group_node_checkbox",width:24,stopPropagation:!0});var icon=BI.createWidget({type:"bi.icon_label",width:24,cls:o.iconCls,iconWidth:o.iconWidth,iconHeight:o.iconHeight});this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&(this.isSelected()?self.triggerExpand():self.triggerCollapse())});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,{width:16,el:this.checkbox},{width:16,el:icon},this.text);BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items,rgap:5}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.IconArrowNode.superclass.doClick.apply(this,arguments),this.checkbox.setSelected(this.isSelected())},setOpened:function(v){BI.IconArrowNode.superclass.setOpened.apply(this,arguments),BI.isNotNull(this.checkbox)&&this.checkbox.setSelected(v)}}),BI.shortcut("bi.icon_arrow_node",BI.IconArrowNode),BI.LastPlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.LastPlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-last-plus-group-node bi-list-item",logic:{dynamic:!1},id:"",pId:"",open:!1,height:24})},_init:function(){BI.LastPlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.last_tree_node_checkbox",stopPropagation:!0}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&(this.isSelected()?self.triggerExpand():self.triggerCollapse())});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,{width:24,el:this.checkbox},this.text);BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.LastPlusGroupNode.superclass.doClick.apply(this,arguments),this.checkbox.setSelected(this.isSelected())},setOpened:function(v){BI.LastPlusGroupNode.superclass.setOpened.apply(this,arguments),BI.isNotNull(this.checkbox)&&this.checkbox.setSelected(v)}}),BI.shortcut("bi.last_plus_group_node",BI.LastPlusGroupNode),BI.MidPlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.MidPlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-mid-plus-group-node bi-list-item",logic:{dynamic:!1},id:"",pId:"",open:!1,height:24})},_init:function(){BI.MidPlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.mid_tree_node_checkbox",stopPropagation:!0}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&(this.isSelected()?self.triggerExpand():self.triggerCollapse())});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,{width:24,el:this.checkbox},this.text);BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.MidPlusGroupNode.superclass.doClick.apply(this,arguments),this.checkbox.setSelected(this.isSelected())},setOpened:function(v){BI.MidPlusGroupNode.superclass.setOpened.apply(this,arguments),BI.isNotNull(this.checkbox)&&this.checkbox.setSelected(v)}}),BI.shortcut("bi.mid_plus_group_node",BI.MidPlusGroupNode),BI.MultiLayerIconArrowNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.MultiLayerIconArrowNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-multilayer-icon-arrow-node bi-list-item",layer:0,id:"",pId:"",open:!1,height:24,iconHeight:16,iconWidth:16,iconCls:""})},_init:function(){BI.MultiLayerIconArrowNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.node=BI.createWidget({type:"bi.icon_arrow_node",iconCls:o.iconCls,cls:"bi-list-item-none",id:o.id,pId:o.pId,open:o.open,height:o.height,iconHeight:o.iconHeight,iconWidth:o.iconWidth,hgap:o.hgap,text:o.text,value:o.value,py:o.py}),this.node.on(BI.Controller.EVENT_CHANGE,function(type){self.setSelected(self.isSelected()),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});var items=[];BI.count(0,o.layer,function(){items.push({type:"bi.layout",width:15,height:o.height})}),items.push(this.node),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,15),items:[items]})},isOnce:function(){return!0},doRedMark:function(){this.node.doRedMark.apply(this.node,arguments)},unRedMark:function(){this.node.unRedMark.apply(this.node,arguments)},isSelected:function(){return this.node.isSelected()},setSelected:function(b){BI.MultiLayerIconArrowNode.superclass.setSelected.apply(this,arguments),this.node.setSelected(b)},doClick:function(){BI.NodeButton.superclass.doClick.apply(this,arguments),this.node.setSelected(this.isSelected())},setOpened:function(v){BI.MultiLayerIconArrowNode.superclass.setOpened.apply(this,arguments),this.node.setOpened(v)}}),BI.shortcut("bi.multilayer_icon_arrow_node",BI.MultiLayerIconArrowNode),BI.PlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.PlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-plus-group-node bi-list-item",logic:{dynamic:!1},id:"",pId:"",open:!1,height:24})},_init:function(){BI.PlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.tree_node_checkbox"}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,keyword:o.keyword,py:o.py}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&self.setSelected(self.isSelected()),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,{width:24,el:this.checkbox},this.text);BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.PlusGroupNode.superclass.doClick.apply(this,arguments),this.checkbox.setSelected(this.isSelected())},setOpened:function(v){BI.PlusGroupNode.superclass.setOpened.apply(this,arguments),this.checkbox&&this.checkbox.setSelected(v)}}),BI.shortcut("bi.plus_group_node",BI.PlusGroupNode),BI.Switch=BI.inherit(BI.BasicButton,{props:{extraCls:"bi-switch",height:22,width:44,logic:{dynamic:!1}},render:function(){var self=this;return{type:"bi.absolute",ref:function(){self.layout=this},items:[{el:{type:"bi.text_button",cls:"circle-button bi-card"},width:18,height:18,top:2,left:this.options.selected?24:2}]}},setSelected:function(v){BI.Switch.superclass.setSelected.apply(this,arguments),this.layout.attr("items")[0].left=v?24:2,this.layout.resize()},doClick:function(){BI.Switch.superclass.doClick.apply(this,arguments),this.fireEvent(BI.Switch.EVENT_CHANGE)}}),BI.Switch.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.switch",BI.Switch),BI.FirstTreeLeafItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.FirstTreeLeafItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-first-tree-leaf-item bi-list-item-active",logic:{dynamic:!1},id:"",pId:"",layer:0,height:24})},_init:function(){BI.FirstTreeLeafItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.checkbox"}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&self.setSelected(self.isSelected()),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,0===o.layer?"":{width:12,el:{type:"bi.layout",cls:o.pNode&&o.pNode.isLastNode?"":"base-line-conn-background",width:12,height:o.height}},{width:24,el:{type:"bi.layout",cls:"first-line-conn-background",width:24,height:o.height}},{el:this.text});BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},getId:function(){return this.options.id},getPId:function(){return this.options.pId},doClick:function(){BI.FirstTreeLeafItem.superclass.doClick.apply(this,arguments),this.checkbox.setSelected(this.isSelected())},setSelected:function(v){BI.FirstTreeLeafItem.superclass.setSelected.apply(this,arguments),this.checkbox.setSelected(v)}}),BI.shortcut("bi.first_tree_leaf_item",BI.FirstTreeLeafItem),BI.IconTreeLeafItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.IconTreeLeafItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-icon-tree-leaf-item bi-list-item-active",logic:{dynamic:!1},height:24,iconWidth:16,iconHeight:16,iconCls:""})},_init:function(){BI.IconTreeLeafItem.superclass._init.apply(this,arguments);var self=this,o=this.options,icon=BI.createWidget({type:"bi.center_adapt",width:24,cls:o.iconCls,items:[{type:"bi.icon",width:o.iconWidth,height:o.iconHeight}]});this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,{width:16,el:icon},{el:this.text});BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items,hgap:5}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},getId:function(){return this.options.id},getPId:function(){return this.options.pId},doClick:function(){BI.IconTreeLeafItem.superclass.doClick.apply(this,arguments)},setSelected:function(v){BI.IconTreeLeafItem.superclass.setSelected.apply(this,arguments)}}),BI.shortcut("bi.icon_tree_leaf_item",BI.IconTreeLeafItem),BI.LastTreeLeafItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.LastTreeLeafItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-last-tree-leaf-item bi-list-item-active",logic:{dynamic:!1},id:"",pId:"",layer:0,height:24})},_init:function(){BI.LastTreeLeafItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.checkbox"}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&self.setSelected(self.isSelected()),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,0===o.layer?"":{width:12,el:{type:"bi.layout",cls:o.pNode&&o.pNode.isLastNode?"":"base-line-conn-background",width:12,height:o.height}},{width:24,el:{type:"bi.layout",cls:"last-line-conn-background",width:24,height:o.height}},{el:this.text});BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},getId:function(){return this.options.id},getPId:function(){return this.options.pId},doClick:function(){BI.LastTreeLeafItem.superclass.doClick.apply(this,arguments)},setSelected:function(v){BI.LastTreeLeafItem.superclass.setSelected.apply(this,arguments)}}),BI.shortcut("bi.last_tree_leaf_item",BI.LastTreeLeafItem),BI.MidTreeLeafItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.MidTreeLeafItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-mid-tree-leaf-item bi-list-item-active",logic:{dynamic:!1},id:"",pId:"",layer:0,height:24})},_init:function(){BI.MidTreeLeafItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.checkbox"}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&self.setSelected(self.isSelected()),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,0===o.layer?"":{width:12,el:{type:"bi.layout",cls:o.pNode&&o.pNode.isLastNode?"":"base-line-conn-background",width:12,height:o.height}},{width:24,el:{type:"bi.layout",cls:"mid-line-conn-background",width:24,height:o.height}},{el:this.text});BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},getId:function(){return this.options.id},getPId:function(){return this.options.pId},doClick:function(){BI.MidTreeLeafItem.superclass.doClick.apply(this,arguments),this.checkbox.setSelected(this.isSelected())},setSelected:function(v){BI.MidTreeLeafItem.superclass.setSelected.apply(this,arguments),this.checkbox.setSelected(v)}}),BI.shortcut("bi.mid_tree_leaf_item",BI.MidTreeLeafItem),BI.MultiLayerIconTreeLeafItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.MultiLayerIconTreeLeafItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-multilayer-icon-tree-leaf-item bi-list-item-active",layer:0,height:24,iconCls:"",iconHeight:16,iconWidth:16})},_init:function(){BI.MultiLayerIconTreeLeafItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.item=BI.createWidget({type:"bi.icon_tree_leaf_item",cls:"bi-list-item-none",iconCls:o.iconCls,id:o.id,pId:o.pId,isFront:!0,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,iconWidth:o.iconWidth,iconHeight:o.iconHeight}),this.item.on(BI.Controller.EVENT_CHANGE,function(type){type!==BI.Events.CLICK&&self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});var items=[];BI.count(0,o.layer,function(){items.push({type:"bi.layout",width:15,height:o.height})}),items.push(this.item),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,15),items:[items]})},doRedMark:function(){this.item.doRedMark.apply(this.item,arguments)},unRedMark:function(){this.item.unRedMark.apply(this.item,arguments)},doHighLight:function(){this.item.doHighLight.apply(this.item,arguments)},unHighLight:function(){this.item.unHighLight.apply(this.item,arguments)},getId:function(){return this.options.id},getPId:function(){return this.options.pId},doClick:function(){BI.MultiLayerIconTreeLeafItem.superclass.doClick.apply(this,arguments),this.item.setSelected(this.isSelected())},setSelected:function(v){BI.MultiLayerIconTreeLeafItem.superclass.setSelected.apply(this,arguments),this.item.setSelected(v)},getValue:function(){return this.options.value}}),BI.shortcut("bi.multilayer_icon_tree_leaf_item",BI.MultiLayerIconTreeLeafItem),BI.TreeTextLeafItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.TreeTextLeafItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-tree-text-leaf-item bi-list-item-active",id:"",pId:"",height:24,hgap:0,lgap:0,rgap:0})},_init:function(){BI.TreeTextLeafItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,lgap:o.lgap,rgap:o.hgap,text:o.text,value:o.value,py:o.py}),BI.createWidget({type:"bi.htape",element:this,items:[{el:this.text}]})},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},getId:function(){return this.options.id},getPId:function(){return this.options.pId}}),BI.shortcut("bi.tree_text_leaf_item",BI.TreeTextLeafItem),BI.CalendarDateItem=BI.inherit(BI.BasicButton,{render:function(){var self=this,o=this.options;return{type:"bi.absolute",items:[{el:{type:"bi.text_item",cls:"bi-list-item-select",textAlign:"center",whiteSpace:"normal",text:o.text,value:o.value,ref:function(){self.text=this}},left:o.lgap,right:o.rgap,top:0,bottom:0}]}},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},setSelected:function(b){BI.CalendarDateItem.superclass.setSelected.apply(this,arguments),this.text.setSelected(b)},getValue:function(){return this.text.getValue()}}),BI.shortcut("bi.calendar_date_item",BI.CalendarDateItem),BI.Calendar=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.Calendar.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-calendar",logic:{dynamic:!1},min:"1900-01-01",max:"2099-12-31",year:2015,month:8,day:25})},_dateCreator:function(Y,M,D){var self=this,o=this.options,log={},De=BI.getDate(),mins=o.min.match(/\d+/g),maxs=o.max.match(/\d+/g);Y<(0|mins[0])&&(Y=0|mins[0]),Y>(0|maxs[0])&&(Y=0|maxs[0]),De.setFullYear(Y,M,D),log.ymd=[De.getFullYear(),De.getMonth(),De.getDate()];var MD=BI.Date._MD.slice(0);MD[1]=BI.isLeapYear(log.ymd[0])?29:28,De.setFullYear(log.ymd[0],log.ymd[1],1),log.FDay=De.getDay();var offSetFDay=(7-BI.StartOfWeek+log.FDay)%7;log.PDay=MD[0===M?11:M-1]-offSetFDay+1,log.NDay=1;var items=[];return BI.each(BI.range(42),function(i){var td={},YY=log.ymd[0],MM=log.ymd[1]+1,DD;i=offSetFDay&&i=0?page%12:(12+page%12)%12;return{year:BI.getDate().getFullYear()+year,month:month+1}}}),BI.shortcut("bi.calendar",BI.Calendar),BI.YearCalendar=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.YearCalendar.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-year-calendar",behaviors:{},logic:{dynamic:!1},min:"1900-01-01",max:"2099-12-31",year:null})},_yearCreator:function(Y){var o=this.options;Y=0|Y;var start=BI.YearCalendar.getStartYear(Y),items=[],startDate=BI.parseDateTime(o.min,"%Y-%X-%d"),endDate=BI.parseDateTime(o.max,"%Y-%X-%d");return BI.each(BI.range(BI.YearCalendar.INTERVAL),function(i){var td={};BI.checkDateVoid(start+i,1,1,BI.print(BI.getDate(startDate.getFullYear(),0,1),"%Y-%X-%d"),BI.print(BI.getDate(endDate.getFullYear(),0,1),"%Y-%X-%d"))[0]&&(td.disabled=!0),td.text=start+i,items.push(td)}),items},_init:function(){BI.YearCalendar.superclass._init.apply(this,arguments);var self=this,o=this.options;this.currentYear=BI.getDate().getFullYear();var years=this._yearCreator(o.year||this.currentYear),len=years.length,tyears=BI.makeArray(len,""),map=[0,6,1,7,2,8,3,9,4,10,5,11];BI.each(years,function(i,y){tyears[i]=years[map[i]]});var items=[];items.push(tyears.slice(0,2)),items.push(tyears.slice(2,4)),items.push(tyears.slice(4,6)),items.push(tyears.slice(6,8)),items.push(tyears.slice(8,10)),items.push(tyears.slice(10,12)),items=BI.map(items,function(i,item){return BI.map(item,function(j,td){return BI.extend(td,{type:"bi.text_item",cls:"bi-list-item-select",textAlign:"center",whiteSpace:"normal",once:!1,forceSelected:!0,height:24,width:45,value:td.text,disabled:td.disabled})})}),this.years=BI.createWidget({type:"bi.button_group",behaviors:o.behaviors,items:BI.createItems(items,{}),layouts:[BI.LogicFactory.createLogic("table",BI.extend({},o.logic,{columns:2,rows:6,columnSize:[.5,.5],rowSize:24})),{type:"bi.center_adapt",vgap:1}]}),this.years.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("vertical",BI.extend({},o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("top",this.years)}))))},isFrontYear:function(){var o=this.options,Y=o.year; +return Y=0|Y,!!BI.checkDateVoid(BI.YearCalendar.getStartYear(Y)-1,1,1,o.min,o.max)[0]},isFinalYear:function(){var o=this.options,c=this._const,Y=o.year;return Y=0|Y,!!BI.checkDateVoid(BI.YearCalendar.getEndYear(Y)+1,1,1,o.min,o.max)[0]},setValue:function(val){this.years.setValue([val])},getValue:function(){return this.years.getValue()[0]}}),BI.extend(BI.YearCalendar,{INTERVAL:12,getStartYear:function(year){var cur=BI.getDate().getFullYear();return year-((year-cur+3)%BI.YearCalendar.INTERVAL+12)%BI.YearCalendar.INTERVAL},getEndYear:function(year){return BI.YearCalendar.getStartYear(year)+BI.YearCalendar.INTERVAL-1},getPageByYear:function(year){var cur=BI.getDate().getFullYear();return year=BI.YearCalendar.getStartYear(year),(year-cur+3)/BI.YearCalendar.INTERVAL}}),BI.shortcut("bi.year_calendar",BI.YearCalendar),BI.ArrowTreeGroupNodeCheckbox=BI.inherit(BI.IconButton,{_defaultConfig:function(){return BI.extend(BI.ArrowTreeGroupNodeCheckbox.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-arrow-group-node-checkbox"})},setSelected:function(v){BI.ArrowTreeGroupNodeCheckbox.superclass.setSelected.apply(this,arguments),v?this.element.removeClass("expander-right-font").addClass("expander-down-font"):this.element.removeClass("expander-down-font").addClass("expander-right-font")}}),BI.shortcut("bi.arrow_group_node_checkbox",BI.ArrowTreeGroupNodeCheckbox),BI.CheckingMarkNode=BI.inherit(BI.IconButton,{_defaultConfig:function(){return BI.extend(BI.CheckingMarkNode.superclass._defaultConfig.apply(this,arguments),{extraCls:"check-mark-font"})},_init:function(){BI.CheckingMarkNode.superclass._init.apply(this,arguments),this.setSelected(this.options.selected)},setSelected:function(v){BI.CheckingMarkNode.superclass.setSelected.apply(this,arguments),v===!0?this.element.addClass("check-mark-font"):this.element.removeClass("check-mark-font")}}),BI.shortcut("bi.checking_mark_node",BI.CheckingMarkNode),BI.FirstTreeNodeCheckbox=BI.inherit(BI.IconButton,{_defaultConfig:function(){return BI.extend(BI.FirstTreeNodeCheckbox.superclass._defaultConfig.apply(this,arguments),{extraCls:"tree-collapse-icon-type2",iconWidth:24,iconHeight:24})},setSelected:function(v){BI.FirstTreeNodeCheckbox.superclass.setSelected.apply(this,arguments),v===!0?this.element.addClass("tree-expand-icon-type2"):this.element.removeClass("tree-expand-icon-type2")}}),BI.shortcut("bi.first_tree_node_checkbox",BI.FirstTreeNodeCheckbox),BI.LastTreeNodeCheckbox=BI.inherit(BI.IconButton,{_defaultConfig:function(){return BI.extend(BI.LastTreeNodeCheckbox.superclass._defaultConfig.apply(this,arguments),{extraCls:"tree-collapse-icon-type4",iconWidth:24,iconHeight:24})},setSelected:function(v){BI.LastTreeNodeCheckbox.superclass.setSelected.apply(this,arguments),v===!0?this.element.addClass("tree-expand-icon-type4"):this.element.removeClass("tree-expand-icon-type4")}}),BI.shortcut("bi.last_tree_node_checkbox",BI.LastTreeNodeCheckbox),BI.MidTreeNodeCheckbox=BI.inherit(BI.IconButton,{_defaultConfig:function(){return BI.extend(BI.MidTreeNodeCheckbox.superclass._defaultConfig.apply(this,arguments),{extraCls:"tree-collapse-icon-type3",iconWidth:24,iconHeight:24})},setSelected:function(v){BI.MidTreeNodeCheckbox.superclass.setSelected.apply(this,arguments),v===!0?this.element.addClass("tree-expand-icon-type3"):this.element.removeClass("tree-expand-icon-type3")}}),BI.shortcut("bi.mid_tree_node_checkbox",BI.MidTreeNodeCheckbox),BI.TreeNodeCheckbox=BI.inherit(BI.IconButton,{_defaultConfig:function(){return BI.extend(BI.TreeNodeCheckbox.superclass._defaultConfig.apply(this,arguments),{extraCls:"tree-collapse-icon-type1",iconWidth:24,iconHeight:24})},setSelected:function(v){BI.TreeNodeCheckbox.superclass.setSelected.apply(this,arguments),v?this.element.addClass("tree-expand-icon-type1"):this.element.removeClass("tree-expand-icon-type1")}}),BI.shortcut("bi.tree_node_checkbox",BI.TreeNodeCheckbox),BI.CustomColorChooser=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.CustomColorChooser.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-custom-color-chooser",width:227,height:245})},_init:function(){BI.CustomColorChooser.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget(o.editor,{type:"bi.simple_color_picker_editor"}),this.editor.on(BI.ColorPickerEditor.EVENT_CHANGE,function(){self.setValue(this.getValue())}),this.farbtastic=BI.createWidget({type:"bi.farbtastic"}),this.farbtastic.on(BI.Farbtastic.EVENT_CHANGE,function(){self.setValue(this.getValue())}),BI.createWidget({type:"bi.vtape",element:this,items:[{type:"bi.absolute",items:[{el:this.editor,left:0,top:0,right:0}],height:30},{type:"bi.absolute",items:[{el:this.farbtastic,left:15,right:15,top:7}],height:215}]})},setValue:function(color){this.editor.setValue(color),this.farbtastic.setValue(color)},getValue:function(){return this.editor.getValue()}}),BI.CustomColorChooser.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.custom_color_chooser",BI.CustomColorChooser),BI.ColorChooser=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.ColorChooser.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-color-chooser",value:"",height:24})},_init:function(){BI.ColorChooser.superclass._init.apply(this,arguments);var self=this,o=this.options;this.combo=BI.createWidget({type:"bi.combo",element:this,container:o.container,adjustLength:1,isNeedAdjustWidth:!1,isNeedAdjustHeight:!1,el:BI.extend({type:o.width<=24?"bi.color_chooser_trigger":"bi.long_color_chooser_trigger",ref:function(_ref){self.trigger=_ref},width:o.width-2,height:o.height-2},o.el),popup:{el:BI.extend({type:"bi.color_chooser_popup",ref:function(_ref){self.colorPicker=_ref},listeners:[{eventName:BI.ColorChooserPopup.EVENT_VALUE_CHANGE,action:function(){fn(),self._isRGBColor(self.colorPicker.getValue())||self.combo.hideView()}},{eventName:BI.ColorChooserPopup.EVENT_CHANGE,action:function(){fn(),self.combo.hideView()}}]},o.popup),width:230},value:o.value});var fn=function(){var color=self.colorPicker.getValue();self.trigger.setValue(color)};this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW,function(){self.fireEvent(BI.ColorChooser.EVENT_CHANGE,arguments)})},_isRGBColor:function(color){return BI.isNotEmptyString(color)&&"transparent"!==color},isViewVisible:function(){return this.combo.isViewVisible()},hideView:function(){this.combo.hideView()},showView:function(){this.combo.showView()},setValue:function(color){this.combo.setValue(color)},getValue:function(){return this.combo.getValue()}}),BI.ColorChooser.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.color_chooser",BI.ColorChooser),BI.ColorChooserPopup=BI.inherit(BI.Widget,{props:{baseCls:"bi-color-chooser-popup",width:230,height:145,simple:!1},render:function(){var self=this,o=this.options;this.colorEditor=BI.createWidget(o.editor,{type:o.simple?"bi.simple_color_picker_editor":"bi.color_picker_editor",value:o.value,cls:"bi-header-background bi-border-bottom",height:30}),this.colorEditor.on(BI.ColorPickerEditor.EVENT_CHANGE,function(){self.setValue(this.getValue()),self._dealStoreColors(),self.fireEvent(BI.ColorChooserPopup.EVENT_VALUE_CHANGE,arguments)}),this.storeColors=BI.createWidget({type:"bi.color_picker",cls:"bi-border-bottom bi-border-right",items:[this._digestStoreColors(this._getStoreColors())],width:210,height:24,value:o.value}),this.storeColors.on(BI.ColorPicker.EVENT_CHANGE,function(){self.setValue(this.getValue()[0]),self._dealStoreColors(),self.fireEvent(BI.ColorChooserPopup.EVENT_CHANGE,arguments)}),this.colorPicker=BI.createWidget({type:"bi.color_picker",width:210,height:50,value:o.value}),this.colorPicker.on(BI.ColorPicker.EVENT_CHANGE,function(){self.setValue(this.getValue()[0]),self._dealStoreColors(),self.fireEvent(BI.ColorChooserPopup.EVENT_CHANGE,arguments)}),this.customColorChooser=BI.createWidget({type:"bi.custom_color_chooser",editor:o.editor});var panel=BI.createWidget({type:"bi.popup_panel",buttons:[BI.i18nText("BI-Basic_Cancel"),BI.i18nText("BI-Basic_Save")],title:BI.i18nText("BI-Custom_Color"),el:this.customColorChooser,stopPropagation:!1,bgap:-1,rgap:1,lgap:1,minWidth:227});return this.more=BI.createWidget({type:"bi.combo",cls:"bi-border-top",container:null,direction:"right,top",isNeedAdjustHeight:!1,el:{type:"bi.text_item",cls:"color-chooser-popup-more bi-list-item",textAlign:"center",height:24,textLgap:10,text:BI.i18nText("BI-Basic_More")+"..."},popup:panel}),this.more.on(BI.Combo.EVENT_AFTER_POPUPVIEW,function(){self.customColorChooser.setValue(self.getValue())}),panel.on(BI.PopupPanel.EVENT_CLICK_TOOLBAR_BUTTON,function(index){switch(index){case 0:self.more.hideView();break;case 1:self.setValue(self.customColorChooser.getValue()),self._dealStoreColors(),self.more.hideView(),self.fireEvent(BI.ColorChooserPopup.EVENT_CHANGE,arguments)}}),{type:"bi.absolute",items:[{el:{type:"bi.vtape",items:[this.colorEditor,{el:{type:"bi.absolute",items:[{el:this.storeColors,left:10,right:10,top:5}]},height:29},{el:{type:"bi.absolute",items:[{el:this.colorPicker,left:10,right:10,top:5,bottom:5}]},height:60},{el:this.more,height:24}]},left:0,right:0,top:0,bottom:0},{el:{type:"bi.layout",cls:"disable-mask",invisible:!o.disabled,ref:function(){self.mask=this}},left:0,right:0,top:0,bottom:0}]}},mounted:function(){var self=this,o=this.options;BI.isNotNull(o.value)&&this.setValue(o.value)},_setEnable:function(enable){BI.ColorChooserPopup.superclass._setEnable.apply(this,arguments),this.mask.setVisible(!enable)},_dealStoreColors:function(){var color=this.getValue(),colors=this._getStoreColors(),que=new BI.Queue(8);que.fromArray(colors),que.remove(color),que.unshift(color);var array=que.toArray();BI.Cache.setItem("colors",BI.array2String(array)),this.setStoreColors(array)},_digestStoreColors:function(colors){var items=BI.map(colors,function(i,color){return{value:color}});return BI.count(colors.length,8,function(i){items.push({value:"",disabled:!0})}),items},_getStoreColors:function(){var self=this,o=this.options,colorsArray=BI.string2Array(BI.Cache.getItem("colors")||"");return BI.filter(colorsArray,function(idx,color){return!o.simple||self._isRGBColor(color)})},_isRGBColor:function(color){return BI.isNotEmptyString(color)&&"transparent"!==color},setStoreColors:function(colors){BI.isArray(colors)&&this.storeColors.populate([this._digestStoreColors(colors)])},setValue:function(color){this.colorEditor.setValue(color),this.colorPicker.setValue(color),this.storeColors.setValue(color)},getValue:function(){return this.colorEditor.getValue()}}),BI.ColorChooserPopup.EVENT_VALUE_CHANGE="EVENT_VALUE_CHANGE",BI.ColorChooserPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.color_chooser_popup",BI.ColorChooserPopup),BI.SimpleColorChooserPopup=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SimpleColorChooserPopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-color-chooser-popup"})},_init:function(){BI.SimpleColorChooserPopup.superclass._init.apply(this,arguments);var self=this,o=this.options;this.popup=BI.createWidget({type:"bi.color_chooser_popup",value:o.value,element:this,simple:!0}),this.popup.on(BI.ColorChooserPopup.EVENT_CHANGE,function(){self.fireEvent(BI.SimpleColorChooserPopup.EVENT_CHANGE,arguments)}),this.popup.on(BI.ColorChooserPopup.EVENT_VALUE_CHANGE,function(){self.fireEvent(BI.SimpleColorChooserPopup.EVENT_VALUE_CHANGE,arguments)})},setStoreColors:function(colors){this.popup.setStoreColors(colors)},setValue:function(color){this.popup.setValue(color)},getValue:function(){return this.popup.getValue()}}),BI.SimpleColorChooserPopup.EVENT_VALUE_CHANGE="EVENT_VALUE_CHANGE",BI.SimpleColorChooserPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.simple_color_chooser_popup",BI.SimpleColorChooserPopup),BI.SimpleColorChooser=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SimpleColorChooser.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-simple-color-chooser",value:"#ffffff"})},_init:function(){BI.SimpleColorChooser.superclass._init.apply(this,arguments);var self=this,o=this.options;this.combo=BI.createWidget({type:"bi.color_chooser",element:this,container:o.container,value:o.value,width:o.width,height:o.height,popup:{type:"bi.simple_color_chooser_popup"}}),this.combo.on(BI.ColorChooser.EVENT_CHANGE,function(){self.fireEvent(BI.SimpleColorChooser.EVENT_CHANGE,arguments)})},isViewVisible:function(){return this.combo.isViewVisible()},hideView:function(){this.combo.hideView()},showView:function(){this.combo.showView()},setValue:function(color){this.combo.setValue(color)},getValue:function(){return this.combo.getValue()}}),BI.SimpleColorChooser.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.simple_color_chooser",BI.SimpleColorChooser),BI.ColorChooserTrigger=BI.inherit(BI.Trigger,{_defaultConfig:function(){var conf=BI.ColorChooserTrigger.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-color-chooser-trigger bi-border",height:22})},_init:function(){BI.ColorChooserTrigger.superclass._init.apply(this,arguments),this.colorContainer=BI.createWidget({type:"bi.layout",cls:"color-chooser-trigger-content"+(BI.isIE9Below&&BI.isIE9Below()?" hack":"")});var down=BI.createWidget({type:"bi.icon_button",disableSelected:!0,cls:"icon-combo-down-icon trigger-triangle-font icon-size-12",width:12,height:8});BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.colorContainer,left:3,right:3,top:3,bottom:3},{el:down,right:-1,bottom:1}]}),BI.isNotNull(this.options.value)&&this.setValue(this.options.value)},setValue:function(color){BI.ColorChooserTrigger.superclass.setValue.apply(this,arguments),""===color?this.colorContainer.element.css("background-color","").removeClass("trans-color-background").addClass("auto-color-background"):"transparent"===color?this.colorContainer.element.css("background-color","").removeClass("auto-color-background").addClass("trans-color-background"):this.colorContainer.element.css({"background-color":color}).removeClass("auto-color-background").removeClass("trans-color-background")}}),BI.ColorChooserTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.color_chooser_trigger",BI.ColorChooserTrigger),BI.LongColorChooserTrigger=BI.inherit(BI.Trigger,{_defaultConfig:function(){var conf=BI.LongColorChooserTrigger.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-color-chooser-trigger bi-border",height:22})},_init:function(){BI.LongColorChooserTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options;this.colorContainer=BI.createWidget({type:"bi.htape",cls:"color-chooser-trigger-content",items:[{type:"bi.icon_change_button",ref:function(_ref){self.changeIcon=_ref},disableSelected:!0,iconCls:"auto-color-icon",width:24,iconWidth:16,iconHeight:16},{el:{type:"bi.label",ref:function(_ref){self.label=_ref},textAlign:"left",hgap:5,height:18,text:BI.i18nText("BI-Basic_Auto")}}]});var down=BI.createWidget({type:"bi.icon_button",disableSelected:!0,cls:"icon-combo-down-icon trigger-triangle-font icon-size-12",width:12,height:8});BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.colorContainer,left:3,right:3,top:3,bottom:3},{el:down,right:3,bottom:3}]}),this.options.value&&this.setValue(this.options.value)},setValue:function(color){BI.LongColorChooserTrigger.superclass.setValue.apply(this,arguments),""===color?(this.colorContainer.element.css("background-color",""),this.changeIcon.setVisible(!0),this.label.setVisible(!0),this.changeIcon.setIcon("auto-color-icon"),this.label.setText(BI.i18nText("BI-Basic_Auto"))):"transparent"===color?(this.colorContainer.element.css("background-color",""),this.changeIcon.setVisible(!0),this.label.setVisible(!0),this.changeIcon.setIcon("trans-color-icon"),this.label.setText(BI.i18nText("BI-Transparent_Color"))):(this.colorContainer.element.css({"background-color":color}),this.changeIcon.setVisible(!1),this.label.setVisible(!1))}}),BI.LongColorChooserTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.long_color_chooser_trigger",BI.LongColorChooserTrigger),BI.ColorPickerButton=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.ColorPickerButton.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-color-picker-button bi-background bi-border-top bi-border-left"})},_init:function(){BI.ColorPickerButton.superclass._init.apply(this,arguments);var self=this,o=this.options;if(o.value){this.element.css("background-color",o.value);var name=this.getName();this.element.hover(function(){self._createMask(),self.isEnabled()&&BI.Maskers.show(name)},function(){self.isSelected()||BI.Maskers.hide(name)})}},_createMask:function(){var o=this.options,name=this.getName();if(this.isEnabled()&&!BI.Maskers.has(name)){var w=BI.Maskers.make(name,this,{offset:{left:-1,top:-1,right:-1,bottom:-1}});w.element.addClass("color-picker-button-mask").css("background-color",o.value)}},setSelected:function(b){BI.ColorPickerButton.superclass.setSelected.apply(this,arguments),b&&this._createMask(),BI.Maskers[b?"show":"hide"](this.getName())}}),BI.ColorPickerButton.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.color_picker_button",BI.ColorPickerButton),BI.ColorPicker=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.ColorPicker.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-color-picker",items:null})},_items:[[{value:"#ffffff"},{value:"#f2f2f2"},{value:"#e5e5e5"},{value:"#d9d9d9"},{value:"#cccccc"},{value:"#bfbfbf"},{value:"#b2b2b2"},{value:"#a6a6a6"},{value:"#999999"},{value:"#8c8c8c"},{value:"#808080"},{value:"#737373"},{value:"#666666"},{value:"#4d4d4d"},{value:"#333333"},{value:"#000000"}],[{value:"#d8b5a6"},{value:"#ff9e9a"},{value:"#ffc17d"},{value:"#f5e56b"},{value:"#d8e698"},{value:"#e0ebaf"},{value:"#c3d825"},{value:"#bce2e8"},{value:"#85d3cd"},{value:"#bce2e8"},{value:"#a0d8ef"},{value:"#89c3eb"},{value:"#bbc8e6"},{value:"#bbbcde"},{value:"#d6b4cc"},{value:"#fbc0d3"}],[{value:"#bb9581"},{value:"#f37d79"},{value:"#fba74f"},{value:"#ffdb4f"},{value:"#c7dc68"},{value:"#b0ca71"},{value:"#99ab4e"},{value:"#84b9cb"},{value:"#00a3af"},{value:"#2ca9e1"},{value:"#0095d9"},{value:"#4c6cb3"},{value:"#8491c3"},{value:"#a59aca"},{value:"#cc7eb1"},{value:"#e89bb4"}],[{value:"#9d775f"},{value:"#dd4b4b"},{value:"#ef8b07"},{value:"#fcc800"},{value:"#aacf53"},{value:"#82ae46"},{value:"#69821b"},{value:"#59b9c6"},{value:"#2a83a2"},{value:"#007bbb"},{value:"#19448e"},{value:"#274a78"},{value:"#4a488e"},{value:"#7058a3"},{value:"#884898"},{value:"#d47596"}]],_init:function(){BI.ColorPicker.superclass._init.apply(this,arguments);var self=this,o=this.options;this.colors=BI.createWidget({type:"bi.button_group",element:this,items:BI.createItems(o.items||this._items,{type:"bi.color_picker_button",once:!1}),layouts:[{type:"bi.grid"}],value:o.value}),this.colors.on(BI.ButtonGroup.EVENT_CHANGE,function(){self.fireEvent(BI.ColorPicker.EVENT_CHANGE,arguments)})},populate:function(items){var args=[].slice.call(arguments);args[0]=BI.createItems(items,{type:"bi.color_picker_button",once:!1}),this.colors.populate.apply(this.colors,args)},setValue:function(color){this.colors.setValue(color)},getValue:function(){return this.colors.getValue()}}),BI.ColorPicker.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.color_picker",BI.ColorPicker),BI.ColorPickerEditor=BI.inherit(BI.Widget,{constants:{REB_WIDTH:32},_defaultConfig:function(){return BI.extend(BI.ColorPickerEditor.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-color-picker-editor",height:30})},_init:function(){BI.ColorPickerEditor.superclass._init.apply(this,arguments);var self=this,o=this.options,c=this.constants;this.storeValue={},this.colorShow=BI.createWidget({type:"bi.layout",cls:"color-picker-editor-display bi-card bi-border",height:16,width:16});var RGB=BI.createWidgets(BI.createItems([{text:"R"},{text:"G"},{text:"B"}],{type:"bi.label",cls:"color-picker-editor-label",width:20,height:20})),checker=function(v){return BI.isNumeric(v)&&(0|v)>=0&&(0|v)<=255},Ws=BI.createWidgets([{},{},{}],{type:"bi.small_text_editor",cls:"color-picker-editor-input",validationChecker:checker,errorText:BI.i18nText("BI-Color_Picker_Error_Text"),allowBlank:!0,value:255,width:c.REB_WIDTH,height:20});BI.each(Ws,function(i,w){w.on(BI.TextEditor.EVENT_CHANGE,function(){self._checkEditors(),checker(self.storeValue.r)&&checker(self.storeValue.g)&&checker(self.storeValue.b)&&(self.colorShow.element.css("background-color",self.getValue()),self.fireEvent(BI.ColorPickerEditor.EVENT_CHANGE))})}),this.R=Ws[0],this.G=Ws[1],this.B=Ws[2],this.none=BI.createWidget({type:"bi.icon_button",cls:"auto-color-icon",width:16,height:16,iconWidth:16,iconHeight:16,title:BI.i18nText("BI-Basic_Auto")}),this.none.on(BI.IconButton.EVENT_CHANGE,function(){this.isSelected()?(self.lastColor=self.getValue(),self.setValue("")):self.setValue(self.lastColor||"#ffffff"),(self.R.isValid()&&self.G.isValid()&&self.B.isValid()||self._isEmptyRGB())&&(self.colorShow.element.css("background-color",self.getValue()),self.fireEvent(BI.ColorPickerEditor.EVENT_CHANGE))}),this.transparent=BI.createWidget({type:"bi.icon_button",cls:"trans-color-icon",width:16,height:16,iconWidth:16,iconHeight:16,title:BI.i18nText("BI-Transparent_Color")}),this.transparent.on(BI.IconButton.EVENT_CHANGE,function(){this.isSelected()?(self.lastColor=self.getValue(),self.setValue("transparent")):("transparent"===self.lastColor&&(self.lastColor=""),self.setValue(self.lastColor||"#ffffff")),(self.R.isValid()&&self.G.isValid()&&self.B.isValid()||self._isEmptyRGB())&&(self.colorShow.element.css("background-color",self.getValue()),self.fireEvent(BI.ColorPickerEditor.EVENT_CHANGE))}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.vertical_adapt",items:[{el:this.colorShow,width:16},{el:RGB[0],width:20},{el:this.R,width:c.REB_WIDTH},{el:RGB[1],width:20},{el:this.G,width:c.REB_WIDTH},{el:RGB[2],width:20},{el:this.B,width:c.REB_WIDTH},{el:this.transparent,width:16,lgap:5},{el:this.none,width:16,lgap:5}]},left:10,right:10,top:0,bottom:0}]})},_checkEditors:function(){BI.isEmptyString(this.R.getValue())&&this.R.setValue(0),BI.isEmptyString(this.G.getValue())&&this.G.setValue(0),BI.isEmptyString(this.B.getValue())&&this.B.setValue(0),this.storeValue={r:this.R.getValue()||0,g:this.G.getValue()||0,b:this.B.getValue()||0}},_isEmptyRGB:function(){return BI.isEmptyString(this.storeValue.r)&&BI.isEmptyString(this.storeValue.g)&&BI.isEmptyString(this.storeValue.b)},_showPreColor:function(color){""===color?this.colorShow.element.css("background-color","").removeClass("trans-color-background").addClass("auto-color-normal-background"):"transparent"===color?this.colorShow.element.css("background-color","").removeClass("auto-color-normal-background").addClass("trans-color-background"):this.colorShow.element.css({"background-color":color}).removeClass("auto-color-normal-background").removeClass("trans-color-background")},_setEnable:function(enable){BI.ColorPickerEditor.superclass._setEnable.apply(this,arguments),enable===!0?this.element.removeClass("base-disabled disabled"):enable===!1&&this.element.addClass("base-disabled disabled")},setValue:function(color){if("transparent"===color)return this.transparent.setSelected(!0),this.none.setSelected(!1),this._showPreColor("transparent"),this.R.setValue(""),this.G.setValue(""),this.B.setValue(""),void(this.storeValue={r:"",g:"",b:""});color?this.none.setSelected(!1):(color="",this.none.setSelected(!0)),this.transparent.setSelected(!1),this._showPreColor(color);var json=BI.DOM.rgb2json(BI.DOM.hex2rgb(color));this.storeValue={r:BI.isNull(json.r)?"":json.r,g:BI.isNull(json.r)?"":json.g,b:BI.isNull(json.r)?"":json.b},this.R.setValue(this.storeValue.r),this.G.setValue(this.storeValue.g),this.B.setValue(this.storeValue.b)},getValue:function(){return this._isEmptyRGB()&&this.transparent.isSelected()?"transparent":BI.DOM.rgb2hex(BI.DOM.json2rgb({r:this.storeValue.r,g:this.storeValue.g,b:this.storeValue.b}))}}),BI.ColorPickerEditor.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.color_picker_editor",BI.ColorPickerEditor),BI.SimpleColorPickerEditor=BI.inherit(BI.Widget,{constants:{REB_WIDTH:32},_defaultConfig:function(){return BI.extend(BI.SimpleColorPickerEditor.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-color-picker-editor",height:30})},_init:function(){BI.SimpleColorPickerEditor.superclass._init.apply(this,arguments);var self=this,o=this.options,c=this.constants;this.colorShow=BI.createWidget({type:"bi.layout",cls:"color-picker-editor-display bi-card bi-border",height:16,width:16});var RGB=BI.createWidgets(BI.createItems([{text:"R"},{text:"G"},{text:"B"}],{type:"bi.label",cls:"color-picker-editor-label",width:20,height:20})),checker=function(v){return BI.isNumeric(v)&&(0|v)>=0&&(0|v)<=255},Ws=BI.createWidgets([{},{},{}],{type:"bi.small_text_editor",cls:"color-picker-editor-input",validationChecker:checker,errorText:BI.i18nText("BI-Color_Picker_Error_Text"),allowBlank:!0,value:255,width:c.REB_WIDTH,height:20});BI.each(Ws,function(i,w){w.on(BI.TextEditor.EVENT_CHANGE,function(){self._checkEditors(),self.R.isValid()&&self.G.isValid()&&self.B.isValid()&&(self.colorShow.element.css("background-color",self.getValue()),self.fireEvent(BI.SimpleColorPickerEditor.EVENT_CHANGE))})}),this.R=Ws[0],this.G=Ws[1],this.B=Ws[2],BI.createWidget({type:"bi.vertical_adapt",element:this,items:[{el:this.colorShow,width:16,lgap:20,rgap:15},{el:RGB[0],width:20},{el:this.R,width:c.REB_WIDTH},{el:RGB[1],width:20},{el:this.G,width:c.REB_WIDTH},{el:RGB[2],width:20},{el:this.B,width:c.REB_WIDTH}]})},_checkEditors:function(){BI.isEmptyString(this.R.getValue())&&this.R.setValue(0),BI.isEmptyString(this.G.getValue())&&this.G.setValue(0),BI.isEmptyString(this.B.getValue())&&this.B.setValue(0)},setValue:function(color){this.colorShow.element.css({"background-color":color});var json=BI.DOM.rgb2json(BI.DOM.hex2rgb(color));this.R.setValue(BI.isNull(json.r)?"":json.r),this.G.setValue(BI.isNull(json.g)?"":json.g),this.B.setValue(BI.isNull(json.b)?"":json.b)},getValue:function(){return BI.DOM.rgb2hex(BI.DOM.json2rgb({r:this.R.getValue(),g:this.G.getValue(),b:this.B.getValue()}))}}),BI.SimpleColorPickerEditor.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.simple_color_picker_editor",BI.SimpleColorPickerEditor),BI.Farbtastic=BI.inherit(BI.BasicButton,{constants:{RADIUS:84,SQUARE:100,WIDTH:194},props:{baseCls:"bi-farbtastic",width:195,height:195,stopPropagation:!0,value:"#000000"},render:function(){var self=this;return{type:"bi.absolute",items:[{el:{type:"bi.layout",cls:"",ref:function(_ref){self.colorWrapper=_ref}},top:47,left:47,width:101,height:101},{el:{type:"bi.layout",cls:"wheel",ref:function(_ref){self.wheel=_ref}},left:0,right:0,top:0,bottom:0},{el:{type:"bi.layout",cls:"overlay",ref:function(_ref){self.overlay=_ref}},top:47,left:47,width:101,height:101},{el:{type:"bi.layout",cls:"marker",ref:function(_ref){self.hMarker=_ref},scrollable:!1,width:17,height:17}},{el:{type:"bi.layout",cls:"marker",ref:function(_ref){self.slMarker=_ref},scrollable:!1,width:17,height:17}}]}},mounted:function(){var o=this.options;BI.isKey(o.value)&&this.setValue(o.value)},_unpack:function(color){return 7===color.length?[parseInt("0x"+color.substring(1,3))/255,parseInt("0x"+color.substring(3,5))/255,parseInt("0x"+color.substring(5,7))/255]:4===color.length?[parseInt("0x"+color.substring(1,2))/15,parseInt("0x"+color.substring(2,3))/15,parseInt("0x"+color.substring(3,4))/15]:void 0},_pack:function(rgb){var r=Math.round(255*rgb[0]),g=Math.round(255*rgb[1]),b=Math.round(255*rgb[2]);return"#"+(r<16?"0":"")+r.toString(16)+(g<16?"0":"")+g.toString(16)+(b<16?"0":"")+b.toString(16)},_setColor:function(color){var unpack=this._unpack(color);this.value!==color&&unpack&&(this.value=color,this.rgb=unpack,this.hsl=this._RGBToHSL(this.rgb),this._updateDisplay())},_setHSL:function(hsl){return this.hsl=hsl,this.rgb=this._HSLToRGB(hsl),this.value=this._pack(this.rgb),this._updateDisplay(),this},_HSLToRGB:function(hsl){var m1,m2,r,g,b,h=hsl[0],s=hsl[1],l=hsl[2];return m2=l<=.5?l*(s+1):l+s-l*s,m1=2*l-m2,[this._hueToRGB(m1,m2,h+.33333),this._hueToRGB(m1,m2,h),this._hueToRGB(m1,m2,h-.33333)]},_hueToRGB:function(m1,m2,h){return h=h<0?h+1:h>1?h-1:h,6*h<1?m1+(m2-m1)*h*6:2*h<1?m2:3*h<2?m1+(m2-m1)*(.66666-h)*6:m1},_RGBToHSL:function(rgb){var min,max,delta,h,s,l,r=rgb[0],g=rgb[1],b=rgb[2];return min=Math.min(r,Math.min(g,b)),max=Math.max(r,Math.max(g,b)),delta=max-min,l=(min+max)/2,s=0,l>0&&l<1&&(s=delta/(l<.5?2*l:2-2*l)),h=0,delta>0&&(max==r&&max!=g&&(h+=(g-b)/delta),max==g&&max!=b&&(h+=2+(b-r)/delta),max==b&&max!=r&&(h+=4+(r-g)/delta),h/=6),[h,s,l]},_updateDisplay:function(){var angle=6.28*this.hsl[0];this.hMarker.element.css({left:Math.round(Math.sin(angle)*this.constants.RADIUS+this.constants.WIDTH/2)+"px",top:Math.round(-Math.cos(angle)*this.constants.RADIUS+this.constants.WIDTH/2)+"px"}),this.slMarker.element.css({left:Math.round(this.constants.SQUARE*(.5-this.hsl[1])+this.constants.WIDTH/2)+"px",top:Math.round(this.constants.SQUARE*(.5-this.hsl[2])+this.constants.WIDTH/2)+"px"}),this.colorWrapper.element.css("backgroundColor",this._pack(this._HSLToRGB([this.hsl[0],1,.5]))),this.fireEvent(BI.Farbtastic.EVENT_CHANGE,this.getValue(),this)},_absolutePosition:function(el){var r={x:el.offsetLeft,y:el.offsetTop};if(el.offsetParent){var tmp=this._absolutePosition(el.offsetParent);r.x+=tmp.x,r.y+=tmp.y}return r},_widgetCoords:function(event){var x,y,el=event.target||event.srcElement,reference=this.wheel.element[0];if("undefined"!=typeof event.offsetX){for(var pos={x:event.offsetX,y:event.offsetY},e=el;e;)e.mouseX=pos.x,e.mouseY=pos.y,pos.x+=e.offsetLeft,pos.y+=e.offsetTop,e=e.offsetParent;for(var e=reference,offset={x:0,y:0};e;){if("undefined"!=typeof e.mouseX){x=e.mouseX-offset.x,y=e.mouseY-offset.y;break}offset.x+=e.offsetLeft,offset.y+=e.offsetTop,e=e.offsetParent}for(e=el;e;)e.mouseX=void 0,e.mouseY=void 0,e=e.offsetParent}else{var pos=this._absolutePosition(reference);x=(event.pageX||0)-pos.x,y=(event.pageY||0)-pos.y}return{x:x-this.constants.WIDTH/2,y:y-this.constants.WIDTH/2}},_doMouseMove:function(event){var pos=this._widgetCoords(event);if(this.circleDrag){var hue=Math.atan2(pos.x,-pos.y)/6.28;hue<0&&(hue+=1),this._setHSL([hue,this.hsl[1],this.hsl[2]])}else{var sat=Math.max(0,Math.min(1,-(pos.x/this.constants.SQUARE)+.5)),lum=Math.max(0,Math.min(1,-(pos.y/this.constants.SQUARE)+.5));this._setHSL([this.hsl[0],sat,lum])}},doClick:function(event){var pos=this._widgetCoords(event);return this.circleDrag=2*Math.max(Math.abs(pos.x),Math.abs(pos.y))>this.constants.SQUARE,this._doMouseMove(event),!1},setValue:function(color){this._setColor(color)},getValue:function(){return this.value}}),BI.Farbtastic.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.farbtastic",BI.Farbtastic),BI.BubbleCombo=BI.inherit(BI.Widget,{_const:{TRIANGLE_LENGTH:6},_defaultConfig:function(){return BI.extend(BI.BubbleCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-bubble-combo",trigger:"click",toggle:!0,direction:"bottom,left",isDefaultInit:!1,destroyWhenHide:!1,isNeedAdjustHeight:!0,isNeedAdjustWidth:!0,stopPropagation:!1,adjustLength:0,hideChecker:BI.emptyFn,offsetStyle:"left",el:{},popup:{}})},_init:function(){BI.BubbleCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.combo=BI.createWidget({type:"bi.combo",element:this,trigger:o.trigger,toggle:o.toggle,container:o.container,direction:o.direction,isDefaultInit:o.isDefaultInit,destroyWhenHide:o.destroyWhenHide,isNeedAdjustHeight:o.isNeedAdjustHeight,isNeedAdjustWidth:o.isNeedAdjustWidth,adjustLength:this._getAdjustLength(),stopPropagation:o.stopPropagation,adjustXOffset:0,adjustYOffset:0,hideChecker:o.hideChecker,offsetStyle:o.offsetStyle,el:o.el,popup:BI.extend({type:"bi.bubble_popup_view"},o.popup)}),this.combo.on(BI.Combo.EVENT_TRIGGER_CHANGE,function(){self.fireEvent(BI.BubbleCombo.EVENT_TRIGGER_CHANGE,arguments)}),this.combo.on(BI.Combo.EVENT_CHANGE,function(){self.fireEvent(BI.BubbleCombo.EVENT_CHANGE,arguments); +}),this.combo.on(BI.Combo.EVENT_EXPAND,function(){self.fireEvent(BI.BubbleCombo.EVENT_EXPAND,arguments)}),this.combo.on(BI.Combo.EVENT_COLLAPSE,function(){self.fireEvent(BI.BubbleCombo.EVENT_COLLAPSE,arguments)}),this.combo.on(BI.Combo.EVENT_AFTER_INIT,function(){self.fireEvent(BI.BubbleCombo.EVENT_AFTER_INIT,arguments)}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){self.fireEvent(BI.BubbleCombo.EVENT_BEFORE_POPUPVIEW,arguments)}),this.combo.on(BI.Combo.EVENT_AFTER_POPUPVIEW,function(){self._showTriangle(),self.fireEvent(BI.BubbleCombo.EVENT_AFTER_POPUPVIEW,arguments)}),this.combo.on(BI.Combo.EVENT_BEFORE_HIDEVIEW,function(){self._hideTriangle(),self.fireEvent(BI.BubbleCombo.EVENT_BEFORE_HIDEVIEW,arguments)}),this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW,function(){self.fireEvent(BI.BubbleCombo.EVENT_AFTER_HIDEVIEW,arguments)})},_getAdjustLength:function(){return this._const.TRIANGLE_LENGTH+this.options.adjustLength},_createTriangle:function(direction){var pos={},op={},adjustLength=this.options.adjustLength,offset=this.element.offset(),left=offset.left,right=offset.left+this.element.outerWidth(),top=offset.top,bottom=offset.top+this.element.outerHeight();switch(direction){case"left":pos={top:top,height:this.element.outerHeight(),left:left-adjustLength-this._const.TRIANGLE_LENGTH},op={width:this._const.TRIANGLE_LENGTH};break;case"right":pos={top:top,height:this.element.outerHeight(),left:right+adjustLength},op={width:this._const.TRIANGLE_LENGTH};break;case"top":pos={left:left,width:this.element.outerWidth(),top:top-adjustLength-this._const.TRIANGLE_LENGTH},op={height:this._const.TRIANGLE_LENGTH};break;case"bottom":pos={left:left,width:this.element.outerWidth(),top:bottom+adjustLength},op={height:this._const.TRIANGLE_LENGTH}}this.triangle&&this.triangle.destroy(),this.triangle=BI.createWidget(op,{type:"bi.center_adapt",cls:"button-combo-triangle-wrapper",items:[{type:"bi.layout",cls:"bubble-combo-triangle-"+direction}]}),pos.el=this.triangle,BI.createWidget({type:"bi.absolute",element:this,items:[pos]})},_createLeftTriangle:function(){this._createTriangle("left")},_createRightTriangle:function(){this._createTriangle("right")},_createTopTriangle:function(){this._createTriangle("top")},_createBottomTriangle:function(){this._createTriangle("bottom")},_showTriangle:function(){var pos=this.combo.getPopupPosition();switch(pos.dir){case"left,top":case"left,bottom":this._createLeftTriangle();break;case"right,top":case"right,bottom":this._createRightTriangle();break;case"top,left":case"top,right":this._createTopTriangle();break;case"bottom,left":case"bottom,right":this._createBottomTriangle()}},_hideTriangle:function(){this.triangle&&this.triangle.destroy(),this.triangle=null},hideView:function(){this._hideTriangle(),this.combo&&this.combo.hideView()},showView:function(){this.combo&&this.combo.showView()},isViewVisible:function(){return this.combo.isViewVisible()}}),BI.BubbleCombo.EVENT_TRIGGER_CHANGE="EVENT_TRIGGER_CHANGE",BI.BubbleCombo.EVENT_CHANGE="EVENT_CHANGE",BI.BubbleCombo.EVENT_EXPAND="EVENT_EXPAND",BI.BubbleCombo.EVENT_COLLAPSE="EVENT_COLLAPSE",BI.BubbleCombo.EVENT_AFTER_INIT="EVENT_AFTER_INIT",BI.BubbleCombo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.BubbleCombo.EVENT_AFTER_POPUPVIEW="EVENT_AFTER_POPUPVIEW",BI.BubbleCombo.EVENT_BEFORE_HIDEVIEW="EVENT_BEFORE_HIDEVIEW",BI.BubbleCombo.EVENT_AFTER_HIDEVIEW="EVENT_AFTER_HIDEVIEW",BI.shortcut("bi.bubble_combo",BI.BubbleCombo),BI.BubblePopupView=BI.inherit(BI.PopupView,{_defaultConfig:function(){var config=BI.BubblePopupView.superclass._defaultConfig.apply(this,arguments);return BI.extend(config,{baseCls:config.baseCls+" bi-bubble-popup-view",minWidth:220,maxWidth:300,minHeight:90})},_init:function(){BI.BubblePopupView.superclass._init.apply(this,arguments)}}),BI.shortcut("bi.bubble_popup_view",BI.BubblePopupView),BI.BubblePopupBarView=BI.inherit(BI.BubblePopupView,{_defaultConfig:function(){return BI.extend(BI.BubblePopupBarView.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-bubble-bar-popup-view",buttons:[{value:!1,text:BI.i18nText("BI-Basic_Cancel"),ghost:!0},{text:BI.i18nText(BI.i18nText("BI-Basic_Sure")),value:!0}]})},_init:function(){BI.BubblePopupBarView.superclass._init.apply(this,arguments)},_createToolBar:function(){var o=this.options,self=this,items=[];return BI.each(o.buttons,function(i,buttonOpt){BI.isWidget(buttonOpt)?items.push(buttonOpt):items.push(BI.extend({type:"bi.button",height:24,handler:function(v){self.fireEvent(BI.BubblePopupBarView.EVENT_CLICK_TOOLBAR_BUTTON,v)}},buttonOpt))}),BI.createWidget({type:"bi.center",height:44,rgap:15,items:[{type:"bi.right_vertical_adapt",lgap:10,items:items}]})},_createView:function(){var o=this.options,button=BI.createWidget({type:"bi.button_group",items:[o.el],layouts:[{type:"bi.vertical",cls:"bar-popup-container",hgap:15,tgap:10}]});return button.element.css("min-height",o.minHeight-44),button}}),BI.BubblePopupBarView.EVENT_CLICK_TOOLBAR_BUTTON="EVENT_CLICK_TOOLBAR_BUTTON",BI.shortcut("bi.bubble_bar_popup_view",BI.BubblePopupBarView),BI.TextBubblePopupBarView=BI.inherit(BI.Widget,{props:function(){return{baseCls:"bi-text-bubble-bar-popup-view",text:"",buttons:[{level:"ignore",value:!1,stopPropagation:!0,text:BI.i18nText("BI-Basic_Cancel")},{value:!0,stopPropagation:!0,text:BI.i18nText("BI-Basic_Sure")}]}},render:function(){var self=this,o=this.options,buttons=BI.map(o.buttons,function(index,buttonOpt){return BI.isWidget(buttonOpt)?buttonOpt:BI.extend({type:"bi.button",height:24,handler:function(v){self.fireEvent(BI.TextBubblePopupBarView.EVENT_CHANGE,v)}},buttonOpt)});return{type:"bi.bubble_bar_popup_view",minWidth:o.minWidth,maxWidth:o.maxWidth,minHeight:o.minHeight,ref:function(){self.popup=this},el:{type:"bi.label",text:o.text,whiteSpace:"normal",textAlign:"left",ref:function(){self.text=this}},buttons:buttons}},populate:function(v){this.text.setText(v||this.options.text)}}),BI.TextBubblePopupBarView.EVENT_CHANGE="EVENT_CLICK_TOOLBAR_BUTTON",BI.shortcut("bi.text_bubble_bar_popup_view",BI.TextBubblePopupBarView),BI.EditorIconCheckCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.EditorIconCheckCombo.superclass._defaultConfig.apply(this,arguments),{baseClass:"bi-check-editor-combo",width:100,height:24,chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,validationChecker:BI.emptyFn,quitChecker:BI.emptyFn,allowBlank:!0,watermark:"",errorText:""})},_init:function(){BI.EditorIconCheckCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.trigger=BI.createWidget({type:"bi.editor_trigger",items:o.items,height:o.height,validationChecker:o.validationChecker,quitChecker:o.quitChecker,allowBlank:o.allowBlank,watermark:o.watermark,errorText:o.errorText,value:o.value}),this.trigger.on(BI.EditorTrigger.EVENT_CHANGE,function(){self.popup.setValue(this.getValue()),self.fireEvent(BI.EditorIconCheckCombo.EVENT_CHANGE)}),this.popup=BI.createWidget({type:"bi.text_value_check_combo_popup",chooseType:o.chooseType,items:o.items,value:o.value}),this.popup.on(BI.TextValueCheckComboPopup.EVENT_CHANGE,function(){self.setValue(self.popup.getValue()),self.editorIconCheckCombo.hideView(),self.fireEvent(BI.EditorIconCheckCombo.EVENT_CHANGE)}),this.popup.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editorIconCheckCombo=BI.createWidget({type:"bi.combo",container:o.container,element:this,adjustLength:2,el:this.trigger,popup:{el:this.popup,maxHeight:300}})},setValue:function(v){this.editorIconCheckCombo.setValue(v)},getValue:function(){return this.trigger.getValue()},populate:function(items){this.options.items=items,this.editorIconCheckCombo.populate(items)}}),BI.EditorIconCheckCombo.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.editor_icon_check_combo",BI.EditorIconCheckCombo),BI.IconCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.IconCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-icon-combo",width:24,height:24,el:{},popup:{},minWidth:100,maxWidth:"auto",maxHeight:300,direction:"bottom",adjustLength:3,adjustXOffset:0,adjustYOffset:0,offsetStyle:"left",chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE})},_init:function(){BI.IconCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.trigger=BI.createWidget(o.el,{type:"bi.icon_combo_trigger",iconCls:o.iconCls,title:o.title,items:o.items,width:o.width,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight,value:o.value}),this.popup=BI.createWidget(o.popup,{type:"bi.icon_combo_popup",chooseType:o.chooseType,items:o.items,value:o.value}),this.popup.on(BI.IconComboPopup.EVENT_CHANGE,function(){self.setValue(self.popup.getValue()),self.iconCombo.hideView(),self.fireEvent(BI.IconCombo.EVENT_CHANGE)}),this.popup.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.iconCombo=BI.createWidget({type:"bi.combo",element:this,direction:o.direction,trigger:o.trigger,container:o.container,adjustLength:o.adjustLength,adjustXOffset:o.adjustXOffset,adjustYOffset:o.adjustYOffset,offsetStyle:o.offsetStyle,el:this.trigger,popup:{el:this.popup,maxWidth:o.maxWidth,maxHeight:o.maxHeight,minWidth:o.minWidth}})},showView:function(){this.iconCombo.showView()},hideView:function(){this.iconCombo.hideView()},setValue:function(v){this.trigger.setValue(v),this.popup.setValue(v)},getValue:function(){var value=this.popup.getValue();return BI.isNull(value)?[]:BI.isArray(value)?value:[value]},populate:function(items){this.options.items=items,this.iconCombo.populate(items)}}),BI.IconCombo.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.icon_combo",BI.IconCombo),BI.IconComboPopup=BI.inherit(BI.Pane,{_defaultConfig:function(){return BI.extend(BI.IconComboPopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi.icon-combo-popup",chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE})},_init:function(){BI.IconComboPopup.superclass._init.apply(this,arguments);var o=this.options,self=this;this.popup=BI.createWidget({type:"bi.button_group",items:BI.createItems(o.items,{type:"bi.single_select_icon_text_item",height:24}),chooseType:o.chooseType,layouts:[{type:"bi.vertical"}],value:o.value}),this.popup.on(BI.Controller.EVENT_CHANGE,function(type,val,obj){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.IconComboPopup.EVENT_CHANGE,val,obj)}),BI.createWidget({type:"bi.vertical",element:this,vgap:5,items:[this.popup]})},populate:function(items){BI.IconComboPopup.superclass.populate.apply(this,arguments),items=BI.createItems(items,{type:"bi.single_select_icon_text_item",height:24}),this.popup.populate(items)},getValue:function(){return this.popup.getValue()},setValue:function(v){this.popup.setValue(v)}}),BI.IconComboPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.icon_combo_popup",BI.IconComboPopup),BI.IconComboTrigger=BI.inherit(BI.Trigger,{_defaultConfig:function(){return BI.extend(BI.IconComboTrigger.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-icon-combo-trigger",el:{},items:[],iconCls:"",width:24,height:24,isShowDown:!0,value:""})},_init:function(){BI.IconComboTrigger.superclass._init.apply(this,arguments);var o=this.options,self=this,iconCls="";BI.isKey(o.value)&&(iconCls=this._digest(o.value,o.items)),this.button=BI.createWidget(o.el,{type:"bi.icon_change_button",cls:"icon-combo-trigger-icon",iconCls:iconCls,disableSelected:!0,width:o.isShowDown?o.width-12:o.width,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight,selected:BI.isNotEmptyString(iconCls)}),this.down=BI.createWidget({type:"bi.icon_button",disableSelected:!0,cls:"icon-combo-down-icon trigger-triangle-font font-size-12",width:12,height:8,selected:BI.isNotEmptyString(iconCls)}),this.down.setVisible(o.isShowDown),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.button,left:0,right:0,top:0,bottom:0},{el:this.down,right:3,bottom:0}]})},_digest:function(v,items){var iconCls="";return v=BI.isArray(v)?v[0]:v,BI.any(items,function(i,item){if(v===item.value)return iconCls=item.iconCls,!0}),iconCls},populate:function(items){var o=this.options;this.options.items=items||[],this.button.setIcon(o.iconCls),this.button.setSelected(!1),this.down.setSelected(!1)},setValue:function(v){BI.IconComboTrigger.superclass.setValue.apply(this,arguments);var o=this.options,iconCls=this._digest(v,this.options.items);v=BI.isArray(v)?v[0]:v,BI.isNotEmptyString(iconCls)?(this.button.setIcon(iconCls),this.button.setSelected(!0),this.down.setSelected(!0)):(this.button.setIcon(o.iconCls),this.button.setSelected(!1),this.down.setSelected(!1))}}),BI.IconComboTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.icon_combo_trigger",BI.IconComboTrigger),BI.IconTextValueCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.IconTextValueCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-icon-text-value-combo",height:24,iconHeight:null,iconWidth:null,value:"",attributes:{tabIndex:0}})},_init:function(){BI.IconTextValueCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.trigger=BI.createWidget({type:"bi.select_icon_text_trigger",cls:"icon-text-value-trigger",items:o.items,height:o.height,text:o.text,iconCls:o.iconCls,value:o.value,iconHeight:o.iconHeight,iconWidth:o.iconWidth,iconWrapperWidth:o.iconWrapperWidth,title:o.title,warningTitle:o.warningTitle}),this.popup=BI.createWidget({type:"bi.icon_text_value_combo_popup",items:o.items,value:o.value,iconHeight:o.iconHeight,iconWidth:o.iconWidth,iconWrapperWidth:o.iconWrapperWidth}),this.popup.on(BI.IconTextValueComboPopup.EVENT_CHANGE,function(){self.setValue(self.popup.getValue()),self.textIconCombo.hideView(),self.fireEvent(BI.IconTextValueCombo.EVENT_CHANGE,arguments)}),this.popup.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.textIconCombo=BI.createWidget({type:"bi.combo",element:this,container:o.container,adjustLength:2,el:this.trigger,popup:{el:this.popup,maxHeight:240,minHeight:25}}),BI.isKey(o.value)&&this.setValue(o.value)},_checkError:function(v){if(BI.isNotNull(v)){v=BI.isArray(v)?v:[v];var result=BI.find(this.options.items,function(idx,item){return BI.contains(v,item.value)});BI.isNull(result)?(this.trigger.options.tipType="warning",this.element.removeClass("combo-error").addClass("combo-error")):(this.trigger.options.tipType="success",this.element.removeClass("combo-error"))}},setValue:function(v){this.trigger.setValue(v),this.popup.setValue(v),this._checkError(v)},getValue:function(){var value=this.popup.getValue();return BI.isNull(value)?[]:BI.isArray(value)?value:[value]},populate:function(items){this.options.items=items,this.textIconCombo.populate(items)}}),BI.IconTextValueCombo.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.icon_text_value_combo",BI.IconTextValueCombo),BI.IconTextValueComboPopup=BI.inherit(BI.Pane,{_defaultConfig:function(){return BI.extend(BI.IconTextValueComboPopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-icon-text-icon-popup",behaviors:{redmark:function(){return!0}}})},_init:function(){BI.IconTextValueComboPopup.superclass._init.apply(this,arguments);var o=this.options,self=this;this.popup=BI.createWidget({type:"bi.button_group",items:BI.createItems(o.items,{type:"bi.single_select_icon_text_item",height:24,iconHeight:o.iconHeight,iconWidth:o.iconWidth,iconWrapperWidth:o.iconWrapperWidth}),chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,layouts:[{type:"bi.vertical"}],behaviors:o.behaviors,value:o.value}),this.popup.on(BI.Controller.EVENT_CHANGE,function(type,val,obj){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.IconTextValueComboPopup.EVENT_CHANGE,val,obj)}),this.check(),BI.createWidget({type:"bi.vertical",element:this,vgap:5,items:[this.popup]})},populate:function(items,keyword){BI.IconTextValueComboPopup.superclass.populate.apply(this,arguments);var o=this.options;items=BI.createItems(items,{type:"bi.single_select_icon_text_item",height:24,iconWrapperWidth:o.iconWrapperWidth,iconHeight:o.iconHeight,iconWidth:o.iconWidth}),this.popup.populate(items,keyword)},getValue:function(){return this.popup.getValue()},setValue:function(v){this.popup.setValue(v)}}),BI.IconTextValueComboPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.icon_text_value_combo_popup",BI.IconTextValueComboPopup),BI.SearchTextValueCombo=BI.inherit(BI.Widget,{props:{baseCls:"bi-search-text-value-combo",height:24,text:"",items:[],tipType:"",warningTitle:"",attributes:{tabIndex:0}},render:function(){var self=this,o=this.options;return{type:"bi.absolute",items:[{el:{type:"bi.combo",container:o.container,adjustLength:2,toggle:!1,ref:function(){self.combo=this},el:{type:"bi.search_text_value_trigger",cls:"search-text-value-trigger",ref:function(){self.trigger=this},items:o.items,height:o.height-2,text:o.text,value:o.value,tipType:o.tipType,warningTitle:o.warningTitle,title:o.title,listeners:[{eventName:BI.SearchTextValueTrigger.EVENT_CHANGE,action:function(){self.setValue(this.getValue()),self.combo.hideView(),self.fireEvent(BI.SearchTextValueCombo.EVENT_CHANGE)}}]},popup:{el:{type:"bi.text_value_combo_popup",chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,value:o.value,items:o.items,ref:function(){self.popup=this,self.trigger.getSearcher().setAdapter(self.popup)},listeners:[{eventName:BI.TextValueComboPopup.EVENT_CHANGE,action:function(){self.setValue(this.getValue()),self.combo.hideView(),self.fireEvent(BI.SearchTextValueCombo.EVENT_CHANGE)}}]},value:o.value,maxHeight:252,minHeight:25},listeners:[{eventName:BI.Combo.EVENT_AFTER_HIDEVIEW,action:function(){self.trigger.stopEditing()}},{eventName:BI.Combo.EVENT_BEFORE_POPUPVIEW,action:function(){self.fireEvent(BI.SearchTextValueCombo.EVENT_BEFORE_POPUPVIEW)}}],hideChecker:function(e){return 0===self.triggerBtn.element.find(e.target).length}},left:0,right:0,bottom:0,top:0},{el:{type:"bi.trigger_icon_button",cls:"trigger-icon-button",ref:function(){self.triggerBtn=this},width:o.height,height:o.height,handler:function(){self.combo.isViewVisible()?self.combo.hideView():self.combo.showView()}},right:0,bottom:0,top:0}]}},mounted:function(){var o=this.options;BI.isKey(o.value)&&this._checkError(o.value)},_checkError:function(v){if(BI.isNotNull(v)){v=BI.isArray(v)?v:[v];var result=BI.find(this.options.items,function(idx,item){return BI.contains(v,item.value)});BI.isNull(result)?(this.element.removeClass("combo-error").addClass("combo-error"),this.trigger.attr("tipType","warning")):(this.element.removeClass("combo-error"),this.trigger.attr("tipType","success"))}},populate:function(items){this.options.items=items,this.combo.populate(items)},setValue:function(v){this.combo.setValue(v),this._checkError(v)},getValue:function(){var value=this.combo.getValue();return BI.isNull(value)?[]:BI.isArray(value)?value:[value]}}),BI.SearchTextValueCombo.EVENT_CHANGE="EVENT_CHANGE",BI.SearchTextValueCombo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.search_text_value_combo",BI.SearchTextValueCombo),BI.SearchTextValueComboPopup=BI.inherit(BI.Pane,{props:{baseCls:"bi-search-text-value-popup"},render:function(){var self=this,o=this.options;return{type:"bi.vertical",vgap:5,items:[{type:"bi.button_group",ref:function(){self.popup=this},items:BI.createItems(o.items,{type:"bi.single_select_item",textAlign:o.textAlign,height:24}),chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,layouts:[{type:"bi.vertical"}],behaviors:{redmark:function(){return!0}},value:o.value,listeners:[{eventName:BI.Controller.EVENT_CHANGE,action:function(type,val,obj){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.SearchTextValueComboPopup.EVENT_CHANGE,val,obj)}}]}]}},mounted:function(){this.check()},populate:function(find,match,keyword){var items=BI.concat(find,match);BI.SearchTextValueComboPopup.superclass.populate.apply(this,items),items=BI.createItems(items,{type:"bi.single_select_item",height:24}),this.popup.populate(items,keyword)},getValue:function(){return this.popup.getValue()},setValue:function(v){this.popup.setValue(v)}}),BI.SearchTextValueComboPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.search_text_value_combo_popup",BI.SearchTextValueComboPopup),BI.SearchTextValueTrigger=BI.inherit(BI.Trigger,{props:{extraCls:"bi-search-text-value-trigger bi-border",height:24},render:function(){var self=this,o=this.options;return{type:"bi.htape",items:[{el:{type:"bi.searcher",ref:function(){self.searcher=this},isAutoSearch:!1,el:{type:"bi.state_editor",ref:function(){self.editor=this},defaultText:o.text,text:this._digest(o.value,o.items),value:o.value,height:o.height,tipText:""},popup:{type:"bi.search_text_value_combo_popup",cls:"bi-card",chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE},onSearch:function(obj,callback){var keyword=obj.keyword,finding=BI.Func.getSearchResult(o.items,keyword),matched=finding.match,find=finding.find;callback(find,matched)},listeners:[{eventName:BI.Searcher.EVENT_CHANGE,action:function(){self.fireEvent(BI.SearchTextValueTrigger.EVENT_CHANGE)}}]}},{el:{type:"bi.layout",width:24},width:24}]}},_setState:function(v){this.editor.setState(v)},_digest:function(vals,items){var o=this.options;vals=BI.isArray(vals)?vals:[vals];var result=[],formatItems=BI.Tree.transformToArrayFormat(items);return BI.each(formatItems,function(i,item){BI.deepContains(vals,item.value)&&!BI.contains(result,item.text||item.value)&&result.push(item.text||item.value)}),result.length>0?result.join(","):BI.isFunction(o.text)?o.text():o.text},stopEditing:function(){this.searcher.stopSearch()},getSearcher:function(){return this.searcher},populate:function(items){this.options.items=items},setValue:function(vals){this._setState(this._digest(vals,this.options.items))},getValue:function(){return this.searcher.getValue()}}),BI.SearchTextValueTrigger.EVENT_SEARCHING="EVENT_SEARCHING",BI.SearchTextValueTrigger.EVENT_STOP="EVENT_STOP",BI.SearchTextValueTrigger.EVENT_START="EVENT_START",BI.SearchTextValueTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.search_text_value_trigger",BI.SearchTextValueTrigger),BI.TextValueCheckCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.TextValueCheckCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-text-value-check-combo",width:100,height:24,chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,value:"",attributes:{tabIndex:0}})},_init:function(){BI.TextValueCheckCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.trigger=BI.createWidget({type:"bi.select_text_trigger",cls:"text-value-trigger",items:o.items,height:o.height,text:o.text,value:o.value}),this.popup=BI.createWidget({type:"bi.text_value_check_combo_popup",chooseType:o.chooseType,items:o.items,value:o.value}),this.popup.on(BI.TextValueCheckComboPopup.EVENT_CHANGE,function(){self.setValue(self.popup.getValue()),self.textIconCheckCombo.hideView(),self.fireEvent(BI.TextValueCheckCombo.EVENT_CHANGE)}),this.popup.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.textIconCheckCombo=BI.createWidget({type:"bi.combo",container:o.container,element:this,adjustLength:2,el:this.trigger,popup:{el:this.popup,maxHeight:300}}),BI.isKey(o.value)&&this.setValue(o.value)},setTitle:function(title){this.trigger.setTitle(title)},setValue:function(v){this.trigger.setValue(v),this.popup.setValue(v)},setWarningTitle:function(title){this.trigger.setWarningTitle(title)},getValue:function(){var value=this.popup.getValue();return BI.isNull(value)?[]:BI.isArray(value)?value:[value]},populate:function(items){this.options.items=items,this.textIconCheckCombo.populate(items)}}),BI.TextValueCheckCombo.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.text_value_check_combo",BI.TextValueCheckCombo),BI.TextValueCheckComboPopup=BI.inherit(BI.Pane,{_defaultConfig:function(){return BI.extend(BI.TextValueCheckComboPopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-text-icon-popup",chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE})},_init:function(){BI.TextValueCheckComboPopup.superclass._init.apply(this,arguments);var o=this.options,self=this;this.popup=BI.createWidget({type:"bi.button_group",items:this._formatItems(o.items),chooseType:o.chooseType,layouts:[{type:"bi.vertical"}],value:o.value}),this.popup.on(BI.Controller.EVENT_CHANGE,function(type,val,obj){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.TextValueCheckComboPopup.EVENT_CHANGE,val,obj)}),BI.createWidget({type:"bi.vertical",element:this,vgap:5,items:[this.popup]})},_formatItems:function(items){return BI.map(items,function(i,item){return BI.extend({type:"bi.single_select_item",cls:"bi-list-item",height:24},item)})},populate:function(items){BI.TextValueCheckComboPopup.superclass.populate.apply(this,arguments),this.popup.populate(this._formatItems(items))},getValue:function(){return this.popup.getValue()},setValue:function(v){this.popup.setValue(v)}}),BI.TextValueCheckComboPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.text_value_check_combo_popup",BI.TextValueCheckComboPopup),BI.TextValueCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.TextValueCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-text-value-combo",height:24,chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,text:"",value:"",attributes:{tabIndex:0}})},_init:function(){BI.TextValueCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.trigger=BI.createWidget({type:"bi.select_text_trigger",cls:"text-value-trigger",items:o.items,height:o.height,text:o.text,value:o.value,warningTitle:o.warningTitle}),this.popup=BI.createWidget({type:"bi.text_value_combo_popup",chooseType:o.chooseType,value:o.value,items:o.items}),this.popup.on(BI.TextValueComboPopup.EVENT_CHANGE,function(){self.setValue(self.popup.getValue()),self.textIconCombo.hideView(),self.fireEvent(BI.TextValueCombo.EVENT_CHANGE,arguments)}),this.popup.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.textIconCombo=BI.createWidget({type:"bi.combo",container:o.container,element:this,adjustLength:2,el:this.trigger,popup:{el:this.popup,maxHeight:240,minHeight:25}}),BI.isKey(o.value)&&this._checkError(o.value)},_checkError:function(v){if(BI.isNotNull(v)){v=BI.isArray(v)?v:[v];var result=BI.find(this.options.items,function(idx,item){return BI.contains(v,item.value)});BI.isNull(result)?(this.trigger.setTipType("warning"),this.element.removeClass("combo-error").addClass("combo-error")):(this.trigger.setTipType("success"),this.element.removeClass("combo-error"))}},setValue:function(v){this.trigger.setValue(v),this.popup.setValue(v),this._checkError(v)},getValue:function(){var value=this.popup.getValue();return BI.isNull(value)?[]:BI.isArray(value)?value:[value]},populate:function(items){this.options.items=items,this.textIconCombo.populate(items)}}),BI.TextValueCombo.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.text_value_combo",BI.TextValueCombo),BI.SmallTextValueCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SmallTextValueCombo.superclass._defaultConfig.apply(this,arguments),{width:100,height:20,chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,el:{},text:""})},_init:function(){BI.SmallTextValueCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.trigger=BI.createWidget(o.el,{type:"bi.small_select_text_trigger",items:o.items,height:o.height,text:o.text}),this.popup=BI.createWidget({type:"bi.text_value_combo_popup",chooseType:o.chooseType,items:o.items}),this.popup.on(BI.TextValueComboPopup.EVENT_CHANGE,function(){self.setValue(self.popup.getValue()),self.SmallTextValueCombo.hideView(),self.fireEvent(BI.SmallTextValueCombo.EVENT_CHANGE)}),this.popup.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.SmallTextValueCombo=BI.createWidget({type:"bi.combo",element:this,container:o.container,adjustLength:2,el:this.trigger,popup:{el:this.popup,maxHeight:240,minHeight:25}})},setValue:function(v){this.trigger.setValue(v),this.popup.setValue(v)},getValue:function(){return this.popup.getValue()},populate:function(items){this.options.items=items,this.SmallTextValueCombo.populate(items)}}),BI.SmallTextValueCombo.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.small_text_value_combo",BI.SmallTextValueCombo),BI.TextValueComboPopup=BI.inherit(BI.Pane,{_defaultConfig:function(){return BI.extend(BI.TextValueComboPopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-text-icon-popup",chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE})},_init:function(){BI.TextValueComboPopup.superclass._init.apply(this,arguments);var o=this.options,self=this;this.popup=BI.createWidget({type:"bi.button_group",items:BI.createItems(o.items,{type:"bi.single_select_item",textAlign:o.textAlign,height:24}),chooseType:o.chooseType,layouts:[{type:"bi.vertical"}],value:o.value}),this.popup.on(BI.Controller.EVENT_CHANGE,function(type,val,obj){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.TextValueComboPopup.EVENT_CHANGE,val,obj)}),this.check(),BI.createWidget({type:"bi.vertical",element:this,vgap:5,items:[this.popup]})},populate:function(items){BI.TextValueComboPopup.superclass.populate.apply(this,arguments),items=BI.createItems(items,{type:"bi.single_select_item",height:24}),this.popup.populate(items)},getValue:function(){return this.popup.getValue()},setValue:function(v){this.popup.setValue(v)}}),BI.TextValueComboPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.text_value_combo_popup",BI.TextValueComboPopup),BI.ClearEditor=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.ClearEditor.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-clear-editor",height:24,errorText:"",watermark:"",validationChecker:BI.emptyFn,quitChecker:BI.emptyFn})},_init:function(){BI.ClearEditor.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget({type:"bi.editor",height:o.height,watermark:o.watermark,allowBlank:!0,errorText:o.errorText,validationChecker:o.validationChecker,quitChecker:o.quitChecker,value:o.value}),this.clear=BI.createWidget({type:"bi.icon_button",stopEvent:!0,cls:"search-close-h-font"}),this.clear.on(BI.IconButton.EVENT_CHANGE,function(){self.setValue(""),self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.STOPEDIT),self.fireEvent(BI.ClearEditor.EVENT_CLEAR)}),BI.createWidget({element:this,type:"bi.htape",items:[{el:this.editor},{el:this.clear,width:24}]}),this.editor.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editor.on(BI.Editor.EVENT_FOCUS,function(){self.fireEvent(BI.ClearEditor.EVENT_FOCUS)}),this.editor.on(BI.Editor.EVENT_BLUR,function(){self.fireEvent(BI.ClearEditor.EVENT_BLUR)}),this.editor.on(BI.Editor.EVENT_CLICK,function(){self.fireEvent(BI.ClearEditor.EVENT_CLICK)}),this.editor.on(BI.Editor.EVENT_CHANGE,function(){self._checkClear(),self.fireEvent(BI.ClearEditor.EVENT_CHANGE)}),this.editor.on(BI.Editor.EVENT_KEY_DOWN,function(v){self.fireEvent(BI.ClearEditor.EVENT_KEY_DOWN,v)}),this.editor.on(BI.Editor.EVENT_SPACE,function(){self.fireEvent(BI.ClearEditor.EVENT_SPACE)}),this.editor.on(BI.Editor.EVENT_BACKSPACE,function(){self.fireEvent(BI.ClearEditor.EVENT_BACKSPACE)}),this.editor.on(BI.Editor.EVENT_VALID,function(){self.fireEvent(BI.ClearEditor.EVENT_VALID)}),this.editor.on(BI.Editor.EVENT_ERROR,function(){self.fireEvent(BI.ClearEditor.EVENT_ERROR)}),this.editor.on(BI.Editor.EVENT_ENTER,function(){self.fireEvent(BI.ClearEditor.EVENT_ENTER)}),this.editor.on(BI.Editor.EVENT_RESTRICT,function(){self.fireEvent(BI.ClearEditor.EVENT_RESTRICT)}),this.editor.on(BI.Editor.EVENT_EMPTY,function(){self._checkClear(),self.fireEvent(BI.ClearEditor.EVENT_EMPTY)}),this.editor.on(BI.Editor.EVENT_REMOVE,function(){self.fireEvent(BI.ClearEditor.EVENT_REMOVE)}),this.editor.on(BI.Editor.EVENT_CONFIRM,function(){ +self.fireEvent(BI.ClearEditor.EVENT_CONFIRM)}),this.editor.on(BI.Editor.EVENT_CHANGE_CONFIRM,function(){self.fireEvent(BI.ClearEditor.EVENT_CHANGE_CONFIRM)}),this.editor.on(BI.Editor.EVENT_START,function(){self.fireEvent(BI.ClearEditor.EVENT_START)}),this.editor.on(BI.Editor.EVENT_PAUSE,function(){self.fireEvent(BI.ClearEditor.EVENT_PAUSE)}),this.editor.on(BI.Editor.EVENT_STOP,function(){self.fireEvent(BI.ClearEditor.EVENT_STOP)}),BI.isKey(o.value)?this.clear.visible():this.clear.invisible()},_checkClear:function(){this.getValue()?this.clear.visible():this.clear.invisible()},setWaterMark:function(v){this.options.watermark=v,this.editor.setWaterMark(v)},focus:function(){this.editor.focus()},blur:function(){this.editor.blur()},getValue:function(){if(this.isValid()){var res=this.editor.getValue().match(/[\S]+/g);return BI.isNull(res)?"":res[res.length-1]}},setValue:function(v){this.editor.setValue(v),BI.isKey(v)&&this.clear.visible()},isValid:function(){return this.editor.isValid()}}),BI.ClearEditor.EVENT_CHANGE="EVENT_CHANGE",BI.ClearEditor.EVENT_FOCUS="EVENT_FOCUS",BI.ClearEditor.EVENT_BLUR="EVENT_BLUR",BI.ClearEditor.EVENT_CLICK="EVENT_CLICK",BI.ClearEditor.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.ClearEditor.EVENT_SPACE="EVENT_SPACE",BI.ClearEditor.EVENT_BACKSPACE="EVENT_BACKSPACE",BI.ClearEditor.EVENT_CLEAR="EVENT_CLEAR",BI.ClearEditor.EVENT_START="EVENT_START",BI.ClearEditor.EVENT_PAUSE="EVENT_PAUSE",BI.ClearEditor.EVENT_STOP="EVENT_STOP",BI.ClearEditor.EVENT_CONFIRM="EVENT_CONFIRM",BI.ClearEditor.EVENT_CHANGE_CONFIRM="EVENT_CHANGE_CONFIRM",BI.ClearEditor.EVENT_VALID="EVENT_VALID",BI.ClearEditor.EVENT_ERROR="EVENT_ERROR",BI.ClearEditor.EVENT_ENTER="EVENT_ENTER",BI.ClearEditor.EVENT_RESTRICT="EVENT_RESTRICT",BI.ClearEditor.EVENT_REMOVE="EVENT_REMOVE",BI.ClearEditor.EVENT_EMPTY="EVENT_EMPTY",BI.shortcut("bi.clear_editor",BI.ClearEditor),BI.ShelterEditor=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.ShelterEditor.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-shelter-editor",hgap:4,vgap:2,lgap:0,rgap:0,tgap:0,bgap:0,validationChecker:BI.emptyFn,quitChecker:BI.emptyFn,allowBlank:!0,watermark:"",errorText:"",height:24,textAlign:"left"})},_init:function(){BI.ShelterEditor.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget({type:"bi.editor",height:o.height,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,value:o.value,validationChecker:o.validationChecker,quitChecker:o.quitChecker,allowBlank:o.allowBlank,watermark:o.watermark,errorText:o.errorText}),this.text=BI.createWidget({type:"bi.text_button",cls:"shelter-editor-text",title:o.title,warningTitle:o.warningTitle,tipType:o.tipType,textAlign:o.textAlign,height:o.height,hgap:o.hgap}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.text,left:0,right:0,top:0,bottom:0}]}),this.text.on(BI.Controller.EVENT_CHANGE,function(){arguments[2]=self,self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.text.on(BI.TextButton.EVENT_CHANGE,function(){self.fireEvent(BI.ShelterEditor.EVENT_CLICK_LABEL)}),this.editor.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editor.on(BI.Editor.EVENT_FOCUS,function(){self.fireEvent(BI.ShelterEditor.EVENT_FOCUS,arguments)}),this.editor.on(BI.Editor.EVENT_BLUR,function(){self.fireEvent(BI.ShelterEditor.EVENT_BLUR,arguments)}),this.editor.on(BI.Editor.EVENT_CLICK,function(){self.fireEvent(BI.ShelterEditor.EVENT_CLICK,arguments)}),this.editor.on(BI.Editor.EVENT_CHANGE,function(){self.fireEvent(BI.ShelterEditor.EVENT_CHANGE,arguments)}),this.editor.on(BI.Editor.EVENT_KEY_DOWN,function(v){self.fireEvent(BI.ShelterEditor.EVENT_KEY_DOWN,arguments)}),this.editor.on(BI.Editor.EVENT_VALID,function(){self.fireEvent(BI.ShelterEditor.EVENT_VALID,arguments)}),this.editor.on(BI.Editor.EVENT_CONFIRM,function(){self._showHint(),self._checkText(),self.fireEvent(BI.ShelterEditor.EVENT_CONFIRM,arguments)}),this.editor.on(BI.Editor.EVENT_CHANGE_CONFIRM,function(){self._showHint(),self._checkText(),self.fireEvent(BI.ShelterEditor.EVENT_CHANGE_CONFIRM,arguments)}),this.editor.on(BI.Editor.EVENT_START,function(){self.fireEvent(BI.ShelterEditor.EVENT_START,arguments)}),this.editor.on(BI.Editor.EVENT_PAUSE,function(){self.fireEvent(BI.ShelterEditor.EVENT_PAUSE,arguments)}),this.editor.on(BI.Editor.EVENT_STOP,function(){self.fireEvent(BI.ShelterEditor.EVENT_STOP,arguments)}),this.editor.on(BI.Editor.EVENT_SPACE,function(){self.fireEvent(BI.ShelterEditor.EVENT_SPACE,arguments)}),this.editor.on(BI.Editor.EVENT_ERROR,function(){self._checkText(),self.fireEvent(BI.ShelterEditor.EVENT_ERROR,arguments)}),this.editor.on(BI.Editor.EVENT_ENTER,function(){self.fireEvent(BI.ShelterEditor.EVENT_ENTER,arguments)}),this.editor.on(BI.Editor.EVENT_RESTRICT,function(){self.fireEvent(BI.ShelterEditor.EVENT_RESTRICT,arguments)}),this.editor.on(BI.Editor.EVENT_EMPTY,function(){self.fireEvent(BI.ShelterEditor.EVENT_EMPTY,arguments)}),BI.createWidget({type:"bi.vertical",scrolly:!1,element:this,items:[this.editor]}),this._showHint(),self._checkText(),BI.isKey(o.keyword)&&this.text.doRedMark(o.keyword)},_checkText:function(){var o=this.options;""===this.editor.getValue()?(this.text.setValue(o.watermark||""),this.text.element.addClass("bi-water-mark")):(this.text.setValue(this.editor.getValue()),this.text.element.removeClass("bi-water-mark"))},_showInput:function(){this.editor.visible(),this.text.invisible()},_showHint:function(){this.editor.invisible(),this.text.visible()},setWaterMark:function(v){this.options.watermark=v,this.editor.setWaterMark(v)},setTitle:function(title){this.text.setTitle(title)},setWarningTitle:function(title){this.text.setWarningTitle(title)},focus:function(){this._showInput(),this.editor.focus()},blur:function(){this.editor.blur(),this._showHint(),this._checkText()},doRedMark:function(){""===this.editor.getValue()&&BI.isKey(this.options.watermark)||this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){""===this.editor.getValue()&&BI.isKey(this.options.watermark)||this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},isValid:function(){return this.editor.isValid()},setErrorText:function(text){this.editor.setErrorText(text)},getErrorText:function(){return this.editor.getErrorText()},isEditing:function(){return this.editor.isEditing()},getLastValidValue:function(){return this.editor.getLastValidValue()},getLastChangedValue:function(){return this.editor.getLastChangedValue()},setTextStyle:function(style){this.text.setStyle(style)},setValue:function(k){var o=this.options;this.editor.setValue(k),this._checkText(),BI.isKey(o.keyword)&&this.text.doRedMark(o.keyword)},getValue:function(){return this.editor.getValue()},getState:function(){return this.text.getValue()},setState:function(v){this._showHint(),this.text.setValue(v)}}),BI.ShelterEditor.EVENT_CHANGE="EVENT_CHANGE",BI.ShelterEditor.EVENT_FOCUS="EVENT_FOCUS",BI.ShelterEditor.EVENT_BLUR="EVENT_BLUR",BI.ShelterEditor.EVENT_CLICK="EVENT_CLICK",BI.ShelterEditor.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.ShelterEditor.EVENT_CLICK_LABEL="EVENT_CLICK_LABEL",BI.ShelterEditor.EVENT_START="EVENT_START",BI.ShelterEditor.EVENT_PAUSE="EVENT_PAUSE",BI.ShelterEditor.EVENT_STOP="EVENT_STOP",BI.ShelterEditor.EVENT_CONFIRM="EVENT_CONFIRM",BI.ShelterEditor.EVENT_CHANGE_CONFIRM="EVENT_CHANGE_CONFIRM",BI.ShelterEditor.EVENT_VALID="EVENT_VALID",BI.ShelterEditor.EVENT_ERROR="EVENT_ERROR",BI.ShelterEditor.EVENT_ENTER="EVENT_ENTER",BI.ShelterEditor.EVENT_RESTRICT="EVENT_RESTRICT",BI.ShelterEditor.EVENT_SPACE="EVENT_SPACE",BI.ShelterEditor.EVENT_EMPTY="EVENT_EMPTY",BI.shortcut("bi.shelter_editor",BI.ShelterEditor),BI.SignEditor=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.SignEditor.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-sign-editor",hgap:4,vgap:2,lgap:0,rgap:0,tgap:0,bgap:0,validationChecker:BI.emptyFn,quitChecker:BI.emptyFn,allowBlank:!0,watermark:"",errorText:"",height:24})},_init:function(){BI.SignEditor.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget({type:"bi.editor",height:o.height,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,value:o.value,validationChecker:o.validationChecker,quitChecker:o.quitChecker,allowBlank:o.allowBlank,watermark:o.watermark,errorText:o.errorText}),this.text=BI.createWidget({type:"bi.text_button",cls:"sign-editor-text",title:o.title,warningTitle:o.warningTitle,tipType:o.tipType,textAlign:"left",height:o.height,hgap:o.hgap,handler:function(){self._showInput(),self.editor.focus(),self.editor.selectAll()}}),this.text.on(BI.TextButton.EVENT_CHANGE,function(){BI.nextTick(function(){self.fireEvent(BI.SignEditor.EVENT_CLICK_LABEL)})}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.text,left:0,right:0,top:0,bottom:0}]}),this.editor.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editor.on(BI.Editor.EVENT_FOCUS,function(){self.fireEvent(BI.SignEditor.EVENT_FOCUS,arguments)}),this.editor.on(BI.Editor.EVENT_BLUR,function(){self.fireEvent(BI.SignEditor.EVENT_BLUR,arguments)}),this.editor.on(BI.Editor.EVENT_CLICK,function(){self.fireEvent(BI.SignEditor.EVENT_CLICK,arguments)}),this.editor.on(BI.Editor.EVENT_CHANGE,function(){self.fireEvent(BI.SignEditor.EVENT_CHANGE,arguments)}),this.editor.on(BI.Editor.EVENT_KEY_DOWN,function(v){self.fireEvent(BI.SignEditor.EVENT_KEY_DOWN,arguments)}),this.editor.on(BI.Editor.EVENT_VALID,function(){self.fireEvent(BI.SignEditor.EVENT_VALID,arguments)}),this.editor.on(BI.Editor.EVENT_CONFIRM,function(){self._showHint(),self._checkText(),self.fireEvent(BI.SignEditor.EVENT_CONFIRM,arguments)}),this.editor.on(BI.Editor.EVENT_CHANGE_CONFIRM,function(){self._showHint(),self._checkText(),self.fireEvent(BI.SignEditor.EVENT_CHANGE_CONFIRM,arguments)}),this.editor.on(BI.Editor.EVENT_START,function(){self.fireEvent(BI.SignEditor.EVENT_START,arguments)}),this.editor.on(BI.Editor.EVENT_PAUSE,function(){self.fireEvent(BI.SignEditor.EVENT_PAUSE,arguments)}),this.editor.on(BI.Editor.EVENT_STOP,function(){self.fireEvent(BI.SignEditor.EVENT_STOP,arguments)}),this.editor.on(BI.Editor.EVENT_SPACE,function(){self.fireEvent(BI.SignEditor.EVENT_SPACE,arguments)}),this.editor.on(BI.Editor.EVENT_ERROR,function(){self._checkText(),self.fireEvent(BI.SignEditor.EVENT_ERROR,arguments)}),this.editor.on(BI.Editor.EVENT_ENTER,function(){self.fireEvent(BI.SignEditor.EVENT_ENTER,arguments)}),this.editor.on(BI.Editor.EVENT_RESTRICT,function(){self.fireEvent(BI.SignEditor.EVENT_RESTRICT,arguments)}),this.editor.on(BI.Editor.EVENT_EMPTY,function(){self.fireEvent(BI.SignEditor.EVENT_EMPTY,arguments)}),BI.createWidget({type:"bi.vertical",scrolly:!1,element:this,items:[this.editor]}),this._showHint(),self._checkText()},_checkText:function(){var o=this.options;BI.nextTick(BI.bind(function(){""===this.editor.getValue()?(this.text.setValue(o.watermark||""),this.text.element.addClass("bi-water-mark")):(this.text.setValue(this.editor.getValue()),this.text.element.removeClass("bi-water-mark"),BI.isKey(o.keyword)&&this.text.doRedMark(o.keyword))},this))},_showInput:function(){this.editor.visible(),this.text.invisible()},_showHint:function(){this.editor.invisible(),this.text.visible()},setTitle:function(title){this.text.setTitle(title)},setWarningTitle:function(title){this.text.setWarningTitle(title)},setWaterMark:function(v){this.options.watermark=v,this.editor.setWaterMark(v)},focus:function(){this._showInput(),this.editor.focus()},blur:function(){this.editor.blur(),this._showHint(),this._checkText()},doRedMark:function(){""===this.editor.getValue()&&BI.isKey(this.options.watermark)||this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){""===this.editor.getValue()&&BI.isKey(this.options.watermark)||this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},isValid:function(){return this.editor.isValid()},setErrorText:function(text){this.editor.setErrorText(text)},getErrorText:function(){return this.editor.getErrorText()},isEditing:function(){return this.editor.isEditing()},getLastValidValue:function(){return this.editor.getLastValidValue()},getLastChangedValue:function(){return this.editor.getLastChangedValue()},setValue:function(k){this.editor.setValue(k),this._checkText()},getValue:function(){return this.editor.getValue()},getState:function(){return this.text.getValue()},setState:function(v){this._showHint(),this.text.setValue(v)}}),BI.SignEditor.EVENT_CHANGE="EVENT_CHANGE",BI.SignEditor.EVENT_FOCUS="EVENT_FOCUS",BI.SignEditor.EVENT_BLUR="EVENT_BLUR",BI.SignEditor.EVENT_CLICK="EVENT_CLICK",BI.SignEditor.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.SignEditor.EVENT_CLICK_LABEL="EVENT_CLICK_LABEL",BI.SignEditor.EVENT_START="EVENT_START",BI.SignEditor.EVENT_PAUSE="EVENT_PAUSE",BI.SignEditor.EVENT_STOP="EVENT_STOP",BI.SignEditor.EVENT_CONFIRM="EVENT_CONFIRM",BI.SignEditor.EVENT_CHANGE_CONFIRM="EVENT_CHANGE_CONFIRM",BI.SignEditor.EVENT_VALID="EVENT_VALID",BI.SignEditor.EVENT_ERROR="EVENT_ERROR",BI.SignEditor.EVENT_ENTER="EVENT_ENTER",BI.SignEditor.EVENT_RESTRICT="EVENT_RESTRICT",BI.SignEditor.EVENT_SPACE="EVENT_SPACE",BI.SignEditor.EVENT_EMPTY="EVENT_EMPTY",BI.shortcut("bi.sign_editor",BI.SignEditor),BI.StateEditor=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.StateEditor.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-state-editor",hgap:4,vgap:2,lgap:0,rgap:0,tgap:0,bgap:0,validationChecker:BI.emptyFn,quitChecker:BI.emptyFn,allowBlank:!0,watermark:"",errorText:"",height:24,defaultText:"",text:BI.i18nText("BI-Basic_Unrestricted")})},_init:function(){BI.StateEditor.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget({type:"bi.editor",height:o.height,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,value:o.value,validationChecker:o.validationChecker,quitChecker:o.quitChecker,allowBlank:o.allowBlank,watermark:o.watermark,errorText:o.errorText}),this.text=BI.createWidget({type:"bi.text_button",cls:"bi-water-mark tip-text-style",textAlign:"left",height:o.height,text:o.text,hgap:o.hgap,handler:function(){self._showInput(),self.editor.focus(),self.editor.setValue("")},title:BI.isNotNull(o.tipText)?o.tipText:function(){var title="";return BI.isString(self.stateValue)&&(title=self.stateValue),BI.isArray(self.stateValue)&&1===self.stateValue.length&&(title=self.stateValue[0]),title},warningTitle:o.warningTitle,tipType:o.tipType}),this.text.on(BI.TextButton.EVENT_CHANGE,function(){BI.nextTick(function(){self.fireEvent(BI.StateEditor.EVENT_CLICK_LABEL)})}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.text,left:0,right:0,top:0,bottom:0}]}),this.editor.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editor.on(BI.Editor.EVENT_FOCUS,function(){self.fireEvent(BI.StateEditor.EVENT_FOCUS,arguments)}),this.editor.on(BI.Editor.EVENT_BLUR,function(){self.fireEvent(BI.StateEditor.EVENT_BLUR,arguments)}),this.editor.on(BI.Editor.EVENT_CLICK,function(){self.fireEvent(BI.StateEditor.EVENT_CLICK,arguments)}),this.editor.on(BI.Editor.EVENT_CHANGE,function(){self.fireEvent(BI.StateEditor.EVENT_CHANGE,arguments)}),this.editor.on(BI.Editor.EVENT_KEY_DOWN,function(v){self.fireEvent(BI.StateEditor.EVENT_KEY_DOWN,arguments)}),this.editor.on(BI.Editor.EVENT_VALID,function(){self.fireEvent(BI.StateEditor.EVENT_VALID,arguments)}),this.editor.on(BI.Editor.EVENT_CONFIRM,function(){self._showHint(),self.fireEvent(BI.StateEditor.EVENT_CONFIRM,arguments)}),this.editor.on(BI.Editor.EVENT_CHANGE_CONFIRM,function(){self._showHint(),self.fireEvent(BI.StateEditor.EVENT_CHANGE_CONFIRM,arguments)}),this.editor.on(BI.Editor.EVENT_START,function(){self.fireEvent(BI.StateEditor.EVENT_START,arguments)}),this.editor.on(BI.Editor.EVENT_PAUSE,function(){self.fireEvent(BI.StateEditor.EVENT_PAUSE,arguments)}),this.editor.on(BI.Editor.EVENT_STOP,function(){self.fireEvent(BI.StateEditor.EVENT_STOP,arguments)}),this.editor.on(BI.Editor.EVENT_SPACE,function(){self.fireEvent(BI.StateEditor.EVENT_SPACE,arguments)}),this.editor.on(BI.Editor.EVENT_ERROR,function(){self.fireEvent(BI.StateEditor.EVENT_ERROR,arguments)}),this.editor.on(BI.Editor.EVENT_ENTER,function(){self.fireEvent(BI.StateEditor.EVENT_ENTER,arguments)}),this.editor.on(BI.Editor.EVENT_RESTRICT,function(){self.fireEvent(BI.StateEditor.EVENT_RESTRICT,arguments)}),this.editor.on(BI.Editor.EVENT_EMPTY,function(){self.fireEvent(BI.StateEditor.EVENT_EMPTY,arguments)}),BI.createWidget({type:"bi.vertical",scrolly:!1,element:this,items:[this.editor]}),this._showHint(),BI.isNotNull(o.text)&&this.setState(o.text)},setWaterMark:function(v){this.options.watermark=v,this.editor.setWaterMark(v)},doRedMark:function(){""===this.editor.getValue()&&BI.isKey(this.options.watermark)||this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){""===this.editor.getValue()&&BI.isKey(this.options.watermark)||this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},focus:function(){this.options.disabled===!1&&(this._showInput(),this.editor.focus())},blur:function(){this.editor.blur(),this._showHint()},_showInput:function(){this.editor.visible(),this.text.invisible()},_showHint:function(){this.editor.invisible(),this.text.visible()},isValid:function(){return this.editor.isValid()},setErrorText:function(text){this.editor.setErrorText(text)},getErrorText:function(){return this.editor.getErrorText()},isEditing:function(){return this.editor.isEditing()},getLastValidValue:function(){return this.editor.getLastValidValue()},getLastChangedValue:function(){return this.editor.getLastChangedValue()},setValue:function(k){this.editor.setValue(k)},getValue:function(){return this.editor.getValue()},getState:function(){return this.editor.getValue().match(/[^\s]+/g)},setState:function(v){var o=this.options;return BI.StateEditor.superclass.setValue.apply(this,arguments),this.stateValue=v,BI.isNumber(v)?void(v===BI.Selection.All?(this.text.setText(BI.i18nText("BI-Select_All")),this.text.element.removeClass("bi-water-mark")):v===BI.Selection.Multi?(this.text.setText(BI.i18nText("BI-Select_Part")),this.text.element.removeClass("bi-water-mark")):(this.text.setText(BI.isKey(o.defaultText)?o.defaultText:o.text),BI.isKey(o.defaultText)?this.text.element.addClass("bi-water-mark"):this.text.element.removeClass("bi-water-mark"))):BI.isString(v)?(this.text.setText(v),void(BI.isKey(o.defaultText)&&o.defaultText===v?this.text.element.addClass("bi-water-mark"):this.text.element.removeClass("bi-water-mark"))):void(BI.isArray(v)&&(BI.isEmpty(v)?(this.text.setText(BI.isKey(o.defaultText)?o.defaultText:o.text),BI.isKey(o.defaultText)?this.text.element.addClass("bi-water-mark"):this.text.element.removeClass("bi-water-mark")):1===v.length?(this.text.setText(v[0]),this.text.element.removeClass("bi-water-mark")):(this.text.setText(BI.i18nText("BI-Select_Part")),this.text.element.removeClass("bi-water-mark"))))},setTipType:function(v){this.text.options.tipType=v}}),BI.StateEditor.EVENT_CHANGE="EVENT_CHANGE",BI.StateEditor.EVENT_FOCUS="EVENT_FOCUS",BI.StateEditor.EVENT_BLUR="EVENT_BLUR",BI.StateEditor.EVENT_CLICK="EVENT_CLICK",BI.StateEditor.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.StateEditor.EVENT_CLICK_LABEL="EVENT_CLICK_LABEL",BI.StateEditor.EVENT_START="EVENT_START",BI.StateEditor.EVENT_PAUSE="EVENT_PAUSE",BI.StateEditor.EVENT_STOP="EVENT_STOP",BI.StateEditor.EVENT_CONFIRM="EVENT_CONFIRM",BI.StateEditor.EVENT_CHANGE_CONFIRM="EVENT_CHANGE_CONFIRM",BI.StateEditor.EVENT_VALID="EVENT_VALID",BI.StateEditor.EVENT_ERROR="EVENT_ERROR",BI.StateEditor.EVENT_ENTER="EVENT_ENTER",BI.StateEditor.EVENT_RESTRICT="EVENT_RESTRICT",BI.StateEditor.EVENT_SPACE="EVENT_SPACE",BI.StateEditor.EVENT_EMPTY="EVENT_EMPTY",BI.shortcut("bi.state_editor",BI.StateEditor),BI.SimpleStateEditor=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.SimpleStateEditor.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-simple-state-editor",hgap:4,vgap:2,lgap:0,rgap:0,tgap:0,bgap:0,validationChecker:BI.emptyFn,quitChecker:BI.emptyFn,mouseOut:!1,allowBlank:!0,watermark:"",errorText:"",height:24,text:BI.i18nText("BI-Basic_Unrestricted")})},_init:function(){BI.SimpleStateEditor.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget({type:"bi.editor",height:o.height,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,value:o.value,validationChecker:o.validationChecker,quitChecker:o.quitChecker,allowBlank:o.allowBlank,watermark:o.watermark,errorText:o.errorText}),this.text=BI.createWidget({type:"bi.text_button",cls:"bi-water-mark",textAlign:"left",text:o.text,height:o.height,hgap:o.hgap,handler:function(){self._showInput(),self.editor.focus(),self.editor.setValue("")}}),this.text.on(BI.TextButton.EVENT_CHANGE,function(){BI.nextTick(function(){self.fireEvent(BI.SimpleStateEditor.EVENT_CLICK_LABEL)})}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.text,left:0,right:0,top:0,bottom:0}]}),this.editor.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editor.on(BI.Editor.EVENT_FOCUS,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_FOCUS,arguments)}),this.editor.on(BI.Editor.EVENT_BLUR,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_BLUR,arguments)}),this.editor.on(BI.Editor.EVENT_CLICK,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_CLICK,arguments)}),this.editor.on(BI.Editor.EVENT_CHANGE,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_CHANGE,arguments)}),this.editor.on(BI.Editor.EVENT_KEY_DOWN,function(v){self.fireEvent(BI.SimpleStateEditor.EVENT_KEY_DOWN,arguments)}),this.editor.on(BI.Editor.EVENT_VALID,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_VALID,arguments)}),this.editor.on(BI.Editor.EVENT_CONFIRM,function(){self._showHint(),self.fireEvent(BI.SimpleStateEditor.EVENT_CONFIRM,arguments)}),this.editor.on(BI.Editor.EVENT_CHANGE_CONFIRM,function(){self._showHint(),self.fireEvent(BI.SimpleStateEditor.EVENT_CHANGE_CONFIRM,arguments)}),this.editor.on(BI.Editor.EVENT_START,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_START,arguments)}),this.editor.on(BI.Editor.EVENT_PAUSE,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_PAUSE,arguments)}),this.editor.on(BI.Editor.EVENT_STOP,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_STOP,arguments)}),this.editor.on(BI.Editor.EVENT_SPACE,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_SPACE,arguments)}),this.editor.on(BI.Editor.EVENT_ERROR,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_ERROR,arguments)}),this.editor.on(BI.Editor.EVENT_ENTER,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_ENTER,arguments)}),this.editor.on(BI.Editor.EVENT_RESTRICT,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_RESTRICT,arguments)}),this.editor.on(BI.Editor.EVENT_EMPTY,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_EMPTY,arguments)}),BI.createWidget({type:"bi.vertical",scrolly:!1,element:this,items:[this.editor]}),this._showHint(),BI.isNotNull(o.text)&&this.setState(o.text)},setWaterMark:function(v){this.options.watermark=v,this.editor.setWaterMark(v)},doRedMark:function(){""===this.editor.getValue()&&BI.isKey(this.options.watermark)||this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){""===this.editor.getValue()&&BI.isKey(this.options.watermark)||this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},focus:function(){this._showInput(),this.editor.focus()},blur:function(){this.editor.blur(),this._showHint()},_showInput:function(){this.editor.visible(),this.text.invisible()},_showHint:function(){this.editor.invisible(),this.text.visible()},isValid:function(){return this.editor.isValid()},setErrorText:function(text){this.editor.setErrorText(text)},getErrorText:function(){return this.editor.getErrorText()},isEditing:function(){return this.editor.isEditing()},getLastValidValue:function(){return this.editor.getLastValidValue()},getLastChangedValue:function(){return this.editor.getLastChangedValue()},setValue:function(k){this.editor.setValue(k)},getValue:function(){return this.editor.getValue()},getState:function(){return this.editor.getValue().match(/[^\s]+/g)},setState:function(v){var o=this.options;return BI.SimpleStateEditor.superclass.setValue.apply(this,arguments),BI.isNumber(v)?void(v===BI.Selection.All?(this.text.setText(BI.i18nText("BI-Already_Selected")),this.text.element.removeClass("bi-water-mark")):v===BI.Selection.Multi?(this.text.setText(BI.i18nText("BI-Already_Selected")),this.text.element.removeClass("bi-water-mark")):(this.text.setText(o.text),this.text.element.addClass("bi-water-mark"))):void(BI.isArray(v)&&1!==v.length?BI.isEmpty(v)?(this.text.setText(o.text),this.text.element.addClass("bi-water-mark")):(this.text.setText(BI.i18nText("BI-Already_Selected")),this.text.element.removeClass("bi-water-mark")):(this.text.setText(v),this.text.setTitle(v),this.text.element.removeClass("bi-water-mark")))}}),BI.SimpleStateEditor.EVENT_CHANGE="EVENT_CHANGE",BI.SimpleStateEditor.EVENT_FOCUS="EVENT_FOCUS",BI.SimpleStateEditor.EVENT_BLUR="EVENT_BLUR",BI.SimpleStateEditor.EVENT_CLICK="EVENT_CLICK",BI.SimpleStateEditor.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.SimpleStateEditor.EVENT_CLICK_LABEL="EVENT_CLICK_LABEL",BI.SimpleStateEditor.EVENT_START="EVENT_START",BI.SimpleStateEditor.EVENT_PAUSE="EVENT_PAUSE",BI.SimpleStateEditor.EVENT_STOP="EVENT_STOP",BI.SimpleStateEditor.EVENT_CONFIRM="EVENT_CONFIRM",BI.SimpleStateEditor.EVENT_CHANGE_CONFIRM="EVENT_CHANGE_CONFIRM",BI.SimpleStateEditor.EVENT_VALID="EVENT_VALID",BI.SimpleStateEditor.EVENT_ERROR="EVENT_ERROR",BI.SimpleStateEditor.EVENT_ENTER="EVENT_ENTER",BI.SimpleStateEditor.EVENT_RESTRICT="EVENT_RESTRICT",BI.SimpleStateEditor.EVENT_SPACE="EVENT_SPACE",BI.SimpleStateEditor.EVENT_EMPTY="EVENT_EMPTY",BI.shortcut("bi.simple_state_editor",BI.SimpleStateEditor),BI.MultiPopupView=BI.inherit(BI.PopupView,{_defaultConfig:function(){var conf=BI.MultiPopupView.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{_baseCls:(conf._baseCls||"")+" bi-multi-list-view",buttons:[BI.i18nText("BI-Basic_Sure")]})},_init:function(){BI.MultiPopupView.superclass._init.apply(this,arguments)},_createToolBar:function(){var o=this.options,self=this;if(0!==o.buttons.length){var text=[];return BI.each(o.buttons,function(idx,item){text.push({text:item,value:idx})}),this.buttongroup=BI.createWidget({type:"bi.button_group",cls:"list-view-toolbar bi-high-light bi-split-top",height:24,items:BI.createItems(text,{type:"bi.text_button",once:!1,shadow:!0,isShadowShowingOnSelected:!0}),layouts:[{type:"bi.center",hgap:0,vgap:0}]}),this.buttongroup.on(BI.ButtonGroup.EVENT_CHANGE,function(value,obj){self.fireEvent(BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON,value,obj)}),this.buttongroup}}}),BI.MultiPopupView.EVENT_CHANGE="EVENT_CHANGE",BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON="EVENT_CLICK_TOOLBAR_BUTTON",BI.shortcut("bi.multi_popup_view",BI.MultiPopupView),BI.PopupPanel=BI.inherit(BI.MultiPopupView,{_defaultConfig:function(){var conf=BI.PopupPanel.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-popup-panel",title:""})},_init:function(){BI.PopupPanel.superclass._init.apply(this,arguments)},_createTool:function(){var self=this,o=this.options,close=BI.createWidget({type:"bi.icon_button",cls:"close-h-font",width:25,height:25});return close.on(BI.IconButton.EVENT_CHANGE,function(){self.setVisible(!1),self.fireEvent(BI.PopupPanel.EVENT_CLOSE)}),BI.createWidget({type:"bi.htape",cls:"popup-panel-title bi-header-background",height:25,items:[{el:{type:"bi.label",textAlign:"left",text:o.title,height:25,lgap:10}},{el:close,width:25}]})}}),BI.PopupPanel.EVENT_CHANGE="EVENT_CHANGE",BI.PopupPanel.EVENT_CLOSE="EVENT_CLOSE",BI.PopupPanel.EVENT_CLICK_TOOLBAR_BUTTON="EVENT_CLICK_TOOLBAR_BUTTON",BI.shortcut("bi.popup_panel",BI.PopupPanel),BI.ListPane=BI.inherit(BI.Pane,{_defaultConfig:function(){var conf=BI.ListPane.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-list-pane",logic:{dynamic:!0},lgap:0,rgap:0,tgap:0,bgap:0,vgap:0,hgap:0,items:[],itemsCreator:BI.emptyFn,hasNext:BI.emptyFn,onLoaded:BI.emptyFn,el:{type:"bi.button_group"}})},_init:function(){BI.ListPane.superclass._init.apply(this,arguments);var self=this,o=this.options;this.button_group=BI.createWidget(o.el,{type:"bi.button_group",chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,behaviors:{},items:o.items,itemsCreator:function(op,calback){1===op.times&&(self.empty(),BI.nextTick(function(){self.loading()})),o.itemsCreator(op,function(){calback.apply(self,arguments),1===op.times&&BI.nextTick(function(){self.loaded(),self.check()})})},hasNext:o.hasNext,layouts:[{type:"bi.vertical"}]}),this.button_group.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.ListPane.EVENT_CHANGE,value,obj)}),this.check(),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Top),BI.extend({scrolly:!0,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,vgap:o.vgap,hgap:o.hgap},o.logic,{items:BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Top,this.button_group)}))))},hasPrev:function(){return this.button_group.hasPrev&&this.button_group.hasPrev()},hasNext:function(){return this.button_group.hasNext&&this.button_group.hasNext()},prependItems:function(items){this.options.items=items.concat(this.options.items),this.button_group.prependItems.apply(this.button_group,arguments),this.check()},addItems:function(items){this.options.items=this.options.items.concat(items),this.button_group.addItems.apply(this.button_group,arguments),this.check()},removeItemAt:function(indexes){indexes=indexes||[],BI.removeAt(this.options.items,indexes),this.button_group.removeItemAt.apply(this.button_group,arguments),this.check()},populate:function(items){var self=this,o=this.options;return 0===arguments.length&&BI.isFunction(this.button_group.attr("itemsCreator"))?void this.button_group.attr("itemsCreator").apply(this,[{times:1},function(){if(0===arguments.length)throw new Error("参数不能为空");self.populate.apply(self,arguments)}]):(BI.ListPane.superclass.populate.apply(this,arguments),void this.button_group.populate.apply(this.button_group,arguments))},empty:function(){this.button_group.empty()},setNotSelectedValue:function(){this.button_group.setNotSelectedValue.apply(this.button_group,arguments)},getNotSelectedValue:function(){return this.button_group.getNotSelectedValue()},setValue:function(){this.button_group.setValue.apply(this.button_group,arguments)},getValue:function(){return this.button_group.getValue.apply(this.button_group,arguments)},getAllButtons:function(){return this.button_group.getAllButtons()},getAllLeaves:function(){return this.button_group.getAllLeaves()},getSelectedButtons:function(){return this.button_group.getSelectedButtons()},getNotSelectedButtons:function(){return this.button_group.getNotSelectedButtons()},getIndexByValue:function(value){return this.button_group.getIndexByValue(value)},getNodeById:function(id){return this.button_group.getNodeById(id); +},getNodeByValue:function(value){return this.button_group.getNodeByValue(value)}}),BI.ListPane.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.list_pane",BI.ListPane),BI.Panel=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.Panel.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-panel bi-border",title:"",titleButtons:[],el:{},logic:{dynamic:!1}})},_init:function(){BI.Panel.superclass._init.apply(this,arguments);var o=this.options;BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("vertical",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("top",this._createTitle(),this.options.el)}))))},_createTitle:function(){var self=this,o=this.options;return this.text=BI.createWidget({type:"bi.label",cls:"panel-title-text",text:o.title,height:30}),this.button_group=BI.createWidget({type:"bi.button_group",items:o.titleButtons,layouts:[{type:"bi.center_adapt",lgap:10}]}),this.button_group.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.button_group.on(BI.ButtonGroup.EVENT_CHANGE,function(value,obj){self.fireEvent(BI.Panel.EVENT_CHANGE,value,obj)}),{el:{type:"bi.left_right_vertical_adapt",cls:"panel-title bi-header-background bi-border-bottom",height:29,items:{left:[this.text],right:[this.button_group]},lhgap:10,rhgap:10},height:29}},setTitle:function(title){this.text.setValue(title)}}),BI.Panel.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.panel",BI.Panel),BI.LinearSegmentButton=BI.inherit(BI.BasicButton,{props:{extraCls:"bi-line-segment-button bi-list-item-effect",once:!0,readonly:!0,hgap:10,height:25},render:function(){var self=this,o=this.options;return[{type:"bi.label",text:o.text,height:o.height,value:o.value,hgap:o.hgap,ref:function(){self.text=this}},{type:"bi.absolute",items:[{el:{type:"bi.layout",cls:"line-segment-button-line",height:2,ref:function(){self.line=this}},left:0,right:0,bottom:0}]}]},setSelected:function(v){BI.LinearSegmentButton.superclass.setSelected.apply(this,arguments),v?this.line.element.addClass("bi-high-light-background"):this.line.element.removeClass("bi-high-light-background")},setText:function(text){this.text.setText(text)}}),BI.shortcut("bi.linear_segment_button",BI.LinearSegmentButton),BI.LinearSegment=BI.inherit(BI.Widget,{props:{baseCls:"bi-linear-segment bi-split-bottom",items:[],height:29},render:function(){var self=this,o=this.options;return{type:"bi.button_group",items:BI.createItems(o.items,{type:"bi.linear_segment_button",height:o.height-1}),layout:[{type:"bi.center"}],listeners:[{eventName:"__EVENT_CHANGE__",action:function(){self.fireEvent("__EVENT_CHANGE__",arguments)}},{eventName:"EVENT_CHANGE",action:function(){self.fireEvent("EVENT_CHANGE")}}],ref:function(){self.buttonGroup=this}}},setValue:function(v){this.buttonGroup.setValue(v)},setEnabledValue:function(v){this.buttonGroup.setEnabledValue(v)},getValue:function(){return this.buttonGroup.getValue()}}),BI.shortcut("bi.linear_segment",BI.LinearSegment),BI.SelectList=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SelectList.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-select-list",direction:BI.Direction.Top,logic:{dynamic:!0},items:[],itemsCreator:BI.emptyFn,hasNext:BI.emptyFn,onLoaded:BI.emptyFn,toolbar:{type:"bi.multi_select_bar",iconWrapperWidth:36},el:{type:"bi.list_pane"}})},_init:function(){BI.SelectList.superclass._init.apply(this,arguments);var self=this,o=this.options;this.toolbar=BI.createWidget(o.toolbar),this.allSelected=!1,this.toolbar.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){self.allSelected=this.isSelected(),type===BI.Events.CLICK&&(self.setAllSelected(self.allSelected),self.fireEvent(BI.SelectList.EVENT_CHANGE,value,obj)),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.list=BI.createWidget(o.el,{type:"bi.list_pane",items:o.items,itemsCreator:function(op,callback){1===op.times&&self.toolbar.setVisible(!1),o.itemsCreator(op,function(items){callback.apply(self,arguments),1===op.times&&(self.toolbar.setVisible(items&&items.length>0),self.toolbar.setEnable(self.isEnabled()&&items&&items.length>0)),self._checkAllSelected()})},onLoaded:o.onLoaded,hasNext:o.hasNext}),this.list.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){type===BI.Events.CLICK&&(self._checkAllSelected(),self.fireEvent(BI.SelectList.EVENT_CHANGE,value,obj)),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction),BI.extend({scrolly:!0},o.logic,{items:BI.LogicFactory.createLogicItemsByDirection(o.direction,this.toolbar,this.list)})))),o.items.length<=0&&(this.toolbar.setVisible(!1),this.toolbar.setEnable(!1)),BI.isNotNull(o.value)&&this.setValue(o.value)},_checkAllSelected:function(){var selectLength=this.list.getValue().length,notSelectLength=this.getAllLeaves().length-selectLength,hasNext=this.list.hasNext(),isAlreadyAllSelected=this.toolbar.isSelected(),isHalf=selectLength>0&&(notSelectLength>0||!isAlreadyAllSelected&&hasNext);isHalf=isHalf||notSelectLength>0&&hasNext&&isAlreadyAllSelected,this.toolbar.setHalfSelected(isHalf),!isHalf&&this.toolbar.setSelected(selectLength>0&¬SelectLength<=0&&(!hasNext||isAlreadyAllSelected))},setAllSelected:function(v){BI.each(this.getAllButtons(),function(i,btn){(btn.setSelected||btn.setAllSelected).apply(btn,[v])}),this.allSelected=!!v,this.toolbar.setSelected(v),this.toolbar.setHalfSelected(!1)},setToolBarVisible:function(b){this.toolbar.setVisible(b)},isAllSelected:function(){return this.allSelected},hasPrev:function(){return this.list.hasPrev()},hasNext:function(){return this.list.hasNext()},prependItems:function(items){this.list.prependItems.apply(this.list,arguments)},addItems:function(items){this.list.addItems.apply(this.list,arguments)},setValue:function(data){var selectAll=data.type===BI.ButtonGroup.CHOOSE_TYPE_ALL;this.setAllSelected(selectAll),this.list[selectAll?"setNotSelectedValue":"setValue"](data.value),this._checkAllSelected()},getValue:function(){return this.isAllSelected()===!1?{type:BI.ButtonGroup.CHOOSE_TYPE_MULTI,value:this.list.getValue(),assist:this.list.getNotSelectedValue()}:{type:BI.ButtonGroup.CHOOSE_TYPE_ALL,value:this.list.getNotSelectedValue(),assist:this.list.getValue()}},empty:function(){this.list.empty()},populate:function(items){this.toolbar.setVisible(!BI.isEmptyArray(items)),this.toolbar.setEnable(this.isEnabled()&&!BI.isEmptyArray(items)),this.list.populate.apply(this.list,arguments),this._checkAllSelected()},_setEnable:function(enable){BI.SelectList.superclass._setEnable.apply(this,arguments),this.toolbar.setEnable(enable)},resetHeight:function(h){var toolHeight=(this.toolbar.element.outerHeight()||25)*(this.toolbar.isVisible()?1:0);this.list.resetHeight?this.list.resetHeight(h-toolHeight):this.list.element.css({"max-height":h-toolHeight+"px"})},setNotSelectedValue:function(){this.list.setNotSelectedValue.apply(this.list,arguments),this._checkAllSelected()},getNotSelectedValue:function(){return this.list.getNotSelectedValue()},getAllButtons:function(){return this.list.getAllButtons()},getAllLeaves:function(){return this.list.getAllLeaves()},getSelectedButtons:function(){return this.list.getSelectedButtons()},getNotSelectedButtons:function(){return this.list.getNotSelectedButtons()},getIndexByValue:function(value){return this.list.getIndexByValue(value)},getNodeById:function(id){return this.list.getNodeById(id)},getNodeByValue:function(value){return this.list.getNodeByValue(value)}}),BI.SelectList.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.select_list",BI.SelectList),BI.LazyLoader=BI.inherit(BI.Widget,{_const:{PAGE:100},_defaultConfig:function(){return BI.extend(BI.LazyLoader.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-lazy-loader",el:{}})},_init:function(){var self=this,o=this.options;BI.LazyLoader.superclass._init.apply(this,arguments);var all=o.items.length;this.loader=BI.createWidget({type:"bi.loader",element:this,el:o.el,itemsCreator:function(options,populate){populate(self._getNextItems(options))},hasNext:function(option){return option.count=1),this.setPagerVisible(v>1)},setValue:function(v){this.pager.setValue(v)},setVPage:function(v){this.pager.setValue(v)},setCount:function(count){this.rowCount.setText(count),this.rowCount.setTitle(count)},getCurrentPage:function(){return this.pager.getCurrentPage()},hasPrev:function(){return this.pager.hasPrev()},hasNext:function(){return this.pager.hasNext()},setPagerVisible:function(b){this.editor.setVisible(b),this.allPages.setVisible(b),this.pager.setVisible(b)},populate:function(){this.pager.populate(),this.setPagerVisible(this.options.pages>1)}}),BI.AllCountPager.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.all_count_pager",BI.AllCountPager),BI.DirectionPager=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.DirectionPager.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-direction-pager",height:24,horizontal:{pages:!1,curr:1,hasPrev:BI.emptyFn,hasNext:BI.emptyFn,firstPage:1,lastPage:BI.emptyFn},vertical:{pages:!1,curr:1,hasPrev:BI.emptyFn,hasNext:BI.emptyFn,firstPage:1,lastPage:BI.emptyFn}})},_init:function(){BI.DirectionPager.superclass._init.apply(this,arguments);var self=this,o=this.options,v=o.vertical,h=o.horizontal;this._createVPager(),this._createHPager(),this.layout=BI.createWidget({type:"bi.absolute",scrollable:!1,element:this,items:[{el:this.vpager,top:0,right:86},{el:this.vlabel,top:0,right:110},{el:this.hpager,top:0,right:0},{el:this.hlabel,top:0,right:24}]})},_createVPager:function(){var self=this,o=this.options,v=o.vertical;this.vlabel=BI.createWidget({type:"bi.label",width:24,height:24,value:v.curr,title:v.curr,invisible:!0}),this.vpager=BI.createWidget({type:"bi.pager",width:72,layouts:[{type:"bi.horizontal",scrollx:!1,rgap:24}],invisible:!0,dynamicShow:!1,pages:v.pages,curr:v.curr,groups:0,first:!1,last:!1,prev:{type:"bi.icon_button",value:"prev",title:BI.i18nText("BI-Up_Page"),warningTitle:BI.i18nText("BI-Current_Is_First_Page"),height:22,width:22,cls:"bi-border bi-border-radius direction-pager-prev column-pre-page-h-font bi-list-item-select2"},next:{type:"bi.icon_button",value:"next",title:BI.i18nText("BI-Down_Page"),warningTitle:BI.i18nText("BI-Current_Is_Last_Page"),height:22,width:22,cls:"bi-border bi-border-radius direction-pager-next column-next-page-h-font bi-list-item-select2"},hasPrev:v.hasPrev,hasNext:v.hasNext,firstPage:v.firstPage,lastPage:v.lastPage}),this.vpager.on(BI.Pager.EVENT_CHANGE,function(){self.fireEvent(BI.DirectionPager.EVENT_CHANGE)}),this.vpager.on(BI.Pager.EVENT_AFTER_POPULATE,function(){self.vlabel.setValue(this.getCurrentPage()),self.vlabel.setTitle(this.getCurrentPage())})},_createHPager:function(){var self=this,o=this.options,h=o.horizontal;this.hlabel=BI.createWidget({type:"bi.label",width:24,height:24,value:h.curr,title:h.curr,invisible:!0}),this.hpager=BI.createWidget({type:"bi.pager",width:72,layouts:[{type:"bi.horizontal",scrollx:!1,rgap:24}],invisible:!0,dynamicShow:!1,pages:h.pages,curr:h.curr,groups:0,first:!1,last:!1,prev:{type:"bi.icon_button",value:"prev",title:BI.i18nText("BI-Left_Page"),warningTitle:BI.i18nText("BI-Current_Is_First_Page"),height:22,width:22,cls:"bi-border bi-border-radius direction-pager-prev row-pre-page-h-font bi-list-item-select2"},next:{type:"bi.icon_button",value:"next",title:BI.i18nText("BI-Right_Page"),warningTitle:BI.i18nText("BI-Current_Is_Last_Page"),height:22,width:22,cls:"bi-border bi-border-radius direction-pager-next row-next-page-h-font bi-list-item-select2"},hasPrev:h.hasPrev,hasNext:h.hasNext,firstPage:h.firstPage,lastPage:h.lastPage}),this.hpager.on(BI.Pager.EVENT_CHANGE,function(){self.fireEvent(BI.DirectionPager.EVENT_CHANGE)}),this.hpager.on(BI.Pager.EVENT_AFTER_POPULATE,function(){self.hlabel.setValue(this.getCurrentPage()),self.hlabel.setTitle(this.getCurrentPage())})},getVPage:function(){return this.vpager.getCurrentPage()},getHPage:function(){return this.hpager.getCurrentPage()},setVPage:function(v){this.vpager.setValue(v),this.vlabel.setValue(v),this.vlabel.setTitle(v)},setHPage:function(v){this.hpager.setValue(v),this.hlabel.setValue(v),this.hlabel.setTitle(v)},hasVNext:function(){return this.vpager.hasNext()},hasHNext:function(){return this.hpager.hasNext()},hasVPrev:function(){return this.vpager.hasPrev()},hasHPrev:function(){return this.hpager.hasPrev()},setHPagerVisible:function(b){this.hpager.setVisible(b),this.hlabel.setVisible(b)},setVPagerVisible:function(b){this.vpager.setVisible(b),this.vlabel.setVisible(b)},populate:function(){this.vpager.populate(),this.hpager.populate();var vShow=!1,hShow=!1;this.hasHNext()||this.hasHPrev()?(this.setHPagerVisible(!0),hShow=!0):this.setHPagerVisible(!1),this.hasVNext()||this.hasVPrev()?(this.setVPagerVisible(!0),vShow=!0):this.setVPagerVisible(!1),this.setVisible(hShow||vShow);var num=[86,110,0,24],items=this.layout.attr("items");vShow===!0&&hShow===!0?(items[0].right=num[0],items[1].right=num[1],items[2].right=num[2],items[3].right=num[3]):vShow===!0?(items[0].right=num[2],items[1].right=num[3]):hShow===!0&&(items[2].right=num[2],items[3].right=num[3]),this.layout.attr("items",items),this.layout.resize()},clear:function(){this.vpager.attr("curr",1),this.hpager.attr("curr",1)}}),BI.DirectionPager.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.direction_pager",BI.DirectionPager),BI.DetailPager=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.DetailPager.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-detail-pager",behaviors:{},layouts:[{type:"bi.horizontal",hgap:10,vgap:0}],dynamicShow:!0,dynamicShowFirstLast:!1,dynamicShowPrevNext:!1,pages:!1,curr:function(){return 1},groups:0,jump:BI.emptyFn,first:!1,last:!1,prev:"上一页",next:"下一页",firstPage:1,lastPage:function(){return 1},hasPrev:BI.emptyFn,hasNext:BI.emptyFn})},_init:function(){BI.DetailPager.superclass._init.apply(this,arguments);var self=this;this.currPage=BI.result(this.options,"curr"),this._lock=!1,this._debouce=BI.debounce(function(){self._lock=!1},300),this._populate()},_populate:function(){var self=this,o=this.options,view=[],dict={};this.empty();var pages=BI.result(o,"pages"),curr=BI.result(this,"currPage"),groups=BI.result(o,"groups"),first=BI.result(o,"first"),last=BI.result(o,"last"),prev=BI.result(o,"prev"),next=BI.result(o,"next");pages===!1?(groups=0,first=!1,last=!1):groups>pages&&(groups=pages),dict.index=Math.ceil((curr+(groups>1&&groups!==pages?1:0))/(0===groups?1:groups)),(!o.dynamicShow&&!o.dynamicShowPrevNext||curr>1)&&prev!==!1&&(BI.isKey(prev)?view.push({text:prev,value:"prev",disabled:pages===!1?o.hasPrev(curr)===!1:!(curr>1&&prev!==!1)}):view.push(BI.extend({disabled:pages===!1?o.hasPrev(curr)===!1:!(curr>1&&prev!==!1)},prev))),(!o.dynamicShow&&!o.dynamicShowFirstLast||dict.index>1&&0!==groups)&&first&&(view.push({text:first,value:"first",disabled:!(dict.index>1&&0!==groups)}),dict.index>1&&0!==groups&&view.push({type:"bi.label",cls:"page-ellipsis",text:"…"})),dict.poor=Math.floor((groups-1)/2),dict.start=dict.index>1?curr-dict.poor:1,dict.end=dict.index>1?function(){var max=curr+(groups-dict.poor-1);return max>pages?pages:max}():groups,dict.end-dict.start1&&0!==groups&&pages>groups&&dict.endgroups&&dict.endgroups&&dict.endgroups&&dict.end1},hasNext:function(v){v||(v=1);var o=this.options,pages=this.options.pages;return pages===!1?o.hasNext(v):vlastPage?lastPage:(firstPage=BI.result(o,"firstPage"),vo.pages?o.pages:v,this.currPage=v;this._populate()},getValue:function(){var val=this.button_group.getValue()[0];switch(val){case"prev":return-1;case"next":return 1;case"first":return BI.MIN;case"last":return BI.MAX;default:return val}},attr:function(key,value){BI.DetailPager.superclass.attr.apply(this,arguments),"curr"===key&&(this.currPage=BI.result(this.options,"curr"))},populate:function(){this._populate()}}),BI.DetailPager.EVENT_CHANGE="EVENT_CHANGE",BI.DetailPager.EVENT_AFTER_POPULATE="EVENT_AFTER_POPULATE",BI.shortcut("bi.detail_pager",BI.DetailPager),BI.SegmentButton=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.SegmentButton.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-segment-button bi-list-item-select",shadow:!0,readonly:!0,hgap:5})},_init:function(){BI.SegmentButton.superclass._init.apply(this,arguments);var opts=this.options,self=this;this.text=BI.createWidget({type:"bi.label",element:this,textHeight:opts.height,whiteSpace:opts.whiteSpace,text:opts.text,value:opts.value,hgap:opts.hgap})},setSelected:function(){BI.SegmentButton.superclass.setSelected.apply(this,arguments)},setText:function(text){BI.SegmentButton.superclass.setText.apply(this,arguments),this.text.setText(text)},destroy:function(){BI.SegmentButton.superclass.destroy.apply(this,arguments)}}),BI.shortcut("bi.segment_button",BI.SegmentButton),BI.Segment=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.Segment.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-segment",items:[],height:24})},_init:function(){BI.Segment.superclass._init.apply(this,arguments);var self=this,o=this.options;this.buttonGroup=BI.createWidget({element:this,type:"bi.button_group",value:o.value,items:BI.createItems(o.items,{type:"bi.segment_button",height:o.height-2,whiteSpace:o.whiteSpace}),layout:[{type:"bi.center"}]}),this.buttonGroup.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.buttonGroup.on(BI.ButtonGroup.EVENT_CHANGE,function(value,obj){self.fireEvent(BI.Segment.EVENT_CHANGE,value,obj)})},_setEnable:function(enable){BI.Segment.superclass._setEnable.apply(this,arguments),enable===!0?this.element.removeClass("base-disabled disabled"):enable===!1&&this.element.addClass("base-disabled disabled")},setValue:function(v){this.buttonGroup.setValue(v)},setEnabledValue:function(v){this.buttonGroup.setEnabledValue(v)},getValue:function(){return this.buttonGroup.getValue()}}),BI.Segment.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.segment",BI.Segment),BI.MultiSelectBar=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.MultiSelectBar.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-multi-select-bar",height:25,text:BI.i18nText("BI-Select_All"),isAllCheckedBySelectedValue:BI.emptyFn,disableSelected:!0,isHalfCheckedBySelectedValue:function(selectedValues){return selectedValues.length>0},halfSelected:!1,iconWrapperWidth:26})},_init:function(){BI.MultiSelectBar.superclass._init.apply(this,arguments);var self=this,o=this.options,isSelect=o.selected===!0,isHalfSelect=!o.selected&&o.halfSelected;this.checkbox=BI.createWidget({type:"bi.checkbox",stopPropagation:!0,handler:function(){self.setSelected(self.isSelected())},selected:isSelect, +invisible:isHalfSelect}),this.half=BI.createWidget({type:"bi.half_icon_button",stopPropagation:!0,handler:function(){self.setSelected(!0)},invisible:isSelect||!isHalfSelect}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.CLICK,self.isSelected(),self)}),this.checkbox.on(BI.Checkbox.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectBar.EVENT_CHANGE,self.isSelected(),self)}),this.half.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.CLICK,self.isSelected(),self)}),this.half.on(BI.HalfIconButton.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectBar.EVENT_CHANGE,self.isSelected(),self)}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,keyword:o.keyword,value:o.value,py:o.py}),BI.createWidget({type:"bi.htape",element:this,items:[{width:o.iconWrapperWidth,el:{type:"bi.center_adapt",items:[this.checkbox,this.half]}},{el:this.text}]})},_setSelected:function(v){this.checkbox.setSelected(!!v)},beforeClick:function(){var isHalf=this.isHalfSelected(),isSelected=this.isSelected();isHalf===!0?this.setSelected(!0):this.setSelected(!isSelected)},setSelected:function(v){this.checkbox.setSelected(v),this.setHalfSelected(!1)},setHalfSelected:function(b){this.halfSelected=!!b,b===!0?(this.checkbox.setSelected(!1),this.half.visible(),this.checkbox.invisible()):(this.half.invisible(),this.checkbox.visible())},isHalfSelected:function(){return!this.isSelected()&&!!this.halfSelected},isSelected:function(){return this.checkbox.isSelected()},setValue:function(selectedValues){BI.MultiSelectBar.superclass.setValue.apply(this,arguments);var isAllChecked=this.options.isAllCheckedBySelectedValue.apply(this,arguments);this._setSelected(isAllChecked),!isAllChecked&&this.setHalfSelected(this.options.isHalfCheckedBySelectedValue.apply(this,arguments))},doClick:function(){BI.MultiSelectBar.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.MultiSelectBar.EVENT_CHANGE,this.isSelected(),this)}}),BI.MultiSelectBar.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_select_bar",BI.MultiSelectBar),BI.LevelTree=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.LevelTree.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-level-tree",el:{chooseType:0},expander:{},items:[],value:""})},_init:function(){BI.LevelTree.superclass._init.apply(this,arguments),this.initTree(this.options.items)},_formatItems:function(nodes,layer,pNode){var self=this;return BI.each(nodes,function(i,node){var extend={layer:layer};BI.isKey(node.id)||(node.id=BI.UUID()),extend.pNode=pNode,node.isParent===!0||node.parent===!0||BI.isNotEmptyArray(node.children)?(extend.type="bi.mid_plus_group_node",i===nodes.length-1&&(extend.type="bi.last_plus_group_node",extend.isLastNode=!0),0!==i||pNode||(extend.type="bi.first_plus_group_node"),0===i&&i===nodes.length-1&&(extend.type="bi.plus_group_node"),BI.defaults(node,extend),self._formatItems(node.children,layer+1,node)):(extend.type="bi.mid_tree_leaf_item",0!==i||pNode||(extend.type="bi.first_tree_leaf_item"),i===nodes.length-1&&(extend.type="bi.last_tree_leaf_item"),BI.defaults(node,extend))}),nodes},_assertId:function(sNodes){BI.each(sNodes,function(i,node){BI.isKey(node.id)||(node.id=BI.UUID())})},initTree:function(nodes){var self=this,o=this.options;this.empty(),this._assertId(nodes),this.tree=BI.createWidget({type:"bi.custom_tree",element:this,expander:BI.extend({el:{},popup:{type:"bi.custom_tree"}},o.expander),items:this._formatItems(BI.Tree.transformToTreeFormat(nodes),0),value:o.value,el:BI.extend({type:"bi.button_tree",chooseType:0,layouts:[{type:"bi.vertical"}]},o.el)}),this.tree.on(BI.Controller.EVENT_CHANGE,function(type,value,ob){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.LevelTree.EVENT_CHANGE,value,ob)})},stroke:function(nodes){this.tree.stroke.apply(this.tree,arguments)},populate:function(items,keyword){items=this._formatItems(BI.Tree.transformToTreeFormat(items),0),this.tree.populate(items,keyword)},setValue:function(v){this.tree.setValue(v)},getValue:function(){return this.tree.getValue()},getAllLeaves:function(){return this.tree.getAllLeaves()},getNodeById:function(id){return this.tree.getNodeById(id)},getNodeByValue:function(id){return this.tree.getNodeByValue(id)}}),BI.LevelTree.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.level_tree",BI.LevelTree),BI.DisplayTree=BI.inherit(BI.TreeView,{_defaultConfig:function(){return BI.extend(BI.DisplayTree.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-display-tree"})},_init:function(){BI.DisplayTree.superclass._init.apply(this,arguments)},_configSetting:function(){function beforeCollapse(treeId,treeNode){return!1}var setting={view:{selectedMulti:!1,dblClickExpand:!1,showIcon:!1,nameIsHTML:!0,showTitle:!1},data:{key:{title:"title",name:"text"},simpleData:{enable:!0}},callback:{beforeCollapse:beforeCollapse}};return setting},_dealWidthNodes:function(nodes){nodes=BI.DisplayTree.superclass._dealWidthNodes.apply(this,arguments);var self=this,o=this.options;return BI.each(nodes,function(i,node){node.isParent=node.isParent||node.parent,null==node.text&&node.count>0&&(node.text=node.value+"("+BI.i18nText("BI-Basic_Altogether")+node.count+BI.i18nText("BI-Basic_Count")+")")}),nodes},initTree:function(nodes,setting){var setting=setting||this._configSetting();this.nodes=BI.$.fn.zTree.init(this.tree.element,setting,nodes)},destroy:function(){BI.DisplayTree.superclass.destroy.apply(this,arguments)}}),BI.DisplayTree.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.display_tree",BI.DisplayTree),BI.ListDisplayTree=BI.inherit(BI.ListTreeView,{_defaultConfig:function(){return BI.extend(BI.ListDisplayTree.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-list-display-tree"})},_init:function(){BI.ListDisplayTree.superclass._init.apply(this,arguments)},_configSetting:function(){function beforeCollapse(treeId,treeNode){return!1}function getFont(treeId,node){return node.isLeaf?{}:{color:"#999999"}}var setting={view:{selectedMulti:!1,dblClickExpand:!1,showIcon:!1,nameIsHTML:!0,showTitle:!1,fontCss:getFont},data:{key:{title:"title",name:"text"},simpleData:{enable:!0}},callback:{beforeCollapse:beforeCollapse}};return setting},_dealWidthNodes:function(nodes){nodes=BI.ListDisplayTree.superclass._dealWidthNodes.apply(this,arguments);var self=this,o=this.options;return BI.each(nodes,function(i,node){node.isParent=node.isParent||node.parent,null==node.text&&node.count>0&&(node.text=node.value+"("+BI.i18nText("BI-Basic_Altogether")+node.count+BI.i18nText("BI-Basic_Count")+")")}),nodes},initTree:function(nodes,setting){var setting=setting||this._configSetting();this.nodes=BI.$.fn.zTree.init(this.tree.element,setting,nodes)},destroy:function(){BI.ListDisplayTree.superclass.destroy.apply(this,arguments)}}),BI.ListDisplayTree.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.list_display_tree",BI.ListDisplayTree),BI.SimpleTreeView=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SimpleTreeView.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-simple-tree",itemsCreator:BI.emptyFn,items:null})},_init:function(){BI.SimpleTreeView.superclass._init.apply(this,arguments);var self=this,o=this.options;this.structure=new BI.Tree,this.tree=BI.createWidget({type:"bi.tree_view",element:this,itemsCreator:function(op,callback){var fn=function(items){callback({items:items}),self.structure.initTree(BI.Tree.transformToTreeFormat(items))};BI.isNotNull(o.items)?fn(o.items):o.itemsCreator(op,fn)}}),this.tree.on(BI.TreeView.EVENT_CHANGE,function(){self.fireEvent(BI.SimpleTreeView.EVENT_CHANGE,arguments)}),BI.isNotEmptyArray(o.items)&&this.populate(),BI.isNotNull(o.value)&&this.setValue(o.value)},populate:function(items,keyword){items&&(this.options.items=items),this.tree.stroke({keyword:keyword})},_digest:function(v){v||(v=[]);var self=this,map={},selected=[];return BI.each(v,function(i,val){var node=self.structure.search(val,"value");if(node){var p=node;for(p=p.getParent(),p&&(map[p.value]||(map[p.value]=0),map[p.value]++);p&&p.getChildrenLength()<=map[p.value];)selected.push(p.value),p=p.getParent(),p&&(map[p.value]||(map[p.value]=0),map[p.value]++)}}),BI.makeObject(v.concat(selected))},setValue:function(v){this.tree.setValue(this._digest(v))},_getValue:function(){var self=this,result=[],val=this.tree.getValue(),track=function(nodes){BI.each(nodes,function(key,node){BI.isEmpty(node)?result.push(key):track(node)})};return track(val),result},empty:function(){this.tree.empty()},getValue:function(){var self=this,result=[],val=this._getValue();return BI.each(val,function(i,key){var target=self.structure.search(key,"value");target&&self.structure._traverse(target,function(node){node.isLeaf()&&result.push(node.value)})}),result}}),BI.SimpleTreeView.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.simple_tree",BI.SimpleTreeView),BI.EditorTrigger=BI.inherit(BI.Trigger,{_const:{hgap:4},_defaultConfig:function(){var conf=BI.EditorTrigger.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-editor-trigger bi-border",height:24,validationChecker:BI.emptyFn,quitChecker:BI.emptyFn,allowBlank:!1,watermark:"",errorText:""})},_init:function(){this.options.height-=2,BI.EditorTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options,c=this._const;this.editor=BI.createWidget({type:"bi.sign_editor",height:o.height,value:o.value,validationChecker:o.validationChecker,quitChecker:o.quitChecker,allowBlank:o.allowBlank,watermark:o.watermark,errorText:o.errorText,title:function(){return self.getValue()}}),this.editor.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editor.on(BI.SignEditor.EVENT_CHANGE,function(){self.fireEvent(BI.EditorTrigger.EVENT_CHANGE,arguments)}),BI.createWidget({element:this,type:"bi.htape",items:[{el:this.editor},{el:{type:"bi.trigger_icon_button",width:o.triggerWidth||o.height},width:o.triggerWidth||o.height}]})},getValue:function(){return this.editor.getValue()},setValue:function(value){this.editor.setValue(value)},setText:function(text){this.editor.setState(text)}}),BI.EditorTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.editor_trigger",BI.EditorTrigger),BI.IconTrigger=BI.inherit(BI.Trigger,{_defaultConfig:function(){return BI.extend(BI.IconTrigger.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-icon-trigger",extraCls:"pull-down-font",el:{},height:24})},_init:function(){var o=this.options;BI.IconTrigger.superclass._init.apply(this,arguments),this.iconButton=BI.createWidget(o.el,{type:"bi.trigger_icon_button",element:this,width:o.width,height:o.height,extraCls:o.extraCls})}}),BI.shortcut("bi.icon_trigger",BI.IconTrigger),BI.IconTextTrigger=BI.inherit(BI.Trigger,{_const:{hgap:4},_defaultConfig:function(){var conf=BI.IconTextTrigger.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-text-trigger",height:24,iconHeight:null,iconWidth:null,textCls:""})},_init:function(){BI.IconTextTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options,c=this._const;this.text=BI.createWidget({type:"bi.label",cls:"select-text-label"+(BI.isKey(o.textCls)?" "+o.textCls:""),textAlign:"left",height:o.height,text:o.text}),this.trigerButton=BI.createWidget({type:"bi.trigger_icon_button",width:o.triggerWidth||o.height}),BI.createWidget({element:this,type:"bi.htape",ref:function(_ref){self.wrapper=_ref},items:[{el:{type:"bi.icon_change_button",cls:"icon-combo-trigger-icon",iconCls:o.iconCls,ref:function(_ref){self.icon=_ref},iconHeight:o.iconHeight,iconWidth:o.iconWidth,disableSelected:!0},width:BI.isEmptyString(o.iconCls)?0:o.iconWrapperWidth||o.height},{el:this.text,lgap:BI.isEmptyString(o.iconCls)?5:0},{el:this.trigerButton,width:o.triggerWidth||o.height}]})},setValue:function(value){this.text.setValue(value)},setIcon:function(iconCls){var o=this.options;this.icon.setIcon(iconCls);var iconItem=this.wrapper.attr("items")[0],textItem=this.wrapper.attr("items")[1];BI.isNull(iconCls)||BI.isEmptyString(iconCls)?0!==iconItem.width&&(iconItem.width=0,textItem.lgap=5,this.wrapper.resize()):iconItem.width!==(o.iconWrapperWidth||o.height)&&(iconItem.width=o.iconWrapperWidth||o.height,textItem.lgap=0,this.wrapper.resize())},setTextCls:function(cls){var o=this.options,oldCls=o.textCls;o.textCls=cls,this.text.element.removeClass(oldCls).addClass(cls)},setText:function(text){this.text.setText(text)}}),BI.shortcut("bi.icon_text_trigger",BI.IconTextTrigger),BI.SelectIconTextTrigger=BI.inherit(BI.Trigger,{_defaultConfig:function(){return BI.extend(BI.SelectIconTextTrigger.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-select-text-trigger bi-border",height:24,iconHeight:null,iconWidth:null,iconCls:""})},_init:function(){this.options.height-=2,BI.SelectIconTextTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options,obj=this._digist(o.value,o.items);this.trigger=BI.createWidget({type:"bi.icon_text_trigger",element:this,text:obj.text,textCls:obj.textCls,iconCls:obj.iconCls,height:o.height,iconHeight:o.iconHeight,iconWidth:o.iconWidth,iconWrapperWidth:o.iconWrapperWidth})},_digist:function(vals,items){var o=this.options;vals=BI.isArray(vals)?vals:[vals];var result,formatItems=BI.Tree.transformToArrayFormat(items);return BI.any(formatItems,function(i,item){if(BI.deepContains(vals,item.value))return result={text:item.text||item.value,iconCls:item.iconCls},!0}),BI.isNotNull(result)?{text:result.text,textCls:"",iconCls:result.iconCls}:{text:BI.isFunction(o.text)?o.text():o.text,textCls:"bi-water-mark",iconCls:o.iconCls}},setValue:function(vals){var obj=this._digist(vals,this.options.items);this.trigger.setText(obj.text),this.trigger.setIcon(obj.iconCls),this.trigger.setTextCls(obj.textCls)},populate:function(items){this.options.items=items}}),BI.shortcut("bi.select_icon_text_trigger",BI.SelectIconTextTrigger),BI.TextTrigger=BI.inherit(BI.Trigger,{_const:{hgap:4},_defaultConfig:function(){var conf=BI.TextTrigger.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-text-trigger",height:24,textCls:""})},_init:function(){BI.TextTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options,c=this._const;this.text=BI.createWidget({type:"bi.label",cls:"select-text-label"+(BI.isKey(o.textCls)?" "+o.textCls:""),textAlign:"left",height:o.height,text:o.text,title:function(){return self.text.getText()},tipType:o.tipType,warningTitle:o.warningTitle,hgap:c.hgap,readonly:o.readonly}),this.trigerButton=BI.createWidget({type:"bi.trigger_icon_button",width:o.triggerWidth||o.height}),BI.createWidget({element:this,type:"bi.htape",items:[{el:this.text},{el:this.trigerButton,width:o.triggerWidth||o.height}]})},setTextCls:function(cls){var o=this.options,oldCls=o.textCls;o.textCls=cls,this.text.element.removeClass(oldCls).addClass(cls)},setText:function(text){this.text.setText(text)},setTipType:function(v){this.text.options.tipType=v}}),BI.shortcut("bi.text_trigger",BI.TextTrigger),BI.SelectTextTrigger=BI.inherit(BI.Trigger,{_defaultConfig:function(){return BI.extend(BI.SelectTextTrigger.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-select-text-trigger bi-border bi-focus-shadow",height:24})},_init:function(){this.options.height-=2,BI.SelectTextTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options,obj=this._digest(o.value,o.items);this.trigger=BI.createWidget({type:"bi.text_trigger",element:this,height:o.height,readonly:o.readonly,text:obj.text,textCls:obj.textCls,tipType:o.tipType,warningTitle:o.warningTitle})},_digest:function(vals,items){var o=this.options;vals=BI.isArray(vals)?vals:[vals];var result=[],formatItems=BI.Tree.transformToArrayFormat(items);return BI.each(formatItems,function(i,item){BI.deepContains(vals,item.value)&&!BI.contains(result,item.text||item.value)&&result.push(item.text||item.value)}),result.length>0?{textCls:"",text:result.join(",")}:{textCls:"bi-water-mark",text:BI.isFunction(o.text)?o.text():o.text}},setValue:function(vals){var formatValue=this._digest(vals,this.options.items);this.trigger.setTextCls(formatValue.textCls),this.trigger.setText(formatValue.text)},setTipType:function(v){this.trigger.setTipType(v)},populate:function(items){this.options.items=items}}),BI.shortcut("bi.select_text_trigger",BI.SelectTextTrigger),BI.SmallSelectTextTrigger=BI.inherit(BI.Trigger,{_defaultConfig:function(){return BI.extend(BI.SmallSelectTextTrigger.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-small-select-text-trigger bi-border",height:20})},_init:function(){this.options.height-=2,BI.SmallSelectTextTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options,obj=this._digest(o.value,o.items);this.trigger=BI.createWidget({type:"bi.small_text_trigger",element:this,height:o.height-2,text:obj.text,cls:obj.cls})},_digest:function(vals,items){var o=this.options;vals=BI.isArray(vals)?vals:[vals];var result=[],formatItems=BI.Tree.transformToArrayFormat(items);return BI.each(formatItems,function(i,item){BI.deepContains(vals,item.value)&&!BI.contains(result,item.text||item.value)&&result.push(item.text||item.value)}),result.length>0?{cls:"",text:result.join(",")}:{cls:"bi-water-mark",text:o.text}},setValue:function(vals){var formatValue=this._digest(vals,this.options.items);this.trigger.element.removeClass("bi-water-mark").addClass(formatValue.cls),this.trigger.setText(formatValue.text)},populate:function(items){this.options.items=items}}),BI.shortcut("bi.small_select_text_trigger",BI.SmallSelectTextTrigger),BI.SmallTextTrigger=BI.inherit(BI.Trigger,{_const:{hgap:4},_defaultConfig:function(){var conf=BI.SmallTextTrigger.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-text-trigger",height:20})},_init:function(){BI.SmallTextTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options,c=this._const;this.text=BI.createWidget({type:"bi.label",textAlign:"left",height:o.height,text:o.text,hgap:c.hgap}),this.trigerButton=BI.createWidget({type:"bi.trigger_icon_button",width:o.triggerWidth||o.height}),BI.createWidget({element:this,type:"bi.htape",items:[{el:this.text},{el:this.trigerButton,width:o.triggerWidth||o.height}]})},setValue:function(value){this.text.setValue(value)},setText:function(text){this.text.setText(text)}}),BI.shortcut("bi.small_text_trigger",BI.SmallTextTrigger),BI.MonthDateCombo=BI.inherit(BI.Trigger,{_defaultConfig:function(){return BI.extend(BI.MonthDateCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-month-combo",height:24,container:null})},_init:function(){BI.MonthDateCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.trigger=BI.createWidget({type:"bi.date_triangle_trigger"}),this.popup=BI.createWidget({type:"bi.month_popup",behaviors:o.behaviors}),this.popup.on(BI.YearPopup.EVENT_CHANGE,function(){self.setValue(self.popup.getValue())}),this.combo=BI.createWidget({type:"bi.combo",offsetStyle:"center",container:o.container,element:this,isNeedAdjustHeight:!1,isNeedAdjustWidth:!1,el:this.trigger,popup:{minWidth:85,stopPropagation:!1,el:this.popup}}),this.combo.on(BI.Combo.EVENT_CHANGE,function(){self.combo.hideView(),self.fireEvent(BI.MonthDateCombo.EVENT_CHANGE)}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){self.doBehavior()})},setValue:function(v){this.trigger.setValue(v),this.popup.setValue(v)},getValue:function(){return this.popup.getValue()}}),BI.MonthDateCombo.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.month_date_combo",BI.MonthDateCombo),BI.YearDateCombo=BI.inherit(BI.Trigger,{_defaultConfig:function(){return BI.extend(BI.YearDateCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-year-combo",min:"1900-01-01",max:"2099-12-31",behaviors:{},height:24,container:null})},_init:function(){BI.YearDateCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.trigger=BI.createWidget({type:"bi.date_triangle_trigger"}),this.popup=BI.createWidget({type:"bi.year_popup",behaviors:o.behaviors,min:o.min,max:o.max}),this.popup.on(BI.YearPopup.EVENT_CHANGE,function(){self.setValue(self.popup.getValue()),self.combo.hideView(),self.fireEvent(BI.YearDateCombo.EVENT_CHANGE)}),this.combo=BI.createWidget({type:"bi.combo",offsetStyle:"center",element:this,container:o.container,isNeedAdjustHeight:!1,isNeedAdjustWidth:!1,el:this.trigger,popup:{minWidth:100,stopPropagation:!1,el:this.popup}}),this.combo.on(BI.Combo.EVENT_CHANGE,function(){self.fireEvent(BI.YearDateCombo.EVENT_CHANGE)}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){self.doBehavior()})},setValue:function(v){this.trigger.setValue(v),this.popup.setValue(v)},getValue:function(){return this.popup.getValue()}}),BI.YearDateCombo.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.year_date_combo",BI.YearDateCombo),BI.DatePicker=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.DatePicker.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-date-picker",height:40,min:"1900-01-01",max:"2099-12-31"})},_init:function(){BI.DatePicker.superclass._init.apply(this,arguments);var self=this,o=this.options;this._year=BI.getDate().getFullYear(),this._month=BI.getDate().getMonth()+1,this.left=BI.createWidget({type:"bi.icon_button",cls:"pre-page-h-font",width:24,height:24}),this.left.on(BI.IconButton.EVENT_CHANGE,function(){1===self._month?self.setValue({year:self.year.getValue()-1,month:12}):self.setValue({year:self.year.getValue(),month:self.month.getValue()-1}),self.fireEvent(BI.DatePicker.EVENT_CHANGE),self._checkLeftValid(),self._checkRightValid()}),this.right=BI.createWidget({type:"bi.icon_button",cls:"next-page-h-font",width:24,height:24}),this.right.on(BI.IconButton.EVENT_CHANGE,function(){12===self._month?self.setValue({year:self.year.getValue()+1,month:1}):self.setValue({year:self.year.getValue(),month:self.month.getValue()+1}),self.fireEvent(BI.DatePicker.EVENT_CHANGE),self._checkLeftValid(),self._checkRightValid()}),this.year=BI.createWidget({type:"bi.year_date_combo",behaviors:o.behaviors,min:o.min,max:o.max}),this.year.on(BI.YearDateCombo.EVENT_CHANGE,function(){self.setValue({year:self.year.getValue(),month:self.month.getValue()}),self.fireEvent(BI.DatePicker.EVENT_CHANGE)}),this.month=BI.createWidget({type:"bi.month_date_combo",behaviors:o.behaviors}),this.month.on(BI.MonthDateCombo.EVENT_CHANGE,function(){self.setValue({year:self.year.getValue(),month:self.month.getValue()}),self.fireEvent(BI.DatePicker.EVENT_CHANGE)}),BI.createWidget({type:"bi.htape",element:this,items:[{el:{type:"bi.center_adapt",items:[this.left]},width:24},{type:"bi.center_adapt",items:[{el:{type:"bi.horizontal",width:120,rgap:10,items:[{el:this.year,lgap:10},this.month]}}]},{el:{type:"bi.center_adapt",items:[this.right]},width:24}]}),this.setValue({year:this._year,month:this._month})},_checkLeftValid:function(){var o=this.options,valid=!(1===this._month&&this._year===BI.parseDateTime(o.min,"%Y-%X-%d").getFullYear());return this.left.setEnable(valid),valid},_checkRightValid:function(){var o=this.options,valid=!(12===this._month&&this._year===BI.parseDateTime(o.max,"%Y-%X-%d").getFullYear());return this.right.setEnable(valid),valid},setValue:function(ob){this._year=BI.parseInt(ob.year),this._month=BI.parseInt(ob.month),this.year.setValue(ob.year),this.month.setValue(ob.month),this._checkLeftValid(),this._checkRightValid()},getValue:function(){return{year:this.year.getValue(),month:this.month.getValue()}}}),BI.DatePicker.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.date_picker",BI.DatePicker),BI.YearPicker=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.YearPicker.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-year-picker",behaviors:{},height:40,min:"1900-01-01",max:"2099-12-31"})},_init:function(){BI.YearPicker.superclass._init.apply(this,arguments);var self=this,o=this.options;this._year=BI.getDate().getFullYear(),this.left=BI.createWidget({type:"bi.icon_button",cls:"pre-page-h-font",width:25,height:25}),this.left.on(BI.IconButton.EVENT_CHANGE,function(){self.setValue(self.year.getValue()-1),self.fireEvent(BI.YearPicker.EVENT_CHANGE),self._checkLeftValid(),self._checkRightValid()}),this.right=BI.createWidget({type:"bi.icon_button",cls:"next-page-h-font",width:25,height:25}),this.right.on(BI.IconButton.EVENT_CHANGE,function(){self.setValue(self.year.getValue()+1),self.fireEvent(BI.YearPicker.EVENT_CHANGE),self._checkLeftValid(),self._checkRightValid()}),this.year=BI.createWidget({type:"bi.year_date_combo",min:o.min,behaviors:o.behaviors,max:o.max}),this.year.on(BI.YearDateCombo.EVENT_CHANGE,function(){self.setValue(self.year.getValue()),self.fireEvent(BI.YearPicker.EVENT_CHANGE)}),BI.createWidget({type:"bi.htape",element:this,items:[{el:{type:"bi.center_adapt",items:[this.left]},width:25},{type:"bi.center_adapt",items:[{el:{type:"bi.horizontal_float",width:50,items:[{el:this.year}]}}]},{el:{type:"bi.center_adapt",items:[this.right]},width:25}]}),this.setValue({year:this._year})},_checkLeftValid:function(){var o=this.options,valid=!(this._year===BI.parseDateTime(o.min,"%Y-%X-%d").getFullYear());return this.left.setEnable(valid),valid},_checkRightValid:function(){var o=this.options,valid=!(this._year===BI.parseDateTime(o.max,"%Y-%X-%d").getFullYear());return this.right.setEnable(valid),valid},setValue:function(v){this._year=v,this.year.setValue(v),this._checkLeftValid(),this._checkRightValid()},getValue:function(){return this.year.getValue()}}),BI.YearPicker.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.year_picker",BI.YearPicker),BI.DateCalendarPopup=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.DateCalendarPopup.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-date-calendar-popup",min:"1900-01-01",max:"2099-12-31",selectedTime:null})},_createNav:function(v){var date=BI.Calendar.getDateJSONByPage(v),calendar=BI.createWidget({type:"bi.calendar",logic:{dynamic:!0},min:this.options.min,max:this.options.max,year:date.year,month:date.month,day:1});return calendar},_init:function(){BI.DateCalendarPopup.superclass._init.apply(this,arguments);var self=this,o=this.options;this.today=BI.getDate(),this._year=this.today.getFullYear(),this._month=this.today.getMonth()+1,this._day=this.today.getDate(),this.selectedTime=o.selectedTime||{year:this._year,month:this._month,day:this._day},this.datePicker=BI.createWidget({type:"bi.date_picker",behaviors:o.behaviors,min:o.min,max:o.max}),this.calendar=BI.createWidget({direction:"top",logic:{dynamic:!0},type:"bi.navigation",tab:this.datePicker,cardCreator:BI.bind(this._createNav,this),afterCardCreated:function(){},afterCardShow:function(){this.setValue(self.selectedTime)}}),this.datePicker.on(BI.DatePicker.EVENT_CHANGE,function(){self.selectedTime=self.datePicker.getValue(),self.selectedTime.day=1,self.calendar.setSelect(BI.Calendar.getPageByDateJSON(self.selectedTime))}),this.calendar.on(BI.Navigation.EVENT_CHANGE,function(){self.selectedTime=self.calendar.getValue(),self.setValue(self.selectedTime),self.fireEvent(BI.DateCalendarPopup.EVENT_CHANGE)}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.calendar,left:5,right:5},{el:{type:"bi.layout",cls:"bi-split-top"},height:1,top:40,left:0,right:0}]})},setValue:function(timeOb){this.datePicker.setValue(timeOb),this.calendar.setSelect(BI.Calendar.getPageByDateJSON(timeOb)),this.calendar.setValue(timeOb),this.selectedTime=timeOb},getValue:function(){return this.selectedTime}}),BI.DateCalendarPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.date_calendar_popup",BI.DateCalendarPopup),BI.MonthPopup=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MonthPopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-month-popup",behaviors:{}})},_init:function(){BI.MonthPopup.superclass._init.apply(this,arguments);var self=this,o=this.options,month=[1,7,2,8,3,9,4,10,5,11,6,12],items=[];items.push(month.slice(0,2)),items.push(month.slice(2,4)),items.push(month.slice(4,6)),items.push(month.slice(6,8)),items.push(month.slice(8,10)),items.push(month.slice(10,12)),items=BI.map(items,function(i,item){return BI.map(item,function(j,td){return{type:"bi.text_item",cls:"bi-list-item-select",textAlign:"center",whiteSpace:"nowrap",once:!1,forceSelected:!0,height:23,width:38,value:td,text:td}})}),this.month=BI.createWidget({type:"bi.button_group",element:this,behaviors:o.behaviors,items:BI.createItems(items,{}),layouts:[BI.LogicFactory.createLogic("table",BI.extend({dynamic:!0},{columns:2,rows:6,columnSize:[.5,.5],rowSize:25})),{type:"bi.center_adapt",vgap:1,hgap:2}],value:o.value}),this.month.on(BI.Controller.EVENT_CHANGE,function(type){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.MonthPopup.EVENT_CHANGE)})},getValue:function(){return this.month.getValue()[0]},setValue:function(v){v=BI.parseInt(v),this.month.setValue([v])}}),BI.MonthPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.month_popup",BI.MonthPopup),BI.YearPopup=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.YearPopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-year-popup",behaviors:{},min:"1900-01-01",max:"2099-12-31"})},_createYearCalendar:function(v){var o=this.options,y=this._year,calendar=BI.createWidget({type:"bi.year_calendar",behaviors:o.behaviors,min:o.min,max:o.max,logic:{dynamic:!0},year:y+12*v});return calendar.setValue(this._year),calendar},_init:function(){BI.YearPopup.superclass._init.apply(this,arguments);var self=this,o=this.options;this.selectedYear=this._year=BI.getDate().getFullYear();var backBtn=BI.createWidget({type:"bi.icon_button",cls:"pre-page-h-font",width:24,height:24,value:-1}),preBtn=BI.createWidget({type:"bi.icon_button",cls:"next-page-h-font",width:24,height:24,value:1});this.navigation=BI.createWidget({type:"bi.navigation",element:this,single:!0,logic:{dynamic:!0},tab:{cls:"year-popup-navigation bi-high-light bi-split-top",height:24,items:[backBtn,preBtn]},cardCreator:BI.bind(this._createYearCalendar,this),afterCardShow:function(){this.setValue(self.selectedYear);var calendar=this.getSelectedCard();backBtn.setEnable(!calendar.isFrontYear()),preBtn.setEnable(!calendar.isFinalYear())}}),this.navigation.on(BI.Navigation.EVENT_CHANGE,function(){self.selectedYear=this.getValue(),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),self.fireEvent(BI.YearPopup.EVENT_CHANGE,self.selectedYear)}),BI.isKey(o.value)&&this.setValue(o.value)},getValue:function(){return this.selectedYear},setValue:function(v){var o=this.options;v=BI.parseInt(v);var startDate=BI.parseDateTime(o.min,"%Y-%X-%d"),endDate=BI.parseDateTime(o.max,"%Y-%X-%d");BI.checkDateVoid(v,1,1,BI.print(BI.getDate(startDate.getFullYear(),0,1),"%Y-%X-%d"),BI.print(BI.getDate(endDate.getFullYear(),0,1),"%Y-%X-%d"))[0]?(v=BI.getDate().getFullYear(),this.selectedYear="",this.navigation.setSelect(BI.YearCalendar.getPageByYear(v)),this.navigation.setValue("")):(this.selectedYear=v,this.navigation.setSelect(BI.YearCalendar.getPageByYear(v)),this.navigation.setValue(v))}}),BI.YearPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.year_popup",BI.YearPopup),BI.DateTriangleTrigger=BI.inherit(BI.Trigger,{_const:{height:24,iconWidth:12,iconHeight:12},_defaultConfig:function(){return BI.extend(BI.DateTriangleTrigger.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-date-triangle-trigger pull-down-ha-font cursor-pointer",height:24})},_init:function(){BI.DateTriangleTrigger.superclass._init.apply(this,arguments);var o=this.options,c=this._const;this.text=BI.createWidget({type:"bi.label",cls:"list-item-text",textAlign:"right",text:o.text,value:o.value,height:c.height}),BI.createWidget({type:"bi.vertical_adapt",element:this,items:[{el:this.text, +rgap:5},{type:"bi.icon_label",width:16}]})},setValue:function(v){this.text.setValue(v)},getValue:function(){return this.text.getValue()},setText:function(v){this.text.setText(v)},getText:function(){return this.item.getText()},getKey:function(){}}),BI.shortcut("bi.date_triangle_trigger",BI.DateTriangleTrigger),BI.StaticDatePaneCard=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.StaticDatePaneCard.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-date-pane",min:"1900-01-01",max:"2099-12-31",selectedTime:null})},_init:function(){BI.StaticDatePaneCard.superclass._init.apply(this,arguments);var self=this,o=this.options;this.today=BI.getDate(),this._year=this.today.getFullYear(),this._month=this.today.getMonth()+1,this.selectedTime=o.selectedTime||{year:this._year,month:this._month},this.datePicker=BI.createWidget({type:"bi.date_picker",behaviors:o.behaviors,min:o.min,max:o.max}),this.datePicker.on(BI.DatePicker.EVENT_CHANGE,function(){var value=self.datePicker.getValue(),monthDay=BI.getMonthDays(BI.getDate(value.year,value.month-1,1)),day=self.selectedTime.day||0;day>monthDay&&(day=monthDay),self.selectedTime={year:value.year,month:value.month},0!==day&&(self.selectedTime.day=day),self.calendar.setSelect(BI.Calendar.getPageByDateJSON(self.selectedTime)),self.calendar.setValue(self.selectedTime),0!==day&&self.fireEvent(BI.DateCalendarPopup.EVENT_CHANGE)}),this.calendar=BI.createWidget({direction:"custom",type:"bi.navigation",tab:this.datePicker,cardCreator:BI.bind(this._createNav,this)}),this.calendar.on(BI.Navigation.EVENT_CHANGE,function(){self.selectedTime=self.calendar.getValue(),self.calendar.empty(),self.setValue(self.selectedTime),self.fireEvent(BI.DateCalendarPopup.EVENT_CHANGE)}),this.setValue(o.selectedTime),BI.createWidget({type:"bi.vtape",element:this,items:[{el:this.datePicker,height:40},this.calendar],hgap:10}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.layout",cls:"bi-split-top"},height:1,top:40,left:0,right:0}]})},_createNav:function(v){var date=BI.Calendar.getDateJSONByPage(v),calendar=BI.createWidget({type:"bi.calendar",logic:{dynamic:!1},min:this.options.min,max:this.options.max,year:date.year,month:date.month,day:this.selectedTime.day});return calendar},_getNewCurrentDate:function(){var today=BI.getDate();return{year:today.getFullYear(),month:today.getMonth()+1}},_setCalenderValue:function(date){this.calendar.setSelect(BI.Calendar.getPageByDateJSON(date)),this.calendar.setValue(date),this.selectedTime=date},_setDatePicker:function(timeOb){BI.isNull(timeOb)||BI.isNull(timeOb.year)||BI.isNull(timeOb.month)?this.datePicker.setValue(this._getNewCurrentDate()):this.datePicker.setValue(timeOb)},_setCalendar:function(timeOb){BI.isNull(timeOb)||BI.isNull(timeOb.day)?(this.calendar.empty(),this._setCalenderValue(this._getNewCurrentDate())):this._setCalenderValue(timeOb)},setValue:function(timeOb){this._setDatePicker(timeOb),this._setCalendar(timeOb)},getValue:function(){return this.selectedTime}}),BI.shortcut("bi.static_date_pane_card",BI.StaticDatePaneCard),BI.DynamicDatePane=BI.inherit(BI.Widget,{props:{baseCls:"bi-dynamic-date-pane"},render:function(){var self=this,o=this.options;return{type:"bi.vtape",items:[{el:{type:"bi.linear_segment",cls:"bi-split-bottom",height:30,items:BI.createItems([{text:BI.i18nText("BI-Multi_Date_YMD"),value:BI.DynamicDatePane.Static},{text:BI.i18nText("BI-Basic_Dynamic_Title"),value:BI.DynamicDatePane.Dynamic}],{textAlign:"center"}),listeners:[{eventName:BI.ButtonGroup.EVENT_CHANGE,action:function(){var value=this.getValue()[0];switch(self.dateTab.setSelect(value),value){case BI.DynamicDatePane.Static:var date=BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue());self.ymd.setValue({year:date.getFullYear(),month:date.getMonth()+1,day:date.getDate()});break;case BI.DynamicDatePane.Dynamic:self.dynamicPane.setValue({year:0})}self.fireEvent("EVENT_CHANGE")}}],ref:function(){self.switcher=this}},height:30},{type:"bi.tab",ref:function(){self.dateTab=this},showIndex:BI.DynamicDatePane.Static,cardCreator:function(v){switch(v){case BI.DynamicDatePane.Static:return{type:"bi.static_date_pane_card",behaviors:o.behaviors,listeners:[{eventName:"EVENT_CHANGE",action:function(){self.fireEvent("EVENT_CHANGE")}}],ref:function(){self.ymd=this}};case BI.DynamicDatePane.Dynamic:default:return{type:"bi.dynamic_date_card",listeners:[{eventName:"EVENT_CHANGE",action:function(){self._checkValue(self.getValue())&&self.fireEvent("EVENT_CHANGE")}}],ref:function(){self.dynamicPane=this}}}}}]}},mounted:function(){this.setValue(this.options.value)},_checkValueValid:function(value){return BI.isNull(value)||BI.isEmptyObject(value)||BI.isEmptyString(value)},_checkValue:function(v){switch(v.type){case BI.DynamicDateCombo.Dynamic:return BI.isNotEmptyObject(v.value);case BI.DynamicDateCombo.Static:default:return!0}},setValue:function(v){v=v||{};var type=v.type||BI.DynamicDateCombo.Static,value=v.value||v;switch(this.switcher.setValue(type),this.dateTab.setSelect(type),type){case BI.DynamicDateCombo.Dynamic:this.dynamicPane.setValue(value);break;case BI.DynamicDateCombo.Static:default:if(this._checkValueValid(value)){var date=BI.getDate();this.ymd.setValue({year:date.getFullYear(),month:date.getMonth()+1})}else this.ymd.setValue(value)}},getValue:function(){return{type:this.dateTab.getSelect(),value:this.dateTab.getValue()}}}),BI.shortcut("bi.dynamic_date_pane",BI.DynamicDatePane),BI.extend(BI.DynamicDatePane,{Static:1,Dynamic:2}),BI.DateTimeCombo=BI.inherit(BI.Single,{constants:{popupHeight:290,popupWidth:270,comboAdjustHeight:1,border:1},_defaultConfig:function(){return BI.extend(BI.DateTimeCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-date-time-combo bi-border bi-border-radius",width:200,height:24,minDate:"1900-01-01",maxDate:"2099-12-31"})},_init:function(){BI.DateTimeCombo.superclass._init.apply(this,arguments);var self=this,opts=this.options,date=BI.getDate();this.storeValue=BI.isNotNull(opts.value)?opts.value:{year:date.getFullYear(),month:date.getMonth()+1,day:date.getDate(),hour:date.getHours(),minute:date.getMinutes(),second:date.getSeconds()},this.trigger=BI.createWidget({type:"bi.date_time_trigger",min:opts.minDate,max:opts.maxDate,value:opts.value}),this.popup=BI.createWidget({type:"bi.date_time_popup",behaviors:opts.behaviors,min:opts.minDate,max:opts.maxDate,value:opts.value}),self.setValue(this.storeValue),this.popup.on(BI.DateTimePopup.BUTTON_CANCEL_EVENT_CHANGE,function(){self.setValue(self.storeValue),self.hidePopupView(),self.fireEvent(BI.DateTimeCombo.EVENT_CANCEL)}),this.popup.on(BI.DateTimePopup.BUTTON_OK_EVENT_CHANGE,function(){self.storeValue=self.popup.getValue(),self.setValue(self.storeValue),self.hidePopupView(),self.fireEvent(BI.DateTimeCombo.EVENT_CONFIRM)}),this.combo=BI.createWidget({type:"bi.combo",container:opts.container,toggle:!1,isNeedAdjustHeight:!1,isNeedAdjustWidth:!1,el:this.trigger,adjustLength:this.constants.comboAdjustHeight,popup:{el:this.popup,width:this.constants.popupWidth,stopPropagation:!1},hideChecker:function(e){return 0===triggerBtn.element.find(e.target).length}}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){self.popup.setValue(self.storeValue),self.fireEvent(BI.DateTimeCombo.EVENT_BEFORE_POPUPVIEW)});var triggerBtn=BI.createWidget({type:"bi.icon_button",cls:"bi-trigger-icon-button date-font",width:24,height:24});triggerBtn.on(BI.IconButton.EVENT_CHANGE,function(){self.combo.isViewVisible()||self.combo.showView()}),BI.createWidget({type:"bi.htape",element:this,items:[{type:"bi.absolute",items:[{el:this.combo,top:0,left:0,right:0,bottom:0},{el:triggerBtn,top:0,right:0}]}]})},setValue:function(v){this.storeValue=v,this.popup.setValue(v),this.trigger.setValue(v)},getValue:function(){return this.storeValue},hidePopupView:function(){this.combo.hideView()}}),BI.DateTimeCombo.EVENT_CANCEL="EVENT_CANCEL",BI.DateTimeCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.DateTimeCombo.EVENT_CHANGE="EVENT_CHANGE",BI.DateTimeCombo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.date_time_combo",BI.DateTimeCombo),BI.DateTimePopup=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.DateTimePopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-date-time-popup",width:268,height:374})},_init:function(){BI.DateTimePopup.superclass._init.apply(this,arguments);var self=this,opts=this.options;this.cancelButton=BI.createWidget({type:"bi.text_button",cls:"multidate-popup-button bi-border-top bi-border-right",shadow:!0,text:BI.i18nText("BI-Basic_Cancel")}),this.cancelButton.on(BI.TextButton.EVENT_CHANGE,function(){self.fireEvent(BI.DateTimePopup.BUTTON_CANCEL_EVENT_CHANGE)}),this.okButton=BI.createWidget({type:"bi.text_button",cls:"multidate-popup-button bi-border-top",shadow:!0,text:BI.i18nText("BI-Basic_OK")}),this.okButton.on(BI.TextButton.EVENT_CHANGE,function(){self.fireEvent(BI.DateTimePopup.BUTTON_OK_EVENT_CHANGE)}),this.dateCombo=BI.createWidget({type:"bi.date_calendar_popup",behaviors:opts.behaviors,min:self.options.min,max:self.options.max}),self.dateCombo.on(BI.DateCalendarPopup.EVENT_CHANGE,function(){self.fireEvent(BI.DateTimePopup.CALENDAR_EVENT_CHANGE)}),this.dateButton=BI.createWidget({type:"bi.grid",items:[[this.cancelButton,this.okButton]]}),BI.createWidget({element:this,type:"bi.vtape",items:[{el:this.dateCombo},{el:{type:"bi.center_adapt",cls:"bi-split-top",items:[{type:"bi.dynamic_date_time_select",ref:function(_ref){self.timeSelect=_ref}}]},height:50},{el:this.dateButton,height:30}]}),this.setValue(opts.value)},setValue:function(v){var value=v,date;BI.isNull(value)?(date=BI.getDate(),this.dateCombo.setValue({year:date.getFullYear(),month:date.getMonth()+1,day:date.getDate()}),this.timeSelect.setValue({hour:date.getHours(),minute:date.getMinutes(),second:date.getSeconds()})):(this.dateCombo.setValue({year:value.year,month:value.month,day:value.day}),this.timeSelect.setValue({hour:value.hour,minute:value.minute,second:value.second}))},getValue:function(){return BI.extend({year:this.dateCombo.getValue().year,month:this.dateCombo.getValue().month,day:this.dateCombo.getValue().day},this.timeSelect.getValue())}}),BI.DateTimePopup.BUTTON_OK_EVENT_CHANGE="BUTTON_OK_EVENT_CHANGE",BI.DateTimePopup.BUTTON_CANCEL_EVENT_CHANGE="BUTTON_CANCEL_EVENT_CHANGE",BI.DateTimePopup.CALENDAR_EVENT_CHANGE="CALENDAR_EVENT_CHANGE",BI.shortcut("bi.date_time_popup",BI.DateTimePopup),BI.DateTimeTrigger=BI.inherit(BI.Trigger,{_const:{hgap:4},_defaultConfig:function(){return BI.extend(BI.DateTimeTrigger.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-date-time-trigger",min:"1900-01-01",max:"2099-12-31",height:24,width:200})},_init:function(){BI.DateTimeTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options,c=this._const;this.text=BI.createWidget({type:"bi.label",textAlign:"left",height:o.height,width:o.width,hgap:c.hgap}),BI.createWidget({type:"bi.htape",element:this,items:[{el:this.text},{el:BI.createWidget(),width:o.height}]}),this.setValue(o.value)},_printTime:function(v){return v<10?"0"+v:v},setValue:function(v){var self=this,value=v,dateStr;if(BI.isNull(value))value=BI.getDate(),dateStr=BI.print(value,"%Y-%X-%d %H:%M:%S");else{var date=BI.getDate(value.year,value.month-1,value.day,value.hour,value.minute,value.second);dateStr=BI.print(date,"%Y-%X-%d %H:%M:%S")}this.text.setText(dateStr),this.text.setTitle(dateStr)}}),BI.shortcut("bi.date_time_trigger",BI.DateTimeTrigger),BI.StaticDateTimePaneCard=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.StaticDateTimePaneCard.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-date-time-pane",min:"1900-01-01",max:"2099-12-31",selectedTime:null})},_init:function(){BI.StaticDateTimePaneCard.superclass._init.apply(this,arguments);var self=this,o=this.options;this.today=BI.getDate(),this._year=this.today.getFullYear(),this._month=this.today.getMonth()+1,this.selectedTime=o.selectedTime||{year:this._year,month:this._month},this.datePicker=BI.createWidget({type:"bi.date_picker",behaviors:o.behaviors,min:o.min,max:o.max}),this.datePicker.on(BI.DatePicker.EVENT_CHANGE,function(){var value=self.datePicker.getValue(),monthDay=BI.getMonthDays(BI.getDate(value.year,value.month-1,1)),day=self.selectedTime.day||0;day>monthDay&&(day=monthDay),self.selectedTime=BI.extend(self.selectedTime,{year:value.year,month:value.month,day:day}),0!==day&&(self.selectedTime.day=day),self.calendar.setSelect(BI.Calendar.getPageByDateJSON(self.selectedTime)),self.calendar.setValue(self.selectedTime),0!==day&&self.fireEvent(BI.DateCalendarPopup.EVENT_CHANGE)}),this.calendar=BI.createWidget({direction:"custom",type:"bi.navigation",tab:this.datePicker,cardCreator:BI.bind(this._createNav,this)}),this.calendar.on(BI.Navigation.EVENT_CHANGE,function(){self.selectedTime=BI.extend(self.calendar.getValue(),self.timeSelect.getValue()),self.calendar.empty(),self.setValue(self.selectedTime),self.fireEvent(BI.DateCalendarPopup.EVENT_CHANGE)}),BI.createWidget({type:"bi.vtape",element:this,hgap:10,items:[{el:this.datePicker,height:40},this.calendar,{el:{type:"bi.dynamic_date_time_select",cls:"bi-split-top",ref:function(){self.timeSelect=this},listeners:[{eventName:BI.DynamicDateTimeSelect.EVENT_CONFIRM,action:function(){self.selectedTime=BI.extend(self.calendar.getValue(),self.timeSelect.getValue()),self.fireEvent("EVENT_CHANGE")}}]},height:40}]}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.layout",cls:"bi-split-top"},height:1,top:40,left:0,right:0}]}),this.setValue(o.selectedTime)},_createNav:function(v){var date=BI.Calendar.getDateJSONByPage(v),calendar=BI.createWidget({type:"bi.calendar",logic:{dynamic:!1},min:this.options.min,max:this.options.max,year:date.year,month:date.month,day:this.selectedTime.day});return calendar},_getNewCurrentDate:function(){var today=BI.getDate();return{year:today.getFullYear(),month:today.getMonth()+1}},_setCalenderValue:function(date){this.calendar.setSelect(BI.Calendar.getPageByDateJSON(date)),this.calendar.setValue(date),this.selectedTime=BI.extend({},this.timeSelect.getValue(),date)},_setDatePicker:function(timeOb){BI.isNull(timeOb)||BI.isNull(timeOb.year)||BI.isNull(timeOb.month)?this.datePicker.setValue(this._getNewCurrentDate()):this.datePicker.setValue(timeOb)},_setCalendar:function(timeOb){BI.isNull(timeOb)||BI.isNull(timeOb.day)?(this.calendar.empty(),this._setCalenderValue(this._getNewCurrentDate())):this._setCalenderValue(timeOb)},setValue:function(timeOb){timeOb=timeOb||{},this._setDatePicker(timeOb),this._setCalendar(timeOb),this.timeSelect.setValue({hour:timeOb.hour,minute:timeOb.minute,second:timeOb.second})},getValue:function(){return this.selectedTime}}),BI.shortcut("bi.static_date_time_pane_card",BI.StaticDateTimePaneCard),BI.DynamicDateTimePane=BI.inherit(BI.Widget,{props:{baseCls:"bi-dynamic-date-pane"},render:function(){var self=this,o=this.options;return{type:"bi.vtape",items:[{el:{type:"bi.linear_segment",cls:"bi-split-bottom",height:30,items:BI.createItems([{text:BI.i18nText("BI-Multi_Date_YMD"),value:BI.DynamicDateTimePane.Static},{text:BI.i18nText("BI-Basic_Dynamic_Title"),value:BI.DynamicDateTimePane.Dynamic}],{textAlign:"center"}),listeners:[{eventName:BI.ButtonGroup.EVENT_CHANGE,action:function(){var value=this.getValue()[0];switch(self.dateTab.setSelect(value),value){case BI.DynamicDateTimePane.Static:var date=BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue());self.ymd.setValue({year:date.getFullYear(),month:date.getMonth()+1,day:date.getDate()});break;case BI.DynamicDateTimePane.Dynamic:self.dynamicPane.setValue({year:0})}}}],ref:function(){self.switcher=this}},height:30},{type:"bi.tab",ref:function(){self.dateTab=this},showIndex:BI.DynamicDateTimePane.Static,cardCreator:function(v){switch(v){case BI.DynamicDateTimePane.Static:return{type:"bi.static_date_time_pane_card",behaviors:o.behaviors,listeners:[{eventName:"EVENT_CHANGE",action:function(){self.fireEvent("EVENT_CHANGE")}}],ref:function(){self.ymd=this}};case BI.DynamicDateTimePane.Dynamic:default:return{type:"bi.dynamic_date_card",listeners:[{eventName:"EVENT_CHANGE",action:function(){self._checkValue(self.getValue())&&self.fireEvent("EVENT_CHANGE")}}],ref:function(){self.dynamicPane=this}}}}}]}},mounted:function(){this.setValue(this.options.value)},_checkValueValid:function(value){return BI.isNull(value)||BI.isEmptyObject(value)||BI.isEmptyString(value)},_checkValue:function(v){switch(v.type){case BI.DynamicDateCombo.Dynamic:return BI.isNotEmptyObject(v.value);case BI.DynamicDateCombo.Static:default:return!0}},setValue:function(v){v=v||{};var type=v.type||BI.DynamicDateTimePane.Static,value=v.value||v;switch(this.switcher.setValue(type),this.dateTab.setSelect(type),type){case BI.DynamicDateTimePane.Dynamic:this.dynamicPane.setValue(value);break;case BI.DynamicDateTimePane.Static:default:if(this._checkValueValid(value)){var date=BI.getDate();this.ymd.setValue({year:date.getFullYear(),month:date.getMonth()+1})}else this.ymd.setValue(value)}},getValue:function(){return{type:this.dateTab.getSelect(),value:this.dateTab.getValue()}}}),BI.shortcut("bi.dynamic_date_time_pane",BI.DynamicDateTimePane),BI.extend(BI.DynamicDateTimePane,{Static:1,Dynamic:2}),BI.DownListCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.DownListCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-down-list-combo",height:24,items:[],adjustLength:0,direction:"bottom",trigger:"click",container:null,stopPropagation:!1,el:{}})},_init:function(){BI.DownListCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.popupview=BI.createWidget({type:"bi.down_list_popup",items:o.items,chooseType:o.chooseType,value:o.value}),this.popupview.on(BI.DownListPopup.EVENT_CHANGE,function(value){self.fireEvent(BI.DownListCombo.EVENT_CHANGE,value),self.downlistcombo.hideView()}),this.popupview.on(BI.DownListPopup.EVENT_SON_VALUE_CHANGE,function(value,fatherValue){self.fireEvent(BI.DownListCombo.EVENT_SON_VALUE_CHANGE,value,fatherValue),self.downlistcombo.hideView()}),this.downlistcombo=BI.createWidget({element:this,type:"bi.combo",trigger:o.trigger,isNeedAdjustWidth:!1,container:o.container,adjustLength:o.adjustLength,direction:o.direction,stopPropagation:o.stopPropagation,el:BI.createWidget(o.el,{type:"bi.icon_trigger",extraCls:o.iconCls,width:o.width,height:o.height}),popup:{el:this.popupview,stopPropagation:o.stopPropagation,maxHeight:1e3,minWidth:140}}),this.downlistcombo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){self.fireEvent(BI.DownListCombo.EVENT_BEFORE_POPUPVIEW)})},hideView:function(){this.downlistcombo.hideView()},showView:function(e){this.downlistcombo.showView(e)},populate:function(items){this.popupview.populate(items)},setValue:function(v){this.popupview.setValue(v)},getValue:function(){return this.popupview.getValue()}}),BI.DownListCombo.EVENT_CHANGE="EVENT_CHANGE",BI.DownListCombo.EVENT_SON_VALUE_CHANGE="EVENT_SON_VALUE_CHANGE",BI.DownListCombo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.down_list_combo",BI.DownListCombo),BI.DownListGroup=BI.inherit(BI.Widget,{constants:{iconCls:"check-mark-ha-font"},_defaultConfig:function(){return BI.extend(BI.DownListGroup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-down-list-group",items:[{el:{}}]})},_init:function(){BI.DownListGroup.superclass._init.apply(this,arguments);var o=this.options,self=this;this.downlistgroup=BI.createWidget({element:this,type:"bi.button_tree",items:o.items,chooseType:0,layouts:[{type:"bi.vertical",hgap:0,vgap:0}],value:o.value}),this.downlistgroup.on(BI.Controller.EVENT_CHANGE,function(type){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.DownListGroup.EVENT_CHANGE,arguments)})},getValue:function(){return this.downlistgroup.getValue()},setValue:function(v){this.downlistgroup.setValue(v)}}),BI.DownListGroup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.down_list_group",BI.DownListGroup),BI.DownListItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.DownListItem.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-down-list-item bi-list-item-active",cls:"",height:24,logic:{dynamic:!0},selected:!1,iconHeight:null,iconWidth:null,textHgap:0,textVgap:0,textLgap:0,textRgap:0})},_init:function(){BI.DownListItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.text=BI.createWidget({type:"bi.label",cls:"list-item-text",textAlign:"left",hgap:o.textHgap,vgap:o.textVgap,lgap:o.textLgap,rgap:o.textRgap,text:o.text,value:o.value,keyword:o.keyword,height:o.height}),this.icon=BI.createWidget({type:"bi.center_adapt",width:36,height:o.height,items:[{el:{type:"bi.icon",width:o.iconWidth,height:o.iconHeight}}]}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,this.icon,this.text)}))))},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},getValue:function(){return this.text.getValue()},setText:function(){this.text.setText.apply(this.text,arguments)},getText:function(){return this.text.getText()},doClick:function(){BI.DownListItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.DownListItem.EVENT_CHANGE,this.getValue(),this)},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)}}),BI.DownListItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.down_list_item",BI.DownListItem),BI.DownListGroupItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.DownListGroupItem.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-down-list-group-item",logic:{dynamic:!1},iconCls1:"dot-e-font",iconCls2:"pull-right-e-font"})},_init:function(){BI.DownListGroupItem.superclass._init.apply(this,arguments);var o=this.options,self=this;this.text=BI.createWidget({type:"bi.label",cls:"list-group-item-text",textAlign:"left",text:o.text,value:o.value,height:o.height}),this.icon1=BI.createWidget({type:"bi.icon_button",cls:o.iconCls1,width:36,disableSelected:!0,selected:this._digest(o.value)}),this.icon2=BI.createWidget({type:"bi.icon_button",cls:o.iconCls2,width:24,forceNotSelected:!0});var blank=BI.createWidget({type:"bi.layout",width:24});BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.icon2,top:0,bottom:0,right:0}]}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("horizontal",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("left",this.icon1,this.text,blank)})))),this.element.hover(function(){self.isEnabled()&&self.hover()},function(){self.isEnabled()&&self.dishover()})},_digest:function(v){var self=this,o=this.options;return v=BI.isArray(v)?v:[v],BI.any(v,function(idx,value){return BI.contains(o.childValues,value)})},hover:function(){BI.DownListGroupItem.superclass.hover.apply(this,arguments),this.icon1.element.addClass("hover"),this.icon2.element.addClass("hover")},dishover:function(){BI.DownListGroupItem.superclass.dishover.apply(this,arguments),this.icon1.element.removeClass("hover"),this.icon2.element.removeClass("hover")},doClick:function(){BI.DownListGroupItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.DownListGroupItem.EVENT_CHANGE,this.getValue())},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},setValue:function(v){this.icon1.setSelected(this._digest(v))}}),BI.DownListGroupItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.down_list_group_item",BI.DownListGroupItem),BI.DownListPopup=BI.inherit(BI.Pane,{constants:{nextIcon:"pull-right-e-font",height:24,iconHeight:12,iconWidth:12,hgap:0,vgap:0,border:1},_defaultConfig:function(){var conf=BI.DownListPopup.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-down-list-popup",items:[],chooseType:BI.Selection.Multi})},_init:function(){BI.DownListPopup.superclass._init.apply(this,arguments),this.singleValues=[],this.childValueMap={},this.fatherValueMap={},this.items=BI.deepClone(this.options.items);var self=this,o=this.options,children=this._createChildren(this.items);this.popup=BI.createWidget({type:"bi.button_tree",items:BI.createItems(children,{},{adjustLength:-2}),layouts:[{type:"bi.vertical",hgap:this.constants.hgap,vgap:this.constants.vgap}],value:this._digest(o.value),chooseType:o.chooseType}),this.popup.on(BI.ButtonTree.EVENT_CHANGE,function(value,object){var changedValue=value;if(BI.isNotNull(self.childValueMap[value])?(changedValue=self.childValueMap[value],self.fireEvent(BI.DownListPopup.EVENT_SON_VALUE_CHANGE,changedValue,self.fatherValueMap[value])):self.fireEvent(BI.DownListPopup.EVENT_CHANGE,changedValue,object),!BI.contains(self.singleValues,changedValue)){var item=self.getValue(),result=[];BI.each(item,function(i,valueObject){valueObject.value!=changedValue&&result.push(valueObject)}),self.setValue(result)}}),BI.createWidget({type:"bi.vertical",element:this,items:[this.popup],vgap:5})},_createChildren:function(items){var self=this,result=[];return BI.each(items,function(i,it){var item_done={type:"bi.down_list_group",items:[]};if(BI.each(it,function(i,item){BI.isNotEmptyArray(item.children)&&!BI.isEmpty(item.el)?(item.type="bi.combo_group",item.isDefaultInit=!0,item.cls="down-list-group",item.trigger="hover",item.isNeedAdjustWidth=!1,item.el.title=item.el.title||item.el.text,item.el.type="bi.down_list_group_item",item.el.logic={dynamic:!0},item.el.height=self.constants.height,item.el.iconCls2=self.constants.nextIcon,item.popup={lgap:1,el:{type:"bi.button_tree",chooseType:0,layouts:[{type:"bi.vertical"}]},innerVGap:5,maxHeight:378},item.el.childValues=[],BI.each(item.children,function(i,child){var fatherValue=BI.deepClone(item.el.value),childValue=BI.deepClone(child.value);self.singleValues.push(child.value),child.type="bi.down_list_item",child.extraCls=" child-down-list-item",child.title=child.title||child.text,child.textRgap=10,child.isNeedAdjustWidth=!1,child.logic={dynamic:!0},child.father=fatherValue,self.fatherValueMap[self._createChildValue(fatherValue,childValue)]=fatherValue,self.childValueMap[self._createChildValue(fatherValue,childValue)]=childValue,child.value=self._createChildValue(fatherValue,childValue),item.el.childValues.push(child.value)})):(item.type="bi.down_list_item",item.title=item.title||item.text,item.textRgap=10,item.isNeedAdjustWidth=!1,item.logic={dynamic:!0});var el_done={};el_done.el=item,item_done.items.push(el_done)}),self._isGroup(item_done.items)&&BI.each(item_done.items,function(i,item){self.singleValues.push(item.el.value)}),result.push(item_done),self._needSpliter(i,items.length)){var spliter_container=BI.createWidget({type:"bi.vertical",items:[{el:{type:"bi.layout",cls:"bi-down-list-spliter bi-split-top cursor-pointer",height:0}}],cls:"bi-down-list-spliter-container cursor-pointer",vgap:5,lgap:10,rgap:0});result.push(spliter_container)}}),result},_isGroup:function(i){return i.length>1},_needSpliter:function(i,itemLength){return i0?1:0}},setValue:function(v){v=v||{},this.position=v.position||BI.DynamicDateCard.OFFSET.CURRENT;var values=[],valuesItems=[];BI.isNotNull(v.year)&&(values.push(BI.DynamicDateCard.TYPE.YEAR),valuesItems.push(this._createValue(BI.DynamicDateCard.TYPE.YEAR,v.year))),BI.isNotNull(v.quarter)&&(values.push(BI.DynamicDateCard.TYPE.QUARTER),valuesItems.push(this._createValue(BI.DynamicDateCard.TYPE.QUARTER,v.quarter))),BI.isNotNull(v.month)&&(values.push(BI.DynamicDateCard.TYPE.MONTH),valuesItems.push(this._createValue(BI.DynamicDateCard.TYPE.MONTH,v.month))),BI.isNotNull(v.week)&&(values.push(BI.DynamicDateCard.TYPE.WEEK),valuesItems.push(this._createValue(BI.DynamicDateCard.TYPE.WEEK,v.week))),BI.isNotNull(v.day)&&(values.push(BI.DynamicDateCard.TYPE.DAY),valuesItems.push(this._createValue(BI.DynamicDateCard.TYPE.DAY,v.day))),BI.isNotNull(v.workDay)&&(values.push(BI.DynamicDateCard.TYPE.WORK_DAY),valuesItems.push(this._createValue(BI.DynamicDateCard.TYPE.WORK_DAY,v.workDay))),this.checkgroup.setValue(values),this.workDayBox.setSelected(BI.isNotNull(v.workDay)),this.resultPane.populate(this._getParamJson(valuesItems,v.position))},getValue:function(){var self=this,valueMap={},selectValues=this.checkgroup.getValue(),buttons=this.resultPane.getAllButtons();if(0!==selectValues.length&&BI.each(buttons,function(idx,button){var value=button.getValue();switch(value.dateType){case BI.DynamicDateCard.TYPE.YEAR:valueMap.year=0===value.offset?-value.value:value.value;break;case BI.DynamicDateCard.TYPE.QUARTER:valueMap.quarter=0===value.offset?-value.value:value.value;break;case BI.DynamicDateCard.TYPE.MONTH:valueMap.month=0===value.offset?-value.value:value.value;break;case BI.DynamicDateCard.TYPE.WEEK:valueMap.week=0===value.offset?-value.value:value.value;break;case BI.DynamicDateCard.TYPE.DAY:valueMap.day=0===value.offset?-value.value:value.value}BI.isNull(value.dateType)&&(valueMap.position=self.position||BI.DynamicDateCard.OFFSET.CURRENT)}),this.workDayBox.isSelected()){var value=buttons[0].getValue();valueMap.workDay=0===value.offset?-value.value:value.value}return valueMap}}),BI.shortcut("bi.dynamic_date_card",BI.DynamicDateCard),BI.extend(BI.DynamicDateCard,{TYPE:{YEAR:1,QUARTER:2,MONTH:3,WEEK:4,DAY:5,WORK_DAY:6},OFFSET:{CURRENT:1,BEGIN:2,END:3}}),BI.DynamicDateCombo=BI.inherit(BI.Single,{constants:{popupHeight:259,popupWidth:270,comboAdjustHeight:1,border:1},props:{baseCls:"bi-dynamic-date-combo bi-border bi-focus-shadow bi-border-radius",height:22,minDate:"1900-01-01",maxDate:"2099-12-31",format:"",allowEdit:!0},render:function(){var self=this,opts=this.options;this.storeTriggerValue="";var date=BI.getDate();return this.storeValue=opts.value,{type:"bi.htape",items:[{el:{type:"bi.icon_button",cls:"bi-trigger-icon-button date-change-h-font",width:opts.height,height:opts.height,ref:function(){self.changeIcon=this}},width:opts.height},{type:"bi.absolute",items:[{el:{type:"bi.combo",container:opts.container,ref:function(){self.combo=this},toggle:!1,isNeedAdjustHeight:!1,isNeedAdjustWidth:!1,el:{type:"bi.dynamic_date_trigger",min:opts.minDate,max:opts.maxDate,format:opts.format,allowEdit:opts.allowEdit,watermark:opts.watermark,height:opts.height,value:opts.value,ref:function(){self.trigger=this},listeners:[{eventName:BI.DynamicDateTrigger.EVENT_KEY_DOWN,action:function(){self.combo.isViewVisible()&&self.combo.hideView(),self.fireEvent(BI.DynamicDateCombo.EVENT_KEY_DOWN,arguments)}},{eventName:BI.DynamicDateTrigger.EVENT_STOP,action:function(){self.combo.isViewVisible()||self.combo.showView()}},{eventName:BI.DynamicDateTrigger.EVENT_FOCUS,action:function(){self.storeTriggerValue=self.trigger.getKey(),self.combo.isViewVisible()||self.combo.showView(),self.fireEvent(BI.DynamicDateCombo.EVENT_FOCUS)}},{eventName:BI.DynamicDateTrigger.EVENT_BLUR,action:function(){self.fireEvent(BI.DynamicDateCombo.EVENT_BLUR)}},{eventName:BI.DynamicDateTrigger.EVENT_ERROR,action:function(){self.storeValue={type:BI.DynamicDateCombo.Static,value:{year:date.getFullYear(),month:date.getMonth()+1}},self.fireEvent(BI.DynamicDateCombo.EVENT_ERROR)}},{eventName:BI.DynamicDateTrigger.EVENT_VALID,action:function(){self.fireEvent(BI.DynamicDateCombo.EVENT_VALID)}},{eventName:BI.DynamicDateTrigger.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicDateCombo.EVENT_CHANGE)}},{eventName:BI.DynamicDateTrigger.EVENT_CONFIRM,action:function(){if(!self.combo.isViewVisible()){var dateStore=self.storeTriggerValue,dateObj=self.trigger.getKey();BI.isNotEmptyString(dateObj)&&!BI.isEqual(dateObj,dateStore)?(self.storeValue=self.trigger.getValue(),self.setValue(self.trigger.getValue())):BI.isEmptyString(dateObj)&&(self.storeValue=null,self.trigger.setValue()),self._checkDynamicValue(self.storeValue),self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM)}}}]},adjustLength:this.constants.comboAdjustHeight,popup:{el:{type:"bi.dynamic_date_popup",behaviors:opts.behaviors,min:opts.minDate,max:opts.maxDate,value:opts.value,ref:function(){self.popup=this},listeners:[{eventName:BI.DynamicDatePopup.BUTTON_CLEAR_EVENT_CHANGE,action:function(){self.setValue(),self.combo.hideView(),self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicDatePopup.BUTTON_lABEL_EVENT_CHANGE,action:function(){var date=BI.getDate();self.setValue({type:BI.DynamicDateCombo.Static,value:{year:date.getFullYear(),month:date.getMonth()+1,day:date.getDate()}}),self.combo.hideView(),self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicDatePopup.BUTTON_OK_EVENT_CHANGE,action:function(){var value=self.popup.getValue();self._checkValue(value)&&self.setValue(value),self.combo.hideView(),self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicDatePopup.EVENT_CHANGE,action:function(){self.setValue(self.popup.getValue()),self.combo.hideView(),self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM)}}]},stopPropagation:!1},hideChecker:function(e){return 0===self.triggerBtn.element.find(e.target).length},listeners:[{eventName:BI.Combo.EVENT_BEFORE_POPUPVIEW,action:function(){self.popup.setValue(self.storeValue),self.fireEvent(BI.DynamicDateCombo.EVENT_BEFORE_POPUPVIEW)}}]},top:0,left:0,right:0,bottom:0},{el:{type:"bi.icon_button",cls:"bi-trigger-icon-button date-font",width:opts.height,height:opts.height,listeners:[{eventName:BI.IconButton.EVENT_CHANGE,action:function(){self.combo.isViewVisible()||self.combo.showView()}}],ref:function(){self.triggerBtn=this}},top:0,right:0}]}],ref:function(_ref){self.comboWrapper=_ref}}},mounted:function(){this._checkDynamicValue(this.storeValue)},_checkDynamicValue:function(v){var o=this.options,type=null;switch(BI.isNotNull(v)&&(type=v.type),type){case BI.DynamicDateCombo.Dynamic:this.changeIcon.setVisible(!0),this.comboWrapper.attr("items")[0].width=o.height,this.comboWrapper.resize();break;default:this.comboWrapper.attr("items")[0].width=0,this.comboWrapper.resize(),this.changeIcon.setVisible(!1)}},_checkValue:function(v){switch(v.type){case BI.DynamicDateCombo.Dynamic:return BI.isNotEmptyObject(v.value);case BI.DynamicDateCombo.Static:default:return!0}},_defaultState:function(){},setValue:function(v){this.storeValue=v,this.trigger.setValue(v),this._checkDynamicValue(v)},getValue:function(){return this.storeValue},getKey:function(){return this.trigger.getKey()},hidePopupView:function(){this.combo.hideView()}}),BI.DynamicDateCombo.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.DynamicDateCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.DynamicDateCombo.EVENT_FOCUS="EVENT_FOCUS",BI.DynamicDateCombo.EVENT_BLUR="EVENT_BLUR",BI.DynamicDateCombo.EVENT_CHANGE="EVENT_CHANGE",BI.DynamicDateCombo.EVENT_VALID="EVENT_VALID",BI.DynamicDateCombo.EVENT_ERROR="EVENT_ERROR",BI.DynamicDateCombo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.dynamic_date_combo",BI.DynamicDateCombo),BI.extend(BI.DynamicDateCombo,{Static:1,Dynamic:2}),BI.DynamicDateParamItem=BI.inherit(BI.Widget,{props:{baseCls:"bi-dynamic-date-param-item",dateType:BI.DynamicDateCard.TYPE.YEAR,value:0,offset:0,height:24},render:function(){var self=this,o=this.options;return{type:"bi.htape",items:[{el:{type:"bi.sign_editor",cls:"bi-border",height:22,validationChecker:function(v){return BI.isNaturalNumber(v)},value:o.value,ref:function(){self.editor=this},errorText:function(v){return BI.isEmptyString(v)?BI.i18nText("BI-Basic_Please_Input_Content"):BI.i18nText("BI-Please_Input_Natural_Number")},allowBlank:!1,listeners:[{eventName:BI.SignEditor.EVENT_CONFIRM,action:function(){self.fireEvent(BI.DynamicDateParamItem.EVENT_CHANGE)}}]},width:60},{el:{type:"bi.label",height:24,text:this._getText()},width:o.dateType===BI.DynamicDateCard.TYPE.WORK_DAY?60:20},{type:"bi.text_value_combo",height:24,items:[{text:BI.i18nText("BI-Basic_Front"),value:0},{text:BI.i18nText("BI-Basic_Behind"),value:1}],ref:function(){self.offsetCombo=this},container:null,value:o.offset,listeners:[{eventName:BI.TextValueCombo.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicDateParamItem.EVENT_CHANGE)}}]}]}},_getText:function(){var text="";switch(this.options.dateType){case BI.DynamicDateCard.TYPE.YEAR:text=BI.i18nText("BI-Basic_Year");break;case BI.DynamicDateCard.TYPE.QUARTER:text=BI.i18nText("BI-Basic_Single_Quarter");break;case BI.DynamicDateCard.TYPE.MONTH:text=BI.i18nText("BI-Basic_Month");break;case BI.DynamicDateCard.TYPE.WEEK:text=BI.i18nText("BI-Basic_Week");break;case BI.DynamicDateCard.TYPE.DAY:text=BI.i18nText("BI-Basic_Day");break;case BI.DynamicDateCard.TYPE.WORK_DAY:default:text=BI.i18nText("BI-Basic_Work_Day")}return text},setValue:function(v){v=v||{},v.value=v.value||0,v.offset=v.offset||0,this.editor.setValue(v.value),this.offsetCombo.setValue(v.offset)},getValue:function(){return{dateType:this.options.dateType,value:this.editor.getValue(),offset:this.offsetCombo.getValue()[0]}}}),BI.DynamicDateParamItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.dynamic_date_param_item",BI.DynamicDateParamItem),BI.DynamicDatePopup=BI.inherit(BI.Widget,{constants:{tabHeight:30,buttonHeight:24},props:{baseCls:"bi-dynamic-date-popup",width:248,height:344},_init:function(){BI.DynamicDatePopup.superclass._init.apply(this,arguments);var self=this,opts=this.options,c=this.constants;this.storeValue={type:BI.DynamicDateCombo.Static},BI.createWidget({element:this,type:"bi.vtape",items:[{el:this._getTabJson()},{el:{type:"bi.grid",items:[[{type:"bi.text_button",cls:"bi-high-light bi-split-top",shadow:!0,text:BI.i18nText("BI-Basic_Clear"),textHeight:c.buttonHeight-1,listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicDatePopup.BUTTON_CLEAR_EVENT_CHANGE)}}]},{type:"bi.text_button",cls:"bi-split-left bi-split-right bi-high-light bi-split-top",shadow:!0,textHeight:c.buttonHeight-1,text:BI.i18nText("BI-Multi_Date_Today"),ref:function(){self.textButton=this},listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicDatePopup.BUTTON_lABEL_EVENT_CHANGE)}}]},{type:"bi.text_button",cls:"bi-high-light bi-split-top",textHeight:c.buttonHeight-1,shadow:!0,text:BI.i18nText("BI-Basic_OK"),listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicDatePopup.BUTTON_OK_EVENT_CHANGE)}}]}]]},height:24}]}),this.setValue(opts.value)},_getTabJson:function(){var self=this,o=this.options;return{type:"bi.tab",ref:function(){self.dateTab=this},tab:{type:"bi.linear_segment",cls:"bi-split-bottom",height:this.constants.tabHeight,items:BI.createItems([{text:BI.i18nText("BI-Multi_Date_YMD"),value:BI.DynamicDateCombo.Static},{text:BI.i18nText("BI-Basic_Dynamic_Title"),value:BI.DynamicDateCombo.Dynamic}],{textAlign:"center"})},cardCreator:function(v){switch(v){case BI.DynamicDateCombo.Dynamic:return{type:"bi.dynamic_date_card",listeners:[{eventName:"EVENT_CHANGE",action:function(){self._setInnerValue(self.year,v)}}],ref:function(){self.dynamicPane=this}};case BI.DynamicDateCombo.Static:default:return{type:"bi.date_calendar_popup",behaviors:o.behaviors,min:self.options.min,max:self.options.max,listeners:[{eventName:BI.DateCalendarPopup.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicDatePopup.EVENT_CHANGE)}}],ref:function(){self.ymd=this}}}},listeners:[{eventName:BI.Tab.EVENT_CHANGE,action:function(){var v=self.dateTab.getSelect();switch(v){case BI.DynamicDateCombo.Static:var date=BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue());self.ymd.setValue({year:date.getFullYear(),month:date.getMonth()+1,day:date.getDate()}),self._setInnerValue();break;case BI.DynamicDateCombo.Dynamic:default:self.storeValue&&self.storeValue.type===BI.DynamicDateCombo.Dynamic?self.dynamicPane.setValue(self.storeValue.value):self.dynamicPane.setValue({year:0}),self._setInnerValue()}}}]}},_setInnerValue:function(){if(this.dateTab.getSelect()===BI.DynamicDateCombo.Static)this.textButton.setValue(BI.i18nText("BI-Multi_Date_Today")),this.textButton.setEnable(!0);else{var date=BI.DynamicDateHelper.getCalculation(this.dynamicPane.getValue());date=BI.print(date,"%Y-%X-%d"),this.textButton.setValue(date),this.textButton.setEnable(!1)}},_checkValueValid:function(value){return BI.isNull(value)||BI.isEmptyObject(value)||BI.isEmptyString(value)},setValue:function(v){this.storeValue=v;var self=this,type,value;switch(v=v||{},type=v.type||BI.DynamicDateCombo.Static,value=v.value||v,this.dateTab.setSelect(type),type){case BI.DynamicDateCombo.Dynamic:this.dynamicPane.setValue(value),self._setInnerValue();break;case BI.DynamicDateCombo.Static:default:if(this._checkValueValid(value)){var date=BI.getDate();this.ymd.setValue({year:date.getFullYear(),month:date.getMonth()+1,day:date.getDate()}),this.textButton.setValue(BI.i18nText("BI-Multi_Date_Today"))}else this.ymd.setValue(value),this.textButton.setValue(BI.i18nText("BI-Multi_Date_Today"));this.textButton.setEnable(!0)}},getValue:function(){return{type:this.dateTab.getSelect(),value:this.dateTab.getValue()}}}),BI.DynamicDatePopup.EVENT_CHANGE="EVENT_CHANGE",BI.DynamicDatePopup.BUTTON_OK_EVENT_CHANGE="BUTTON_OK_EVENT_CHANGE",BI.DynamicDatePopup.BUTTON_lABEL_EVENT_CHANGE="BUTTON_lABEL_EVENT_CHANGE",BI.DynamicDatePopup.BUTTON_CLEAR_EVENT_CHANGE="BUTTON_CLEAR_EVENT_CHANGE",BI.shortcut("bi.dynamic_date_popup",BI.DynamicDatePopup),BI.DynamicDateTrigger=BI.inherit(BI.Trigger,{_const:{hgap:4,vgap:2,yearLength:4,yearMonthLength:6,yearFullMonthLength:7,compareFormat:"%Y-%X-%d"},props:{extraCls:"bi-date-trigger",min:"1900-01-01",max:"2099-12-31",height:24,format:"",allowEdit:!0,watermark:""},_init:function(){BI.DynamicDateTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options,c=this._const;this.storeTriggerValue="",this.editor=BI.createWidget({type:"bi.sign_editor",height:o.height,validationChecker:function(v){var formatStr=self._getStandardDateStr(v),date=formatStr.match(/\d+/g);return!BI.isKey(o.format)&&self._autoAppend(v,date),self._dateCheck(formatStr)&&BI.checkDateLegal(formatStr)&&self._checkVoid({year:0|date[0],month:0|date[1],day:0|date[2]})},quitChecker:function(){return!1},hgap:c.hgap,vgap:c.vgap,allowBlank:!0,watermark:BI.isKey(o.watermark)?o.watermark:BI.i18nText("BI-Basic_Unrestricted"),errorText:function(){var str="";return BI.isKey(o.format)||(str=self.editor.isEditing()?BI.i18nText("BI-Date_Trigger_Error_Text"):BI.i18nText("BI-Year_Trigger_Invalid_Text")),str},title:BI.bind(this._getTitle,this)}),this.editor.on(BI.SignEditor.EVENT_KEY_DOWN,function(){self.fireEvent(BI.DynamicDateTrigger.EVENT_KEY_DOWN,arguments)}),this.editor.on(BI.SignEditor.EVENT_FOCUS,function(){self.storeTriggerValue=self.getKey(),self.fireEvent(BI.DynamicDateTrigger.EVENT_FOCUS)}),this.editor.on(BI.SignEditor.EVENT_BLUR,function(){self.fireEvent(BI.DynamicDateTrigger.EVENT_BLUR)}),this.editor.on(BI.SignEditor.EVENT_STOP,function(){self.fireEvent(BI.DynamicDateTrigger.EVENT_STOP)}),this.editor.on(BI.SignEditor.EVENT_VALID,function(){self.fireEvent(BI.DynamicDateTrigger.EVENT_VALID)}),this.editor.on(BI.SignEditor.EVENT_ERROR,function(){self.fireEvent(BI.DynamicDateTrigger.EVENT_ERROR)}),this.editor.on(BI.SignEditor.EVENT_CONFIRM,function(){var value=self.editor.getValue();if(BI.isNotNull(value)&&self.editor.setState(value),BI.isNotEmptyString(value)&&!BI.isEqual(self.storeTriggerValue,self.getKey())){var formatStr=self._getStandardDateStr(value),date=formatStr.match(/\d+/g);self.storeValue={type:BI.DynamicDateCombo.Static,value:{year:0|date[0],month:0|date[1],day:0|date[2]}}}self.fireEvent(BI.DynamicDateTrigger.EVENT_CONFIRM)}),this.editor.on(BI.SignEditor.EVENT_SPACE,function(){self.editor.isValid()&&self.editor.blur()}),this.editor.on(BI.SignEditor.EVENT_START,function(){self.fireEvent(BI.DynamicDateTrigger.EVENT_START)}),this.editor.on(BI.SignEditor.EVENT_CHANGE,function(){self.fireEvent(BI.DynamicDateTrigger.EVENT_CHANGE)}),BI.createWidget({type:"bi.htape",element:this,items:[{el:this.editor},{el:BI.createWidget(),width:24}]}),!o.allowEdit&&BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.text",title:BI.bind(this._getTitle,this)},left:0,right:24,top:0,bottom:0}]}),this.setValue(o.value)},_getTitle:function(){var storeValue=this.storeValue||{},type=storeValue.type||BI.DynamicDateCombo.Static,value=storeValue.value;switch(type){case BI.DynamicDateCombo.Dynamic:var text=this._getText(value),date=BI.getDate();date=BI.DynamicDateHelper.getCalculation(value);var dateStr=BI.print(date,this._getFormatString());return BI.isEmptyString(text)?dateStr:text+":"+dateStr;case BI.DynamicDateCombo.Static:default:return BI.isNull(value)||BI.isNull(value.day)?"":BI.print(BI.getDate(value.year,value.month-1,value.day),this._getFormatString())}},_getStandardDateStr:function(v){var c=this._const,result=[0,1,2],formatArray=this._getFormatString().match(/%./g);BI.each(formatArray,function(idx,v){switch(v){case"%Y":case"%y":result[0]=idx;break;case"%X":case"%x":result[1]=idx;break;case"%d":case"%e":default:result[2]=idx}});var date=BI.parseDateTime(v,this._getFormatString());BI.print(date,this._getFormatString())===v&&(v=BI.print(date,c.compareFormat),result=[0,1,2]);var dateArray=v.match(/\d+/g),newArray=[];return BI.each(dateArray,function(idx){newArray[idx]=dateArray[result[idx]]}),newArray.length===result.length&&2===newArray[0].length?BI.print(BI.parseDateTime(newArray.join("-"),c.compareFormat),c.compareFormat):newArray.join("-")},_getFormatString:function(){return this.options.format||this._const.compareFormat},_dateCheck:function(date){return BI.print(BI.parseDateTime(date,"%Y-%x-%d"),"%Y-%x-%d")===date||BI.print(BI.parseDateTime(date,"%Y-%X-%d"),"%Y-%X-%d")===date||BI.print(BI.parseDateTime(date,"%Y-%x-%e"),"%Y-%x-%e")===date||BI.print(BI.parseDateTime(date,"%Y-%X-%e"),"%Y-%X-%e")===date},_checkVoid:function(obj){return!BI.checkDateVoid(obj.year,obj.month,obj.day,this.options.min,this.options.max)[0]},_autoAppend:function(v,dateObj){if(BI.isNotNull(dateObj)&&BI.checkDateLegal(v))switch(v.length){case this._const.yearLength:this._yearCheck(v)&&this.editor.setValue(v+"-");break;case this._const.yearMonthLength:case this._const.yearFullMonthLength:var splitMonth=v.split("-")[1];(BI.isNotNull(splitMonth)&&2===splitMonth.length||this._monthCheck(v))&&this.editor.setValue(v+"-")}},_yearCheck:function(v){var date=BI.print(BI.parseDateTime(v,this._getFormatString()),this._const.compareFormat);return BI.print(BI.parseDateTime(v,"%Y"),"%Y")===v&&date>=this.options.min&&date<=this.options.max},_monthCheck:function(v){var date=BI.parseDateTime(v,this._getFormatString()),dateStr=BI.print(date,this._const.compareFormat);return date.getMonth()>=0&&(BI.print(BI.parseDateTime(v,"%Y-%X"),"%Y-%X")===v||BI.print(BI.parseDateTime(v,"%Y-%x"),"%Y-%x")===v)&&dateStr>=this.options.min&&dateStr<=this.options.max},_setInnerValue:function(date){var dateStr=BI.print(date,this._getFormatString());this.editor.setState(dateStr),this.editor.setValue(dateStr)},_getText:function(obj){function getPositionText(baseText,position){switch(position){case BI.DynamicDateCard.OFFSET.BEGIN:return baseText+BI.i18nText("BI-Basic_Begin_Start");case BI.DynamicDateCard.OFFSET.END:return baseText+BI.i18nText("BI-Basic_End_Stop");case BI.DynamicDateCard.OFFSET.CURRENT:default:return BI.i18nText("BI-Basic_Current_Day")}}var value="",endText="";return BI.isNotNull(obj.year)&&(0!==BI.parseInt(obj.year)&&(value+=Math.abs(obj.year)+BI.i18nText("BI-Basic_Year")+(obj.year<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),endText=getPositionText(BI.i18nText("BI-Basic_Year"),obj.position)),BI.isNotNull(obj.quarter)&&(0!==BI.parseInt(obj.quarter)&&(value+=Math.abs(obj.quarter)+BI.i18nText("BI-Basic_Single_Quarter")+(obj.quarter<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),endText=getPositionText(BI.i18nText("BI-Basic_Single_Quarter"),obj.position)),BI.isNotNull(obj.month)&&(0!==BI.parseInt(obj.month)&&(value+=Math.abs(obj.month)+BI.i18nText("BI-Basic_Month")+(obj.month<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),endText=getPositionText(BI.i18nText("BI-Basic_Month"),obj.position)),BI.isNotNull(obj.week)&&(0!==BI.parseInt(obj.week)&&(value+=Math.abs(obj.week)+BI.i18nText("BI-Basic_Week")+(obj.week<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),endText=getPositionText(BI.i18nText("BI-Basic_Week"),obj.position)),BI.isNotNull(obj.day)&&(0!==BI.parseInt(obj.day)&&(value+=Math.abs(obj.day)+BI.i18nText("BI-Basic_Day")+(obj.day<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),endText=1===BI.size(obj)?getPositionText(BI.i18nText("BI-Basic_Month"),obj.position):""),BI.isNotNull(obj.workDay)&&0!==BI.parseInt(obj.workDay)&&(value+=Math.abs(obj.workDay)+BI.i18nText("BI-Basic_Work_Day")+(obj.workDay<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),value+endText},setValue:function(v){var type,value,self=this,date=BI.getDate();switch(this.storeValue=v,BI.isNotNull(v)&&(type=v.type||BI.DynamicDateCombo.Static,value=v.value||v),type){case BI.DynamicDateCombo.Dynamic:var text=this._getText(value);date=BI.DynamicDateHelper.getCalculation(value),this._setInnerValue(date,text);break;case BI.DynamicDateCombo.Static:default:if(BI.isNull(value)||BI.isNull(value.day))this.editor.setState(""),this.editor.setValue("");else{var dateStr=BI.print(BI.getDate(value.year,value.month-1,value.day),this._getFormatString());this.editor.setState(dateStr),this.editor.setValue(dateStr)}}},getKey:function(){return this.editor.getValue()},getValue:function(){return this.storeValue}}),BI.DynamicDateTrigger.EVENT_BLUR="EVENT_BLUR",BI.DynamicDateTrigger.EVENT_FOCUS="EVENT_FOCUS",BI.DynamicDateTrigger.EVENT_START="EVENT_START",BI.DynamicDateTrigger.EVENT_STOP="EVENT_STOP",BI.DynamicDateTrigger.EVENT_CONFIRM="EVENT_CONFIRM",BI.DynamicDateTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.DynamicDateTrigger.EVENT_VALID="EVENT_VALID",BI.DynamicDateTrigger.EVENT_ERROR="EVENT_ERROR",BI.DynamicDateTrigger.EVENT_TRIGGER_CLICK="EVENT_TRIGGER_CLICK",BI.DynamicDateTrigger.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.shortcut("bi.dynamic_date_trigger",BI.DynamicDateTrigger),BI.DynamicDateTimeCombo=BI.inherit(BI.Single,{constants:{popupHeight:259,popupWidth:270,comboAdjustHeight:1,border:1},props:{baseCls:"bi-dynamic-date-combo bi-border bi-focus-shadow bi-border-radius",height:22,minDate:"1900-01-01",maxDate:"2099-12-31",format:"",allowEdit:!0},render:function(){var self=this,opts=this.options;this.storeTriggerValue="";var date=BI.getDate();return this.storeValue=opts.value,{type:"bi.htape",items:[{el:{type:"bi.icon_button",cls:"bi-trigger-icon-button date-change-h-font",width:opts.height,height:opts.height,ref:function(){self.changeIcon=this}},width:opts.height},{type:"bi.absolute",items:[{el:{type:"bi.combo",container:opts.container,ref:function(){self.combo=this},toggle:!1,isNeedAdjustHeight:!1,isNeedAdjustWidth:!1,el:{type:"bi.dynamic_date_time_trigger",min:opts.minDate,max:opts.maxDate,allowEdit:opts.allowEdit,watermark:opts.watermark,format:opts.format,height:opts.height,value:opts.value,ref:function(){self.trigger=this},listeners:[{eventName:BI.DynamicDateTimeTrigger.EVENT_KEY_DOWN,action:function(){self.combo.isViewVisible()&&self.combo.hideView(),self.fireEvent(BI.DynamicDateTimeCombo.EVENT_KEY_DOWN,arguments)}},{eventName:BI.DynamicDateTimeTrigger.EVENT_STOP,action:function(){self.combo.isViewVisible()||self.combo.showView()}},{eventName:BI.DynamicDateTimeTrigger.EVENT_TRIGGER_CLICK,action:function(){self.combo.toggle()}},{eventName:BI.DynamicDateTimeTrigger.EVENT_FOCUS,action:function(){self.storeTriggerValue=self.trigger.getKey(),self.combo.isViewVisible()||self.combo.showView(),self.fireEvent(BI.DynamicDateTimeCombo.EVENT_FOCUS)}},{eventName:BI.DynamicDateTimeTrigger.EVENT_BLUR,action:function(){self.fireEvent(BI.DynamicDateTimeCombo.EVENT_BLUR)}},{eventName:BI.DynamicDateTimeTrigger.EVENT_ERROR,action:function(){self.storeValue={type:BI.DynamicDateTimeCombo.Static,value:{year:date.getFullYear(),month:date.getMonth()+1}},self.fireEvent(BI.DynamicDateTimeCombo.EVENT_ERROR)}},{eventName:BI.DynamicDateTimeTrigger.EVENT_VALID,action:function(){self.fireEvent(BI.DynamicDateTimeCombo.EVENT_VALID)}},{eventName:BI.DynamicDateTimeTrigger.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicDateTimeCombo.EVENT_CHANGE)}},{eventName:BI.DynamicDateTimeTrigger.EVENT_CONFIRM,action:function(){if(!self.combo.isViewVisible()){var dateStore=self.storeTriggerValue,dateObj=self.trigger.getKey();BI.isNotEmptyString(dateObj)&&!BI.isEqual(dateObj,dateStore)?(self.storeValue=self.trigger.getValue(),self.setValue(self.trigger.getValue())):BI.isEmptyString(dateObj)&&(self.storeValue=null,self.trigger.setValue()),self._checkDynamicValue(self.storeValue),self.fireEvent(BI.DynamicDateTimeCombo.EVENT_CONFIRM)}}}]},adjustLength:this.constants.comboAdjustHeight,popup:{el:{type:"bi.dynamic_date_time_popup",behaviors:opts.behaviors,min:opts.minDate,max:opts.maxDate,value:opts.value,ref:function(){self.popup=this},listeners:[{eventName:BI.DynamicDateTimePopup.BUTTON_CLEAR_EVENT_CHANGE,action:function(){self.setValue(),self.combo.hideView(),self.fireEvent(BI.DynamicDateTimeCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicDateTimePopup.BUTTON_lABEL_EVENT_CHANGE,action:function(){var date=BI.getDate();self.setValue({type:BI.DynamicDateTimeCombo.Static,value:{year:date.getFullYear(),month:date.getMonth()+1,day:date.getDate(),hour:0,minute:0,second:0}}),self.combo.hideView(),self.fireEvent(BI.DynamicDateTimeCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicDateTimePopup.BUTTON_OK_EVENT_CHANGE,action:function(){var value=self.popup.getValue();self._checkValue(value)&&self.setValue(value),self.combo.hideView(),self.fireEvent(BI.DynamicDateTimeCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicDateTimePopup.EVENT_CHANGE,action:function(){self.setValue(self.popup.getValue()),self.combo.hideView(),self.fireEvent(BI.DynamicDateTimeCombo.EVENT_CONFIRM)}}]},stopPropagation:!1},listeners:[{eventName:BI.Combo.EVENT_BEFORE_POPUPVIEW,action:function(){self.popup.setValue(self.storeValue),self.fireEvent(BI.DynamicDateTimeCombo.EVENT_BEFORE_POPUPVIEW)}}],hideChecker:function(e){return 0===self.triggerBtn.element.find(e.target).length}},top:0,left:0,right:0,bottom:0},{el:{type:"bi.icon_button",cls:"bi-trigger-icon-button date-font",width:opts.height,height:opts.height,listeners:[{eventName:BI.IconButton.EVENT_CHANGE,action:function(){self.combo.isViewVisible()||self.combo.showView()}}],ref:function(){self.triggerBtn=this}},top:0,right:0}]}],ref:function(_ref){self.comboWrapper=_ref}}},mounted:function(){this._checkDynamicValue(this.storeValue)},_checkDynamicValue:function(v){var o=this.options,type=null;switch(BI.isNotNull(v)&&(type=v.type),type){case BI.DynamicDateTimeCombo.Dynamic:this.changeIcon.setVisible(!0),this.comboWrapper.attr("items")[0].width=o.height,this.comboWrapper.resize();break;default:this.comboWrapper.attr("items")[0].width=0,this.comboWrapper.resize(),this.changeIcon.setVisible(!1)}},_checkValue:function(v){switch(v.type){ +case BI.DynamicDateCombo.Dynamic:return BI.isNotEmptyObject(v.value);case BI.DynamicDateCombo.Static:default:return!0}},setValue:function(v){this.storeValue=v,this.trigger.setValue(v),this._checkDynamicValue(v)},getValue:function(){return this.storeValue},getKey:function(){return this.trigger.getKey()},hidePopupView:function(){this.combo.hideView()},isValid:function(){return this.trigger.isValid()}}),BI.DynamicDateTimeCombo.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.DynamicDateTimeCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.DynamicDateTimeCombo.EVENT_FOCUS="EVENT_FOCUS",BI.DynamicDateTimeCombo.EVENT_BLUR="EVENT_BLUR",BI.DynamicDateTimeCombo.EVENT_CHANGE="EVENT_CHANGE",BI.DynamicDateTimeCombo.EVENT_VALID="EVENT_VALID",BI.DynamicDateTimeCombo.EVENT_ERROR="EVENT_ERROR",BI.DynamicDateTimeCombo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.dynamic_date_time_combo",BI.DynamicDateTimeCombo),BI.extend(BI.DynamicDateTimeCombo,{Static:1,Dynamic:2}),BI.DynamicDateTimePopup=BI.inherit(BI.Widget,{constants:{tabHeight:30,buttonHeight:24},props:{baseCls:"bi-dynamic-date-time-popup",width:248,height:385},_init:function(){BI.DynamicDateTimePopup.superclass._init.apply(this,arguments);var self=this,opts=this.options,c=this.constants;this.storeValue={type:BI.DynamicDateCombo.Static},BI.createWidget({element:this,type:"bi.vtape",items:[{el:this._getTabJson()},{el:{type:"bi.grid",items:[[{type:"bi.text_button",cls:"bi-high-light bi-split-top",textHeight:c.buttonHeight-1,shadow:!0,text:BI.i18nText("BI-Basic_Clear"),listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicDateTimePopup.BUTTON_CLEAR_EVENT_CHANGE)}}]},{type:"bi.text_button",cls:"bi-split-left bi-split-right bi-high-light bi-split-top",textHeight:c.buttonHeight-1,shadow:!0,text:BI.i18nText("BI-Multi_Date_Today"),ref:function(){self.textButton=this},listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicDateTimePopup.BUTTON_lABEL_EVENT_CHANGE)}}]},{type:"bi.text_button",cls:"bi-high-light bi-split-top",textHeight:c.buttonHeight-1,shadow:!0,text:BI.i18nText("BI-Basic_OK"),listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicDateTimePopup.BUTTON_OK_EVENT_CHANGE)}}]}]]},height:24}]}),this.setValue(opts.value)},_getTabJson:function(){var self=this,o=this.options;return{type:"bi.tab",ref:function(){self.dateTab=this},tab:{type:"bi.linear_segment",cls:"bi-split-bottom",height:this.constants.tabHeight,items:BI.createItems([{text:BI.i18nText("BI-Multi_Date_YMD"),value:BI.DynamicDateCombo.Static},{text:BI.i18nText("BI-Basic_Dynamic_Title"),value:BI.DynamicDateCombo.Dynamic}],{textAlign:"center"})},cardCreator:function(v){switch(v){case BI.DynamicDateCombo.Dynamic:return{type:"bi.dynamic_date_card",listeners:[{eventName:"EVENT_CHANGE",action:function(){self._setInnerValue(self.year,v)}}],ref:function(){self.dynamicPane=this}};case BI.DynamicDateCombo.Static:default:return{type:"bi.vtape",items:[{type:"bi.date_calendar_popup",behaviors:o.behaviors,min:self.options.min,max:self.options.max,ref:function(){self.ymd=this}},{el:{type:"bi.dynamic_date_time_select",cls:"bi-split-top",ref:function(){self.timeSelect=this}},height:40}]}}},listeners:[{eventName:BI.Tab.EVENT_CHANGE,action:function(){var v=self.dateTab.getSelect();switch(v){case BI.DynamicDateCombo.Static:var date=BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue());self.ymd.setValue({year:date.getFullYear(),month:date.getMonth()+1,day:date.getDate()}),self.timeSelect.setValue(),self._setInnerValue();break;case BI.DynamicDateCombo.Dynamic:default:self.storeValue&&self.storeValue.type===BI.DynamicDateCombo.Dynamic?self.dynamicPane.setValue(self.storeValue.value):self.dynamicPane.setValue({year:0}),self._setInnerValue()}}}]}},_setInnerValue:function(){if(this.dateTab.getSelect()===BI.DynamicDateCombo.Static)this.textButton.setValue(BI.i18nText("BI-Multi_Date_Today")),this.textButton.setEnable(!0);else{var date=BI.DynamicDateHelper.getCalculation(this.dynamicPane.getValue());date=BI.print(date,"%Y-%X-%d"),this.textButton.setValue(date),this.textButton.setEnable(!1)}},_checkValueValid:function(value){return BI.isNull(value)||BI.isEmptyObject(value)||BI.isEmptyString(value)},setValue:function(v){this.storeValue=v;var self=this,type,value;switch(v=v||{},type=v.type||BI.DynamicDateCombo.Static,value=v.value||v,this.dateTab.setSelect(type),type){case BI.DynamicDateCombo.Dynamic:this.dynamicPane.setValue(value),self._setInnerValue();break;case BI.DynamicDateCombo.Static:default:if(this._checkValueValid(value)){var date=BI.getDate();this.ymd.setValue({year:date.getFullYear(),month:date.getMonth()+1,day:date.getDate()}),this.timeSelect.setValue(),this.textButton.setValue(BI.i18nText("BI-Multi_Date_Today"))}else this.ymd.setValue(value),this.timeSelect.setValue({hour:value.hour,minute:value.minute,second:value.second}),this.textButton.setValue(BI.i18nText("BI-Multi_Date_Today"));this.textButton.setEnable(!0)}},getValue:function(){var type=this.dateTab.getSelect();return{type:type,value:type===BI.DynamicDateTimeCombo.Static?BI.extend(this.ymd.getValue(),this.timeSelect.getValue()):this.dynamicPane.getValue()}}}),BI.DynamicDateTimePopup.EVENT_CHANGE="EVENT_CHANGE",BI.DynamicDateTimePopup.BUTTON_OK_EVENT_CHANGE="BUTTON_OK_EVENT_CHANGE",BI.DynamicDateTimePopup.BUTTON_lABEL_EVENT_CHANGE="BUTTON_lABEL_EVENT_CHANGE",BI.DynamicDateTimePopup.BUTTON_CLEAR_EVENT_CHANGE="BUTTON_CLEAR_EVENT_CHANGE",BI.shortcut("bi.dynamic_date_time_popup",BI.DynamicDateTimePopup),BI.DynamicDateTimeSelect=BI.inherit(BI.Widget,{props:{baseCls:"bi-date-time-select"},render:function(){var self=this;return{type:"bi.center_adapt",items:[{type:"bi.vertical_adapt",items:[{el:{type:"bi.number_editor",ref:function(){self.hour=this},validationChecker:function(v){return BI.isNaturalNumber(v)&&BI.parseInt(v)<24},errorText:function(v){return BI.isNumeric(v)?BI.i18nText("BI-Basic_Input_From_To_Number",'"00-23"'):BI.i18nText("BI-Numerical_Interval_Input_Data")},listeners:[{eventName:BI.SignEditor.EVENT_CONFIRM,action:function(){var value=this.getValue();self._checkHour(value),this.setValue(self._formatValueToDoubleDigit(value)),self.fireEvent(BI.DynamicDateTimeSelect.EVENT_CONFIRM)}},{eventName:BI.SignEditor.EVENT_CHANGE,action:function(){var value=self._autoSwitch(this.getValue(),BI.DynamicDateTimeSelect.HOUR);this.setValue(value)}}],width:60,height:24}},{type:"bi.label",text:":",width:20},{type:"bi.number_editor",ref:function(){self.minute=this},validationChecker:function(v){return BI.isNaturalNumber(v)&&BI.parseInt(v)<60},errorText:function(v){return BI.isNumeric(v)?BI.i18nText("BI-Basic_Input_From_To_Number",'"00-59"'):BI.i18nText("BI-Numerical_Interval_Input_Data")},listeners:[{eventName:BI.SignEditor.EVENT_CONFIRM,action:function(){var value=this.getValue();self._checkMinute(value),this.setValue(self._formatValueToDoubleDigit(value),BI.DynamicDateTimeSelect.MINUTE),self.fireEvent(BI.DynamicDateTimeSelect.EVENT_CONFIRM)}},{eventName:BI.SignEditor.EVENT_CHANGE,action:function(){var value=self._autoSwitch(this.getValue(),BI.DynamicDateTimeSelect.MINUTE);this.setValue(value)}}],width:60,height:24},{type:"bi.label",text:":",width:20},{type:"bi.number_editor",ref:function(){self.second=this},validationChecker:function(v){return BI.isNaturalNumber(v)&&BI.parseInt(v)<60},errorText:function(v){return BI.isNumeric(v)?BI.i18nText("BI-Basic_Input_From_To_Number",'"00-59"'):BI.i18nText("BI-Numerical_Interval_Input_Data")},listeners:[{eventName:BI.SignEditor.EVENT_CONFIRM,action:function(){var value=this.getValue();self._checkSecond(value),this.setValue(self._formatValueToDoubleDigit(value)),self.fireEvent(BI.DynamicDateTimeSelect.EVENT_CONFIRM)}}],width:60,height:24}]}]}},_checkBorder:function(v){v=v||{},this._checkHour(v.hour),this._checkMinute(v.minute),this._checkSecond(v.second)},_checkHour:function(value){this.hour.setDownEnable(BI.parseInt(value)>0),this.hour.setUpEnable(BI.parseInt(value)<23)},_checkMinute:function(value){this.minute.setDownEnable(BI.parseInt(value)>0),this.minute.setUpEnable(BI.parseInt(value)<59)},_checkSecond:function(value){this.second.setDownEnable(BI.parseInt(value)>0),this.second.setUpEnable(BI.parseInt(value)<59)},_autoSwitch:function(v,type){var limit=0,value=v+"";switch(type){case BI.DynamicDateTimeSelect.HOUR:limit=2;break;case BI.DynamicDateTimeSelect.MINUTE:limit=5}if(1===value.length&&BI.parseInt(value)>limit&&(value="0"+value),2===value.length)switch(type){case BI.DynamicDateTimeSelect.HOUR:this.hour.isEditing()&&this.minute.focus();break;case BI.DynamicDateTimeSelect.MINUTE:this.minute.isEditing()&&this.second.focus();break;case BI.DynamicDateTimeSelect.SECOND:}return value},_formatValueToDoubleDigit:function(v){(BI.isNull(v)||BI.isEmptyString(v))&&(v=0);var value=BI.parseInt(v);return value<10&&(value="0"+value),value},_assertValue:function(v){return v=v||{},v.hour=this._formatValueToDoubleDigit(v.hour)||"00",v.minute=this._formatValueToDoubleDigit(v.minute)||"00",v.second=this._formatValueToDoubleDigit(v.second)||"00",v},getValue:function(){return{hour:BI.parseInt(this.hour.getValue()),minute:BI.parseInt(this.minute.getValue()),second:BI.parseInt(this.second.getValue())}},setValue:function(v){v=this._assertValue(v),this.hour.setValue(v.hour),this.minute.setValue(v.minute),this.second.setValue(v.second),this._checkBorder(v)}}),BI.DynamicDateTimeSelect.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.dynamic_date_time_select",BI.DynamicDateTimeSelect),BI.extend(BI.DynamicDateTimeSelect,{HOUR:1,MINUTE:2,SECOND:3}),BI.DynamicDateTimeTrigger=BI.inherit(BI.Trigger,{_const:{hgap:4,vgap:2,yearLength:4,yearMonthLength:6,yearFullMonthLength:7,compareFormat:"%Y-%X-%d %H:%M:%S"},props:{extraCls:"bi-date-time-trigger",min:"1900-01-01",max:"2099-12-31",height:24,format:"",allowEdit:!0,watermark:""},_init:function(){BI.DynamicDateTimeTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options,c=this._const;this.storeTriggerValue="",this.editor=BI.createWidget({type:"bi.sign_editor",height:o.height,validationChecker:function(v){var formatStr=self._getStandardDateStr(v),date=formatStr.match(/\d+/g);return!BI.isKey(o.format)&&self._autoAppend(v,date),self._dateCheck(formatStr)&&BI.checkDateLegal(formatStr)&&self._checkVoid({year:0|date[0],month:0|date[1],day:0|date[2]})},quitChecker:function(){return!1},hgap:c.hgap,vgap:c.vgap,allowBlank:!0,watermark:BI.isKey(o.watermark)?o.watermark:BI.i18nText("BI-Basic_Unrestricted"),errorText:function(){var str="";return BI.isKey(o.format)||(str=self.editor.isEditing()?BI.i18nText("BI-Basic_Date_Time_Error_Text"):BI.i18nText("BI-Year_Trigger_Invalid_Text")),str},title:BI.bind(this._getTitle,this)}),this.editor.on(BI.SignEditor.EVENT_KEY_DOWN,function(){self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_KEY_DOWN,arguments)}),this.editor.on(BI.SignEditor.EVENT_FOCUS,function(){self.storeTriggerValue=self.getKey(),self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_FOCUS)}),this.editor.on(BI.SignEditor.EVENT_BLUR,function(){self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_BLUR)}),this.editor.on(BI.SignEditor.EVENT_STOP,function(){self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_STOP)}),this.editor.on(BI.SignEditor.EVENT_VALID,function(){self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_VALID)}),this.editor.on(BI.SignEditor.EVENT_ERROR,function(){self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_ERROR)}),this.editor.on(BI.SignEditor.EVENT_CONFIRM,function(){var value=self.editor.getValue();if(BI.isNotNull(value)&&self.editor.setState(value),BI.isNotEmptyString(value)&&!BI.isEqual(self.storeTriggerValue,self.getKey())){var formatStr=self._getStandardDateStr(value),date=formatStr.match(/\d+/g);self.storeValue={type:BI.DynamicDateCombo.Static,value:{year:0|date[0],month:0|date[1],day:0|date[2],hour:0|date[3],minute:0|date[4],second:0|date[5]}}}self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_CONFIRM)}),this.editor.on(BI.SignEditor.EVENT_START,function(){self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_START)}),this.editor.on(BI.SignEditor.EVENT_CHANGE,function(){self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_CHANGE)}),BI.createWidget({type:"bi.htape",element:this,items:[{el:this.editor},{el:BI.createWidget(),width:24}]}),!o.allowEdit&&BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.text",title:BI.bind(this._getTitle,this)},left:0,right:24,top:0,bottom:0}]}),this.setValue(o.value)},_getTitle:function(){var storeValue=this.storeValue||{},type=storeValue.type||BI.DynamicDateCombo.Static,value=storeValue.value;switch(type){case BI.DynamicDateCombo.Dynamic:var text=this._getText(value),date=BI.DynamicDateHelper.getCalculation(value),dateStr=BI.print(date,this._getFormatString());return BI.isEmptyString(text)?dateStr:text+":"+dateStr;case BI.DynamicDateCombo.Static:default:return BI.isNull(value)||BI.isNull(value.day)?"":BI.print(BI.getDate(value.year,value.month-1,value.day,value.hour||0,value.minute||0,value.second||0),this._getFormatString())}},_getStandardDateStr:function(v){var c=this._const,result=[],hasSecond=!1,formatArray=this._getFormatString().match(/%./g);BI.each(formatArray,function(idx,v){switch(v){case"%Y":case"%y":result[0]=idx;break;case"%X":case"%x":result[1]=idx;break;case"%d":case"%e":result[2]=idx;break;case"%S":hasSecond=!0}});var date=BI.parseDateTime(v,this._getFormatString());BI.print(date,this._getFormatString())===v&&(v=BI.print(date,c.compareFormat),result=[0,1,2]);var dateArray=v.match(/\d+/g)||[],newArray=[];BI.each(dateArray.slice(0,3),function(idx){newArray[idx]=dateArray[result[idx]]});var suffixArray=dateArray.slice(3);BI.each(suffixArray,function(idx,v){BI.isNumeric(v)&&1===v.length&&(suffixArray[idx]="0"+v)}),2!==suffixArray.length||hasSecond||suffixArray.push("00");var suffixString=suffixArray.join(":"),dateString=newArray.slice(0,3).join("-");return BI.isNotEmptyString(suffixString)&&(dateString+=" "+suffixString),dateString},_getFormatString:function(){return this.options.format||this._const.compareFormat},_dateCheck:function(date){return BI.print(BI.parseDateTime(date,"%Y-%x-%d %H:%M:%S"),"%Y-%x-%d %H:%M:%S")===date||BI.print(BI.parseDateTime(date,"%Y-%X-%d %H:%M:%S"),"%Y-%X-%d %H:%M:%S")===date||BI.print(BI.parseDateTime(date,"%Y-%x-%e %H:%M:%S"),"%Y-%x-%e %H:%M:%S")===date||BI.print(BI.parseDateTime(date,"%Y-%X-%e %H:%M:%S"),"%Y-%X-%e %H:%M:%S")===date||BI.print(BI.parseDateTime(date,"%Y-%x-%d"),"%Y-%x-%d")===date||BI.print(BI.parseDateTime(date,"%Y-%X-%d"),"%Y-%X-%d")===date||BI.print(BI.parseDateTime(date,"%Y-%x-%e"),"%Y-%x-%e")===date||BI.print(BI.parseDateTime(date,"%Y-%X-%e"),"%Y-%X-%e")===date},_checkVoid:function(obj){return!BI.checkDateVoid(obj.year,obj.month,obj.day,this.options.min,this.options.max)[0]},_autoAppend:function(v,dateObj){if(BI.isNotNull(dateObj)&&BI.checkDateLegal(v))switch(v.length){case this._const.yearLength:this._yearCheck(v)&&this.editor.setValue(v+"-");break;case this._const.yearMonthLength:case this._const.yearFullMonthLength:var splitMonth=v.split("-")[1];(BI.isNotNull(splitMonth)&&2===splitMonth.length||this._monthCheck(v))&&this.editor.setValue(v+"-")}},_yearCheck:function(v){var date=BI.print(BI.parseDateTime(v,"%Y-%X-%d"),"%Y-%X-%d");return BI.print(BI.parseDateTime(v,"%Y"),"%Y")===v&&date>=this.options.min&&date<=this.options.max},_monthCheck:function(v){var date=BI.parseDateTime(v,"%Y-%X-%d"),dateStr=BI.print(date,"%Y-%X-%d");return date.getMonth()>0&&(BI.print(BI.parseDateTime(v,"%Y-%X"),"%Y-%X")===v||BI.print(BI.parseDateTime(v,"%Y-%x"),"%Y-%x")===v)&&dateStr>=this.options.min&&dateStr<=this.options.max},_setInnerValue:function(date){var dateStr=BI.print(date,this._getFormatString());this.editor.setState(dateStr),this.editor.setValue(dateStr)},_getText:function(obj){function getPositionText(baseText,position){switch(position){case BI.DynamicDateCard.OFFSET.BEGIN:return baseText+BI.i18nText("BI-Basic_Begin_Start");case BI.DynamicDateCard.OFFSET.END:return baseText+BI.i18nText("BI-Basic_End_Stop");case BI.DynamicDateCard.OFFSET.CURRENT:default:return BI.i18nText("BI-Basic_Current_Day")}}var value="",endText="";return BI.isNotNull(obj.year)&&(0!==BI.parseInt(obj.year)&&(value+=Math.abs(obj.year)+BI.i18nText("BI-Basic_Year")+(obj.year<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),endText=getPositionText(BI.i18nText("BI-Basic_Year"),obj.position)),BI.isNotNull(obj.quarter)&&(0!==BI.parseInt(obj.quarter)&&(value+=Math.abs(obj.quarter)+BI.i18nText("BI-Basic_Single_Quarter")+(obj.quarter<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),endText=getPositionText(BI.i18nText("BI-Basic_Single_Quarter"),obj.position)),BI.isNotNull(obj.month)&&(0!==BI.parseInt(obj.month)&&(value+=Math.abs(obj.month)+BI.i18nText("BI-Basic_Month")+(obj.month<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),endText=getPositionText(BI.i18nText("BI-Basic_Month"),obj.position)),BI.isNotNull(obj.week)&&(0!==BI.parseInt(obj.week)&&(value+=Math.abs(obj.week)+BI.i18nText("BI-Basic_Week")+(obj.week<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),endText=getPositionText(BI.i18nText("BI-Basic_Week"),obj.position)),BI.isNotNull(obj.day)&&(0!==BI.parseInt(obj.day)&&(value+=Math.abs(obj.day)+BI.i18nText("BI-Basic_Day")+(obj.day<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),endText=1===BI.size(obj)?getPositionText(BI.i18nText("BI-Basic_Month"),obj.position):""),BI.isNotNull(obj.workDay)&&0!==BI.parseInt(obj.workDay)&&(value+=Math.abs(obj.workDay)+BI.i18nText("BI-Basic_Work_Day")+(obj.workDay<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),value+endText},setValue:function(v){var type,value,self=this,date=BI.getDate();switch(this.storeValue=v,BI.isNotNull(v)&&(type=v.type||BI.DynamicDateCombo.Static,value=v.value||v),type){case BI.DynamicDateCombo.Dynamic:var text=this._getText(value);date=BI.DynamicDateHelper.getCalculation(value),this._setInnerValue(date,text);break;case BI.DynamicDateCombo.Static:default:if(BI.isNull(value)||BI.isNull(value.day))this.editor.setState(""),this.editor.setValue("");else{var dateStr=BI.print(BI.getDate(value.year,value.month-1,value.day,value.hour||0,value.minute||0,value.second||0),this._getFormatString());this.editor.setState(dateStr),this.editor.setValue(dateStr)}}},getKey:function(){return this.editor.getValue()},getValue:function(){return this.storeValue},isValid:function(){return this.editor.isValid()}}),BI.DynamicDateTimeTrigger.EVENT_BLUR="EVENT_BLUR",BI.DynamicDateTimeTrigger.EVENT_FOCUS="EVENT_FOCUS",BI.DynamicDateTimeTrigger.EVENT_START="EVENT_START",BI.DynamicDateTimeTrigger.EVENT_STOP="EVENT_STOP",BI.DynamicDateTimeTrigger.EVENT_CONFIRM="EVENT_CONFIRM",BI.DynamicDateTimeTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.DynamicDateTimeTrigger.EVENT_VALID="EVENT_VALID",BI.DynamicDateTimeTrigger.EVENT_ERROR="EVENT_ERROR",BI.DynamicDateTimeTrigger.EVENT_TRIGGER_CLICK="EVENT_TRIGGER_CLICK",BI.DynamicDateTimeTrigger.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.shortcut("bi.dynamic_date_time_trigger",BI.DynamicDateTimeTrigger),BI.SearchEditor=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.SearchEditor.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-search-editor bi-border bi-focus-shadow",height:24,errorText:"",watermark:BI.i18nText("BI-Basic_Search"),validationChecker:BI.emptyFn,quitChecker:BI.emptyFn})},_init:function(){this.options.height-=2,BI.SearchEditor.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget({type:"bi.editor",height:o.height,watermark:o.watermark,allowBlank:!0,hgap:1,errorText:o.errorText,validationChecker:o.validationChecker,quitChecker:o.quitChecker,value:o.value}),this.clear=BI.createWidget({type:"bi.icon_button",stopEvent:!0,cls:"close-font"}),this.clear.on(BI.IconButton.EVENT_CHANGE,function(){self.setValue(""),self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.STOPEDIT),self.fireEvent(BI.SearchEditor.EVENT_CHANGE),self.fireEvent(BI.SearchEditor.EVENT_CLEAR)}),BI.createWidget({element:this,type:"bi.htape",items:[{el:{type:"bi.icon_label",cls:"search-font"},width:24},{el:self.editor},{el:this.clear,width:24}]}),this.editor.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editor.on(BI.Editor.EVENT_FOCUS,function(){self.fireEvent(BI.SearchEditor.EVENT_FOCUS)}),this.editor.on(BI.Editor.EVENT_BLUR,function(){self.fireEvent(BI.SearchEditor.EVENT_BLUR)}),this.editor.on(BI.Editor.EVENT_CLICK,function(){self.fireEvent(BI.SearchEditor.EVENT_CLICK)}),this.editor.on(BI.Editor.EVENT_CHANGE,function(){self._checkClear(),self.fireEvent(BI.SearchEditor.EVENT_CHANGE)}),this.editor.on(BI.Editor.EVENT_KEY_DOWN,function(v){self.fireEvent(BI.SearchEditor.EVENT_KEY_DOWN,v)}),this.editor.on(BI.Editor.EVENT_SPACE,function(){self.fireEvent(BI.SearchEditor.EVENT_SPACE)}),this.editor.on(BI.Editor.EVENT_BACKSPACE,function(){self.fireEvent(BI.SearchEditor.EVENT_BACKSPACE)}),this.editor.on(BI.Editor.EVENT_VALID,function(){self.fireEvent(BI.SearchEditor.EVENT_VALID)}),this.editor.on(BI.Editor.EVENT_ERROR,function(){self.fireEvent(BI.SearchEditor.EVENT_ERROR)}),this.editor.on(BI.Editor.EVENT_ENTER,function(){self.fireEvent(BI.SearchEditor.EVENT_ENTER)}),this.editor.on(BI.Editor.EVENT_RESTRICT,function(){self.fireEvent(BI.SearchEditor.EVENT_RESTRICT)}),this.editor.on(BI.Editor.EVENT_EMPTY,function(){self._checkClear(),self.fireEvent(BI.SearchEditor.EVENT_EMPTY)}),this.editor.on(BI.Editor.EVENT_REMOVE,function(){self.fireEvent(BI.SearchEditor.EVENT_REMOVE)}),this.editor.on(BI.Editor.EVENT_CONFIRM,function(){self.fireEvent(BI.SearchEditor.EVENT_CONFIRM)}),this.editor.on(BI.Editor.EVENT_CHANGE_CONFIRM,function(){self.fireEvent(BI.SearchEditor.EVENT_CHANGE_CONFIRM)}),this.editor.on(BI.Editor.EVENT_START,function(){self.fireEvent(BI.SearchEditor.EVENT_START)}),this.editor.on(BI.Editor.EVENT_PAUSE,function(){self.fireEvent(BI.SearchEditor.EVENT_PAUSE)}),this.editor.on(BI.Editor.EVENT_STOP,function(){self.fireEvent(BI.SearchEditor.EVENT_STOP)}),this.clear.invisible()},_checkClear:function(){this.getValue()?this.clear.visible():this.clear.invisible()},setWaterMark:function(v){this.options.watermark=v,this.editor.setWaterMark(v)},focus:function(){this.editor.focus()},blur:function(){this.editor.blur()},getValue:function(){if(this.isValid()){var res=this.editor.getValue().match(/[\S]+/g);return BI.isNull(res)?"":res[res.length-1]}},getKeywords:function(){var val=this.editor.getLastChangedValue(),keywords=val.match(/[\S]+/g);return BI.isEndWithBlank(val)?keywords.concat([" "]):keywords},getLastValidValue:function(){return this.editor.getLastValidValue()},getLastChangedValue:function(){return this.editor.getLastChangedValue()},setValue:function(v){this.editor.setValue(v),BI.isKey(v)&&this.clear.visible()},isEditing:function(){return this.editor.isEditing()},isValid:function(){return this.editor.isValid()}}),BI.SearchEditor.EVENT_CHANGE="EVENT_CHANGE",BI.SearchEditor.EVENT_FOCUS="EVENT_FOCUS",BI.SearchEditor.EVENT_BLUR="EVENT_BLUR",BI.SearchEditor.EVENT_CLICK="EVENT_CLICK",BI.SearchEditor.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.SearchEditor.EVENT_SPACE="EVENT_SPACE",BI.SearchEditor.EVENT_BACKSPACE="EVENT_BACKSPACE",BI.SearchEditor.EVENT_CLEAR="EVENT_CLEAR",BI.SearchEditor.EVENT_START="EVENT_START",BI.SearchEditor.EVENT_PAUSE="EVENT_PAUSE",BI.SearchEditor.EVENT_STOP="EVENT_STOP",BI.SearchEditor.EVENT_CONFIRM="EVENT_CONFIRM",BI.SearchEditor.EVENT_CHANGE_CONFIRM="EVENT_CHANGE_CONFIRM",BI.SearchEditor.EVENT_VALID="EVENT_VALID",BI.SearchEditor.EVENT_ERROR="EVENT_ERROR",BI.SearchEditor.EVENT_ENTER="EVENT_ENTER",BI.SearchEditor.EVENT_RESTRICT="EVENT_RESTRICT",BI.SearchEditor.EVENT_REMOVE="EVENT_REMOVE",BI.SearchEditor.EVENT_EMPTY="EVENT_EMPTY",BI.shortcut("bi.search_editor",BI.SearchEditor),BI.SmallSearchEditor=BI.inherit(BI.SearchEditor,{_defaultConfig:function(){var conf=BI.SmallSearchEditor.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-small-search-editor",height:20})},_init:function(){BI.SmallSearchEditor.superclass._init.apply(this,arguments)}}),BI.shortcut("bi.small_search_editor",BI.SmallSearchEditor),BI.TextEditor=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.TextEditor.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-text-editor bi-border bi-focus-shadow",hgap:4,vgap:2,lgap:0,rgap:0,tgap:0,bgap:0,validationChecker:BI.emptyFn,quitChecker:BI.emptyFn,allowBlank:!1,watermark:"",errorText:"",height:24})},_init:function(){BI.TextEditor.superclass._init.apply(this,arguments);var self=this,o=this.options;BI.isNumber(o.height)&&this.element.css({height:o.height-2}),BI.isNumber(o.width)&&this.element.css({width:o.width-2}),this.editor=BI.createWidget({type:"bi.editor",height:o.height-2,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,value:o.value,title:o.title,tipType:o.tipType,validationChecker:o.validationChecker,quitChecker:o.quitChecker,allowBlank:o.allowBlank,watermark:o.watermark,errorText:o.errorText}),this.editor.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editor.on(BI.Editor.EVENT_FOCUS,function(){self.fireEvent(BI.TextEditor.EVENT_FOCUS)}),this.editor.on(BI.Editor.EVENT_BLUR,function(){self.fireEvent(BI.TextEditor.EVENT_BLUR)}),this.editor.on(BI.Editor.EVENT_CLICK,function(){self.fireEvent(BI.TextEditor.EVENT_CLICK)}),this.editor.on(BI.Editor.EVENT_CHANGE,function(){self.fireEvent(BI.TextEditor.EVENT_CHANGE)}),this.editor.on(BI.Editor.EVENT_KEY_DOWN,function(v){self.fireEvent(BI.TextEditor.EVENT_KEY_DOWN)}),this.editor.on(BI.Editor.EVENT_SPACE,function(v){self.fireEvent(BI.TextEditor.EVENT_SPACE)}),this.editor.on(BI.Editor.EVENT_BACKSPACE,function(v){self.fireEvent(BI.TextEditor.EVENT_BACKSPACE)}),this.editor.on(BI.Editor.EVENT_VALID,function(){self.fireEvent(BI.TextEditor.EVENT_VALID)}),this.editor.on(BI.Editor.EVENT_CONFIRM,function(){self.fireEvent(BI.TextEditor.EVENT_CONFIRM)}),this.editor.on(BI.Editor.EVENT_CHANGE_CONFIRM,function(){self.fireEvent(BI.TextEditor.EVENT_CHANGE_CONFIRM)}),this.editor.on(BI.Editor.EVENT_REMOVE,function(v){self.fireEvent(BI.TextEditor.EVENT_REMOVE)}),this.editor.on(BI.Editor.EVENT_START,function(){self.fireEvent(BI.TextEditor.EVENT_START)}),this.editor.on(BI.Editor.EVENT_PAUSE,function(){self.fireEvent(BI.TextEditor.EVENT_PAUSE)}),this.editor.on(BI.Editor.EVENT_STOP,function(){self.fireEvent(BI.TextEditor.EVENT_STOP)}),this.editor.on(BI.Editor.EVENT_ERROR,function(){self.fireEvent(BI.TextEditor.EVENT_ERROR,arguments)}),this.editor.on(BI.Editor.EVENT_ENTER,function(){self.fireEvent(BI.TextEditor.EVENT_ENTER)}),this.editor.on(BI.Editor.EVENT_RESTRICT,function(){self.fireEvent(BI.TextEditor.EVENT_RESTRICT)}),this.editor.on(BI.Editor.EVENT_EMPTY,function(){self.fireEvent(BI.TextEditor.EVENT_EMPTY)}),BI.createWidget({type:"bi.vertical",scrolly:!1,element:this,items:[this.editor]})},setWaterMark:function(v){this.options.watermark=v,this.editor.setWaterMark(v)},focus:function(){this.editor.focus()},blur:function(){this.editor.blur()},setErrorText:function(text){this.editor.setErrorText(text)},getErrorText:function(){return this.editor.getErrorText()},isValid:function(){return this.editor.isValid()},setValue:function(v){this.editor.setValue(v)},getValue:function(){return this.editor.getValue()}}),BI.TextEditor.EVENT_CHANGE="EVENT_CHANGE",BI.TextEditor.EVENT_FOCUS="EVENT_FOCUS",BI.TextEditor.EVENT_BLUR="EVENT_BLUR",BI.TextEditor.EVENT_CLICK="EVENT_CLICK",BI.TextEditor.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.TextEditor.EVENT_SPACE="EVENT_SPACE",BI.TextEditor.EVENT_BACKSPACE="EVENT_BACKSPACE",BI.TextEditor.EVENT_START="EVENT_START",BI.TextEditor.EVENT_PAUSE="EVENT_PAUSE",BI.TextEditor.EVENT_STOP="EVENT_STOP",BI.TextEditor.EVENT_CONFIRM="EVENT_CONFIRM",BI.TextEditor.EVENT_CHANGE_CONFIRM="EVENT_CHANGE_CONFIRM",BI.TextEditor.EVENT_VALID="EVENT_VALID",BI.TextEditor.EVENT_ERROR="EVENT_ERROR",BI.TextEditor.EVENT_ENTER="EVENT_ENTER",BI.TextEditor.EVENT_RESTRICT="EVENT_RESTRICT",BI.TextEditor.EVENT_REMOVE="EVENT_REMOVE",BI.TextEditor.EVENT_EMPTY="EVENT_EMPTY",BI.shortcut("bi.text_editor",BI.TextEditor),BI.SmallTextEditor=BI.inherit(BI.TextEditor,{_defaultConfig:function(){var conf=BI.SmallTextEditor.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-small-text-editor",height:20})},_init:function(){BI.SmallTextEditor.superclass._init.apply(this,arguments)}}),BI.shortcut("bi.small_text_editor",BI.SmallTextEditor),BI.IntervalSlider=BI.inherit(BI.Single,{_constant:{EDITOR_WIDTH:58,EDITOR_R_GAP:60,EDITOR_HEIGHT:30,SLIDER_WIDTH_HALF:15,SLIDER_WIDTH:30,SLIDER_HEIGHT:30,TRACK_HEIGHT:24},props:{baseCls:"bi-interval-slider bi-slider-track",digit:!1,unit:""},render:function(){var self=this,c=this._constant;return this.enable=!1,this.valueOne="",this.valueTwo="",this.calculation=new BI.AccurateCalculationModel,this.grayTrack=BI.createWidget({type:"bi.layout",cls:"gray-track",height:6}),this.blueTrack=BI.createWidget({type:"bi.layout",cls:"blue-track bi-high-light-background",height:6}),this.track=this._createTrackWrapper(),this.labelOne=BI.createWidget({type:"bi.sign_text_editor",cls:"slider-editor-button",text:this.options.unit,allowBlank:!1,width:c.EDITOR_WIDTH,validationChecker:function(v){return self._checkValidation(v)}}),this.labelOne.element.hover(function(){self.labelOne.element.removeClass("bi-border").addClass("bi-border")},function(){self.labelOne.element.removeClass("bi-border")}),this.labelOne.on(BI.Editor.EVENT_CONFIRM,function(){var oldValueOne=self.valueOne,v=BI.parseFloat(this.getValue());self.valueOne=v;var percent=self._getPercentByValue(v),significantPercent=BI.parseFloat(percent.toFixed(1));self._setSliderOnePosition(significantPercent),self._setBlueTrack(),self._checkLabelPosition(oldValueOne,self.valueTwo,self.valueOne,self.valueTwo),self.fireEvent(BI.IntervalSlider.EVENT_CHANGE)}),this.labelTwo=BI.createWidget({type:"bi.sign_text_editor",cls:"slider-editor-button",text:this.options.unit,allowBlank:!1,width:c.EDITOR_WIDTH,validationChecker:function(v){return self._checkValidation(v)}}),this.labelTwo.element.hover(function(){self.labelTwo.element.removeClass("bi-border").addClass("bi-border")},function(){self.labelTwo.element.removeClass("bi-border")}),this.labelTwo.on(BI.Editor.EVENT_CONFIRM,function(){var oldValueTwo=self.valueTwo,v=BI.parseFloat(this.getValue());self.valueTwo=v;var percent=self._getPercentByValue(v),significantPercent=BI.parseFloat(percent.toFixed(1));self._setSliderTwoPosition(significantPercent),self._setBlueTrack(),self._checkLabelPosition(self.valueOne,oldValueTwo,self.valueOne,self.valueTwo),self.fireEvent(BI.IntervalSlider.EVENT_CHANGE)}),this.sliderOne=BI.createWidget({type:"bi.single_slider_button"}),this.sliderTwo=BI.createWidget({type:"bi.single_slider_button"}),this._draggable(this.sliderOne,!0),this._draggable(this.sliderTwo,!1),this._setVisible(!1),{type:"bi.absolute",element:this,items:[{el:{type:"bi.vertical",items:[{type:"bi.absolute",items:[{el:this.track,width:"100%",height:c.TRACK_HEIGHT}]}],hgap:7,height:c.TRACK_HEIGHT},top:23,left:0,width:"100%"},this._createLabelWrapper(),this._createSliderWrapper()]}},_rePosBySizeAfterMove:function(size,isLeft){var o=this.options,percent=100*size/this._getGrayTrackLength(),significantPercent=BI.parseFloat(percent.toFixed(1)),v=this._getValueByPercent(significantPercent);v=this._assertValue(v),v=o.digit===!1?v:v.toFixed(o.digit);var oldValueOne=this.valueOne,oldValueTwo=this.valueTwo;isLeft?(this._setSliderOnePosition(significantPercent),this.labelOne.setValue(v),this.valueOne=v,this._checkLabelPosition(oldValueOne,oldValueTwo,v,this.valueTwo)):(this._setSliderTwoPosition(significantPercent),this.labelTwo.setValue(v),this.valueTwo=v,this._checkLabelPosition(oldValueOne,oldValueTwo,this.valueOne,v)),this._setBlueTrack()},_rePosBySizeAfterStop:function(size,isLeft){var percent=100*size/this._getGrayTrackLength(),significantPercent=BI.parseFloat(percent.toFixed(1)); +isLeft?this._setSliderOnePosition(significantPercent):this._setSliderTwoPosition(significantPercent)},_draggable:function(widget,isLeft){function optimizeSize(s){return BI.clamp(s,0,self._getGrayTrackLength())}var self=this,o=this.options,startDrag=!1,size=0,offset=0,defaultSize=0,mouseMoveTracker=new BI.MouseMoveTracker(function(deltaX){mouseMoveTracker.isDragging()&&(startDrag=!0,offset+=deltaX,size=optimizeSize(defaultSize+offset),widget.element.addClass("dragging"),self._rePosBySizeAfterMove(size,isLeft))},function(){startDrag===!0&&(size=optimizeSize(size),self._rePosBySizeAfterStop(size,isLeft),size=0,offset=0,defaultSize=size,startDrag=!1),widget.element.removeClass("dragging"),mouseMoveTracker.releaseMouseMoves(),self.fireEvent(BI.IntervalSlider.EVENT_CHANGE)},window);widget.element.on("mousedown",function(event){widget.isEnabled()&&(defaultSize=this.offsetLeft,optimizeSize(defaultSize),mouseMoveTracker.captureMouseMoves(event))})},_createLabelWrapper:function(){var c=this._constant;return{el:{type:"bi.vertical",items:[{type:"bi.absolute",items:[{el:this.labelOne,top:0,left:"0%"}]},{type:"bi.absolute",items:[{el:this.labelTwo,top:0,left:"100%"}]}],rgap:c.EDITOR_R_GAP,height:c.SLIDER_HEIGHT},top:0,left:0,width:"100%"}},_createSliderWrapper:function(){var c=this._constant;return{el:{type:"bi.vertical",items:[{type:"bi.absolute",items:[{el:this.sliderOne,top:0,left:"0%"}]},{type:"bi.absolute",items:[{el:this.sliderTwo,top:0,left:"100%"}]}],hgap:c.SLIDER_WIDTH_HALF,height:c.SLIDER_HEIGHT},top:20,left:0,width:"100%"}},_createTrackWrapper:function(){return BI.createWidget({type:"bi.absolute",items:[{el:{type:"bi.vertical",items:[{type:"bi.absolute",items:[{el:this.grayTrack,top:0,left:0,width:"100%"},{el:this.blueTrack,top:0,left:0,width:"0%"}]}],hgap:8,height:8},top:8,left:0,width:"100%"}]})},_checkValidation:function(v){var o=this.options,valid=!1,dotText=(v+"").split(".")[1];return BI.isEmptyString(dotText)||BI.isNumeric(v)&&!(BI.isNull(v)||vthis.max)&&(o.digit===!1?valid=!0:(dotText=dotText||"",valid=dotText.length===o.digit)),valid},_checkOverlap:function(){var labelOneLeft=this.labelOne.element[0].offsetLeft,labelTwoLeft=this.labelTwo.element[0].offsetLeft;labelOneLeft<=labelTwoLeft?labelTwoLeft-labelOneLeft<90?this.labelTwo.element.css({top:40}):this.labelTwo.element.css({top:0}):labelOneLeft-labelTwoLeft<90?this.labelTwo.element.css({top:40}):this.labelTwo.element.css({top:0})},_checkLabelPosition:function(oldValueOne,oldValueTwo,valueOne,valueTwo,isLeft){if(oldValueOne=BI.parseFloat(oldValueOne),oldValueTwo=BI.parseFloat(oldValueTwo),valueOne=BI.parseFloat(valueOne),valueTwo=BI.parseFloat(valueTwo),oldValueOne<=oldValueTwo&&valueOne>valueTwo||oldValueOne>=oldValueTwo&&valueOne-1){arr=pre.split("e");var decimalPartLength=BI.size(arr[0].split(".")[1]),sciencePartLength=BI.parseInt(arr[1].substring(1));return decimalPartLength-sciencePartLength}return arr=pre.split("."),arr.length>1?arr[1].length:0},_assertValue:function(value){return value<=this.min?this.min:value>=this.max?this.max:value},_setEnable:function(b){BI.IntervalSlider.superclass._setEnable.apply(this,[b]),b?this.blueTrack.element.removeClass("disabled-blue-track").addClass("blue-track"):this.blueTrack.element.removeClass("blue-track").addClass("disabled-blue-track")},getValue:function(){return this.valueOne<=this.valueTwo?{min:this.valueOne,max:this.valueTwo}:{min:this.valueTwo,max:this.valueOne}},setMinAndMax:function(v){var minNumber=BI.parseFloat(v.min),maxNumber=BI.parseFloat(v.max);!isNaN(minNumber)&&!isNaN(maxNumber)&&maxNumber>=minNumber&&(this.min=minNumber,this.max=maxNumber,this.valueOne=minNumber,this.valueTwo=maxNumber,this.precision=this._getPrecision(),this._setDraggableEnable(!0)),maxNumber===minNumber&&this._setDraggableEnable(!1)},setValue:function(v){var o=this.options,valueOne=BI.parseFloat(v.min),valueTwo=BI.parseFloat(v.max);valueOne=o.digit===!1?valueOne:valueOne.toFixed(o.digit),valueTwo=o.digit===!1?valueTwo:valueTwo.toFixed(o.digit),isNaN(valueOne)||isNaN(valueTwo)||(this._checkValidation(valueOne)&&(this.valueOne=this.valueOne<=this.valueTwo?valueOne:valueTwo),this._checkValidation(valueTwo)&&(this.valueTwo=this.valueOne<=this.valueTwo?valueTwo:valueOne),valueOnethis.max&&(this.valueTwo=this.max))},reset:function(){this._setVisible(!1),this.enable=!1,this.valueOne="",this.valueTwo="",this.min=NaN,this.max=NaN,this._setBlueTrackWidth(0)},populate:function(){isNaN(this.min)||isNaN(this.max)||(this.enable=!0,this._setVisible(!0),this._setErrorText(),(BI.isNumeric(this.valueOne)||BI.isNotEmptyString(this.valueOne))&&(BI.isNumeric(this.valueTwo)||BI.isNotEmptyString(this.valueTwo))?(this.labelOne.setValue(this.valueOne),this.labelTwo.setValue(this.valueTwo),this._setAllPosition(this._getPercentByValue(this.valueOne),this._getPercentByValue(this.valueTwo))):(this.labelOne.setValue(this.min),this.labelTwo.setValue(this.max),this._setAllPosition(0,100)))}}),BI.IntervalSlider.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.interval_slider",BI.IntervalSlider),BI.AccurateCalculationModel=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.AccurateCalculationModel.superclass._defaultConfig.apply(this,arguments),{baseCls:""})},_init:function(){BI.AccurateCalculationModel.superclass._init.apply(this,arguments)},_getMagnitude:function(n){for(var magnitude="1",i=0;i0)var needAddZero=stringNumber2;else{var needAddZero=stringNumber1;magnitudeDiff=0-magnitudeDiff}for(var i=0;i=num2.numDecimal.length?num1.numDecimal.length:num2.numDecimal.length}function addZero(resultTemp,length){for(var diff=length-resultTemp.length,i=0;i=BI.parseInt(stringNumber2.numDecimal))var decimalResultTemp=(BI.parseInt(stringNumber1.numDecimal)-BI.parseInt(stringNumber2.numDecimal)).toString(),decimalResult=addZero(decimalResultTemp,decimalMaxLength);else{integerResult--;var borrow=this._getMagnitude(decimalMaxLength),decimalResultTemp=(borrow+BI.parseInt(stringNumber1.numDecimal)-BI.parseInt(stringNumber2.numDecimal)).toString(),decimalResult=addZero(decimalResultTemp,decimalMaxLength)}var result=integerResult+"."+decimalResult;return BI.parseFloat(result)},_accurateAddition:function(num1,num2){function addZero(resultTemp,length){for(var diff=length-resultTemp.length,i=0;in)var integerResult=stringNumber.numInteger.slice(0,stringNumber.numInteger.length-n),partDecimalResult=stringNumber.numInteger.slice(-n);else var integerResult="0",partDecimalResult=addZero(stringNumber.numInteger,n);var result=integerResult+"."+partDecimalResult+stringNumber.numDecimal;return BI.parseFloat(result)},accurateSubtraction:function(num1,num2){return num1>=0&&num2>=0?num1>=num2?this._accurateSubtraction(num1,num2):-this._accurateSubtraction(num2,num1):num1>=0&&num2<0?this._accurateAddition(num1,-num2):num1<0&&num2>=0?-this._accurateAddition(-num1,num2):num1<0&&num2<0?num1>=num2?this._accurateSubtraction(-num2,-num1):this._accurateSubtraction(-num1,-num2):void 0},accurateAddition:function(num1,num2){return num1>=0&&num2>=0?this._accurateAddition(num1,num2):num1>=0&&num2<0?this.accurateSubtraction(num1,-num2):num1<0&&num2>=0?this.accurateSubtraction(num2,-num1):num1<0&&num2<0?-this._accurateAddition(-num1,-num2):void 0},accurateMultiplication:function(num1,num2){return num1>=0&&num2>=0?this._accurateMultiplication(num1,num2):num1>=0&&num2<0?-this._accurateMultiplication(num1,-num2):num1<0&&num2>=0?-this._accurateMultiplication(-num1,num2):num1<0&&num2<0?this._accurateMultiplication(-num1,-num2):void 0},accurateDivisionTenExponent:function(num1,n){return num1>=0?this._accurateDivisionTenExponent(num1,n):-this._accurateDivisionTenExponent(-num1,n)}}),BI.DownListCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.DownListCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multilayer-down-list-combo",height:24,items:[],adjustLength:0,direction:"bottom",trigger:"click",container:null,stopPropagation:!1,el:{}})},_init:function(){BI.DownListCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.popupview=BI.createWidget({type:"bi.multi_layer_down_list_popup",items:o.items,chooseType:o.chooseType,value:o.value}),this.popupview.on(BI.DownListPopup.EVENT_CHANGE,function(value){self.fireEvent(BI.DownListCombo.EVENT_CHANGE,value),self.downlistcombo.hideView()}),this.popupview.on(BI.DownListPopup.EVENT_SON_VALUE_CHANGE,function(value,fatherValue){self.fireEvent(BI.DownListCombo.EVENT_SON_VALUE_CHANGE,value,fatherValue),self.downlistcombo.hideView()}),this.downlistcombo=BI.createWidget({element:this,type:"bi.combo",trigger:o.trigger,isNeedAdjustWidth:!1,container:o.container,adjustLength:o.adjustLength,direction:o.direction,stopPropagation:o.stopPropagation,el:BI.createWidget(o.el,{type:"bi.icon_trigger",extraCls:o.iconCls?o.iconCls:"pull-down-font",width:o.width,height:o.height}),popup:{el:this.popupview,stopPropagation:o.stopPropagation,maxHeight:1e3}}),this.downlistcombo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){self.fireEvent(BI.DownListCombo.EVENT_BEFORE_POPUPVIEW)})},hideView:function(){this.downlistcombo.hideView()},showView:function(e){this.downlistcombo.showView(e)},populate:function(items){this.popupview.populate(items)},setValue:function(v){this.popupview.setValue(v)},getValue:function(){return this.popupview.getValue()}}),BI.DownListCombo.EVENT_CHANGE="EVENT_CHANGE",BI.DownListCombo.EVENT_SON_VALUE_CHANGE="EVENT_SON_VALUE_CHANGE",BI.DownListCombo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.multi_layer_down_list_combo",BI.DownListCombo),BI.MultiLayerDownListPopup=BI.inherit(BI.Pane,{constants:{nextIcon:"pull-right-e-font",height:25,iconHeight:12,iconWidth:12,hgap:0,vgap:0,border:1},_defaultConfig:function(){var conf=BI.MultiLayerDownListPopup.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-down-list-popup",items:[],chooseType:BI.Selection.Multi})},_init:function(){BI.MultiLayerDownListPopup.superclass._init.apply(this,arguments),this.singleValues=[],this.childValueMap={},this.fatherValueMap={};var self=this,o=this.options,children=this._createPopupItems(o.items);this.popup=BI.createWidget({type:"bi.button_tree",items:BI.createItems(children,{},{adjustLength:-2}),layouts:[{type:"bi.vertical",hgap:this.constants.hgap,vgap:this.constants.vgap}],value:this._digest(o.value),chooseType:o.chooseType}),this.popup.on(BI.ButtonTree.EVENT_CHANGE,function(value,object){var changedValue=value;if(BI.isNotNull(self.childValueMap[value])){changedValue=self.childValueMap[value];var fatherValue=self.fatherValueMap[value],fatherArrayValue=(fatherValue+"").split("_");self.fireEvent(BI.MultiLayerDownListPopup.EVENT_SON_VALUE_CHANGE,changedValue,fatherArrayValue.length>1?fatherArrayValue:fatherValue)}else self.fireEvent(BI.MultiLayerDownListPopup.EVENT_CHANGE,changedValue,object);if(!BI.contains(self.singleValues,changedValue)){var item=self.getValue(),result=[];BI.each(item,function(i,valueObject){valueObject.value!=changedValue&&result.push(valueObject)}),self.setValue(result)}}),BI.createWidget({type:"bi.vertical",element:this,items:[this.popup],vgap:5})},_createPopupItems:function(items){var self=this,result=[];return BI.each(items,function(i,it){var item_done={type:"bi.down_list_group",items:[]};if(BI.each(it,function(i,item){BI.isNotEmptyArray(item.children)&&!BI.isEmpty(item.el)?(item.type="bi.combo_group",item.cls="down-list-group",item.trigger="hover",item.isNeedAdjustWidth=!1,item.el.title=item.el.title||item.el.text,item.el.type="bi.down_list_group_item",item.el.logic={dynamic:!0},item.el.height=self.constants.height,item.el.iconCls2=self.constants.nextIcon,item.popup={lgap:1,el:{type:"bi.button_tree",chooseType:0,layouts:[{type:"bi.vertical"}]},innerVGap:5},item.el.childValues=[],BI.each(item.children,function(i,child){child=child.el?BI.extend(child.el,{children:child.children}):child;var fatherValue=BI.deepClone(item.el.value),childValue=BI.deepClone(child.value);self.singleValues.push(child.value),child.type="bi.down_list_item",child.extraCls=" child-down-list-item",child.title=child.title||child.text,child.textRgap=10,child.isNeedAdjustWidth=!1,child.logic={dynamic:!0},child.father=fatherValue,self.fatherValueMap[self._createChildValue(fatherValue,childValue)]=fatherValue,self.childValueMap[self._createChildValue(fatherValue,childValue)]=childValue,child.value=self._createChildValue(fatherValue,childValue),item.el.childValues.push(child.value),BI.isNotEmptyArray(child.children)&&(child.type="bi.down_list_group_item",self._createChildren(child),child.height=self.constants.height,child.iconCls2=self.constants.nextIcon,item.el.childValues=BI.concat(item.el.childValues,child.childValues))})):(item.type="bi.down_list_item",item.title=item.title||item.text,item.textRgap=10,item.isNeedAdjustWidth=!1,item.logic={dynamic:!0});var el_done={};el_done.el=item,item_done.items.push(el_done)}),self._isGroup(item_done.items)&&BI.each(item_done.items,function(i,item){self.singleValues.push(item.el.value)}),result.push(item_done),self._needSpliter(i,items.length)){var spliter_container=BI.createWidget({type:"bi.vertical",items:[{el:{type:"bi.layout",cls:"bi-down-list-spliter bi-border-top cursor-pointer",height:0}}],cls:"bi-down-list-spliter-container cursor-pointer",vgap:5,lgap:10});result.push(spliter_container)}}),result},_createChildren:function(child){var self=this;child.childValues=[],BI.each(child.children,function(i,c){var fatherValue=BI.deepClone(child.value),childValue=BI.deepClone(c.value);c.type="bi.down_list_item",c.title=c.title||c.text,c.textRgap=10,c.isNeedAdjustWidth=!1,c.logic={dynamic:!0},c.father=fatherValue,self.fatherValueMap[self._createChildValue(fatherValue,childValue)]=fatherValue,self.childValueMap[self._createChildValue(fatherValue,childValue)]=childValue,c.value=self._createChildValue(fatherValue,childValue),child.childValues.push(c.value)})},_isGroup:function(i){return i.length>1},_needSpliter:function(i,itemLength){return i1?fatherArrayValue:fartherValue}else valueItem.value=value;result.push(valueItem)}),result}}),BI.MultiLayerDownListPopup.EVENT_CHANGE="EVENT_CHANGE",BI.MultiLayerDownListPopup.EVENT_SON_VALUE_CHANGE="EVENT_SON_VALUE_CHANGE",BI.shortcut("bi.multi_layer_down_list_popup",BI.MultiLayerDownListPopup),BI.MultiLayerSelectTreeCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiLayerSelectTreeCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multilayer-select-tree-combo",isDefaultInit:!1,height:24,text:"",itemsCreator:BI.emptyFn,items:[],value:"",attributes:{tabIndex:0},allowEdit:!1,allowSearchValue:!1,allowInsertValue:!1})},render:function(){var self=this,o=this.options,combo=o.itemsCreator===BI.emptyFn?this._getSyncConfig():this._getAsyncConfig();return o.allowEdit||o.itemsCreator!==BI.emptyFn?{type:"bi.absolute",items:[{el:combo,left:0,right:0,top:0,bottom:0},{el:{type:"bi.trigger_icon_button",cls:"trigger-icon-button",ref:function(_ref){self.triggerBtn=_ref},width:o.height,height:o.height,handler:function(){self.combo.isViewVisible()?self.combo.hideView():self.combo.showView()}},right:0,bottom:0,top:0}]}:combo},_getBaseConfig:function(){var self=this,o=this.options;return{type:"bi.combo",container:o.container,adjustLength:2,ref:function(_ref){self.combo=_ref},popup:{el:{type:"bi.multilayer_select_tree_popup",isDefaultInit:o.isDefaultInit,itemsCreator:o.itemsCreator,items:o.items,ref:function(_ref){self.trigger&&self.trigger.getSearcher().setAdapter(_ref)},listeners:[{eventName:BI.MultiLayerSelectTreePopup.EVENT_CHANGE,action:function(){self.setValue(this.getValue()),self.combo.hideView(),self.fireEvent(BI.MultiLayerSelectTreeCombo.EVENT_CHANGE)}}]},value:o.value,maxHeight:400,minHeight:240}}},_getSearchConfig:function(){var self=this,o=this.options;return{el:{type:"bi.multilayer_select_tree_trigger",allowInsertValue:o.allowInsertValue,allowSearchValue:o.allowSearchValue,allowEdit:o.allowEdit,cls:"multilayer-select-tree-trigger",ref:function(_ref){self.trigger=_ref},items:o.items,itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,watermark:o.watermark,height:o.height-2,text:o.text,value:o.value,tipType:o.tipType,warningTitle:o.warningTitle,title:o.title,listeners:[{eventName:BI.MultiLayerSelectTreeTrigger.EVENT_CHANGE,action:function(){self.setValue(this.getValue()),self.combo.hideView(),self.fireEvent(BI.MultiLayerSelectTreeCombo.EVENT_CHANGE)}},{eventName:BI.MultiLayerSelectTreeTrigger.EVENT_FOCUS,action:function(){self.fireEvent(BI.MultiLayerSelectTreeCombo.EVENT_FOCUS)}},{eventName:BI.MultiLayerSelectTreeTrigger.EVENT_BLUR,action:function(){self.fireEvent(BI.MultiLayerSelectTreeCombo.EVENT_BLUR)}},{eventName:BI.MultiLayerSelectTreeTrigger.EVENT_SEARCHING,action:function(){self.fireEvent(BI.MultiLayerSelectTreeCombo.EVENT_SEARCHING)}},{eventName:BI.MultiLayerSelectTreeTrigger.EVENT_ADD_ITEM,action:function(){var value=self.trigger.getSearcher().getKeyword();self.combo.setValue([value]),self.combo.hideView()}}]},hideChecker:function(e){return 0===self.triggerBtn.element.find(e.target).length},listeners:[{eventName:BI.Combo.EVENT_AFTER_HIDEVIEW,action:function(){self.trigger.stopEditing()}}]}},_getSyncConfig:function(){var o=this.options,baseConfig=this._getBaseConfig();return BI.extend(baseConfig,o.allowEdit?this._getSearchConfig():{el:{type:"bi.single_tree_trigger",text:o.text,height:o.height,items:o.items,value:o.value}})},_getAsyncConfig:function(){var config=this._getBaseConfig();return BI.extend(config,this._getSearchConfig())},setValue:function(v){v=BI.isArray(v)?v:[v],this.combo.setValue(v)},getValue:function(){return this.combo.getValue()},populate:function(items){this.combo.populate(items)}}),BI.MultiLayerSelectTreeCombo.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiLayerSelectTreeCombo.EVENT_BLUR="EVENT_BLUR",BI.MultiLayerSelectTreeCombo.EVENT_FOCUS="EVENT_FOCUS",BI.MultiLayerSelectTreeCombo.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multilayer_select_tree_combo",BI.MultiLayerSelectTreeCombo),BI.MultiLayerSelectTreeInsertSearchPane=BI.inherit(BI.Widget,{props:function(){return{baseCls:"bi-multilayer-select-tree-popup",tipText:BI.i18nText("BI-No_Selected_Item"),isDefaultInit:!1,itemsCreator:BI.emptyFn,items:[],value:""}},render:function(){var self=this,o=this.options;return this.tree=BI.createWidget({type:"bi.multilayer_select_level_tree",isDefaultInit:o.isDefaultInit,items:o.items,itemsCreator:o.itemsCreator===BI.emptyFn?BI.emptyFn:function(op,callback){o.itemsCreator(op,function(res){callback(res),self.setKeyword(o.keywordGetter())})},keywordGetter:o.keywordGetter,value:o.value,scrollable:null,listeners:[{eventName:BI.Controller.EVENT_CHANGE,action:function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}},{eventName:BI.MultiLayerSelectLevelTree.EVENT_CHANGE,action:function(){self.fireEvent(BI.MultiLayerSelectTreeInsertSearchPane.EVENT_CHANGE)}}]}),{type:"bi.vertical",scrolly:!1,scrollable:!0,vgap:5,items:[{type:"bi.text_button",invisible:!0,text:BI.i18nText("BI-Basic_Click_To_Add_Text",""),height:24,cls:"bi-high-light",hgap:5,ref:function(_ref){self.addNotMatchTip=_ref},handler:function(){self.fireEvent(BI.MultiLayerSelectTreeInsertSearchPane.EVENT_ADD_ITEM,o.keywordGetter())}},this.tree]}},setKeyword:function(keyword){var showTip=BI.isEmptyArray(this.tree.getAllLeaves());this.addNotMatchTip.setVisible(showTip),showTip&&this.addNotMatchTip.setText(BI.i18nText("BI-Basic_Click_To_Add_Text",keyword))},getValue:function(){return this.tree.getValue()},setValue:function(v){v=BI.isArray(v)?v:[v],this.tree.setValue(v)},populate:function(items){this.tree.populate(items)}}),BI.MultiLayerSelectTreeInsertSearchPane.EVENT_ADD_ITEM="EVENT_ADD_ITEM",BI.MultiLayerSelectTreeInsertSearchPane.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multilayer_select_tree_insert_search_pane",BI.MultiLayerSelectTreeInsertSearchPane),BI.MultiLayerSelectLevelTree=BI.inherit(BI.Pane,{_defaultConfig:function(){return BI.extend(BI.MultiLayerSelectLevelTree.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multilayer-select-level-tree",isDefaultInit:!1,items:[],itemsCreator:BI.emptyFn,keywordGetter:BI.emptyFn,value:"",scrollable:!0})},_init:function(){var o=this.options;BI.MultiLayerSelectLevelTree.superclass._init.apply(this,arguments),this.storeValue=o.value,this.initTree(this.options.items),this.check()},_formatItems:function(nodes,layer,pNode){var self=this,o=this.options,keyword=o.keywordGetter();return BI.each(nodes,function(i,node){var extend={};node.layer=layer,BI.isKey(node.id)||(node.id=BI.UUID()),node.keyword=node.keyword||keyword,extend.pNode=pNode,node.isParent===!0||node.parent===!0||BI.isNotEmptyArray(node.children)?(extend.type="bi.multilayer_select_tree_mid_plus_group_node",i===nodes.length-1&&(extend.type="bi.multilayer_select_tree_last_plus_group_node",extend.isLastNode=!0),0!==i||pNode||(extend.type="bi.multilayer_select_tree_first_plus_group_node"),0!==i||i!==nodes.length-1||pNode||(extend.type="bi.multilayer_select_tree_plus_group_node"),BI.defaults(node,extend),self._formatItems(node.children,layer+1,node)):(extend.type="bi.multilayer_single_tree_mid_tree_leaf_item",0!==i||pNode||(extend.type="bi.multilayer_single_tree_first_tree_leaf_item"),i===nodes.length-1&&(extend.type="bi.multilayer_single_tree_last_tree_leaf_item"),BI.defaults(node,extend))}),nodes},_assertId:function(sNodes){BI.each(sNodes,function(i,node){node.id=node.id||BI.UUID()})},initTree:function(nodes){var self=this,o=this.options,hasNext=!1;this.empty(),this._assertId(nodes),this.tree=BI.createWidget({type:"bi.custom_tree",cls:"tree-view display-table",expander:{type:"bi.select_tree_expander",isDefaultInit:o.isDefaultInit,el:{},popup:{type:"bi.custom_tree"}},items:this._formatItems(BI.Tree.transformToTreeFormat(nodes),0),itemsCreator:function(op,callback){1===op.times&&!op.node&&BI.nextTick(function(){self.loading()}),o.itemsCreator(op,function(ob){hasNext=ob.hasNext,1===op.times&&!op.node&&self._populate(ob.items),callback(self._formatItems(BI.Tree.transformToTreeFormat(ob.items),op.node?op.node.layer+1:0,op.node)),self.setValue(self.storeValue),1===op.times&&!op.node&&BI.nextTick(function(){self.loaded()})})},value:o.value,el:{type:"bi.loader",isDefaultInit:o.itemsCreator!==BI.emptyFn,el:{type:"bi.button_tree",chooseType:o.chooseType,behaviors:o.behaviors,layouts:[{type:"bi.vertical"}]},hasNext:function(){return hasNext}}}),this.tree.on(BI.Controller.EVENT_CHANGE,function(type,value){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&(self.setValue(value),self.fireEvent(BI.MultiLayerSelectLevelTree.EVENT_CHANGE,arguments))}),BI.createWidget({type:"bi.adaptive",element:this,scrollable:o.scrollable,items:[this.tree]})},_populate:function(){BI.MultiLayerSelectLevelTree.superclass.populate.apply(this,arguments)},populate:function(nodes){this._populate(nodes),BI.isNull(nodes)?this.tree.populate():this.tree.populate(this._formatItems(BI.Tree.transformToTreeFormat(nodes),0))},setValue:function(v){this.options.chooseType===BI.Selection.None||(this.storeValue=v,this.tree.setValue(v))},getValue:function(){return BI.isArray(this.storeValue)?this.storeValue:BI.isNull(this.storeValue)?[]:[this.storeValue]},getAllLeaves:function(){return this.tree.getAllLeaves()},getNodeById:function(id){return this.tree.getNodeById(id)},getNodeByValue:function(id){return this.tree.getNodeByValue(id)}}),BI.MultiLayerSelectLevelTree.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multilayer_select_level_tree",BI.MultiLayerSelectLevelTree),BI.MultiLayerSelectTreePopup=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiLayerSelectTreePopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multilayer-select-tree-popup",tipText:BI.i18nText("BI-No_Selected_Item"),isDefaultInit:!1,itemsCreator:BI.emptyFn,items:[],value:""})},_init:function(){BI.MultiLayerSelectTreePopup.superclass._init.apply(this,arguments);var self=this,o=this.options;this.tree=BI.createWidget({type:"bi.multilayer_select_level_tree",isDefaultInit:o.isDefaultInit,items:o.items,itemsCreator:o.itemsCreator,keywordGetter:o.keywordGetter,value:o.value,scrollable:null}),BI.createWidget({type:"bi.vertical",scrolly:!1,scrollable:!0,element:this,vgap:5,items:[this.tree]}),this.tree.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.tree.on(BI.MultiLayerSelectLevelTree.EVENT_CHANGE,function(){self.fireEvent(BI.MultiLayerSelectTreePopup.EVENT_CHANGE)})},getValue:function(){return this.tree.getValue(); +},setValue:function(v){v=BI.isArray(v)?v:[v],this.tree.setValue(v)},populate:function(items){this.tree.populate(items)}}),BI.MultiLayerSelectTreePopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multilayer_select_tree_popup",BI.MultiLayerSelectTreePopup),BI.MultiLayerSelectTreeTrigger=BI.inherit(BI.Trigger,{props:function(){return{extraCls:"bi-multi-layer-select-tree-trigger bi-border bi-focus-shadow",height:24,valueFormatter:function(v){return v},itemsCreator:BI.emptyFn,watermark:BI.i18nText("BI-Basic_Search"),allowSearchValue:!1}},render:function(){var self=this,o=this.options;o.itemsCreator===BI.emptyFn&&this._initData();var content={type:"bi.htape",items:[{el:{type:"bi.searcher",ref:function(){self.searcher=this},isAutoSearch:!1,el:{type:"bi.state_editor",ref:function(){self.editor=this},defaultText:o.text,text:this._digest(o.value),value:o.value,height:o.height,tipText:"",watermark:o.watermark,listeners:[{eventName:BI.StateEditor.EVENT_FOCUS,action:function(){self.fireEvent(BI.MultiLayerSelectTreeTrigger.EVENT_FOCUS)}},{eventName:BI.StateEditor.EVENT_BLUR,action:function(){self.fireEvent(BI.MultiLayerSelectTreeTrigger.EVENT_BLUR)}},{eventName:BI.StateEditor.EVENT_CHANGE,action:function(){self.fireEvent(BI.MultiLayerSelectTreeTrigger.EVENT_SEARCHING)}}]},popup:{type:o.allowInsertValue?"bi.multilayer_select_tree_insert_search_pane":"bi.multilayer_select_tree_popup",itemsCreator:o.itemsCreator===BI.emptyFn?BI.emptyFn:function(op,callback){op.keyword=self.editor.getValue(),o.itemsCreator(op,callback)},keywordGetter:function(){return self.editor.getValue()},cls:"bi-card",listeners:[{eventName:BI.MultiLayerSelectTreeInsertSearchPane.EVENT_ADD_ITEM,action:function(){self.options.text=self.getSearcher().getKeyword(),self.fireEvent(BI.MultiLayerSelectTreeTrigger.EVENT_ADD_ITEM)}}],ref:function(_ref){self.popup=_ref}},onSearch:function(obj,callback){var keyword=obj.keyword;o.itemsCreator===BI.emptyFn?(callback(self._getSearchItems(keyword)),o.allowInsertValue&&self.popup.setKeyword(keyword)):callback()},listeners:[{eventName:BI.Searcher.EVENT_CHANGE,action:function(){self.fireEvent(BI.MultiLayerSelectTreeTrigger.EVENT_CHANGE)}}]}},{el:{type:"bi.layout",width:24},width:24}]};return o.allowEdit?content:{type:"bi.absolute",items:[{el:content,left:0,right:0,top:0,bottom:0},{el:{type:"bi.layout"},left:0,right:24,top:0,bottom:0}]}},_initData:function(){var o=this.options;this.tree=new BI.Tree,this.nodes=BI.Tree.treeFormat(BI.deepClone(o.items)),this.tree.initTree(this.nodes)},_getSearchItems:function(keyword){var self=this,o=this.options,items=[];return this.tree.traverse(function(node){var find=BI.Func.getSearchResult(self.tree.isRoot(node)?[]:BI.concat([node.text],o.allowSearchValue?[node.value]:[]),keyword);if(find.find.length>0||find.match.length>0)return items.push(node),!0}),this._fillTreeStructure4Search(items,"id")},_createJson:function(node,open){return{id:node.id,pId:node.pId,text:node.text,value:node.value,isParent:BI.isNotEmptyArray(node.children),open:open}},_getChildren:function(node){var self=this;node.children=node.children||[];var nodes=[];return BI.each(node.children,function(idx,child){var children=self._getChildren(child);nodes=nodes.concat(children)}),node.children.concat(nodes)},_fillTreeStructure4Search:function(leaves){var self=this,result=[],queue=[];for(BI.each(leaves,function(idx,node){queue.push({pId:node.pId}),result.push(node),result=result.concat(self._getChildren(node))});BI.isNotEmptyArray(queue);){var node=queue.pop(),pNode=this.tree.search(this.tree.getRoot(),node.pId,"id");null!=pNode&&(pNode.open=!0,queue.push({pId:pNode.pId}),result.push(pNode))}return BI.uniqBy(BI.map(result,function(idx,node){return self._createJson(node,node.open)}),"id")},_digest:function(v){var o=this.options;if(o.itemsCreator===BI.emptyFn){var result=BI.find(o.items,function(i,item){return item.value===v});return BI.isNotNull(result)?result.text:o.text}return o.valueFormatter(v)},stopEditing:function(){this.searcher.stopSearch()},getSearcher:function(){return this.searcher},populate:function(items){this.options.items=items,this._initData(items)},setValue:function(v){this.editor.setState(this._digest(v[0]))},getValue:function(){return this.searcher.getValue()}}),BI.MultiLayerSelectTreeTrigger.EVENT_FOCUS="EVENT_FOCUS",BI.MultiLayerSelectTreeTrigger.EVENT_BLUR="EVENT_BLUR",BI.MultiLayerSelectTreeTrigger.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiLayerSelectTreeTrigger.EVENT_STOP="EVENT_STOP",BI.MultiLayerSelectTreeTrigger.EVENT_START="EVENT_START",BI.MultiLayerSelectTreeTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.MultiLayerSelectTreeTrigger.EVENT_ADD_ITEM="EVENT_ADD_ITEM",BI.shortcut("bi.multilayer_select_tree_trigger",BI.MultiLayerSelectTreeTrigger),BI.MultiLayerSelectTreeFirstPlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.MultiLayerSelectTreeFirstPlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-multilayer-select-tree-first-plus-group-node bi-list-item-active",layer:0,id:"",pId:"",readonly:!0,open:!1,height:24})},_init:function(){BI.MultiLayerSelectTreeFirstPlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.node=BI.createWidget({type:"bi.select_tree_first_plus_group_node",cls:"bi-list-item-none",stopPropagation:!0,logic:{dynamic:!0},id:o.id,pId:o.pId,keyword:o.keyword,open:o.open,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py}),this.node.on(BI.Controller.EVENT_CHANGE,function(type){self.setSelected(self.isSelected()),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});for(var needBlankLayers=[],pNode=o.pNode;pNode;)pNode.isLastNode&&needBlankLayers.push(pNode.layer),pNode=pNode.pNode;var items=[];BI.count(0,o.layer,function(index){items.push({type:"bi.layout",cls:BI.contains(needBlankLayers,index)?"":"base-line-conn-background",width:12,height:o.height})}),items.push(this.node),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,12),items:[items]})},isOnce:function(){return!0},doRedMark:function(){this.node.doRedMark.apply(this.node,arguments)},unRedMark:function(){this.node.unRedMark.apply(this.node,arguments)},isSelected:function(){return this.node.isSelected()},setSelected:function(b){BI.MultiLayerSelectTreeFirstPlusGroupNode.superclass.setSelected.apply(this,arguments),this.node.setSelected(b)},doClick:function(){BI.NodeButton.superclass.doClick.apply(this,arguments),this.node.setSelected(this.isSelected())},setOpened:function(v){BI.MultiLayerSelectTreeFirstPlusGroupNode.superclass.setOpened.apply(this,arguments),this.node.setOpened(v)}}),BI.shortcut("bi.multilayer_select_tree_first_plus_group_node",BI.MultiLayerSelectTreeFirstPlusGroupNode),BI.MultiLayerSelectTreeLastPlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.MultiLayerSelectTreeLastPlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-multilayer-select-tree-last-plus-group-node bi-list-item-active",layer:0,id:"",pId:"",readonly:!0,open:!1,height:24})},_init:function(){BI.MultiLayerSelectTreeLastPlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.node=BI.createWidget({type:"bi.select_tree_last_plus_group_node",cls:"bi-list-item-none",stopPropagation:!0,logic:{dynamic:!0},id:o.id,pId:o.pId,keyword:o.keyword,open:o.open,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py}),this.node.on(BI.Controller.EVENT_CHANGE,function(type){self.setSelected(self.isSelected()),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});for(var needBlankLayers=[],pNode=o.pNode;pNode;)pNode.isLastNode&&needBlankLayers.push(pNode.layer),pNode=pNode.pNode;var items=[];BI.count(0,o.layer,function(index){items.push({type:"bi.layout",cls:BI.contains(needBlankLayers,index)?"":"base-line-conn-background",width:12,height:o.height})}),items.push(this.node),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,12),items:[items]})},doRedMark:function(){this.node.doRedMark.apply(this.node,arguments)},unRedMark:function(){this.node.unRedMark.apply(this.node,arguments)},isSelected:function(){return this.node.isSelected()},setSelected:function(b){BI.MultiLayerSelectTreeLastPlusGroupNode.superclass.setSelected.apply(this,arguments),this.node.setSelected(b)},doClick:function(){BI.MultiLayerSelectTreeLastPlusGroupNode.superclass.doClick.apply(this,arguments),this.node.setSelected(this.isSelected())},setOpened:function(v){BI.MultiLayerSelectTreeLastPlusGroupNode.superclass.setOpened.apply(this,arguments),this.node.setOpened(v)}}),BI.shortcut("bi.multilayer_select_tree_last_plus_group_node",BI.MultiLayerSelectTreeLastPlusGroupNode),BI.MultiLayerSelectTreeMidPlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.MultiLayerSelectTreeMidPlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-multilayer-select-tree-mid-plus-group-node bi-list-item-active",layer:0,id:"",pId:"",readonly:!0,open:!1,height:24})},_init:function(){BI.MultiLayerSelectTreeMidPlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.node=BI.createWidget({type:"bi.select_tree_mid_plus_group_node",cls:"bi-list-item-none",stopPropagation:!0,logic:{dynamic:!0},id:o.id,pId:o.pId,keyword:o.keyword,open:o.open,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py}),this.node.on(BI.Controller.EVENT_CHANGE,function(type){self.setSelected(self.isSelected()),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});for(var needBlankLayers=[],pNode=o.pNode;pNode;)pNode.isLastNode&&needBlankLayers.push(pNode.layer),pNode=pNode.pNode;var items=[];BI.count(0,o.layer,function(index){items.push({type:"bi.layout",cls:BI.contains(needBlankLayers,index)?"":"base-line-conn-background",width:12,height:o.height})}),items.push(this.node),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,12),items:[items]})},doRedMark:function(){this.node.doRedMark.apply(this.node,arguments)},unRedMark:function(){this.node.unRedMark.apply(this.node,arguments)},isSelected:function(){return this.node.isSelected()},setSelected:function(b){BI.MultiLayerSelectTreeMidPlusGroupNode.superclass.setSelected.apply(this,arguments),this.node.setSelected(b)},doClick:function(){BI.MultiLayerSelectTreeMidPlusGroupNode.superclass.doClick.apply(this,arguments),this.node.setSelected(this.isSelected())},setOpened:function(v){BI.MultiLayerSelectTreeMidPlusGroupNode.superclass.setOpened.apply(this,arguments),this.node.setOpened(v)}}),BI.shortcut("bi.multilayer_select_tree_mid_plus_group_node",BI.MultiLayerSelectTreeMidPlusGroupNode),BI.MultiLayerSelectTreePlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.MultiLayerSelectTreePlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-multilayer-select-tree-first-plus-group-node bi-list-item-active",layer:0,id:"",pId:"",readonly:!0,open:!1,height:24})},_init:function(){BI.MultiLayerSelectTreePlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.node=BI.createWidget({type:"bi.select_tree_plus_group_node",cls:"bi-list-item-none",stopPropagation:!0,logic:{dynamic:!0},id:o.id,pId:o.pId,keyword:o.keyword,open:o.open,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py}),this.node.on(BI.Controller.EVENT_CHANGE,function(type){self.setSelected(self.isSelected()),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});for(var needBlankLayers=[],pNode=o.pNode;pNode;)pNode.isLastNode&&needBlankLayers.push(pNode.layer),pNode=pNode.pNode;var items=[];BI.count(0,o.layer,function(index){items.push({type:"bi.layout",cls:BI.contains(needBlankLayers,index)?"":"base-line-conn-background",width:12,height:o.height})}),items.push(this.node),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,12),items:[items]})},isOnce:function(){return!0},doRedMark:function(){this.node.doRedMark.apply(this.node,arguments)},unRedMark:function(){this.node.unRedMark.apply(this.node,arguments)},isSelected:function(){return this.node.isSelected()},setSelected:function(b){BI.MultiLayerSelectTreePlusGroupNode.superclass.setSelected.apply(this,arguments),this.node.setSelected(b)},doClick:function(){BI.NodeButton.superclass.doClick.apply(this,arguments),this.node.setSelected(this.isSelected())},setOpened:function(v){BI.MultiLayerSelectTreePlusGroupNode.superclass.setOpened.apply(this,arguments),this.node.setOpened(v)}}),BI.shortcut("bi.multilayer_select_tree_plus_group_node",BI.MultiLayerSelectTreePlusGroupNode),BI.MultiLayerSingleTreeCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiLayerSingleTreeCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multilayer-single-tree-combo",isDefaultInit:!1,height:24,text:"",itemsCreator:BI.emptyFn,items:[],value:"",attributes:{tabIndex:0},allowEdit:!1,allowSearchValue:!1,allowInsertValue:!1})},render:function(){var self=this,o=this.options,combo=o.itemsCreator===BI.emptyFn?this._getSyncConfig():this._getAsyncConfig();return o.allowEdit||o.itemsCreator!==BI.emptyFn?{type:"bi.absolute",items:[{el:combo,left:0,right:0,top:0,bottom:0},{el:{type:"bi.trigger_icon_button",cls:"trigger-icon-button",ref:function(_ref){self.triggerBtn=_ref},width:o.height,height:o.height,handler:function(){self.combo.isViewVisible()?self.combo.hideView():self.combo.showView()}},right:0,bottom:0,top:0}]}:combo},_getBaseConfig:function(){var self=this,o=this.options;return{type:"bi.combo",container:o.container,adjustLength:2,ref:function(_ref){self.combo=_ref},popup:{el:{type:"bi.multilayer_single_tree_popup",isDefaultInit:o.isDefaultInit,itemsCreator:o.itemsCreator,items:o.items,ref:function(_ref){self.trigger&&self.trigger.getSearcher().setAdapter(_ref)},listeners:[{eventName:BI.MultiLayerSingleTreePopup.EVENT_CHANGE,action:function(){self.setValue(this.getValue()),self.combo.hideView(),self.fireEvent(BI.MultiLayerSingleTreeCombo.EVENT_CHANGE)}}]},value:o.value,maxHeight:400,minHeight:240}}},_getSearchConfig:function(){var self=this,o=this.options;return{el:{type:"bi.multilayer_single_tree_trigger",allowInsertValue:o.allowInsertValue,allowSearchValue:o.allowSearchValue,allowEdit:o.allowEdit,cls:"multilayer-single-tree-trigger",ref:function(_ref){self.trigger=_ref},watermark:o.watermark,items:o.items,itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,height:o.height-2,text:o.text,value:o.value,tipType:o.tipType,warningTitle:o.warningTitle,title:o.title,listeners:[{eventName:BI.MultiLayerSingleTreeTrigger.EVENT_CHANGE,action:function(){self.setValue(this.getValue()),self.combo.hideView(),self.fireEvent(BI.MultiLayerSingleTreeCombo.EVENT_CHANGE)}},{eventName:BI.MultiLayerSingleTreeTrigger.EVENT_FOCUS,action:function(){self.fireEvent(BI.MultiLayerSingleTreeCombo.EVENT_FOCUS)}},{eventName:BI.MultiLayerSingleTreeTrigger.EVENT_BLUR,action:function(){self.fireEvent(BI.MultiLayerSingleTreeCombo.EVENT_BLUR)}},{eventName:BI.MultiLayerSingleTreeTrigger.EVENT_SEARCHING,action:function(){self.fireEvent(BI.MultiLayerSingleTreeCombo.EVENT_SEARCHING)}},{eventName:BI.MultiLayerSingleTreeTrigger.EVENT_ADD_ITEM,action:function(){var value=self.trigger.getSearcher().getKeyword();self.combo.setValue([value]),self.combo.hideView()}}]},hideChecker:function(e){return 0===self.triggerBtn.element.find(e.target).length},listeners:[{eventName:BI.Combo.EVENT_AFTER_HIDEVIEW,action:function(){self.trigger.stopEditing()}}]}},_getSyncConfig:function(){var o=this.options,baseConfig=this._getBaseConfig();return BI.extend(baseConfig,o.allowEdit?this._getSearchConfig():{el:{type:"bi.single_tree_trigger",text:o.text,height:o.height,items:o.items,value:o.value}})},_getAsyncConfig:function(){var config=this._getBaseConfig();return BI.extend(config,this._getSearchConfig())},setValue:function(v){v=BI.isArray(v)?v:[v],this.combo.setValue(v)},getValue:function(){return this.combo.getValue()},populate:function(items){this.combo.populate(items)}}),BI.MultiLayerSingleTreeCombo.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiLayerSingleTreeCombo.EVENT_BLUR="EVENT_BLUR",BI.MultiLayerSingleTreeCombo.EVENT_FOCUS="EVENT_FOCUS",BI.MultiLayerSingleTreeCombo.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multilayer_single_tree_combo",BI.MultiLayerSingleTreeCombo),BI.MultiLayerSingleTreeInsertSearchPane=BI.inherit(BI.Widget,{props:function(){return{baseCls:"bi-multilayer-single-tree-popup",tipText:BI.i18nText("BI-No_Selected_Item"),isDefaultInit:!1,itemsCreator:BI.emptyFn,items:[],value:""}},render:function(){var self=this,o=this.options;return this.tree=BI.createWidget({type:"bi.multilayer_select_level_tree",isDefaultInit:o.isDefaultInit,items:o.items,itemsCreator:o.itemsCreator===BI.emptyFn?BI.emptyFn:function(op,callback){o.itemsCreator(op,function(res){callback(res),self.setKeyword(o.keywordGetter())})},keywordGetter:o.keywordGetter,value:o.value,scrollable:null,listeners:[{eventName:BI.Controller.EVENT_CHANGE,action:function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}},{eventName:BI.MultiLayerSelectLevelTree.EVENT_CHANGE,action:function(){self.fireEvent(BI.MultiLayerSingleTreeInsertSearchPane.EVENT_CHANGE)}}]}),{type:"bi.vertical",scrolly:!1,scrollable:!0,vgap:5,items:[{type:"bi.text_button",invisible:!0,text:BI.i18nText("BI-Basic_Click_To_Add_Text",""),height:24,cls:"bi-high-light",hgap:5,ref:function(_ref){self.addNotMatchTip=_ref},handler:function(){self.fireEvent(BI.MultiLayerSingleTreeInsertSearchPane.EVENT_ADD_ITEM,o.keywordGetter())}},this.tree]}},setKeyword:function(keyword){var showTip=BI.isEmptyArray(this.tree.getAllLeaves());this.addNotMatchTip.setVisible(showTip),showTip&&this.addNotMatchTip.setText(BI.i18nText("BI-Basic_Click_To_Add_Text",keyword))},getValue:function(){return this.tree.getValue()},setValue:function(v){v=BI.isArray(v)?v:[v],this.tree.setValue(v)},populate:function(items){this.tree.populate(items)}}),BI.MultiLayerSingleTreeInsertSearchPane.EVENT_ADD_ITEM="EVENT_ADD_ITEM",BI.MultiLayerSingleTreeInsertSearchPane.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multilayer_single_tree_insert_search_pane",BI.MultiLayerSingleTreeInsertSearchPane),BI.MultiLayerSingleLevelTree=BI.inherit(BI.Pane,{_defaultConfig:function(){return BI.extend(BI.MultiLayerSingleLevelTree.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multilayer-single-level-tree",isDefaultInit:!1,items:[],itemsCreator:BI.emptyFn,keywordGetter:BI.emptyFn,chooseType:BI.Selection.Single,scrollable:!0})},_init:function(){var o=this.options;BI.MultiLayerSingleLevelTree.superclass._init.apply(this,arguments),this.storeValue=o.value,this.initTree(this.options.items),this.check()},_formatItems:function(nodes,layer,pNode){var self=this,o=this.options,keyword=o.keywordGetter();return BI.each(nodes,function(i,node){var extend={};node.layer=layer,BI.isKey(node.id)||(node.id=BI.UUID()),node.keyword=node.keyword||keyword,extend.pNode=pNode,node.isParent===!0||node.parent===!0||BI.isNotEmptyArray(node.children)?(extend.type="bi.multilayer_single_tree_mid_plus_group_node",i===nodes.length-1&&(extend.type="bi.multilayer_single_tree_last_plus_group_node",extend.isLastNode=!0),0!==i||pNode||(extend.type="bi.multilayer_single_tree_first_plus_group_node"),0!==i||i!==nodes.length-1||pNode||(extend.type="bi.multilayer_single_tree_plus_group_node"),BI.defaults(node,extend),self._formatItems(node.children,layer+1,node)):(extend.type="bi.multilayer_single_tree_mid_tree_leaf_item",0!==i||pNode||(extend.type="bi.multilayer_single_tree_first_tree_leaf_item"),i===nodes.length-1&&(extend.type="bi.multilayer_single_tree_last_tree_leaf_item"),BI.defaults(node,extend))}),nodes},_assertId:function(sNodes){BI.each(sNodes,function(i,node){node.id=node.id||BI.UUID()})},initTree:function(nodes){var self=this,o=this.options,hasNext=!1;this.empty(),this._assertId(nodes),this.tree=BI.createWidget({type:"bi.custom_tree",cls:"tree-view display-table",expander:{isDefaultInit:o.isDefaultInit,el:{},popup:{type:"bi.custom_tree"}},items:this._formatItems(BI.Tree.transformToTreeFormat(nodes),0),value:o.value,itemsCreator:function(op,callback){1===op.times&&!op.node&&BI.nextTick(function(){self.loading()}),o.itemsCreator(op,function(ob){hasNext=ob.hasNext,1===op.times&&!op.node&&self._populate(ob.items),callback(self._formatItems(BI.Tree.transformToTreeFormat(ob.items),op.node?op.node.layer+1:0,op.node)),self.setValue(self.storeValue),1===op.times&&!op.node&&BI.nextTick(function(){self.loaded()})})},el:{type:"bi.loader",isDefaultInit:o.itemsCreator!==BI.emptyFn,el:{type:"bi.button_tree",chooseType:o.chooseType,behaviors:o.behaviors,layouts:[{type:"bi.vertical"}]},hasNext:function(){return hasNext}}}),this.tree.on(BI.Controller.EVENT_CHANGE,function(type,v){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&(self.setValue(v),self.fireEvent(BI.MultiLayerSingleLevelTree.EVENT_CHANGE,v))}),BI.createWidget({type:"bi.adaptive",element:this,scrollable:o.scrollable,items:[this.tree]})},_populate:function(){BI.MultiLayerSelectLevelTree.superclass.populate.apply(this,arguments)},populate:function(nodes){this._populate(nodes),BI.isNull(nodes)?this.tree.populate():this.tree.populate(this._formatItems(BI.Tree.transformToTreeFormat(nodes),0))},setValue:function(v){this.options.chooseType===BI.Selection.None||(this.storeValue=v,this.tree.setValue(v))},getValue:function(){return BI.isArray(this.storeValue)?this.storeValue:BI.isNull(this.storeValue)?[]:[this.storeValue]},getAllLeaves:function(){return this.tree.getAllLeaves()},getNodeById:function(id){return this.tree.getNodeById(id)},getNodeByValue:function(id){return this.tree.getNodeByValue(id)}}),BI.MultiLayerSingleLevelTree.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multilayer_single_level_tree",BI.MultiLayerSingleLevelTree),BI.MultiLayerSingleTreePopup=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiLayerSingleTreePopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multilayer-singletree-popup",tipText:BI.i18nText("BI-No_Selected_Item"),isDefaultInit:!1,itemsCreator:BI.emptyFn,items:[]})},_init:function(){BI.MultiLayerSingleTreePopup.superclass._init.apply(this,arguments);var self=this,o=this.options;this.tree=BI.createWidget({type:"bi.multilayer_single_level_tree",isDefaultInit:o.isDefaultInit,items:o.items,itemsCreator:o.itemsCreator,keywordGetter:o.keywordGetter,value:o.value,scrollable:null}),BI.createWidget({type:"bi.vertical",scrolly:!1,scrollable:!0,element:this,vgap:5,items:[this.tree]}),this.tree.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.tree.on(BI.MultiLayerSingleLevelTree.EVENT_CHANGE,function(){self.fireEvent(BI.MultiLayerSingleTreePopup.EVENT_CHANGE)})},getValue:function(){return this.tree.getValue()},setValue:function(v){v=BI.isArray(v)?v:[v],this.tree.setValue(v)},populate:function(items){this.tree.populate(items)}}),BI.MultiLayerSingleTreePopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multilayer_single_tree_popup",BI.MultiLayerSingleTreePopup),BI.MultiLayerSingleTreeTrigger=BI.inherit(BI.Trigger,{props:function(){return{extraCls:"bi-multi-layer-single-tree-trigger bi-border bi-focus-shadow",height:24,valueFormatter:function(v){return v},itemsCreator:BI.emptyFn,watermark:BI.i18nText("BI-Basic_Search"),allowSearchValue:!1}},render:function(){var self=this,o=this.options;o.itemsCreator===BI.emptyFn&&this._initData();var content={type:"bi.htape",items:[{el:{type:"bi.searcher",ref:function(){self.searcher=this},isAutoSearch:!1,el:{type:"bi.state_editor",ref:function(){self.editor=this},defaultText:o.text,text:this._digest(o.value),value:o.value,height:o.height,tipText:"",watermark:o.watermark,listeners:[{eventName:BI.StateEditor.EVENT_FOCUS,action:function(){self.fireEvent(BI.MultiLayerSingleTreeTrigger.EVENT_FOCUS)}},{eventName:BI.StateEditor.EVENT_BLUR,action:function(){self.fireEvent(BI.MultiLayerSingleTreeTrigger.EVENT_BLUR)}},{eventName:BI.StateEditor.EVENT_CHANGE,action:function(){self.fireEvent(BI.MultiLayerSingleTreeTrigger.EVENT_SEARCHING)}}]},popup:{type:o.allowInsertValue?"bi.multilayer_single_tree_insert_search_pane":"bi.multilayer_single_tree_popup",itemsCreator:o.itemsCreator===BI.emptyFn?BI.emptyFn:function(op,callback){op.keyword=self.editor.getValue(),o.itemsCreator(op,callback)},keywordGetter:function(){return self.editor.getValue()},cls:"bi-card",listeners:[{eventName:BI.MultiLayerSingleTreeInsertSearchPane.EVENT_ADD_ITEM,action:function(){self.options.text=self.getSearcher().getKeyword(),self.fireEvent(BI.MultiLayerSingleTreeTrigger.EVENT_ADD_ITEM)}}],ref:function(_ref){self.popup=_ref}},onSearch:function(obj,callback){var keyword=obj.keyword;o.itemsCreator===BI.emptyFn?(callback(self._getSearchItems(keyword)),o.allowInsertValue&&self.popup.setKeyword(keyword)):callback()},listeners:[{eventName:BI.Searcher.EVENT_CHANGE,action:function(){self.fireEvent(BI.MultiLayerSingleTreeTrigger.EVENT_CHANGE)}}]}},{el:{type:"bi.layout",width:24},width:24}]};return o.allowEdit?content:{type:"bi.absolute",items:[{el:content,left:0,right:0,top:0,bottom:0},{el:{type:"bi.layout"},left:0,right:24,top:0,bottom:0}]}},_initData:function(){var o=this.options;this.tree=new BI.Tree,this.nodes=BI.Tree.treeFormat(BI.deepClone(o.items)),this.tree.initTree(this.nodes)},_getSearchItems:function(keyword){var self=this,o=this.options,items=[];return this.tree.traverse(function(node){var find=BI.Func.getSearchResult(self.tree.isRoot(node)?[]:BI.concat([node.text],o.allowSearchValue?[node.value]:[]),keyword);if(find.find.length>0||find.match.length>0)return items.push(node),!0}),this._fillTreeStructure4Search(items,"id")},_createJson:function(node,open){return{id:node.id,pId:node.pId,text:node.text,value:node.value,isParent:BI.isNotEmptyArray(node.children),open:open}},_getChildren:function(node){var self=this;node.children=node.children||[];var nodes=[];return BI.each(node.children,function(idx,child){var children=self._getChildren(child);nodes=nodes.concat(children)}),node.children.concat(nodes)},_fillTreeStructure4Search:function(leaves){var self=this,result=[],queue=[];for(BI.each(leaves,function(idx,node){queue.push({pId:node.pId}),result.push(node),result=result.concat(self._getChildren(node))});BI.isNotEmptyArray(queue);){var node=queue.pop(),pNode=this.tree.search(this.tree.getRoot(),node.pId,"id");null!=pNode&&(pNode.open=!0,queue.push({pId:pNode.pId}),result.push(pNode))}return BI.uniqBy(BI.map(result,function(idx,node){return self._createJson(node,node.open)}),"id")},_digest:function(v){var o=this.options;if(o.itemsCreator===BI.emptyFn){var result=BI.find(o.items,function(i,item){return item.value===v});return BI.isNotNull(result)?result.text:o.text}return o.valueFormatter(v)},stopEditing:function(){this.searcher.stopSearch()},getSearcher:function(){return this.searcher},populate:function(items){this.options.items=items,this._initData()},setValue:function(v){this.editor.setState(this._digest(v[0]))},getValue:function(){return this.searcher.getValue()}}),BI.MultiLayerSingleTreeTrigger.EVENT_FOCUS="EVENT_FOCUS",BI.MultiLayerSingleTreeTrigger.EVENT_BLUR="EVENT_BLUR",BI.MultiLayerSingleTreeTrigger.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiLayerSingleTreeTrigger.EVENT_STOP="EVENT_STOP",BI.MultiLayerSingleTreeTrigger.EVENT_START="EVENT_START",BI.MultiLayerSingleTreeTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.MultiLayerSingleTreeTrigger.EVENT_ADD_ITEM="EVENT_ADD_ITEM",BI.shortcut("bi.multilayer_single_tree_trigger",BI.MultiLayerSingleTreeTrigger),BI.MultiLayerSingleTreeFirstPlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.MultiLayerSingleTreeFirstPlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-multilayer-single-tree-first-plus-group-node bi-list-item",layer:0,id:"",pId:"",open:!1,height:24})},_init:function(){BI.MultiLayerSingleTreeFirstPlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.node=this._createNode();for(var needBlankLayers=[],pNode=o.pNode;pNode;)pNode.isLastNode&&needBlankLayers.push(pNode.layer),pNode=pNode.pNode;var items=[];BI.count(0,o.layer,function(index){items.push({type:"bi.layout",cls:BI.contains(needBlankLayers,index)?"":"base-line-conn-background",width:12,height:o.height})}),items.push(this.node),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,12),items:[items]})},doRedMark:function(){this.node.doRedMark.apply(this.node,arguments)},unRedMark:function(){this.node.unRedMark.apply(this.node,arguments)},doClick:function(){BI.MultiLayerSingleTreeFirstPlusGroupNode.superclass.doClick.apply(this,arguments),this.node.setSelected(this.isSelected())},setOpened:function(v){BI.MultiLayerSingleTreeFirstPlusGroupNode.superclass.setOpened.apply(this,arguments),BI.isNotNull(this.node)&&this.node.setOpened(v)},_createNode:function(){var self=this,o=this.options;return BI.createWidget({type:"bi.first_plus_group_node",cls:"bi-list-item-none",logic:{dynamic:!0},id:o.id,pId:o.pId,open:o.open,isLastNode:o.isLastNode,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword,listeners:[{eventName:BI.Controller.EVENT_CHANGE,action:function(type){type!==BI.Events.CLICK&&self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}}]})}}),BI.shortcut("bi.multilayer_single_tree_first_plus_group_node",BI.MultiLayerSingleTreeFirstPlusGroupNode),BI.MultiLayerSingleTreeLastPlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.MultiLayerSingleTreeLastPlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-multilayer-single-tree-last-plus-group-node bi-list-item",layer:0,id:"",pId:"",open:!1,height:24})},_init:function(){BI.MultiLayerSingleTreeLastPlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.node=this._createNode();for(var needBlankLayers=[],pNode=o.pNode;pNode;)pNode.isLastNode&&needBlankLayers.push(pNode.layer),pNode=pNode.pNode;var items=[];BI.count(0,o.layer,function(index){items.push({type:"bi.layout",cls:BI.contains(needBlankLayers,index)?"":"base-line-conn-background",width:12,height:o.height})}),items.push(this.node),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,12),items:[items]})},doRedMark:function(){this.node.doRedMark.apply(this.node,arguments)},unRedMark:function(){this.node.unRedMark.apply(this.node,arguments)},doClick:function(){BI.MultiLayerSingleTreeLastPlusGroupNode.superclass.doClick.apply(this,arguments),this.node.setSelected(this.isSelected())},setOpened:function(v){BI.MultiLayerSingleTreeLastPlusGroupNode.superclass.setOpened.apply(this,arguments),BI.isNotNull(this.node)&&this.node.setOpened(v)},_createNode:function(){var self=this,o=this.options;return BI.createWidget({type:"bi.last_plus_group_node",cls:"bi-list-item-none",logic:{dynamic:!0},id:o.id,pId:o.pId,open:o.open,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword,listeners:[{eventName:BI.Controller.EVENT_CHANGE,action:function(type){type!==BI.Events.CLICK&&self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}}]})}}),BI.shortcut("bi.multilayer_single_tree_last_plus_group_node",BI.MultiLayerSingleTreeLastPlusGroupNode),BI.MultiLayerSingleTreeMidPlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.MultiLayerSingleTreeMidPlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-multilayer-single-tree-mid-plus-group-node bi-list-item",layer:0,id:"",pId:"",open:!1,height:24})},_init:function(){BI.MultiLayerSingleTreeMidPlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.node=this._createNode();for(var needBlankLayers=[],pNode=o.pNode;pNode;)pNode.isLastNode&&needBlankLayers.push(pNode.layer),pNode=pNode.pNode;var items=[];BI.count(0,o.layer,function(index){items.push({type:"bi.layout",cls:BI.contains(needBlankLayers,index)?"":"base-line-conn-background", +width:12,height:o.height})}),items.push(this.node),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,12),items:[items]})},doRedMark:function(){this.node.doRedMark.apply(this.node,arguments)},unRedMark:function(){this.node.unRedMark.apply(this.node,arguments)},doClick:function(){BI.MultiLayerSingleTreeMidPlusGroupNode.superclass.doClick.apply(this,arguments),this.node.setSelected(this.isSelected())},setOpened:function(v){BI.MultiLayerSingleTreeMidPlusGroupNode.superclass.setOpened.apply(this,arguments),BI.isNotNull(this.node)&&this.node.setOpened(v)},_createNode:function(){var self=this,o=this.options;return BI.createWidget({type:"bi.mid_plus_group_node",cls:"bi-list-item-none",logic:{dynamic:!0},id:o.id,pId:o.pId,open:o.open,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword,listeners:[{eventName:BI.Controller.EVENT_CHANGE,action:function(type){type!==BI.Events.CLICK&&self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}}]})}}),BI.shortcut("bi.multilayer_single_tree_mid_plus_group_node",BI.MultiLayerSingleTreeMidPlusGroupNode),BI.MultiLayerSingleTreePlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.MultiLayerSingleTreePlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-multilayer-single-tree-plus-group-node bi-list-item",layer:0,id:"",pId:"",open:!1,height:24})},_init:function(){BI.MultiLayerSingleTreePlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.node=this._createNode();for(var needBlankLayers=[],pNode=o.pNode;pNode;)pNode.isLastNode&&needBlankLayers.push(pNode.layer),pNode=pNode.pNode;var items=[];BI.count(0,o.layer,function(index){items.push({type:"bi.layout",cls:BI.contains(needBlankLayers,index)?"":"base-line-conn-background",width:12,height:o.height})}),items.push(this.node),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,12),items:[items]})},doRedMark:function(){this.node.doRedMark.apply(this.node,arguments)},unRedMark:function(){this.node.unRedMark.apply(this.node,arguments)},doClick:function(){BI.MultiLayerSingleTreePlusGroupNode.superclass.doClick.apply(this,arguments),this.node.setSelected(this.isSelected())},setOpened:function(v){BI.MultiLayerSingleTreePlusGroupNode.superclass.setOpened.apply(this,arguments),BI.isNotNull(this.node)&&this.node.setOpened(v)},_createNode:function(){var self=this,o=this.options;return BI.createWidget({type:"bi.plus_group_node",cls:"bi-list-item-none",logic:{dynamic:!0},id:o.id,pId:o.pId,open:o.open,isLastNode:o.isLastNode,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword,listeners:[{eventName:BI.Controller.EVENT_CHANGE,action:function(type){type!==BI.Events.CLICK&&self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}}]})}}),BI.shortcut("bi.multilayer_single_tree_plus_group_node",BI.MultiLayerSingleTreePlusGroupNode),BI.MultiLayerSingleTreeFirstTreeLeafItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.MultiLayerSingleTreeFirstTreeLeafItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-multilayer-single-tree-first-tree-leaf-item bi-list-item-active",logic:{dynamic:!1},layer:0,id:"",pId:"",height:24})},_init:function(){BI.MultiLayerSingleTreeFirstTreeLeafItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.item=BI.createWidget({type:"bi.first_tree_leaf_item",cls:"bi-list-item-none",logic:{dynamic:!0},id:o.id,pId:o.pId,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword}),this.item.on(BI.Controller.EVENT_CHANGE,function(type){type!==BI.Events.CLICK&&self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});for(var needBlankLayers=[],pNode=o.pNode;pNode;)pNode.isLastNode&&needBlankLayers.push(pNode.layer),pNode=pNode.pNode;var items=[];BI.count(0,o.layer,function(index){items.push({type:"bi.layout",cls:BI.contains(needBlankLayers,index)?"":"base-line-conn-background",width:12,height:o.height})}),items.push(this.item),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,12),items:[items]})},doHighLight:function(){this.item.doHighLight.apply(this.item,arguments)},unHighLight:function(){this.item.unHighLight.apply(this.item,arguments)},getId:function(){return this.options.id},getPId:function(){return this.options.pId},doClick:function(){BI.MultiLayerSingleTreeFirstTreeLeafItem.superclass.doClick.apply(this,arguments),this.item.setSelected(this.isSelected())},setSelected:function(v){BI.MultiLayerSingleTreeFirstTreeLeafItem.superclass.setSelected.apply(this,arguments),this.item.setSelected(v)}}),BI.shortcut("bi.multilayer_single_tree_first_tree_leaf_item",BI.MultiLayerSingleTreeFirstTreeLeafItem),BI.MultiLayerSingleTreeLastTreeLeafItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.MultiLayerSingleTreeLastTreeLeafItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-multilayer-single-tree-last-tree-leaf-item bi-list-item-active",logic:{dynamic:!1},layer:0,id:"",pId:"",height:24})},_init:function(){BI.MultiLayerSingleTreeLastTreeLeafItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.item=BI.createWidget({type:"bi.last_tree_leaf_item",cls:"bi-list-item-none",logic:{dynamic:!0},id:o.id,pId:o.pId,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword}),this.item.on(BI.Controller.EVENT_CHANGE,function(type){type!==BI.Events.CLICK&&self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});for(var needBlankLayers=[],pNode=o.pNode;pNode;)pNode.isLastNode&&needBlankLayers.push(pNode.layer),pNode=pNode.pNode;var items=[];BI.count(0,o.layer,function(index){items.push({type:"bi.layout",cls:BI.contains(needBlankLayers,index)?"":"base-line-conn-background",width:12,height:o.height})}),items.push(this.item),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,12),items:[items]})},doHighLight:function(){this.item.doHighLight.apply(this.item,arguments)},unHighLight:function(){this.item.unHighLight.apply(this.item,arguments)},getId:function(){return this.options.id},getPId:function(){return this.options.pId},doClick:function(){BI.MultiLayerSingleTreeLastTreeLeafItem.superclass.doClick.apply(this,arguments),this.item.setSelected(this.isSelected())},setSelected:function(v){BI.MultiLayerSingleTreeLastTreeLeafItem.superclass.setSelected.apply(this,arguments),this.item.setSelected(v)}}),BI.shortcut("bi.multilayer_single_tree_last_tree_leaf_item",BI.MultiLayerSingleTreeLastTreeLeafItem),BI.MultiLayerSingleTreeMidTreeLeafItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.MultiLayerSingleTreeMidTreeLeafItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-multilayer-single-tree-mid-tree-leaf-item bi-list-item-active",logic:{dynamic:!1},layer:0,id:"",pId:"",height:24})},_init:function(){BI.MultiLayerSingleTreeMidTreeLeafItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.item=BI.createWidget({type:"bi.mid_tree_leaf_item",cls:"bi-list-item-none",logic:{dynamic:!0},id:o.id,pId:o.pId,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword}),this.item.on(BI.Controller.EVENT_CHANGE,function(type){type!==BI.Events.CLICK&&self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});for(var needBlankLayers=[],pNode=o.pNode;pNode;)pNode.isLastNode&&needBlankLayers.push(pNode.layer),pNode=pNode.pNode;var items=[];BI.count(0,o.layer,function(index){items.push({type:"bi.layout",cls:BI.contains(needBlankLayers,index)?"":"base-line-conn-background",width:12,height:o.height})}),items.push(this.item),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,12),items:[items]})},doHighLight:function(){this.item.doHighLight.apply(this.item,arguments)},unHighLight:function(){this.item.unHighLight.apply(this.item,arguments)},getId:function(){return this.options.id},getPId:function(){return this.options.pId},doClick:function(){BI.MultiLayerSingleTreeMidTreeLeafItem.superclass.doClick.apply(this,arguments),this.item.setSelected(this.isSelected())},setSelected:function(v){BI.MultiLayerSingleTreeMidTreeLeafItem.superclass.setSelected.apply(this,arguments),this.item.setSelected(v)}}),BI.shortcut("bi.multilayer_single_tree_mid_tree_leaf_item",BI.MultiLayerSingleTreeMidTreeLeafItem),BI.MultiSelectCheckPane=BI.inherit(BI.Widget,{constants:{height:12,lgap:10,tgap:10,bgap:5},_defaultConfig:function(){return BI.extend(BI.MultiSelectCheckPane.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-check-pane bi-background",items:[],itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,onClickContinueSelect:BI.emptyFn})},_init:function(){BI.MultiSelectCheckPane.superclass._init.apply(this,arguments);var self=this,opts=this.options;this.storeValue=opts.value||{},this.display=BI.createWidget({type:"bi.display_selected_list",items:opts.items,itemsCreator:function(op,callback){return op=BI.extend(op||{},{selectedValues:self.storeValue.value}),self.storeValue.type===BI.Selection.Multi?void callback({items:BI.map(self.storeValue.value,function(i,v){var txt=opts.valueFormatter(v)||v;return{text:txt,value:v,title:txt}})}):void opts.itemsCreator(op,callback)}}),this.continueSelect=BI.createWidget({type:"bi.text_button",text:BI.i18nText("BI-Continue_Select"),cls:"multi-select-check-selected bi-high-light"}),this.continueSelect.on(BI.TextButton.EVENT_CHANGE,function(){opts.onClickContinueSelect()}),BI.createWidget({type:"bi.vtape",element:this,items:[{height:this.constants.height,el:{type:"bi.vertical_adapt",cls:"multi-select-continue-select",items:[{el:{type:"bi.label",text:BI.i18nText("BI-Selected_Data")},lgap:this.constants.lgap},{el:this.continueSelect,lgap:this.constants.lgap}]},tgap:this.constants.tgap},{height:"fill",el:this.display,tgap:this.constants.bgap}]})},setValue:function(v){this.storeValue=v||{}},empty:function(){this.display.empty()},populate:function(){this.display.populate.apply(this.display,arguments)}}),BI.shortcut("bi.multi_select_check_pane",BI.MultiSelectCheckPane),BI.DisplaySelectedList=BI.inherit(BI.Pane,{constants:{height:24,lgap:10},_defaultConfig:function(){return BI.extend(BI.DisplaySelectedList.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-display-list",itemsCreator:BI.emptyFn,items:[]})},_init:function(){BI.DisplaySelectedList.superclass._init.apply(this,arguments);var self=this,opts=this.options;this.hasNext=!1,this.button_group=BI.createWidget({type:"bi.list_pane",element:this,el:{type:"bi.loader",isDefaultInit:!1,logic:{dynamic:!0,scrolly:!0},items:this._createItems(opts.items),chooseType:BI.ButtonGroup.CHOOSE_TYPE_MULTI,layouts:[{type:"bi.vertical",lgap:10}]},itemsCreator:function(options,callback){opts.itemsCreator(options,function(ob){self.hasNext=!!ob.hasNext,callback(self._createItems(ob.items))})},hasNext:function(){return self.hasNext}})},_createItems:function(items){return BI.createItems(items,{type:"bi.icon_text_item",cls:"cursor-default check-font icon-size-12 display-list-item bi-tips",once:!0,invalid:!0,selected:!0,height:this.constants.height,logic:{dynamic:!0}})},empty:function(){this.button_group.empty()},populate:function(items){0===arguments.length?this.button_group.populate():this.button_group.populate(this._createItems(items))}}),BI.shortcut("bi.display_selected_list",BI.DisplaySelectedList),BI.MultiSelectCombo=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.MultiSelectCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-combo",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,height:24,attributes:{tabIndex:0},allowEdit:!0})},_init:function(){BI.MultiSelectCombo.superclass._init.apply(this,arguments);var self=this,o=this.options,assertShowValue=function(){BI.isKey(self._startValue)&&(self.storeValue.type===BI.Selection.All?BI.remove(self.storeValue.value,self._startValue):BI.pushDistinct(self.storeValue.value,self._startValue)),self.trigger.getSearcher().setState(self.storeValue),self.numberCounter.setButtonChecked(self.storeValue)};this.storeValue=o.value||{},this._assertValue(this.storeValue),this.requesting=!1,this.trigger=BI.createWidget({type:"bi.multi_select_trigger",allowEdit:o.allowEdit,height:o.height,text:o.text,masker:{offset:{left:0,top:0,right:0,bottom:25}},valueFormatter:o.valueFormatter,itemsCreator:BI.bind(this._itemsCreator4Trigger,this),value:this.storeValue}),this.trigger.on(BI.MultiSelectTrigger.EVENT_FOCUS,function(){self.fireEvent(BI.MultiSelectCombo.EVENT_FOCUS)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_BLUR,function(){self.fireEvent(BI.MultiSelectCombo.EVENT_BLUR)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_START,function(){self._setStartValue(""),this.getSearcher().setValue(self.storeValue)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP,function(){self._setStartValue(""),self.fireEvent(BI.MultiSelectCombo.EVENT_STOP)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_PAUSE,function(){if(this.getSearcher().hasMatched()){var keyword=this.getSearcher().getKeyword();self._join({type:BI.Selection.Multi,value:[keyword]},function(){self.combo.setValue(self.storeValue),self._setStartValue(keyword),assertShowValue(),self.populate(),self._setStartValue("")})}}),this.trigger.on(BI.MultiSelectTrigger.EVENT_SEARCHING,function(keywords){var last=BI.last(keywords);keywords=BI.initial(keywords||[]),keywords.length>0&&self._joinKeywords(keywords,function(){BI.isEndWithBlank(last)?(self.combo.setValue(self.storeValue),assertShowValue(),self.combo.populate(),self._setStartValue("")):(self.combo.setValue(self.storeValue),assertShowValue())}),self.fireEvent(BI.MultiSelectCombo.EVENT_SEARCHING)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_CHANGE,function(value,obj){obj instanceof BI.MultiSelectBar?self._joinAll(this.getValue(),function(){assertShowValue()}):self._join(this.getValue(),function(){assertShowValue()}),self.fireEvent(BI.MultiSelectCombo.EVENT_CLICK_ITEM)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW,function(){self.numberCounter.updateSelectedValue(self.storeValue)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_COUNTER_CLICK,function(){self.combo.isViewVisible()||self.combo.showView()}),this.combo=BI.createWidget({type:"bi.combo",toggle:!1,container:o.container,el:this.trigger,adjustLength:1,popup:{type:"bi.multi_select_popup_view",ref:function(){self.popup=this,self.trigger.setAdapter(this),self.numberCounter.setAdapter(this)},listeners:[{eventName:BI.MultiSelectPopupView.EVENT_CHANGE,action:function(){self.storeValue=this.getValue(),self._adjust(function(){assertShowValue()}),self.fireEvent(BI.MultiSelectCombo.EVENT_CLICK_ITEM)}},{eventName:BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM,action:function(){self._defaultState()}},{eventName:BI.MultiSelectPopupView.EVENT_CLICK_CLEAR,action:function(){self.setValue(),self._defaultState()}}],itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,onLoaded:function(){BI.nextTick(function(){self.combo.adjustWidth(),self.combo.adjustHeight(),self.numberCounter.adjustView(),self.trigger.getSearcher().adjustView()})}},value:o.value,hideChecker:function(e){return 0===triggerBtn.element.find(e.target).length&&0===self.numberCounter.element.find(e.target).length}}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){this.setValue(self.storeValue),BI.nextTick(function(){self.populate()})}),this.wants2Quit=!1,this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW,function(){self._stopEditing(),self.requesting===!0?self.wants2Quit=!0:self.fireEvent(BI.MultiSelectCombo.EVENT_CONFIRM)});var triggerBtn=BI.createWidget({type:"bi.trigger_icon_button",width:o.height,height:o.height,cls:"multi-select-trigger-icon-button"});triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE,function(){self.numberCounter.hideView(),self.combo.isViewVisible()?self.combo.hideView():self.combo.showView()}),this.numberCounter=BI.createWidget({type:"bi.multi_select_check_selected_switcher",masker:{offset:{left:0,top:0,right:0,bottom:25}},valueFormatter:o.valueFormatter,itemsCreator:BI.bind(this._itemsCreator4Trigger,this),value:this.storeValue}),this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE,function(){self.combo.isViewVisible()||self.combo.showView()}),this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW,function(){this.updateSelectedValue(self.storeValue)}),this.numberCounter.on(BI.Events.VIEW,function(b){BI.nextTick(function(){self.trigger.refreshPlaceHolderWidth(b===!0?self.numberCounter.element.outerWidth()+8:0)})}),this.trigger.element.click(function(e){self.trigger.element.find(e.target).length>0&&self.numberCounter.hideView()}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.combo,left:0,right:0,top:0,bottom:0},{el:triggerBtn,right:0,top:0,bottom:0},{el:{type:"bi.vertical_adapt",items:[this.numberCounter]},right:o.height,top:0,height:o.height}]})},_itemsCreator4Trigger:function(op,callback){var self=this,o=this.options;o.itemsCreator(op,function(res){1===op.times&&BI.isNotNull(op.keywords)&&self.trigger.setValue(BI.deepClone(self.getValue())),callback.apply(self,arguments)})},_stopEditing:function(){this.trigger.stopEditing(),this.numberCounter.hideView()},_defaultState:function(){this._stopEditing(),this.combo.hideView()},_assertValue:function(val){val||(val={}),val.type||(val.type=BI.Selection.Multi),val.value||(val.value=[])},_makeMap:function(values){return BI.makeObject(values||[])},_joinKeywords:function(keywords,callback){function digest(items){var selectedMap=self._makeMap(items);BI.each(keywords,function(i,val){BI.isNotNull(selectedMap[val])&&(self.storeValue.type===BI.Selection.Multi?BI.pushDistinct(self.storeValue.value,val):BI.remove(self.storeValue.value,val))}),self._adjust(callback)}var self=this,o=this.options;this._assertValue(this.storeValue),this.requesting=!0,o.itemsCreator({type:BI.MultiSelectCombo.REQ_GET_ALL_DATA,keywords:keywords},function(ob){var values=BI.map(ob.items,"value");digest(values)})},_joinAll:function(res,callback){var self=this,o=this.options;this._assertValue(res),this.requesting=!0,o.itemsCreator({type:BI.MultiSelectCombo.REQ_GET_ALL_DATA,keywords:[this.trigger.getKey()]},function(ob){var items=BI.map(ob.items,"value");if(self.storeValue.type===res.type){var change=!1,map=self._makeMap(self.storeValue.value);return BI.each(items,function(i,v){BI.isNotNull(map[v])&&(change=!0,self.storeValue.assist&&self.storeValue.assist.push(map[v]),delete map[v])}),change&&(self.storeValue.value=BI.values(map)),void self._adjust(callback)}var selectedMap=self._makeMap(self.storeValue.value),notSelectedMap=self._makeMap(res.value),newItems=[];BI.each(items,function(i,item){BI.isNotNull(selectedMap[items[i]])&&(self.storeValue.assist&&self.storeValue.assist.push(selectedMap[items[i]]),delete selectedMap[items[i]]),BI.isNull(notSelectedMap[items[i]])&&(BI.remove(self.storeValue.assist,item),newItems.push(item))}),self.storeValue.value=newItems.concat(BI.values(selectedMap)),self._adjust(callback)})},_adjust:function(callback){function adjust(){self.wants2Quit===!0&&(self.fireEvent(BI.MultiSelectCombo.EVENT_CONFIRM),self.wants2Quit=!1),self.requesting=!1}var self=this,o=this.options;adjust(),callback()},_join:function(res,callback){var self=this,o=this.options;if(this._assertValue(res),this._assertValue(this.storeValue),this.storeValue.type===res.type){var map=this._makeMap(this.storeValue.value);BI.each(res.value,function(i,v){map[v]||(self.storeValue.value.push(v),BI.remove(self.storeValue.assist,v),map[v]=v)});var change=!1;return BI.each(res.assist,function(i,v){BI.isNotNull(map[v])&&(change=!0,self.storeValue.assist&&self.storeValue.assist.push(map[v]),delete map[v])}),change&&(this.storeValue.value=BI.values(map)),void self._adjust(callback)}this._joinAll(res,callback)},_setStartValue:function(value){this._startValue=value,this.popup.setStartValue(value)},setValue:function(v){this.storeValue=v||{},this._assertValue(this.storeValue),this.combo.setValue(this.storeValue),this.numberCounter.setValue(this.storeValue)},getValue:function(){return BI.deepClone(this.storeValue)},populate:function(){this.combo.populate.apply(this.combo,arguments)}}),BI.extend(BI.MultiSelectCombo,{REQ_GET_DATA_LENGTH:1,REQ_GET_ALL_DATA:-1}),BI.MultiSelectCombo.EVENT_BLUR="EVENT_BLUR",BI.MultiSelectCombo.EVENT_FOCUS="EVENT_FOCUS",BI.MultiSelectCombo.EVENT_STOP="EVENT_STOP",BI.MultiSelectCombo.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiSelectCombo.EVENT_CLICK_ITEM="EVENT_CLICK_ITEM",BI.MultiSelectCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.multi_select_combo",BI.MultiSelectCombo),BI.MultiSelectInsertCombo=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.MultiSelectInsertCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-insert-combo",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,height:24,attributes:{tabIndex:0},allowEdit:!0})},_init:function(){BI.MultiSelectInsertCombo.superclass._init.apply(this,arguments);var self=this,o=this.options,assertShowValue=function(){BI.isKey(self._startValue)&&(self.storeValue.type===BI.Selection.All?BI.remove(self.storeValue.value,self._startValue):BI.pushDistinct(self.storeValue.value,self._startValue)),self.trigger.getSearcher().setState(self.storeValue),self.numberCounter.setButtonChecked(self.storeValue)};this.storeValue=o.value||{},this.requesting=!1,this.trigger=BI.createWidget({type:"bi.multi_select_insert_trigger",allowEdit:o.allowEdit,height:o.height,text:o.text,watermark:o.watermark,masker:{offset:{left:0,top:0,right:0,bottom:25}},valueFormatter:o.valueFormatter,itemsCreator:BI.bind(this._itemsCreator4Trigger,this),value:o.value}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_FOCUS,function(){self.fireEvent(BI.MultiSelectInsertCombo.EVENT_FOCUS)}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_BLUR,function(){self.fireEvent(BI.MultiSelectInsertCombo.EVENT_BLUR)}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_START,function(){self._setStartValue(""),this.getSearcher().setValue(self.storeValue)}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_STOP,function(){self._setStartValue(""),self.fireEvent(BI.MultiSelectInsertCombo.EVENT_STOP)}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_PAUSE,function(){this.getSearcher().hasMatched()&&self._addItem(assertShowValue)}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_ADD_ITEM,function(){this.getSearcher().hasMatched()||(self._addItem(assertShowValue),self._stopEditing())}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_SEARCHING,function(keywords){var last=BI.last(keywords);keywords=BI.initial(keywords||[]),keywords.length>0&&self._joinKeywords(keywords,function(){BI.isEndWithBlank(last)?(self.combo.setValue(self.storeValue),assertShowValue(),self.combo.populate(),self._setStartValue("")):(self.combo.setValue(self.storeValue),assertShowValue())}),self.fireEvent(BI.MultiSelectInsertCombo.EVENT_SEARCHING)}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_CHANGE,function(value,obj){obj instanceof BI.MultiSelectBar?self._joinAll(this.getValue(),function(){assertShowValue()}):self._join(this.getValue(),function(){assertShowValue()}),self.fireEvent(BI.MultiSelectInsertCombo.EVENT_CLICK_ITEM)}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW,function(){self.numberCounter.updateSelectedValue(self.storeValue)}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_COUNTER_CLICK,function(){self.combo.isViewVisible()||self.combo.showView()}),this.combo=BI.createWidget({type:"bi.combo",toggle:!1,el:this.trigger,adjustLength:1,container:o.container,popup:{type:"bi.multi_select_popup_view",ref:function(){self.popup=this,self.trigger.setAdapter(this),self.numberCounter.setAdapter(this)},listeners:[{eventName:BI.MultiSelectPopupView.EVENT_CHANGE,action:function(){self.storeValue=this.getValue(),self._adjust(function(){assertShowValue()}),self.fireEvent(BI.MultiSelectInsertCombo.EVENT_CLICK_ITEM)}},{eventName:BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM,action:function(){self._defaultState()}},{eventName:BI.MultiSelectPopupView.EVENT_CLICK_CLEAR,action:function(){self.setValue(),self._defaultState()}}],itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,onLoaded:function(){BI.nextTick(function(){self.combo.adjustWidth(),self.combo.adjustHeight(),self.numberCounter.adjustView(),self.trigger.getSearcher().adjustView()})}},value:o.value,hideChecker:function(e){return 0===triggerBtn.element.find(e.target).length&&0===self.numberCounter.element.find(e.target).length}}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){this.setValue(self.storeValue),BI.nextTick(function(){self.populate()})}),this.wants2Quit=!1,this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW,function(){self._stopEditing(),self.requesting===!0?self.wants2Quit=!0:self.fireEvent(BI.MultiSelectInsertCombo.EVENT_CONFIRM)});var triggerBtn=BI.createWidget({type:"bi.trigger_icon_button",width:o.height,height:o.height,cls:"multi-select-trigger-icon-button"});triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE,function(){self.numberCounter.hideView(),self.combo.isViewVisible()?self.combo.hideView():self.combo.showView()}),this.numberCounter=BI.createWidget({type:"bi.multi_select_check_selected_switcher",masker:{offset:{left:0,top:0,right:0,bottom:25}},valueFormatter:o.valueFormatter,itemsCreator:BI.bind(this._itemsCreator4Trigger,this),value:o.value}),this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE,function(){self.combo.isViewVisible()||self.combo.showView()}),this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW,function(){this.updateSelectedValue(self.storeValue)}),this.numberCounter.on(BI.Events.VIEW,function(b){BI.nextTick(function(){self.trigger.refreshPlaceHolderWidth(b===!0?self.numberCounter.element.outerWidth()+8:0)})}),this.trigger.element.click(function(e){self.trigger.element.find(e.target).length>0&&self.numberCounter.hideView()}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.combo,left:0,right:0,top:0,bottom:0},{el:triggerBtn,right:0,top:0,bottom:0},{el:{type:"bi.vertical_adapt",items:[this.numberCounter]},right:o.height,top:0,height:o.height}]})},_itemsCreator4Trigger:function(op,callback){var self=this,o=this.options;o.itemsCreator(op,function(res){1===op.times&&BI.isNotNull(op.keywords)&&self.trigger.setValue(BI.deepClone(self.getValue())),callback.apply(self,arguments)})},_addItem:function(assertShowValue){var self=this,keyword=this.trigger.getSearcher().getKeyword();this._join({type:BI.Selection.Multi,value:[keyword]},function(){self.storeValue.type===BI.Selection.Multi&&BI.pushDistinct(self.storeValue.value,keyword),self.combo.setValue(self.storeValue),self._setStartValue(keyword),assertShowValue(),self.populate(),self._setStartValue("")})},_stopEditing:function(){this.trigger.stopEditing(),this.numberCounter.hideView()},_defaultState:function(){this._stopEditing(),this.combo.hideView()},_assertValue:function(val){val||(val={}),val.type||(val.type=BI.Selection.Multi),val.value||(val.value=[])},_makeMap:function(values){return BI.makeObject(values||[])},_joinKeywords:function(keywords,callback){function digest(items){var selectedMap=self._makeMap(items);BI.each(keywords,function(i,val){BI.isNotNull(selectedMap[val])&&(self.storeValue.type===BI.Selection.Multi?BI.pushDistinct(self.storeValue.value,val):BI.remove(self.storeValue.value,val))}),self._adjust(callback)}var self=this,o=this.options;this._assertValue(this.storeValue),this.requesting=!0,o.itemsCreator({type:BI.MultiSelectInsertCombo.REQ_GET_ALL_DATA,keywords:keywords},function(ob){var values=BI.map(ob.items,"value");digest(values)})},_joinAll:function(res,callback){var self=this,o=this.options;this._assertValue(res),this.requesting=!0,o.itemsCreator({type:BI.MultiSelectInsertCombo.REQ_GET_ALL_DATA,keywords:[this.trigger.getKey()]},function(ob){var items=BI.map(ob.items,"value");if(self.storeValue.type===res.type){var change=!1,map=self._makeMap(self.storeValue.value);return BI.each(items,function(i,v){BI.isNotNull(map[v])&&(change=!0,self.storeValue.assist&&self.storeValue.assist.push(map[v]),delete map[v])}),change&&(self.storeValue.value=BI.values(map)),void self._adjust(callback)}var selectedMap=self._makeMap(self.storeValue.value),notSelectedMap=self._makeMap(res.value),newItems=[];BI.each(items,function(i,item){BI.isNotNull(selectedMap[items[i]])&&(self.storeValue.assist&&self.storeValue.assist.push(selectedMap[items[i]]),delete selectedMap[items[i]]),BI.isNull(notSelectedMap[items[i]])&&(BI.remove(self.storeValue.assist,item),newItems.push(item))}),self.storeValue.value=newItems.concat(BI.values(selectedMap)),self._adjust(callback)})},_adjust:function(callback){function adjust(){self.wants2Quit===!0&&(self.fireEvent(BI.MultiSelectInsertCombo.EVENT_CONFIRM),self.wants2Quit=!1),self.requesting=!1}var self=this,o=this.options;adjust(),callback()},_join:function(res,callback){var self=this,o=this.options;if(this._assertValue(res),this._assertValue(this.storeValue),this.storeValue.type===res.type){var map=this._makeMap(this.storeValue.value);BI.each(res.value,function(i,v){map[v]||(self.storeValue.value.push(v),BI.remove(self.storeValue.assist,v),map[v]=v)});var change=!1;return BI.each(res.assist,function(i,v){BI.isNotNull(map[v])&&(change=!0,self.storeValue.assist&&self.storeValue.assist.push(map[v]),delete map[v])}),change&&(this.storeValue.value=BI.values(map)),void self._adjust(callback)}this._joinAll(res,callback)},_setStartValue:function(value){this._startValue=value,this.popup.setStartValue(value)},setValue:function(v){this.storeValue=v||{},this._assertValue(this.storeValue),this.combo.setValue(this.storeValue),this.numberCounter.setValue(this.storeValue)},getValue:function(){return BI.deepClone(this.storeValue)},populate:function(){this.combo.populate.apply(this.combo,arguments)}}),BI.extend(BI.MultiSelectInsertCombo,{REQ_GET_DATA_LENGTH:1,REQ_GET_ALL_DATA:-1}),BI.MultiSelectInsertCombo.EVENT_FOCUS="EVENT_FOCUS",BI.MultiSelectInsertCombo.EVENT_BLUR="EVENT_BLUR",BI.MultiSelectInsertCombo.EVENT_STOP="EVENT_STOP",BI.MultiSelectInsertCombo.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiSelectInsertCombo.EVENT_CLICK_ITEM="EVENT_CLICK_ITEM",BI.MultiSelectInsertCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.multi_select_insert_combo",BI.MultiSelectInsertCombo),BI.MultiSelectInsertNoBarCombo=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.MultiSelectInsertNoBarCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-insert-combo",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,height:24,attributes:{tabIndex:0}})},_init:function(){BI.MultiSelectInsertNoBarCombo.superclass._init.apply(this,arguments);var self=this,o=this.options,assertShowValue=function(){BI.isKey(self._startValue)&&(self.storeValue.type===BI.Selection.All?BI.remove(self.storeValue.value,self._startValue):BI.pushDistinct(self.storeValue.value,self._startValue)),self.trigger.getSearcher().setState(self.storeValue),self.numberCounter.setButtonChecked(self.storeValue)};this.storeValue={type:BI.Selection.Multi,value:o.value||[]},this.requesting=!1,this.trigger=BI.createWidget({type:"bi.multi_select_insert_trigger",height:o.height,text:o.text,masker:{offset:{left:0,top:0,right:0,bottom:25}},valueFormatter:o.valueFormatter,itemsCreator:BI.bind(this._itemsCreator4Trigger,this),value:{type:BI.Selection.Multi,value:o.value}}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_START,function(){self._setStartValue(""),this.getSearcher().setValue(self.storeValue)}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_STOP,function(){self._setStartValue("")}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_PAUSE,function(){this.getSearcher().hasMatched()&&self._addItem(assertShowValue)}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_ADD_ITEM,function(){this.getSearcher().hasMatched()||(self._addItem(assertShowValue),self._stopEditing())}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_SEARCHING,function(keywords){ +var last=BI.last(keywords);keywords=BI.initial(keywords||[]),keywords.length>0&&self._joinKeywords(keywords,function(){BI.isEndWithBlank(last)?(self.combo.setValue(self.storeValue),assertShowValue(),self.combo.populate(),self._setStartValue("")):(self.combo.setValue(self.storeValue),assertShowValue())})}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_CHANGE,function(value,obj){obj instanceof BI.MultiSelectBar?self._joinAll(this.getValue(),function(){assertShowValue()}):self._join(this.getValue(),function(){assertShowValue()})}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW,function(){self.numberCounter.updateSelectedValue(self.storeValue)}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_COUNTER_CLICK,function(){self.combo.isViewVisible()||self.combo.showView()}),this.combo=BI.createWidget({type:"bi.combo",toggle:!1,container:o.container,el:this.trigger,adjustLength:1,popup:{type:"bi.multi_select_no_bar_popup_view",ref:function(){self.popup=this,self.trigger.setAdapter(this),self.numberCounter.setAdapter(this)},listeners:[{eventName:BI.MultiSelectPopupView.EVENT_CHANGE,action:function(){self.storeValue=this.getValue(),self._adjust(function(){assertShowValue()})}},{eventName:BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM,action:function(){self._defaultState()}},{eventName:BI.MultiSelectPopupView.EVENT_CLICK_CLEAR,action:function(){self.setValue(),self._defaultState()}}],itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,onLoaded:function(){BI.nextTick(function(){self.combo.adjustWidth(),self.combo.adjustHeight(),self.numberCounter.adjustView(),self.trigger.getSearcher().adjustView()})}},value:{type:BI.Selection.Multi,value:o.value},hideChecker:function(e){return 0===triggerBtn.element.find(e.target).length&&0===self.numberCounter.element.find(e.target).length}}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){this.setValue(self.storeValue),BI.nextTick(function(){self.populate()})}),this.wants2Quit=!1,this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW,function(){self._stopEditing(),self.requesting===!0?self.wants2Quit=!0:self.fireEvent(BI.MultiSelectInsertNoBarCombo.EVENT_CONFIRM)});var triggerBtn=BI.createWidget({type:"bi.trigger_icon_button",width:o.height,height:o.height,cls:"multi-select-trigger-icon-button"});triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE,function(){self.numberCounter.hideView(),self.combo.isViewVisible()?self.combo.hideView():self.combo.showView()}),this.numberCounter=BI.createWidget({type:"bi.multi_select_check_selected_switcher",masker:{offset:{left:0,top:0,right:0,bottom:25}},valueFormatter:o.valueFormatter,itemsCreator:BI.bind(this._itemsCreator4Trigger,this),value:{type:BI.Selection.Multi,value:o.value}}),this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE,function(){self.combo.isViewVisible()||self.combo.showView()}),this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW,function(){this.updateSelectedValue(self.storeValue)}),this.numberCounter.on(BI.Events.VIEW,function(b){BI.nextTick(function(){self.trigger.refreshPlaceHolderWidth(b===!0?self.numberCounter.element.outerWidth()+8:0)})}),this.trigger.element.click(function(e){self.trigger.element.find(e.target).length>0&&self.numberCounter.hideView()}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.combo,left:0,right:0,top:0,bottom:0},{el:triggerBtn,right:0,top:0,bottom:0},{el:{type:"bi.vertical_adapt",items:[this.numberCounter]},right:o.height,top:0,height:o.height}]})},_itemsCreator4Trigger:function(op,callback){var self=this,o=this.options;o.itemsCreator(op,function(res){1===op.times&&BI.isNotNull(op.keywords)&&self.trigger.setValue(BI.deepClone(self.getValue())),callback.apply(self,arguments)})},_addItem:function(assertShowValue){var self=this,keyword=this.trigger.getSearcher().getKeyword();this._join({type:BI.Selection.Multi,value:[keyword]},function(){self.storeValue.type===BI.Selection.Multi&&BI.pushDistinct(self.storeValue.value,keyword),self.combo.setValue(self.storeValue),self._setStartValue(keyword),assertShowValue(),self.populate(),self._setStartValue("")})},_stopEditing:function(){this.trigger.stopEditing(),this.numberCounter.hideView()},_defaultState:function(){this._stopEditing(),this.combo.hideView()},_assertValue:function(val){val||(val={}),val.type||(val.type=BI.Selection.Multi),val.value||(val.value=[])},_makeMap:function(values){return BI.makeObject(values||[])},_joinKeywords:function(keywords,callback){function digest(items){var selectedMap=self._makeMap(items);BI.each(keywords,function(i,val){BI.isNotNull(selectedMap[val])&&(self.storeValue.type===BI.Selection.Multi?BI.pushDistinct(self.storeValue.value,val):BI.remove(self.storeValue.value,val))}),self._adjust(callback)}var self=this,o=this.options;this._assertValue(this.storeValue),this.requesting=!0,o.itemsCreator({type:BI.MultiSelectInsertNoBarCombo.REQ_GET_ALL_DATA,keywords:keywords},function(ob){var values=BI.map(ob.items,"value");digest(values)})},_joinAll:function(res,callback){var self=this,o=this.options;this._assertValue(res),this.requesting=!0,o.itemsCreator({type:BI.MultiSelectInsertNoBarCombo.REQ_GET_ALL_DATA,keywords:[this.trigger.getKey()]},function(ob){var items=BI.map(ob.items,"value");if(self.storeValue.type===res.type){var change=!1,map=self._makeMap(self.storeValue.value);return BI.each(items,function(i,v){BI.isNotNull(map[v])&&(change=!0,self.storeValue.assist&&self.storeValue.assist.push(map[v]),delete map[v])}),change&&(self.storeValue.value=BI.values(map)),void self._adjust(callback)}var selectedMap=self._makeMap(self.storeValue.value),notSelectedMap=self._makeMap(res.value),newItems=[];BI.each(items,function(i,item){BI.isNotNull(selectedMap[items[i]])&&(self.storeValue.assist&&self.storeValue.assist.push(selectedMap[items[i]]),delete selectedMap[items[i]]),BI.isNull(notSelectedMap[items[i]])&&(BI.remove(self.storeValue.assist,item),newItems.push(item))}),self.storeValue.value=newItems.concat(BI.values(selectedMap)),self._adjust(callback)})},_adjust:function(callback){function adjust(){self.wants2Quit===!0&&(self.fireEvent(BI.MultiSelectInsertNoBarCombo.EVENT_CONFIRM),self.wants2Quit=!1),self.requesting=!1}var self=this,o=this.options;adjust(),callback()},_join:function(res,callback){var self=this,o=this.options;if(this._assertValue(res),this._assertValue(this.storeValue),this.storeValue.type===res.type){var map=this._makeMap(this.storeValue.value);BI.each(res.value,function(i,v){map[v]||(self.storeValue.value.push(v),BI.remove(self.storeValue.assist,v),map[v]=v)});var change=!1;return BI.each(res.assist,function(i,v){BI.isNotNull(map[v])&&(change=!0,self.storeValue.assist&&self.storeValue.assist.push(map[v]),delete map[v])}),change&&(this.storeValue.value=BI.values(map)),void self._adjust(callback)}this._joinAll(res,callback)},_setStartValue:function(value){this._startValue=value,this.popup.setStartValue(value)},setValue:function(v){this.storeValue={type:BI.Selection.Multi,value:v||[]},this.combo.setValue(this.storeValue),this.numberCounter.setValue(this.storeValue)},getValue:function(){return BI.deepClone(this.storeValue.value)},populate:function(){this.combo.populate.apply(this.combo,arguments)}}),BI.extend(BI.MultiSelectInsertNoBarCombo,{REQ_GET_DATA_LENGTH:1,REQ_GET_ALL_DATA:-1}),BI.MultiSelectInsertNoBarCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.multi_select_insert_no_bar_combo",BI.MultiSelectInsertNoBarCombo),BI.MultiSelectInsertTrigger=BI.inherit(BI.Trigger,{constants:{height:14,rgap:4,lgap:4},_defaultConfig:function(){return BI.extend(BI.MultiSelectInsertTrigger.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-trigger bi-border bi-border-radius",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,searcher:{},switcher:{},adapter:null,masker:{},allowEdit:!0})},_init:function(){BI.MultiSelectInsertTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options;o.height&&this.setHeight(o.height-2),this.searcher=BI.createWidget(o.searcher,{type:"bi.multi_select_insert_searcher",height:o.height,text:o.text,itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,watermark:o.watermark,popup:{},adapter:o.adapter,masker:o.masker,value:o.value}),this.searcher.on(BI.MultiSelectInsertSearcher.EVENT_START,function(){self.fireEvent(BI.MultiSelectInsertTrigger.EVENT_START)}),this.searcher.on(BI.MultiSelectInsertSearcher.EVENT_ADD_ITEM,function(){self.fireEvent(BI.MultiSelectInsertTrigger.EVENT_ADD_ITEM)}),this.searcher.on(BI.MultiSelectInsertSearcher.EVENT_PAUSE,function(){self.fireEvent(BI.MultiSelectInsertTrigger.EVENT_PAUSE)}),this.searcher.on(BI.MultiSelectInsertSearcher.EVENT_SEARCHING,function(){self.fireEvent(BI.MultiSelectInsertTrigger.EVENT_SEARCHING,arguments)}),this.searcher.on(BI.MultiSelectInsertSearcher.EVENT_STOP,function(){self.fireEvent(BI.MultiSelectInsertTrigger.EVENT_STOP)}),this.searcher.on(BI.MultiSelectInsertSearcher.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectInsertTrigger.EVENT_CHANGE,arguments)}),this.searcher.on(BI.MultiSelectInsertSearcher.EVENT_BLUR,function(){self.fireEvent(BI.MultiSelectInsertTrigger.EVENT_BLUR)}),this.searcher.on(BI.MultiSelectInsertSearcher.EVENT_FOCUS,function(){self.fireEvent(BI.MultiSelectInsertTrigger.EVENT_FOCUS)}),this.wrapNumberCounter=BI.createWidget({type:"bi.layout"}),this.wrapper=BI.createWidget({type:"bi.htape",element:this,items:[{el:this.searcher,width:"fill"},{el:this.wrapNumberCounter,width:0},{el:BI.createWidget(),width:24}]}),!o.allowEdit&&BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.layout"},left:0,right:24,top:0,bottom:0}]})},refreshPlaceHolderWidth:function(width){this.wrapper.attr("items")[1].width=width,this.wrapper.resize()},getSearcher:function(){return this.searcher},stopEditing:function(){this.searcher.stopSearch()},setAdapter:function(adapter){this.searcher.setAdapter(adapter)},setValue:function(ob){this.searcher.setValue(ob)},getKey:function(){return this.searcher.getKey()},getValue:function(){return this.searcher.getValue()}}),BI.MultiSelectInsertTrigger.EVENT_TRIGGER_CLICK="EVENT_TRIGGER_CLICK",BI.MultiSelectInsertTrigger.EVENT_COUNTER_CLICK="EVENT_COUNTER_CLICK",BI.MultiSelectInsertTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.MultiSelectInsertTrigger.EVENT_START="EVENT_START",BI.MultiSelectInsertTrigger.EVENT_STOP="EVENT_STOP",BI.MultiSelectInsertTrigger.EVENT_PAUSE="EVENT_PAUSE",BI.MultiSelectInsertTrigger.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiSelectInsertTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW="EVENT_BEFORE_COUNTER_POPUPVIEW",BI.MultiSelectInsertTrigger.EVENT_ADD_ITEM="EVENT_ADD_ITEM",BI.MultiSelectInsertTrigger.EVENT_FOCUS="EVENT_FOCUS",BI.MultiSelectInsertTrigger.EVENT_BLUR="EVENT_BLUR",BI.shortcut("bi.multi_select_insert_trigger",BI.MultiSelectInsertTrigger),BI.MultiSelectLoader=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiSelectLoader.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-loader",logic:{dynamic:!0},el:{height:400},valueFormatter:BI.emptyFn,itemsCreator:BI.emptyFn,onLoaded:BI.emptyFn})},_init:function(){BI.MultiSelectLoader.superclass._init.apply(this,arguments);var self=this,opts=this.options,hasNext=!1;this.storeValue=opts.value||{},this._assertValue(this.storeValue),this.button_group=BI.createWidget({type:"bi.select_list",logic:opts.logic,toolbar:{type:"bi.multi_select_bar",cls:"bi-list-item-active",iconWrapperWidth:36},el:BI.extend({onLoaded:opts.onLoaded,el:{type:"bi.loader",isDefaultInit:!1,logic:{dynamic:!0,scrolly:!0},el:{chooseType:BI.ButtonGroup.CHOOSE_TYPE_MULTI,behaviors:{redmark:function(){return!0}},layouts:[{type:"bi.vertical"}]}}},opts.el),itemsCreator:function(op,callback){var startValue=self._startValue;self.storeValue&&(op=BI.extend(op||{},{selectedValues:BI.isKey(startValue)&&self.storeValue.type===BI.Selection.Multi?self.storeValue.value.concat(startValue):self.storeValue.value})),opts.itemsCreator(op,function(ob){hasNext=ob.hasNext;var firstItems=[];if(1===op.times&&self.storeValue){var json=BI.map(self.storeValue.value,function(i,v){var txt=opts.valueFormatter(v)||v;return{text:txt,value:v,title:txt,selected:self.storeValue.type===BI.Selection.Multi}});if(BI.isKey(self._startValue)&&!BI.contains(self.storeValue.value,self._startValue)){var txt=opts.valueFormatter(startValue)||startValue;json.unshift({text:txt,value:startValue,title:txt,selected:!0})}firstItems=self._createItems(json)}callback(firstItems.concat(self._createItems(ob.items)),ob.keyword||""),1===op.times&&self.storeValue&&(BI.isKey(startValue)&&(self.storeValue.type===BI.Selection.All?BI.remove(self.storeValue.value,startValue):BI.pushDistinct(self.storeValue.value,startValue)),self.setValue(self.storeValue)),1===op.times&&self._scrollToTop()})},hasNext:function(){return hasNext},value:this.storeValue}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Top),BI.extend({scrolly:!0,vgap:5},opts.logic,{items:BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Top,this.button_group)})))),this.button_group.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.button_group.on(BI.SelectList.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectLoader.EVENT_CHANGE,arguments)})},_createItems:function(items){return BI.createItems(items,{type:"bi.multi_select_item",logic:this.options.logic,cls:"bi-list-item-active",height:24,selected:this.isAllSelected(),iconWrapperWidth:36})},_scrollToTop:function(){var self=this;BI.delay(function(){self.button_group.element.scrollTop(0)},30)},isAllSelected:function(){return this.button_group.isAllSelected()},_assertValue:function(val){val||(val={}),val.type||(val.type=BI.Selection.Multi),val.value||(val.value=[])},setStartValue:function(v){this._startValue=v},setValue:function(v){this.storeValue=v||{},this._assertValue(this.storeValue),this.button_group.setValue(this.storeValue)},getValue:function(){return this.button_group.getValue()},getAllButtons:function(){return this.button_group.getAllButtons()},empty:function(){this.button_group.empty()},populate:function(items){arguments[0]=this._createItems(items),this.button_group.populate.apply(this.button_group,arguments)},resetHeight:function(h){this.button_group.resetHeight(h-10)},resetWidth:function(w){this.button_group.resetWidth(w)}}),BI.MultiSelectLoader.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_select_loader",BI.MultiSelectLoader),BI.MultiSelectNoBarLoader=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiSelectNoBarLoader.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-loader",logic:{dynamic:!0},el:{height:400},valueFormatter:BI.emptyFn,itemsCreator:BI.emptyFn,onLoaded:BI.emptyFn})},_init:function(){BI.MultiSelectNoBarLoader.superclass._init.apply(this,arguments);var self=this,opts=this.options,hasNext=!1;this.storeValue=opts.value||{},this._assertValue(this.storeValue),this.button_group=BI.createWidget(BI.extend({type:"bi.list_pane",onLoaded:opts.onLoaded,el:{type:"bi.loader",isDefaultInit:!1,logic:{dynamic:!0,scrolly:!0},el:{chooseType:BI.ButtonGroup.CHOOSE_TYPE_MULTI,behaviors:{redmark:function(){return!0}},layouts:[{type:"bi.vertical"}]}},itemsCreator:function(op,callback){var startValue=self._startValue;self.storeValue&&(op=BI.extend(op||{},{selectedValues:BI.isKey(startValue)&&self.storeValue.type===BI.Selection.Multi?self.storeValue.value.concat(startValue):self.storeValue.value})),opts.itemsCreator(op,function(ob){hasNext=ob.hasNext;var firstItems=[];if(1===op.times&&self.storeValue){var json=BI.map(self.storeValue.value,function(i,v){var txt=opts.valueFormatter(v)||v;return{text:txt,value:v,title:txt,selected:self.storeValue.type===BI.Selection.Multi}});if(BI.isKey(self._startValue)&&!BI.contains(self.storeValue.value,self._startValue)){var txt=opts.valueFormatter(startValue)||startValue;json.unshift({text:txt,value:startValue,title:txt,selected:!0})}firstItems=self._createItems(json)}callback(firstItems.concat(self._createItems(ob.items)),ob.keyword||""),1===op.times&&self.storeValue&&(BI.isKey(startValue)&&(self.storeValue.type===BI.Selection.All?BI.remove(self.storeValue.value,startValue):BI.pushDistinct(self.storeValue.value,startValue)),self.setValue(self.storeValue)),1===op.times&&self._scrollToTop()})},hasNext:function(){return hasNext},value:this.storeValue},opts.el)),BI.createWidget({type:"bi.vertical",element:this,items:[this.button_group],vgap:5}),this.button_group.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.button_group.on(BI.SelectList.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectNoBarLoader.EVENT_CHANGE,arguments)})},_createItems:function(items){return BI.createItems(items,{type:"bi.multi_select_item",cls:"bi-list-item-active",logic:this.options.logic,height:24,iconWrapperWidth:36})},_scrollToTop:function(){var self=this;BI.delay(function(){self.button_group.element.scrollTop(0)},30)},_assertValue:function(val){val||(val={}),val.type||(val.type=BI.Selection.Multi),val.value||(val.value=[])},setStartValue:function(v){this._startValue=v},setValue:function(v){this.storeValue=v||{},this._assertValue(this.storeValue),this.button_group.setValue(this.storeValue.value)},getValue:function(){return{type:BI.Selection.Multi,value:this.button_group.getValue()}},getAllButtons:function(){return this.button_group.getAllButtons()},empty:function(){this.button_group.empty()},populate:function(items){arguments[0]=this._createItems(items),this.button_group.populate.apply(this.button_group,arguments)},resetHeight:function(h){this.button_group.element.css({"max-height":h+"px"})},resetWidth:function(){}}),BI.MultiSelectNoBarLoader.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_select_no_bar_loader",BI.MultiSelectNoBarLoader),BI.MultiSelectPopupView=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiSelectPopupView.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-popup-view",maxWidth:"auto",minWidth:135,maxHeight:400,valueFormatter:BI.emptyFn,itemsCreator:BI.emptyFn,onLoaded:BI.emptyFn})},_init:function(){BI.MultiSelectPopupView.superclass._init.apply(this,arguments);var self=this,opts=this.options;this.loader=BI.createWidget({type:"bi.multi_select_loader",itemsCreator:opts.itemsCreator,valueFormatter:opts.valueFormatter,onLoaded:opts.onLoaded,value:opts.value}),this.popupView=BI.createWidget({type:"bi.multi_popup_view",stopPropagation:!1,maxWidth:opts.maxWidth,minWidth:opts.minWidth,maxHeight:opts.maxHeight,element:this,buttons:[BI.i18nText("BI-Basic_Clears"),BI.i18nText("BI-Basic_Sure")],el:this.loader,value:opts.value}),this.popupView.on(BI.MultiPopupView.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectPopupView.EVENT_CHANGE)}),this.popupView.on(BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON,function(index){switch(index){case 0:self.fireEvent(BI.MultiSelectPopupView.EVENT_CLICK_CLEAR);break;case 1:self.fireEvent(BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM)}})},isAllSelected:function(){return this.loader.isAllSelected()},setStartValue:function(v){this.loader.setStartValue(v)},setValue:function(v){this.popupView.setValue(v)},getValue:function(){return this.popupView.getValue()},populate:function(items){this.popupView.populate.apply(this.popupView,arguments)},resetHeight:function(h){this.popupView.resetHeight(h)},resetWidth:function(w){this.popupView.resetWidth(w)}}),BI.MultiSelectPopupView.EVENT_CHANGE="EVENT_CHANGE",BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM="EVENT_CLICK_CONFIRM",BI.MultiSelectPopupView.EVENT_CLICK_CLEAR="EVENT_CLICK_CLEAR",BI.shortcut("bi.multi_select_popup_view",BI.MultiSelectPopupView),BI.MultiSelectNoBarPopupView=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiSelectNoBarPopupView.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-popup-view",maxWidth:"auto",minWidth:135,maxHeight:400,valueFormatter:BI.emptyFn,itemsCreator:BI.emptyFn,onLoaded:BI.emptyFn})},_init:function(){BI.MultiSelectNoBarPopupView.superclass._init.apply(this,arguments);var self=this,opts=this.options;this.loader=BI.createWidget({type:"bi.multi_select_no_bar_loader",itemsCreator:opts.itemsCreator,valueFormatter:opts.valueFormatter,onLoaded:opts.onLoaded,value:opts.value}),this.popupView=BI.createWidget({type:"bi.multi_popup_view",stopPropagation:!1,maxWidth:opts.maxWidth,minWidth:opts.minWidth,maxHeight:opts.maxHeight,element:this,buttons:[BI.i18nText("BI-Basic_Clears"),BI.i18nText("BI-Basic_Sure")],el:this.loader,value:opts.value}),this.popupView.on(BI.MultiPopupView.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectNoBarPopupView.EVENT_CHANGE)}),this.popupView.on(BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON,function(index){switch(index){case 0:self.fireEvent(BI.MultiSelectNoBarPopupView.EVENT_CLICK_CLEAR);break;case 1:self.fireEvent(BI.MultiSelectNoBarPopupView.EVENT_CLICK_CONFIRM)}})},setStartValue:function(v){this.loader.setStartValue(v)},setValue:function(v){this.popupView.setValue(v)},getValue:function(){return this.popupView.getValue()},populate:function(items){this.popupView.populate.apply(this.popupView,arguments)},resetHeight:function(h){this.popupView.resetHeight(h)},resetWidth:function(w){this.popupView.resetWidth(w)}}),BI.MultiSelectNoBarPopupView.EVENT_CHANGE="EVENT_CHANGE",BI.MultiSelectNoBarPopupView.EVENT_CLICK_CONFIRM="EVENT_CLICK_CONFIRM",BI.MultiSelectNoBarPopupView.EVENT_CLICK_CLEAR="EVENT_CLICK_CLEAR",BI.shortcut("bi.multi_select_no_bar_popup_view",BI.MultiSelectNoBarPopupView),BI.MultiSelectTrigger=BI.inherit(BI.Trigger,{constants:{height:14,rgap:4,lgap:4},_defaultConfig:function(){return BI.extend(BI.MultiSelectTrigger.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-trigger bi-border bi-border-radius",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,searcher:{},switcher:{},adapter:null,masker:{},allowEdit:!0})},_init:function(){BI.MultiSelectTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options;o.height&&this.setHeight(o.height-2),this.searcher=BI.createWidget(o.searcher,{type:"bi.multi_select_searcher",height:o.height,text:o.text,itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,watermark:o.watermark,popup:{},adapter:o.adapter,masker:o.masker,value:o.value}),this.searcher.on(BI.MultiSelectSearcher.EVENT_START,function(){self.fireEvent(BI.MultiSelectTrigger.EVENT_START)}),this.searcher.on(BI.MultiSelectSearcher.EVENT_PAUSE,function(){self.fireEvent(BI.MultiSelectTrigger.EVENT_PAUSE)}),this.searcher.on(BI.MultiSelectSearcher.EVENT_SEARCHING,function(){self.fireEvent(BI.MultiSelectTrigger.EVENT_SEARCHING,arguments)}),this.searcher.on(BI.MultiSelectSearcher.EVENT_STOP,function(){self.fireEvent(BI.MultiSelectTrigger.EVENT_STOP)}),this.searcher.on(BI.MultiSelectSearcher.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectTrigger.EVENT_CHANGE,arguments)}),this.searcher.on(BI.MultiSelectSearcher.EVENT_BLUR,function(){self.fireEvent(BI.MultiSelectTrigger.EVENT_BLUR)}),this.searcher.on(BI.MultiSelectSearcher.EVENT_FOCUS,function(){self.fireEvent(BI.MultiSelectTrigger.EVENT_FOCUS)}),this.wrapNumberCounter=BI.createWidget({type:"bi.layout"}),this.wrapper=BI.createWidget({type:"bi.htape",element:this,items:[{el:this.searcher,width:"fill"},{el:this.wrapNumberCounter,width:0},{el:BI.createWidget(),width:24}]}),!o.allowEdit&&BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.layout"},left:0,right:24,top:0,bottom:0}]})},refreshPlaceHolderWidth:function(width){this.wrapper.attr("items")[1].width=width,this.wrapper.resize()},getSearcher:function(){return this.searcher},stopEditing:function(){this.searcher.stopSearch()},setAdapter:function(adapter){this.searcher.setAdapter(adapter)},setValue:function(ob){this.searcher.setValue(ob)},getKey:function(){return this.searcher.getKey()},getValue:function(){return this.searcher.getValue()}}),BI.MultiSelectTrigger.EVENT_TRIGGER_CLICK="EVENT_TRIGGER_CLICK",BI.MultiSelectTrigger.EVENT_COUNTER_CLICK="EVENT_COUNTER_CLICK",BI.MultiSelectTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.MultiSelectTrigger.EVENT_START="EVENT_START",BI.MultiSelectTrigger.EVENT_STOP="EVENT_STOP",BI.MultiSelectTrigger.EVENT_PAUSE="EVENT_PAUSE",BI.MultiSelectTrigger.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW="EVENT_BEFORE_COUNTER_POPUPVIEW",BI.MultiSelectTrigger.EVENT_BLUR="EVENT_BLUR",BI.MultiSelectTrigger.EVENT_FOCUS="EVENT_FOCUS",BI.shortcut("bi.multi_select_trigger",BI.MultiSelectTrigger),BI.MultiSelectSearchInsertPane=BI.inherit(BI.Widget,{constants:{height:24,lgap:10,tgap:5},_defaultConfig:function(){return BI.extend(BI.MultiSelectSearchInsertPane.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-search-pane bi-card",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,keywordGetter:BI.emptyFn})},_init:function(){BI.MultiSelectSearchInsertPane.superclass._init.apply(this,arguments);var self=this,o=this.options;this.tooltipClick=BI.createWidget({type:"bi.label",invisible:!0,text:BI.i18nText("BI-Click_Blank_To_Select"),cls:"multi-select-toolbar",height:this.constants.height}),this.addNotMatchTip=BI.createWidget({type:"bi.text_button",invisible:!0,text:BI.i18nText("BI-Basic_Click_To_Add_Text",""),height:this.constants.height,cls:"bi-high-light",hgap:5,handler:function(){self.fireEvent(BI.MultiSelectSearchInsertPane.EVENT_ADD_ITEM,o.keywordGetter())}}),this.loader=BI.createWidget({type:"bi.multi_select_search_loader",keywordGetter:o.keywordGetter,valueFormatter:o.valueFormatter,itemsCreator:function(op,callback){o.itemsCreator.apply(self,[op,function(res){callback(res),self.setKeyword(o.keywordGetter())}])},value:o.value}),this.loader.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.resizer=BI.createWidget({type:"bi.vtape",element:this,items:[{type:"bi.vertical",items:[this.tooltipClick,this.addNotMatchTip],height:this.constants.height},{el:this.loader}]})},setKeyword:function(keyword){var btn,isMatchTipVisible=this.loader.getAllButtons().length>0&&(btn=this.loader.getAllButtons()[0])&&keyword===btn.getValue();this.tooltipClick.setVisible(isMatchTipVisible),this.addNotMatchTip.setVisible(!isMatchTipVisible),!isMatchTipVisible&&this.addNotMatchTip.setText(BI.i18nText("BI-Basic_Click_To_Add_Text",keyword))},isAllSelected:function(){return this.loader.isAllSelected()},hasMatched:function(){return this.tooltipClick.isVisible()},setValue:function(v){this.loader.setValue(v)},getValue:function(){return this.loader.getValue()},empty:function(){this.loader.empty()},populate:function(items){this.loader.populate.apply(this.loader,arguments)}}),BI.MultiSelectSearchInsertPane.EVENT_CHANGE="EVENT_CHANGE",BI.MultiSelectSearchInsertPane.EVENT_ADD_ITEM="EVENT_ADD_ITEM",BI.shortcut("bi.multi_select_search_insert_pane",BI.MultiSelectSearchInsertPane),BI.MultiSelectSearchLoader=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiSelectSearchLoader.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-search-loader",itemsCreator:BI.emptyFn,keywordGetter:BI.emptyFn,valueFormatter:BI.emptyFn})},_init:function(){BI.MultiSelectSearchLoader.superclass._init.apply(this,arguments);var self=this,opts=this.options,hasNext=!1;this.storeValue=BI.deepClone(opts.value),this.button_group=BI.createWidget({type:"bi.select_list",toolbar:{type:"bi.multi_select_bar",cls:"bi-list-item-active",iconWrapperWidth:36},element:this,logic:{dynamic:!1},value:opts.value,el:{tipText:BI.i18nText("BI-No_Select"),el:{type:"bi.loader",isDefaultInit:!1,logic:{dynamic:!0,scrolly:!0},el:{chooseType:BI.ButtonGroup.CHOOSE_TYPE_MULTI,behaviors:{redmark:function(){return!0}},layouts:[{type:"bi.vertical"}]}}},itemsCreator:function(op,callback){self.storeValue&&(op=BI.extend(op||{},{selectedValues:self.storeValue.value})),opts.itemsCreator(op,function(ob){var keyword=ob.keyword=opts.keywordGetter();hasNext=ob.hasNext;var firstItems=[];if(1===op.times&&self.storeValue){var json=self._filterValues(self.storeValue);firstItems=self._createItems(json)}callback(firstItems.concat(self._createItems(ob.items)),keyword),1===op.times&&self.storeValue&&self.setValue(self.storeValue)})},hasNext:function(){return hasNext}}),this.button_group.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.button_group.on(BI.SelectList.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectSearchLoader.EVENT_CHANGE,arguments)})},_createItems:function(items){return BI.createItems(items,{type:"bi.multi_select_item",logic:{dynamic:!1},height:24,selected:this.isAllSelected(),cls:"bi-list-item-active",iconWrapperWidth:36})},isAllSelected:function(){return this.button_group.isAllSelected()},_filterValues:function(src){var o=this.options,keyword=o.keywordGetter(),values=BI.deepClone(src.value)||[],newValues=BI.map(values,function(i,v){return{text:o.valueFormatter(v)||v,value:v}});if(BI.isKey(keyword)){var search=BI.Func.getSearchResult(newValues,keyword);values=search.match.concat(search.find)}return BI.map(values,function(i,v){return{text:v.text,title:v.text,value:v.value,selected:src.type===BI.Selection.All}})},setValue:function(v){this.storeValue=BI.deepClone(v),this.button_group.setValue(v)},getValue:function(){return this.button_group.getValue()},getAllButtons:function(){return this.button_group.getAllButtons()},empty:function(){this.button_group.empty()},populate:function(items){this.button_group.populate.apply(this.button_group,arguments)},resetHeight:function(h){this.button_group.resetHeight(h)},resetWidth:function(w){this.button_group.resetWidth(w)}}),BI.MultiSelectSearchLoader.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_select_search_loader",BI.MultiSelectSearchLoader),BI.MultiSelectSearchPane=BI.inherit(BI.Widget,{constants:{height:24,lgap:10,tgap:5},_defaultConfig:function(){return BI.extend(BI.MultiSelectSearchPane.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-search-pane bi-card",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,keywordGetter:BI.emptyFn})},_init:function(){BI.MultiSelectSearchPane.superclass._init.apply(this,arguments);var self=this,o=this.options;this.tooltipClick=BI.createWidget({type:"bi.label",invisible:!0,text:BI.i18nText("BI-Click_Blank_To_Select"),cls:"multi-select-toolbar",height:this.constants.height}),this.loader=BI.createWidget({type:"bi.multi_select_search_loader",keywordGetter:o.keywordGetter,valueFormatter:o.valueFormatter,itemsCreator:function(op,callback){o.itemsCreator.apply(self,[op,function(res){callback(res),self.setKeyword(o.keywordGetter())}])},value:o.value}),this.loader.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.resizer=BI.createWidget({type:"bi.vtape",element:this,items:[{el:this.tooltipClick,height:0},{el:this.loader}]}),this.tooltipClick.setVisible(!1)},setKeyword:function(keyword){var btn,isVisible=this.loader.getAllButtons().length>0&&(btn=this.loader.getAllButtons()[0])&&keyword===btn.getValue();isVisible!==this.tooltipClick.isVisible()&&(this.tooltipClick.setVisible(isVisible),this.resizer.attr("items")[0].height=isVisible?this.constants.height:0,this.resizer.resize())},isAllSelected:function(){return this.loader.isAllSelected()},hasMatched:function(){return this.tooltipClick.isVisible()},setValue:function(v){this.loader.setValue(v)},getValue:function(){return this.loader.getValue()},empty:function(){this.loader.empty()},populate:function(items){this.loader.populate.apply(this.loader,arguments)}}),BI.MultiSelectSearchPane.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_select_search_pane",BI.MultiSelectSearchPane),BI.MultiSelectCheckSelectedButton=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.MultiSelectCheckSelectedButton.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-check-selected-button", +itemsCreator:BI.emptyFn})},_init:function(){BI.MultiSelectCheckSelectedButton.superclass._init.apply(this,arguments);var self=this,o=this.options;this.numberCounter=BI.createWidget({type:"bi.text_button",element:this,hgap:4,text:"0",textAlign:"center",textHeight:16,cls:"bi-high-light-background count-tip"}),this.numberCounter.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.numberCounter.on(BI.TextButton.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectCheckSelectedButton.EVENT_CHANGE,arguments)}),this.numberCounter.element.hover(function(){self.numberCounter.setTag(self.numberCounter.getText()),self.numberCounter.setText(BI.i18nText("BI-Check_Selected"))},function(){self.numberCounter.setText(self.numberCounter.getTag())}),this.setVisible(!1),BI.isNotNull(o.value)&&this.setValue(o.value)},setValue:function(ob){var self=this,o=this.options;return ob||(ob={}),ob.type||(ob.type=BI.Selection.Multi),ob.value||(ob.value=[]),ob.type===BI.Selection.All?void o.itemsCreator({type:BI.MultiSelectCombo.REQ_GET_DATA_LENGTH},function(res){var length=res.count-ob.value.length;BI.nextTick(function(){self.numberCounter.setText(length),self.setVisible(length>0)})}):void BI.nextTick(function(){self.numberCounter.setText(ob.value.length),self.setVisible(ob.value.length>0)})},getValue:function(){}}),BI.MultiSelectCheckSelectedButton.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_select_check_selected_button",BI.MultiSelectCheckSelectedButton),BI.MultiSelectEditor=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiSelectEditor.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-editor",el:{},watermark:BI.i18nText("BI-Basic_Search")})},_init:function(){BI.MultiSelectEditor.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget(o.el,{type:"bi.state_editor",element:this,height:o.height,watermark:o.watermark,allowBlank:!0,value:o.value,defaultText:o.text,text:o.text,tipType:o.tipType,warningTitle:o.warningTitle}),this.editor.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editor.on(BI.StateEditor.EVENT_PAUSE,function(){self.fireEvent(BI.MultiSelectEditor.EVENT_PAUSE)}),this.editor.on(BI.StateEditor.EVENT_FOCUS,function(){self.fireEvent(BI.MultiSelectEditor.EVENT_FOCUS)}),this.editor.on(BI.StateEditor.EVENT_BLUR,function(){self.fireEvent(BI.MultiSelectEditor.EVENT_BLUR)})},focus:function(){this.editor.focus()},blur:function(){this.editor.blur()},setState:function(state){this.editor.setState(state)},setValue:function(v){this.editor.setValue(v)},setTipType:function(v){this.editor.setTipType(v)},getValue:function(){var v=this.editor.getState();return BI.isArray(v)&&v.length>0?v[v.length-1]:""},getKeywords:function(){var val=this.editor.getLastChangedValue(),keywords=val.match(/[\S]+/g);return BI.isEndWithBlank(val)?keywords.concat([" "]):keywords},populate:function(items){}}),BI.MultiSelectEditor.EVENT_FOCUS="EVENT_FOCUS",BI.MultiSelectEditor.EVENT_BLUR="EVENT_BLUR",BI.MultiSelectEditor.EVENT_PAUSE="EVENT_PAUSE",BI.shortcut("bi.multi_select_editor",BI.MultiSelectEditor),BI.MultiSelectInsertSearcher=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiSelectInsertSearcher.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-searcher",itemsCreator:BI.emptyFn,el:{},popup:{},valueFormatter:BI.emptyFn,adapter:null,masker:{},text:BI.i18nText("BI-Basic_Please_Select")})},_init:function(){BI.MultiSelectInsertSearcher.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget(o.el,{type:"bi.multi_select_editor",watermark:o.watermark,height:o.height,text:o.text,listeners:[{eventName:BI.MultiSelectEditor.EVENT_FOCUS,action:function(){self.fireEvent(BI.MultiSelectInsertSearcher.EVENT_FOCUS)}},{eventName:BI.MultiSelectEditor.EVENT_BLUR,action:function(){self.fireEvent(BI.MultiSelectInsertSearcher.EVENT_BLUR)}}]}),this.searcher=BI.createWidget({type:"bi.searcher",element:this,height:o.height,isAutoSearch:!1,isAutoSync:!1,onSearch:function(op,callback){callback()},el:this.editor,popup:BI.extend({type:"bi.multi_select_search_insert_pane",valueFormatter:o.valueFormatter,keywordGetter:function(){return self.editor.getValue()},itemsCreator:function(op,callback){var keyword=self.editor.getValue();op.keywords=[keyword],this.setKeyword(keyword),o.itemsCreator(op,callback)},value:o.value,listeners:[{eventName:BI.MultiSelectSearchInsertPane.EVENT_ADD_ITEM,action:function(){self.fireEvent(BI.MultiSelectInsertSearcher.EVENT_ADD_ITEM)}}]},o.popup),adapter:o.adapter,masker:o.masker}),this.searcher.on(BI.Searcher.EVENT_START,function(){self.fireEvent(BI.MultiSelectInsertSearcher.EVENT_START)}),this.searcher.on(BI.Searcher.EVENT_PAUSE,function(){this.hasMatched(),self.fireEvent(BI.MultiSelectInsertSearcher.EVENT_PAUSE)}),this.searcher.on(BI.Searcher.EVENT_STOP,function(){self.fireEvent(BI.MultiSelectInsertSearcher.EVENT_STOP)}),this.searcher.on(BI.Searcher.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectInsertSearcher.EVENT_CHANGE,arguments)}),this.searcher.on(BI.Searcher.EVENT_SEARCHING,function(){var keywords=this.getKeywords();self.fireEvent(BI.MultiSelectInsertSearcher.EVENT_SEARCHING,keywords)}),BI.isNotNull(o.value)&&this.setState(o.value)},adjustView:function(){this.searcher.adjustView()},isSearching:function(){return this.searcher.isSearching()},stopSearch:function(){this.searcher.stopSearch()},getKeyword:function(){return this.editor.getValue()},hasMatched:function(){return this.searcher.hasMatched()},hasChecked:function(){return this.searcher.getView()&&this.searcher.getView().hasChecked()},setAdapter:function(adapter){this.searcher.setAdapter(adapter)},setState:function(ob){var o=this.options;if(ob||(ob={}),ob.value||(ob.value=[]),ob.type===BI.Selection.All)if(0===ob.value.length)this.editor.setState(BI.Selection.All);else if(BI.size(ob.assist)<=20){var state="";BI.each(ob.assist,function(i,v){state+=0===i?""+(o.valueFormatter(v+"")||v):","+(o.valueFormatter(v+"")||v)}),this.editor.setState(state)}else this.editor.setState(BI.Selection.Multi);else if(0===ob.value.length)this.editor.setState(BI.Selection.None);else if(BI.size(ob.value)<=20){var state="";BI.each(ob.value,function(i,v){state+=0===i?""+(o.valueFormatter(v+"")||v):","+(o.valueFormatter(v+"")||v)}),this.editor.setState(state)}else this.editor.setState(BI.Selection.Multi)},setValue:function(ob){this.setState(ob),this.searcher.setValue(ob)},getKey:function(){return this.editor.getValue()},getValue:function(){return this.searcher.getValue()},populate:function(items){this.searcher.populate.apply(this.searcher,arguments)}}),BI.MultiSelectInsertSearcher.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.MultiSelectInsertSearcher.EVENT_CHANGE="EVENT_CHANGE",BI.MultiSelectInsertSearcher.EVENT_START="EVENT_START",BI.MultiSelectInsertSearcher.EVENT_STOP="EVENT_STOP",BI.MultiSelectInsertSearcher.EVENT_PAUSE="EVENT_PAUSE",BI.MultiSelectInsertSearcher.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiSelectInsertSearcher.EVENT_ADD_ITEM="EVENT_ADD_ITEM",BI.MultiSelectInsertSearcher.EVENT_FOCUS="EVENT_FOCUS",BI.MultiSelectInsertSearcher.EVENT_BLUR="EVENT_BLUR",BI.shortcut("bi.multi_select_insert_searcher",BI.MultiSelectInsertSearcher),BI.MultiSelectSearcher=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiSelectSearcher.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-searcher",itemsCreator:BI.emptyFn,el:{},popup:{},valueFormatter:BI.emptyFn,adapter:null,masker:{},text:BI.i18nText("BI-Basic_Please_Select")})},_init:function(){BI.MultiSelectSearcher.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget(o.el,{type:"bi.multi_select_editor",height:o.height,text:o.text,listeners:[{eventName:BI.MultiSelectEditor.EVENT_FOCUS,action:function(){self.fireEvent(BI.MultiSelectSearcher.EVENT_FOCUS)}},{eventName:BI.MultiSelectEditor.EVENT_BLUR,action:function(){self.fireEvent(BI.MultiSelectSearcher.EVENT_BLUR)}}]}),this.searcher=BI.createWidget({type:"bi.searcher",element:this,height:o.height,isAutoSearch:!1,isAutoSync:!1,onSearch:function(op,callback){callback()},el:this.editor,popup:BI.extend({type:"bi.multi_select_search_pane",valueFormatter:o.valueFormatter,keywordGetter:function(){return self.editor.getValue()},itemsCreator:function(op,callback){var keyword=self.editor.getValue();op.keywords=[keyword],this.setKeyword(keyword),o.itemsCreator(op,callback)},value:o.value},o.popup),adapter:o.adapter,masker:o.masker}),this.searcher.on(BI.Searcher.EVENT_START,function(){self.fireEvent(BI.MultiSelectSearcher.EVENT_START)}),this.searcher.on(BI.Searcher.EVENT_PAUSE,function(){this.hasMatched(),self.fireEvent(BI.MultiSelectSearcher.EVENT_PAUSE)}),this.searcher.on(BI.Searcher.EVENT_STOP,function(){self.fireEvent(BI.MultiSelectSearcher.EVENT_STOP)}),this.searcher.on(BI.Searcher.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectSearcher.EVENT_CHANGE,arguments)}),this.searcher.on(BI.Searcher.EVENT_SEARCHING,function(){var keywords=this.getKeywords();self.fireEvent(BI.MultiSelectSearcher.EVENT_SEARCHING,keywords)}),BI.isNotNull(o.value)&&this.setState(o.value)},adjustView:function(){this.searcher.adjustView()},isSearching:function(){return this.searcher.isSearching()},stopSearch:function(){this.searcher.stopSearch()},getKeyword:function(){return this.editor.getValue()},hasMatched:function(){return this.searcher.hasMatched()},hasChecked:function(){return this.searcher.getView()&&this.searcher.getView().hasChecked()},setAdapter:function(adapter){this.searcher.setAdapter(adapter)},setState:function(ob){var o=this.options;if(ob||(ob={}),ob.value||(ob.value=[]),ob.type===BI.Selection.All)if(0===ob.value.length)this.editor.setState(BI.Selection.All);else if(BI.size(ob.assist)<=20){var state="";BI.each(ob.assist,function(i,v){state+=0===i?""+(o.valueFormatter(v+"")||v):","+(o.valueFormatter(v+"")||v)}),this.editor.setState(state)}else this.editor.setState(BI.Selection.Multi);else if(0===ob.value.length)this.editor.setState(BI.Selection.None);else if(BI.size(ob.value)<=20){var state="";BI.each(ob.value,function(i,v){state+=0===i?""+(o.valueFormatter(v+"")||v):","+(o.valueFormatter(v+"")||v)}),this.editor.setState(state)}else this.editor.setState(BI.Selection.Multi)},setValue:function(ob){this.setState(ob),this.searcher.setValue(ob)},getKey:function(){return this.editor.getValue()},getValue:function(){return this.searcher.getValue()},populate:function(items){this.searcher.populate.apply(this.searcher,arguments)}}),BI.MultiSelectSearcher.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.MultiSelectSearcher.EVENT_CHANGE="EVENT_CHANGE",BI.MultiSelectSearcher.EVENT_START="EVENT_START",BI.MultiSelectSearcher.EVENT_STOP="EVENT_STOP",BI.MultiSelectSearcher.EVENT_PAUSE="EVENT_PAUSE",BI.MultiSelectSearcher.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiSelectSearcher.EVENT_FOCUS="EVENT_FOCUS",BI.MultiSelectSearcher.EVENT_BLUR="EVENT_BLUR",BI.shortcut("bi.multi_select_searcher",BI.MultiSelectSearcher),BI.MultiSelectCheckSelectedSwitcher=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiSelectCheckSelectedSwitcher.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-check-selected-switcher",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,el:{},popup:{},adapter:null,masker:{}})},_init:function(){BI.MultiSelectCheckSelectedSwitcher.superclass._init.apply(this,arguments);var self=this,o=this.options;this.button=BI.createWidget(o.el,{type:"bi.multi_select_check_selected_button",itemsCreator:o.itemsCreator,value:o.value}),this.button.on(BI.Events.VIEW,function(){self.fireEvent(BI.Events.VIEW,arguments)}),this.switcher=BI.createWidget({type:"bi.switcher",toggle:!1,element:this,el:this.button,popup:BI.extend({type:"bi.multi_select_check_pane",valueFormatter:o.valueFormatter,itemsCreator:o.itemsCreator,onClickContinueSelect:function(){self.switcher.hideView()},ref:function(_ref){self.checkPane=_ref},value:o.value},o.popup),adapter:o.adapter,masker:o.masker}),this.switcher.on(BI.Switcher.EVENT_TRIGGER_CHANGE,function(){self.fireEvent(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE)}),this.switcher.on(BI.Switcher.EVENT_BEFORE_POPUPVIEW,function(){self.fireEvent(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW)}),this.switcher.on(BI.Switcher.EVENT_AFTER_POPUPVIEW,function(){var me=this;BI.nextTick(function(){me.populate()})})},adjustView:function(){this.switcher.adjustView()},hideView:function(){this.switcher.empty(),this.switcher.hideView()},setAdapter:function(adapter){this.switcher.setAdapter(adapter)},setValue:function(v){this.switcher.setValue(v)},updateSelectedValue:function(v){this.checkPane.setValue(v)},setButtonChecked:function(v){this.button.setValue(v)},getValue:function(){},populate:function(items){this.switcher.populate.apply(this.switcher,arguments)}}),BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE="EVENT_TRIGGER_CHANGE",BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.multi_select_check_selected_switcher",BI.MultiSelectCheckSelectedSwitcher),BI.MultiSelectInsertList=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.MultiSelectInsertList.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-insert-list",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn})},_init:function(){BI.MultiSelectInsertList.superclass._init.apply(this,arguments);var self=this,o=this.options;this.storeValue=o.value||{};var assertShowValue=function(){BI.isKey(self._startValue)&&(self.storeValue.type===BI.Selection.All?BI.remove(self.storeValue.value,self._startValue):BI.pushDistinct(self.storeValue.value,self._startValue))};this.adapter=BI.createWidget({type:"bi.multi_select_loader",cls:"popup-multi-select-list bi-border-left bi-border-right bi-border-bottom",itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,logic:{dynamic:!0},el:{},value:o.value}),this.adapter.on(BI.MultiSelectLoader.EVENT_CHANGE,function(){self.storeValue=this.getValue(),assertShowValue(),self.fireEvent(BI.MultiSelectInsertList.EVENT_CHANGE)}),this.searcherPane=BI.createWidget({type:"bi.multi_select_search_insert_pane",cls:"bi-border-left bi-border-right bi-border-bottom",valueFormatter:o.valueFormatter,keywordGetter:function(){return self.trigger.getKeyword()},itemsCreator:function(op,callback){op.keywords=[self.trigger.getKeyword()],this.setKeyword(op.keywords[0]),o.itemsCreator(op,callback)},listeners:[{eventName:BI.MultiSelectSearchInsertPane.EVENT_ADD_ITEM,action:function(){var keyword=self.trigger.getKeyword();self.trigger.hasMatched()||(self.storeValue.type===BI.Selection.Multi&&BI.pushDistinct(self.storeValue.value,keyword),self._showAdapter(),self.adapter.setValue(self.storeValue),self.adapter.populate(),self.storeValue.type===BI.Selection.Multi&&self.fireEvent(BI.MultiSelectInsertList.EVENT_CHANGE))}}]}),this.searcherPane.setVisible(!1),this.trigger=BI.createWidget({type:"bi.searcher",isAutoSearch:!1,isAutoSync:!1,onSearch:function(op,callback){callback()},adapter:this.adapter,popup:this.searcherPane,height:200,masker:!1,listeners:[{eventName:BI.Searcher.EVENT_START,action:function(){self._showSearcherPane(),self._setStartValue(""),this.setValue(BI.deepClone(self.storeValue))}},{eventName:BI.Searcher.EVENT_STOP,action:function(){self._showAdapter(),self._setStartValue(""),self.adapter.setValue(self.storeValue),self.adapter.populate()}},{eventName:BI.Searcher.EVENT_PAUSE,action:function(){var keyword=this.getKeyword();this.hasMatched()&&self._join({type:BI.Selection.Multi,value:[keyword]},function(){self.storeValue.type===BI.Selection.Multi&&BI.pushDistinct(self.storeValue.value,keyword),self._showAdapter(),self.adapter.setValue(self.storeValue),self._setStartValue(keyword),assertShowValue(),self.adapter.populate(),self._setStartValue(""),self.fireEvent(BI.MultiSelectInsertList.EVENT_CHANGE)}),self._showAdapter()}},{eventName:BI.Searcher.EVENT_SEARCHING,action:function(){var keywords=this.getKeywords(),last=BI.last(keywords);keywords=BI.initial(keywords||[]),keywords.length>0&&self._joinKeywords(keywords,function(){BI.isEndWithBlank(last)?(self.adapter.setValue(self.storeValue),assertShowValue(),self.adapter.populate(),self._setStartValue("")):(self.adapter.setValue(self.storeValue),assertShowValue()),self.fireEvent(BI.MultiSelectInsertList.EVENT_CHANGE)})}},{eventName:BI.Searcher.EVENT_CHANGE,action:function(value,obj){obj instanceof BI.MultiSelectBar?self._joinAll(this.getValue(),function(){assertShowValue(),self.fireEvent(BI.MultiSelectInsertList.EVENT_CHANGE)}):self._join(this.getValue(),function(){assertShowValue(),self.fireEvent(BI.MultiSelectInsertList.EVENT_CHANGE)})}}],value:o.value}),BI.createWidget({type:"bi.vtape",element:this,items:[{el:this.trigger,height:24},{el:this.adapter,height:"fill"}]}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.searcherPane,top:30,bottom:0,left:0,right:0}]})},_showAdapter:function(){this.adapter.setVisible(!0),this.searcherPane.setVisible(!1)},_showSearcherPane:function(){this.searcherPane.setVisible(!0),this.adapter.setVisible(!1)},_defaultState:function(){this.trigger.stopEditing()},_assertValue:function(val){val||(val={}),val.type||(val.type=BI.Selection.Multi),val.value||(val.value=[])},_makeMap:function(values){return BI.makeObject(values||[])},_joinKeywords:function(keywords,callback){function digest(items){var selectedMap=self._makeMap(items);BI.each(keywords,function(i,val){BI.isNotNull(selectedMap[val])&&(self.storeValue.type===BI.Selection.Multi?BI.pushDistinct(self.storeValue.value,val):BI.remove(self.storeValue.value,val))}),callback()}var self=this,o=this.options;this._assertValue(this.storeValue),o.itemsCreator({type:BI.MultiSelectInsertList.REQ_GET_ALL_DATA,keywords:keywords},function(ob){var values=BI.map(ob.items,"value");digest(values)})},_joinAll:function(res,callback){var self=this,o=this.options;this._assertValue(res),o.itemsCreator({type:BI.MultiSelectInsertList.REQ_GET_ALL_DATA,keywords:[self.trigger.getKeyword()]},function(ob){var items=BI.map(ob.items,"value");if(self.storeValue.type===res.type){var change=!1,map=self._makeMap(self.storeValue.value);return BI.each(items,function(i,v){BI.isNotNull(map[v])&&(change=!0,delete map[v])}),change&&(self.storeValue.value=BI.values(map)),void callback()}var selectedMap=self._makeMap(self.storeValue.value),notSelectedMap=self._makeMap(res.value),newItems=[];BI.each(items,function(i,item){BI.isNotNull(selectedMap[items[i]])&&delete selectedMap[items[i]],BI.isNull(notSelectedMap[items[i]])&&newItems.push(item)}),self.storeValue.value=newItems.concat(BI.values(selectedMap)),callback()})},_join:function(res,callback){var self=this,o=this.options;if(this._assertValue(res),this._assertValue(this.storeValue),this.storeValue.type===res.type){var map=this._makeMap(this.storeValue.value);BI.each(res.value,function(i,v){map[v]||(self.storeValue.value.push(v),map[v]=v)});var change=!1;return BI.each(res.assist,function(i,v){BI.isNotNull(map[v])&&(change=!0,delete map[v])}),change&&(this.storeValue.value=BI.values(map)),void callback()}this._joinAll(res,callback)},_setStartValue:function(value){this._startValue=value,this.adapter.setStartValue(value)},isAllSelected:function(){return this.adapter.isAllSelected()},resize:function(){},setValue:function(v){this.storeValue=v||{},this._assertValue(this.storeValue),this.adapter.setValue(this.storeValue),this.trigger.setValue(this.storeValue)},getValue:function(){return BI.deepClone(this.storeValue)},populate:function(){this.adapter.populate.apply(this.adapter,arguments),this.trigger.populate.apply(this.trigger,arguments)}}),BI.extend(BI.MultiSelectInsertList,{REQ_GET_DATA_LENGTH:1,REQ_GET_ALL_DATA:-1}),BI.MultiSelectInsertList.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_select_insert_list",BI.MultiSelectInsertList),BI.MultiSelectInsertNoBarList=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.MultiSelectInsertNoBarList.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-insert-list",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn})},_init:function(){BI.MultiSelectInsertNoBarList.superclass._init.apply(this,arguments);var self=this,o=this.options;this.storeValue={type:BI.Selection.Multi,value:o.value||[]};var assertShowValue=function(){BI.isKey(self._startValue)&&(self.storeValue.type===BI.Selection.All?BI.remove(self.storeValue.value,self._startValue):BI.pushDistinct(self.storeValue.value,self._startValue))};this.adapter=BI.createWidget({type:"bi.multi_select_no_bar_loader",cls:"popup-multi-select-list bi-border-left bi-border-right bi-border-bottom",itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,logic:{dynamic:!1},el:{},value:{type:BI.Selection.Multi,value:o.value||[]}}),this.adapter.on(BI.MultiSelectLoader.EVENT_CHANGE,function(){self.storeValue=this.getValue(),assertShowValue(),self.fireEvent(BI.MultiSelectInsertNoBarList.EVENT_CHANGE)}),this.searcherPane=BI.createWidget({type:"bi.multi_select_search_insert_pane",cls:"bi-border-left bi-border-right bi-border-bottom",valueFormatter:o.valueFormatter,keywordGetter:function(){return self.trigger.getKeyword()},itemsCreator:function(op,callback){op.keywords=[self.trigger.getKeyword()],this.setKeyword(op.keywords[0]),o.itemsCreator(op,callback)},listeners:[{eventName:BI.MultiSelectSearchInsertPane.EVENT_ADD_ITEM,action:function(){var keyword=self.trigger.getKeyword();self.trigger.hasMatched()||(self.storeValue.type===BI.Selection.Multi&&BI.pushDistinct(self.storeValue.value,keyword),self._showAdapter(),self.adapter.setValue(self.storeValue),self.adapter.populate(),self.storeValue.type===BI.Selection.Multi&&self.fireEvent(BI.MultiSelectInsertNoBarList.EVENT_CHANGE))}}]}),this.searcherPane.setVisible(!1),this.trigger=BI.createWidget({type:"bi.searcher",isAutoSearch:!1,isAutoSync:!1,onSearch:function(op,callback){callback()},adapter:this.adapter,popup:this.searcherPane,height:200,masker:!1,listeners:[{eventName:BI.Searcher.EVENT_START,action:function(){self._showSearcherPane(),self._setStartValue(""),this.setValue(BI.deepClone(self.storeValue))}},{eventName:BI.Searcher.EVENT_STOP,action:function(){self._showAdapter(),self._setStartValue(""),self.adapter.setValue(self.storeValue),self.adapter.populate()}},{eventName:BI.Searcher.EVENT_PAUSE,action:function(){var keyword=this.getKeyword();this.hasMatched()&&self._join({type:BI.Selection.Multi,value:[keyword]},function(){self.storeValue.type===BI.Selection.Multi&&BI.pushDistinct(self.storeValue.value,keyword),self._showAdapter(),self.adapter.setValue(self.storeValue),self._setStartValue(keyword),assertShowValue(),self.adapter.populate(),self._setStartValue(""),self.fireEvent(BI.MultiSelectInsertNoBarList.EVENT_CHANGE)})}},{eventName:BI.Searcher.EVENT_SEARCHING,action:function(){var keywords=this.getKeywords(),last=BI.last(keywords);keywords=BI.initial(keywords||[]),keywords.length>0&&self._joinKeywords(keywords,function(){BI.isEndWithBlank(last)?(self.adapter.setValue(self.storeValue),assertShowValue(),self.adapter.populate(),self._setStartValue("")):(self.adapter.setValue(self.storeValue),assertShowValue()),self.fireEvent(BI.MultiSelectInsertNoBarList.EVENT_CHANGE)})}},{eventName:BI.Searcher.EVENT_CHANGE,action:function(value,obj){obj instanceof BI.MultiSelectBar?self._joinAll(this.getValue(),function(){assertShowValue(),self.fireEvent(BI.MultiSelectInsertNoBarList.EVENT_CHANGE)}):self._join(this.getValue(),function(){assertShowValue(),self.fireEvent(BI.MultiSelectInsertNoBarList.EVENT_CHANGE)})}}],value:{type:BI.Selection.Multi,value:o.value||[]}}),BI.createWidget({type:"bi.vtape",element:this,items:[{el:this.trigger,height:24},{el:this.adapter,height:"fill"}]}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.searcherPane,top:30,bottom:0,left:0,right:0}]})},_showAdapter:function(){this.adapter.setVisible(!0),this.searcherPane.setVisible(!1)},_showSearcherPane:function(){this.searcherPane.setVisible(!0),this.adapter.setVisible(!1)},_defaultState:function(){this.trigger.stopEditing()},_assertValue:function(val){val||(val={}),val.type||(val.type=BI.Selection.Multi),val.value||(val.value=[])},_makeMap:function(values){return BI.makeObject(values||[])},_joinKeywords:function(keywords,callback){function digest(items){var selectedMap=self._makeMap(items);BI.each(keywords,function(i,val){BI.isNotNull(selectedMap[val])&&(self.storeValue.type===BI.Selection.Multi?BI.pushDistinct(self.storeValue.value,val):BI.remove(self.storeValue.value,val))}),callback()}var self=this,o=this.options;this._assertValue(this.storeValue),o.itemsCreator({type:BI.MultiSelectInsertNoBarList.REQ_GET_ALL_DATA,keywords:keywords},function(ob){var values=BI.map(ob.items,"value");digest(values)})},_joinAll:function(res,callback){var self=this,o=this.options;this._assertValue(res),o.itemsCreator({type:BI.MultiSelectInsertNoBarList.REQ_GET_ALL_DATA,keywords:[self.trigger.getKeyword()]},function(ob){var items=BI.map(ob.items,"value");if(self.storeValue.type===res.type){var change=!1,map=self._makeMap(self.storeValue.value);return BI.each(items,function(i,v){BI.isNotNull(map[v])&&(change=!0,delete map[v])}),change&&(self.storeValue.value=BI.values(map)),void callback()}var selectedMap=self._makeMap(self.storeValue.value),notSelectedMap=self._makeMap(res.value),newItems=[];BI.each(items,function(i,item){BI.isNotNull(selectedMap[items[i]])&&delete selectedMap[items[i]],BI.isNull(notSelectedMap[items[i]])&&newItems.push(item)}),self.storeValue.value=newItems.concat(BI.values(selectedMap)),callback()})},_join:function(res,callback){var self=this,o=this.options;if(this._assertValue(res),this._assertValue(this.storeValue),this.storeValue.type===res.type){var map=this._makeMap(this.storeValue.value);BI.each(res.value,function(i,v){map[v]||(self.storeValue.value.push(v),map[v]=v)});var change=!1;return BI.each(res.assist,function(i,v){BI.isNotNull(map[v])&&(change=!0,delete map[v])}),change&&(this.storeValue.value=BI.values(map)),void callback()}this._joinAll(res,callback)},_setStartValue:function(value){this._startValue=value,this.adapter.setStartValue(value)},isAllSelected:function(){return this.adapter.isAllSelected()},resize:function(){},setValue:function(v){this.storeValue={type:BI.Selection.Multi,value:v||[]},this.adapter.setValue(this.storeValue),this.trigger.setValue(this.storeValue)},getValue:function(){return BI.deepClone(this.storeValue.value)},populate:function(){this.adapter.populate.apply(this.adapter,arguments),this.trigger.populate.apply(this.trigger,arguments)}}),BI.extend(BI.MultiSelectInsertNoBarList,{REQ_GET_DATA_LENGTH:1,REQ_GET_ALL_DATA:-1}),BI.MultiSelectInsertNoBarList.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_select_insert_no_bar_list",BI.MultiSelectInsertNoBarList),BI.MultiSelectList=BI.inherit(BI.Widget,{_constant:{EDITOR_HEIGHT:24},_defaultConfig:function(){return BI.extend(BI.MultiSelectList.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-list",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn})},_init:function(){BI.MultiSelectList.superclass._init.apply(this,arguments);var self=this,o=this.options;this.storeValue={};var assertShowValue=function(){BI.isKey(self._startValue)&&(self.storeValue.type===BI.Selection.All?BI.remove(self.storeValue.value,self._startValue):BI.pushDistinct(self.storeValue.value,self._startValue))};this.adapter=BI.createWidget({type:"bi.multi_select_loader",cls:"popup-multi-select-list bi-border-left bi-border-right bi-border-bottom",itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,logic:{dynamic:!1},el:{}}),this.adapter.on(BI.MultiSelectLoader.EVENT_CHANGE,function(){self.storeValue=this.getValue(),self._adjust(function(){assertShowValue(),self.fireEvent(BI.MultiSelectList.EVENT_CHANGE)})}),this.searcherPane=BI.createWidget({type:"bi.multi_select_search_pane",cls:"bi-border-left bi-border-right bi-border-bottom",valueFormatter:o.valueFormatter,keywordGetter:function(){return self.trigger.getKeyword()},itemsCreator:function(op,callback){op.keywords=[self.trigger.getKeyword()],this.setKeyword(op.keywords[0]),o.itemsCreator(op,callback)}}),this.searcherPane.setVisible(!1),this.trigger=BI.createWidget({type:"bi.searcher",isAutoSearch:!1,isAutoSync:!1,onSearch:function(op,callback){callback()},adapter:this.adapter,popup:this.searcherPane,height:200,masker:!1,listeners:[{eventName:BI.Searcher.EVENT_START,action:function(){self._showSearcherPane(),self._setStartValue(""),this.setValue(BI.deepClone(self.storeValue))}},{eventName:BI.Searcher.EVENT_STOP,action:function(){self._showAdapter(),self._setStartValue(""),self.adapter.setValue(self.storeValue),self.adapter.populate()}},{eventName:BI.Searcher.EVENT_PAUSE,action:function(){var keyword=this.getKeyword();this.hasMatched()&&self._join({type:BI.Selection.Multi,value:[keyword]},function(){self._showAdapter(),self.adapter.setValue(self.storeValue),self._setStartValue(keyword),assertShowValue(),self.adapter.populate(),self._setStartValue(""),self.fireEvent(BI.MultiSelectList.EVENT_CHANGE)})}},{eventName:BI.Searcher.EVENT_SEARCHING,action:function(){var keywords=this.getKeyword(),last=BI.last(keywords);keywords=BI.initial(keywords||[]),keywords.length>0&&self._joinKeywords(keywords,function(){BI.isEndWithBlank(last)?(self.adapter.setValue(self.storeValue),assertShowValue(),self.adapter.populate(),self._setStartValue("")):(self.adapter.setValue(self.storeValue),assertShowValue()),self.fireEvent(BI.MultiSelectList.EVENT_CHANGE)})}},{eventName:BI.Searcher.EVENT_CHANGE,action:function(value,obj){obj instanceof BI.MultiSelectBar?self._joinAll(this.getValue(),function(){assertShowValue(),self.fireEvent(BI.MultiSelectList.EVENT_CHANGE)}):self._join(this.getValue(),function(){assertShowValue(),self.fireEvent(BI.MultiSelectList.EVENT_CHANGE)})}}]}),BI.createWidget({type:"bi.vtape",element:this,items:[{el:this.trigger,height:this._constant.EDITOR_HEIGHT},{el:this.adapter,height:"fill"}]}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.searcherPane,top:this._constant.EDITOR_HEIGHT,bottom:0,left:0,right:0}]})},_showAdapter:function(){this.adapter.setVisible(!0),this.searcherPane.setVisible(!1)},_showSearcherPane:function(){this.searcherPane.setVisible(!0),this.adapter.setVisible(!1)},_defaultState:function(){this.trigger.stopEditing()},_assertValue:function(val){val||(val={}),val.type||(val.type=BI.Selection.Multi),val.value||(val.value=[])},_makeMap:function(values){return BI.makeObject(values||[])},_joinKeywords:function(keywords,callback){function digest(items){var selectedMap=self._makeMap(items);BI.each(keywords,function(i,val){BI.isNotNull(selectedMap[val])&&(self.storeValue.type===BI.Selection.Multi?BI.pushDistinct(self.storeValue.value,val):BI.remove(self.storeValue.value,val))}),self._adjust(callback)}var self=this,o=this.options;this._assertValue(this.storeValue),o.itemsCreator({type:BI.MultiSelectList.REQ_GET_ALL_DATA,keywords:keywords},function(ob){var values=BI.map(ob.items,"value");digest(values)})},_joinAll:function(res,callback){var self=this,o=this.options;this._assertValue(res),o.itemsCreator({type:BI.MultiSelectList.REQ_GET_ALL_DATA,keywords:[this.trigger.getKey()]},function(ob){var items=BI.map(ob.items,"value");if(self.storeValue.type===res.type){var change=!1,map=self._makeMap(self.storeValue.value);return BI.each(items,function(i,v){BI.isNotNull(map[v])&&(change=!0,delete map[v])}),change&&(self.storeValue.value=BI.values(map)),void self._adjust(callback)}var selectedMap=self._makeMap(self.storeValue.value),notSelectedMap=self._makeMap(res.value),newItems=[];BI.each(items,function(i,item){BI.isNotNull(selectedMap[items[i]])&&delete selectedMap[items[i]],BI.isNull(notSelectedMap[items[i]])&&newItems.push(item)}),self.storeValue.value=newItems.concat(BI.values(selectedMap)),self._adjust(callback)})},_adjust:function(callback){ +function adjust(){self.storeValue.type===BI.Selection.All&&self.storeValue.value.length>=self._count?self.storeValue={type:BI.Selection.Multi,value:[]}:self.storeValue.type===BI.Selection.Multi&&self.storeValue.value.length>=self._count&&(self.storeValue={type:BI.Selection.All,value:[]})}var self=this,o=this.options;this._count?(adjust(),callback()):o.itemsCreator({type:BI.MultiSelectList.REQ_GET_DATA_LENGTH},function(res){self._count=res.count,adjust(),callback()})},_join:function(res,callback){var self=this,o=this.options;if(this._assertValue(res),this._assertValue(this.storeValue),this.storeValue.type===res.type){var map=this._makeMap(this.storeValue.value);BI.each(res.value,function(i,v){map[v]||(self.storeValue.value.push(v),map[v]=v)});var change=!1;return BI.each(res.assist,function(i,v){BI.isNotNull(map[v])&&(change=!0,delete map[v])}),change&&(this.storeValue.value=BI.values(map)),void self._adjust(callback)}this._joinAll(res,callback)},_setStartValue:function(value){this._startValue=value,this.adapter.setStartValue(value)},isAllSelected:function(){return this.adapter.isAllSelected()},resize:function(){},setValue:function(v){this.storeValue=v||{},this._assertValue(this.storeValue),this.adapter.setValue(this.storeValue),this.trigger.setValue(this.storeValue)},getValue:function(){return BI.deepClone(this.storeValue)},populate:function(){this.adapter.populate.apply(this.adapter,arguments),this.trigger.populate.apply(this.trigger,arguments)}}),BI.extend(BI.MultiSelectList,{REQ_GET_DATA_LENGTH:1,REQ_GET_ALL_DATA:-1}),BI.MultiSelectList.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_select_list",BI.MultiSelectList),BI.MultiSelectTree=BI.inherit(BI.Single,{_constant:{EDITOR_HEIGHT:24},_defaultConfig:function(){return BI.extend(BI.MultiSelectTree.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-tree",itemsCreator:BI.emptyFn})},_init:function(){BI.MultiSelectTree.superclass._init.apply(this,arguments);var self=this,o=this.options;this.storeValue={value:{}},this.adapter=BI.createWidget({type:"bi.multi_select_tree_popup",itemsCreator:o.itemsCreator}),this.adapter.on(BI.MultiSelectTreePopup.EVENT_CHANGE,function(){self.searcher.isSearching()?self.storeValue={value:self.searcherPane.getValue()}:self.storeValue={value:self.adapter.getValue()},self.setSelectedValue(self.storeValue.value),self.fireEvent(BI.MultiSelectTree.EVENT_CHANGE)}),this.searcherPane=BI.createWidget({type:"bi.multi_tree_search_pane",cls:"bi-border-left bi-border-right bi-border-bottom",keywordGetter:function(){return self.searcher.getKeyword()},itemsCreator:function(op,callback){op.keyword=self.searcher.getKeyword(),o.itemsCreator(op,callback)}}),this.searcherPane.setVisible(!1),this.searcher=BI.createWidget({type:"bi.searcher",isAutoSearch:!1,isAutoSync:!1,onSearch:function(op,callback){callback({keyword:self.searcher.getKeyword()})},adapter:this.adapter,popup:this.searcherPane,masker:!1,listeners:[{eventName:BI.Searcher.EVENT_START,action:function(){self._showSearcherPane()}},{eventName:BI.Searcher.EVENT_STOP,action:function(){self._showAdapter(),BI.nextTick(function(){self.adapter.populate()})}},{eventName:BI.Searcher.EVENT_CHANGE,action:function(){self.searcher.isSearching()?self.storeValue={value:self.searcherPane.getValue()}:self.storeValue={value:self.adapter.getValue()},self.setSelectedValue(self.storeValue.value),self.fireEvent(BI.MultiSelectTree.EVENT_CHANGE)}},{eventName:BI.Searcher.EVENT_PAUSE,action:function(){self._showAdapter()}}]}),BI.createWidget({type:"bi.vtape",element:this,items:[{el:this.searcher,height:this._constant.EDITOR_HEIGHT},{el:this.adapter,height:"fill"}]}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.searcherPane,top:this._constant.EDITOR_HEIGHT,bottom:0,left:0,right:0}]})},_showAdapter:function(){this.adapter.setVisible(!0),this.searcherPane.setVisible(!1)},_showSearcherPane:function(){this.searcherPane.setVisible(!0),this.adapter.setVisible(!1)},resize:function(){},setSelectedValue:function(v){this.storeValue.value=v||{},this.adapter.setSelectedValue(v),this.searcherPane.setSelectedValue(v),this.searcher.setValue({value:v||{}})},setValue:function(v){this.adapter.setValue(v)},stopSearch:function(){this.searcher.stopSearch()},updateValue:function(v){this.adapter.updateValue(v)},getValue:function(){return this.storeValue.value},populate:function(){this.searcher.populate.apply(this.searcher,arguments),this.adapter.populate.apply(this.adapter,arguments)}}),BI.MultiSelectTree.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_select_tree",BI.MultiSelectTree),BI.MultiSelectTreePopup=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiSelectTreePopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-tree-popup bi-border-left bi-border-right bi-border-bottom",itemsCreator:BI.emptyFn})},_init:function(){BI.MultiSelectTreePopup.superclass._init.apply(this,arguments);var self=this,o=this.options;this.popup=BI.createWidget({type:"bi.async_tree",element:this,itemsCreator:o.itemsCreator}),this.popup.on(BI.TreeView.EVENT_AFTERINIT,function(){self.fireEvent(BI.MultiSelectTreePopup.EVENT_AFTER_INIT)}),this.popup.on(BI.TreeView.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectTreePopup.EVENT_CHANGE)})},hasChecked:function(){return this.popup.hasChecked()},getValue:function(){return this.popup.getValue()},setValue:function(v){v||(v={}),this.popup.setValue(v)},setSelectedValue:function(v){v||(v={}),this.popup.setSelectedValue(v)},updateValue:function(v){this.popup.updateValue(v),this.popup.refresh()},populate:function(config){this.popup.stroke(config)}}),BI.MultiSelectTreePopup.EVENT_AFTER_INIT="EVENT_AFTER_INIT",BI.MultiSelectTreePopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_select_tree_popup",BI.MultiSelectTreePopup),BI.MultiTreeCheckPane=BI.inherit(BI.Pane,{constants:{height:25,lgap:10,tgap:5},_defaultConfig:function(){return BI.extend(BI.MultiTreeCheckPane.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-tree-check-pane bi-background",onClickContinueSelect:BI.emptyFn,el:{type:"bi.display_tree"}})},_init:function(){BI.MultiTreeCheckPane.superclass._init.apply(this,arguments);var self=this,opts=this.options;this.selectedValues={};var continueSelect=BI.createWidget({type:"bi.text_button",text:BI.i18nText("BI-Continue_Select"),cls:"multi-tree-check-selected"});continueSelect.on(BI.TextButton.EVENT_CHANGE,function(){opts.onClickContinueSelect(),BI.nextTick(function(){self.empty()})});var backToPopup=BI.createWidget({type:"bi.left",cls:"multi-tree-continue-select",items:[{el:{type:"bi.label",text:BI.i18nText("BI-Selected_Data")},lgap:this.constants.lgap,tgap:this.constants.tgap},{el:continueSelect,lgap:this.constants.lgap,tgap:this.constants.tgap}]});this.display=BI.createWidget(opts.el,{type:"bi.display_tree",cls:"bi-multi-tree-display",itemsCreator:function(op,callback){op.type=BI.TreeView.REQ_TYPE_GET_SELECTED_DATA,opts.itemsCreator(op,callback)},value:(opts.value||{}).value}),this.display.on(BI.Events.AFTERINIT,function(){self.fireEvent(BI.Events.AFTERINIT)}),this.display.on(BI.TreeView.EVENT_INIT,function(){backToPopup.setVisible(!1)}),this.display.on(BI.TreeView.EVENT_AFTERINIT,function(){backToPopup.setVisible(!0)}),BI.createWidget({type:"bi.vtape",element:this,items:[{height:this.constants.height,el:backToPopup},{height:"fill",el:this.display}]})},empty:function(){this.display.empty()},populate:function(configs){this.display.stroke(configs)},setValue:function(v){v||(v={}),this.display.setSelectedValue(v.value)},getValue:function(){}}),BI.MultiTreeCheckPane.EVENT_CONTINUE_CLICK="EVENT_CONTINUE_CLICK",BI.shortcut("bi.multi_tree_check_pane",BI.MultiTreeCheckPane),BI.MultiTreeCombo=BI.inherit(BI.Single,{constants:{offset:{top:0,left:0,right:0,bottom:25}},_defaultConfig:function(){return BI.extend(BI.MultiTreeCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-tree-combo",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,height:24})},_init:function(){function showCounter(){isSearching()?self.storeValue={value:self.trigger.getValue()}:isPopupView()&&(self.storeValue={value:self.combo.getValue()}),self.trigger.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue)}BI.MultiTreeCombo.superclass._init.apply(this,arguments);var self=this,o=this.options,isInit=!1,want2showCounter=!1;this.storeValue={value:o.value||{}},this.trigger=BI.createWidget({type:"bi.multi_select_trigger",height:o.height,valueFormatter:o.valueFormatter,text:o.text,watermark:o.watermark,masker:{offset:this.constants.offset},searcher:{type:"bi.multi_tree_searcher",itemsCreator:o.itemsCreator},value:{value:o.value||{}}}),this.combo=BI.createWidget({type:"bi.combo",toggle:!1,container:o.container,el:this.trigger,adjustLength:1,popup:{type:"bi.multi_tree_popup_view",ref:function(){self.popup=this,self.trigger.setAdapter(this),self.numberCounter.setAdapter(this)},listeners:[{eventName:BI.MultiTreePopup.EVENT_AFTERINIT,action:function(){self.numberCounter.adjustView(),isInit=!0,want2showCounter===!0&&showCounter()}},{eventName:BI.MultiTreePopup.EVENT_CHANGE,action:function(){change=!0;var val={type:BI.Selection.Multi,value:this.hasChecked()?this.getValue():{}};self.trigger.getSearcher().setState(val),self.numberCounter.setButtonChecked(val),self.fireEvent(BI.MultiTreeCombo.EVENT_CLICK_ITEM)}},{eventName:BI.MultiTreePopup.EVENT_CLICK_CONFIRM,action:function(){self.combo.hideView()}},{eventName:BI.MultiTreePopup.EVENT_CLICK_CLEAR,action:function(){clear=!0,self.setValue(),self._defaultState()}}],itemsCreator:o.itemsCreator,onLoaded:function(){BI.nextTick(function(){self.numberCounter.adjustView(),self.trigger.getSearcher().adjustView()})}},value:{value:o.value||{}},hideChecker:function(e){return 0===triggerBtn.element.find(e.target).length&&0===self.numberCounter.element.find(e.target).length}});var change=!1,clear=!1,isSearching=function(){return self.trigger.getSearcher().isSearching()},isPopupView=function(){return self.combo.isViewVisible()};this.trigger.on(BI.MultiSelectTrigger.EVENT_FOCUS,function(){self.fireEvent(BI.MultiTreeCombo.EVENT_FOCUS)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_BLUR,function(){self.fireEvent(BI.MultiTreeCombo.EVENT_BLUR)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_START,function(){self.storeValue={value:self.combo.getValue()},this.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP,function(){self.storeValue={value:this.getValue()},self.combo.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue),BI.nextTick(function(){isPopupView()&&self.combo.populate()}),self.fireEvent(BI.MultiTreeCombo.EVENT_STOP)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_SEARCHING,function(){self.fireEvent(BI.MultiTreeCombo.EVENT_SEARCHING)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_TRIGGER_CLICK,function(){self.combo.toggle()}),this.trigger.on(BI.MultiSelectTrigger.EVENT_COUNTER_CLICK,function(){self.combo.isViewVisible()||self.combo.showView()}),this.trigger.on(BI.MultiSelectTrigger.EVENT_CHANGE,function(){var checked=this.getSearcher().hasChecked(),val={type:BI.Selection.Multi,value:checked?{1:1}:{}};this.getSearcher().setState(checked?BI.Selection.Multi:BI.Selection.None),self.numberCounter.setButtonChecked(val),self.fireEvent(BI.MultiTreeCombo.EVENT_CLICK_ITEM)}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){isSearching()||(change===!0&&(self.storeValue={value:self.combo.getValue()},change=!1),self.combo.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue),self.populate())}),this.combo.on(BI.Combo.EVENT_BEFORE_HIDEVIEW,function(){isSearching()?(self._stopEditing(),self.fireEvent(BI.MultiTreeCombo.EVENT_CONFIRM)):isPopupView()&&(self._stopEditing(),self.storeValue={value:self.combo.getValue()},clear===!0&&(self.storeValue={value:{}}),self.fireEvent(BI.MultiTreeCombo.EVENT_CONFIRM)),clear=!1,change=!1});var triggerBtn=BI.createWidget({type:"bi.trigger_icon_button",width:o.height,height:o.height,cls:"multi-select-trigger-icon-button"});triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE,function(){self.numberCounter.hideView(),self.combo.isViewVisible()?self.combo.hideView():self.combo.showView()}),this.numberCounter=BI.createWidget({type:"bi.multi_select_check_selected_switcher",el:{type:"bi.multi_tree_check_selected_button"},popup:{type:"bi.multi_tree_check_pane"},masker:{offset:this.constants.offset},itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,value:{value:o.value||{}}}),this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE,function(){self.combo.isViewVisible()||self.combo.showView()}),this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW,function(){want2showCounter===!1&&(want2showCounter=!0),isInit===!0&&(want2showCounter=null,showCounter())}),this.numberCounter.on(BI.Events.VIEW,function(b){BI.nextTick(function(){self.trigger.refreshPlaceHolderWidth(b===!0?self.numberCounter.element.outerWidth()+8:0)})}),this.trigger.element.click(function(e){self.trigger.element.find(e.target).length>0&&self.numberCounter.hideView()}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.combo,left:0,right:0,top:0,bottom:0},{el:triggerBtn,right:0,top:0,bottom:0},{el:{type:"bi.vertical_adapt",items:[this.numberCounter]},right:o.height,top:0,height:o.height}]})},_stopEditing:function(){this.trigger.stopEditing(),this.numberCounter.hideView()},_defaultState:function(){this._stopEditing(),this.combo.hideView()},setValue:function(v){this.storeValue.value=v||{},this.combo.setValue({value:v||{}}),this.numberCounter.setValue({value:v||{}})},getValue:function(){return BI.deepClone(this.storeValue.value)},populate:function(){this.combo.populate.apply(this.combo,arguments)}}),BI.MultiTreeCombo.EVENT_FOCUS="EVENT_FOCUS",BI.MultiTreeCombo.EVENT_BLUR="EVENT_BLUR",BI.MultiTreeCombo.EVENT_STOP="EVENT_STOP",BI.MultiTreeCombo.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiTreeCombo.EVENT_CLICK_ITEM="EVENT_CLICK_ITEM",BI.MultiTreeCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.multi_tree_combo",BI.MultiTreeCombo),BI.MultiTreeInsertCombo=BI.inherit(BI.Single,{constants:{offset:{top:0,left:0,right:0,bottom:25}},_defaultConfig:function(){return BI.extend(BI.MultiTreeInsertCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-tree-insert-combo",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,height:24,allowEdit:!0})},_init:function(){function showCounter(){isSearching()?self.storeValue={value:self.trigger.getValue()}:isPopupView()&&(self.storeValue={value:self.combo.getValue()}),self.trigger.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue)}BI.MultiTreeInsertCombo.superclass._init.apply(this,arguments);var self=this,o=this.options,isInit=!1,want2showCounter=!1;this.storeValue={value:o.value||{}},this.trigger=BI.createWidget({type:"bi.multi_select_trigger",allowEdit:o.allowEdit,height:o.height,valueFormatter:o.valueFormatter,masker:{offset:this.constants.offset},searcher:{type:"bi.multi_tree_searcher",text:o.text,watermark:o.watermark,itemsCreator:o.itemsCreator,popup:{type:"bi.multi_tree_search_insert_pane",listeners:[{eventName:BI.MultiTreeSearchInsertPane.EVENT_ADD_ITEM,action:function(){self.storeValue.value[self.trigger.getSearcher().getKeyword()]={},self._assertShowValue(),self.combo.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue),self._stopEditing()}}]}},value:{value:o.value||{}}}),this.combo=BI.createWidget({type:"bi.combo",toggle:!1,container:o.container,el:this.trigger,adjustLength:1,popup:{type:"bi.multi_tree_popup_view",ref:function(){self.popup=this,self.trigger.setAdapter(this),self.numberCounter.setAdapter(this)},listeners:[{eventName:BI.MultiTreePopup.EVENT_AFTERINIT,action:function(){self.numberCounter.adjustView(),isInit=!0,want2showCounter===!0&&showCounter()}},{eventName:BI.MultiTreePopup.EVENT_CHANGE,action:function(){change=!0;var val={type:BI.Selection.Multi,value:this.hasChecked()?this.getValue():{}};self.trigger.getSearcher().setState(val),self.numberCounter.setButtonChecked(val),self.fireEvent(BI.MultiTreeInsertCombo.EVENT_CLICK_ITEM,self.combo.getValue())}},{eventName:BI.MultiTreePopup.EVENT_CLICK_CONFIRM,action:function(){self.combo.hideView()}},{eventName:BI.MultiTreePopup.EVENT_CLICK_CLEAR,action:function(){clear=!0,self.setValue(),self._defaultState()}}],itemsCreator:o.itemsCreator,onLoaded:function(){BI.nextTick(function(){self.numberCounter.adjustView(),self.trigger.getSearcher().adjustView()})}},value:{value:o.value||{}},hideChecker:function(e){return 0===triggerBtn.element.find(e.target).length&&0===self.numberCounter.element.find(e.target).length}});var change=!1,clear=!1,isSearching=function(){return self.trigger.getSearcher().isSearching()},isPopupView=function(){return self.combo.isViewVisible()};this.trigger.on(BI.MultiSelectTrigger.EVENT_FOCUS,function(){self.fireEvent(BI.MultiTreeInsertCombo.EVENT_FOCUS)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_BLUR,function(){self.fireEvent(BI.MultiTreeInsertCombo.EVENT_BLUR)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_START,function(){self.storeValue={value:self.combo.getValue()},this.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP,function(){self.storeValue={value:this.getValue()},self.combo.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue),BI.nextTick(function(){isPopupView()&&self.combo.populate()}),self.fireEvent(BI.MultiTreeInsertCombo.EVENT_STOP)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_SEARCHING,function(){self.fireEvent(BI.MultiTreeInsertCombo.EVENT_SEARCHING)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_TRIGGER_CLICK,function(){self.combo.toggle()}),this.trigger.on(BI.MultiSelectTrigger.EVENT_CHANGE,function(){var checked=this.getSearcher().hasChecked(),val={type:BI.Selection.Multi,value:checked?{1:1}:{}};this.getSearcher().setState(checked?BI.Selection.Multi:BI.Selection.None),self.numberCounter.setButtonChecked(val),self.fireEvent(BI.MultiTreeInsertCombo.EVENT_CLICK_ITEM,self.combo.getValue())}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){isSearching()||(change===!0&&(self.storeValue={value:self.combo.getValue()},change=!1),self.combo.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue),self.populate())}),this.combo.on(BI.Combo.EVENT_BEFORE_HIDEVIEW,function(){isSearching()?(self._stopEditing(),self.fireEvent(BI.MultiTreeInsertCombo.EVENT_CONFIRM)):isPopupView()&&(self._stopEditing(),self.storeValue={value:self.combo.getValue()},clear===!0&&(self.storeValue={value:{}}),self.fireEvent(BI.MultiTreeInsertCombo.EVENT_CONFIRM)),clear=!1,change=!1});var triggerBtn=BI.createWidget({type:"bi.trigger_icon_button",width:o.height,height:o.height,cls:"multi-select-trigger-icon-button"});triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE,function(){self.numberCounter.hideView(),self.combo.isViewVisible()?self.combo.hideView():self.combo.showView()}),this.numberCounter=BI.createWidget({type:"bi.multi_select_check_selected_switcher",el:{type:"bi.multi_tree_check_selected_button"},popup:{type:"bi.multi_tree_check_pane"},itemsCreator:o.itemsCreator,masker:{offset:this.constants.offset},valueFormatter:o.valueFormatter,value:o.value}),this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE,function(){self.combo.isViewVisible()||self.combo.showView()}),this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW,function(){want2showCounter===!1&&(want2showCounter=!0),isInit===!0&&(want2showCounter=null,showCounter())}),this.numberCounter.on(BI.Events.VIEW,function(b){BI.nextTick(function(){self.trigger.refreshPlaceHolderWidth(b===!0?self.numberCounter.element.outerWidth()+8:0)})}),this.trigger.element.click(function(e){self.trigger.element.find(e.target).length>0&&self.numberCounter.hideView()}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.combo,left:0,right:0,top:0,bottom:0},{el:triggerBtn,right:0,top:0,bottom:0},{el:{type:"bi.vertical_adapt",items:[this.numberCounter]},right:o.height,top:0,height:o.height}]})},_assertShowValue:function(){this.trigger.getSearcher().setState(this.storeValue),this.numberCounter.setButtonChecked(this.storeValue)},_stopEditing:function(){this.trigger.stopEditing(),this.numberCounter.hideView()},_defaultState:function(){this._stopEditing(),this.combo.hideView()},setValue:function(v){this.storeValue.value=v||{},this.combo.setValue({value:v||{}}),this.numberCounter.setValue({value:v||{}})},getValue:function(){return BI.deepClone(this.storeValue.value)},populate:function(){this.combo.populate.apply(this.combo,arguments)}}),BI.MultiTreeInsertCombo.EVENT_FOCUS="EVENT_FOCUS",BI.MultiTreeInsertCombo.EVENT_BLUR="EVENT_BLUR",BI.MultiTreeInsertCombo.EVENT_STOP="EVENT_STOP",BI.MultiTreeInsertCombo.EVENT_CLICK_ITEM="EVENT_CLICK_ITEM",BI.MultiTreeInsertCombo.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiTreeInsertCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.multi_tree_insert_combo",BI.MultiTreeInsertCombo),BI.MultiTreeListCombo=BI.inherit(BI.Single,{constants:{offset:{top:0,left:0,right:0,bottom:25}},_defaultConfig:function(){return BI.extend(BI.MultiTreeListCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-tree-list-combo",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,height:24,allowEdit:!0,allowInsertValue:!0})},_init:function(){function showCounter(){isSearching()?self.storeValue={value:self.trigger.getValue()}:isPopupView()&&(self.storeValue={value:self.combo.getValue()}),self.trigger.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue)}BI.MultiTreeListCombo.superclass._init.apply(this,arguments);var self=this,o=this.options,isInit=!1,want2showCounter=!1;this.storeValue={value:o.value||[]},this.trigger=BI.createWidget({type:"bi.multi_select_trigger",allowEdit:o.allowEdit,text:o.text,watermark:o.watermark,height:o.height,valueFormatter:o.valueFormatter,masker:{offset:this.constants.offset},searcher:{type:"bi.multi_list_tree_searcher",itemsCreator:o.itemsCreator,popup:{type:o.allowInsertValue?"bi.multi_tree_search_insert_pane":"bi.multi_tree_search_pane",el:{type:"bi.list_part_tree"},listeners:[{eventName:BI.MultiTreeSearchInsertPane.EVENT_ADD_ITEM,action:function(){self.storeValue.value.unshift([self.trigger.getSearcher().getKeyword()]),self._assertShowValue(),self.combo.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue),self._stopEditing()}}]}},switcher:{el:{type:"bi.multi_tree_check_selected_button"},popup:{type:"bi.multi_tree_check_pane",el:{type:"bi.list_display_tree"},itemsCreator:o.itemsCreator}},value:{value:o.value||{}}}),this.combo=BI.createWidget({type:"bi.combo",toggle:!1,container:o.container,el:this.trigger,adjustLength:1,popup:{type:"bi.multi_tree_popup_view",ref:function(){self.popup=this,self.trigger.setAdapter(this),self.numberCounter.setAdapter(this)},el:{type:"bi.list_async_tree"},listeners:[{eventName:BI.MultiTreePopup.EVENT_AFTERINIT,action:function(){self.numberCounter.adjustView(),isInit=!0,want2showCounter===!0&&showCounter()}},{eventName:BI.MultiTreePopup.EVENT_CHANGE,action:function(){change=!0;var val={type:BI.Selection.Multi,value:this.hasChecked()?this.getValue():[]};self.trigger.getSearcher().setState(val),self.numberCounter.setButtonChecked(val),self.fireEvent(BI.MultiTreeListCombo.EVENT_CLICK_ITEM,self.combo.getValue())}},{eventName:BI.MultiTreePopup.EVENT_CLICK_CONFIRM,action:function(){self.combo.hideView()}},{eventName:BI.MultiTreePopup.EVENT_CLICK_CLEAR,action:function(){clear=!0,self.setValue(),self._defaultState()}}],itemsCreator:o.itemsCreator,onLoaded:function(){BI.nextTick(function(){self.numberCounter.adjustView(),self.trigger.getSearcher().adjustView()})}},value:{value:o.value||{}},hideChecker:function(e){return 0===triggerBtn.element.find(e.target).length&&0===self.numberCounter.element.find(e.target).length}});var change=!1,clear=!1,isSearching=function(){return self.trigger.getSearcher().isSearching()},isPopupView=function(){return self.combo.isViewVisible()};this.trigger.on(BI.MultiSelectTrigger.EVENT_FOCUS,function(){self.fireEvent(BI.MultiTreeListCombo.EVENT_FOCUS)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_BLUR,function(){self.fireEvent(BI.MultiTreeListCombo.EVENT_BLUR)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_START,function(){self.storeValue={value:self.combo.getValue()},this.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP,function(){self.storeValue={value:this.getValue()},self.combo.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue),BI.nextTick(function(){isPopupView()&&self.combo.populate()}),self.fireEvent(BI.MultiTreeListCombo.EVENT_STOP)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_SEARCHING,function(){self.fireEvent(BI.MultiTreeListCombo.EVENT_SEARCHING)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_TRIGGER_CLICK,function(){self.combo.toggle()}),this.trigger.on(BI.MultiSelectTrigger.EVENT_CHANGE,function(){var checked=this.getSearcher().hasChecked(),val={type:BI.Selection.Multi,value:checked?{1:1}:{}};this.getSearcher().setState(checked?BI.Selection.Multi:BI.Selection.None),self.numberCounter.setButtonChecked(val),self.fireEvent(BI.MultiTreeListCombo.EVENT_CLICK_ITEM,self.combo.getValue())}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){isSearching()||(change===!0&&(self.storeValue={value:self.combo.getValue()},change=!1),self.combo.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue),self.populate())}),this.combo.on(BI.Combo.EVENT_BEFORE_HIDEVIEW,function(){isSearching()?(self.trigger.stopEditing(),self.fireEvent(BI.MultiTreeListCombo.EVENT_CONFIRM)):isPopupView()&&(self._stopEditing(),self.storeValue={value:self.combo.getValue()},clear===!0&&(self.storeValue={value:[]}),self.fireEvent(BI.MultiTreeListCombo.EVENT_CONFIRM)),clear=!1,change=!1});var triggerBtn=BI.createWidget({type:"bi.trigger_icon_button",width:o.height,height:o.height,cls:"multi-select-trigger-icon-button"});triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE,function(){self.numberCounter.hideView(),self.combo.isViewVisible()?self.combo.hideView():self.combo.showView()}),this.numberCounter=BI.createWidget({type:"bi.multi_select_check_selected_switcher",el:{type:"bi.multi_tree_check_selected_button"},popup:{type:"bi.multi_tree_check_pane"},itemsCreator:o.itemsCreator,masker:{offset:{left:0,top:0,right:0,bottom:25}},valueFormatter:o.valueFormatter,value:o.value}),this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE,function(){self.combo.isViewVisible()||self.combo.showView()}),this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW,function(){want2showCounter===!1&&(want2showCounter=!0),isInit===!0&&(want2showCounter=null,showCounter())}),this.numberCounter.on(BI.Events.VIEW,function(b){BI.nextTick(function(){self.trigger.refreshPlaceHolderWidth(b===!0?self.numberCounter.element.outerWidth()+8:0)})}),this.trigger.element.click(function(e){self.trigger.element.find(e.target).length>0&&self.numberCounter.hideView()}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.combo,left:0,right:0,top:0,bottom:0},{el:triggerBtn,right:0,top:0,bottom:0},{el:{type:"bi.vertical_adapt",items:[this.numberCounter]},right:o.height,top:0,height:o.height}]})},_assertShowValue:function(){this.trigger.getSearcher().setState(this.storeValue),this.numberCounter.setButtonChecked(this.storeValue)},_stopEditing:function(){this.trigger.stopEditing(),this.numberCounter.hideView()},_defaultState:function(){this._stopEditing(),this.combo.hideView()},setValue:function(v){this.storeValue.value=v||[],this.combo.setValue({value:v||[]}),this.numberCounter.setValue({value:v||[]})},getValue:function(){return BI.deepClone(this.storeValue.value)},populate:function(){this.combo.populate.apply(this.combo,arguments)}}),BI.MultiTreeListCombo.EVENT_FOCUS="EVENT_FOCUS",BI.MultiTreeListCombo.EVENT_BLUR="EVENT_BLUR",BI.MultiTreeListCombo.EVENT_STOP="EVENT_STOP",BI.MultiTreeListCombo.EVENT_CLICK_ITEM="EVENT_CLICK_ITEM",BI.MultiTreeListCombo.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiTreeListCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.multi_tree_list_combo",BI.MultiTreeListCombo),BI.MultiTreePopup=BI.inherit(BI.Pane,{_defaultConfig:function(){return BI.extend(BI.MultiTreePopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-tree-popup",maxWidth:"auto",minWidth:140,maxHeight:400,onLoaded:BI.emptyFn,el:{type:"bi.async_tree"}})},_init:function(){BI.MultiTreePopup.superclass._init.apply(this,arguments);var self=this,opts=this.options,v=opts.value;this.selectedValues={},this.tree=BI.createWidget(opts.el,{type:"bi.async_tree",height:400,cls:"popup-view-tree",itemsCreator:opts.itemsCreator,onLoaded:opts.onLoaded,value:v.value||{}}),this.popupView=BI.createWidget({type:"bi.multi_popup_view",element:this,stopPropagation:!1,maxWidth:opts.maxWidth,minWidth:opts.minWidth,maxHeight:opts.maxHeight,buttons:[BI.i18nText("BI-Basic_Clears"),BI.i18nText("BI-Basic_Sure")],el:this.tree}),this.popupView.on(BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON,function(index){switch(index){case 0:self.fireEvent(BI.MultiTreePopup.EVENT_CLICK_CLEAR);break;case 1:self.fireEvent(BI.MultiTreePopup.EVENT_CLICK_CONFIRM)}}),this.tree.on(BI.TreeView.EVENT_CHANGE,function(){self.fireEvent(BI.MultiTreePopup.EVENT_CHANGE)}),this.tree.on(BI.TreeView.EVENT_AFTERINIT,function(){self.fireEvent(BI.MultiTreePopup.EVENT_AFTERINIT)})},getValue:function(){return this.tree.getValue()},setValue:function(v){v||(v={}),this.tree.setSelectedValue(v.value)},populate:function(config){this.tree.stroke(config)},hasChecked:function(){return this.tree.hasChecked()},resetHeight:function(h){this.popupView.resetHeight(h)},resetWidth:function(w){this.popupView.resetWidth(w)}}),BI.MultiTreePopup.EVENT_CHANGE="EVENT_CHANGE",BI.MultiTreePopup.EVENT_CLICK_CONFIRM="EVENT_CLICK_CONFIRM",BI.MultiTreePopup.EVENT_CLICK_CLEAR="EVENT_CLICK_CLEAR",BI.MultiTreePopup.EVENT_AFTERINIT="EVENT_AFTERINIT",BI.shortcut("bi.multi_tree_popup_view",BI.MultiTreePopup),BI.MultiTreeCheckSelectedButton=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.MultiTreeCheckSelectedButton.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-tree-check-selected-button",itemsCreator:BI.emptyFn})},_init:function(){BI.MultiTreeCheckSelectedButton.superclass._init.apply(this,arguments);var self=this;this.indicator=BI.createWidget({type:"bi.icon_button",cls:"check-font trigger-check-selected icon-size-12",width:15,height:15,stopPropagation:!0}),this.checkSelected=BI.createWidget({type:"bi.text_button",cls:"trigger-check-selected",invisible:!0,hgap:4,text:BI.i18nText("BI-Check_Selected"),textAlign:"center",textHeight:15}),this.checkSelected.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.checkSelected.on(BI.TextButton.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectCheckSelectedButton.EVENT_CHANGE,arguments)}),BI.createWidget({type:"bi.horizontal",element:this,items:[this.indicator,this.checkSelected]}),this.element.hover(function(){self.indicator.setVisible(!1),self.checkSelected.setVisible(!0)},function(){self.indicator.setVisible(!0),self.checkSelected.setVisible(!1)}),this.setVisible(!1)},setValue:function(v){v||(v={});var show=BI.size(v.value)>0;this.setVisible(show),show&&(this.indicator.setVisible(!0),this.checkSelected.setVisible(!1))}}),BI.MultiTreeCheckSelectedButton.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_tree_check_selected_button",BI.MultiTreeCheckSelectedButton),BI.MultiTreeSearchInsertPane=BI.inherit(BI.Widget,{constants:{height:24},props:{baseCls:"bi-multi-tree-search-insert-pane bi-card",itemsCreator:BI.emptyFn,keywordGetter:BI.emptyFn,el:{type:"bi.part_tree"}},render:function(){var self=this,opts=this.options;return{ +type:"bi.absolute",items:[{el:{type:"bi.text_button",invisible:!0,ref:function(_ref){self.addTip=_ref},text:BI.i18nText("BI-Basic_Click_To_Add_Text",""),height:this.constants.height,cls:"bi-high-light",handler:function(){self.fireEvent(BI.MultiTreeSearchInsertPane.EVENT_ADD_ITEM,opts.keywordGetter())}},top:5,left:0,right:0},{el:BI.extend({type:"bi.part_tree",tipText:BI.i18nText("BI-No_Select"),itemsCreator:function(op,callback){op.keyword=opts.keywordGetter(),opts.itemsCreator(op,function(res){callback(res),self.setKeyword(opts.keywordGetter(),res.items)})},ref:function(_ref){self.partTree=_ref},value:opts.value,listeners:[{eventName:BI.Controller.EVENT_CHANGE,action:function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}},{eventName:BI.TreeView.EVENT_CHANGE,action:function(){self.fireEvent(BI.MultiTreeSearchInsertPane.EVENT_CHANGE)}}]},opts.el),left:0,top:0,bottom:0,right:0}]}},setKeyword:function(keyword,nodes){var isAddTipVisible=BI.isEmptyArray(nodes);this.addTip.setVisible(isAddTipVisible),this.partTree.setVisible(!isAddTipVisible),isAddTipVisible&&this.addTip.setText(BI.i18nText("BI-Basic_Click_To_Add_Text",keyword))},hasChecked:function(){return this.partTree.hasChecked()},setValue:function(v){this.setSelectedValue(v.value)},setSelectedValue:function(v){v||(v={}),this.partTree.setSelectedValue(v)},getValue:function(){return this.partTree.getValue()},empty:function(){this.partTree.empty()},populate:function(op){this.partTree.stroke.apply(this.partTree,arguments)}}),BI.MultiTreeSearchInsertPane.EVENT_CHANGE="EVENT_CHANGE",BI.MultiTreeSearchInsertPane.EVENT_CLICK_CONFIRM="EVENT_CLICK_CONFIRM",BI.MultiTreeSearchInsertPane.EVENT_CLICK_CLEAR="EVENT_CLICK_CLEAR",BI.MultiTreeSearchInsertPane.EVENT_ADD_ITEM="EVENT_ADD_ITEM",BI.shortcut("bi.multi_tree_search_insert_pane",BI.MultiTreeSearchInsertPane),BI.MultiTreeSearchPane=BI.inherit(BI.Pane,{_defaultConfig:function(){return BI.extend(BI.MultiTreeSearchPane.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-tree-search-pane bi-card",itemsCreator:BI.emptyFn,keywordGetter:BI.emptyFn})},_init:function(){BI.MultiTreeSearchPane.superclass._init.apply(this,arguments);var self=this,opts=this.options;this.partTree=BI.createWidget({type:"bi.part_tree",element:this,tipText:BI.i18nText("BI-No_Select"),itemsCreator:function(op,callback){op.keyword=opts.keywordGetter(),opts.itemsCreator(op,callback)},value:opts.value}),this.partTree.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.partTree.on(BI.TreeView.EVENT_CHANGE,function(){self.fireEvent(BI.MultiTreeSearchPane.EVENT_CHANGE)})},hasChecked:function(){return this.partTree.hasChecked()},setValue:function(v){this.setSelectedValue(v.value)},setSelectedValue:function(v){v||(v={}),this.partTree.setSelectedValue(v)},getValue:function(){return this.partTree.getValue()},empty:function(){this.partTree.empty()},populate:function(op){this.partTree.stroke.apply(this.partTree,arguments)}}),BI.MultiTreeSearchPane.EVENT_CHANGE="EVENT_CHANGE",BI.MultiTreeSearchPane.EVENT_CLICK_CONFIRM="EVENT_CLICK_CONFIRM",BI.MultiTreeSearchPane.EVENT_CLICK_CLEAR="EVENT_CLICK_CLEAR",BI.shortcut("bi.multi_tree_search_pane",BI.MultiTreeSearchPane),BI.MultiListTreeSearcher=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiListTreeSearcher.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-tree-searcher",itemsCreator:BI.emptyFn,valueFormatter:function(v){return v},popup:{},adapter:null,masker:{}})},_init:function(){BI.MultiListTreeSearcher.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget({type:"bi.multi_select_editor",height:o.height,el:{type:"bi.simple_state_editor",height:o.height}}),this.searcher=BI.createWidget({type:"bi.searcher",element:this,isAutoSearch:!1,isAutoSync:!1,onSearch:function(op,callback){callback({keyword:self.editor.getValue()})},el:this.editor,popup:BI.extend({type:"bi.multi_tree_search_pane",keywordGetter:function(){return self.editor.getValue()},itemsCreator:function(op,callback){op.keyword=self.editor.getValue(),o.itemsCreator(op,callback)},value:o.value},o.popup),adapter:o.adapter,masker:o.masker}),this.searcher.on(BI.Searcher.EVENT_START,function(){self.fireEvent(BI.MultiListTreeSearcher.EVENT_START)}),this.searcher.on(BI.Searcher.EVENT_PAUSE,function(){this.hasMatched(),self.fireEvent(BI.MultiListTreeSearcher.EVENT_PAUSE)}),this.searcher.on(BI.Searcher.EVENT_STOP,function(){self.fireEvent(BI.MultiListTreeSearcher.EVENT_STOP)}),this.searcher.on(BI.Searcher.EVENT_CHANGE,function(){self.fireEvent(BI.MultiListTreeSearcher.EVENT_CHANGE,arguments)}),BI.isNotNull(o.value)&&this.setState(o.value)},adjustView:function(){this.searcher.adjustView()},setAdapter:function(adapter){this.searcher.setAdapter(adapter)},isSearching:function(){return this.searcher.isSearching()},stopSearch:function(){this.searcher.stopSearch()},getKeyword:function(){return this.editor.getValue()},hasMatched:function(){return this.searcher.hasMatched()},hasChecked:function(){return this.searcher.getView()&&this.searcher.getView().hasChecked()},setState:function(ob){var o=this.options;ob||(ob={}),ob.value||(ob.value=[]);var count=0;if(BI.isNumber(ob))this.editor.setState(ob);else if(0===BI.size(ob.value))this.editor.setState(BI.Selection.None);else{var text="";BI.each(ob.value,function(idx,path){var childValue=BI.last(path);text+=(o.valueFormatter(childValue+"")||childValue)+"; ",count++}),count>20?this.editor.setState(BI.Selection.Multi):this.editor.setState(text)}},setValue:function(ob){this.setState(ob),this.searcher.setValue(ob)},getKey:function(){return this.editor.getValue()},getValue:function(){return this.searcher.getValue()},populate:function(items){this.searcher.populate.apply(this.searcher,arguments)}}),BI.MultiListTreeSearcher.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.MultiListTreeSearcher.EVENT_CHANGE="EVENT_CHANGE",BI.MultiListTreeSearcher.EVENT_START="EVENT_START",BI.MultiListTreeSearcher.EVENT_STOP="EVENT_STOP",BI.MultiListTreeSearcher.EVENT_PAUSE="EVENT_PAUSE",BI.shortcut("bi.multi_list_tree_searcher",BI.MultiListTreeSearcher),BI.MultiTreeSearcher=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiTreeSearcher.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-tree-searcher",itemsCreator:BI.emptyFn,valueFormatter:function(v){return v},popup:{},adapter:null,masker:{}})},_init:function(){BI.MultiTreeSearcher.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget({type:"bi.multi_select_editor",watermark:o.watermark,height:o.height,el:{type:"bi.simple_state_editor",text:o.text,height:o.height},listeners:[{eventName:BI.MultiSelectEditor.EVENT_FOCUS,action:function(){self.fireEvent(BI.MultiSelectSearcher.EVENT_FOCUS)}},{eventName:BI.MultiSelectEditor.EVENT_BLUR,action:function(){self.fireEvent(BI.MultiSelectSearcher.EVENT_BLUR)}}]}),this.searcher=BI.createWidget({type:"bi.searcher",element:this,isAutoSearch:!1,isAutoSync:!1,onSearch:function(op,callback){callback({keyword:self.editor.getValue()})},el:this.editor,popup:BI.extend({type:"bi.multi_tree_search_pane",keywordGetter:function(){return self.editor.getValue()},itemsCreator:function(op,callback){op.keyword=self.editor.getValue(),o.itemsCreator(op,callback)},value:o.value},o.popup),adapter:o.adapter,masker:o.masker}),this.searcher.on(BI.Searcher.EVENT_START,function(){self.fireEvent(BI.MultiTreeSearcher.EVENT_START)}),this.searcher.on(BI.Searcher.EVENT_PAUSE,function(){this.hasMatched(),self.fireEvent(BI.MultiTreeSearcher.EVENT_PAUSE)}),this.searcher.on(BI.Searcher.EVENT_STOP,function(){self.fireEvent(BI.MultiTreeSearcher.EVENT_STOP)}),this.searcher.on(BI.Searcher.EVENT_CHANGE,function(){self.fireEvent(BI.MultiTreeSearcher.EVENT_CHANGE,arguments)}),this.searcher.on(BI.Searcher.EVENT_SEARCHING,function(){var keywords=this.getKeywords();self.fireEvent(BI.MultiTreeSearcher.EVENT_SEARCHING,keywords)}),BI.isNotNull(o.value)&&this.setState(o.value)},adjustView:function(){this.searcher.adjustView()},setAdapter:function(adapter){this.searcher.setAdapter(adapter)},isSearching:function(){return this.searcher.isSearching()},stopSearch:function(){this.searcher.stopSearch()},getKeyword:function(){return this.editor.getValue()},hasMatched:function(){return this.searcher.hasMatched()},hasChecked:function(){return this.searcher.getView()&&this.searcher.getView().hasChecked()},setState:function(ob){function getChildrenNode(ob){var text="",index=0,size=BI.size(ob);return BI.each(ob,function(name,children){index++;var childNodes=getChildrenNode(children);text+=(o.valueFormatter(name+"")||name)+(""===childNodes?"":":"+childNodes)+(index===size?"":","),""===childNodes&&count++}),text}var o=this.options;ob||(ob={}),ob.value||(ob.value={});var count=0;if(BI.isNumber(ob))this.editor.setState(ob);else if(0===BI.size(ob.value))this.editor.setState(BI.Selection.None);else{var text="";BI.each(ob.value,function(name,children){var childNodes=getChildrenNode(children);text+=(o.valueFormatter(name+"")||name)+(""===childNodes?"":":"+childNodes)+"; ",""===childNodes&&count++}),count>20?this.editor.setState(BI.Selection.Multi):this.editor.setState(text)}},setValue:function(ob){this.setState(ob),this.searcher.setValue(ob)},getKey:function(){return this.editor.getValue()},getValue:function(){return this.searcher.getValue()},populate:function(items){this.searcher.populate.apply(this.searcher,arguments)}}),BI.MultiTreeSearcher.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiTreeSearcher.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.MultiTreeSearcher.EVENT_CHANGE="EVENT_CHANGE",BI.MultiTreeSearcher.EVENT_START="EVENT_START",BI.MultiTreeSearcher.EVENT_STOP="EVENT_STOP",BI.MultiTreeSearcher.EVENT_PAUSE="EVENT_PAUSE",BI.shortcut("bi.multi_tree_searcher",BI.MultiTreeSearcher),BI.NumberEditor=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.NumberEditor.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-number-editor bi-border bi-focus-shadow",validationChecker:function(){return!0},valueFormatter:function(v){return v},value:0,allowBlank:!1,errorText:"",step:1})},_init:function(){BI.NumberEditor.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget({type:"bi.sign_editor",height:o.height-2,allowBlank:o.allowBlank,value:o.valueFormatter(o.value),validationChecker:o.validationChecker,errorText:o.errorText}),this.editor.on(BI.TextEditor.EVENT_CHANGE,function(){self.fireEvent(BI.NumberEditor.EVENT_CHANGE)}),this.editor.on(BI.TextEditor.EVENT_ERROR,function(){o.value=BI.parseFloat(this.getLastValidValue())}),this.editor.on(BI.TextEditor.EVENT_VALID,function(){o.value=BI.parseFloat(this.getValue())}),this.editor.on(BI.TextEditor.EVENT_CONFIRM,function(){self.fireEvent(BI.NumberEditor.EVENT_CONFIRM)}),this.topBtn=BI.createWidget({type:"bi.icon_button",forceNotSelected:!0,trigger:"lclick,",cls:"add-up-font top-button bi-border-left bi-list-item-active2 icon-size-12"}),this.topBtn.on(BI.IconButton.EVENT_CHANGE,function(){self._finetuning(o.step),self.fireEvent(BI.NumberEditor.EVENT_CHANGE),self.fireEvent(BI.NumberEditor.EVENT_CONFIRM)}),this.bottomBtn=BI.createWidget({type:"bi.icon_button",trigger:"lclick,",forceNotSelected:!0,cls:"minus-down-font bottom-button bi-border-left bi-list-item-active2 icon-size-12"}),this.bottomBtn.on(BI.IconButton.EVENT_CHANGE,function(){self._finetuning(-o.step),self.fireEvent(BI.NumberEditor.EVENT_CHANGE),self.fireEvent(BI.NumberEditor.EVENT_CONFIRM)}),BI.createWidget({type:"bi.htape",height:o.height-2,element:this,items:[this.editor,{el:{type:"bi.grid",columns:1,rows:2,items:[{column:0,row:0,el:this.topBtn},{column:0,row:1,el:this.bottomBtn}]},width:23}]})},focus:function(){this.editor.focus()},isEditing:function(){return this.editor.isEditing()},_finetuning:function(add){var v=BI.parseFloat(this.getValue());this.setValue(BI.add(v,add))},setUpEnable:function(v){this.topBtn.setEnable(!!v)},setDownEnable:function(v){this.bottomBtn.setEnable(!!v)},getLastValidValue:function(){return this.editor.getLastValidValue()},getLastChangedValue:function(){return this.editor.getLastChangedValue()},getValue:function(){return this.options.value},setValue:function(v){var o=this.options;o.value=v,this.editor.setValue(o.valueFormatter(v))}}),BI.NumberEditor.EVENT_CONFIRM="EVENT_CONFIRM",BI.NumberEditor.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.number_editor",BI.NumberEditor),BI.NumberInterval=BI.inherit(BI.Single,{constants:{typeError:"typeBubble",numberError:"numberBubble",signalError:"signalBubble",editorWidth:114,columns:5,width:24,rows:1,numberErrorCls:"number-error",border:1,less:0,less_equal:1,numTip:"",adjustYOffset:2},_defaultConfig:function(){var conf=BI.NumberInterval.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-number-interval"+(BI.isIE()&&BI.getIEVersion()<10?" hack":""),height:24,validation:"valid",closeMin:!0,allowBlank:!0,watermark:BI.i18nText("BI-Basic_Unrestricted")})},_init:function(){var self=this,c=this.constants,o=this.options;BI.NumberInterval.superclass._init.apply(this,arguments),this.smallEditor=BI.createWidget({type:"bi.number_interval_single_editor",height:o.height-2,watermark:o.watermark,allowBlank:o.allowBlank,value:o.min,level:"warning",tipType:"success",title:function(){return self.smallEditor&&self.smallEditor.getValue()},quitChecker:function(){return!1},validationChecker:function(v){return!!BI.isNumeric(v)||(self.smallEditorBubbleType=c.typeError,!1)},cls:"number-interval-small-editor bi-border"}),this.smallTip=BI.createWidget({type:"bi.label",text:o.numTip,height:o.height-2,invisible:!0}),BI.createWidget({type:"bi.absolute",element:this.smallEditor.element,items:[{el:this.smallTip,top:0,right:5}]}),this.bigEditor=BI.createWidget({type:"bi.number_interval_single_editor",height:o.height-2,watermark:o.watermark,allowBlank:o.allowBlank,value:o.max,level:"warning",tipType:"success",title:function(){return self.bigEditor&&self.bigEditor.getValue()},quitChecker:function(){return!1},validationChecker:function(v){return!!BI.isNumeric(v)||(self.bigEditorBubbleType=c.typeError,!1)},cls:"number-interval-big-editor bi-border"}),this.bigTip=BI.createWidget({type:"bi.label",text:o.numTip,height:o.height-2,invisible:!0}),BI.createWidget({type:"bi.absolute",element:this.bigEditor.element,items:[{el:this.bigTip,top:0,right:5}]}),this.smallCombo=BI.createWidget({type:"bi.icon_combo",cls:"number-interval-small-combo bi-border-top bi-border-bottom bi-border-right",height:o.height-2,items:[{text:"("+BI.i18nText("BI-Less_Than")+")",iconCls:"less-font",value:0},{text:"("+BI.i18nText("BI-Less_And_Equal")+")",value:1,iconCls:"less-equal-font"}]}),o.closeMin===!0?this.smallCombo.setValue(1):this.smallCombo.setValue(0),this.bigCombo=BI.createWidget({type:"bi.icon_combo",cls:"number-interval-big-combo bi-border-top bi-border-bottom bi-border-left",height:o.height-2,items:[{text:"("+BI.i18nText("BI-Less_Than")+")",iconCls:"less-font",value:0},{text:"("+BI.i18nText("BI-Less_And_Equal")+")",value:1,iconCls:"less-equal-font"}]}),o.closeMax===!0?this.bigCombo.setValue(1):this.bigCombo.setValue(0),this.label=BI.createWidget({type:"bi.label",text:BI.i18nText("BI-Basic_Value"),textHeight:o.height-2*c.border,width:c.width-2*c.border,height:o.height-2*c.border,level:"warning",tipType:"warning"}),this.left=BI.createWidget({type:"bi.htape",items:[{el:self.smallEditor},{el:self.smallCombo,width:c.width-c.border}]}),this.right=BI.createWidget({type:"bi.htape",items:[{el:self.bigCombo,width:c.width-c.border},{el:self.bigEditor,lgap:1}]}),BI.createWidget({element:self,type:"bi.center",hgap:15,height:o.height,items:[{type:"bi.absolute",items:[{el:self.left,left:-15,right:0,top:0,bottom:0}]},{type:"bi.absolute",items:[{el:self.right,left:0,right:-15,top:0,bottom:0}]}]}),BI.createWidget({element:self,type:"bi.horizontal_auto",items:[self.label]}),self._setValidEvent(self.bigEditor,c.bigEditor),self._setValidEvent(self.smallEditor,c.smallEditor),self._setErrorEvent(self.bigEditor,c.bigEditor),self._setErrorEvent(self.smallEditor,c.smallEditor),self._setBlurEvent(self.bigEditor),self._setBlurEvent(self.smallEditor),self._setFocusEvent(self.bigEditor),self._setFocusEvent(self.smallEditor),self._setComboValueChangedEvent(self.bigCombo),self._setComboValueChangedEvent(self.smallCombo),self._setEditorValueChangedEvent(self.bigEditor),self._setEditorValueChangedEvent(self.smallEditor),self._checkValidation()},_checkValidation:function(){var self=this,c=this.constants,o=this.options;if(self._setTitle(""),BI.Bubbles.hide(c.typeError),BI.Bubbles.hide(c.numberError),BI.Bubbles.hide(c.signalError),!self.smallEditor.isValid()||!self.bigEditor.isValid())return self.element.removeClass("number-error"),o.validation="invalid",c.typeError;if(BI.isEmptyString(self.smallEditor.getValue())||BI.isEmptyString(self.bigEditor.getValue()))return self.element.removeClass("number-error"),o.validation="valid","";var smallValue=parseFloat(self.smallEditor.getValue()),bigValue=parseFloat(self.bigEditor.getValue()),bigComboValue=self.bigCombo.getValue(),smallComboValue=self.smallCombo.getValue();return bigComboValue[0]===c.less_equal&&smallComboValue[0]===c.less_equal?smallValue>bigValue?(self.element.addClass("number-error"),o.validation="invalid",c.numberError):(self.element.removeClass("number-error"),o.validation="valid",""):smallValue>bigValue?(self.element.addClass("number-error"),o.validation="invalid",c.numberError):smallValue===bigValue?(self.element.addClass("number-error"),o.validation="invalid",c.signalError):(self.element.removeClass("number-error"),o.validation="valid","")},_setTitle:function(v){var self=this;self.bigEditor.setTitle(v),self.smallEditor.setTitle(v),self.label.setTitle(v)},_setFocusEvent:function(w){var self=this,c=this.constants;w.on(BI.NumberIntervalSingleEidtor.EVENT_FOCUS,function(){switch(self._setTitle(""),self._checkValidation()){case c.typeError:BI.Bubbles.show(c.typeError,BI.i18nText("BI-Numerical_Interval_Input_Data"),self,{offsetStyle:"left",adjustYOffset:c.adjustYOffset});break;case c.numberError:BI.Bubbles.show(c.numberError,BI.i18nText("BI-Numerical_Interval_Number_Value"),self,{offsetStyle:"left",adjustYOffset:c.adjustYOffset});break;case c.signalError:BI.Bubbles.show(c.signalError,BI.i18nText("BI-Numerical_Interval_Signal_Value"),self,{offsetStyle:"left",adjustYOffset:c.adjustYOffset});break;default:return}})},_setBlurEvent:function(w){var c=this.constants,self=this;w.on(BI.NumberIntervalSingleEidtor.EVENT_BLUR,function(){switch(BI.Bubbles.hide(c.typeError),BI.Bubbles.hide(c.numberError),BI.Bubbles.hide(c.signalError),self._checkValidation()){case c.typeError:self._setTitle(BI.i18nText("BI-Numerical_Interval_Input_Data"));break;case c.numberError:self._setTitle(BI.i18nText("BI-Numerical_Interval_Number_Value"));break;case c.signalError:self._setTitle(BI.i18nText("BI-Numerical_Interval_Signal_Value"));break;default:self._setTitle("")}})},_setErrorEvent:function(w){var c=this.constants,self=this;w.on(BI.NumberIntervalSingleEidtor.EVENT_ERROR,function(){self._checkValidation(),BI.Bubbles.show(c.typeError,BI.i18nText("BI-Numerical_Interval_Input_Data"),self,{offsetStyle:"left",adjustYOffset:c.adjustYOffset}),self.fireEvent(BI.NumberInterval.EVENT_ERROR)})},_setValidEvent:function(w){var self=this,c=this.constants;w.on(BI.NumberIntervalSingleEidtor.EVENT_VALID,function(){switch(self._checkValidation()){case c.numberError:BI.Bubbles.show(c.numberError,BI.i18nText("BI-Numerical_Interval_Number_Value"),self,{offsetStyle:"left",adjustYOffset:c.adjustYOffset}),self.fireEvent(BI.NumberInterval.EVENT_ERROR);break;case c.signalError:BI.Bubbles.show(c.signalError,BI.i18nText("BI-Numerical_Interval_Signal_Value"),self,{offsetStyle:"left",adjustYOffset:c.adjustYOffset}),self.fireEvent(BI.NumberInterval.EVENT_ERROR);break;default:self.fireEvent(BI.NumberInterval.EVENT_VALID)}})},_setEditorValueChangedEvent:function(w){var self=this,c=this.constants;w.on(BI.NumberIntervalSingleEidtor.EVENT_CHANGE,function(){switch(self._checkValidation()){case c.typeError:BI.Bubbles.show(c.typeError,BI.i18nText("BI-Numerical_Interval_Input_Data"),self,{offsetStyle:"left",adjustYOffset:c.adjustYOffset});break;case c.numberError:BI.Bubbles.show(c.numberError,BI.i18nText("BI-Numerical_Interval_Number_Value"),self,{offsetStyle:"left",adjustYOffset:c.adjustYOffset});break;case c.signalError:BI.Bubbles.show(c.signalError,BI.i18nText("BI-Numerical_Interval_Signal_Value"),self,{offsetStyle:"left",adjustYOffset:c.adjustYOffset})}self.fireEvent(BI.NumberInterval.EVENT_CHANGE)}),w.on(BI.NumberIntervalSingleEidtor.EVENT_CONFIRM,function(){self.fireEvent(BI.NumberInterval.EVENT_CONFIRM)})},_setComboValueChangedEvent:function(w){var self=this,c=this.constants;w.on(BI.IconCombo.EVENT_CHANGE,function(){switch(self._checkValidation()){case c.typeError:self._setTitle(BI.i18nText("BI-Numerical_Interval_Input_Data")),self.fireEvent(BI.NumberInterval.EVENT_ERROR);break;case c.numberError:self._setTitle(BI.i18nText("BI-Numerical_Interval_Number_Value")),self.fireEvent(BI.NumberInterval.EVENT_ERROR);break;case c.signalError:self._setTitle(BI.i18nText("BI-Numerical_Interval_Signal_Value")),self.fireEvent(BI.NumberInterval.EVENT_ERROR);break;default:self.fireEvent(BI.NumberInterval.EVENT_CHANGE),self.fireEvent(BI.NumberInterval.EVENT_CONFIRM),self.fireEvent(BI.NumberInterval.EVENT_VALID)}})},isStateValid:function(){return"valid"===this.options.validation},setMinEnable:function(b){this.smallEditor.setEnable(b)},setCloseMinEnable:function(b){this.smallCombo.setEnable(b)},setMaxEnable:function(b){this.bigEditor.setEnable(b)},setCloseMaxEnable:function(b){this.bigCombo.setEnable(b)},showNumTip:function(){this.smallTip.setVisible(!0),this.bigTip.setVisible(!0)},hideNumTip:function(){this.smallTip.setVisible(!1),this.bigTip.setVisible(!1)},setNumTip:function(numTip){this.smallTip.setText(numTip),this.bigTip.setText(numTip)},getNumTip:function(){return this.smallTip.getText()},setValue:function(data){data=data||{};var self=this,combo_value;(BI.isNumeric(data.min)||BI.isEmptyString(data.min))&&self.smallEditor.setValue(data.min),BI.isNotNull(data.min)||self.smallEditor.setValue(""),(BI.isNumeric(data.max)||BI.isEmptyString(data.max))&&self.bigEditor.setValue(data.max),BI.isNotNull(data.max)||self.bigEditor.setValue(""),BI.isNull(data.closeMin)||(combo_value=data.closeMin===!0?1:0,self.smallCombo.setValue(combo_value)),BI.isNull(data.closeMax)||(combo_value=data.closeMax===!0?1:0,self.bigCombo.setValue(combo_value)),this._checkValidation()},getValue:function(){var self=this,value={},minComboValue=self.smallCombo.getValue(),maxComboValue=self.bigCombo.getValue();return value.min=self.smallEditor.getValue(),value.max=self.bigEditor.getValue(),0===minComboValue[0]?value.closeMin=!1:value.closeMin=!0,0===maxComboValue[0]?value.closeMax=!1:value.closeMax=!0,value},destroyed:function(){var c=this.constants;BI.Bubbles.remove(c.typeError),BI.Bubbles.remove(c.numberError),BI.Bubbles.remove(c.signalError)}}),BI.NumberInterval.EVENT_CHANGE="EVENT_CHANGE",BI.NumberInterval.EVENT_CONFIRM="EVENT_CONFIRM",BI.NumberInterval.EVENT_VALID="EVENT_VALID",BI.NumberInterval.EVENT_ERROR="EVENT_ERROR",BI.shortcut("bi.number_interval",BI.NumberInterval),BI.NumberIntervalSingleEidtor=BI.inherit(BI.Single,{props:{baseCls:"bi-number-interval-single-editor",tipType:"success",title:""},render:function(){var self=this,o=this.options;return{type:"bi.vertical",items:[{type:"bi.editor",ref:function(_ref){self.editor=_ref},height:o.height-2,watermark:o.watermark,allowBlank:o.allowBlank,value:o.value,level:o.level,quitChecker:o.quitChecker,validationChecker:o.validationChecker,listeners:[{eventName:BI.Editor.EVENT_ERROR,action:function(){self.fireEvent(BI.NumberIntervalSingleEidtor.EVENT_ERROR,arguments)}},{eventName:BI.Editor.EVENT_FOCUS,action:function(){self.fireEvent(BI.NumberIntervalSingleEidtor.EVENT_FOCUS,arguments)}},{eventName:BI.Editor.EVENT_BLUR,action:function(){self.fireEvent(BI.NumberIntervalSingleEidtor.EVENT_BLUR,arguments)}},{eventName:BI.Editor.EVENT_VALID,action:function(){self.fireEvent(BI.NumberIntervalSingleEidtor.EVENT_VALID,arguments)}},{eventName:BI.Editor.EVENT_CHANGE,action:function(){self.fireEvent(BI.NumberIntervalSingleEidtor.EVENT_CHANGE,arguments)}},{eventName:BI.Editor.EVENT_CONFIRM,action:function(){self.fireEvent(BI.NumberIntervalSingleEidtor.EVENT_CONFIRM,arguments)}},{eventName:BI.Editor.EVENT_CHANGE_CONFIRM,action:function(){self.fireEvent(BI.NumberIntervalSingleEidtor.EVENT_CHANGE_CONFIRM,arguments)}}]}]}},isValid:function(){return this.editor.isValid()},getValue:function(){return this.editor.getValue()},setTitle:function(v){return this.editor.setTitle(v)},setValue:function(v){return this.editor.setValue(v)}}),BI.NumberIntervalSingleEidtor.EVENT_FOCUS="EVENT_FOCUS",BI.NumberIntervalSingleEidtor.EVENT_BLUR="EVENT_BLUR",BI.NumberIntervalSingleEidtor.EVENT_ERROR="EVENT_ERROR",BI.NumberIntervalSingleEidtor.EVENT_VALID="EVENT_VALID",BI.NumberIntervalSingleEidtor.EVENT_CHANGE="EVENT_CHANGE",BI.NumberIntervalSingleEidtor.EVENT_CHANGE_CONFIRM="EVENT_CHANGE_CONFIRM",BI.NumberIntervalSingleEidtor.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.number_interval_single_editor",BI.NumberIntervalSingleEidtor),BI.SearchMultiTextValueCombo=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.SearchMultiTextValueCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-combo bi-search-multi-text-value-combo",height:24,items:[]})},_init:function(){BI.SearchMultiTextValueCombo.superclass._init.apply(this,arguments);var self=this,o=this.options,assertShowValue=function(){BI.isKey(self._startValue)&&(self.storeValue.type===BI.Selection.All?BI.remove(self.storeValue.value,self._startValue):BI.pushDistinct(self.storeValue.value,self._startValue)),self._updateAllValue(),self._checkError(),self.trigger.getSearcher().setState(self.storeValue),self.trigger.getCounter().setButtonChecked(self.storeValue)};this.storeValue=BI.deepClone(o.value||{}),this._updateAllValue(),this._assertValue(this.storeValue),this._checkError(),this.requesting=!1,this.trigger=BI.createWidget({type:"bi.search_multi_select_trigger",text:o.text,height:o.height,masker:{offset:{left:0,top:0,right:0,bottom:25}},allValueGetter:function(){return self.allValue},valueFormatter:o.valueFormatter,itemsCreator:function(op,callback){self._itemsCreator(op,function(res){1===op.times&&BI.isNotNull(op.keywords)&&self.trigger.setValue(BI.deepClone(self.getValue())),callback.apply(self,arguments)})},value:this.storeValue,warningTitle:o.warningTitle}),this.trigger.on(BI.MultiSelectTrigger.EVENT_START,function(){self._setStartValue(""),this.getSearcher().setValue(self.storeValue)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP,function(){self._setStartValue("")}),this.trigger.on(BI.MultiSelectTrigger.EVENT_PAUSE,function(){if(this.getSearcher().hasMatched()){var keyword=this.getSearcher().getKeyword();self._join({type:BI.Selection.Multi,value:[keyword]},function(){self.combo.setValue(self.storeValue),self._setStartValue(keyword),assertShowValue(),self._populate(),self._setStartValue("")})}}),this.trigger.on(BI.MultiSelectTrigger.EVENT_SEARCHING,function(keywords){var last=BI.last(keywords);keywords=BI.initial(keywords||[]),keywords.length>0&&self._joinKeywords(keywords,function(){BI.isEndWithBlank(last)?(self.combo.setValue(self.storeValue),assertShowValue(),self.combo.populate(),self._setStartValue("")):(self.combo.setValue(self.storeValue),assertShowValue())})}),this.trigger.on(BI.MultiSelectTrigger.EVENT_CHANGE,function(value,obj){obj instanceof BI.MultiSelectBar?self._joinAll(this.getValue(),function(){assertShowValue()}):self._join(this.getValue(),function(){assertShowValue()})}),this.trigger.on(BI.MultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW,function(){this.getCounter().setValue(self.storeValue)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_COUNTER_CLICK,function(){self.combo.isViewVisible()||self.combo.showView()}),this.combo=BI.createWidget({type:"bi.combo",toggle:!1,container:o.container,el:this.trigger,adjustLength:1,popup:{type:"bi.search_multi_select_popup_view",ref:function(){self.popup=this,self.trigger.setAdapter(this)},listeners:[{eventName:BI.MultiSelectPopupView.EVENT_CHANGE,action:function(){self.storeValue=this.getValue(),self._adjust(function(){assertShowValue()})}},{eventName:BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM,action:function(){self._defaultState()}},{eventName:BI.MultiSelectPopupView.EVENT_CLICK_CLEAR,action:function(){self.setValue(),self._defaultState()}}],itemsCreator:BI.bind(self._itemsCreator,this),valueFormatter:o.valueFormatter,onLoaded:function(){BI.nextTick(function(){self.combo.adjustWidth(),self.combo.adjustHeight(),self.trigger.getCounter().adjustView(),self.trigger.getSearcher().adjustView()})}},value:o.value,hideChecker:function(e){return 0===triggerBtn.element.find(e.target).length}}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){this.setValue(self.storeValue),BI.nextTick(function(){self._populate()})}),this.wants2Quit=!1,this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW,function(){self.trigger.stopEditing(),self.requesting===!0?self.wants2Quit=!0:(assertShowValue(),self.fireEvent(BI.SearchMultiTextValueCombo.EVENT_CONFIRM))});var triggerBtn=BI.createWidget({type:"bi.trigger_icon_button",width:o.height,height:o.height,cls:"multi-select-trigger-icon-button"});triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE,function(){self.trigger.getCounter().hideView(),self.combo.isViewVisible()?self.combo.hideView():self.combo.showView()}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.combo,left:0,right:0,top:0,bottom:0},{el:triggerBtn,right:0,top:0,bottom:0}]}),this._checkError()},_defaultState:function(){this.trigger.stopEditing(),this.combo.hideView()},_assertValue:function(val){var o=this.options;val||(val={}),val.type||(val.type=BI.Selection.Multi),val.value||(val.value=[]),BI.remove(val.value,function(idx,value){return!BI.contains(BI.map(o.items,"value"),value)})},_makeMap:function(values){return BI.makeObject(values||[])},_joinKeywords:function(keywords,callback){function digest(items){var selectedMap=self._makeMap(items);BI.each(keywords,function(i,val){BI.isNotNull(selectedMap[val])&&(self.storeValue.type===BI.Selection.Multi?BI.pushDistinct(self.storeValue.value,val):BI.remove(self.storeValue.value,val))}),self._adjust(callback)}var self=this,o=this.options;this._assertValue(this.storeValue),this.requesting=!0,this._itemsCreator({type:BI.SearchMultiTextValueCombo.REQ_GET_ALL_DATA,keywords:keywords},function(ob){var values=BI.map(ob.items,"value");digest(values)})},_joinAll:function(res,callback){var self=this,o=this.options;this._assertValue(res),this.requesting=!0,this._itemsCreator({type:BI.SearchMultiTextValueCombo.REQ_GET_ALL_DATA,keywords:[this.trigger.getKey()]},function(ob){var items=BI.map(ob.items,"value");if(self.storeValue.type===res.type){var change=!1,map=self._makeMap(self.storeValue.value);return BI.each(items,function(i,v){BI.isNotNull(map[v])&&(change=!0,self.storeValue.assist&&self.storeValue.assist.push(map[v]),delete map[v])}),change&&(self.storeValue.value=BI.values(map)),void self._adjust(callback)}var selectedMap=self._makeMap(self.storeValue.value),notSelectedMap=self._makeMap(res.value),newItems=[];BI.each(items,function(i,item){BI.isNotNull(selectedMap[items[i]])&&(self.storeValue.assist&&self.storeValue.assist.push(selectedMap[items[i]]),delete selectedMap[items[i]]),BI.isNull(notSelectedMap[items[i]])&&(BI.remove(self.storeValue.assist,item),newItems.push(item))}),self.storeValue.value=newItems.concat(BI.values(selectedMap)),self._adjust(callback)})},_adjust:function(callback){function adjust(){self.storeValue.type===BI.Selection.All&&self.storeValue.value.length>=self._count?self.storeValue={type:BI.Selection.Multi,value:[]}:self.storeValue.type===BI.Selection.Multi&&self.storeValue.value.length>=self._count&&(self.storeValue={ +type:BI.Selection.All,value:[]}),self._updateAllValue(),self._checkError(),self.wants2Quit===!0&&(self.fireEvent(BI.SearchMultiTextValueCombo.EVENT_CONFIRM),self.wants2Quit=!1),self.requesting=!1}var self=this,o=this.options;this._count?(adjust(),callback()):this._itemsCreator({type:BI.SearchMultiTextValueCombo.REQ_GET_DATA_LENGTH},function(res){self._count=res.count,adjust(),callback()})},_join:function(res,callback){var self=this,o=this.options;if(this._assertValue(res),this._assertValue(this.storeValue),this.storeValue.type===res.type){var map=this._makeMap(this.storeValue.value);BI.each(res.value,function(i,v){map[v]||(self.storeValue.value.push(v),BI.remove(self.storeValue.assist,v),map[v]=v)});var change=!1;return BI.each(res.assist,function(i,v){BI.isNotNull(map[v])&&(change=!0,self.storeValue.assist&&self.storeValue.assist.push(map[v]),delete map[v])}),change&&(this.storeValue.value=BI.values(map)),void self._adjust(callback)}this._joinAll(res,callback)},_setStartValue:function(value){this._startValue=value,this.popup.setStartValue(value)},_getItemsByTimes:function(items,times){for(var res=[],i=100*(times-1);items[i]&&i<100*times;i++)res.push(items[i]);return res},_hasNextByTimes:function(items,times){return 100*times0&&self.numberCounter.hideView()})},getCounter:function(){return this.numberCounter},getSearcher:function(){return this.searcher},stopEditing:function(){this.searcher.stopSearch(),this.numberCounter.hideView()},setAdapter:function(adapter){this.searcher.setAdapter(adapter),this.numberCounter.setAdapter(adapter)},setValue:function(ob){this.searcher.setValue(ob),this.numberCounter.setValue(ob)},setTipType:function(v){this.searcher.setTipType(v)},getKey:function(){return this.searcher.getKey()},getValue:function(){return this.searcher.getValue()}}),BI.SearchMultiSelectTrigger.EVENT_TRIGGER_CLICK="EVENT_TRIGGER_CLICK",BI.SearchMultiSelectTrigger.EVENT_COUNTER_CLICK="EVENT_COUNTER_CLICK",BI.SearchMultiSelectTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.SearchMultiSelectTrigger.EVENT_START="EVENT_START",BI.SearchMultiSelectTrigger.EVENT_STOP="EVENT_STOP",BI.SearchMultiSelectTrigger.EVENT_PAUSE="EVENT_PAUSE",BI.SearchMultiSelectTrigger.EVENT_SEARCHING="EVENT_SEARCHING",BI.SearchMultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW="EVENT_BEFORE_COUNTER_POPUPVIEW",BI.shortcut("bi.search_multi_select_trigger",BI.SearchMultiSelectTrigger),BI.SearchMultiSelectLoader=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SearchMultiSelectLoader.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-loader",logic:{dynamic:!0},el:{height:400},valueFormatter:BI.emptyFn,itemsCreator:BI.emptyFn,onLoaded:BI.emptyFn})},_init:function(){BI.SearchMultiSelectLoader.superclass._init.apply(this,arguments);var self=this,opts=this.options,hasNext=!1;this.storeValue=opts.value||{},this._assertValue(this.storeValue),this.button_group=BI.createWidget({type:"bi.select_list",element:this,logic:opts.logic,el:BI.extend({onLoaded:opts.onLoaded,el:{type:"bi.loader",isDefaultInit:!1,logic:{dynamic:!0,scrolly:!0},el:{chooseType:BI.ButtonGroup.CHOOSE_TYPE_MULTI,behaviors:{redmark:function(){return!0}},layouts:[{type:"bi.vertical"}]}}},opts.el),itemsCreator:function(op,callback){var startValue=self._startValue;self.storeValue&&(op=BI.extend(op||{},{selectedValues:BI.isKey(startValue)&&self.storeValue.type===BI.Selection.Multi?self.storeValue.value.concat(startValue):self.storeValue.value})),opts.itemsCreator(op,function(ob){hasNext=ob.hasNext;var firstItems=[];if(1===op.times&&self.storeValue){var json=BI.map(self.storeValue.value,function(i,v){var txt=opts.valueFormatter(v)||v;return{text:txt,value:v,title:txt,selected:self.storeValue.type===BI.Selection.Multi}});if(BI.isKey(self._startValue)&&!BI.contains(self.storeValue.value,self._startValue)){var txt=opts.valueFormatter(startValue)||startValue;json.unshift({text:txt,value:startValue,title:txt,selected:!0})}firstItems=self._createItems(json)}callback(firstItems.concat(self._createItems(ob.items)),ob.keyword||""),1===op.times&&self.storeValue&&(BI.isKey(startValue)&&(self.storeValue.type===BI.Selection.All?BI.remove(self.storeValue.value,startValue):BI.pushDistinct(self.storeValue.value,startValue)),self.setValue(self.storeValue)),1===op.times&&self._scrollToTop()})},hasNext:function(){return hasNext},value:this.storeValue}),this.button_group.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.button_group.on(BI.SelectList.EVENT_CHANGE,function(){self.fireEvent(BI.SearchMultiSelectLoader.EVENT_CHANGE,arguments)})},_createItems:function(items){return BI.createItems(items,{type:"bi.multi_select_item",logic:this.options.logic,cls:"bi-list-item-active",height:24,selected:this.isAllSelected(),iconWrapperWidth:36})},_scrollToTop:function(){var self=this;BI.delay(function(){self.button_group.element.scrollTop(0)},30)},isAllSelected:function(){return this.button_group.isAllSelected()},_assertValue:function(val){val||(val={}),val.type||(val.type=BI.Selection.Multi),val.value||(val.value=[])},setStartValue:function(v){this._startValue=v},setValue:function(v){this.storeValue=v||{},this._assertValue(this.storeValue),this.button_group.setValue(this.storeValue)},getValue:function(){return this.button_group.getValue()},getAllButtons:function(){return this.button_group.getAllButtons()},empty:function(){this.button_group.empty()},populate:function(items){arguments[0]=this._createItems(items),this.button_group.populate.apply(this.button_group,arguments)},resetHeight:function(h){this.button_group.resetHeight(h)},resetWidth:function(w){this.button_group.resetWidth(w)}}),BI.SearchMultiSelectLoader.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.search_multi_select_loader",BI.SearchMultiSelectLoader),BI.SearchMultiSelectPopupView=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SearchMultiSelectPopupView.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-popup-view",maxWidth:"auto",minWidth:135,maxHeight:400,valueFormatter:BI.emptyFn,itemsCreator:BI.emptyFn,onLoaded:BI.emptyFn})},_init:function(){BI.SearchMultiSelectPopupView.superclass._init.apply(this,arguments);var self=this,opts=this.options;this.loader=BI.createWidget({type:"bi.search_multi_select_loader",itemsCreator:opts.itemsCreator,valueFormatter:opts.valueFormatter,onLoaded:opts.onLoaded,value:opts.value}),this.popupView=BI.createWidget({type:"bi.multi_popup_view",stopPropagation:!1,maxWidth:opts.maxWidth,minWidth:opts.minWidth,maxHeight:opts.maxHeight,element:this,buttons:[BI.i18nText("BI-Basic_Clears"),BI.i18nText("BI-Basic_Sure")],el:this.loader,value:opts.value}),this.popupView.on(BI.MultiPopupView.EVENT_CHANGE,function(){self.fireEvent(BI.SearchMultiSelectPopupView.EVENT_CHANGE)}),this.popupView.on(BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON,function(index){switch(index){case 0:self.fireEvent(BI.SearchMultiSelectPopupView.EVENT_CLICK_CLEAR);break;case 1:self.fireEvent(BI.SearchMultiSelectPopupView.EVENT_CLICK_CONFIRM)}})},isAllSelected:function(){return this.loader.isAllSelected()},setStartValue:function(v){this.loader.setStartValue(v)},setValue:function(v){this.popupView.setValue(v)},getValue:function(){return this.popupView.getValue()},populate:function(items){this.popupView.populate.apply(this.popupView,arguments)},resetHeight:function(h){this.popupView.resetHeight(h)},resetWidth:function(w){this.popupView.resetWidth(w)}}),BI.SearchMultiSelectPopupView.EVENT_CHANGE="EVENT_CHANGE",BI.SearchMultiSelectPopupView.EVENT_CLICK_CONFIRM="EVENT_CLICK_CONFIRM",BI.SearchMultiSelectPopupView.EVENT_CLICK_CLEAR="EVENT_CLICK_CLEAR",BI.shortcut("bi.search_multi_select_popup_view",BI.SearchMultiSelectPopupView),BI.SearchMultiSelectSearcher=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SearchMultiSelectSearcher.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-searcher",itemsCreator:BI.emptyFn,el:{},popup:{},valueFormatter:BI.emptyFn,adapter:null,masker:{}})},_init:function(){BI.SearchMultiSelectSearcher.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget(o.el,{type:"bi.multi_select_editor",height:o.height,text:o.text,tipType:o.tipType,warningTitle:o.warningTitle}),this.searcher=BI.createWidget({type:"bi.searcher",element:this,height:o.height,isAutoSearch:!1,isAutoSync:!1,onSearch:function(op,callback){callback()},el:this.editor,popup:BI.extend({type:"bi.multi_select_search_pane",valueFormatter:o.valueFormatter,keywordGetter:function(){return self.editor.getValue()},itemsCreator:function(op,callback){var keyword=self.editor.getValue();op.keywords=[keyword],this.setKeyword(keyword),o.itemsCreator(op,callback)},value:o.value},o.popup),adapter:o.adapter,masker:o.masker}),this.searcher.on(BI.Searcher.EVENT_START,function(){self.fireEvent(BI.SearchMultiSelectSearcher.EVENT_START)}),this.searcher.on(BI.Searcher.EVENT_PAUSE,function(){this.hasMatched(),self.fireEvent(BI.SearchMultiSelectSearcher.EVENT_PAUSE)}),this.searcher.on(BI.Searcher.EVENT_STOP,function(){self.fireEvent(BI.SearchMultiSelectSearcher.EVENT_STOP)}),this.searcher.on(BI.Searcher.EVENT_CHANGE,function(){self.fireEvent(BI.SearchMultiSelectSearcher.EVENT_CHANGE,arguments)}),this.searcher.on(BI.Searcher.EVENT_SEARCHING,function(){var keywords=this.getKeywords();self.fireEvent(BI.SearchMultiSelectSearcher.EVENT_SEARCHING,keywords)}),BI.isNotNull(o.value)&&this.setState(o.value)},adjustView:function(){this.searcher.adjustView()},isSearching:function(){return this.searcher.isSearching()},stopSearch:function(){this.searcher.stopSearch()},getKeyword:function(){return this.editor.getValue()},hasMatched:function(){return this.searcher.hasMatched()},hasChecked:function(){return this.searcher.getView()&&this.searcher.getView().hasChecked()},setAdapter:function(adapter){this.searcher.setAdapter(adapter)},setState:function(obj){var o=this.options,ob={};if(ob.type=obj.type,ob.value=o.allValueGetter()||[],ob.assist=obj.assist,ob.type===BI.Selection.All)if(0===ob.value.length)this.editor.setState(BI.Selection.All);else if(BI.size(ob.assist)<=20){var state="";BI.each(ob.assist,function(i,v){state+=0===i?""+(o.valueFormatter(v+"")||v):","+(o.valueFormatter(v+"")||v)}),this.editor.setState(state)}else this.editor.setState(BI.Selection.Multi);else if(0===ob.value.length)this.editor.setState(BI.Selection.None);else if(BI.size(ob.value)<=20){var state="";BI.each(ob.value,function(i,v){state+=0===i?""+(o.valueFormatter(v+"")||v):","+(o.valueFormatter(v+"")||v)}),this.editor.setState(state)}else this.editor.setState(BI.Selection.Multi)},setTipType:function(v){this.editor.setTipType(v)},setValue:function(ob){this.setState(ob),this.searcher.setValue(ob)},getKey:function(){return this.editor.getValue()},getValue:function(){return this.searcher.getValue()},populate:function(items){this.searcher.populate.apply(this.searcher,arguments)}}),BI.SearchMultiSelectSearcher.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.SearchMultiSelectSearcher.EVENT_CHANGE="EVENT_CHANGE",BI.SearchMultiSelectSearcher.EVENT_START="EVENT_START",BI.SearchMultiSelectSearcher.EVENT_STOP="EVENT_STOP",BI.SearchMultiSelectSearcher.EVENT_PAUSE="EVENT_PAUSE",BI.SearchMultiSelectSearcher.EVENT_SEARCHING="EVENT_SEARCHING",BI.shortcut("bi.search_multi_select_searcher",BI.SearchMultiSelectSearcher),BI.SelectTreeFirstPlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.SelectTreeFirstPlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-select-tree-first-plus-group-node bi-list-item-active",logic:{dynamic:!1},id:"",pId:"",readonly:!0,open:!1,height:24})},_init:function(){BI.SelectTreeFirstPlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.first_tree_node_checkbox",stopPropagation:!0}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,keyword:o.keyword,py:o.py}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&(this.isSelected()?self.triggerExpand():self.triggerCollapse())});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,{width:24,el:this.checkbox},this.text);BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items}))))},isOnce:function(){return!0},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.NodeButton.superclass.doClick.apply(this,arguments)},setOpened:function(v){BI.SelectTreeFirstPlusGroupNode.superclass.setOpened.apply(this,arguments),BI.isNotNull(this.checkbox)&&this.checkbox.setSelected(v)}}),BI.shortcut("bi.select_tree_first_plus_group_node",BI.SelectTreeFirstPlusGroupNode),BI.SelectTreeLastPlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.SelectTreeLastPlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-select-tree-last-plus-group-node bi-list-item-active",logic:{dynamic:!1},id:"",pId:"",readonly:!0,open:!1,height:24})},_init:function(){BI.SelectTreeLastPlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.last_tree_node_checkbox",stopPropagation:!0}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,keyword:o.keyword,py:o.py}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&(this.isSelected()?self.triggerExpand():self.triggerCollapse())});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,{width:24,el:this.checkbox},this.text);BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items}))))},isOnce:function(){return!0},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.NodeButton.superclass.doClick.apply(this,arguments)},setOpened:function(v){BI.SelectTreeLastPlusGroupNode.superclass.setOpened.apply(this,arguments),BI.isNotNull(this.checkbox)&&this.checkbox.setSelected(v)}}),BI.shortcut("bi.select_tree_last_plus_group_node",BI.SelectTreeLastPlusGroupNode),BI.SelectTreeMidPlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.SelectTreeMidPlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-select-tree-mid-plus-group-node bi-list-item-active",logic:{dynamic:!1},id:"",pId:"",readonly:!0,open:!1,height:24})},_init:function(){BI.SelectTreeMidPlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.mid_tree_node_checkbox",stopPropagation:!0}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,keyword:o.keyword,py:o.py}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&(this.isSelected()?self.triggerExpand():self.triggerCollapse())});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,{width:24,el:this.checkbox},this.text);BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items}))))},isOnce:function(){return!0},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.NodeButton.superclass.doClick.apply(this,arguments)},setOpened:function(v){BI.SelectTreeMidPlusGroupNode.superclass.setOpened.apply(this,arguments),BI.isNotNull(this.checkbox)&&this.checkbox.setSelected(v)}}),BI.shortcut("bi.select_tree_mid_plus_group_node",BI.SelectTreeMidPlusGroupNode),BI.SelectTreePlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.SelectTreePlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-select-tree-plus-group-node bi-list-item-active",logic:{dynamic:!1},id:"",pId:"",readonly:!0,open:!1,height:24})},_init:function(){BI.SelectTreePlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.tree_node_checkbox",stopPropagation:!0}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,keyword:o.keyword,py:o.py}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&(this.isSelected()?self.triggerExpand():self.triggerCollapse())});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,{width:24,el:this.checkbox},this.text);BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items}))))},isOnce:function(){return!0},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.NodeButton.superclass.doClick.apply(this,arguments)},setOpened:function(v){BI.SelectTreePlusGroupNode.superclass.setOpened.apply(this,arguments),BI.isNotNull(this.checkbox)&&this.checkbox.setSelected(v)}}),BI.shortcut("bi.select_tree_plus_group_node",BI.SelectTreePlusGroupNode),BI.SelectTreeCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SelectTreeCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-select-tree-combo",height:24,text:"",items:[],value:"",attributes:{tabIndex:0}})},_init:function(){BI.SelectTreeCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.trigger=BI.createWidget({type:"bi.single_tree_trigger",text:o.text,height:o.height,items:o.items,value:o.value}),this.popup=BI.createWidget({type:"bi.select_level_tree",items:o.items,value:o.value}),this.combo=BI.createWidget({type:"bi.combo",container:o.container,element:this,adjustLength:2,el:this.trigger,popup:{el:this.popup}}),this.combo.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.popup.on(BI.SingleTreePopup.EVENT_CHANGE,function(){self.setValue(self.popup.getValue()),self.combo.hideView()})},setValue:function(v){v=BI.isArray(v)?v:[v],this.trigger.setValue(v),this.popup.setValue(v)},getValue:function(){return this.popup.getValue()},populate:function(items){this.combo.populate(items)}}),BI.shortcut("bi.select_tree_combo",BI.SelectTreeCombo),BI.SelectTreeExpander=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SelectTreeExpander.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-select-tree-expander",trigger:"",toggle:!0,direction:"bottom",isDefaultInit:!0,el:{},popup:{}})},_init:function(){BI.SelectTreeExpander.superclass._init.apply(this,arguments);var self=this,o=this.options;this.trigger=BI.createWidget(o.el),this.trigger.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&this.isSelected()&&self.expander.setValue([]),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.expander=BI.createWidget({type:"bi.expander",element:this,trigger:o.trigger,toggle:o.toggle,direction:o.direction,isDefaultInit:o.isDefaultInit,el:this.trigger,popup:o.popup}),this.expander.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&self.trigger.setSelected(!1),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)})},getAllLeaves:function(){return this.expander.getAllLeaves()},setValue:function(v){BI.contains(v,this.trigger.getValue())?(this.trigger.setSelected(!0),this.expander.setValue([])):(this.trigger.setSelected(!1),this.expander.setValue(v))},getValue:function(){return this.trigger.isSelected()?[this.trigger.getValue()]:this.expander.getValue()},populate:function(items){this.expander.populate(items)}}),BI.shortcut("bi.select_tree_expander",BI.SelectTreeExpander),BI.SelectTreePopup=BI.inherit(BI.Pane,{_defaultConfig:function(){return BI.extend(BI.SelectTreePopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-select-level-tree",tipText:BI.i18nText("BI-No_Selected_Item"),items:[],value:""})},_formatItems:function(nodes,layer,pNode){var self=this;return BI.each(nodes,function(i,node){var extend={layer:layer};node.id=node.id||BI.UUID(),extend.pNode=pNode,node.isParent===!0||node.parent===!0||BI.isNotEmptyArray(node.children)?(extend.type="bi.select_tree_mid_plus_group_node",i===nodes.length-1&&(extend.type="bi.select_tree_last_plus_group_node",extend.isLastNode=!0),0!==i||pNode||(extend.type="bi.select_tree_first_plus_group_node"),0===i&&i===nodes.length-1&&(extend.type="bi.select_tree_plus_group_node"),BI.defaults(node,extend),self._formatItems(node.children,layer+1,node)):(extend.type="bi.mid_tree_leaf_item",0!==i||pNode||(extend.type="bi.first_tree_leaf_item"),i===nodes.length-1&&(extend.type="bi.last_tree_leaf_item"),BI.defaults(node,extend))}),nodes},_init:function(){BI.SelectTreePopup.superclass._init.apply(this,arguments);var self=this,o=this.options;this.tree=BI.createWidget({type:"bi.level_tree",expander:{type:"bi.select_tree_expander",isDefaultInit:!0},items:this._formatItems(BI.Tree.transformToTreeFormat(o.items),0),value:o.value,chooseType:BI.Selection.Single}),BI.createWidget({type:"bi.vertical",element:this,vgap:5,items:[this.tree]}),this.tree.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.tree.on(BI.LevelTree.EVENT_CHANGE,function(){self.fireEvent(BI.SelectTreePopup.EVENT_CHANGE)}),this.check()},getValue:function(){return this.tree.getValue()},setValue:function(v){v=BI.isArray(v)?v:[v],this.tree.setValue(v)},populate:function(items){BI.SelectTreePopup.superclass.populate.apply(this,arguments),this.tree.populate(this._formatItems(BI.Tree.transformToTreeFormat(items)))}}),BI.SelectTreePopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.select_level_tree",BI.SelectTreePopup),BI.SingleSelectSearchLoader=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SingleSelectSearchLoader.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-select-search-loader",allowNoSelect:!1,itemsCreator:BI.emptyFn,keywordGetter:BI.emptyFn,valueFormatter:BI.emptyFn})},_init:function(){BI.SingleSelectSearchLoader.superclass._init.apply(this,arguments);var self=this,opts=this.options,hasNext=!1;this.button_group=BI.createWidget({type:"bi.single_select_list",allowNoSelect:opts.allowNoSelect,element:this,logic:{dynamic:!1},value:opts.value,el:{tipText:BI.i18nText("BI-No_Select"),el:{type:"bi.loader",isDefaultInit:!1,logic:{dynamic:!0,scrolly:!0},el:{chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,behaviors:{redmark:function(){return!0}},layouts:[{type:"bi.vertical"}]}}},itemsCreator:function(op,callback){self.storeValue&&(op=BI.extend(op||{},{selectedValues:[self.storeValue]})),opts.itemsCreator(op,function(ob){var keyword=ob.keyword=opts.keywordGetter();hasNext=ob.hasNext;var firstItems=[];if(1===op.times&&BI.isNotNull(self.storeValue)){var json=self._filterValues(self.storeValue);firstItems=self._createItems(json)}callback(firstItems.concat(self._createItems(ob.items)),keyword||""),1===op.times&&self.storeValue&&self.setValue(self.storeValue)})},hasNext:function(){return hasNext}}),this.button_group.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.button_group.on(BI.SingleSelectList.EVENT_CHANGE,function(){self.fireEvent(BI.SingleSelectSearchLoader.EVENT_CHANGE,arguments)})},_createItems:function(items){return BI.createItems(items,{type:this.options.allowNoSelect?"bi.single_select_item":"bi.single_select_combo_item",cls:"bi-list-item-active",logic:{dynamic:!1},height:25,selected:!1})},_filterValues:function(src){var o=this.options,keyword=o.keywordGetter(),values=src||[],newValues=BI.map(BI.isArray(values)?values:[values],function(i,v){return{text:o.valueFormatter(v)||v,value:v}});if(BI.isKey(keyword)){var search=BI.Func.getSearchResult(newValues,keyword);values=search.match.concat(search.find)}return BI.map(values,function(i,v){return{text:v.text,title:v.text,value:v.value,selected:!1}})},setValue:function(v){this.storeValue=v,this.button_group.setValue(v)},getValue:function(){return this.button_group.getValue()},getAllButtons:function(){return this.button_group.getAllButtons()},empty:function(){this.button_group.empty()},populate:function(items){this.button_group.populate.apply(this.button_group,arguments)},resetHeight:function(h){this.button_group.resetHeight(h)},resetWidth:function(w){this.button_group.resetWidth(w)}}),BI.SingleSelectSearchLoader.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.single_select_search_loader",BI.SingleSelectSearchLoader),BI.SingleSelectSearchInsertPane=BI.inherit(BI.Widget,{constants:{height:25,lgap:10,tgap:5},_defaultConfig:function(){return BI.extend(BI.SingleSelectSearchInsertPane.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-select-search-pane bi-card",allowNoSelect:!1,itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,keywordGetter:BI.emptyFn})},_init:function(){BI.SingleSelectSearchInsertPane.superclass._init.apply(this,arguments);var self=this,o=this.options;this.tooltipClick=BI.createWidget({type:"bi.label",invisible:!0,text:BI.i18nText("BI-Click_Blank_To_Select"),cls:"multi-select-toolbar",height:this.constants.height}),this.addNotMatchTip=BI.createWidget({type:"bi.text_button",invisible:!0,text:BI.i18nText("BI-Basic_Click_To_Add_Text",""),height:this.constants.height,cls:"bi-high-light",hgap:5,handler:function(){self.fireEvent(BI.SingleSelectSearchInsertPane.EVENT_ADD_ITEM,o.keywordGetter())}}),this.loader=BI.createWidget({type:"bi.single_select_search_loader",allowNoSelect:o.allowNoSelect,keywordGetter:o.keywordGetter,valueFormatter:o.valueFormatter,itemsCreator:function(op,callback){o.itemsCreator.apply(self,[op,function(res){callback(res),self.setKeyword(o.keywordGetter())}])},value:o.value}),this.loader.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.resizer=BI.createWidget({type:"bi.vtape",element:this,items:[{type:"bi.vertical",items:[this.tooltipClick,this.addNotMatchTip],height:this.constants.height},{el:this.loader}]})},setKeyword:function(keyword){var btn,isMatchTipVisible=this.loader.getAllButtons().length>0&&(btn=this.loader.getAllButtons()[0])&&keyword===btn.getValue();this.tooltipClick.setVisible(isMatchTipVisible),this.addNotMatchTip.setVisible(!isMatchTipVisible),!isMatchTipVisible&&this.addNotMatchTip.setText(BI.i18nText("BI-Basic_Click_To_Add_Text",keyword))},hasMatched:function(){return this.tooltipClick.isVisible()},setValue:function(v){this.loader.setValue(v)},getValue:function(){return this.loader.getValue()},empty:function(){this.loader.empty()},populate:function(items){this.loader.populate.apply(this.loader,arguments); +}}),BI.SingleSelectSearchInsertPane.EVENT_CHANGE="EVENT_CHANGE",BI.SingleSelectSearchInsertPane.EVENT_ADD_ITEM="EVENT_ADD_ITEM",BI.shortcut("bi.single_select_search_insert_pane",BI.SingleSelectSearchInsertPane),BI.SingleSelectSearchPane=BI.inherit(BI.Widget,{constants:{height:25,lgap:10,tgap:5},_defaultConfig:function(){return BI.extend(BI.SingleSelectSearchPane.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-select-search-pane bi-card",allowNoSelect:!1,itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,keywordGetter:BI.emptyFn})},_init:function(){BI.SingleSelectSearchPane.superclass._init.apply(this,arguments);var self=this,o=this.options;this.tooltipClick=BI.createWidget({type:"bi.label",invisible:!0,text:BI.i18nText("BI-Click_Blank_To_Select"),cls:"multi-select-toolbar",height:this.constants.height}),this.loader=BI.createWidget({type:"bi.single_select_search_loader",allowNoSelect:o.allowNoSelect,keywordGetter:o.keywordGetter,valueFormatter:o.valueFormatter,itemsCreator:function(op,callback){o.itemsCreator.apply(self,[op,function(res){callback(res),self.setKeyword(o.keywordGetter())}])},value:o.value}),this.loader.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.resizer=BI.createWidget({type:"bi.vtape",element:this,items:[{el:this.tooltipClick,height:0},{el:this.loader}]}),this.tooltipClick.setVisible(!1)},setKeyword:function(keyword){var btn,isVisible=this.loader.getAllButtons().length>0&&(btn=this.loader.getAllButtons()[0])&&keyword===btn.getValue();isVisible!==this.tooltipClick.isVisible()&&(this.tooltipClick.setVisible(isVisible),this.resizer.attr("items")[0].height=isVisible?this.constants.height:0,this.resizer.resize())},hasMatched:function(){return this.tooltipClick.isVisible()},setValue:function(v){this.loader.setValue(v)},getValue:function(){return this.loader.getValue()},empty:function(){this.loader.empty()},populate:function(items){this.loader.populate.apply(this.loader,arguments)}}),BI.SingleSelectSearchPane.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.single_select_search_pane",BI.SingleSelectSearchPane),BI.SingleSelectCombo=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.SingleSelectCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-select-combo",allowNoSelect:!1,itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,height:24,attributes:{tabIndex:0},allowEdit:!0})},_init:function(){BI.SingleSelectCombo.superclass._init.apply(this,arguments);var self=this,o=this.options,assertShowValue=function(){BI.isKey(self._startValue)&&(self.storeValue=self._startValue),self.trigger.getSearcher().setState(self.storeValue)};this.storeValue=o.value,this.requesting=!1,this.trigger=BI.createWidget({type:"bi.single_select_trigger",height:o.height,allowNoSelect:o.allowNoSelect,allowEdit:o.allowEdit,valueFormatter:o.valueFormatter,itemsCreator:function(op,callback){o.itemsCreator(op,function(res){1===op.times&&BI.isNotNull(op.keywords)&&self.trigger.setValue(self.getValue()),callback.apply(self,arguments)})},text:o.text,value:this.storeValue}),this.trigger.on(BI.SingleSelectTrigger.EVENT_FOCUS,function(){self.fireEvent(BI.SingleSelectCombo.EVENT_FOCUS)}),this.trigger.on(BI.SingleSelectTrigger.EVENT_BLUR,function(){self.fireEvent(BI.SingleSelectCombo.EVENT_BLUR)}),this.trigger.on(BI.SingleSelectTrigger.EVENT_START,function(){self._setStartValue(),this.getSearcher().setValue(self.storeValue)}),this.trigger.on(BI.SingleSelectTrigger.EVENT_STOP,function(){self._setStartValue(),self.fireEvent(BI.SingleSelectCombo.EVENT_STOP)}),this.trigger.on(BI.SingleSelectTrigger.EVENT_PAUSE,function(){if(this.getSearcher().hasMatched()){var keyword=this.getSearcher().getKeyword();self.combo.setValue(self.storeValue),self._setStartValue(keyword),assertShowValue(),self.populate(),self._setStartValue()}}),this.trigger.on(BI.SingleSelectTrigger.EVENT_SEARCHING,function(keywords){var last=BI.last(keywords);keywords=BI.initial(keywords||[]),keywords.length>0&&self._joinKeywords(keywords,function(){BI.isEndWithBlank(last)?(self.combo.setValue(self.storeValue),assertShowValue(),self.combo.populate(),self._setStartValue()):(self.combo.setValue(self.storeValue),assertShowValue())}),self.fireEvent(BI.SingleSelectCombo.EVENT_SEARCHING)}),this.trigger.on(BI.SingleSelectTrigger.EVENT_CHANGE,function(value,obj){self.storeValue=this.getValue(),assertShowValue(),self._defaultState()}),this.trigger.on(BI.SingleSelectTrigger.EVENT_COUNTER_CLICK,function(){self.combo.isViewVisible()||self.combo.showView()}),this.combo=BI.createWidget({type:"bi.combo",container:o.container,toggle:!1,el:this.trigger,adjustLength:1,popup:{type:"bi.single_select_popup_view",allowNoSelect:o.allowNoSelect,ref:function(){self.popup=this,self.trigger.setAdapter(this)},listeners:[{eventName:BI.SingleSelectPopupView.EVENT_CHANGE,action:function(){self.storeValue=this.getValue(),self._adjust(function(){assertShowValue(),self._defaultState()}),self.fireEvent(BI.SingleSelectCombo.EVENT_CLICK_ITEM)}}],itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,onLoaded:function(){BI.nextTick(function(){self.combo.adjustWidth(),self.combo.adjustHeight(),self.trigger.getSearcher().adjustView()})}},hideChecker:function(e){return 0===triggerBtn.element.find(e.target).length},value:o.value}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){this.setValue(self.storeValue),BI.nextTick(function(){self.populate()})}),this.wants2Quit=!1,this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW,function(){self.trigger.stopEditing(),self.requesting===!0?self.wants2Quit=!0:self.fireEvent(BI.SingleSelectCombo.EVENT_CONFIRM)});var triggerBtn=BI.createWidget({type:"bi.trigger_icon_button",width:o.height,height:o.height,cls:"single-select-trigger-icon-button"});triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE,function(){self.combo.isViewVisible()?self.combo.hideView():self.combo.showView()}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.combo,left:0,right:0,top:0,bottom:0},{el:triggerBtn,right:0,top:0,bottom:0}]})},_defaultState:function(){this.trigger.stopEditing(),this.combo.hideView()},_assertValue:function(val){},_makeMap:function(values){return BI.makeObject(values||[])},_joinKeywords:function(keywords,callback){function digest(items){var selectedMap=self._makeMap(items);BI.each(keywords,function(i,val){BI.isNotNull(selectedMap[val])&&BI.remove(self.storeValue.value,val)}),self._adjust(callback)}var self=this,o=this.options;this._assertValue(this.storeValue),this.requesting=!0,o.itemsCreator({type:BI.SingleSelectCombo.REQ_GET_ALL_DATA,keywords:keywords},function(ob){var values=BI.map(ob.items,"value");digest(values)})},_adjust:function(callback){function adjust(){self.wants2Quit===!0&&(self.fireEvent(BI.SingleSelectCombo.EVENT_CONFIRM),self.wants2Quit=!1),self.requesting=!1}var self=this,o=this.options;this._count?(adjust(),callback()):o.itemsCreator({type:BI.SingleSelectCombo.REQ_GET_DATA_LENGTH},function(res){self._count=res.count,adjust(),callback()})},_setStartValue:function(value){this._startValue=value,this.popup.setStartValue(value)},setValue:function(v){this.storeValue=v,this._assertValue(this.storeValue),this.combo.setValue(this.storeValue)},getValue:function(){return this.storeValue},populate:function(){this._count=null,this.combo.populate.apply(this.combo,arguments)}}),BI.extend(BI.SingleSelectCombo,{REQ_GET_DATA_LENGTH:0,REQ_GET_ALL_DATA:-1}),BI.SingleSelectCombo.EVENT_BLUR="EVENT_BLUR",BI.SingleSelectCombo.EVENT_FOCUS="EVENT_FOCUS",BI.SingleSelectCombo.EVENT_STOP="EVENT_STOP",BI.SingleSelectCombo.EVENT_SEARCHING="EVENT_SEARCHING",BI.SingleSelectCombo.EVENT_CLICK_ITEM="EVENT_CLICK_ITEM",BI.SingleSelectCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.single_select_combo",BI.SingleSelectCombo),BI.SingleSelectInsertCombo=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.SingleSelectInsertCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-select-combo",allowNoSelect:!1,itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,height:24,attributes:{tabIndex:0},allowEdit:!0})},_init:function(){BI.SingleSelectInsertCombo.superclass._init.apply(this,arguments);var self=this,o=this.options,assertShowValue=function(){BI.isKey(self._startValue)&&(self.storeValue=self._startValue),self.trigger.getSearcher().setState(self.storeValue)};this.storeValue=o.value,this.requesting=!1,this.trigger=BI.createWidget({type:"bi.single_select_trigger",height:o.height,allowNoSelect:o.allowNoSelect,allowEdit:o.allowEdit,valueFormatter:o.valueFormatter,itemsCreator:function(op,callback){o.itemsCreator(op,function(res){1===op.times&&BI.isNotNull(op.keywords)&&self.trigger.setValue(self.getValue()),callback.apply(self,arguments)})},text:o.text,value:this.storeValue,searcher:{popup:{type:"bi.single_select_search_insert_pane",listeners:[{eventName:BI.SingleSelectSearchInsertPane.EVENT_ADD_ITEM,action:function(){self.trigger.getSearcher().hasMatched()||(self.storeValue=self.trigger.getSearcher().getKeyword(),assertShowValue(),self._defaultState())}}]}}}),this.trigger.on(BI.SingleSelectTrigger.EVENT_FOCUS,function(){self.fireEvent(BI.SingleSelectInsertCombo.EVENT_FOCUS)}),this.trigger.on(BI.SingleSelectTrigger.EVENT_BLUR,function(){self.fireEvent(BI.SingleSelectInsertCombo.EVENT_BLUR)}),this.trigger.on(BI.SingleSelectTrigger.EVENT_START,function(){self._setStartValue(),this.getSearcher().setValue(self.storeValue)}),this.trigger.on(BI.SingleSelectTrigger.EVENT_STOP,function(){self._setStartValue(),self.fireEvent(BI.SingleSelectInsertCombo.EVENT_STOP)}),this.trigger.on(BI.SingleSelectTrigger.EVENT_PAUSE,function(){if(this.getSearcher().hasMatched()){var keyword=this.getSearcher().getKeyword();self.storeValue=keyword,self.combo.setValue(self.storeValue),self._setStartValue(keyword),assertShowValue(),self.populate(),self._setStartValue()}}),this.trigger.on(BI.SingleSelectTrigger.EVENT_SEARCHING,function(keywords){var last=BI.last(keywords);keywords=BI.initial(keywords||[]),keywords.length>0&&self._joinKeywords(keywords,function(){BI.isEndWithBlank(last)?(self.combo.setValue(self.storeValue),assertShowValue(),self.combo.populate(),self._setStartValue()):(self.combo.setValue(self.storeValue),assertShowValue())}),self.fireEvent(BI.SingleSelectInsertCombo.EVENT_SEARCHING)}),this.trigger.on(BI.SingleSelectTrigger.EVENT_CHANGE,function(value,obj){self.storeValue=this.getValue(),assertShowValue(),self._defaultState()}),this.trigger.on(BI.SingleSelectTrigger.EVENT_COUNTER_CLICK,function(){self.combo.isViewVisible()||self.combo.showView()}),this.combo=BI.createWidget({type:"bi.combo",container:o.container,toggle:!1,el:this.trigger,adjustLength:1,popup:{type:"bi.single_select_popup_view",allowNoSelect:o.allowNoSelect,ref:function(){self.popup=this,self.trigger.setAdapter(this)},listeners:[{eventName:BI.SingleSelectPopupView.EVENT_CHANGE,action:function(){self.storeValue=this.getValue(),self._adjust(function(){assertShowValue(),self._defaultState()}),self.fireEvent(BI.SingleSelectInsertCombo.EVENT_CLICK_ITEM)}}],itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,onLoaded:function(){BI.nextTick(function(){self.combo.adjustWidth(),self.combo.adjustHeight(),self.trigger.getSearcher().adjustView()})}},hideChecker:function(e){return 0===triggerBtn.element.find(e.target).length},value:o.value}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){this.setValue(self.storeValue),BI.nextTick(function(){self.populate()})}),this.wants2Quit=!1,this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW,function(){self.trigger.stopEditing(),self.requesting===!0?self.wants2Quit=!0:self.fireEvent(BI.SingleSelectInsertCombo.EVENT_CONFIRM)});var triggerBtn=BI.createWidget({type:"bi.trigger_icon_button",width:o.height,height:o.height,cls:"single-select-trigger-icon-button"});triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE,function(){self.combo.isViewVisible()?self.combo.hideView():self.combo.showView()}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.combo,left:0,right:0,top:0,bottom:0},{el:triggerBtn,right:0,top:0,bottom:0}]})},_defaultState:function(){this.trigger.stopEditing(),this.combo.hideView()},_assertValue:function(val){},_makeMap:function(values){return BI.makeObject(values||[])},_joinKeywords:function(keywords,callback){function digest(items){var selectedMap=self._makeMap(items);BI.each(keywords,function(i,val){BI.isNotNull(selectedMap[val])&&BI.remove(self.storeValue.value,val)}),self._adjust(callback)}var self=this,o=this.options;this._assertValue(this.storeValue),this.requesting=!0,o.itemsCreator({type:BI.SingleSelectInsertCombo.REQ_GET_ALL_DATA,keywords:keywords},function(ob){var values=BI.map(ob.items,"value");digest(values)})},_adjust:function(callback){function adjust(){self.wants2Quit===!0&&(self.fireEvent(BI.SingleSelectInsertCombo.EVENT_CONFIRM),self.wants2Quit=!1),self.requesting=!1}var self=this,o=this.options;adjust(),callback()},_setStartValue:function(value){this._startValue=value,this.popup.setStartValue(value)},setValue:function(v){this.storeValue=v,this._assertValue(this.storeValue),this.combo.setValue(this.storeValue)},getValue:function(){return this.storeValue},populate:function(){this.combo.populate.apply(this.combo,arguments)}}),BI.extend(BI.SingleSelectInsertCombo,{REQ_GET_DATA_LENGTH:0,REQ_GET_ALL_DATA:-1}),BI.SingleSelectInsertCombo.EVENT_FOCUS="EVENT_FOCUS",BI.SingleSelectInsertCombo.EVENT_BLUR="EVENT_BLUR",BI.SingleSelectInsertCombo.EVENT_STOP="EVENT_STOP",BI.SingleSelectInsertCombo.EVENT_SEARCHING="EVENT_SEARCHING",BI.SingleSelectInsertCombo.EVENT_CLICK_ITEM="EVENT_CLICK_ITEM",BI.SingleSelectInsertCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.single_select_insert_combo",BI.SingleSelectInsertCombo),BI.SingleSelectComboItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.SingleSelectComboItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-single-select-radio-item",logic:{dynamic:!1},height:24})},_init:function(){BI.SingleSelectComboItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.radio=BI.createWidget({type:"bi.radio"}),this.text=BI.createWidget({type:"bi.label",cls:"list-item-text",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,keyword:o.keyword,value:o.value,py:o.py}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("horizontal",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("left",{type:"bi.center_adapt",items:[this.radio],width:26},this.text)}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.SingleSelectComboItem.superclass.doClick.apply(this,arguments),this.radio.setSelected(this.isSelected()),this.isValid()&&this.fireEvent(BI.SingleSelectComboItem.EVENT_CHANGE,this.isSelected(),this)},setSelected:function(v){BI.SingleSelectComboItem.superclass.setSelected.apply(this,arguments),this.radio.setSelected(v)}}),BI.SingleSelectComboItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.single_select_combo_item",BI.SingleSelectComboItem),BI.SingleSelectList=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SingleSelectList.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-select-list",direction:BI.Direction.Top,logic:{dynamic:!0},items:[],itemsCreator:BI.emptyFn,hasNext:BI.emptyFn,onLoaded:BI.emptyFn,el:{type:"bi.list_pane"},allowNoSelect:!1})},_init:function(){BI.SingleSelectList.superclass._init.apply(this,arguments);var self=this,o=this.options;this.list=BI.createWidget(o.el,{type:"bi.list_pane",items:o.items,itemsCreator:function(op,callback){1===op.times&&self.toolbar&&self.toolbar.setVisible(!1),o.itemsCreator(op,function(items){callback.apply(self,arguments),1===op.times&&(self.toolbar&&self.toolbar.setVisible(items&&items.length>0),self.toolbar&&self.toolbar.setEnable(items&&items.length>0))})},onLoaded:o.onLoaded,hasNext:o.hasNext,value:o.value}),this.list.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){type===BI.Events.CLICK&&self.fireEvent(BI.SingleSelectList.EVENT_CHANGE,value,obj),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction),BI.extend({scrolly:!0},o.logic,{items:o.allowNoSelect?BI.LogicFactory.createLogicItemsByDirection(o.direction,{type:"bi.single_select_item",cls:"bi-list-item-active",height:24,forceNotSelected:!0,text:BI.i18nText("BI-Basic_No_Select"),ref:function(_ref){self.toolbar=_ref},listeners:[{eventName:BI.Controller.EVENT_CHANGE,action:function(type){type===BI.Events.CLICK&&(self.list.setValue(),self.fireEvent(BI.SingleSelectList.EVENT_CHANGE)),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}}]},this.list):BI.LogicFactory.createLogicItemsByDirection(o.direction,this.list)}))))},hasPrev:function(){return this.list.hasPrev()},hasNext:function(){return this.list.hasNext()},prependItems:function(items){this.list.prependItems.apply(this.list,arguments)},addItems:function(items){this.list.addItems.apply(this.list,arguments)},setValue:function(v){this.list.setValue([v])},getValue:function(){return this.list.getValue()[0]},empty:function(){this.list.empty()},populate:function(items){this.list.populate.apply(this.list,arguments)},resetHeight:function(h){this.list.resetHeight?this.list.resetHeight(h):this.list.element.css({"max-height":h+"px"})},setNotSelectedValue:function(){this.list.setNotSelectedValue.apply(this.list,arguments)},getNotSelectedValue:function(){return this.list.getNotSelectedValue()},getAllButtons:function(){return this.list.getAllButtons()},getAllLeaves:function(){return this.list.getAllLeaves()},getSelectedButtons:function(){return this.list.getSelectedButtons()},getNotSelectedButtons:function(){return this.list.getNotSelectedButtons()},getIndexByValue:function(value){return this.list.getIndexByValue(value)},getNodeById:function(id){return this.list.getNodeById(id)},getNodeByValue:function(value){return this.list.getNodeByValue(value)}}),BI.SingleSelectList.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.single_select_list",BI.SingleSelectList),BI.SingleSelectLoader=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SingleSelectLoader.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-select-loader",logic:{dynamic:!0},el:{height:400},allowNoSelect:!1,valueFormatter:BI.emptyFn,itemsCreator:BI.emptyFn,onLoaded:BI.emptyFn})},_init:function(){BI.SingleSelectLoader.superclass._init.apply(this,arguments);var self=this,opts=this.options,hasNext=!1;this.storeValue=opts.value,this.button_group=BI.createWidget({type:"bi.single_select_list",allowNoSelect:opts.allowNoSelect,logic:opts.logic,el:BI.extend({onLoaded:opts.onLoaded,el:{type:"bi.loader",isDefaultInit:!1,logic:{dynamic:!0,scrolly:!0},el:{chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,behaviors:{redmark:function(){return!0}},layouts:[{type:"bi.vertical"}]}}},opts.el),itemsCreator:function(op,callback){var startValue=self._startValue;BI.isNotNull(self.storeValue)&&(op=BI.extend(op||{},{selectedValues:[self.storeValue]})),opts.itemsCreator(op,function(ob){hasNext=ob.hasNext;var firstItems=[];if(1===op.times&&BI.isNotNull(self.storeValue)){var json=BI.map([self.storeValue],function(i,v){var txt=opts.valueFormatter(v)||v;return{text:txt,value:v,title:txt,selected:!0}});firstItems=self._createItems(json)}callback(firstItems.concat(self._createItems(ob.items)),ob.keyword||""),1===op.times&&self.storeValue&&(BI.isKey(startValue)&&(self.storeValue=startValue),self.setValue(self.storeValue)),1===op.times&&self._scrollToTop()})},hasNext:function(){return hasNext},value:this.storeValue}),BI.createWidget({type:"bi.vertical",element:this,items:[this.button_group],vgap:5}),this.button_group.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.button_group.on(BI.SingleSelectList.EVENT_CHANGE,function(){self.fireEvent(BI.SingleSelectLoader.EVENT_CHANGE,arguments)})},_createItems:function(items){return BI.createItems(items,{type:this.options.allowNoSelect?"bi.single_select_item":"bi.single_select_combo_item",logic:this.options.logic,cls:"bi-list-item-active",height:24,selected:!1})},_scrollToTop:function(){var self=this;BI.delay(function(){self.button_group.element.scrollTop(0)},30)},_assertValue:function(val){},setStartValue:function(v){this._startValue=v},setValue:function(v){this.storeValue=v,this._assertValue(this.storeValue),this.button_group.setValue(this.storeValue)},getValue:function(){return this.button_group.getValue()},getAllButtons:function(){return this.button_group.getAllButtons()},empty:function(){this.button_group.empty()},populate:function(items){this.button_group.populate.apply(this.button_group,arguments)},resetHeight:function(h){this.button_group.resetHeight(h)},resetWidth:function(w){this.button_group.resetWidth(w)}}),BI.SingleSelectLoader.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.single_select_loader",BI.SingleSelectLoader),BI.SingleSelectPopupView=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SingleSelectPopupView.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-select-popup-view",allowNoSelect:!1,maxWidth:"auto",minWidth:135,maxHeight:400,valueFormatter:BI.emptyFn,itemsCreator:BI.emptyFn,onLoaded:BI.emptyFn})},_init:function(){BI.SingleSelectPopupView.superclass._init.apply(this,arguments);var self=this,opts=this.options;this.loader=BI.createWidget({type:"bi.single_select_loader",allowNoSelect:opts.allowNoSelect,itemsCreator:opts.itemsCreator,valueFormatter:opts.valueFormatter,onLoaded:opts.onLoaded,value:opts.value}),this.popupView=BI.createWidget({type:"bi.popup_view",stopPropagation:!1,maxWidth:opts.maxWidth,minWidth:opts.minWidth,maxHeight:opts.maxHeight,element:this,el:this.loader,value:opts.value}),this.popupView.on(BI.MultiPopupView.EVENT_CHANGE,function(){self.fireEvent(BI.SingleSelectPopupView.EVENT_CHANGE)})},setStartValue:function(v){this.loader.setStartValue(v)},setValue:function(v){this.popupView.setValue(v)},getValue:function(){return this.popupView.getValue()},populate:function(items){this.popupView.populate.apply(this.popupView,arguments)},resetHeight:function(h){this.popupView.resetHeight(h)},resetWidth:function(w){this.popupView.resetWidth(w)}}),BI.SingleSelectPopupView.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.single_select_popup_view",BI.SingleSelectPopupView),BI.SingleSelectTrigger=BI.inherit(BI.Trigger,{constants:{height:14,rgap:4,lgap:4},_defaultConfig:function(){return BI.extend(BI.SingleSelectTrigger.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-select-trigger bi-border bi-border-radius",allowNoSelect:!1,itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,searcher:{},switcher:{},adapter:null,masker:{},allowEdit:!0})},_init:function(){BI.SingleSelectTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options;o.height&&this.setHeight(o.height-2),this.searcher=BI.createWidget(o.searcher,{type:"bi.single_select_searcher",allowNoSelect:o.allowNoSelect,text:o.text,height:o.height,itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,popup:{},adapter:o.adapter,masker:o.masker,value:o.value}),this.searcher.on(BI.SingleSelectSearcher.EVENT_START,function(){self.fireEvent(BI.SingleSelectTrigger.EVENT_START)}),this.searcher.on(BI.SingleSelectSearcher.EVENT_PAUSE,function(){self.fireEvent(BI.SingleSelectTrigger.EVENT_PAUSE)}),this.searcher.on(BI.SingleSelectSearcher.EVENT_SEARCHING,function(){self.fireEvent(BI.SingleSelectTrigger.EVENT_SEARCHING,arguments)}),this.searcher.on(BI.SingleSelectSearcher.EVENT_STOP,function(){self.fireEvent(BI.SingleSelectTrigger.EVENT_STOP)}),this.searcher.on(BI.SingleSelectSearcher.EVENT_CHANGE,function(){self.fireEvent(BI.SingleSelectTrigger.EVENT_CHANGE,arguments)}),this.searcher.on(BI.SingleSelectSearcher.EVENT_FOCUS,function(){self.fireEvent(BI.SingleSelectTrigger.EVENT_FOCUS)}),this.searcher.on(BI.SingleSelectSearcher.EVENT_BLUR,function(){self.fireEvent(BI.SingleSelectTrigger.EVENT_BLUR,arguments)});var wrapper=BI.createWidget({type:"bi.htape",element:this,items:[{el:this.searcher,width:"fill"},{el:BI.createWidget(),width:24}]});!o.allowEdit&&BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.layout"},left:0,right:24,top:0,bottom:0}]})},getSearcher:function(){return this.searcher},stopEditing:function(){this.searcher.stopSearch()},setAdapter:function(adapter){this.searcher.setAdapter(adapter)},setValue:function(v){this.searcher.setValue(v)},getKey:function(){return this.searcher.getKey()},getValue:function(){return this.searcher.getValue()}}),BI.SingleSelectTrigger.EVENT_TRIGGER_CLICK="EVENT_TRIGGER_CLICK",BI.SingleSelectTrigger.EVENT_COUNTER_CLICK="EVENT_COUNTER_CLICK",BI.SingleSelectTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.SingleSelectTrigger.EVENT_START="EVENT_START",BI.SingleSelectTrigger.EVENT_STOP="EVENT_STOP",BI.SingleSelectTrigger.EVENT_PAUSE="EVENT_PAUSE",BI.SingleSelectTrigger.EVENT_SEARCHING="EVENT_SEARCHING",BI.SingleSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW="EVENT_BEFORE_COUNTER_POPUPVIEW",BI.SingleSelectTrigger.EVENT_FOCUS="EVENT_FOCUS",BI.SingleSelectTrigger.EVENT_BLUR="EVENT_BLUR",BI.shortcut("bi.single_select_trigger",BI.SingleSelectTrigger),BI.SingleSelectInsertList=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.SingleSelectInsertList.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-insert-list",allowNoSelect:!1,itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn})},_init:function(){BI.SingleSelectInsertList.superclass._init.apply(this,arguments);var self=this,o=this.options;this.storeValue=o.value;var assertShowValue=function(){BI.isKey(self._startValue)&&(self.storeValue=self._startValue)};this.adapter=BI.createWidget({type:"bi.single_select_loader",allowNoSelect:o.allowNoSelect,cls:"popup-single-select-list bi-border-left bi-border-right bi-border-bottom",itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,logic:{dynamic:!0},el:{},value:o.value}),this.adapter.on(BI.SingleSelectLoader.EVENT_CHANGE,function(){self.storeValue=this.getValue(),assertShowValue(),self.fireEvent(BI.SingleSelectInsertList.EVENT_CHANGE)}),this.searcherPane=BI.createWidget({type:"bi.single_select_search_pane",allowNoSelect:o.allowNoSelect,cls:"bi-border-left bi-border-right bi-border-bottom",valueFormatter:o.valueFormatter,keywordGetter:function(){return self.trigger.getKeyword()},itemsCreator:function(op,callback){op.keywords=[self.trigger.getKeyword()],this.setKeyword(op.keywords[0]),o.itemsCreator(op,callback)}}),this.searcherPane.setVisible(!1),this.trigger=BI.createWidget({type:"bi.searcher",isAutoSearch:!1,isAutoSync:!1,onSearch:function(op,callback){callback()},adapter:this.adapter,popup:this.searcherPane,height:200,masker:!1,value:o.value,listeners:[{eventName:BI.Searcher.EVENT_START,action:function(){self._showSearcherPane(),self._setStartValue(),this.setValue(BI.deepClone(self.storeValue))}},{eventName:BI.Searcher.EVENT_STOP,action:function(){self._showAdapter(),self._setStartValue(),self.adapter.setValue(self.storeValue),self.adapter.populate()}},{eventName:BI.Searcher.EVENT_PAUSE,action:function(){var keyword=this.getKeyword();self.storeValue=keyword,self._showAdapter(),self.adapter.setValue(self.storeValue),self._setStartValue(keyword),assertShowValue(),self.adapter.populate(),self._setStartValue(),self.fireEvent(BI.SingleSelectInsertList.EVENT_CHANGE)}},{eventName:BI.Searcher.EVENT_SEARCHING,action:function(){var keywords=this.getKeyword(),last=BI.last(keywords);keywords=BI.initial(keywords||[]),keywords.length>0&&self._joinKeywords(keywords,function(){BI.isEndWithBlank(last)?(self.adapter.setValue(self.storeValue),assertShowValue(),self.adapter.populate(),self._setStartValue()):(self.adapter.setValue(self.storeValue),assertShowValue())})}},{eventName:BI.Searcher.EVENT_CHANGE,action:function(){self.storeValue=this.getValue(),self.fireEvent(BI.SingleSelectInsertList.EVENT_CHANGE)}}]}),BI.createWidget({type:"bi.vtape",element:this,items:[{el:this.trigger,height:24},{el:this.adapter,height:"fill"}]}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.searcherPane,top:24,bottom:0,left:0,right:0}]})},_showAdapter:function(){this.adapter.setVisible(!0),this.searcherPane.setVisible(!1)},_showSearcherPane:function(){this.searcherPane.setVisible(!0),this.adapter.setVisible(!1)},_defaultState:function(){this.trigger.stopEditing()},_assertValue:function(){},_makeMap:function(values){return BI.makeObject(values||[])},_joinKeywords:function(keywords,callback){function digest(items){var selectedMap=self._makeMap(items);BI.each(keywords,function(i,val){BI.isNotNull(selectedMap[val])&&(self.storeValue.type===BI.Selection.Single?BI.pushDistinct(self.storeValue.value,val):BI.remove(self.storeValue.value,val))}),callback()}var self=this,o=this.options;this._assertValue(this.storeValue),this._allData?digest(this._allData):o.itemsCreator({type:BI.SingleSelectInsertList.REQ_GET_ALL_DATA},function(ob){self._allData=BI.map(ob.items,"value"),digest(self._allData)})},_setStartValue:function(value){this._startValue=value,this.adapter.setStartValue(value)},isAllSelected:function(){return this.adapter.isAllSelected()},resize:function(){},setValue:function(v){this.storeValue=v,this.adapter.setValue(this.storeValue),this.trigger.setValue(this.storeValue)},getValue:function(){return BI.deepClone(this.storeValue)},populate:function(){this._count=null,this._allData=null,this.adapter.populate.apply(this.adapter,arguments),this.trigger.populate.apply(this.trigger,arguments)}}),BI.extend(BI.SingleSelectInsertList,{REQ_GET_DATA_LENGTH:0,REQ_GET_ALL_DATA:-1}),BI.SingleSelectInsertList.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.single_select_insert_list",BI.SingleSelectInsertList),BI.SingleSelectEditor=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SingleSelectEditor.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-select-editor",el:{},text:BI.i18nText("BI-Basic_Please_Select")})},_init:function(){BI.SingleSelectEditor.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget(o.el,{type:"bi.state_editor",element:this,height:o.height,watermark:BI.i18nText("BI-Basic_Search"),allowBlank:!0,value:o.value,defaultText:o.text,text:o.text}),this.editor.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editor.on(BI.StateEditor.EVENT_PAUSE,function(){self.fireEvent(BI.SingleSelectEditor.EVENT_PAUSE)}),this.editor.on(BI.StateEditor.EVENT_FOCUS,function(){self.fireEvent(BI.SingleSelectEditor.EVENT_FOCUS)}),this.editor.on(BI.StateEditor.EVENT_BLUR,function(){self.fireEvent(BI.SingleSelectEditor.EVENT_BLUR)})},focus:function(){this.editor.focus()},blur:function(){this.editor.blur()},setState:function(state){this.editor.setState(state)},setValue:function(v){this.editor.setValue(v)},getValue:function(){var v=this.editor.getState();return BI.isArray(v)&&v.length>0?v[v.length-1]:""},getKeywords:function(){var val=this.editor.getLastChangedValue(),keywords=val.match(/[\S]+/g);return BI.isEndWithBlank(val)?keywords.concat([" "]):keywords},populate:function(items){}}),BI.SingleSelectEditor.EVENT_FOCUS="EVENT_FOCUS",BI.SingleSelectEditor.EVENT_BLUR="EVENT_BLUR",BI.SingleSelectEditor.EVENT_PAUSE="EVENT_PAUSE",BI.shortcut("bi.single_select_editor",BI.SingleSelectEditor),BI.SingleSelectSearcher=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SingleSelectSearcher.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-select-searcher",itemsCreator:BI.emptyFn,el:{},popup:{},valueFormatter:BI.emptyFn,adapter:null,masker:{},allowNoSelect:!1})},_init:function(){BI.SingleSelectSearcher.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget(o.el,{type:"bi.single_select_editor", +height:o.height,text:o.text,listeners:[{eventName:BI.SingleSelectEditor.EVENT_FOCUS,action:function(){self.fireEvent(BI.SingleSelectSearcher.EVENT_FOCUS)}},{eventName:BI.SingleSelectEditor.EVENT_BLUR,action:function(){self.fireEvent(BI.SingleSelectSearcher.EVENT_BLUR)}}]}),this.searcher=BI.createWidget({type:"bi.searcher",element:this,height:o.height,isAutoSearch:!1,isAutoSync:!1,onSearch:function(op,callback){callback()},el:this.editor,popup:BI.extend({type:"bi.single_select_search_pane",allowNoSelect:o.allowNoSelect,valueFormatter:o.valueFormatter,keywordGetter:function(){return self.editor.getValue()},itemsCreator:function(op,callback){var keyword=self.editor.getValue();op.keywords=[keyword],this.setKeyword(keyword),o.itemsCreator(op,callback)},value:o.value},o.popup),adapter:o.adapter,masker:o.masker}),this.searcher.on(BI.Searcher.EVENT_START,function(){self.fireEvent(BI.SingleSelectSearcher.EVENT_START)}),this.searcher.on(BI.Searcher.EVENT_PAUSE,function(){this.hasMatched(),self.fireEvent(BI.SingleSelectSearcher.EVENT_PAUSE)}),this.searcher.on(BI.Searcher.EVENT_STOP,function(){self.fireEvent(BI.SingleSelectSearcher.EVENT_STOP)}),this.searcher.on(BI.Searcher.EVENT_CHANGE,function(){self.fireEvent(BI.SingleSelectSearcher.EVENT_CHANGE,arguments)}),this.searcher.on(BI.Searcher.EVENT_SEARCHING,function(){var keywords=this.getKeywords();self.fireEvent(BI.SingleSelectSearcher.EVENT_SEARCHING,keywords)}),BI.isNotNull(o.value)&&this.setState(o.value)},adjustView:function(){this.searcher.adjustView()},isSearching:function(){return this.searcher.isSearching()},stopSearch:function(){this.searcher.stopSearch()},getKeyword:function(){return this.editor.getValue()},hasMatched:function(){return this.searcher.hasMatched()},hasChecked:function(){return this.searcher.getView()&&this.searcher.getView().hasChecked()},setAdapter:function(adapter){this.searcher.setAdapter(adapter)},setState:function(v){var o=this.options;BI.isNull(v)?this.editor.setState(BI.Selection.None):this.editor.setState(o.valueFormatter(v+"")||v+"")},setValue:function(ob){this.setState(ob),this.searcher.setValue(ob)},getKey:function(){return this.editor.getValue()},getValue:function(){return this.searcher.getValue()},populate:function(items){this.searcher.populate.apply(this.searcher,arguments)}}),BI.SingleSelectSearcher.EVENT_FOCUS="EVENT_FOCUS",BI.SingleSelectSearcher.EVENT_BLUR="EVENT_BLUR",BI.SingleSelectSearcher.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.SingleSelectSearcher.EVENT_CHANGE="EVENT_CHANGE",BI.SingleSelectSearcher.EVENT_START="EVENT_START",BI.SingleSelectSearcher.EVENT_STOP="EVENT_STOP",BI.SingleSelectSearcher.EVENT_PAUSE="EVENT_PAUSE",BI.SingleSelectSearcher.EVENT_SEARCHING="EVENT_SEARCHING",BI.shortcut("bi.single_select_searcher",BI.SingleSelectSearcher),BI.SignTextEditor=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.SignTextEditor.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-sign-initial-editor",validationChecker:BI.emptyFn,text:"",height:24})},_init:function(){BI.SignTextEditor.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget({type:"bi.editor",height:o.height,hgap:4,vgap:2,value:o.value,validationChecker:o.validationChecker,allowBlank:!1}),this.text=BI.createWidget({type:"bi.text_button",cls:"sign-editor-text",title:function(){return self.getValue()},textAlign:o.textAlign,height:o.height,hgap:4,handler:function(){self._showInput(),self.editor.focus(),self.editor.selectAll()}}),this.text.on(BI.TextButton.EVENT_CHANGE,function(){BI.nextTick(function(){self.fireEvent(BI.SignTextEditor.EVENT_CLICK_LABEL)})}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.text,left:0,right:0,top:0,bottom:0}]}),this.editor.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editor.on(BI.Editor.EVENT_CONFIRM,function(){self._showHint(),self._checkText(),self.fireEvent(BI.SignTextEditor.EVENT_CONFIRM,arguments)}),this.editor.on(BI.Editor.EVENT_CHANGE_CONFIRM,function(){self._showHint(),self._checkText(),self.fireEvent(BI.SignTextEditor.EVENT_CHANGE_CONFIRM,arguments)}),this.editor.on(BI.Editor.EVENT_ERROR,function(){self._checkText()}),BI.createWidget({type:"bi.vertical",scrolly:!1,element:this,items:[this.editor]}),this._showHint(),self._checkText()},_checkText:function(){var o=this.options;BI.nextTick(BI.bind(function(){if(""===this.editor.getValue())this.text.setValue(o.watermark||""),this.text.element.addClass("bi-water-mark");else{var v=this.editor.getValue();v=BI.isEmpty(v)||v==o.text?o.text:v+o.text,this.text.setValue(v),this.text.element.removeClass("bi-water-mark")}},this))},_showInput:function(){this.editor.visible(),this.text.invisible()},_showHint:function(){this.editor.invisible(),this.text.visible()},setTitle:function(title){this.text.setTitle(title)},setWarningTitle:function(title){this.text.setWarningTitle(title)},focus:function(){this._showInput(),this.editor.focus()},blur:function(){this.editor.blur(),this._showHint(),this._checkText()},doRedMark:function(){""===this.editor.getValue()&&BI.isKey(this.options.watermark)||this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){""===this.editor.getValue()&&BI.isKey(this.options.watermark)||this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},isValid:function(){return this.editor.isValid()},setErrorText:function(text){this.editor.setErrorText(text)},getErrorText:function(){return this.editor.getErrorText()},isEditing:function(){return this.editor.isEditing()},getLastValidValue:function(){return this.editor.getLastValidValue()},getLastChangedValue:function(){return this.editor.getLastChangedValue()},setValue:function(v){this.editor.setValue(v),this._checkText()},getValue:function(){return this.editor.getValue()},getState:function(){return this.text.getValue()},setState:function(v){var o=this.options;this._showHint(),v=BI.isEmpty(v)||v==o.text?o.text:v+o.text,this.text.setValue(v)}}),BI.SignTextEditor.EVENT_CONFIRM="EVENT_CONFIRM",BI.SignTextEditor.EVENT_CHANGE_CONFIRM="EVENT_CHANGE_CONFIRM",BI.SignTextEditor.EVENT_CLICK_LABEL="EVENT_CLICK_LABEL",BI.shortcut("bi.sign_text_editor",BI.SignTextEditor),BI.SliderIconButton=BI.inherit(BI.Widget,{props:{baseCls:"bi-single-slider-button"},constants:{LARGE_SIZE:16,NORMAL_SIZE:12,LARGE_OFFSET:4,NORMAL_OFFSET:6},render:function(){var self=this;return{type:"bi.absolute",ref:function(){self.wrapper=this},items:[{el:{type:"bi.text_button",cls:"slider-button bi-high-light-border",ref:function(){self.slider=this}}}]}}}),BI.shortcut("bi.single_slider_button",BI.SliderIconButton),BI.SingleSlider=BI.inherit(BI.Single,{_constant:{EDITOR_WIDTH:90,EDITOR_HEIGHT:30,SLIDER_WIDTH_HALF:15,SLIDER_WIDTH:30,SLIDER_HEIGHT:30,TRACK_HEIGHT:24},props:{baseCls:"bi-single-slider bi-slider-track",digit:!1,unit:""},render:function(){var self=this,o=this.options,c=this._constant;this.enable=!1,this.value="",this.grayTrack=BI.createWidget({type:"bi.layout",cls:"gray-track",height:6}),this.blueTrack=BI.createWidget({type:"bi.layout",cls:"blue-track bi-high-light-background",height:6}),this.track=this._createTrackWrapper(),this.slider=BI.createWidget({type:"bi.single_slider_button"}),this._draggable(this.slider);var sliderVertical=BI.createWidget({type:"bi.vertical",items:[{type:"bi.absolute",items:[this.slider]}],hgap:c.SLIDER_WIDTH_HALF,height:c.SLIDER_HEIGHT});return sliderVertical.element.click(function(e){if(self.enable&&self.isEnabled()){var offset=e.clientX-self.element.offset().left-c.SLIDER_WIDTH_HALF,trackLength=self.track.element[0].scrollWidth,percent=0;offset<0&&(percent=0),offset>0&&offsettrackLength-c.SLIDER_WIDTH&&(percent=100);var significantPercent=BI.parseFloat(percent.toFixed(1));self._setAllPosition(significantPercent);var v=self._getValueByPercent(significantPercent);v=o.digit===!1?v:v.toFixed(o.digit),self.label.setValue(v),self.value=v,self.fireEvent(BI.SingleSlider.EVENT_CHANGE)}}),this.label=BI.createWidget({type:"bi.sign_text_editor",cls:"slider-editor-button",text:o.unit,width:c.EDITOR_WIDTH-2,allowBlank:!1,textAlign:"center",validationChecker:function(v){return self._checkValidation(v)}}),this.label.element.hover(function(){self.label.element.removeClass("bi-border").addClass("bi-border")},function(){self.label.element.removeClass("bi-border")}),this.label.on(BI.SignEditor.EVENT_CONFIRM,function(){var v=BI.parseFloat(this.getValue()),percent=self._getPercentByValue(v),significantPercent=BI.parseFloat(percent.toFixed(1));self._setAllPosition(significantPercent),this.setValue(v),self.value=v,self.fireEvent(BI.SingleSlider.EVENT_CHANGE)}),this._setVisible(!1),{type:"bi.absolute",items:[{el:{type:"bi.vertical",items:[{type:"bi.absolute",items:[{el:this.track,width:"100%",height:c.TRACK_HEIGHT}]}],hgap:7,height:c.TRACK_HEIGHT},top:23,left:0,width:"100%"},{el:sliderVertical,top:20,left:0,width:"100%"},{el:{type:"bi.vertical",items:[{type:"bi.horizontal_auto",items:[this.label]}],height:c.EDITOR_HEIGHT},top:0,left:0,width:"100%"}]}},_draggable:function(widget){function optimizeSize(s){return BI.clamp(s,0,self._getGrayTrackLength())}var self=this,o=this.options,startDrag=!1,size=0,offset=0,defaultSize=0,mouseMoveTracker=new BI.MouseMoveTracker(function(deltaX){if(mouseMoveTracker.isDragging()){startDrag=!0,offset+=deltaX,size=optimizeSize(defaultSize+offset),widget.element.addClass("dragging");var percent=100*size/self._getGrayTrackLength(),significantPercent=BI.parseFloat(percent.toFixed(1));self._setBlueTrack(significantPercent),self._setLabelPosition(significantPercent),self._setSliderPosition(significantPercent);var v=self._getValueByPercent(significantPercent);v=o.digit===!1?v:v.toFixed(o.digit),self.label.setValue(v),self.value=v}},function(){if(startDrag===!0){size=optimizeSize(size);var percent=100*size/self._getGrayTrackLength(),significantPercent=BI.parseFloat(percent.toFixed(1));self._setSliderPosition(significantPercent),size=0,offset=0,defaultSize=size,startDrag=!1}widget.element.removeClass("dragging"),mouseMoveTracker.releaseMouseMoves(),self.fireEvent(BI.SingleSlider.EVENT_CHANGE)},window);widget.element.on("mousedown",function(event){widget.isEnabled()&&(defaultSize=this.offsetLeft,optimizeSize(defaultSize),mouseMoveTracker.captureMouseMoves(event))})},_createTrackWrapper:function(){return BI.createWidget({type:"bi.absolute",items:[{el:{type:"bi.vertical",items:[{type:"bi.absolute",items:[{el:this.grayTrack,top:0,left:0,width:"100%"},{el:this.blueTrack,top:0,left:0,width:"0%"}]}],hgap:8,height:8},top:8,left:0,width:"100%"}]})},_checkValidation:function(v){var o=this.options,valid=!1;if(BI.isNumeric(v)&&!(BI.isNull(v)||vthis.max))if(o.digit===!1)valid=!0;else{var dotText=(v+"").split(".")[1]||"";valid=dotText.length===o.digit}return valid},_setBlueTrack:function(percent){this.blueTrack.element.css({width:percent+"%"})},_setLabelPosition:function(percent){},_setSliderPosition:function(percent){this.slider.element.css({left:percent+"%"})},_setAllPosition:function(percent){this._setSliderPosition(percent),this._setLabelPosition(percent),this._setBlueTrack(percent)},_setVisible:function(visible){this.slider.setVisible(visible),this.label.setVisible(visible)},_getGrayTrackLength:function(){return this.grayTrack.element[0].scrollWidth},_getValueByPercent:function(percent){var thousandth=BI.parseInt(10*percent);return(this.max-this.min)*thousandth/1e3+this.min},_getPercentByValue:function(v){return 100*(v-this.min)/(this.max-this.min)},getValue:function(){return this.value},setValue:function(v){var o=this.options;v=BI.parseFloat(v),v=o.digit===!1?v:v.toFixed(o.digit),isNaN(v)||(this._checkValidation(v)&&(this.value=v),v>this.max&&(this.value=this.max),vminNumber&&(this.min=minNumber,this.max=maxNumber)},reset:function(){this._setVisible(!1),this.enable=!1,this.value="",this.min=0,this.max=0,this._setBlueTrack(0)},populate:function(){isNaN(this.min)||isNaN(this.max)||(this._setVisible(!0),this.enable=!0,this.label.setErrorText(BI.i18nText("BI-Basic_Please_Enter_Number_Between",this.min,this.max)),BI.isNumeric(this.value)||BI.isNotEmptyString(this.value)?(this.label.setValue(this.value),this._setAllPosition(this._getPercentByValue(this.value))):(this.label.setValue(this.max),this._setAllPosition(100)))}}),BI.SingleSlider.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.single_slider",BI.SingleSlider),BI.SingleSliderLabel=BI.inherit(BI.Single,{_constant:{EDITOR_WIDTH:90,EDITOR_HEIGHT:20,HEIGHT:20,SLIDER_WIDTH_HALF:15,SLIDER_WIDTH:30,SLIDER_HEIGHT:30,TRACK_HEIGHT:24},_defaultConfig:function(){return BI.extend(BI.SingleSliderLabel.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-slider-label bi-slider-track",digit:!1,unit:""})},_init:function(){BI.SingleSliderLabel.superclass._init.apply(this,arguments);var self=this,o=this.options,c=this._constant;this.enable=!1,this.value="",this.grayTrack=BI.createWidget({type:"bi.layout",cls:"gray-track",height:6}),this.blueTrack=BI.createWidget({type:"bi.layout",cls:"blue-track bi-high-light-background",height:6}),this.track=this._createTrackWrapper(),this.slider=BI.createWidget({type:"bi.single_slider_button"}),this._draggable(this.slider);var sliderVertical=BI.createWidget({type:"bi.vertical",items:[{type:"bi.absolute",items:[this.slider]}],hgap:c.SLIDER_WIDTH_HALF,height:c.SLIDER_HEIGHT});sliderVertical.element.click(function(e){if(self.enable&&self.isEnabled()){var offset=e.clientX-self.element.offset().left-c.SLIDER_WIDTH_HALF,trackLength=self.track.element[0].scrollWidth,percent=0;offset<0&&(percent=0),offset>0&&offsettrackLength-c.SLIDER_WIDTH&&(percent=100);var significantPercent=BI.parseFloat(percent.toFixed(1));self._setAllPosition(significantPercent);var v=self._getValueByPercent(significantPercent);v=o.digit===!1?v:v.toFixed(o.digit),self.label.setText(v+o.unit),self.value=v,self.fireEvent(BI.SingleSliderLabel.EVENT_CHANGE)}}),this.label=BI.createWidget({type:"bi.label",height:c.HEIGHT,width:c.EDITOR_WIDTH-2}),this._setVisible(!1),BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.vertical",items:[{type:"bi.absolute",items:[{el:this.track,width:"100%",height:c.TRACK_HEIGHT}]}],hgap:7,height:c.TRACK_HEIGHT},top:13,left:0,width:"100%"},{el:sliderVertical,top:10,left:0,width:"100%"},{el:{type:"bi.vertical",items:[{type:"bi.horizontal_auto",items:[this.label]}],height:c.EDITOR_HEIGHT},top:0,left:0,width:"100%"}]})},_draggable:function(widget){function optimizeSize(s){return BI.clamp(s,0,self._getGrayTrackLength())}var self=this,o=this.options,startDrag=!1,size=0,offset=0,defaultSize=0,mouseMoveTracker=new BI.MouseMoveTracker(function(deltaX){if(mouseMoveTracker.isDragging()){startDrag=!0,offset+=deltaX,size=optimizeSize(defaultSize+offset),widget.element.addClass("dragging");var percent=100*size/self._getGrayTrackLength(),significantPercent=BI.parseFloat(percent.toFixed(1));self._setBlueTrack(significantPercent),self._setLabelPosition(significantPercent),self._setSliderPosition(significantPercent);var v=self._getValueByPercent(significantPercent);v=o.digit===!1?v:v.toFixed(o.digit),self.label.setValue(v+o.unit),self.value=v,self.fireEvent(BI.SingleSliderLabel.EVENT_CHANGE)}},function(){if(startDrag===!0){size=optimizeSize(size);var percent=100*size/self._getGrayTrackLength(),significantPercent=BI.parseFloat(percent.toFixed(1));self._setSliderPosition(significantPercent),size=0,offset=0,defaultSize=size,startDrag=!1}widget.element.removeClass("dragging"),mouseMoveTracker.releaseMouseMoves(),self.fireEvent(BI.SingleSliderLabel.EVENT_CHANGE)},window);widget.element.on("mousedown",function(event){widget.isEnabled()&&(defaultSize=this.offsetLeft,optimizeSize(defaultSize),mouseMoveTracker.captureMouseMoves(event))})},_createTrackWrapper:function(){return BI.createWidget({type:"bi.absolute",items:[{el:{type:"bi.vertical",items:[{type:"bi.absolute",items:[{el:this.grayTrack,top:0,left:0,width:"100%"},{el:this.blueTrack,top:0,left:0,width:"0%"}]}],hgap:8,height:8},top:8,left:0,width:"100%"}]})},_checkValidation:function(v){return BI.isNumeric(v)&&!(BI.isNull(v)||vthis.max)},_setBlueTrack:function(percent){this.blueTrack.element.css({width:percent+"%"})},_setLabelPosition:function(percent){},_setSliderPosition:function(percent){this.slider.element.css({left:percent+"%"})},_setAllPosition:function(percent){this._setSliderPosition(percent),this._setLabelPosition(percent),this._setBlueTrack(percent)},_setVisible:function(visible){this.slider.setVisible(visible),this.label.setVisible(visible)},_getGrayTrackLength:function(){return this.grayTrack.element[0].scrollWidth},_getValueByPercent:function(percent){var thousandth=BI.parseInt(10*percent);return(this.max-this.min)*thousandth/1e3+this.min},_getPercentByValue:function(v){return 100*(v-this.min)/(this.max-this.min)},_setEnable:function(b){BI.SingleSliderLabel.superclass._setEnable.apply(this,[b]),b?this.blueTrack.element.removeClass("disabled-blue-track").addClass("blue-track"):this.blueTrack.element.removeClass("blue-track").addClass("disabled-blue-track")},getValue:function(){return this.value},setValue:function(v){var o=this.options;v=BI.parseFloat(v),v=o.digit===!1?v:v.toFixed(o.digit),isNaN(v)||(this._checkValidation(v)&&(this.value=v),v>this.max&&(this.value=this.max),vminNumber&&(this.min=minNumber,this.max=maxNumber)},reset:function(){this._setVisible(!1),this.enable=!1,this.value="",this.min=0,this.max=0,this._setBlueTrack(0)},populate:function(){var o=this.options;isNaN(this.min)||isNaN(this.max)||(this._setVisible(!0),this.enable=!0,BI.isNumeric(this.value)||BI.isNotEmptyString(this.value)?(this.label.setValue(this.value+o.unit),this._setAllPosition(this._getPercentByValue(this.value))):(this.label.setValue(this.max+o.unit),this._setAllPosition(100)))}}),BI.SingleSliderLabel.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.single_slider_label",BI.SingleSliderLabel),BI.SingleSliderNormal=BI.inherit(BI.Single,{_constant:{HEIGHT:28,SLIDER_WIDTH_HALF:15,SLIDER_WIDTH:30,SLIDER_HEIGHT:30,TRACK_HEIGHT:24},props:{baseCls:"bi-single-slider-normal bi-slider-track",minMax:{min:0,max:100}},render:function(){var self=this,c=this._constant,track=this._createTrack();this.slider=BI.createWidget({type:"bi.single_slider_button"}),this._draggable(this.slider);var sliderVertical=BI.createWidget({type:"bi.vertical",items:[{type:"bi.absolute",items:[this.slider]}],hgap:c.SLIDER_WIDTH_HALF,height:c.SLIDER_HEIGHT});return sliderVertical.element.click(function(e){if(self.enable&&self.isEnabled()){var offset=e.clientX-self.element.offset().left-c.SLIDER_WIDTH_HALF,trackLength=self.track.element[0].scrollWidth,percent=0;offset<0&&(percent=0),offset>0&&offsettrackLength-c.SLIDER_WIDTH&&(percent=100);var significantPercent=BI.parseFloat(percent.toFixed(1));self._setAllPosition(significantPercent);var v=self._getValueByPercent(significantPercent);self.value=v,self.fireEvent(BI.SingleSlider.EVENT_CHANGE)}}),{type:"bi.absolute",element:this,items:[{el:{type:"bi.vertical",items:[{type:"bi.absolute",items:[{el:track,width:"100%",height:c.TRACK_HEIGHT}]}],hgap:7,height:c.TRACK_HEIGHT},top:3,left:0,width:"100%"},{el:sliderVertical,top:0,left:0,width:"100%"}]}},_draggable:function(widget){function optimizeSize(s){return BI.clamp(s,0,self._getGrayTrackLength())}var self=this,o=this.options,startDrag=!1,size=0,offset=0,defaultSize=0,mouseMoveTracker=new BI.MouseMoveTracker(function(deltaX){if(mouseMoveTracker.isDragging()){startDrag=!0,offset+=deltaX,size=optimizeSize(defaultSize+offset),widget.element.addClass("dragging");var percent=100*size/self._getGrayTrackLength(),significantPercent=BI.parseFloat(percent.toFixed(1));self._setBlueTrack(significantPercent),self._setSliderPosition(significantPercent);var v=self._getValueByPercent(significantPercent);v=o.digit===!1?v:v.toFixed(o.digit),self.value=v,self.fireEvent(BI.SingleSliderNormal.EVENT_DRAG,v)}},function(){if(startDrag===!0){size=optimizeSize(size);var percent=100*size/self._getGrayTrackLength(),significantPercent=BI.parseFloat(percent.toFixed(1));self._setSliderPosition(significantPercent),size=0,offset=0,defaultSize=size,startDrag=!1}widget.element.removeClass("dragging"),mouseMoveTracker.releaseMouseMoves(),self.fireEvent(BI.SingleSlider.EVENT_CHANGE)},window);widget.element.on("mousedown",function(event){widget.isEnabled()&&(defaultSize=this.offsetLeft,optimizeSize(defaultSize),mouseMoveTracker.captureMouseMoves(event))})},_createTrack:function(){var self=this,c=this._constant;return this.grayTrack=BI.createWidget({type:"bi.layout",cls:"gray-track",height:6}),this.blueTrack=BI.createWidget({type:"bi.layout",cls:"blue-track bi-high-light-background",height:6}),this.options.color&&this.blueTrack.element.css({"background-color":this.options.color}),{type:"bi.absolute",items:[{el:{type:"bi.vertical",items:[{type:"bi.absolute",items:[{el:this.grayTrack,top:0,left:0,width:"100%"},{el:this.blueTrack,top:0,left:0,width:"0%"}]}],hgap:8,height:8},top:8,left:0,width:"100%"}],ref:function(ref){self.track=ref}}},_checkValidation:function(v){return!(BI.isNull(v)||vthis.max)},_setBlueTrack:function(percent){this.blueTrack.element.css({width:percent+"%"})},_setSliderPosition:function(percent){this.slider.element.css({left:percent+"%"})},_setAllPosition:function(percent){this._setSliderPosition(percent),this._setBlueTrack(percent)},_setVisible:function(visible){this.slider.setVisible(visible)},_getGrayTrackLength:function(){return this.grayTrack.element[0].scrollWidth},_getValueByPercent:function(percent){var thousandth=BI.parseInt(10*percent);return(this.max-this.min)*thousandth/1e3+this.min},_getPercentByValue:function(v){return 100*(v-this.min)/(this.max-this.min)},_setEnable:function(b){BI.SingleSliderNormal.superclass._setEnable.apply(this,[b]),b?this.blueTrack.element.removeClass("disabled-blue-track").addClass("blue-track"):this.blueTrack.element.removeClass("blue-track").addClass("disabled-blue-track")},getValue:function(){return this.value},setValue:function(v){var value=BI.parseFloat(v);isNaN(value)||(this._checkValidation(value)&&(this.value=value),value>this.max&&(this.value=this.max),valueminNumber&&(this.min=minNumber,this.max=maxNumber)},reset:function(){this._setVisible(!1),this.enable=!1,this.value="",this.min=0,this.max=0,this._setBlueTrack(0)},populate:function(){isNaN(this.min)||isNaN(this.max)||(this._setVisible(!0),this.enable=!0,BI.isNumeric(this.value)||BI.isNotEmptyString(this.value)?this._setAllPosition(this._getPercentByValue(this.value)):this._setAllPosition(100))}}),BI.SingleSliderNormal.EVENT_DRAG="EVENT_DRAG",BI.shortcut("bi.single_slider_normal",BI.SingleSliderNormal),BI.SingleTreeCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SingleTreeCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-tree-combo",trigger:{},height:24,text:"",items:[],value:"",attributes:{tabIndex:0}})},_init:function(){BI.SingleTreeCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.trigger=BI.createWidget(BI.extend({type:"bi.single_tree_trigger",text:o.text,height:o.height,items:o.items,value:o.value},o.trigger)),this.popup=BI.createWidget({type:"bi.single_level_tree",items:o.items,value:o.value}),this.combo=BI.createWidget({type:"bi.combo",container:o.container,element:this,adjustLength:2,el:this.trigger,popup:{el:this.popup}}),this.combo.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){self.fireEvent(BI.SingleTreeCombo.EVENT_BEFORE_POPUPVIEW,arguments)}),this.popup.on(BI.SingleTreePopup.EVENT_CHANGE,function(){self.setValue(self.popup.getValue()),self.combo.hideView(),self.fireEvent(BI.SingleTreeCombo.EVENT_CHANGE)})},populate:function(items){this.combo.populate(items)},setValue:function(v){v=BI.isArray(v)?v:[v],this.trigger.setValue(v),this.popup.setValue(v)},getValue:function(){return this.popup.getValue()}}),BI.SingleTreeCombo.EVENT_CHANGE="EVENT_CHANGE",BI.SingleTreeCombo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.single_tree_combo",BI.SingleTreeCombo),BI.SingleTreePopup=BI.inherit(BI.Pane,{_defaultConfig:function(){return BI.extend(BI.SingleTreePopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-level-tree",tipText:BI.i18nText("BI-No_Selected_Item"),items:[],value:""})},_init:function(){BI.SingleTreePopup.superclass._init.apply(this,arguments);var self=this,o=this.options;this.tree=BI.createWidget({type:"bi.level_tree",expander:{isDefaultInit:!0},items:o.items,value:o.value,chooseType:BI.Selection.Single}),BI.createWidget({type:"bi.vertical",element:this,vgap:5,items:[this.tree]}),this.tree.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.tree.on(BI.LevelTree.EVENT_CHANGE,function(){self.fireEvent(BI.SingleTreePopup.EVENT_CHANGE)}),this.check()},getValue:function(){return this.tree.getValue()},setValue:function(v){v=BI.isArray(v)?v:[v],this.tree.setValue(v)},populate:function(items){BI.SingleTreePopup.superclass.populate.apply(this,arguments),this.tree.populate(items)}}),BI.SingleTreePopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.single_level_tree",BI.SingleTreePopup),BI.SingleTreeTrigger=BI.inherit(BI.Trigger,{_defaultConfig:function(){return BI.extend(BI.SingleTreeTrigger.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-tree-trigger",height:24,text:"",items:[],value:""})},_init:function(){BI.SingleTreeTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options;this.trigger=BI.createWidget({type:"bi.select_text_trigger",element:this,text:o.text,items:o.items,height:o.height,value:o.value})},_checkTitle:function(){var self=this,val=this.getValue();BI.any(this.options.items,function(i,item){if(BI.contains(val,item.value))return self.trigger.setTitle(item.text||item.value),!0})},setValue:function(v){v=BI.isArray(v)?v:[v],this.options.value=v,this.trigger.setValue(v),this._checkTitle()},getValue:function(){return this.options.value||[]},populate:function(items){BI.SingleTreeTrigger.superclass.populate.apply(this,arguments),this.trigger.populate(items)}}),BI.shortcut("bi.single_tree_trigger",BI.SingleTreeTrigger),BI.TextValueDownListCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.TextValueDownListCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-text-value-down-list-combo",height:24,attributes:{tabIndex:0}})},_init:function(){BI.TextValueDownListCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this._createValueMap();var value;BI.isNotNull(o.value)&&(value=this._digest(o.value)),this.trigger=BI.createWidget({type:"bi.down_list_select_text_trigger",cls:"text-value-down-list-trigger",height:o.height,items:o.items,text:o.text,value:value}),this.combo=BI.createWidget({type:"bi.down_list_combo",element:this,chooseType:BI.Selection.Single,adjustLength:2,height:o.height,el:this.trigger,value:BI.isNull(value)?[]:[value],items:BI.deepClone(o.items)}),this.combo.on(BI.DownListCombo.EVENT_CHANGE,function(){var currentVal=self.combo.getValue()[0].value;currentVal!==self.value&&(self.setValue(currentVal),self.fireEvent(BI.TextValueDownListCombo.EVENT_CHANGE))}),this.combo.on(BI.DownListCombo.EVENT_SON_VALUE_CHANGE,function(){var currentVal=self.combo.getValue()[0].childValue;currentVal!==self.value&&(self.setValue(currentVal),self.fireEvent(BI.TextValueDownListCombo.EVENT_CHANGE))})},_createValueMap:function(){var self=this;this.valueMap={},BI.each(BI.flatten(this.options.items),function(idx,item){BI.has(item,"el")?BI.each(item.children,function(id,it){self.valueMap[it.value]={value:item.el.value,childValue:it.value}}):self.valueMap[item.value]={value:item.value}})},_digest:function(v){return this.value=v,this.valueMap[v]},setValue:function(v){v=this._digest(v),this.combo.setValue([v]),this.trigger.setValue(v)},getValue:function(){var v=this.combo.getValue()[0];return[v.childValue||v.value]},populate:function(items){this.options.items=BI.flatten(items),this.combo.populate(items),this._createValueMap()}}),BI.TextValueDownListCombo.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.text_value_down_list_combo",BI.TextValueDownListCombo),BI.DownListSelectTextTrigger=BI.inherit(BI.Trigger,{_defaultConfig:function(){return BI.extend(BI.DownListSelectTextTrigger.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-down-list-select-text-trigger",height:24,text:""})},_init:function(){BI.DownListSelectTextTrigger.superclass._init.apply(this,arguments);var o=this.options;this.trigger=BI.createWidget({type:"bi.select_text_trigger",element:this,height:o.height,items:this._formatItemArray(o.items),text:o.text,value:BI.isNull(o.value)?"":o.value.childValue||o.value.value})},_formatItemArray:function(){var sourceArray=BI.flatten(BI.deepClone(this.options.items)),targetArray=[];return BI.each(sourceArray,function(idx,item){BI.has(item,"el")?(BI.each(item.children,function(id,it){it.text=item.el.text+"("+it.text+")"}),targetArray=BI.concat(targetArray,item.children)):targetArray.push(item)}),targetArray},setValue:function(vals){this.trigger.setValue(vals.childValue||vals.value)},populate:function(items){this.trigger.populate(this._formatItemArray(items))}}),BI.shortcut("bi.down_list_select_text_trigger",BI.DownListSelectTextTrigger),!function(){BI.TimePopup=BI.inherit(BI.Widget,{props:{baseCls:"bi-date-time-popup",height:68},render:function(){var self=this,o=this.options;return{type:"bi.vtape",items:[{el:{type:"bi.center_adapt",cls:"bi-split-top",items:[{type:"bi.dynamic_date_time_select",value:o.value,ref:function(_ref){self.timeSelect=_ref}}]},hgap:10,height:44},{el:{type:"bi.grid",items:[[{type:"bi.text_button",cls:"bi-high-light bi-split-top",shadow:!0,text:BI.i18nText("BI-Basic_Clears"),listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.TimePopup.BUTTON_CLEAR_EVENT_CHANGE)}}]},{type:"bi.text_button",cls:"bi-split-left bi-split-right bi-high-light bi-split-top",shadow:!0,text:BI.i18nText("BI-Basic_Now"),listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.TimePopup.BUTTON_NOW_EVENT_CHANGE)}}]},{type:"bi.text_button",cls:"bi-high-light bi-split-top",shadow:!0,text:BI.i18nText("BI-Basic_OK"),listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.TimePopup.BUTTON_OK_EVENT_CHANGE)}}]}]]},height:24}]}},setValue:function(value){this._checkValueValid(value)?this.timeSelect.setValue():this.timeSelect.setValue({hour:value.hour,minute:value.minute,second:value.second})},getValue:function(){return this.timeSelect.getValue()},_checkValueValid:function(value){return BI.isNull(value)||BI.isEmptyObject(value)||BI.isEmptyString(value)}}),BI.TimePopup.BUTTON_OK_EVENT_CHANGE="BUTTON_OK_EVENT_CHANGE", +BI.TimePopup.BUTTON_CLEAR_EVENT_CHANGE="BUTTON_CLEAR_EVENT_CHANGE",BI.TimePopup.BUTTON_NOW_EVENT_CHANGE="BUTTON_NOW_EVENT_CHANGE",BI.TimePopup.CALENDAR_EVENT_CHANGE="CALENDAR_EVENT_CHANGE",BI.shortcut("bi.time_popup",BI.TimePopup)}(),!function(){BI.TimeCombo=BI.inherit(BI.Single,{constants:{popupHeight:80,popupWidth:240,comboAdjustHeight:1,border:1},props:{baseCls:"bi-time-combo bi-border bi-border-radius bi-focus-shadow",width:78,height:22,format:"",allowEdit:!1},render:function(){var self=this,opts=this.options;this.storeTriggerValue="",this.storeValue=opts.value;var popup={type:"bi.time_popup",value:opts.value,listeners:[{eventName:BI.TimePopup.BUTTON_CLEAR_EVENT_CHANGE,action:function(){self.setValue(),self.hidePopupView(),self.fireEvent(BI.TimeCombo.EVENT_CONFIRM)}},{eventName:BI.TimePopup.BUTTON_OK_EVENT_CHANGE,action:function(){self.setValue(self.popup.getValue()),self.hidePopupView(),self.fireEvent(BI.TimeCombo.EVENT_CONFIRM)}},{eventName:BI.TimePopup.BUTTON_NOW_EVENT_CHANGE,action:function(){self._setNowTime()}}],ref:function(_ref){self.popup=_ref}};return{type:"bi.htape",items:[{type:"bi.absolute",items:[{el:{type:"bi.combo",container:opts.container,toggle:!1,isNeedAdjustHeight:!1,isNeedAdjustWidth:!1,el:{type:"bi.time_trigger",height:opts.height,allowEdit:opts.allowEdit,watermark:opts.watermark,format:opts.format,value:opts.value,ref:function(_ref){self.trigger=_ref},listeners:[{eventName:"EVENT_KEY_DOWN",action:function(){self.combo.isViewVisible()&&self.combo.hideView(),self.fireEvent(BI.TimeCombo.EVENT_KEY_DOWN,arguments)}},{eventName:"EVENT_STOP",action:function(){self.combo.isViewVisible()||self.combo.showView()}},{eventName:"EVENT_FOCUS",action:function(){self.storeTriggerValue=self.trigger.getKey(),self.combo.isViewVisible()||self.combo.showView(),self.fireEvent("EVENT_FOCUS")}},{eventName:"EVENT_BLUR",action:function(){self.fireEvent("EVENT_BLUR")}},{eventName:"EVENT_ERROR",action:function(){var date=BI.getDate();self.storeValue={hour:date.getHours(),minute:date.getMinutes(),second:date.getSeconds()},self.fireEvent("EVENT_ERROR")}},{eventName:"EVENT_VALID",action:function(){self.fireEvent("EVENT_VALID")}},{eventName:"EVENT_CHANGE",action:function(){self.fireEvent("EVENT_CHANGE")}},{eventName:"EVENT_CONFIRM",action:function(){if(!self.combo.isViewVisible()){var dateStore=self.storeTriggerValue,dateObj=self.trigger.getKey();BI.isNotEmptyString(dateObj)&&!BI.isEqual(dateObj,dateStore)?(self.storeValue=self.trigger.getValue(),self.setValue(self.trigger.getValue())):BI.isEmptyString(dateObj)&&(self.storeValue=null,self.trigger.setValue()),self.fireEvent("EVENT_CONFIRM")}}}]},adjustLength:this.constants.comboAdjustHeight,popup:{el:popup,width:this.constants.popupWidth,stopPropagation:!1},hideChecker:function(e){return 0===self.triggerBtn.element.find(e.target).length},listeners:[{eventName:BI.Combo.EVENT_BEFORE_POPUPVIEW,action:function(){self.popup.setValue(self.storeValue),self.fireEvent(BI.TimeCombo.EVENT_BEFORE_POPUPVIEW)}}],ref:function(_ref){self.combo=_ref}},top:0,left:0,right:22,bottom:0},{el:{type:"bi.icon_button",cls:"bi-trigger-icon-button time-font icon-size-16",width:22,height:22,listeners:[{eventName:BI.IconButton.EVENT_CHANGE,action:function(){self.combo.isViewVisible()||self.combo.showView()}}],ref:function(_ref){self.triggerBtn=_ref}},top:0,right:0}]}]}},setValue:function(v){this.storeValue=v,this.trigger.setValue(v)},getValue:function(){return this.storeValue},hidePopupView:function(){this.combo.hideView()},_setNowTime:function(){var date=BI.getDate(),nowTome={hour:date.getHours(),minute:date.getMinutes(),second:date.getSeconds()};this.setValue(nowTome),this.hidePopupView(),this.fireEvent(BI.TimeCombo.EVENT_CONFIRM)}}),BI.TimeCombo.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.TimeCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.TimeCombo.EVENT_CHANGE="EVENT_CHANGE",BI.TimeCombo.EVENT_VALID="EVENT_VALID",BI.TimeCombo.EVENT_ERROR="EVENT_ERROR",BI.TimeCombo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.time_combo",BI.TimeCombo)}(),!function(){BI.TimeTrigger=BI.inherit(BI.Trigger,{_const:{COMPARE_FORMAT:"%H:%M:%S",COMPLETE_COMPARE_FORMAT:"%Y-%M-%d %H:%M:%S %P",FORMAT_ARRAY:["%H:%M:%S","%I:%M:%S","%l:%M:%S","%k:%M:%S","%l:%M:%S %p","%l:%M:%S %P","%H:%M:%S %p","%H:%M:%S %P","%l:%M","%k:%M","%I:%M","%H:%M","%M:%S"],DEFAULT_DATE_STRING:"2000-01-01"},props:{extraCls:"bi-time-trigger",value:{},format:"",allowEdit:!1},render:function(){var self=this,o=this.options;return this.storeTriggerValue="",this.storeValue=o.value,{type:"bi.absolute",items:[{el:{type:"bi.sign_editor",height:o.height,validationChecker:function(v){return self._dateCheck(v)},quitChecker:function(){return!1},ref:function(_ref){self.editor=_ref},value:this._formatValue(o.value),hgap:4,allowBlank:!0,watermark:BI.isKey(o.watermark)?o.watermark:BI.i18nText("BI-Basic_Unrestricted"),title:BI.bind(this._getTitle,this),listeners:[{eventName:"EVENT_KEY_DOWN",action:function(){self.fireEvent("EVENT_KEY_DOWN",arguments)}},{eventName:"EVENT_FOCUS",action:function(){self.storeTriggerValue=self.getKey(),self.fireEvent("EVENT_FOCUS")}},{eventName:"EVENT_BLUR",action:function(){self.fireEvent("EVENT_BLUR")}},{eventName:"EVENT_STOP",action:function(){self.fireEvent("EVENT_STOP")}},{eventName:"EVENT_VALID",action:function(){self.fireEvent("EVENT_VALID")}},{eventName:"EVENT_ERROR",action:function(){self.fireEvent("EVENT_ERROR")}},{eventName:"EVENT_CONFIRM",action:function(){var value=self.editor.getValue();if(BI.isNotNull(value)&&self.editor.setState(value),BI.isNotEmptyString(value)&&!BI.isEqual(self.storeTriggerValue,self.getKey())){var date=value.match(/\d+/g);self.storeValue={hour:0|date[0],minute:0|date[1],second:0|date[2]}}self.fireEvent("EVENT_CONFIRM")}},{eventName:"EVENT_START",action:function(){self.fireEvent("EVENT_START")}},{eventName:"EVENT_CHANGE",action:function(){self.fireEvent("EVENT_CHANGE")}}]},left:0,right:0,top:0,bottom:0},{el:{type:"bi.text",invisible:o.allowEdit,cls:"show-text",title:BI.bind(this._getTitle,this),hgap:4},left:0,right:0,top:0,bottom:0}]}},_dateCheck:function(date){var c=this._const;return BI.any(c.FORMAT_ARRAY,function(idx,format){return BI.print(BI.parseDateTime(c.DEFAULT_DATE_STRING+" "+date,c.COMPLETE_COMPARE_FORMAT),format)===date})},_getTitle:function(){var storeValue=this.storeValue||{},date=BI.getDate();return BI.print(BI.getDate(date.getFullYear(),0,1,storeValue.hour,storeValue.minute,storeValue.second),this._getFormatString())},_getFormatString:function(){return this.options.format||this._const.COMPARE_FORMAT},_formatValue:function(v){var now=BI.getDate();return BI.isNotEmptyObject(v)?BI.print(BI.getDate(now.getFullYear(),now.getMonth(),now.getDay(),v.hour,v.minute,v.second),this._getFormatString()):""},getKey:function(){return this.editor.getValue()},setValue:function(v){this.storeValue=v,this.editor.setValue(this._formatValue(v))},getValue:function(){return this.storeValue}}),BI.shortcut("bi.time_trigger",BI.TimeTrigger)}(),BI.DateInterval=BI.inherit(BI.Single,{constants:{height:24,width:24,lgap:15,offset:0,timeErrorCls:"time-error"},_defaultConfig:function(){var conf=BI.DateInterval.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-date-interval",minDate:"1900-01-01",maxDate:"2099-12-31"})},_init:function(){var self=this,o=this.options;BI.DateInterval.superclass._init.apply(this,arguments),o.value=o.value||{},this.left=this._createCombo(o.value.start),this.right=this._createCombo(o.value.end),this.label=BI.createWidget({type:"bi.label",height:this.constants.height,width:this.constants.width,text:"-"}),BI.createWidget({element:self,type:"bi.center",height:this.constants.height,items:[{type:"bi.absolute",items:[{el:self.left,left:this.constants.offset,right:this.constants.width/2,top:0,bottom:0}]},{type:"bi.absolute",items:[{el:self.right,left:this.constants.width/2,right:this.constants.offset,top:0,bottom:0}]}]}),BI.createWidget({type:"bi.horizontal_auto",element:this,items:[self.label]})},_createCombo:function(v){var self=this,o=this.options,combo=BI.createWidget({type:"bi.dynamic_date_combo",behaviors:o.behaviors,value:v});return combo.on(BI.DynamicDateCombo.EVENT_ERROR,function(){self._clearTitle(),BI.Bubbles.hide("error"),self.element.removeClass(self.constants.timeErrorCls),self.fireEvent(BI.DateInterval.EVENT_ERROR)}),combo.on(BI.DynamicDateCombo.EVENT_VALID,function(){BI.Bubbles.hide("error");var smallDate=self.left.getKey(),bigDate=self.right.getKey();self._check(smallDate,bigDate)&&self._compare(smallDate,bigDate)?(self._setTitle(BI.i18nText("BI-Time_Interval_Error_Text")),self.element.addClass(self.constants.timeErrorCls),BI.Bubbles.show("error",BI.i18nText("BI-Time_Interval_Error_Text"),self,{offsetStyle:"center"}),self.fireEvent(BI.DateInterval.EVENT_ERROR)):(self._clearTitle(),self.element.removeClass(self.constants.timeErrorCls))}),combo.on(BI.DynamicDateCombo.EVENT_FOCUS,function(){BI.Bubbles.hide("error");var smallDate=self.left.getKey(),bigDate=self.right.getKey();self._check(smallDate,bigDate)&&self._compare(smallDate,bigDate)?(self._setTitle(BI.i18nText("BI-Time_Interval_Error_Text")),self.element.addClass(self.constants.timeErrorCls),BI.Bubbles.show("error",BI.i18nText("BI-Time_Interval_Error_Text"),self,{offsetStyle:"center"}),self.fireEvent(BI.DateInterval.EVENT_ERROR)):(self._clearTitle(),self.element.removeClass(self.constants.timeErrorCls))}),combo.on(BI.DynamicDateCombo.EVENT_BEFORE_POPUPVIEW,function(){self.left.hidePopupView(),self.right.hidePopupView()}),combo.on(BI.DynamicDateCombo.EVENT_CONFIRM,function(){BI.Bubbles.hide("error");var smallDate=self.left.getKey(),bigDate=self.right.getKey();self._check(smallDate,bigDate)&&self._compare(smallDate,bigDate)?(self._setTitle(BI.i18nText("BI-Time_Interval_Error_Text")),self.element.addClass(self.constants.timeErrorCls),self.fireEvent(BI.DateInterval.EVENT_ERROR)):(self._clearTitle(),self.element.removeClass(self.constants.timeErrorCls),self.fireEvent(BI.DateInterval.EVENT_CHANGE))}),combo},_dateCheck:function(date){return BI.print(BI.parseDateTime(date,"%Y-%x-%d"),"%Y-%x-%d")===date||BI.print(BI.parseDateTime(date,"%Y-%X-%d"),"%Y-%X-%d")===date||BI.print(BI.parseDateTime(date,"%Y-%x-%e"),"%Y-%x-%e")===date||BI.print(BI.parseDateTime(date,"%Y-%X-%e"),"%Y-%X-%e")===date},_checkVoid:function(obj){var o=this.options;return!BI.checkDateVoid(obj.year,obj.month,obj.day,o.minDate,o.maxDate)[0]},_check:function(smallDate,bigDate){var smallObj=smallDate.match(/\d+/g),bigObj=bigDate.match(/\d+/g);return this._dateCheck(smallDate)&&BI.checkDateLegal(smallDate)&&this._checkVoid({year:smallObj[0],month:smallObj[1],day:smallObj[2]})&&this._dateCheck(bigDate)&&BI.checkDateLegal(bigDate)&&this._checkVoid({year:bigObj[0],month:bigObj[1],day:bigObj[2]})},_compare:function(smallDate,bigDate){return smallDate=BI.print(BI.parseDateTime(smallDate,"%Y-%X-%d"),"%Y-%X-%d"),bigDate=BI.print(BI.parseDateTime(bigDate,"%Y-%X-%d"),"%Y-%X-%d"),BI.isNotNull(smallDate)&&BI.isNotNull(bigDate)&&smallDate>bigDate},_setTitle:function(v){this.left.setTitle(v),this.right.setTitle(v),this.label.setTitle(v)},_clearTitle:function(){this.left.setTitle(""),this.right.setTitle(""),this.label.setTitle("")},setValue:function(date){date=date||{},this.left.setValue(date.start),this.right.setValue(date.end)},getValue:function(){return{start:this.left.getValue(),end:this.right.getValue()}}}),BI.DateInterval.EVENT_VALID="EVENT_VALID",BI.DateInterval.EVENT_ERROR="EVENT_ERROR",BI.DateInterval.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.date_interval",BI.DateInterval),BI.TimeInterval=BI.inherit(BI.Single,{constants:{height:24,width:24,lgap:15,offset:0,timeErrorCls:"time-error"},_defaultConfig:function(){var conf=BI.TimeInterval.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-time-interval",minDate:"1900-01-01",maxDate:"2099-12-31"})},_init:function(){var self=this,o=this.options;BI.TimeInterval.superclass._init.apply(this,arguments),o.value=o.value||{},this.left=this._createCombo(o.value.start),this.right=this._createCombo(o.value.end),this.label=BI.createWidget({type:"bi.label",height:this.constants.height,width:this.constants.width,text:"-"}),BI.createWidget({element:self,type:"bi.center",height:this.constants.height,items:[{type:"bi.absolute",items:[{el:self.left,left:this.constants.offset,right:this.constants.width/2,top:0,bottom:0}]},{type:"bi.absolute",items:[{el:self.right,left:this.constants.width/2,right:this.constants.offset,top:0,bottom:0}]}]}),BI.createWidget({type:"bi.horizontal_auto",element:this,items:[self.label]})},_createCombo:function(v){var self=this,o=this.options,combo=BI.createWidget({type:"bi.dynamic_date_time_combo",behaviors:o.behaviors,value:v});return combo.on(BI.DynamicDateTimeCombo.EVENT_ERROR,function(){self._clearTitle(),BI.Bubbles.hide("error"),self.element.removeClass(self.constants.timeErrorCls),self.fireEvent(BI.TimeInterval.EVENT_ERROR)}),combo.on(BI.DynamicDateTimeCombo.EVENT_VALID,function(){BI.Bubbles.hide("error");var smallDate=self.left.getKey(),bigDate=self.right.getKey();self.left.isValid()&&self.right.isValid()&&self._check(smallDate,bigDate)&&self._compare(smallDate,bigDate)?(self._setTitle(BI.i18nText("BI-Time_Interval_Error_Text")),self.element.addClass(self.constants.timeErrorCls),BI.Bubbles.show("error",BI.i18nText("BI-Time_Interval_Error_Text"),self,{offsetStyle:"center"}),self.fireEvent(BI.TimeInterval.EVENT_ERROR)):(self._clearTitle(),self.element.removeClass(self.constants.timeErrorCls))}),combo.on(BI.DynamicDateTimeCombo.EVENT_FOCUS,function(){BI.Bubbles.hide("error");var smallDate=self.left.getKey(),bigDate=self.right.getKey();self.left.isValid()&&self.right.isValid()&&self._check(smallDate,bigDate)&&self._compare(smallDate,bigDate)?(self._setTitle(BI.i18nText("BI-Time_Interval_Error_Text")),self.element.addClass(self.constants.timeErrorCls),BI.Bubbles.show("error",BI.i18nText("BI-Time_Interval_Error_Text"),self,{offsetStyle:"center"}),self.fireEvent(BI.TimeInterval.EVENT_ERROR)):(self._clearTitle(),self.element.removeClass(self.constants.timeErrorCls))}),combo.on(BI.DynamicDateTimeCombo.EVENT_BEFORE_POPUPVIEW,function(){self.left.hidePopupView(),self.right.hidePopupView()}),combo.on(BI.DynamicDateTimeCombo.EVENT_CONFIRM,function(){BI.Bubbles.hide("error");var smallDate=self.left.getKey(),bigDate=self.right.getKey();self.left.isValid()&&self.right.isValid()&&self._check(smallDate,bigDate)&&self._compare(smallDate,bigDate)?(self._setTitle(BI.i18nText("BI-Time_Interval_Error_Text")),self.element.addClass(self.constants.timeErrorCls),self.fireEvent(BI.TimeInterval.EVENT_ERROR)):(self._clearTitle(),self.element.removeClass(self.constants.timeErrorCls),self.fireEvent(BI.TimeInterval.EVENT_CHANGE))}),combo},_dateCheck:function(date){return BI.print(BI.parseDateTime(date,"%Y-%x-%d %H:%M:%S"),"%Y-%x-%d %H:%M:%S")===date||BI.print(BI.parseDateTime(date,"%Y-%X-%d %H:%M:%S"),"%Y-%X-%d %H:%M:%S")===date||BI.print(BI.parseDateTime(date,"%Y-%x-%e %H:%M:%S"),"%Y-%x-%e %H:%M:%S")===date||BI.print(BI.parseDateTime(date,"%Y-%X-%e %H:%M:%S"),"%Y-%X-%e %H:%M:%S")===date},_checkVoid:function(obj){var o=this.options;return!BI.checkDateVoid(obj.year,obj.month,obj.day,o.minDate,o.maxDate)[0]},_check:function(smallDate,bigDate){var smallObj=smallDate.match(/\d+/g),bigObj=bigDate.match(/\d+/g);return this._dateCheck(smallDate)&&BI.checkDateLegal(smallDate)&&this._checkVoid({year:smallObj[0],month:smallObj[1],day:smallObj[2]})&&this._dateCheck(bigDate)&&BI.checkDateLegal(bigDate)&&this._checkVoid({year:bigObj[0],month:bigObj[1],day:bigObj[2]})},_compare:function(smallDate,bigDate){return smallDate=BI.print(BI.parseDateTime(smallDate,"%Y-%X-%d %H:%M:%S"),"%Y-%X-%d %H:%M:%S"),bigDate=BI.print(BI.parseDateTime(bigDate,"%Y-%X-%d %H:%M:%S"),"%Y-%X-%d %H:%M:%S"),BI.isNotNull(smallDate)&&BI.isNotNull(bigDate)&&smallDate>bigDate},_setTitle:function(v){this.left.setTitle(v),this.right.setTitle(v),this.label.setTitle(v)},_clearTitle:function(){this.left.setTitle(""),this.right.setTitle(""),this.label.setTitle("")},setValue:function(date){date=date||{},this.left.setValue(date.start),this.right.setValue(date.end)},getValue:function(){return{start:this.left.getValue(),end:this.right.getValue()}}}),BI.TimeInterval.EVENT_VALID="EVENT_VALID",BI.TimeInterval.EVENT_ERROR="EVENT_ERROR",BI.TimeInterval.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.time_interval",BI.TimeInterval),!function(){BI.TimePeriods=BI.inherit(BI.Single,{constants:{height:24,width:24,lgap:15,offset:0},props:{extraCls:"bi-time-interval",value:{}},render:function(){var self=this,o=this.options;return{type:"bi.absolute",height:this.constants.height,items:[{el:{type:"bi.horizontal_auto",items:[{type:"bi.label",height:this.constants.height,width:this.constants.width,text:"-",ref:function(_ref){self.label=_ref}}]},top:0,left:0,right:0,bottom:0},{el:{type:"bi.center",height:this.constants.height,items:[{type:"bi.absolute",items:[{el:BI.extend({ref:function(_ref){self.left=_ref}},this._createCombo(o.value.start)),left:this.constants.offset,right:this.constants.width/2,top:0,bottom:0}]},{type:"bi.absolute",items:[{el:BI.extend({ref:function(_ref){self.right=_ref}},this._createCombo(o.value.end)),left:this.constants.width/2,right:this.constants.offset,top:0,bottom:0}]}]},top:0,left:0,right:0,bottom:0}]}},_createCombo:function(v){var self=this;return{type:"bi.time_combo",value:v,listeners:[{eventName:BI.TimeCombo.EVENT_BEFORE_POPUPVIEW,action:function(){self.left.hidePopupView(),self.right.hidePopupView()}},{eventName:BI.TimeCombo.EVENT_CHANGE,action:function(){self.fireEvent(BI.TimePeriods.EVENT_CHANGE)}},{eventName:BI.TimeCombo.EVENT_CONFIRM,action:function(){self.fireEvent(BI.TimePeriods.EVENT_CONFIRM)}}]}},setValue:function(date){date=date||{},this.left.setValue(date.start),this.right.setValue(date.end)},getValue:function(){return{start:this.left.getValue(),end:this.right.getValue()}}}),BI.TimePeriods.EVENT_CONFIRM="EVENT_CONFIRM",BI.TimePeriods.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.time_periods",BI.TimePeriods)}(),BI.DynamicYearCard=BI.inherit(BI.Widget,{props:{baseCls:"bi-year-card"},render:function(){var self=this;return{type:"bi.vertical",items:[{type:"bi.label",text:BI.i18nText("BI-Multi_Date_Relative_Current_Time"),textAlign:"left",height:24},{type:"bi.dynamic_date_param_item",ref:function(){self.item=this},listeners:[{eventName:"EVENT_CHANGE",action:function(){self.fireEvent("EVENT_CHANGE")}}]}],vgap:10,hgap:10}},_createValue:function(type,v){return{dateType:type,value:Math.abs(v),offset:v>0?1:0}},setValue:function(v){v=v||{year:0},this.item.setValue(this._createValue(BI.DynamicDateCard.TYPE.YEAR,v.year))},getValue:function(){var value=this.item.getValue();return{year:0===value.offset?-value.value:value.value}}}),BI.DynamicYearCard.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.dynamic_year_card",BI.DynamicYearCard),BI.StaticYearCard=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.StaticYearCard.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-year-card",behaviors:{},min:"1900-01-01",max:"2099-12-31"})},_createYearCalendar:function(v){var o=this.options,y=this._year,calendar=BI.createWidget({type:"bi.year_calendar",behaviors:o.behaviors,min:o.min,max:o.max,logic:{dynamic:!0},year:y+12*v});return calendar.setValue(this._year),calendar},_init:function(){BI.StaticYearCard.superclass._init.apply(this,arguments);var self=this,o=this.options;this.selectedYear=this._year=BI.getDate().getFullYear(),this.backBtn=BI.createWidget({type:"bi.icon_button",cls:"pre-page-h-font",width:25,height:25,value:-1,listeners:[{eventName:BI.IconButton.EVENT_CHANGE,action:function(){self.navigation.setSelect(self.navigation.getSelect()-1),self._checkLeftValid(),self._checkRightValid()}}]}),this.preBtn=BI.createWidget({type:"bi.icon_button",cls:"next-page-h-font",width:25,height:25,value:1,listeners:[{eventName:BI.IconButton.EVENT_CHANGE,action:function(){self.navigation.setSelect(self.navigation.getSelect()+1),self._checkLeftValid(),self._checkRightValid()}}]}),this.navigation=BI.createWidget({type:"bi.navigation",direction:"top",element:this,single:!0,logic:{dynamic:!0},tab:{type:"bi.htape",cls:"bi-split-top bi-split-bottom",height:30,items:[{el:{type:"bi.center_adapt",items:[self.backBtn]},width:25},{type:"bi.layout"},{el:{type:"bi.center_adapt",items:[self.preBtn]},width:25}]},cardCreator:BI.bind(this._createYearCalendar,this),afterCardShow:function(){this.setValue(self.selectedYear);var calendar=this.getSelectedCard();self.backBtn.setEnable(!calendar.isFrontYear()),self.preBtn.setEnable(!calendar.isFinalYear())}}),this.navigation.on(BI.Navigation.EVENT_CHANGE,function(){self.selectedYear=this.getValue(),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),self.fireEvent(BI.StaticYearCard.EVENT_CHANGE,self.selectedYear)}),BI.isKey(o.value)&&this.setValue(o.value)},_checkLeftValid:function(){var o=this.options,valid=!0;return this.backBtn.setEnable(valid),valid},_checkRightValid:function(){var o=this.options,valid=!0;return this.preBtn.setEnable(valid),valid},getValue:function(){return{year:this.selectedYear}},setValue:function(obj){var o=this.options;obj=obj||{};var v=obj.year;BI.checkDateVoid(v,1,1,o.min,o.max)[0]?(v=BI.getDate().getFullYear(),this.selectedYear="",this.navigation.setSelect(BI.YearCalendar.getPageByYear(v)),this.navigation.setValue("")):(this.selectedYear=BI.parseInt(v),this.navigation.setSelect(BI.YearCalendar.getPageByYear(v)),this.navigation.setValue(this.selectedYear)),this._checkLeftValid(),this._checkRightValid()}}),BI.StaticYearCard.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.static_year_card",BI.StaticYearCard),BI.DynamicYearCombo=BI.inherit(BI.Widget,{props:{baseCls:"bi-year-combo bi-border bi-focus-shadow",behaviors:{},min:"1900-01-01",max:"2099-12-31",height:22},_init:function(){BI.DynamicYearCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.storeValue=o.value,this.trigger=BI.createWidget({type:"bi.dynamic_year_trigger",min:o.min,max:o.max,height:o.height,value:o.value||""}),this.trigger.on(BI.DynamicYearTrigger.EVENT_FOCUS,function(){self.storeTriggerValue=this.getKey()}),this.trigger.on(BI.DynamicYearTrigger.EVENT_START,function(){self.combo.isViewVisible()&&self.combo.hideView()}),this.trigger.on(BI.DynamicYearTrigger.EVENT_STOP,function(){self.combo.showView()}),this.trigger.on(BI.DynamicYearTrigger.EVENT_ERROR,function(){self.combo.isViewVisible()&&self.combo.hideView()}),this.trigger.on(BI.DynamicYearTrigger.EVENT_CONFIRM,function(){self.combo.isViewVisible()||(this.getKey()&&this.getKey()!==self.storeTriggerValue?(self.storeValue=self.trigger.getValue(),self.setValue(self.storeValue)):this.getKey()||(self.storeValue=null,self.setValue()),self._checkDynamicValue(self.storeValue),self.fireEvent(BI.DynamicYearCombo.EVENT_CONFIRM))}),this.combo=BI.createWidget({type:"bi.combo",container:o.container,isNeedAdjustHeight:!1,isNeedAdjustWidth:!1,el:this.trigger,popup:{minWidth:85,stopPropagation:!1,el:{type:"bi.dynamic_year_popup",ref:function(){self.popup=this},listeners:[{eventName:BI.DynamicYearPopup.EVENT_CHANGE,action:function(){self.setValue(self.popup.getValue()),self.combo.hideView(),self.fireEvent(BI.DynamicYearCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicYearPopup.BUTTON_CLEAR_EVENT_CHANGE,action:function(){self.setValue(),self.combo.hideView(),self.fireEvent(BI.DynamicYearCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicYearPopup.BUTTON_lABEL_EVENT_CHANGE,action:function(){var date=BI.getDate();self.setValue({type:BI.DynamicYearCombo.Static,value:{year:date.getFullYear()}}),self.combo.hideView(),self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicYearPopup.BUTTON_OK_EVENT_CHANGE,action:function(){self.setValue(self.popup.getValue()),self.combo.hideView(),self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM)}}],behaviors:o.behaviors,min:o.min,max:o.max},value:o.value||""}}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){self.popup.setValue(self.storeValue),self.fireEvent(BI.DynamicYearCombo.EVENT_BEFORE_POPUPVIEW)}),BI.createWidget({type:"bi.htape",element:this,ref:function(){self.comboWrapper=this},items:[{el:{type:"bi.icon_button",cls:"bi-trigger-icon-button date-change-h-font",width:24,height:24,ref:function(){self.changeIcon=this}},width:24},this.combo]}),this._checkDynamicValue(o.value)},_checkDynamicValue:function(v){var type=null;switch(BI.isNotNull(v)&&(type=v.type),type){case BI.DynamicYearCombo.Dynamic:this.changeIcon.setVisible(!0),this.comboWrapper.attr("items")[0].width=24,this.comboWrapper.resize();break;default:this.comboWrapper.attr("items")[0].width=0,this.comboWrapper.resize(),this.changeIcon.setVisible(!1)}},setValue:function(v){this.storeValue=v,this.trigger.setValue(v),this._checkDynamicValue(v)},getValue:function(){return this.storeValue}}),BI.DynamicYearCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.DynamicYearCombo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.dynamic_year_combo",BI.DynamicYearCombo),BI.extend(BI.DynamicYearCombo,{Static:1,Dynamic:2}),BI.DynamicYearPopup=BI.inherit(BI.Widget,{constants:{tabHeight:30,buttonHeight:24},props:{baseCls:"bi-year-popup",behaviors:{},min:"1900-01-01",max:"2099-12-31",width:180,height:240},render:function(){var self=this,opts=this.options,c=this.constants;return this.storeValue={type:BI.DynamicYearCombo.Static},{type:"bi.vtape",items:[{el:this._getTabJson()},{el:{type:"bi.grid",items:[[{type:"bi.text_button",cls:"bi-split-top bi-high-light",textHeight:c.buttonHeight-1,shadow:!0,text:BI.i18nText("BI-Basic_Clear"),listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicYearPopup.BUTTON_CLEAR_EVENT_CHANGE)}}]},{type:"bi.text_button",textHeight:c.buttonHeight-1,cls:"bi-split-left bi-split-right bi-high-light bi-split-top",shadow:!0,text:BI.i18nText("BI-Basic_Current_Year"),ref:function(){self.textButton=this},listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicYearPopup.BUTTON_lABEL_EVENT_CHANGE)}}]},{type:"bi.text_button",cls:"bi-split-top bi-high-light",textHeight:c.buttonHeight-1,shadow:!0,text:BI.i18nText("BI-Basic_OK"),listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicYearPopup.BUTTON_OK_EVENT_CHANGE)}}]}]]},height:24}]}},_setInnerValue:function(){if(this.dateTab.getSelect()===BI.DynamicDateCombo.Static)this.textButton.setValue(BI.i18nText("BI-Basic_Current_Year")),this.textButton.setEnable(!0);else{var date=BI.DynamicDateHelper.getCalculation(this.dynamicPane.getValue());date=BI.print(date,"%Y"),this.textButton.setValue(date),this.textButton.setEnable(!1)}},_getTabJson:function(){var self=this,o=this.options;return{type:"bi.tab",ref:function(){self.dateTab=this},tab:{type:"bi.linear_segment",cls:"bi-split-bottom",height:this.constants.tabHeight,items:BI.createItems([{text:BI.i18nText("BI-Basic_Year_Fen"),value:BI.DynamicYearCombo.Static},{text:BI.i18nText("BI-Basic_Dynamic_Title"),value:BI.DynamicYearCombo.Dynamic}],{textAlign:"center"})},cardCreator:function(v){switch(v){case BI.DynamicYearCombo.Dynamic:return{type:"bi.dynamic_year_card",listeners:[{eventName:"EVENT_CHANGE",action:function(){self._setInnerValue(self.year,v)}}],ref:function(){self.dynamicPane=this}};case BI.DynamicYearCombo.Static:default:return{type:"bi.static_year_card",behaviors:o.behaviors,min:self.options.min,max:self.options.max,listeners:[{eventName:BI.StaticYearCard.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicYearPopup.EVENT_CHANGE)}}],ref:function(){self.year=this}}}},listeners:[{eventName:BI.Tab.EVENT_CHANGE,action:function(){var v=self.dateTab.getSelect();switch(v){case BI.DynamicYearCombo.Static:var date=BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue());self.year.setValue({year:date.getFullYear()}),self._setInnerValue();break;case BI.DynamicYearCombo.Dynamic:default:self.storeValue&&self.storeValue.type===BI.DynamicYearCombo.Dynamic?self.dynamicPane.setValue(self.storeValue.value):self.dynamicPane.setValue({year:0}),self._setInnerValue()}}}]}},setValue:function(v){this.storeValue=v;var self=this,type,value;switch(v=v||{},type=v.type||BI.DynamicDateCombo.Static,value=v.value||v,this.dateTab.setSelect(type),type){case BI.DynamicDateCombo.Dynamic:this.dynamicPane.setValue(value),self._setInnerValue();break;case BI.DynamicDateCombo.Static:default:this.year.setValue(value),this.textButton.setValue(BI.i18nText("BI-Basic_Current_Year")),this.textButton.setEnable(!0)}},getValue:function(){return{type:this.dateTab.getSelect(),value:this.dateTab.getValue()}}}),BI.DynamicYearPopup.BUTTON_CLEAR_EVENT_CHANGE="BUTTON_CLEAR_EVENT_CHANGE",BI.DynamicYearPopup.BUTTON_lABEL_EVENT_CHANGE="BUTTON_lABEL_EVENT_CHANGE",BI.DynamicYearPopup.BUTTON_OK_EVENT_CHANGE="BUTTON_OK_EVENT_CHANGE",BI.DynamicYearPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.dynamic_year_popup",BI.DynamicYearPopup),BI.DynamicYearTrigger=BI.inherit(BI.Trigger,{_const:{hgap:4,vgap:2},_defaultConfig:function(){return BI.extend(BI.DynamicYearTrigger.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-year-trigger",min:"1900-01-01",max:"2099-12-31",height:24})},beforeInit:function(callback){var o=this.options;o.title=BI.bind(this._titleCreator,this),callback()},_init:function(){BI.DynamicYearTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options,c=this._const;this.editor=BI.createWidget({type:"bi.sign_editor",height:o.height,validationChecker:function(v){return""===v||BI.isPositiveInteger(v)&&!BI.checkDateVoid(v,1,1,o.min,o.max)[0]},quitChecker:function(v){return!1},hgap:c.hgap,vgap:c.vgap,watermark:BI.i18nText("BI-Basic_Unrestricted"),allowBlank:!0,errorText:function(){return BI.i18nText("BI-Year_Trigger_Invalid_Text")}}),this.editor.on(BI.SignEditor.EVENT_FOCUS,function(){self.fireEvent(BI.DynamicYearTrigger.EVENT_FOCUS)}),this.editor.on(BI.SignEditor.EVENT_STOP,function(){self.fireEvent(BI.DynamicYearTrigger.EVENT_STOP)}),this.editor.on(BI.SignEditor.EVENT_CONFIRM,function(){var value=self.editor.getValue();BI.isNotNull(value)&&self.editor.setValue(value),BI.isNotEmptyString(value)&&(self.storeValue={type:BI.DynamicDateCombo.Static,value:{year:value}}),self.fireEvent(BI.DynamicYearTrigger.EVENT_CONFIRM)}),this.editor.on(BI.SignEditor.EVENT_SPACE,function(){self.editor.isValid()&&self.editor.blur()}),this.editor.on(BI.SignEditor.EVENT_START,function(){self.fireEvent(BI.DynamicYearTrigger.EVENT_START)}),this.editor.on(BI.SignEditor.EVENT_ERROR,function(){self.fireEvent(BI.DynamicYearTrigger.EVENT_ERROR)}),BI.createWidget({element:this,type:"bi.htape",items:[{el:this.editor},{el:{type:"bi.text_button",baseCls:"bi-trigger-year-text",text:BI.i18nText("BI-Multi_Date_Year"),width:o.height},width:o.height},{el:{type:"bi.trigger_icon_button",width:o.height},width:o.height}]}),this.setValue(o.value)},_getText:function(obj){var value="";return BI.isNotNull(obj.year)&&0!==BI.parseInt(obj.year)&&(value+=Math.abs(obj.year)+BI.i18nText("BI-Basic_Year")+(obj.year<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),value},_setInnerValue:function(date,text){var dateStr=BI.print(date,"%Y");this.editor.setState(dateStr),this.editor.setValue(dateStr)},_titleCreator:function(){var storeValue=this.storeValue||{},type=storeValue.type||BI.DynamicDateCombo.Static,value=storeValue.value;if(!this.editor.isValid())return"";switch(type){case BI.DynamicDateCombo.Dynamic:var text=this._getText(value),date=BI.getDate();date=BI.DynamicDateHelper.getCalculation(value);var dateStr=BI.print(date,"%Y");return BI.isEmptyString(text)?dateStr:text+":"+dateStr;case BI.DynamicDateCombo.Static:default:return value=value||{},value.year}},setValue:function(v){var type,value,date=BI.getDate();switch(this.storeValue=v,BI.isNotNull(v)&&(type=v.type||BI.DynamicDateCombo.Static,value=v.value||v),type){case BI.DynamicDateCombo.Dynamic:var text=this._getText(value);date=BI.DynamicDateHelper.getCalculation(value),this._setInnerValue(date,text);break;case BI.DynamicDateCombo.Static: +default:value=value||{},this.editor.setState(value.year),this.editor.setValue(value.year)}},getValue:function(){return this.storeValue},getKey:function(){return 0|this.editor.getValue()}}),BI.DynamicYearTrigger.EVENT_FOCUS="EVENT_FOCUS",BI.DynamicYearTrigger.EVENT_ERROR="EVENT_ERROR",BI.DynamicYearTrigger.EVENT_START="EVENT_START",BI.DynamicYearTrigger.EVENT_CONFIRM="EVENT_CONFIRM",BI.DynamicYearTrigger.EVENT_STOP="EVENT_STOP",BI.shortcut("bi.dynamic_year_trigger",BI.DynamicYearTrigger),BI.DynamicYearMonthCard=BI.inherit(BI.Widget,{props:{baseCls:"bi-year-month-card"},render:function(){var self=this;return{type:"bi.vertical",items:[{type:"bi.label",text:BI.i18nText("BI-Multi_Date_Relative_Current_Time"),textAlign:"left",height:24},{type:"bi.dynamic_date_param_item",ref:function(){self.year=this},listeners:[{eventName:"EVENT_CHANGE",action:function(){self.fireEvent("EVENT_CHANGE")}}]},{type:"bi.dynamic_date_param_item",dateType:BI.DynamicDateCard.TYPE.MONTH,ref:function(){self.month=this},listeners:[{eventName:"EVENT_CHANGE",action:function(){self.fireEvent("EVENT_CHANGE")}}]}],vgap:10,hgap:10}},_createValue:function(type,v){return{dateType:type,value:Math.abs(v),offset:v>0?1:0}},setValue:function(v){v=v||{year:0,month:0},this.year.setValue(this._createValue(BI.DynamicDateCard.TYPE.YEAR,v.year)),this.month.setValue(this._createValue(BI.DynamicDateCard.TYPE.MONTH,v.month))},getValue:function(){var year=this.year.getValue(),month=this.month.getValue();return{year:0===year.offset?-year.value:year.value,month:0===month.offset?-month.value:month.value}}}),BI.DynamicYearMonthCard.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.dynamic_year_month_card",BI.DynamicYearMonthCard),BI.StaticYearMonthCard=BI.inherit(BI.Widget,{props:{baseCls:"bi-static-year-month-card",behaviors:{}},_createMonths:function(){var self=this,month=[1,7,2,8,3,9,4,10,5,11,6,12],items=[];return items.push(month.slice(0,2)),items.push(month.slice(2,4)),items.push(month.slice(4,6)),items.push(month.slice(6,8)),items.push(month.slice(8,10)),items.push(month.slice(10,12)),BI.map(items,function(i,item){return BI.map(item,function(j,td){return{type:"bi.text_item",cls:"bi-list-item-select",textAlign:"center",whiteSpace:"nowrap",once:!1,forceSelected:!0,height:23,width:38,value:td,text:td,ref:function(_ref){self.monthMap[0===j?i:i+6]=_ref}}})})},render:function(){var self=this,o=this.options;return this.monthMap={},{type:"bi.vertical",items:[{type:"bi.year_picker",min:o.min,max:o.max,ref:function(){self.yearPicker=this},behaviors:o.behaviors,height:30,listeners:[{eventName:BI.YearPicker.EVENT_CHANGE,action:function(){var value=this.getValue();self._checkMonthStatus(value),self.setValue({year:value,month:self.selectedMonth})}}]},{type:"bi.button_group",cls:"bi-split-top",behaviors:o.behaviors,ref:function(){self.month=this},items:this._createMonths(),layouts:[BI.LogicFactory.createLogic("table",BI.extend({dynamic:!0},{columns:2,rows:6,columnSize:[.5,.5],rowSize:25})),{type:"bi.center_adapt",vgap:1,hgap:2}],value:o.value,listeners:[{eventName:BI.ButtonGroup.EVENT_CHANGE,action:function(){self.selectedYear=self.yearPicker.getValue(),self.selectedMonth=this.getValue()[0],self.fireEvent(BI.StaticYearMonthCard.EVENT_CHANGE)}}]}]}},mounted:function(){this._checkMonthStatus(this.selectedYear)},_checkMonthStatus:function(year){var o=this.options,minDate=BI.parseDateTime(o.min,"%Y-%X-%d"),maxDate=BI.parseDateTime(o.max,"%Y-%X-%d"),minYear=minDate.getFullYear(),maxYear=maxDate.getFullYear(),minMonth=0,maxMonth=11;minYear===year&&(minMonth=minDate.getMonth()),maxYear===year&&(maxMonth=maxDate.getMonth());var yearInvalid=yearmaxYear;BI.each(this.monthMap,function(month,obj){var monthInvalid=monthmaxMonth;obj.setEnable(!yearInvalid&&!monthInvalid)})},getValue:function(){return{year:this.selectedYear,month:this.selectedMonth}},setValue:function(obj){var o=this.options,newObj={};if(newObj.year=obj.year||0,newObj.month=obj.month||0,0===newObj.year||0===newObj.month||BI.checkDateVoid(newObj.year,newObj.month,1,o.min,o.max)[0]){var year=newObj.year||BI.getDate().getFullYear();this.selectedYear=year,this.selectedMonth="",this.yearPicker.setValue(year),this.month.setValue()}else this.selectedYear=BI.parseInt(newObj.year),this.selectedMonth=BI.parseInt(newObj.month),this.yearPicker.setValue(this.selectedYear),this.month.setValue(this.selectedMonth)}}),BI.StaticYearMonthCard.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.static_year_month_card",BI.StaticYearMonthCard),BI.DynamicYearMonthCombo=BI.inherit(BI.Single,{props:{baseCls:"bi-year-month-combo bi-border bi-focus-shadow",behaviors:{},minDate:"1900-01-01",maxDate:"2099-12-31",height:22},_init:function(){BI.DynamicYearMonthCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.storeValue=o.value,this.storeTriggerValue="",this.trigger=BI.createWidget({type:"bi.dynamic_year_month_trigger",min:o.minDate,max:o.maxDate,height:o.height,value:o.value||""}),this.trigger.on(BI.DynamicYearMonthTrigger.EVENT_KEY_DOWN,function(){self.combo.isViewVisible()&&self.combo.hideView()}),this.trigger.on(BI.DynamicYearMonthTrigger.EVENT_START,function(){self.combo.isViewVisible()&&self.combo.hideView()}),this.trigger.on(BI.DynamicYearMonthTrigger.EVENT_STOP,function(){self.combo.showView()}),this.trigger.on(BI.DynamicYearMonthTrigger.EVENT_ERROR,function(){self.combo.isViewVisible()&&self.combo.hideView(),self.fireEvent(BI.DynamicYearMonthCombo.EVENT_ERROR)}),this.trigger.on(BI.DynamicYearMonthTrigger.EVENT_VALID,function(){self.fireEvent(BI.DynamicYearMonthCombo.EVENT_VALID)}),this.trigger.on(BI.DynamicYearMonthTrigger.EVENT_CONFIRM,function(){var dateStore=self.storeTriggerValue,dateObj=self.trigger.getKey();BI.isNotEmptyString(dateObj)&&!BI.isEqual(dateObj,dateStore)&&(self.storeValue=self.trigger.getValue(),self.setValue(self.trigger.getValue())),self._checkDynamicValue(self.storeValue),self.fireEvent(BI.DynamicYearMonthCombo.EVENT_CONFIRM)}),this.trigger.on(BI.DynamicYearMonthTrigger.EVENT_FOCUS,function(){self.storeTriggerValue=self.trigger.getKey(),self.fireEvent(BI.DynamicYearMonthCombo.EVENT_FOCUS)}),this.combo=BI.createWidget({type:"bi.combo",container:o.container,isNeedAdjustHeight:!1,isNeedAdjustWidth:!1,el:this.trigger,popup:{minWidth:100,stopPropagation:!1,el:{type:"bi.dynamic_year_month_popup",ref:function(){self.popup=this},listeners:[{eventName:BI.DynamicYearMonthPopup.EVENT_CHANGE,action:function(){self.setValue(self.popup.getValue()),self.combo.hideView(),self.fireEvent(BI.DynamicYearMonthCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicYearMonthPopup.BUTTON_CLEAR_EVENT_CHANGE,action:function(){self.setValue(),self.combo.hideView(),self.fireEvent(BI.DynamicYearMonthCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicYearMonthPopup.BUTTON_lABEL_EVENT_CHANGE,action:function(){var date=BI.getDate();self.setValue({type:BI.DynamicYearMonthCombo.Static,value:{year:date.getFullYear(),month:date.getMonth()+1}}),self.combo.hideView(),self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicYearMonthPopup.BUTTON_OK_EVENT_CHANGE,action:function(){self.setValue(self.popup.getValue()),self.combo.hideView(),self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM)}}],behaviors:o.behaviors,min:o.minDate,max:o.maxDate},value:o.value||""}}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){self.popup.setValue(self.storeValue),self.fireEvent(BI.DynamicYearMonthCombo.EVENT_BEFORE_POPUPVIEW)}),BI.createWidget({type:"bi.htape",element:this,ref:function(){self.comboWrapper=this},items:[{el:{type:"bi.icon_button",cls:"bi-trigger-icon-button date-change-h-font",width:24,height:24,ref:function(){self.changeIcon=this}},width:24},this.combo]}),this._checkDynamicValue(o.value)},_checkDynamicValue:function(v){var type=null;switch(BI.isNotNull(v)&&(type=v.type),type){case BI.DynamicYearMonthCombo.Dynamic:this.changeIcon.setVisible(!0),this.comboWrapper.attr("items")[0].width=24,this.comboWrapper.resize();break;default:this.comboWrapper.attr("items")[0].width=0,this.comboWrapper.resize(),this.changeIcon.setVisible(!1)}},hideView:function(){this.combo.hideView()},setValue:function(v){this.storeValue=v,this.trigger.setValue(v),this._checkDynamicValue(v)},getValue:function(){return this.storeValue},getKey:function(){return this.trigger.getKey()},isValid:function(){return this.trigger.isValid()}}),BI.DynamicYearMonthCombo.EVENT_ERROR="EVENT_ERROR",BI.DynamicYearMonthCombo.EVENT_VALID="EVENT_VALID",BI.DynamicYearMonthCombo.EVENT_FOCUS="EVENT_FOCUS",BI.DynamicYearMonthCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.DynamicYearMonthCombo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.dynamic_year_month_combo",BI.DynamicYearMonthCombo),BI.extend(BI.DynamicYearMonthCombo,{Static:1,Dynamic:2}),BI.DynamicYearMonthPopup=BI.inherit(BI.Widget,{constants:{tabHeight:30,buttonHeight:24},props:{baseCls:"bi-year-month-popup",behaviors:{},min:"1900-01-01",max:"2099-12-31",width:180,height:240},render:function(){var self=this,opts=this.options,c=this.constants;return this.storeValue={type:BI.DynamicYearMonthCombo.Static},{type:"bi.vtape",items:[{el:this._getTabJson()},{el:{type:"bi.grid",items:[[{type:"bi.text_button",cls:"bi-split-top bi-high-light",textHeight:c.buttonHeight-1,shadow:!0,text:BI.i18nText("BI-Basic_Clear"),listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicYearMonthPopup.BUTTON_CLEAR_EVENT_CHANGE)}}]},{type:"bi.text_button",cls:"bi-split-left bi-split-right bi-high-light bi-split-top",textHeight:c.buttonHeight-1,shadow:!0,text:BI.i18nText("BI-Basic_Current_Month"),ref:function(){self.textButton=this},listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicYearMonthPopup.BUTTON_lABEL_EVENT_CHANGE)}}]},{type:"bi.text_button",cls:"bi-split-top bi-high-light",textHeight:c.buttonHeight-1,shadow:!0,text:BI.i18nText("BI-Basic_OK"),listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicYearMonthPopup.BUTTON_OK_EVENT_CHANGE)}}]}]]},height:24}]}},_setInnerValue:function(){if(this.dateTab.getSelect()===BI.DynamicDateCombo.Static)this.textButton.setValue(BI.i18nText("BI-Basic_Current_Month")),this.textButton.setEnable(!0);else{var date=BI.DynamicDateHelper.getCalculation(this.dynamicPane.getValue());date=BI.print(date,"%Y-%x"),this.textButton.setValue(date),this.textButton.setEnable(!1)}},_getTabJson:function(){var self=this,o=this.options;return{type:"bi.tab",ref:function(){self.dateTab=this},tab:{type:"bi.linear_segment",cls:"bi-split-bottom",height:this.constants.tabHeight,items:BI.createItems([{text:BI.i18nText("BI-Basic_Year_Month"),value:BI.DynamicYearCombo.Static},{text:BI.i18nText("BI-Basic_Dynamic_Title"),value:BI.DynamicYearCombo.Dynamic}],{textAlign:"center"})},cardCreator:function(v){switch(v){case BI.DynamicYearCombo.Dynamic:return{type:"bi.dynamic_year_month_card",listeners:[{eventName:"EVENT_CHANGE",action:function(){self._setInnerValue(self.year,v)}}],ref:function(){self.dynamicPane=this}};case BI.DynamicYearCombo.Static:default:return{type:"bi.static_year_month_card",behaviors:o.behaviors,min:self.options.min,max:self.options.max,listeners:[{eventName:BI.StaticYearMonthCard.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicYearMonthPopup.EVENT_CHANGE)}}],ref:function(){self.year=this}}}},listeners:[{eventName:BI.Tab.EVENT_CHANGE,action:function(){var v=self.dateTab.getSelect();switch(v){case BI.DynamicYearCombo.Static:var date=BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue());self.year.setValue({year:date.getFullYear(),month:date.getMonth()+1}),self._setInnerValue();break;case BI.DynamicYearCombo.Dynamic:default:self.storeValue&&self.storeValue.type===BI.DynamicYearCombo.Dynamic?self.dynamicPane.setValue(self.storeValue.value):self.dynamicPane.setValue({year:0}),self._setInnerValue()}}}]}},setValue:function(v){this.storeValue=v;var self=this,type,value;switch(v=v||{},type=v.type||BI.DynamicDateCombo.Static,value=v.value||v,this.dateTab.setSelect(type),type){case BI.DynamicDateCombo.Dynamic:this.dynamicPane.setValue(value),self._setInnerValue();break;case BI.DynamicDateCombo.Static:default:this.year.setValue(value),this.textButton.setValue(BI.i18nText("BI-Basic_Current_Month")),this.textButton.setEnable(!0)}},getValue:function(){return{type:this.dateTab.getSelect(),value:this.dateTab.getValue()}}}),BI.DynamicYearMonthPopup.BUTTON_CLEAR_EVENT_CHANGE="BUTTON_CLEAR_EVENT_CHANGE",BI.DynamicYearMonthPopup.BUTTON_lABEL_EVENT_CHANGE="BUTTON_lABEL_EVENT_CHANGE",BI.DynamicYearMonthPopup.BUTTON_OK_EVENT_CHANGE="BUTTON_OK_EVENT_CHANGE",BI.DynamicYearMonthPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.dynamic_year_month_popup",BI.DynamicYearMonthPopup),BI.DynamicYearMonthTrigger=BI.inherit(BI.Trigger,{_const:{hgap:4,vgap:2},props:{extraCls:"bi-year-month-trigger",min:"1900-01-01",max:"2099-12-31",height:22},beforeInit:function(callback){var o=this.options;o.title=BI.bind(this._titleCreator,this),callback()},_init:function(){BI.DynamicYearMonthTrigger.superclass._init.apply(this,arguments);var o=this.options;this.yearEditor=this._createEditor(!0),this.monthEditor=this._createEditor(!1),BI.createWidget({element:this,type:"bi.htape",items:[{type:"bi.center",items:[{type:"bi.htape",items:[this.yearEditor,{el:{type:"bi.text_button",text:BI.i18nText("BI-Multi_Date_Year"),width:o.height},width:o.height}]},{type:"bi.htape",items:[this.monthEditor,{el:{type:"bi.text_button",text:BI.i18nText("BI-Multi_Date_Month"),width:o.height},width:o.height}]}]},{el:{type:"bi.trigger_icon_button",width:o.height},width:o.height}]}),this.setValue(o.value)},_createEditor:function(isYear){var self=this,o=this.options,c=this._const,minDate=BI.parseDateTime(o.min,"%Y-%X-%d"),editor=BI.createWidget({type:"bi.sign_editor",height:o.height,validationChecker:function(v){return isYear?""===v||BI.isPositiveInteger(v)&&!BI.checkDateVoid(v,v===minDate.getFullYear()?minDate.getMonth()+1:1,1,o.min,o.max)[0]:""===v||BI.isPositiveInteger(v)&&v>=1&&v<=12&&!BI.checkDateVoid(BI.getDate().getFullYear(),v,1,o.min,o.max)[0]},quitChecker:function(){return!1},watermark:BI.i18nText("BI-Basic_Unrestricted"),errorText:function(v){return BI.i18nText("BI-Year_Trigger_Invalid_Text")},hgap:c.hgap,vgap:c.vgap,allowBlank:!0});return editor.on(BI.SignEditor.EVENT_KEY_DOWN,function(){self.fireEvent(BI.DynamicYearMonthTrigger.EVENT_KEY_DOWN)}),editor.on(BI.SignEditor.EVENT_FOCUS,function(){self.fireEvent(BI.DynamicYearMonthTrigger.EVENT_FOCUS)}),editor.on(BI.SignEditor.EVENT_STOP,function(){self.fireEvent(BI.DynamicYearMonthTrigger.EVENT_STOP)}),editor.on(BI.SignEditor.EVENT_CONFIRM,function(){self._doEditorConfirm(editor),self.fireEvent(BI.DynamicYearMonthTrigger.EVENT_CONFIRM)}),editor.on(BI.SignEditor.EVENT_SPACE,function(){editor.isValid()&&editor.blur()}),editor.on(BI.SignEditor.EVENT_START,function(){self.fireEvent(BI.DynamicYearMonthTrigger.EVENT_START)}),editor.on(BI.SignEditor.EVENT_ERROR,function(){self.fireEvent(BI.DynamicYearMonthTrigger.EVENT_ERROR)}),editor.on(BI.SignEditor.EVENT_VALID,function(){var year=self.yearEditor.getValue(),month=self.monthEditor.getValue();BI.isNotEmptyString(year)&&BI.isNotEmptyString(month)&&BI.isPositiveInteger(year)&&month>=1&&month<=12&&!BI.checkDateVoid(year,month,1,o.min,o.max)[0]&&self.fireEvent(BI.DynamicYearMonthTrigger.EVENT_VALID)}),editor.on(BI.SignEditor.EVENT_CHANGE,function(){isYear&&self._autoSwitch(editor)}),editor},_titleCreator:function(){var storeValue=this.storeValue||{},type=storeValue.type||BI.DynamicDateCombo.Static,value=storeValue.value;if(!this.monthEditor.isValid()||!this.yearEditor.isValid())return"";switch(type){case BI.DynamicDateCombo.Dynamic:var text=this._getText(value),date=BI.getDate();date=BI.DynamicDateHelper.getCalculation(value);var dateStr=BI.print(date,"%Y-%x");return BI.isEmptyString(text)?dateStr:text+":"+dateStr;case BI.DynamicDateCombo.Static:default:return value=value||{},this._getStaticTitle(value)}},_doEditorConfirm:function(editor){var value=editor.getValue();BI.isNotNull(value)&&editor.setValue(value);var monthValue=this.monthEditor.getValue();this.storeValue={type:BI.DynamicDateCombo.Static,value:{year:this.yearEditor.getValue(),month:BI.isEmptyString(this.monthEditor.getValue())?"":monthValue}}},_yearCheck:function(v){var date=BI.print(BI.parseDateTime(v,"%Y-%X-%d"),"%Y-%X-%d");return BI.print(BI.parseDateTime(v,"%Y"),"%Y")===v&&date>=this.options.min&&date<=this.options.max},_autoSwitch:function(editor){var v=editor.getValue();BI.isNotEmptyString(v)&&BI.checkDateLegal(v)&&4===v.length&&this._yearCheck(v)&&(this._doEditorConfirm(editor),this.fireEvent(BI.DynamicYearMonthTrigger.EVENT_CONFIRM),this.monthEditor.focus())},_getText:function(obj){var value="";return BI.isNotNull(obj.year)&&0!==BI.parseInt(obj.year)&&(value+=Math.abs(obj.year)+BI.i18nText("BI-Basic_Year")+(obj.year<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),BI.isNotNull(obj.month)&&0!==BI.parseInt(obj.month)&&(value+=Math.abs(obj.month)+BI.i18nText("BI-Basic_Month")+(obj.month<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),value},_setInnerValue:function(date,text){this.yearEditor.setValue(date.getFullYear()),this.monthEditor.setValue(date.getMonth()+1)},_getStaticTitle:function(value){value=value||{};var hasYear=!(BI.isNull(value.year)||BI.isEmptyString(value.year)),hasMonth=!(BI.isNull(value.month)||BI.isEmptyString(value.month));switch(hasYear<<1|hasMonth){case 0:return"";case 1:return value.month;case 2:return value.year;case 3:default:return value.year+"-"+value.month}},setValue:function(v){var type,value,date=BI.getDate();switch(this.storeValue=v,BI.isNotNull(v)&&(type=v.type||BI.DynamicDateCombo.Static,value=v.value||v),type){case BI.DynamicDateCombo.Dynamic:var text=this._getText(value);date=BI.DynamicDateHelper.getCalculation(value),this._setInnerValue(date,text);break;case BI.DynamicDateCombo.Static:default:value=value||{};var month=BI.isNull(value.month)?null:value.month;this.yearEditor.setValue(value.year),this.monthEditor.setValue(month)}},getValue:function(){return this.storeValue},getKey:function(){return this.yearEditor.getValue()+"-"+this.monthEditor.getValue()},isValid:function(){return this.yearEditor.isValid()&&this.monthEditor.isValid()}}),BI.DynamicYearMonthTrigger.EVENT_VALID="EVENT_VALID",BI.DynamicYearMonthTrigger.EVENT_FOCUS="EVENT_FOCUS",BI.DynamicYearMonthTrigger.EVENT_ERROR="EVENT_ERROR",BI.DynamicYearMonthTrigger.EVENT_START="EVENT_START",BI.DynamicYearMonthTrigger.EVENT_CONFIRM="EVENT_CONFIRM",BI.DynamicYearMonthTrigger.EVENT_STOP="EVENT_STOP",BI.DynamicYearMonthTrigger.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.shortcut("bi.dynamic_year_month_trigger",BI.DynamicYearMonthTrigger),BI.YearMonthInterval=BI.inherit(BI.Single,{constants:{height:24,width:25,lgap:15,offset:-15,timeErrorCls:"time-error"},props:{extraCls:"bi-year-month-interval",minDate:"1900-01-01",maxDate:"2099-12-31"},_init:function(){var self=this,o=this.options;BI.YearMonthInterval.superclass._init.apply(this,arguments),o.value=o.value||{},this.left=this._createCombo(o.value.start),this.right=this._createCombo(o.value.end),this.label=BI.createWidget({type:"bi.label",height:this.constants.height,width:this.constants.width,text:"-"}),BI.createWidget({element:self,type:"bi.center",hgap:15,height:this.constants.height,items:[{type:"bi.absolute",items:[{el:self.left,left:this.constants.offset,right:0,top:0,bottom:0}]},{type:"bi.absolute",items:[{el:self.right,left:0,right:this.constants.offset,top:0,bottom:0}]}]}),BI.createWidget({type:"bi.horizontal_auto",element:this,items:[self.label]})},_createCombo:function(v){var self=this,o=this.options,combo=BI.createWidget({type:"bi.dynamic_year_month_combo",behaviors:o.behaviors,value:v,listeners:[{eventName:BI.DynamicYearMonthCombo.EVENT_BEFORE_POPUPVIEW,action:function(){self.fireEvent(BI.YearMonthInterval.EVENT_BEFORE_POPUPVIEW)}}]});return combo.on(BI.DynamicYearMonthCombo.EVENT_ERROR,function(){self._clearTitle(),BI.Bubbles.hide("error"),self.element.removeClass(self.constants.timeErrorCls),self.fireEvent(BI.YearMonthInterval.EVENT_ERROR)}),combo.on(BI.DynamicYearMonthCombo.EVENT_VALID,function(){self._checkValid()}),combo.on(BI.DynamicYearMonthCombo.EVENT_FOCUS,function(){self._checkValid()}),combo.on(BI.DynamicYearMonthCombo.EVENT_BEFORE_POPUPVIEW,function(){self.left.hideView(),self.right.hideView()}),combo.on(BI.DynamicYearMonthCombo.EVENT_CONFIRM,function(){BI.Bubbles.hide("error");var smallDate=self.left.getKey(),bigDate=self.right.getKey();self.left.isValid()&&self.right.isValid()&&self._check(smallDate,bigDate)&&self._compare(smallDate,bigDate)?(self._setTitle(BI.i18nText("BI-Time_Interval_Error_Text")),self.element.addClass(self.constants.timeErrorCls),self.fireEvent(BI.YearMonthInterval.EVENT_ERROR)):(self._clearTitle(),self.element.removeClass(self.constants.timeErrorCls),self.fireEvent(BI.YearMonthInterval.EVENT_CHANGE))}),combo},_dateCheck:function(date){return BI.print(BI.parseDateTime(date,"%Y-%x"),"%Y-%x")===date||BI.print(BI.parseDateTime(date,"%Y-%X"),"%Y-%X")===date},_checkVoid:function(obj){var o=this.options;return!BI.checkDateVoid(obj.year,obj.month,1,o.minDate,o.maxDate)[0]},_check:function(smallDate,bigDate){var smallObj=smallDate.match(/\d+/g),bigObj=bigDate.match(/\d+/g),smallDate4Check="";BI.isNotNull(smallObj)&&(smallDate4Check=(smallObj[0]||"")+"-"+(smallObj[1]||1));var bigDate4Check="";return BI.isNotNull(bigObj)&&(bigDate4Check=(bigObj[0]||"")+"-"+(bigObj[1]||1)),this._dateCheck(smallDate4Check)&&BI.checkDateLegal(smallDate)&&this._checkVoid({year:smallObj[0],month:smallObj[1],day:1})&&this._dateCheck(bigDate4Check)&&BI.checkDateLegal(bigDate)&&this._checkVoid({year:bigObj[0],month:bigObj[1],day:1})},_compare:function(smallDate,bigDate){return smallDate=BI.print(BI.parseDateTime(smallDate,"%Y-%X"),"%Y-%X"),bigDate=BI.print(BI.parseDateTime(bigDate,"%Y-%X"),"%Y-%X"),BI.isNotNull(smallDate)&&BI.isNotNull(bigDate)&&smallDate>bigDate},_setTitle:function(v){this.setTitle(v)},_clearTitle:function(){this.setTitle("")},_checkValid:function(){var self=this;BI.Bubbles.hide("error");var smallDate=self.left.getKey(),bigDate=self.right.getKey();self.left.isValid()&&self.right.isValid()&&self._check(smallDate,bigDate)&&self._compare(smallDate,bigDate)?(self._setTitle(BI.i18nText("BI-Time_Interval_Error_Text")),self.element.addClass(self.constants.timeErrorCls),BI.Bubbles.show("error",BI.i18nText("BI-Time_Interval_Error_Text"),self,{offsetStyle:"center"}),self.fireEvent(BI.YearMonthInterval.EVENT_ERROR)):(self._clearTitle(),self.element.removeClass(self.constants.timeErrorCls))},setValue:function(date){date=date||{},this.left.setValue(date.start),this.right.setValue(date.end),this._checkValid()},getValue:function(){return{start:this.left.getValue(),end:this.right.getValue()}}}),BI.YearMonthInterval.EVENT_VALID="EVENT_VALID",BI.YearMonthInterval.EVENT_ERROR="EVENT_ERROR",BI.YearMonthInterval.EVENT_CHANGE="EVENT_CHANGE",BI.YearMonthInterval.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.year_month_interval",BI.YearMonthInterval),BI.DynamicYearQuarterCard=BI.inherit(BI.Widget,{props:{baseCls:"bi-year-month-card"},render:function(){var self=this;return{type:"bi.vertical",items:[{type:"bi.label",text:BI.i18nText("BI-Multi_Date_Relative_Current_Time"),textAlign:"left",height:24},{type:"bi.dynamic_date_param_item",ref:function(){self.year=this},listeners:[{eventName:"EVENT_CHANGE",action:function(){self.fireEvent("EVENT_CHANGE")}}]},{type:"bi.dynamic_date_param_item",dateType:BI.DynamicDateCard.TYPE.QUARTER,ref:function(){self.quarter=this},listeners:[{eventName:"EVENT_CHANGE",action:function(){self.fireEvent("EVENT_CHANGE")}}]}],vgap:10,hgap:10}},_createValue:function(type,v){return{dateType:type,value:Math.abs(v),offset:v>0?1:0}},setValue:function(v){v=v||{year:0,month:0},this.year.setValue(this._createValue(BI.DynamicDateCard.TYPE.YEAR,v.year)),this.quarter.setValue(this._createValue(BI.DynamicDateCard.TYPE.QUARTER,v.quarter))},getValue:function(){var year=this.year.getValue(),quarter=this.quarter.getValue();return{year:0===year.offset?-year.value:year.value,quarter:0===quarter.offset?-quarter.value:quarter.value}}}),BI.DynamicYearQuarterCard.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.dynamic_year_quarter_card",BI.DynamicYearQuarterCard),BI.StaticYearQuarterCard=BI.inherit(BI.Widget,{props:{baseCls:"bi-static-year-quarter-card",behaviors:{}},_createQuarter:function(){var items=[{text:BI.Date._QN[1],value:1},{text:BI.Date._QN[2],value:2},{text:BI.Date._QN[3],value:3},{text:BI.Date._QN[4],value:4}];return BI.map(items,function(j,item){return BI.extend(item,{type:"bi.text_item",cls:"bi-list-item-select",textAlign:"center",whiteSpace:"nowrap",once:!1,forceSelected:!0,height:24})})},render:function(){var self=this,o=this.options;return{type:"bi.vertical",items:[{type:"bi.year_picker",ref:function(){self.yearPicker=this},behaviors:o.behaviors,height:30,listeners:[{eventName:BI.YearPicker.EVENT_CHANGE,action:function(){var value=this.getValue();self.setValue({year:value,quarter:self.selectedQuarter})}}]},{type:"bi.button_group",behaviors:o.behaviors,ref:function(){self.quarter=this},items:this._createQuarter(),layouts:[{type:"bi.vertical",vgap:10}],value:o.value,listeners:[{eventName:BI.ButtonGroup.EVENT_CHANGE,action:function(){self.selectedYear=self.yearPicker.getValue(),self.selectedQuarter=this.getValue()[0],self.fireEvent(BI.StaticYearQuarterCard.EVENT_CHANGE)}}]}]}},getValue:function(){return{year:this.selectedYear,quarter:this.selectedQuarter}},setValue:function(obj){var o=this.options,newObj={};if(newObj.year=obj.year||0,newObj.quarter=obj.quarter||0,0===newObj.quarter||0===newObj.year||BI.checkDateVoid(newObj.year,newObj.quarter,1,o.min,o.max)[0]){var year=newObj.year||BI.getDate().getFullYear();this.selectedYear=year,this.selectedQuarter="",this.yearPicker.setValue(year),this.quarter.setValue()}else this.selectedYear=BI.parseInt(newObj.year),this.selectedQuarter=BI.parseInt(newObj.quarter),this.yearPicker.setValue(this.selectedYear),this.quarter.setValue(this.selectedQuarter)}}),BI.StaticYearQuarterCard.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.static_year_quarter_card",BI.StaticYearQuarterCard),BI.DynamicYearQuarterCombo=BI.inherit(BI.Widget,{props:{baseCls:"bi-year-quarter-combo bi-border bi-focus-shadow",behaviors:{},min:"1900-01-01",max:"2099-12-31",height:22},_init:function(){BI.DynamicYearQuarterCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.storeValue=o.value,self.storeTriggerValue="",this.trigger=BI.createWidget({type:"bi.dynamic_year_quarter_trigger",min:o.min,max:o.max,height:o.height,value:o.value||""}),this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_KEY_DOWN,function(){self.combo.isViewVisible()&&self.combo.hideView()}),this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_START,function(){self.combo.isViewVisible()&&self.combo.hideView()}),this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_STOP,function(){self.combo.showView()}),this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_ERROR,function(){self.combo.isViewVisible()&&self.combo.hideView()}),this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_CONFIRM,function(){var dateStore=self.storeTriggerValue,dateObj=self.trigger.getKey();BI.isNotEmptyString(dateObj)&&!BI.isEqual(dateObj,dateStore)&&(self.storeValue=self.trigger.getValue(),self.setValue(self.trigger.getValue())),self._checkDynamicValue(self.storeValue),self.fireEvent(BI.DynamicYearQuarterCombo.EVENT_CONFIRM)}),this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_FOCUS,function(){self.storeTriggerValue=self.trigger.getKey()}),this.combo=BI.createWidget({type:"bi.combo",container:o.container,isNeedAdjustHeight:!1,isNeedAdjustWidth:!1,el:this.trigger,popup:{minWidth:85,stopPropagation:!1,el:{type:"bi.dynamic_year_quarter_popup",ref:function(){self.popup=this},listeners:[{eventName:BI.DynamicYearQuarterPopup.EVENT_CHANGE,action:function(){self.setValue(self.popup.getValue()),self.combo.hideView(),self.fireEvent(BI.DynamicYearQuarterCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicYearQuarterPopup.BUTTON_CLEAR_EVENT_CHANGE,action:function(){self.setValue(),self.combo.hideView(),self.fireEvent(BI.DynamicYearQuarterCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicYearQuarterPopup.BUTTON_lABEL_EVENT_CHANGE,action:function(){var date=BI.getDate();self.setValue({type:BI.DynamicYearMonthCombo.Static,value:{year:date.getFullYear(),quarter:BI.getQuarter(date)}}),self.combo.hideView(),self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicYearQuarterPopup.BUTTON_OK_EVENT_CHANGE,action:function(){self.setValue(self.popup.getValue()),self.combo.hideView(),self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM)}}],behaviors:o.behaviors,min:o.min,max:o.max},value:o.value||""}}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){self.popup.setValue(self.storeValue),self.fireEvent(BI.DynamicYearQuarterCombo.EVENT_BEFORE_POPUPVIEW)}),BI.createWidget({type:"bi.htape",element:this,ref:function(){self.comboWrapper=this},items:[{el:{type:"bi.icon_button",cls:"bi-trigger-icon-button date-change-h-font",width:24,height:24,ref:function(){self.changeIcon=this}},width:24},this.combo]}),this._checkDynamicValue(o.value)},_checkDynamicValue:function(v){var type=null;switch(BI.isNotNull(v)&&(type=v.type),type){case BI.DynamicYearQuarterCombo.Dynamic:this.changeIcon.setVisible(!0),this.comboWrapper.attr("items")[0].width=24,this.comboWrapper.resize();break;default:this.comboWrapper.attr("items")[0].width=0,this.comboWrapper.resize(),this.changeIcon.setVisible(!1)}},setValue:function(v){this.storeValue=v,this.trigger.setValue(v),this._checkDynamicValue(v)},getValue:function(){return this.storeValue}}),BI.DynamicYearQuarterCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.DynamicYearQuarterCombo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.dynamic_year_quarter_combo",BI.DynamicYearQuarterCombo),BI.extend(BI.DynamicYearQuarterCombo,{Static:1,Dynamic:2}),BI.DynamicYearQuarterPopup=BI.inherit(BI.Widget,{constants:{tabHeight:30,buttonHeight:24},props:{baseCls:"bi-year-quarter-popup",behaviors:{},min:"1900-01-01",max:"2099-12-31",width:180,height:240},render:function(){var self=this,opts=this.options,c=this.constants;return this.storeValue={type:BI.DynamicYearQuarterCombo.Static},{type:"bi.vtape",items:[{el:this._getTabJson()},{el:{type:"bi.grid",items:[[{type:"bi.text_button",cls:"bi-split-top bi-high-light",shadow:!0,textHeight:c.buttonHeight-1,text:BI.i18nText("BI-Basic_Clear"),listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicYearQuarterPopup.BUTTON_CLEAR_EVENT_CHANGE)}}]},{type:"bi.text_button",cls:"bi-split-left bi-split-right bi-high-light bi-split-top",textHeight:c.buttonHeight-1,shadow:!0,text:BI.i18nText("BI-Basic_Current_Quarter"),ref:function(){self.textButton=this},listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicYearQuarterPopup.BUTTON_lABEL_EVENT_CHANGE)}}]},{type:"bi.text_button",cls:"bi-split-top bi-high-light",shadow:!0,textHeight:c.buttonHeight-1,text:BI.i18nText("BI-Basic_OK"),listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicYearQuarterPopup.BUTTON_OK_EVENT_CHANGE)}}]}]]},height:24}]}},_setInnerValue:function(){if(this.dateTab.getSelect()===BI.DynamicYearQuarterCombo.Static)this.textButton.setValue(BI.i18nText("BI-Basic_Current_Quarter")),this.textButton.setEnable(!0);else{var date=BI.DynamicDateHelper.getCalculation(this.dynamicPane.getValue());date=BI.print(date,"%Y-%Q"),this.textButton.setValue(date),this.textButton.setEnable(!1)}},_getTabJson:function(){var self=this,o=this.options;return{type:"bi.tab",ref:function(){self.dateTab=this},tab:{type:"bi.linear_segment",cls:"bi-split-bottom",height:this.constants.tabHeight,items:BI.createItems([{text:BI.i18nText("BI-Basic_Year_Quarter"),value:BI.DynamicYearQuarterCombo.Static},{text:BI.i18nText("BI-Basic_Dynamic_Title"),value:BI.DynamicYearQuarterCombo.Dynamic +}],{textAlign:"center"})},cardCreator:function(v){switch(v){case BI.DynamicYearQuarterCombo.Dynamic:return{type:"bi.dynamic_year_quarter_card",listeners:[{eventName:"EVENT_CHANGE",action:function(){self._setInnerValue(self.year,v)}}],ref:function(){self.dynamicPane=this}};case BI.DynamicYearQuarterCombo.Static:default:return{type:"bi.static_year_quarter_card",behaviors:o.behaviors,min:self.options.min,max:self.options.max,listeners:[{eventName:BI.DynamicYearCard.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicYearQuarterPopup.EVENT_CHANGE)}}],ref:function(){self.year=this}}}},listeners:[{eventName:BI.Tab.EVENT_CHANGE,action:function(){var v=self.dateTab.getSelect();switch(v){case BI.DynamicYearQuarterCombo.Static:var date=BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue());self.year.setValue({year:date.getFullYear(),quarter:BI.getQuarter(date)}),self._setInnerValue();break;case BI.DynamicYearQuarterCombo.Dynamic:default:self.storeValue&&self.storeValue.type===BI.DynamicYearQuarterCombo.Dynamic?self.dynamicPane.setValue(self.storeValue.value):self.dynamicPane.setValue({year:0}),self._setInnerValue()}}}]}},setValue:function(v){this.storeValue=v;var self=this,type,value;switch(v=v||{},type=v.type||BI.DynamicDateCombo.Static,value=v.value||v,this.dateTab.setSelect(type),type){case BI.DynamicDateCombo.Dynamic:this.dynamicPane.setValue(value),self._setInnerValue();break;case BI.DynamicDateCombo.Static:default:this.year.setValue(value),this.textButton.setValue(BI.i18nText("BI-Basic_Current_Quarter")),this.textButton.setEnable(!0)}},getValue:function(){return{type:this.dateTab.getSelect(),value:this.dateTab.getValue()}}}),BI.DynamicYearQuarterPopup.BUTTON_CLEAR_EVENT_CHANGE="BUTTON_CLEAR_EVENT_CHANGE",BI.DynamicYearQuarterPopup.BUTTON_lABEL_EVENT_CHANGE="BUTTON_lABEL_EVENT_CHANGE",BI.DynamicYearQuarterPopup.BUTTON_OK_EVENT_CHANGE="BUTTON_OK_EVENT_CHANGE",BI.DynamicYearQuarterPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.dynamic_year_quarter_popup",BI.DynamicYearQuarterPopup),BI.DynamicYearQuarterTrigger=BI.inherit(BI.Trigger,{_const:{hgap:4,vgap:2},props:{extraCls:"bi-year-quarter-trigger",min:"1900-01-01",max:"2099-12-31",height:22},_init:function(){BI.DynamicYearQuarterTrigger.superclass._init.apply(this,arguments);var o=this.options;this.yearEditor=this._createEditor(!0),this.quarterEditor=this._createEditor(!1),BI.createWidget({element:this,type:"bi.htape",items:[{type:"bi.center",items:[{type:"bi.htape",items:[this.yearEditor,{el:{type:"bi.text_button",text:BI.i18nText("BI-Multi_Date_Year"),width:o.height},width:o.height}]},{type:"bi.htape",items:[this.quarterEditor,{el:{type:"bi.text_button",text:BI.i18nText("BI-Multi_Date_Quarter"),width:24},width:24}]}]},{el:{type:"bi.trigger_icon_button",width:o.height},width:o.height}]}),this.setValue(o.value)},_createEditor:function(isYear){var self=this,o=this.options,c=this._const,editor=BI.createWidget({type:"bi.sign_editor",height:o.height,validationChecker:function(v){return isYear?""===v||BI.isPositiveInteger(v)&&!BI.checkDateVoid(v,1,1,o.min,o.max)[0]:""===v||BI.isPositiveInteger(v)&&v>=1&&v<=4&&!BI.checkDateVoid(BI.getDate().getFullYear(),v,1,o.min,o.max)[0]},quitChecker:function(){return!1},errorText:function(v){return BI.i18nText("BI-Year_Trigger_Invalid_Text")},watermark:BI.i18nText("BI-Basic_Unrestricted"),hgap:c.hgap,vgap:c.vgap,title:"",allowBlank:!0});return editor.on(BI.SignEditor.EVENT_KEY_DOWN,function(){self.fireEvent(BI.DynamicYearQuarterTrigger.EVENT_KEY_DOWN)}),editor.on(BI.SignEditor.EVENT_FOCUS,function(){self.fireEvent(BI.DynamicYearQuarterTrigger.EVENT_FOCUS)}),editor.on(BI.SignEditor.EVENT_STOP,function(){self.fireEvent(BI.DynamicYearQuarterTrigger.EVENT_STOP)}),editor.on(BI.SignEditor.EVENT_CONFIRM,function(){self._doEditorConfirm(editor),self.fireEvent(BI.DynamicYearQuarterTrigger.EVENT_CONFIRM)}),editor.on(BI.SignEditor.EVENT_SPACE,function(){editor.isValid()&&editor.blur()}),editor.on(BI.SignEditor.EVENT_START,function(){self.fireEvent(BI.DynamicYearQuarterTrigger.EVENT_START)}),editor.on(BI.SignEditor.EVENT_ERROR,function(){self.fireEvent(BI.DynamicYearQuarterTrigger.EVENT_ERROR)}),editor.on(BI.SignEditor.EVENT_CHANGE,function(){isYear&&self._autoSwitch(editor)}),editor},_doEditorConfirm:function(editor){var value=editor.getValue();BI.isNotNull(value)&&editor.setValue(value);var quarterValue=this.quarterEditor.getValue();this.storeValue={type:BI.DynamicYearQuarterCombo.Static,value:{year:this.yearEditor.getValue(),quarter:BI.isEmptyString(this.quarterEditor.getValue())?"":quarterValue}},this.setTitle(this._getStaticTitle(this.storeValue.value))},_yearCheck:function(v){var date=BI.print(BI.parseDateTime(v,"%Y-%X-%d"),"%Y-%X-%d");return BI.print(BI.parseDateTime(v,"%Y"),"%Y")===v&&date>=this.options.min&&date<=this.options.max},_autoSwitch:function(editor){var v=editor.getValue();BI.isNotEmptyString(v)&&BI.checkDateLegal(v)&&4===v.length&&this._yearCheck(v)&&(this._doEditorConfirm(editor),this.fireEvent(BI.DynamicYearQuarterTrigger.EVENT_CONFIRM),this.quarterEditor.focus())},_getStaticTitle:function(value){value=value||{};var hasYear=!(BI.isNull(value.year)||BI.isEmptyString(value.year)),hasMonth=!(BI.isNull(value.quarter)||BI.isEmptyString(value.quarter));switch(hasYear<<1|hasMonth){case 0:return"";case 1:return value.quarter;case 2:return value.year;case 3:default:return value.year+"-"+value.quarter}},_getText:function(obj){var value="";return BI.isNotNull(obj.year)&&0!==BI.parseInt(obj.year)&&(value+=Math.abs(obj.year)+BI.i18nText("BI-Basic_Year")+(obj.year<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),BI.isNotNull(obj.quarter)&&0!==BI.parseInt(obj.quarter)&&(value+=Math.abs(obj.quarter)+BI.i18nText("BI-Basic_Single_Quarter")+(obj.quarter<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),value},_setInnerValue:function(date,text){var dateStr=BI.print(date,"%Y-%Q");this.yearEditor.setValue(date.getFullYear()),this.quarterEditor.setValue(BI.getQuarter(date)),this.setTitle(BI.isEmptyString(text)?dateStr:text+":"+dateStr)},setValue:function(v){var type,value,date=BI.getDate();switch(this.storeValue=v,BI.isNotNull(v)&&(type=v.type||BI.DynamicYearQuarterCombo.Static,value=v.value||v),type){case BI.DynamicYearQuarterCombo.Dynamic:var text=this._getText(value);date=BI.DynamicDateHelper.getCalculation(value),this._setInnerValue(date,text);break;case BI.DynamicYearQuarterCombo.Static:default:value=value||{};var quarter=BI.isNull(value.quarter)?null:value.quarter;this.yearEditor.setValue(value.year),this.yearEditor.setTitle(value.year),this.quarterEditor.setValue(quarter),this.quarterEditor.setTitle(quarter),this.setTitle(this._getStaticTitle(value))}},getValue:function(){return this.storeValue},getKey:function(){return this.yearEditor.getValue()+"-"+this.quarterEditor.getValue()}}),BI.DynamicYearQuarterTrigger.EVENT_FOCUS="EVENT_FOCUS",BI.DynamicYearQuarterTrigger.EVENT_ERROR="EVENT_ERROR",BI.DynamicYearQuarterTrigger.EVENT_START="EVENT_START",BI.DynamicYearQuarterTrigger.EVENT_CONFIRM="EVENT_CONFIRM",BI.DynamicYearQuarterTrigger.EVENT_STOP="EVENT_STOP",BI.DynamicYearQuarterTrigger.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.shortcut("bi.dynamic_year_quarter_trigger",BI.DynamicYearQuarterTrigger),BI.AbstractAllValueChooser=BI.inherit(BI.Widget,{_const:{perPage:100},_defaultConfig:function(){return BI.extend(BI.AbstractAllValueChooser.superclass._defaultConfig.apply(this,arguments),{width:200,height:30,items:null,itemsCreator:BI.emptyFn,cache:!0})},_valueFormatter:function(v){var text=v;return BI.isNotNull(this.items)&&BI.some(this.items,function(i,item){if(item.value===v||item.value+""===v)return text=item.text,!0}),text},_itemsCreator:function(options,callback){function call(items){var keywords=(options.keywords||[]).slice();options.keyword&&keywords.push(options.keyword);var resultItems=items;if(BI.isNotEmptyArray(keywords)&&(resultItems=[],BI.each(keywords,function(i,kw){var search=BI.Func.getSearchResult(items,kw);resultItems=resultItems.concat(search.match).concat(search.find)}),resultItems=BI.uniq(resultItems)),options.selectedValues){var filter=BI.makeObject(options.selectedValues,!0);resultItems=BI.filter(resultItems,function(i,ob){return!filter[ob.value]})}return options.type===BI.MultiSelectCombo.REQ_GET_ALL_DATA?void callback({items:resultItems}):options.type===BI.MultiSelectCombo.REQ_GET_DATA_LENGTH?void callback({count:resultItems.length}):void callback({items:resultItems,hasNext:!1})}var self=this,o=this.options;o.cache&&this.items?call(this.items):o.itemsCreator({},function(items){self.items=items,call(items)})}}),BI.AllValueChooserCombo=BI.inherit(BI.AbstractAllValueChooser,{_defaultConfig:function(){return BI.extend(BI.AllValueChooserCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-all-value-chooser-combo",width:200,height:24,items:null,itemsCreator:BI.emptyFn,cache:!0})},_init:function(){BI.AllValueChooserCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;BI.isNotNull(o.items)&&(this.items=o.items),this.combo=BI.createWidget({type:"bi.multi_select_combo",text:o.text,element:this,itemsCreator:BI.bind(this._itemsCreator,this),valueFormatter:BI.bind(this._valueFormatter,this),width:o.width,height:o.height,value:{type:BI.Selection.Multi,value:o.value||[]}}),this.combo.on(BI.MultiSelectCombo.EVENT_CONFIRM,function(){self.fireEvent(BI.AllValueChooserCombo.EVENT_CONFIRM)})},setValue:function(v){this.combo.setValue({type:BI.Selection.Multi,value:v||[]})},getValue:function(){var val=this.combo.getValue()||{};return val.type===BI.Selection.All?val.assist:val.value||[]},populate:function(items){this.items=items,this.combo.populate.apply(this,arguments)}}),BI.AllValueChooserCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.all_value_chooser_combo",BI.AllValueChooserCombo),BI.AllValueChooserPane=BI.inherit(BI.AbstractAllValueChooser,{_defaultConfig:function(){return BI.extend(BI.AllValueChooserPane.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-all-value-chooser-pane",width:200,height:30,items:null,itemsCreator:BI.emptyFn,cache:!0})},_init:function(){BI.AllValueChooserPane.superclass._init.apply(this,arguments);var self=this,o=this.options;BI.isNotNull(o.items)&&(this.items=o.items),this.list=BI.createWidget({type:"bi.multi_select_list",element:this,itemsCreator:BI.bind(this._itemsCreator,this),valueFormatter:BI.bind(this._valueFormatter,this),width:o.width,height:o.height}),this.list.on(BI.MultiSelectList.EVENT_CHANGE,function(){self.fireEvent(BI.AllValueChooserPane.EVENT_CHANGE)})},setValue:function(v){this.list.setValue({type:BI.Selection.Multi,value:v||[]})},getValue:function(){var val=this.list.getValue()||{};return val.type===BI.Selection.All?val.assist:val.value||[]},populate:function(items){this.items=items,this.list.populate.apply(this.list,arguments)}}),BI.AllValueChooserPane.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.all_value_chooser_pane",BI.AllValueChooserPane),BI.AllValueMultiTextValueCombo=BI.inherit(BI.Widget,{props:{baseCls:"bi-all-value-multi-text-value-combo",width:200,height:24,items:[]},render:function(){var self=this,o=this.options,value=this._digestValue(o.value);return{type:"bi.search_multi_text_value_combo",text:o.text,height:o.height,items:o.items,value:value,numOfPage:100,valueFormatter:o.valueFormatter,warningTitle:o.warningTitle,listeners:[{eventName:BI.SearchMultiTextValueCombo.EVENT_CONFIRM,action:function(){self.fireEvent(BI.AllValueMultiTextValueCombo.EVENT_CONFIRM)}}],ref:function(){self.combo=this}}},setValue:function(v){var value=this._digestValue(v);this.combo.setValue(value)},getValue:function(){var obj=this.combo.getValue()||{};if(obj.value=obj.value||[],obj.type===BI.Selection.All){var values=[];return BI.each(this.options.items,function(idx,item){!BI.contains(obj.value,item.value)&&values.push(item.value)}),values}return obj.value||[]},populate:function(items){this.options.items=items,this.combo.populate.apply(this,arguments)},_digestValue:function(v){return{type:BI.Selection.Multi,value:v||[]}}}),BI.AllValueMultiTextValueCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.all_value_multi_text_value_combo",BI.AllValueMultiTextValueCombo),BI.AbstractTreeValueChooser=BI.inherit(BI.Widget,{_const:{perPage:100},_defaultConfig:function(){return BI.extend(BI.AbstractTreeValueChooser.superclass._defaultConfig.apply(this,arguments),{items:null,itemsCreator:BI.emptyFn,open:!1})},_valueFormatter:function(v){var text=v;return BI.isNotNull(this.items)&&BI.some(this.items,function(i,item){if(item.value===v||item.value+""===v)return text=item.text,!0}),text},_initData:function(items){this.items=items;var nodes=BI.Tree.treeFormat(items);this.tree=new BI.Tree,this.tree.initTree(nodes)},_itemsCreator:function(options,callback){function call(){switch(options.type){case BI.TreeView.REQ_TYPE_INIT_DATA:self._reqInitTreeNode(options,callback);break;case BI.TreeView.REQ_TYPE_ADJUST_DATA:self._reqAdjustTreeNode(options,callback);break;case BI.TreeView.REQ_TYPE_SELECT_DATA:self._reqSelectedTreeNode(options,callback);break;case BI.TreeView.REQ_TYPE_GET_SELECTED_DATA:self._reqDisplayTreeNode(options,callback);break;default:self._reqTreeNode(options,callback)}}var self=this,o=this.options;this.items?call():o.itemsCreator({},function(items){self._initData(items),call()})},_reqDisplayTreeNode:function(op,callback){function doCheck(parentValues,node,selected){return null==selected||BI.isEmpty(selected)?void BI.each(node.getChildren(),function(i,child){var newParents=BI.clone(parentValues);newParents.push(child.value);var llen=self._getChildCount(newParents);createOneJson(child,node.id,llen),doCheck(newParents,child,{})}):void BI.each(selected,function(k){var node=self._getTreeNode(parentValues,k);if(BI.isNull(node))createOneJson({id:BI.UUID(),text:k,value:k},BI.UUID(),0);else{var newParents=BI.clone(parentValues);newParents.push(node.value),createOneJson(node,node.parent&&node.parent.id,getCount(selected[k],newParents)),doCheck(newParents,node,selected[k])}})}function getCount(jo,parentValues){return null==jo?0:BI.isEmpty(jo)?self._getChildCount(parentValues):BI.size(jo)}function createOneJson(node,pId,llen){result.push({id:node.id,pId:pId,text:node.text+(llen>0?"("+BI.i18nText("BI-Basic_Altogether")+llen+BI.i18nText("BI-Basic_Count")+")":""),value:node.value,open:!0})}var self=this,result=[],selectedValues=op.selectedValues;return null==selectedValues||BI.isEmpty(selectedValues)?void callback({}):(doCheck([],this.tree.getRoot(),selectedValues),void callback({items:result}))},_reqSelectedTreeNode:function(op,callback){function dealWithSelectedValues(selectedValues){var p=parentValues.concat(notSelectedValue);if(canFindKey(selectedValues,p))if(isSearchValueInParent(p))self._deleteNode(selectedValues,p);else{var searched=[],find=search(parentValues,notSelectedValue,[],searched);find&&BI.isNotEmptyArray(searched)&&BI.each(searched,function(i,arr){var node=self._getNode(selectedValues,arr);node?self._deleteNode(selectedValues,arr):expandSelectedValue(selectedValues,arr,BI.last(arr))})}if(isChild(selectedValues,p)){var result=[],find=!1;isSearchValueInParent(p)?find=!0:(find=search(parentValues,notSelectedValue,result),p=parentValues),find===!0&&(expandSelectedValue(selectedValues,p,notSelectedValue),result.length>0&&BI.each(result,function(i,strs){self._buildTree(selectedValues,strs)}))}}function expandSelectedValue(selectedValues,parents,notSelectedValue){var next=selectedValues,childrenCount=[],path=[];BI.some(parents,function(i,v){var t=next[v];if(null==t){if(0===i)return!0;if(!BI.isEmpty(next))return!0;var split=parents.slice(0,i),expanded=self._getChildren(split);if(path.push(split),childrenCount.push(expanded.length),i===parents.length-1&&1===expanded.length&&expanded[0].value===notSelectedValue)for(var j=childrenCount.length-1;j>=0&&1===childrenCount[j];j--)self._deleteNode(selectedValues,path[j]);else BI.each(expanded,function(m,child){return i===parents.length-1&&child.value===notSelectedValue||void(next[child.value]={})});next=next[v]}else next=t})}function search(parents,current,result,searched){var newParents=BI.clone(parents);if(newParents.push(current),self._isMatch(parents,current,keyword))return searched&&searched.push(newParents),!0;var children=self._getChildren(newParents),notSearch=[],can=!1;return BI.each(children,function(i,child){search(newParents,child.value,result,searched)?can=!0:notSearch.push(child.value)}),can===!0&&BI.each(notSearch,function(i,v){var next=BI.clone(newParents);next.push(v),result.push(next)}),can}function isSearchValueInParent(parentValues){for(var i=0,len=parentValues.length;iself._const.perPage)break}if(1===op.times){var nodes=self._getAddedValueNode([],selectedValues);result=BI.concat(BI.filter(nodes,function(idx,node){var find=BI.Func.getSearchResult([node.text||node.value],keyword);return find.find.length>0||find.match.length>0}),result)}return output}function nodeSearch(deep,parentValues,current,isAllSelect,result){if(self._isMatch(parentValues,current,keyword)){var checked=isAllSelect||isSelected(parentValues,current);return createOneJson(parentValues,current,!1,checked,!isAllSelect&&isHalf(parentValues,current),!0,result),[!0,checked]}var newParents=BI.clone(parentValues);newParents.push(current);var children=self._getChildren(newParents),can=!1,checked=!1,isCurAllSelected=isAllSelect||isAllSelected(parentValues,current);return BI.each(children,function(i,child){var state=nodeSearch(deep+1,newParents,child.value,isCurAllSelected,result);state[1]===!0&&(checked=!0),state[0]===!0&&(can=!0)}),can===!0&&(checked=isCurAllSelected||isSelected(parentValues,current)&&checked,createOneJson(parentValues,current,!0,checked,!1,!1,result)),[can,checked]}function createOneJson(parentValues,value,isOpen,checked,half,flag,result){var node=self._getTreeNode(parentValues,value);result.push({id:node.id,pId:node.pId,text:node.text,value:node.value,title:node.title,isParent:node.getChildrenLength()>0,open:isOpen,checked:checked,halfCheck:half,flag:flag})}function isHalf(parentValues,value){var find=findSelectedObj(parentValues);return null==find?null:BI.any(find,function(v,ob){if(v===value&&null!=ob&&!BI.isEmpty(ob))return!0})}function isAllSelected(parentValues,value){var find=findSelectedObj(parentValues);return null==find?null:BI.any(find,function(v,ob){if(v===value&&null!=ob&&BI.isEmpty(ob))return!0})}function isSelected(parentValues,value){var find=findSelectedObj(parentValues);return null!=find&&BI.any(find,function(v){if(v===value)return!0})}function findSelectedObj(parentValues){var find=selectedValues;return null==find?null:(BI.every(parentValues,function(i,v){return find=find[v],null!=find}),find)}var self=this,result=[],keyword=op.keyword||"",selectedValues=op.selectedValues,lastSearchValue=op.lastSearchValue||"",output=search();BI.nextTick(function(){callback({hasNext:output.length>self._const.perPage,items:result,lastSearchValue:BI.last(output)})})},_reqTreeNode:function(op,callback){function judgeState(parentValues,selected_value,checkState){var checked=checkState.checked,half=checkState.half;return!(parentValues.length>0&&!checked)&&(0===parentValues.length||checked&&half&&!BI.isEmpty(selected_value))}function dealWithSelectedValue(parentValues,selectedValues){var valueMap={};return BI.each(parentValues,function(i,v){selectedValues=selectedValues[v]||{}}),BI.each(selectedValues,function(value,obj){if(BI.isNull(obj))return void(valueMap[value]=[0,0]);if(BI.isEmpty(obj))return void(valueMap[value]=[2,0]);var nextNames={};BI.each(obj,function(t,o){(BI.isNull(o)||BI.isEmpty(o))&&(nextNames[t]=!0)}),valueMap[value]=[1,BI.size(nextNames)]}),valueMap}function getCheckState(current,parentValues,valueMap,checkState){var checked=checkState.checked,half=checkState.half,tempCheck=!1,halfCheck=!1;if(BI.has(valueMap,current))if(1===valueMap[current][0]){var values=BI.clone(parentValues);values.push(current);var childCount=self._getChildCount(values);childCount>0&&childCount!==valueMap[current][1]&&(halfCheck=!0)}else 2===valueMap[current][0]&&(tempCheck=!0);var check;return check=checked||halfCheck||tempCheck?(tempCheck||checked)&&!half||BI.has(valueMap,current):BI.has(valueMap,current),[check,halfCheck]}var self=this,o=this.options,result=[],times=op.times,checkState=op.checkState||{},parentValues=op.parentValues||[],selectedValues=op.selectedValues||{},valueMap={};valueMap=dealWithSelectedValue(parentValues,selectedValues);for(var nodes=this._getChildren(parentValues),i=(times-1)*this._const.perPage;nodes[i]&&i0,checked:state[0],halfCheck:state[1],open:o.open})}if(o.open){var allNodes=[];BI.each(nodes,function(idx,node){allNodes=BI.concat(allNodes,self._getAllChildren(parentValues.concat([node.value])))}),BI.each(allNodes,function(idx,node){var valueMap=dealWithSelectedValue(node.parentValues,selectedValues),state=getCheckState(node.value,node.parentValues,valueMap,checkState);result.push({id:node.id,pId:node.pId,value:node.value,text:node.text,times:1,isParent:node.getChildrenLength()>0,checked:state[0],halfCheck:state[1],open:self.options.open})})}0===parentValues.length&&1===times&&(result=BI.concat(self._getAddedValueNode(parentValues,selectedValues),result)),BI.nextTick(function(){callback({items:result,hasNext:nodes.length>times*self._const.perPage})})},_getAddedValueNode:function(parentValues,selectedValues){var nodes=this._getChildren(parentValues);return BI.map(BI.difference(BI.keys(selectedValues),BI.map(nodes,"value")),function(idx,v){return{id:BI.UUID(),pId:nodes.length>0?nodes[0].pId:BI.UUID(),value:v,text:v,times:1,isParent:!1,checked:!0,halfCheck:!1}})},_getNode:function(selectedValues,parentValues){for(var pNode=selectedValues,i=0,len=parentValues.length;i0&&BI.isEmpty(pNode);)name=p[p.length-1],p=p.slice(0,p.length-1),pNode=this._getNode(selectedValues,p),null!=pNode&&delete pNode[name]},_buildTree:function(jo,values){var t=jo;BI.each(values,function(i,v){BI.has(t,v)||(t[v]={}),t=t[v]})},_isMatch:function(parentValues,value,keyword){var o=this.options,node=this._getTreeNode(parentValues,value);if(!node)return!1;var find=BI.Func.getSearchResult([node.text||node.value],keyword);if(o.allowSearchValue&&node.value){var valueFind=BI.Func.getSearchResult([node.value],keyword);return valueFind.find.length>0||valueFind.match.length>0||find.find.length>0||find.match.length>0}return find.find.length>0||find.match.length>0},_getTreeNode:function(parentValues,v){var self=this,findParentNode,index=0;return this.tree.traverse(function(node){if(!self.tree.isRoot(node))return!(index>parentValues.length)&&(index===parentValues.length&&node.value===v?(findParentNode=node,!1):node.value!==parentValues[index]||void index++)}),findParentNode},_getChildren:function(parentValues){if(parentValues.length>0)var value=BI.last(parentValues),parent=this._getTreeNode(parentValues.slice(0,parentValues.length-1),value);else var parent=this.tree.getRoot();return parent.getChildren()},_getAllChildren:function(parentValues){var children=this._getChildren(parentValues),nodes=[].concat(children);BI.each(nodes,function(idx,node){node.parentValues=parentValues});for(var queue=BI.map(children,function(idx,node){return{parentValues:parentValues,value:node.value}});BI.isNotEmptyArray(queue);){var node=queue.shift(),pValues=node.parentValues.concat(node.value),childNodes=this._getChildren(pValues);BI.each(childNodes,function(idx,node){node.parentValues=pValues}),queue=queue.concat(childNodes),nodes=nodes.concat(childNodes)}return nodes},_getChildCount:function(parentValues){return this._getChildren(parentValues).length}}),BI.AbstractListTreeValueChooser=BI.inherit(BI.AbstractTreeValueChooser,{_reqDisplayTreeNode:function(op,callback){function doCheck(parentValues,node,selected){BI.each(selected,function(idx,path){BI.each(path,function(id,value){var nodeValue=value,node=self._getTreeNode(path.slice(0,id),nodeValue);BI.isNull(node)?createOneJson({id:BI.UUID(),text:nodeValue,value:nodeValue,isLeaf:!0},BI.UUID()):(BI.has(result,node.id)||createOneJson(node,node.parent&&node.parent.id),result[node.id].isLeaf!==!0&&(result[node.id].isLeaf=id===path.length-1))})})}function createOneJson(node,pId){result[node.id]={id:node.id,pId:pId,text:node.text,value:node.value,open:!0,isLeaf:node.isLeaf}}var self=this,result={},selectedValues=op.selectedValues;return null==selectedValues||BI.isEmpty(selectedValues)?void callback({}):(doCheck([],this.tree.getRoot(),selectedValues),void callback({items:BI.values(result)}))},_reqInitTreeNode:function(op,callback){function search(){var children=self._getChildren([]),start=children.length;if(""!==lastSearchValue){for(var j=0,len=start;jself._const.perPage)break}if(1===op.times){var nodes=self._getAddedValueNode([],selectedValues);result=BI.concat(BI.filter(nodes,function(idx,node){var find=BI.Func.getSearchResult([node.text||node.value],keyword);return find.find.length>0||find.match.length>0}),result)}return output}function nodeSearch(deep,parentValues,current,result){if(self._isMatch(parentValues,current,keyword)){var checked=isSelected(current);return createOneJson(parentValues,current,!1,checked,!0,result),[!0,checked]}var newParents=BI.clone(parentValues);newParents.push(current);var children=self._getChildren(newParents),can=!1,checked=!1;return BI.each(children,function(i,child){var state=nodeSearch(deep+1,newParents,child.value,result);state[1]===!0&&(checked=!0),state[0]===!0&&(can=!0)}),can===!0&&(checked=isSelected(current),createOneJson(parentValues,current,!0,checked,!1,result)),[can,checked]}function createOneJson(parentValues,value,isOpen,checked,flag,result){var node=self._getTreeNode(parentValues,value);result.push({id:node.id,pId:node.pId,text:node.text,value:node.value,title:node.title,isParent:node.getChildrenLength()>0,open:isOpen,checked:checked,halfCheck:!1,flag:flag})}function isHalf(parentValues,value){var find=findSelectedObj(parentValues);return null==find?null:BI.any(find,function(v,ob){if(v===value&&null!=ob&&!BI.isEmpty(ob))return!0})}function isAllSelected(parentValues,value){var find=findSelectedObj(parentValues);return null==find?null:BI.any(find,function(v,ob){if(v===value&&null!=ob&&BI.isEmpty(ob))return!0})}function isSelected(value){return BI.any(selectedValues,function(idx,array){return BI.last(array)===value})}function findSelectedObj(parentValues){var find=selectedValues;return null==find?null:(BI.every(parentValues,function(i,v){return find=find[v],null!=find}),find)}var self=this,result=[],keyword=op.keyword||"",selectedValues=op.selectedValues,lastSearchValue=op.lastSearchValue||"",output=search();BI.nextTick(function(){callback({hasNext:output.length>self._const.perPage,items:result,lastSearchValue:BI.last(output)})})},_reqTreeNode:function(op,callback){function dealWithSelectedValue(selectedValues){var valueMap={};return BI.each(selectedValues,function(idx,v){valueMap[BI.last(v)]=[2,0]}),valueMap}for(var self=this,o=this.options,result=[],times=op.times,parentValues=op.parentValues||[],selectedValues=op.selectedValues||[],valueMap=dealWithSelectedValue(selectedValues),nodes=this._getChildren(parentValues),i=(times-1)*this._const.perPage;nodes[i]&&i0,checked:checked,halfCheck:!1,open:o.open})}if(o.open){var allNodes=[];BI.each(nodes,function(idx,node){allNodes=BI.concat(allNodes,self._getAllChildren(parentValues.concat([node.value])))}),BI.each(allNodes,function(idx,node){var checked=BI.has(valueMap,node.value);result.push({id:node.id,pId:node.pId,value:node.value,text:node.text,times:1,isParent:node.getChildrenLength()>0,checked:checked,halfCheck:!1,open:o.open})})}0===parentValues.length&&1===times&&(result=BI.concat(self._getAddedValueNode(parentValues,selectedValues),result)),BI.nextTick(function(){callback({items:result,hasNext:nodes.length>times*self._const.perPage})})},_getAddedValueNode:function(parentValues,selectedValues){var nodes=this._getChildren(parentValues),values=BI.flatten(BI.filter(selectedValues,function(idx,array){return 1===array.length}));return BI.map(BI.difference(values,BI.map(nodes,"value")),function(idx,v){return{id:BI.UUID(),pId:nodes.length>0?nodes[0].pId:BI.UUID(),value:v,text:v,times:1,isParent:!1,checked:!0,halfCheck:!1}})}}),BI.ListTreeValueChooserInsertCombo=BI.inherit(BI.AbstractListTreeValueChooser,{_defaultConfig:function(){return BI.extend(BI.ListTreeValueChooserInsertCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-list-tree-value-chooser-insert-combo",width:200,height:24,items:null,itemsCreator:BI.emptyFn})},_init:function(){BI.ListTreeValueChooserInsertCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;BI.isNotNull(o.items)&&this._initData(o.items),this.combo=BI.createWidget({type:"bi.multi_tree_list_combo",element:this,text:o.text,value:o.value,watermark:o.watermark,allowInsertValue:o.allowInsertValue,allowEdit:o.allowEdit, +itemsCreator:BI.bind(this._itemsCreator,this),valueFormatter:BI.bind(this._valueFormatter,this),width:o.width,height:o.height,listeners:[{eventName:BI.MultiTreeListCombo.EVENT_FOCUS,action:function(){self.fireEvent(BI.ListTreeValueChooserInsertCombo.EVENT_FOCUS)}},{eventName:BI.MultiTreeListCombo.EVENT_BLUR,action:function(){self.fireEvent(BI.ListTreeValueChooserInsertCombo.EVENT_BLUR)}},{eventName:BI.MultiTreeListCombo.EVENT_STOP,action:function(){self.fireEvent(BI.ListTreeValueChooserInsertCombo.EVENT_STOP)}},{eventName:BI.MultiTreeListCombo.EVENT_CLICK_ITEM,action:function(){self.fireEvent(BI.ListTreeValueChooserInsertCombo.EVENT_CLICK_ITEM)}},{eventName:BI.MultiTreeListCombo.EVENT_SEARCHING,action:function(){self.fireEvent(BI.ListTreeValueChooserInsertCombo.EVENT_SEARCHING)}},{eventName:BI.MultiTreeListCombo.EVENT_CONFIRM,action:function(){self.fireEvent(BI.ListTreeValueChooserInsertCombo.EVENT_CONFIRM)}}]})},setValue:function(v){this.combo.setValue(v)},getValue:function(){return this.combo.getValue()},populate:function(items){this._initData(items),this.combo.populate.apply(this.combo,arguments)}}),BI.ListTreeValueChooserInsertCombo.EVENT_FOCUS="EVENT_FOCUS",BI.ListTreeValueChooserInsertCombo.EVENT_BLUR="EVENT_BLUR",BI.ListTreeValueChooserInsertCombo.EVENT_STOP="EVENT_STOP",BI.ListTreeValueChooserInsertCombo.EVENT_CLICK_ITEM="EVENT_CLICK_ITEM",BI.ListTreeValueChooserInsertCombo.EVENT_SEARCHING="EVENT_SEARCHING",BI.ListTreeValueChooserInsertCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.list_tree_value_chooser_insert_combo",BI.ListTreeValueChooserInsertCombo),BI.TreeValueChooserInsertCombo=BI.inherit(BI.AbstractTreeValueChooser,{_defaultConfig:function(){return BI.extend(BI.TreeValueChooserInsertCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-tree-value-chooser-insert-combo",width:200,height:24,items:null,itemsCreator:BI.emptyFn})},_init:function(){BI.TreeValueChooserInsertCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;BI.isNotNull(o.items)&&this._initData(o.items),this.combo=BI.createWidget({type:"bi.multi_tree_insert_combo",text:o.text,value:o.value,watermark:o.watermark,element:this,itemsCreator:BI.bind(this._itemsCreator,this),valueFormatter:BI.bind(this._valueFormatter,this),width:o.width,height:o.height,listeners:[{eventName:BI.MultiTreeInsertCombo.EVENT_FOCUS,action:function(){self.fireEvent(BI.TreeValueChooserCombo.EVENT_FOCUS)}},{eventName:BI.MultiTreeInsertCombo.EVENT_BLUR,action:function(){self.fireEvent(BI.TreeValueChooserCombo.EVENT_BLUR)}},{eventName:BI.MultiTreeInsertCombo.EVENT_STOP,action:function(){self.fireEvent(BI.TreeValueChooserInsertCombo.EVENT_STOP)}},{eventName:BI.MultiTreeInsertCombo.EVENT_CLICK_ITEM,action:function(){self.fireEvent(BI.TreeValueChooserInsertCombo.EVENT_CLICK_ITEM)}},{eventName:BI.MultiTreeInsertCombo.EVENT_SEARCHING,action:function(){self.fireEvent(BI.TreeValueChooserInsertCombo.EVENT_SEARCHING)}},{eventName:BI.MultiTreeInsertCombo.EVENT_CONFIRM,action:function(){self.fireEvent(BI.TreeValueChooserInsertCombo.EVENT_CONFIRM)}}]})},setValue:function(v){this.combo.setValue(v)},getValue:function(){return this.combo.getValue()},populate:function(items){this._initData(items),this.combo.populate.apply(this.combo,arguments)}}),BI.TreeValueChooserInsertCombo.EVENT_FOCUS="EVENT_FOCUS",BI.TreeValueChooserInsertCombo.EVENT_BLUR="EVENT_BLUR",BI.TreeValueChooserInsertCombo.EVENT_STOP="EVENT_STOP",BI.TreeValueChooserInsertCombo.EVENT_CLICK_ITEM="EVENT_CLICK_ITEM",BI.TreeValueChooserInsertCombo.EVENT_SEARCHING="EVENT_SEARCHING",BI.TreeValueChooserInsertCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.tree_value_chooser_insert_combo",BI.TreeValueChooserInsertCombo),BI.TreeValueChooserCombo=BI.inherit(BI.AbstractTreeValueChooser,{_defaultConfig:function(){return BI.extend(BI.TreeValueChooserCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-tree-value-chooser-combo",width:200,height:24,items:null,itemsCreator:BI.emptyFn})},_init:function(){BI.TreeValueChooserCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;BI.isNotNull(o.items)&&this._initData(o.items),this.combo=BI.createWidget({type:"bi.multi_tree_combo",text:o.text,value:o.value,watermark:o.watermark,element:this,itemsCreator:BI.bind(this._itemsCreator,this),valueFormatter:BI.bind(this._valueFormatter,this),width:o.width,height:o.height,listeners:[{eventName:BI.MultiTreeCombo.EVENT_FOCUS,action:function(){self.fireEvent(BI.TreeValueChooserCombo.EVENT_FOCUS)}},{eventName:BI.MultiTreeCombo.EVENT_BLUR,action:function(){self.fireEvent(BI.TreeValueChooserCombo.EVENT_BLUR)}},{eventName:BI.MultiTreeCombo.EVENT_STOP,action:function(){self.fireEvent(BI.TreeValueChooserCombo.EVENT_STOP)}},{eventName:BI.MultiTreeCombo.EVENT_CLICK_ITEM,action:function(){self.fireEvent(BI.TreeValueChooserCombo.EVENT_CLICK_ITEM)}},{eventName:BI.MultiTreeCombo.EVENT_SEARCHING,action:function(){self.fireEvent(BI.TreeValueChooserCombo.EVENT_SEARCHING)}},{eventName:BI.MultiTreeCombo.EVENT_CONFIRM,action:function(){self.fireEvent(BI.TreeValueChooserCombo.EVENT_CONFIRM)}}]})},setValue:function(v){this.combo.setValue(v)},getValue:function(){return this.combo.getValue()},populate:function(items){this._initData(items),this.combo.populate.apply(this.combo,arguments)}}),BI.TreeValueChooserCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.TreeValueChooserCombo.EVENT_FOCUS="EVENT_FOCUS",BI.TreeValueChooserCombo.EVENT_BLUR="EVENT_BLUR",BI.TreeValueChooserCombo.EVENT_STOP="EVENT_STOP",BI.TreeValueChooserCombo.EVENT_CLICK_ITEM="EVENT_CLICK_ITEM",BI.TreeValueChooserCombo.EVENT_SEARCHING="EVENT_SEARCHING",BI.shortcut("bi.tree_value_chooser_combo",BI.TreeValueChooserCombo),BI.TreeValueChooserPane=BI.inherit(BI.AbstractTreeValueChooser,{_defaultConfig:function(){return BI.extend(BI.TreeValueChooserPane.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-tree-value-chooser-pane",items:null,itemsCreator:BI.emptyFn})},_init:function(){BI.TreeValueChooserPane.superclass._init.apply(this,arguments);var self=this,o=this.options;this.pane=BI.createWidget({type:"bi.multi_select_tree",element:this,itemsCreator:BI.bind(this._itemsCreator,this)}),this.pane.on(BI.MultiSelectTree.EVENT_CHANGE,function(){self.fireEvent(BI.TreeValueChooserPane.EVENT_CHANGE)}),BI.isNotNull(o.items)&&(this._initData(o.items),this.populate())},setSelectedValue:function(v){this.pane.setSelectedValue(v)},setValue:function(v){this.pane.setValue(v)},getValue:function(){return this.pane.getValue()},populate:function(){this.pane.populate.apply(this.pane,arguments)}}),BI.TreeValueChooserPane.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.tree_value_chooser_pane",BI.TreeValueChooserPane),BI.AbstractValueChooser=BI.inherit(BI.Widget,{_const:{perPage:100},_defaultConfig:function(){return BI.extend(BI.AbstractValueChooser.superclass._defaultConfig.apply(this,arguments),{items:null,itemsCreator:BI.emptyFn,cache:!0})},_valueFormatter:function(v){var text=v;return BI.isNotNull(this.items)&&BI.some(this.items,function(i,item){if(item.value===v||item.value+""===v)return text=item.text,!0}),text},_getItemsByTimes:function(items,times){for(var res=[],i=(times-1)*this._const.perPage;items[i]&&idocument.F=Object"),t.close(),p=t.F;e--;)delete p[a][i[e]];return p()};t.exports=Object.create||function(t,n){var e;return null!==t?(l[a]=r(t),e=new l,l[a]=null,e[f]=t):e=p(),n===undefined?e:o(e,n)},u[f]=!0},function(t,n,e){"use strict";var r=e(25);t.exports=function(t){return Object(r(t))}},function(t,n,e){"use strict";t.exports={}},function(t,n,e){"use strict";var o=e(13),i=function i(t){var e,r;this.promise=new t(function(t,n){if(e!==undefined||r!==undefined)throw TypeError("Bad Promise constructor");e=t,r=n}),this.resolve=o(e),this.reject=o(r)};t.exports.f=function(t){return new i(t)}},function(t,n,e){"use strict";var r=e(4),o=e(35),i=e(18),u=e(14),c=e(37),s=e(8),f=e(47),a=Object.getOwnPropertyDescriptor;n.f=r?a:function(t,n){if(t=u(t),n=c(n,!0),f)try{return a(t,n)}catch(e){}if(s(t,n))return i(!o.f.call(t,n),t[n])}},function(t,n,e){"use strict";t.exports=function(t){if(t==undefined)throw TypeError("Can't call method on "+t);return t}},function(t,n,e){"use strict";var r=e(19),o=e(40),i=r("keys");t.exports=function(t){return i[t]||(i[t]=o(t))}},function(t,n,e){"use strict";t.exports={}},function(t,n,e){"use strict";var r=e(29),o=Math.min;t.exports=function(t){return 0o;)u(r,e=n[o++])&&(~s(i,e)||i.push(e));return i}},function(t,n,e){"use strict";var s=e(14),f=e(28),a=e(78),r=function r(c){return function(t,n,e){var r,o=s(t),i=f(o.length),u=a(e,i);if(c&&n!=n){for(;u=e.length?{value:undefined,done:!0}:(t=o(e,r),n.index+=t.length,{value:t,done:!1})})},function(t,n,e){"use strict";var o=e(60).IteratorPrototype,i=e(20),u=e(18),c=e(32),s=e(22),f=function f(){return this};t.exports=function(t,n,e){var r=n+" Iterator";return t.prototype=i(o,{next:u(1,e)}),c(t,r,!1,!0),s[r]=f,t}},function(t,n,e){"use strict";var r=e(5);t.exports=!r(function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype})},function(t,n,e){"use strict";var r=e(7);t.exports=function(t){if(!r(t)&&null!==t)throw TypeError("Can't set "+String(t)+" as a prototype");return t}},function(t,n,e){"use strict";var r=e(0),o=e(108),i=e(109),u=e(6),c=e(1),s=c("iterator"),f=c("toStringTag"),a=i.values;for(var l in o){var p=r[l],d=p&&p.prototype;if(d){if(d[s]!==a)try{u(d,s,a)}catch(v){d[s]=a}if(d[f]||u(d,f,l),o[l])for(var y in i)if(d[y]!==i[y])try{u(d,y,i[y])}catch(v){d[y]=i[y]}}}},function(t,n,e){"use strict";t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},function(t,n,e){"use strict";var r=e(14),o=e(110),i=e(22),u=e(16),c=e(59),s="Array Iterator",f=u.set,a=u.getterFor(s);t.exports=c(Array,"Array",function(t,n){f(this,{type:s,target:r(t),index:0,kind:n})},function(){var t=a(this),n=t.target,e=t.kind,r=t.index++;return!n||r>=n.length?(t.target=undefined,{value:undefined,done:!0}):"keys"==e?{value:r,done:!1}:"values"==e?{value:n[r],done:!1}:{value:[r,n[r]],done:!1}},"values"),i.Arguments=i.Array,o("keys"),o("values"),o("entries")},function(t,n,e){"use strict";var r=e(1),o=e(20),i=e(6),u=r("unscopables"),c=Array.prototype;c[u]==undefined&&i(c,u,o(null)),t.exports=function(t){c[u][t]=!0}},function(t,n,e){"use strict";var r,o,i,u,c=e(2),s=e(15),f=e(0),a=e(11),l=e(62),p=e(10),d=e(112),y=e(32),v=e(113),h=e(7),g=e(13),b=e(114),m=e(12),x=e(33),S=e(118),O=e(63),w=e(64).set,j=e(119),P=e(65),E=e(120),A=e(23),T=e(34),M=e(46),I=e(16),k=e(51),L=e(1)("species"),_="Promise",F=I.get,C=I.set,R=I.getterFor(_),N=l,D=f.TypeError,G=f.document,B=f.process,V=f.fetch,$=B&&B.versions,W=$&&$.v8||"",z=A.f,H=z,q="process"==m(B),U=!!(G&&G.createEvent&&f.dispatchEvent),Y="unhandledrejection",J=k(_,function(){var t=N.resolve(1),n=function n(){},e=(t.constructor={})[L]=function(t){t(n,n)};return!((q||"function"==typeof PromiseRejectionEvent)&&(!s||t["finally"])&&t.then(n)instanceof e&&0!==W.indexOf("6.6")&&-1===M.indexOf("Chrome/66"))}),K=J||!S(function(t){N.all(t)["catch"](function(){})}),Q=function Q(t){var n;return!(!h(t)||"function"!=typeof(n=t.then))&&n},X=function X(p,d,y){if(!d.notified){d.notified=!0;var v=d.reactions;j(function(){for(var t=d.value,n=1==d.state,e=0;v.length>e;){var r,o,i,u=v[e++],c=n?u.ok:u.fail,s=u.resolve,f=u.reject,a=u.domain;try{c?(n||(2===d.rejection&&et(p,d),d.rejection=1),!0===c?r=t:(a&&a.enter(),r=c(t),a&&(a.exit(),i=!0)),r===u.promise?f(D("Promise-chain cycle")):(o=Q(r))?o.call(r,s,f):s(r)):f(t)}catch(l){a&&!i&&a.exit(),f(l)}}d.reactions=[],d.notified=!1,y&&!d.rejection&&tt(p,d)})}},Z=function Z(t,n,e){var r,o;U?((r=G.createEvent("Event")).promise=n,r.reason=e,r.initEvent(t,!1,!0),f.dispatchEvent(r)):r={promise:n,reason:e},(o=f["on"+t])?o(r):t===Y&&E("Unhandled promise rejection",e)},tt=function tt(e,r){w.call(f,function(){var t,n=r.value;if(nt(r)&&(t=T(function(){q?B.emit("unhandledRejection",n,e):Z(Y,e,n)}),r.rejection=q||nt(r)?2:1,t.error))throw t.value})},nt=function nt(t){return 1!==t.rejection&&!t.parent},et=function et(t,n){w.call(f,function(){q?B.emit("rejectionHandled",t):Z("rejectionhandled",t,n.value)})},rt=function rt(n,e,r,o){return function(t){n(e,r,t,o)}},ot=function ot(t,n,e,r){n.done||(n.done=!0,r&&(n=r),n.value=e,n.state=2,X(t,n,!0))},it=function it(e,r,o,t){if(!r.done){r.done=!0,t&&(r=t);try{if(e===o)throw D("Promise can't be resolved itself");var i=Q(o);i?j(function(){var t={done:!1};try{i.call(o,rt(it,e,t,r),rt(ot,e,t,r))}catch(n){ot(e,t,n,r)}}):(r.value=o,r.state=1,X(e,r,!1))}catch(n){ot(e,{done:!1},n,r)}}};J&&(N=function(t){b(this,N,_),g(t),r.call(this);var n=F(this);try{t(rt(it,this,n),rt(ot,this,n))}catch(e){ot(this,n,e)}},(r=function(t){C(this,{type:_,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:undefined})}).prototype=d(N.prototype,{then:function(t,n){var e=R(this),r=z(O(this,N));return r.ok="function"!=typeof t||t,r.fail="function"==typeof n&&n,r.domain=q?B.domain:undefined,e.parent=!0,e.reactions.push(r),0!=e.state&&X(this,e,!1),r.promise},"catch":function(t){return this.then(undefined,t)}}),o=function o(){var t=new r,n=F(t);this.promise=t,this.resolve=rt(it,t,n),this.reject=rt(ot,t,n)},A.f=z=function z(t){return t===N||t===i?new o(t):H(t)},s||"function"!=typeof l||(u=l.prototype.then,p(l.prototype,"then",function(t,n){var e=this;return new N(function(t,n){u.call(e,t,n)}).then(t,n)},{unsafe:!0}),"function"==typeof V&&c({global:!0,enumerable:!0,forced:!0},{fetch:function(t){return P(N,V.apply(f,arguments))}}))),c({global:!0,wrap:!0,forced:J},{Promise:N}),y(N,_,!1,!0),v(_),i=a[_],c({target:_,stat:!0,forced:J},{reject:function(t){var n=z(this);return n.reject.call(undefined,t),n.promise}}),c({target:_,stat:!0,forced:s||J},{resolve:function(t){return P(s&&this===i?N:this,t)}}),c({target:_,stat:!0,forced:K},{all:function(t){var c=this,n=z(c),s=n.resolve,f=n.reject,e=T(function(){var r=g(c.resolve),o=[],i=0,u=1;x(t,function(t){var n=i++,e=!1;o.push(undefined),u++,r.call(c,t).then(function(t){e||(e=!0,o[n]=t,--u||s(o))},f)}),--u||s(o)});return e.error&&f(e.value),n.promise},race:function(t){var e=this,r=z(e),o=r.reject,n=T(function(){var n=g(e.resolve);x(t,function(t){n.call(e,t).then(r.resolve,o)})});return n.error&&o(n.value),r.promise}})},function(t,n,e){"use strict";var o=e(10);t.exports=function(t,n,e){for(var r in n)o(t,r,n[r],e);return t}},function(t,n,e){"use strict";var r=e(17),o=e(9),i=e(1),u=e(4),c=i("species");t.exports=function(t){var n=r(t),e=o.f;u&&n&&!n[c]&&e(n,c,{configurable:!0,get:function(){return this}})}},function(t,n,e){"use strict";t.exports=function(t,n,e){if(!(t instanceof n))throw TypeError("Incorrect "+(e?e+" ":"")+"invocation");return t}},function(t,n,e){"use strict";var r=e(1),o=e(22),i=r("iterator"),u=Array.prototype;t.exports=function(t){return t!==undefined&&(o.Array===t||u[i]===t)}},function(t,n,e){"use strict";var r=e(57),o=e(22),i=e(1)("iterator");t.exports=function(t){if(t!=undefined)return t[i]||t["@@iterator"]||o[r(t)]}},function(t,n,e){"use strict";var u=e(3);t.exports=function(t,n,e,r){try{return r?n(u(e)[0],e[1]):n(e)}catch(i){var o=t["return"];throw o!==undefined&&u(o.call(t)),i}}},function(t,n,e){"use strict";var o=e(1)("iterator"),i=!1;try{var r=0,u={next:function(){return{done:!!r++}},"return":function(){i=!0}};u[o]=function(){return this},Array.from(u,function(){throw 2})}catch(c){}t.exports=function(t,n){if(!n&&!i)return!1;var e=!1;try{var r={};r[o]=function(){return{next:function(){return{done:e=!0}}}},t(r)}catch(c){}return e}},function(t,n,e){"use strict";var r,o,i,u,c,s,f,a,l=e(0),p=e(24).f,d=e(12),y=e(64).set,v=e(46),h=l.MutationObserver||l.WebKitMutationObserver,g=l.process,b=l.Promise,m="process"==d(g),x=p(l,"queueMicrotask"),S=x&&x.value;S||(r=function r(){var t,n;for(m&&(t=g.domain)&&t.exit();o;){n=o.fn,o=o.next;try{n()}catch(e){throw o?u():i=undefined,e}}i=undefined,t&&t.enter()},u=m?function u(){g.nextTick(r)}:h&&!/(iphone|ipod|ipad).*applewebkit/i.test(v)?(c=!0,s=document.createTextNode(""),new h(r).observe(s,{characterData:!0}),function u(){s.data=c=!c}):b&&b.resolve?(f=b.resolve(undefined),a=f.then,function u(){a.call(f,r)}):function u(){y.call(l,r)}),t.exports=S||function(t){var n={fn:t,next:undefined};i&&(i.next=n),o||(o=n,u()),i=n}},function(t,n,e){"use strict";var r=e(0);t.exports=function(t,n){var e=r.console;e&&e.error&&(1===arguments.length?e.error(t):e.error(t,n))}},function(t,n,e){"use strict";var r=e(2),o=e(15),i=e(62),u=e(17),c=e(63),s=e(65),f=e(10);r({target:"Promise",proto:!0,real:!0},{"finally":function(n){var e=c(this,u("Promise")),t="function"==typeof n;return this.then(t?function(t){return s(e,n()).then(function(){return t})}:n,t?function(t){return s(e,n()).then(function(){throw t})}:n)}}),o||"function"!=typeof i||i.prototype["finally"]||f(i.prototype,"finally",u("Promise").prototype["finally"])},function(t,n,e){"use strict";var r=e(2),o=e(4),i=e(45),u=e(61),c=e(20),s=e(9),f=e(18),a=e(33),l=e(6),p=e(3),d=e(16),y=d.set,v=d.getterFor("AggregateError"),h=function(t,n){var e=this;if(!(e instanceof h))return new h(t,n);u&&(e=u(new Error(n),i(e)));var r=[];return a(t,r.push,r),o?y(e,{errors:r,type:"AggregateError"}):e.errors=r,n!==undefined&&l(e,"message",String(n)),e};h.prototype=c(Error.prototype,{constructor:f(5,h),message:f(5,""),name:f(5,"AggregateError"),toString:f(5,function(){var t=p(this).name;t=t===undefined?"AggregateError":String(t);var n=this.message;return t+": "+(n=n===undefined?"":String(n))})}),o&&s.f(h.prototype,"errors",{get:function(){return v(this).errors},configurable:!0}),r({global:!0},{AggregateError:h})},function(t,n,e){"use strict";e(66)},function(t,n,e){"use strict";var r=e(2),o=e(23),i=e(34);r({target:"Promise",stat:!0},{"try":function(t){var n=o.f(this),e=i(t);return(e.error?n.reject:n.resolve)(e.value),n.promise}})},function(t,n,e){"use strict";var r=e(2),l=e(13),p=e(17),o=e(23),i=e(34),d=e(33),y="No one promise resolved";r({target:"Promise",stat:!0},{any:function(t){var s=this,n=o.f(s),f=n.resolve,a=n.reject,e=i(function(){var r=l(s.resolve),o=[],i=0,u=1,c=!1;d(t,function(t){var n=i++,e=!1;o.push(undefined),u++,r.call(s,t).then(function(t){e||c||(c=!0,f(t))},function(t){e||c||(e=!0,o[n]=t,--u||a(new(p("AggregateError"))(o,y)))})}),--u||a(new(p("AggregateError"))(o,y))});return e.error&&a(e.value),n.promise}})},function(t,n,e){"use strict";t.exports=e(127)},function(t,n,e){"use strict";e(128);var r=e(11);t.exports=r.Object.getOwnPropertySymbols},function(t,n,e){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(n,t){h(n);var e=b(t),r=O(e).concat(dt(e));return B(r,function(t){a&&!pt.call(e,t)||lt(n,t,e[t])}),n}function i(t,n){var e=b(t),r=m(n,!0);if(e!==U||!d(nt,r)||d(et,r)){var o=Q(e,r);return!o||!d(nt,r)||d(e,V)&&e[V][r]||(o.enumerable=!0),o}}function u(t){var n=Z(b(t)),e=[];return B(n,function(t){d(nt,t)||d(_,t)||e.push(t)}),e}var c=e(2),s=e(0),f=e(15),a=e(4),l=e(55),p=e(5),d=e(8),y=e(54),v=e(7),h=e(3),g=e(21),b=e(14),m=e(37),x=e(18),S=e(20),O=e(44),w=e(41),j=e(129),P=e(43),E=e(24),A=e(9),T=e(35),M=e(6),I=e(10),k=e(19),L=e(26),_=e(27),F=e(40),C=e(1),R=e(67),N=e(130),D=e(32),G=e(16),B=e(53).forEach,V=L("hidden"),$="Symbol",W="prototype",z=C("toPrimitive"),H=G.set,q=G.getterFor($),U=Object[W],Y=s.Symbol,J=s.JSON,K=J&&J.stringify,Q=E.f,X=A.f,Z=j.f,tt=T.f,nt=k("symbols"),et=k("op-symbols"),rt=k("string-to-symbol-registry"),ot=k("symbol-to-string-registry"),it=k("wks"),ut=s.QObject,ct=!ut||!ut[W]||!ut[W].findChild,st=a&&p(function(){return 7!=S(X({},"a",{get:function(){return X(this,"a",{value:7}).a}})).a})?function(t,n,e){var r=Q(U,n);r&&delete U[n],X(t,n,e),r&&t!==U&&X(U,n,r)}:X,ft=function ft(t,n){var e=nt[t]=S(Y[W]);return H(e,{type:$,tag:t,description:n}),a||(e.description=n),e},at=l&&"symbol"==r(Y.iterator)?function(t){return"symbol"==r(t)}:function(t){return Object(t)instanceof Y},lt=function(t,n,e){t===U&<(et,n,e),h(t);var r=m(n,!0);return h(e),d(nt,r)?(e.enumerable?(d(t,V)&&t[V][r]&&(t[V][r]=!1),e=S(e,{enumerable:x(0,!1)})):(d(t,V)||X(t,V,x(1,{})),t[V][r]=!0),st(t,r,e)):X(t,r,e)},pt=function(t){var n=m(t,!0),e=tt.call(this,n);return!(this===U&&d(nt,n)&&!d(et,n))&&(!(e||!d(this,n)||!d(nt,n)||d(this,V)&&this[V][n])||e)},dt=function(t){var n=t===U,e=Z(n?et:b(t)),r=[];return B(e,function(t){!d(nt,t)||n&&!d(U,t)||r.push(nt[t])}),r};l||(I((Y=function(){if(this instanceof Y)throw TypeError("Symbol is not a constructor");var t=arguments.length&&arguments[0]!==undefined?String(arguments[0]):undefined,n=F(t),e=function e(t){this===U&&e.call(et,t),d(this,V)&&d(this[V],n)&&(this[V][n]=!1),st(this,n,x(1,t))};return a&&ct&&st(U,n,{configurable:!0,set:e}),ft(n,t)})[W],"toString",function(){return q(this).tag}),T.f=pt,A.f=lt,E.f=i,w.f=j.f=u,P.f=dt,a&&(X(Y[W],"description",{configurable:!0,get:function(){return q(this).description}}),f||I(U,"propertyIsEnumerable",pt,{unsafe:!0})),R.f=function(t){return ft(C(t),t)}),c({global:!0,wrap:!0,forced:!l,sham:!l},{Symbol:Y}),B(O(it),function(t){N(t)}),c({target:$,stat:!0,forced:!l},{"for":function(t){var n=String(t);if(d(rt,n))return rt[n];var e=Y(n);return rt[n]=e,ot[e]=n,e},keyFor:function(t){if(!at(t))throw TypeError(t+" is not a symbol");if(d(ot,t))return ot[t]},useSetter:function(){ct=!0},useSimple:function(){ct=!1}}),c({target:"Object",stat:!0,forced:!l,sham:!a},{create:function(t,n){return n===undefined?S(t):o(S(t),n)},defineProperty:lt,defineProperties:o,getOwnPropertyDescriptor:i}),c({target:"Object",stat:!0,forced:!l},{getOwnPropertyNames:u,getOwnPropertySymbols:dt}),c({target:"Object",stat:!0,forced:p(function(){P.f(1)})},{getOwnPropertySymbols:function(t){return P.f(g(t))}}),J&&c({target:"JSON",stat:!0,forced:!l||p(function(){var t=Y();return"[null]"!=K([t])||"{}"!=K({a:t})||"{}"!=K(Object(t))})},{stringify:function(t){for(var e,r,n=[t],o=1;o]*>)/g,v=/\$([$&'`]|\d\d?)/g,I=function I(t){return t===undefined?t:String(t)};r("replace",2,function(o,x,S){return[function(t,n){var e=i(this),r=t==undefined?undefined:t[o];return r!==undefined?r.call(t,e,n):x.call(String(e),t,n)},function(t,n){var e=S(x,t,this,n);if(e.done)return e.value;var r=w(t),o=String(this),i="function"==typeof n;i||(n=String(n));var u=r.global;if(u){var c=r.unicode;r.lastIndex=0}for(var s=[];;){var f=A(r,o);if(null===f)break;if(s.push(f),!u)break;""===String(f[0])&&(r.lastIndex=E(o,j(r.lastIndex),c))}for(var a="",l=0,p=0;p")}),b=!d(function(){var t=/(?:)/,n=t.exec;t.exec=function(){return n.apply(this,arguments)};var e="ab".split(t);return 2!==e.length||"a"!==e[0]||"b"!==e[1]});t.exports=function(e,t,n,r){var o=y(e),i=!d(function(){var t={};return t[o]=function(){return 7},7!=""[e](t)}),u=i&&!d(function(){var t=!1,n=/a/;return n.exec=function(){return t=!0,null},"split"===e&&(n.constructor={},n.constructor[h]=function(){return n}),n[o](""),!t});if(!i||!u||"replace"===e&&!g||"split"===e&&!b){var c=/./[o],s=n(o,""[e],function(t,n,e,r,o){return n.exec===v?i&&!o?{done:!0,value:c.call(n,e,r)}:{done:!0,value:t.call(e,n,r)}:{done:!1}}),f=s[0],a=s[1];p(String.prototype,e,f),p(RegExp.prototype,o,2==t?function(t,n){return a.call(t,this,n)}:function(t){return a.call(t,this)}),r&&l(RegExp.prototype[o],"sham",!0)}}},function(t,n,e){"use strict";var r=e(3);t.exports=function(){var t=r(this),n="";return t.global&&(n+="g"),t.ignoreCase&&(n+="i"),t.multiline&&(n+="m"),t.dotAll&&(n+="s"),t.unicode&&(n+="u"),t.sticky&&(n+="y"),n}},function(t,n,e){"use strict";var r=e(58).charAt;t.exports=function(t,n,e){return n+(e?r(t,n).length:1)}},function(t,n,e){"use strict";function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var i=e(12),u=e(68);t.exports=function(t,n){var e=t.exec;if("function"==typeof e){var r=e.call(t,n);if("object"!==o(r))throw TypeError("RegExp exec method returned something other than an Object or null");return r}if("RegExp"!==i(t))throw TypeError("RegExp#exec called on incompatible receiver");return u.call(t,n)}},function(t,n,e){"use strict";var r=function c(t){if(t&&t.__esModule)return t;var n=u();if(n&&n.has(t))return n.get(t);var e={};if(null!=t){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var i=r?Object.getOwnPropertyDescriptor(t,o):null;i&&(i.get||i.set)?Object.defineProperty(e,o,i):e[o]=t[o]}}e["default"]=t,n&&n.set(t,e);return e}(e(139));function u(){if("function"!=typeof WeakMap)return null;var t=new WeakMap;return u=function(){return t},t}BI=BI.extend(BI,{Decorators:r})},function(t,n,e){"use strict";function i(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function u(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}function c(t,n){t.prototype=Object.create(n.prototype),function u(t,n){for(var e=Object.getOwnPropertyNames(n),r=0;r>>0;if(0===len)return-1;var n=0|fromIndex;if(n>=len)return-1;for(k=Math.max(n>=0?n:len-Math.abs(n),0);k>>0;if(0===len)return-1;for(n=len-1,arguments.length>1&&(n=Number(arguments[1]),n!=n?n=0:0!=n&&n!=1/0&&n!=-(1/0)&&(n=(n>0||-1)*Math.floor(Math.abs(n)))),k=n>=0?Math.min(n,len-1):len-Math.abs(n);k>=0;k--)if(k in t&&t[k]===searchElement)return k;return-1}),_global.console=_global.console||function(){var c={};return c.log=c.warn=c.debug=c.info=c.error=c.time=c.dir=c.profile=c.clear=c.exception=c.trace=c.assert=function(){},c}(),_global.localStorage||(_global.localStorage={items:{},setItem:function(k,v){BI.Cache.addCookie(k,v)},getItem:function(k){return BI.Cache.getCookie(k)},removeItem:function(k){BI.Cache.deleteCookie(k)},key:function(){},clear:function(){this.items={}}}),Object.keys||(Object.keys=function(o){if(o!==Object(o))throw new TypeError("Object.keys called on a non-object");var falsy,skipArray={__ob__:falsy,$accessors:falsy,$vbthis:falsy,$vbsetter:falsy},k=[],p;for(p in o)p in skipArray||Object.prototype.hasOwnProperty.call(o,p)&&k.push(p);return k}),Array.isArray||(Array.isArray=function(arg){return"[object Array]"===Object.prototype.toString.call(arg)}),"function"!=typeof Object.getPrototypeOf&&(Object.getPrototypeOf="".__proto__===String.prototype?function(object){return object.__proto__}:function(object){return object.constructor.prototype}),Date.now||(Date.now=function(){return(new Date).valueOf()}),"undefined"!=typeof Set&&Set.toString().match(/native code/)||(Set=function(){this.set={}},Set.prototype.has=function(key){return void 0!==this.set[key]},Set.prototype.add=function(key){this.set[key]=1},Set.prototype.clear=function(){this.set={}}),!function(window){var ua=window.navigator.userAgent.toLowerCase(),reg=/msie/;if(reg.test(ua)){var _sort=Array.prototype.sort;Array.prototype.sort=function(fn){if(fn&&"function"==typeof fn){if(this.length<2)return this;for(var i=0,j=i+1,l=this.length,tmp,r=!1,t=0;i0,r===!0&&(tmp=this[i],this[i]=this[j],this[j]=tmp);return this}return _sort.call(this)}}}(window);var _global;_global="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,null==_global.BI&&(_global.BI={prepares:[]}),null==_global.BI.prepares&&(_global.BI.prepares=[]),function(){function apply(func,thisArg,args){switch(args.length){case 0:return func.call(thisArg);case 1:return func.call(thisArg,args[0]);case 2:return func.call(thisArg,args[0],args[1]);case 3:return func.call(thisArg,args[0],args[1],args[2])}return func.apply(thisArg,args)}function arrayAggregator(array,setter,iteratee,accumulator){for(var index=-1,length=null==array?0:array.length;++index-1}function arrayIncludesWith(array,value,comparator){for(var index=-1,length=null==array?0:array.length;++index-1;);return index}function charsEndIndex(strSymbols,chrSymbols){for(var index=strSymbols.length;index--&&baseIndexOf(chrSymbols,strSymbols[index],0)>-1;);return index}function countHolders(array,placeholder){for(var length=array.length,result=0;length--;)array[length]===placeholder&&++result;return result}function getValue(object,key){return null==object?undefined:object[key]}function hasUnicode(string){return reHasUnicode.test(string)}function iteratorToArray(iterator){for(var data,result=[];!(data=iterator.next()).done;)result.push(data.value);return result}function mapToArray(map){var index=-1,result=Array(map.size);return map.forEach(function(value,key){result[++index]=[key,value]}),result}function overArg(func,transform){return function(arg){return func(transform(arg))}}function replaceHolders(array,placeholder){for(var index=-1,length=array.length,resIndex=0,result=[];++index-1}function listCacheSet(key,value){var data=this.__data__,index=assocIndexOf(data,key);return index<0?(++this.size,data.push([key,value])):data[index][1]=value,this}function MapCache(entries){var index=-1,length=null==entries?0:entries.length;for(this.clear();++index=lower?number:lower)),number}function baseClone(value,bitmask,customizer,key,object,stack){var result,isDeep=bitmask&CLONE_DEEP_FLAG,isFlat=bitmask&CLONE_FLAT_FLAG,isFull=bitmask&CLONE_SYMBOLS_FLAG;if(customizer&&(result=object?customizer(value,key,object,stack):customizer(value)),result!==undefined)return result;if(!isObject(value))return value;var isArr=isArray(value);if(isArr){if(result=initCloneArray(value),!isDeep)return copyArray(value,result)}else{var tag=getTag(value),isFunc=tag==funcTag||tag==genTag;if(isBuffer(value))return cloneBuffer(value,isDeep);if(tag==objectTag||tag==argsTag||isFunc&&!object){if(result=isFlat||isFunc?{}:initCloneObject(value),!isDeep)return isFlat?copySymbolsIn(value,baseAssignIn(result,value)):copySymbols(value,baseAssign(result,value))}else{if(!cloneableTags[tag])return object?value:{};result=initCloneByTag(value,tag,isDeep)}}stack||(stack=new Stack);var stacked=stack.get(value);if(stacked)return stacked;if(stack.set(value,result),isSet(value))return value.forEach(function(subValue){result.add(baseClone(subValue,bitmask,customizer,subValue,value,stack))}),result;if(isMap(value))return value.forEach(function(subValue,key){result.set(key,baseClone(subValue,bitmask,customizer,key,value,stack))}),result;var keysFunc=isFull?isFlat?getAllKeysIn:getAllKeys:isFlat?keysIn:keys,props=isArr?undefined:keysFunc(value);return arrayEach(props||value,function(subValue,key){props&&(key=subValue,subValue=value[key]),assignValue(result,key,baseClone(subValue,bitmask,customizer,key,value,stack))}),result}function baseDelay(func,wait,args){if("function"!=typeof func)throw new TypeError(FUNC_ERROR_TEXT);return setTimeout(function(){func.apply(undefined,args)},wait)}function baseDifference(array,values,iteratee,comparator){var index=-1,includes=arrayIncludes,isCommon=!0,length=array.length,result=[],valuesLength=values.length;if(!length)return result;iteratee&&(values=arrayMap(values,baseUnary(iteratee))),comparator?(includes=arrayIncludesWith,isCommon=!1):values.length>=LARGE_ARRAY_SIZE&&(includes=cacheHas,isCommon=!1,values=new SetCache(values));outer:for(;++index0&&predicate(value)?depth>1?baseFlatten(value,depth-1,predicate,isStrict,result):arrayPush(result,value):isStrict||(result[result.length]=value)}return result}function baseForOwn(object,iteratee){return object&&baseFor(object,iteratee,keys)}function baseForOwnRight(object,iteratee){return object&&baseForRight(object,iteratee,keys)}function baseFunctions(object,props){return arrayFilter(props,function(key){return isFunction(object[key])})}function baseGet(object,path){path=castPath(path,object);for(var index=0,length=path.length;null!=object&&indexother}function baseHas(object,key){return null!=object&&hasOwnProperty.call(object,key)}function baseHasIn(object,key){return null!=object&&key in Object(object)}function baseIntersection(arrays,iteratee,comparator){for(var includes=comparator?arrayIncludesWith:arrayIncludes,length=arrays[0].length,othLength=arrays.length,othIndex=othLength,caches=Array(othLength),maxLength=1/0,result=[];othIndex--;){var array=arrays[othIndex];othIndex&&iteratee&&(array=arrayMap(array,baseUnary(iteratee))),maxLength=nativeMin(array.length,maxLength),caches[othIndex]=!comparator&&(iteratee||length>=120&&array.length>=120)?new SetCache(othIndex&&array):undefined}array=arrays[0];var index=-1,seen=caches[0];outer:for(;++indexlength?0:length+start),end=end>length?length:end,end<0&&(end+=length),length=start>end?0:end-start>>>0,start>>>=0;for(var result=Array(length);++index=LARGE_ARRAY_SIZE){var set=iteratee?null:createSet(array);if(set)return setToArray(set);isCommon=!1,includes=cacheHas,seen=new SetCache}else seen=iteratee?[]:result;outer:for(;++index=length?array:baseSlice(array,start,end)}function cloneBuffer(buffer,isDeep){if(isDeep)return buffer.slice();var length=buffer.length,result=allocUnsafe?allocUnsafe(length):new buffer.constructor(length);return buffer.copy(result),result}function cloneArrayBuffer(arrayBuffer){var result=new arrayBuffer.constructor(arrayBuffer.byteLength);return new Uint8Array(result).set(new Uint8Array(arrayBuffer)), +result}function cloneDataView(dataView,isDeep){var buffer=isDeep?cloneArrayBuffer(dataView.buffer):dataView.buffer;return new dataView.constructor(buffer,dataView.byteOffset,dataView.byteLength)}function cloneRegExp(regexp){var result=new regexp.constructor(regexp.source,reFlags.exec(regexp));return result.lastIndex=regexp.lastIndex,result}function cloneSymbol(symbol){return symbolValueOf?Object(symbolValueOf.call(symbol)):{}}function cloneTypedArray(typedArray,isDeep){var buffer=isDeep?cloneArrayBuffer(typedArray.buffer):typedArray.buffer;return new typedArray.constructor(buffer,typedArray.byteOffset,typedArray.length)}function compareAscending(value,other){if(value!==other){var valIsDefined=value!==undefined,valIsNull=null===value,valIsReflexive=value===value,valIsSymbol=isSymbol(value),othIsDefined=other!==undefined,othIsNull=null===other,othIsReflexive=other===other,othIsSymbol=isSymbol(other);if(!othIsNull&&!othIsSymbol&&!valIsSymbol&&value>other||valIsSymbol&&othIsDefined&&othIsReflexive&&!othIsNull&&!othIsSymbol||valIsNull&&othIsDefined&&othIsReflexive||!valIsDefined&&othIsReflexive||!valIsReflexive)return 1;if(!valIsNull&&!valIsSymbol&&!othIsSymbol&&value=ordersLength)return result;var order=orders[index];return result*("desc"==order?-1:1)}}return object.index-other.index}function composeArgs(args,partials,holders,isCurried){for(var argsIndex=-1,argsLength=args.length,holdersLength=holders.length,leftIndex=-1,leftLength=partials.length,rangeLength=nativeMax(argsLength-holdersLength,0),result=Array(leftLength+rangeLength),isUncurried=!isCurried;++leftIndex1?sources[length-1]:undefined,guard=length>2?sources[2]:undefined;for(customizer=assigner.length>3&&"function"==typeof customizer?(length--,customizer):undefined,guard&&isIterateeCall(sources[0],sources[1],guard)&&(customizer=length<3?undefined:customizer,length=1),object=Object(object);++index-1?iterable[iteratee?collection[index]:index]:undefined}}function createHybrid(func,bitmask,thisArg,partials,holders,partialsRight,holdersRight,argPos,ary,arity){function wrapper(){for(var length=arguments.length,args=Array(length),index=length;index--;)args[index]=arguments[index];if(isCurried)var placeholder=getHolder(wrapper),holdersCount=countHolders(args,placeholder);if(partials&&(args=composeArgs(args,partials,holders,isCurried)),partialsRight&&(args=composeArgsRight(args,partialsRight,holdersRight,isCurried)),length-=holdersCount,isCurried&&length1&&args.reverse(),isAry&&aryarrLength))return!1;var stacked=stack.get(array);if(stacked&&stack.get(other))return stacked==other;var index=-1,result=!0,seen=bitmask&COMPARE_UNORDERED_FLAG?new SetCache:undefined;for(stack.set(array,other),stack.set(other,array);++index1?"& ":"")+details[lastIndex],details=details.join(length>2?", ":" "),source.replace(reWrapComment,"{\n/* [wrapped with "+details+"] */\n")}function isFlattenable(value){return isArray(value)||isArguments(value)||!!(spreadableSymbol&&value&&value[spreadableSymbol])}function isIndex(value,length){var type=typeof value;return length=null==length?MAX_SAFE_INTEGER:length,!!length&&("number"==type||"symbol"!=type&&reIsUint.test(value))&&value>-1&&value%1==0&&value0){if(++count>=HOT_COUNT)return arguments[0]}else count=0;return func.apply(undefined,arguments)}}function toKey(value){if("string"==typeof value||isSymbol(value))return value;var result=value+"";return"0"==result&&1/value==-INFINITY?"-0":result}function toSource(func){if(null!=func){try{return funcToString.call(func)}catch(e){}try{return func+""}catch(e){}}return""}function updateWrapDetails(details,bitmask){return arrayEach(wrapFlags,function(pair){var value="_."+pair[0];bitmask&pair[1]&&!arrayIncludes(details,value)&&details.push(value)}),details.sort()}function wrapperClone(wrapper){if(wrapper instanceof LazyWrapper)return wrapper.clone();var result=new LodashWrapper(wrapper.__wrapped__,wrapper.__chain__);return result.__actions__=copyArray(wrapper.__actions__),result.__index__=wrapper.__index__,result.__values__=wrapper.__values__,result}function compact(array){for(var index=-1,length=null==array?0:array.length,resIndex=0,result=[];++index=this.__values__.length,value=done?undefined:this.__values__[this.__index__++];return{done:done,value:value}}function wrapperToIterator(){return this}function wrapperPlant(value){for(var result,parent=this;parent instanceof baseLodash;){var clone=wrapperClone(parent);clone.__index__=0,clone.__values__=undefined,result?previous.__wrapped__=clone:result=clone;var previous=clone;parent=parent.__wrapped__}return previous.__wrapped__=value,result}function wrapperReverse(){var value=this.__wrapped__;if(value instanceof LazyWrapper){var wrapped=value;return this.__actions__.length&&(wrapped=new LazyWrapper(this)),wrapped=wrapped.reverse(),wrapped.__actions__.push({func:thru,args:[reverse],thisArg:undefined}),new LodashWrapper(wrapped,this.__chain__)}return this.thru(reverse)}function wrapperValue(){return baseWrapperValue(this.__wrapped__,this.__actions__)}function every(collection,predicate,guard){var func=isArray(collection)?arrayEvery:baseEvery;return guard&&isIterateeCall(collection,predicate,guard)&&(predicate=undefined),func(collection,baseIteratee(predicate,3))}function filter(collection,predicate){var func=isArray(collection)?arrayFilter:baseFilter;return func(collection,baseIteratee(predicate,3))}function forEach(collection,iteratee){var func=isArray(collection)?arrayEach:baseEach;return func(collection,baseIteratee(iteratee,3))}function map(collection,iteratee){var func=isArray(collection)?arrayMap:baseMap;return func(collection,baseIteratee(iteratee,3))}function reduce(collection,iteratee,accumulator){var func=isArray(collection)?arrayReduce:baseReduce,initAccum=arguments.length<3;return func(collection,baseIteratee(iteratee,4),accumulator,initAccum,baseEach)}function reject(collection,predicate){var func=isArray(collection)?arrayFilter:baseFilter;return func(collection,negate(baseIteratee(predicate,3)))}function size(collection){if(null==collection)return 0;if(isArrayLike(collection))return isString(collection)?stringSize(collection):collection.length;var tag=getTag(collection);return tag==mapTag||tag==setTag?collection.size:baseKeys(collection).length}function some(collection,predicate,guard){var func=isArray(collection)?arraySome:baseSome;return guard&&isIterateeCall(collection,predicate,guard)&&(predicate=undefined),func(collection,baseIteratee(predicate,3))}function before(n,func){var result;if("function"!=typeof func)throw new TypeError(FUNC_ERROR_TEXT);return n=toInteger(n),function(){return--n>0&&(result=func.apply(this,arguments)),n<=1&&(func=undefined),result}}function debounce(func,wait,options){function invokeFunc(time){var args=lastArgs,thisArg=lastThis;return lastArgs=lastThis=undefined,lastInvokeTime=time,result=func.apply(thisArg,args)}function leadingEdge(time){return lastInvokeTime=time,timerId=setTimeout(timerExpired,wait),leading?invokeFunc(time):result}function remainingWait(time){var timeSinceLastCall=time-lastCallTime,timeSinceLastInvoke=time-lastInvokeTime,timeWaiting=wait-timeSinceLastCall;return maxing?nativeMin(timeWaiting,maxWait-timeSinceLastInvoke):timeWaiting}function shouldInvoke(time){var timeSinceLastCall=time-lastCallTime,timeSinceLastInvoke=time-lastInvokeTime;return lastCallTime===undefined||timeSinceLastCall>=wait||timeSinceLastCall<0||maxing&&timeSinceLastInvoke>=maxWait}function timerExpired(){var time=now();return shouldInvoke(time)?trailingEdge(time):void(timerId=setTimeout(timerExpired,remainingWait(time)))}function trailingEdge(time){return timerId=undefined,trailing&&lastArgs?invokeFunc(time):(lastArgs=lastThis=undefined,result)}function cancel(){timerId!==undefined&&clearTimeout(timerId),lastInvokeTime=0,lastArgs=lastCallTime=lastThis=timerId=undefined}function flush(){return timerId===undefined?result:trailingEdge(now())}function debounced(){var time=now(),isInvoking=shouldInvoke(time);if(lastArgs=arguments,lastThis=this,lastCallTime=time,isInvoking){if(timerId===undefined)return leadingEdge(lastCallTime);if(maxing)return timerId=setTimeout(timerExpired,wait),invokeFunc(lastCallTime)}return timerId===undefined&&(timerId=setTimeout(timerExpired,wait)),result}var lastArgs,lastThis,maxWait,result,timerId,lastCallTime,lastInvokeTime=0,leading=!1,maxing=!1,trailing=!0;if("function"!=typeof func)throw new TypeError(FUNC_ERROR_TEXT);return wait=toNumber(wait)||0,isObject(options)&&(leading=!!options.leading,maxing="maxWait"in options,maxWait=maxing?nativeMax(toNumber(options.maxWait)||0,wait):maxWait,trailing="trailing"in options?!!options.trailing:trailing),debounced.cancel=cancel,debounced.flush=flush,debounced}function memoize(func,resolver){if("function"!=typeof func||null!=resolver&&"function"!=typeof resolver)throw new TypeError(FUNC_ERROR_TEXT);var memoized=function(){var args=arguments,key=resolver?resolver.apply(this,args):args[0],cache=memoized.cache;if(cache.has(key))return cache.get(key);var result=func.apply(this,args);return memoized.cache=cache.set(key,result)||cache,result};return memoized.cache=new(memoize.Cache||MapCache), +memoized}function negate(predicate){if("function"!=typeof predicate)throw new TypeError(FUNC_ERROR_TEXT);return function(){var args=arguments;switch(args.length){case 0:return!predicate.call(this);case 1:return!predicate.call(this,args[0]);case 2:return!predicate.call(this,args[0],args[1]);case 3:return!predicate.call(this,args[0],args[1],args[2])}return!predicate.apply(this,args)}}function once(func){return before(2,func)}function rest(func,start){if("function"!=typeof func)throw new TypeError(FUNC_ERROR_TEXT);return start=start===undefined?start:toInteger(start),baseRest(func,start)}function throttle(func,wait,options){var leading=!0,trailing=!0;if("function"!=typeof func)throw new TypeError(FUNC_ERROR_TEXT);return isObject(options)&&(leading="leading"in options?!!options.leading:leading,trailing="trailing"in options?!!options.trailing:trailing),debounce(func,wait,{leading:leading,maxWait:wait,trailing:trailing})}function clone(value){return baseClone(value,CLONE_SYMBOLS_FLAG)}function cloneDeep(value){return baseClone(value,CLONE_DEEP_FLAG|CLONE_SYMBOLS_FLAG)}function eq(value,other){return value===other||value!==value&&other!==other}function isArrayLike(value){return null!=value&&isLength(value.length)&&!isFunction(value)}function isArrayLikeObject(value){return isObjectLike(value)&&isArrayLike(value)}function isBoolean(value){return value===!0||value===!1||isObjectLike(value)&&baseGetTag(value)==boolTag}function isEmpty(value){if(null==value)return!0;if(isArrayLike(value)&&(isArray(value)||"string"==typeof value||"function"==typeof value.splice||isBuffer(value)||isTypedArray(value)||isArguments(value)))return!value.length;var tag=getTag(value);if(tag==mapTag||tag==setTag)return!value.size;if(isPrototype(value))return!baseKeys(value).length;for(var key in value)if(hasOwnProperty.call(value,key))return!1;return!0}function isEqual(value,other){return baseIsEqual(value,other)}function isFinite(value){return"number"==typeof value&&nativeIsFinite(value)}function isFunction(value){if(!isObject(value))return!1;var tag=baseGetTag(value);return tag==funcTag||tag==genTag||tag==asyncTag||tag==proxyTag}function isLength(value){return"number"==typeof value&&value>-1&&value%1==0&&value<=MAX_SAFE_INTEGER}function isObject(value){var type=typeof value;return null!=value&&("object"==type||"function"==type)}function isObjectLike(value){return null!=value&&"object"==typeof value}function isNaN(value){return isNumber(value)&&value!=+value}function isNull(value){return null===value}function isNumber(value){return"number"==typeof value||isObjectLike(value)&&baseGetTag(value)==numberTag}function isPlainObject(value){if(!isObjectLike(value)||baseGetTag(value)!=objectTag)return!1;var proto=getPrototype(value);if(null===proto)return!0;var Ctor=hasOwnProperty.call(proto,"constructor")&&proto.constructor;return"function"==typeof Ctor&&Ctor instanceof Ctor&&funcToString.call(Ctor)==objectCtorString}function isString(value){return"string"==typeof value||!isArray(value)&&isObjectLike(value)&&baseGetTag(value)==stringTag}function isSymbol(value){return"symbol"==typeof value||isObjectLike(value)&&baseGetTag(value)==symbolTag}function isUndefined(value){return value===undefined}function toArray(value){if(!value)return[];if(isArrayLike(value))return isString(value)?stringToArray(value):copyArray(value);if(symIterator&&value[symIterator])return iteratorToArray(value[symIterator]());var tag=getTag(value),func=tag==mapTag?mapToArray:tag==setTag?setToArray:values;return func(value)}function toFinite(value){if(!value)return 0===value?value:0;if(value=toNumber(value),value===INFINITY||value===-INFINITY){var sign=value<0?-1:1;return sign*MAX_INTEGER}return value===value?value:0}function toInteger(value){var result=toFinite(value),remainder=result%1;return result===result?remainder?result-remainder:result:0}function toNumber(value){if("number"==typeof value)return value;if(isSymbol(value))return NAN;if(isObject(value)){var other="function"==typeof value.valueOf?value.valueOf():value;value=isObject(other)?other+"":other}if("string"!=typeof value)return 0===value?value:+value;value=value.replace(reTrim,"");var isBinary=reIsBinary.test(value);return isBinary||reIsOctal.test(value)?freeParseInt(value.slice(2),isBinary?2:8):reIsBadHex.test(value)?NAN:+value}function toPlainObject(value){return copyObject(value,keysIn(value))}function toString(value){return null==value?"":baseToString(value)}function create(prototype,properties){var result=baseCreate(prototype);return null==properties?result:baseAssign(result,properties)}function findKey(object,predicate){return baseFindKey(object,baseIteratee(predicate,3),baseForOwn)}function findLastKey(object,predicate){return baseFindKey(object,baseIteratee(predicate,3),baseForOwnRight)}function get(object,path,defaultValue){var result=null==object?undefined:baseGet(object,path);return result===undefined?defaultValue:result}function has(object,path){return null!=object&&hasPath(object,path,baseHas)}function hasIn(object,path){return null!=object&&hasPath(object,path,baseHasIn)}function keys(object){return isArrayLike(object)?arrayLikeKeys(object):baseKeys(object)}function keysIn(object){return isArrayLike(object)?arrayLikeKeys(object,!0):baseKeysIn(object)}function omitBy(object,predicate){return pickBy(object,negate(baseIteratee(predicate)))}function pickBy(object,predicate){if(null==object)return{};var props=arrayMap(getAllKeysIn(object),function(prop){return[prop]});return predicate=baseIteratee(predicate),basePickBy(object,props,function(value,path){return predicate(value,path[0])})}function result(object,path,defaultValue){path=castPath(path,object);var index=-1,length=path.length;for(length||(length=1,object=undefined);++indexupper){var temp=lower;lower=upper,upper=temp}if(floating||lower%1||upper%1){var rand=nativeRandom();return nativeMin(lower+rand*(upper-lower+freeParseFloat("1e-"+((rand+"").length-1))),upper)}return baseRandom(lower,upper)}function escape(string){return string=toString(string),string&&reHasUnescapedHtml.test(string)?string.replace(reUnescapedHtml,escapeHtmlChar):string}function trim(string,chars,guard){if(string=toString(string),string&&(guard||chars===undefined))return string.replace(reTrim,"");if(!string||!(chars=baseToString(chars)))return string;var strSymbols=stringToArray(string),chrSymbols=stringToArray(chars),start=charsStartIndex(strSymbols,chrSymbols),end=charsEndIndex(strSymbols,chrSymbols)+1;return castSlice(strSymbols,start,end).join("")}function constant(value){return function(){return value}}function identity(value){return value}function iteratee(func){return baseIteratee("function"==typeof func?func:baseClone(func,CLONE_DEEP_FLAG))}function matches(source){return baseMatches(baseClone(source,CLONE_DEEP_FLAG))}function mixin(object,source,options){var props=keys(source),methodNames=baseFunctions(source,props);null!=options||isObject(source)&&(methodNames.length||!props.length)||(options=source,source=object,object=this,methodNames=baseFunctions(source,keys(source)));var chain=!(isObject(options)&&"chain"in options&&!options.chain),isFunc=isFunction(object);return arrayEach(methodNames,function(methodName){var func=source[methodName];object[methodName]=func,isFunc&&(object.prototype[methodName]=function(){var chainAll=this.__chain__;if(chain||chainAll){var result=object(this.__wrapped__),actions=result.__actions__=copyArray(this.__actions__);return actions.push({func:func,args:arguments,thisArg:object}),result.__chain__=chainAll,result}return func.apply(object,arrayPush([this.value()],arguments))})}),object}function noConflict(){return root._===this&&(root._=oldDash),this}function noop(){}function property(path){return isKey(path)?baseProperty(toKey(path)):basePropertyDeep(path)}function stubArray(){return[]}function stubFalse(){return!1}function uniqueId(prefix){var id=++idCounter;return toString(prefix)+id}function max(array){return array&&array.length?baseExtremum(array,identity,baseGt):undefined}function min(array){return array&&array.length?baseExtremum(array,identity,baseLt):undefined}var undefined,VERSION="4.17.5",LARGE_ARRAY_SIZE=200,FUNC_ERROR_TEXT="Expected a function",HASH_UNDEFINED="__lodash_hash_undefined__",MAX_MEMOIZE_SIZE=500,PLACEHOLDER="__lodash_placeholder__",CLONE_DEEP_FLAG=1,CLONE_FLAT_FLAG=2,CLONE_SYMBOLS_FLAG=4,COMPARE_PARTIAL_FLAG=1,COMPARE_UNORDERED_FLAG=2,WRAP_BIND_FLAG=1,WRAP_BIND_KEY_FLAG=2,WRAP_CURRY_BOUND_FLAG=4,WRAP_CURRY_FLAG=8,WRAP_CURRY_RIGHT_FLAG=16,WRAP_PARTIAL_FLAG=32,WRAP_PARTIAL_RIGHT_FLAG=64,WRAP_ARY_FLAG=128,WRAP_REARG_FLAG=256,WRAP_FLIP_FLAG=512,HOT_COUNT=800,HOT_SPAN=16,LAZY_FILTER_FLAG=1,LAZY_MAP_FLAG=2,LAZY_WHILE_FLAG=3,INFINITY=1/0,MAX_SAFE_INTEGER=9007199254740991,MAX_INTEGER=1.7976931348623157e308,NAN=NaN,MAX_ARRAY_LENGTH=4294967295,wrapFlags=[["ary",WRAP_ARY_FLAG],["bind",WRAP_BIND_FLAG],["bindKey",WRAP_BIND_KEY_FLAG],["curry",WRAP_CURRY_FLAG],["curryRight",WRAP_CURRY_RIGHT_FLAG],["flip",WRAP_FLIP_FLAG],["partial",WRAP_PARTIAL_FLAG],["partialRight",WRAP_PARTIAL_RIGHT_FLAG],["rearg",WRAP_REARG_FLAG]],argsTag="[object Arguments]",arrayTag="[object Array]",asyncTag="[object AsyncFunction]",boolTag="[object Boolean]",dateTag="[object Date]",errorTag="[object Error]",funcTag="[object Function]",genTag="[object GeneratorFunction]",mapTag="[object Map]",numberTag="[object Number]",nullTag="[object Null]",objectTag="[object Object]",promiseTag="[object Promise]",proxyTag="[object Proxy]",regexpTag="[object RegExp]",setTag="[object Set]",stringTag="[object String]",symbolTag="[object Symbol]",undefinedTag="[object Undefined]",weakMapTag="[object WeakMap]",arrayBufferTag="[object ArrayBuffer]",dataViewTag="[object DataView]",float32Tag="[object Float32Array]",float64Tag="[object Float64Array]",int8Tag="[object Int8Array]",int16Tag="[object Int16Array]",int32Tag="[object Int32Array]",uint8Tag="[object Uint8Array]",uint8ClampedTag="[object Uint8ClampedArray]",uint16Tag="[object Uint16Array]",uint32Tag="[object Uint32Array]",reUnescapedHtml=/[&<>"']/g,reHasUnescapedHtml=RegExp(reUnescapedHtml.source),reIsDeepProp=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,reIsPlainProp=/^\w*$/,rePropName=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,reRegExpChar=/[\\^$.*+?()[\]{}|]/g,reTrim=/^\s+|\s+$/g,reWrapComment=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,reWrapDetails=/\{\n\/\* \[wrapped with (.+)\] \*/,reSplitDetails=/,? & /,reEscapeChar=/\\(\\)?/g,reFlags=/\w*$/,reIsBadHex=/^[-+]0x[0-9a-f]+$/i,reIsBinary=/^0b[01]+$/i,reIsHostCtor=/^\[object .+?Constructor\]$/,reIsOctal=/^0o[0-7]+$/i,reIsUint=/^(?:0|[1-9]\d*)$/,rsAstralRange="\\ud800-\\udfff",rsComboMarksRange="\\u0300-\\u036f",reComboHalfMarksRange="\\ufe20-\\ufe2f",rsComboSymbolsRange="\\u20d0-\\u20ff",rsComboRange=rsComboMarksRange+reComboHalfMarksRange+rsComboSymbolsRange,rsVarRange="\\ufe0e\\ufe0f",rsAstral="["+rsAstralRange+"]",rsCombo="["+rsComboRange+"]",rsFitz="\\ud83c[\\udffb-\\udfff]",rsModifier="(?:"+rsCombo+"|"+rsFitz+")",rsNonAstral="[^"+rsAstralRange+"]",rsRegional="(?:\\ud83c[\\udde6-\\uddff]){2}",rsSurrPair="[\\ud800-\\udbff][\\udc00-\\udfff]",rsZWJ="\\u200d",reOptMod=rsModifier+"?",rsOptVar="["+rsVarRange+"]?",rsOptJoin="(?:"+rsZWJ+"(?:"+[rsNonAstral,rsRegional,rsSurrPair].join("|")+")"+rsOptVar+reOptMod+")*",rsSeq=rsOptVar+reOptMod+rsOptJoin,rsSymbol="(?:"+[rsNonAstral+rsCombo+"?",rsCombo,rsRegional,rsSurrPair,rsAstral].join("|")+")",reUnicode=RegExp(rsFitz+"(?="+rsFitz+")|"+rsSymbol+rsSeq,"g"),reHasUnicode=RegExp("["+rsZWJ+rsAstralRange+rsComboRange+rsVarRange+"]"),typedArrayTags={};typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=!0,typedArrayTags[argsTag]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag]=typedArrayTags[dataViewTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag]=typedArrayTags[mapTag]=typedArrayTags[numberTag]=typedArrayTags[objectTag]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag]=typedArrayTags[weakMapTag]=!1;var cloneableTags={};cloneableTags[argsTag]=cloneableTags[arrayTag]=cloneableTags[arrayBufferTag]=cloneableTags[dataViewTag]=cloneableTags[boolTag]=cloneableTags[dateTag]=cloneableTags[float32Tag]=cloneableTags[float64Tag]=cloneableTags[int8Tag]=cloneableTags[int16Tag]=cloneableTags[int32Tag]=cloneableTags[mapTag]=cloneableTags[numberTag]=cloneableTags[objectTag]=cloneableTags[regexpTag]=cloneableTags[setTag]=cloneableTags[stringTag]=cloneableTags[symbolTag]=cloneableTags[uint8Tag]=cloneableTags[uint8ClampedTag]=cloneableTags[uint16Tag]=cloneableTags[uint32Tag]=!0,cloneableTags[errorTag]=cloneableTags[funcTag]=cloneableTags[weakMapTag]=!1;var htmlEscapes={"&":"&","<":"<",">":">",'"':""","'":"'"},freeParseFloat=parseFloat,freeParseInt=parseInt,freeGlobal="object"==typeof global&&global&&global.Object===Object&&global,freeSelf="object"==typeof self&&self&&self.Object===Object&&self,root=freeGlobal||freeSelf||Function("return this")(),freeExports="object"==typeof exports&&exports&&!exports.nodeType&&exports,freeModule=freeExports&&"object"==typeof module&&module&&!module.nodeType&&module,moduleExports=freeModule&&freeModule.exports===freeExports,freeProcess=moduleExports&&freeGlobal.process,nodeUtil=function(){try{return freeProcess&&freeProcess.binding&&freeProcess.binding("util")}catch(e){}}(),nodeIsDate=nodeUtil&&nodeUtil.isDate,nodeIsMap=nodeUtil&&nodeUtil.isMap,nodeIsRegExp=nodeUtil&&nodeUtil.isRegExp,nodeIsSet=nodeUtil&&nodeUtil.isSet,nodeIsTypedArray=nodeUtil&&nodeUtil.isTypedArray,asciiSize=baseProperty("length"),escapeHtmlChar=basePropertyOf(htmlEscapes),arrayProto=Array.prototype,funcProto=Function.prototype,objectProto=Object.prototype,coreJsData=root["__core-js_shared__"],funcToString=funcProto.toString,hasOwnProperty=objectProto.hasOwnProperty,idCounter=0,maskSrcKey=function(){var uid=/[^.]+$/.exec(coreJsData&&coreJsData.keys&&coreJsData.keys.IE_PROTO||"");return uid?"Symbol(src)_1."+uid:""}(),nativeObjectToString=objectProto.toString,objectCtorString=funcToString.call(Object),oldDash=root._,reIsNative=RegExp("^"+funcToString.call(hasOwnProperty).replace(reRegExpChar,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Buffer=moduleExports?root.Buffer:undefined,Symbol=root.Symbol,Uint8Array=root.Uint8Array,allocUnsafe=Buffer?Buffer.allocUnsafe:undefined,getPrototype=overArg(Object.getPrototypeOf,Object),objectCreate=Object.create,propertyIsEnumerable=objectProto.propertyIsEnumerable,splice=arrayProto.splice,spreadableSymbol=Symbol?Symbol.isConcatSpreadable:undefined,symIterator=Symbol?Symbol.iterator:undefined,symToStringTag=Symbol?Symbol.toStringTag:undefined,defineProperty=function(){try{var func=getNative(Object,"defineProperty");return func({},"",{}),func}catch(e){}}(),nativeCeil=Math.ceil,nativeFloor=Math.floor,nativeGetSymbols=Object.getOwnPropertySymbols,nativeIsBuffer=Buffer?Buffer.isBuffer:undefined,nativeIsFinite=root.isFinite,nativeKeys=overArg(Object.keys,Object),nativeMax=Math.max,nativeMin=Math.min,nativeNow=Date.now,nativeRandom=Math.random,nativeReverse=arrayProto.reverse,DataView=getNative(root,"DataView"),Map=getNative(root,"Map"),Promise=getNative(root,"Promise"),Set=getNative(root,"Set"),WeakMap=getNative(root,"WeakMap"),nativeCreate=getNative(Object,"create"),metaMap=WeakMap&&new WeakMap,realNames={},dataViewCtorString=toSource(DataView),mapCtorString=toSource(Map),promiseCtorString=toSource(Promise),setCtorString=toSource(Set),weakMapCtorString=toSource(WeakMap),symbolProto=Symbol?Symbol.prototype:undefined,symbolValueOf=symbolProto?symbolProto.valueOf:undefined,symbolToString=symbolProto?symbolProto.toString:undefined,baseCreate=function(){function object(){}return function(proto){if(!isObject(proto))return{};if(objectCreate)return objectCreate(proto);object.prototype=proto;var result=new object;return object.prototype=undefined,result}}();lodash.prototype=baseLodash.prototype,lodash.prototype.constructor=lodash,LodashWrapper.prototype=baseCreate(baseLodash.prototype),LodashWrapper.prototype.constructor=LodashWrapper,LazyWrapper.prototype=baseCreate(baseLodash.prototype),LazyWrapper.prototype.constructor=LazyWrapper,Hash.prototype.clear=hashClear,Hash.prototype["delete"]=hashDelete,Hash.prototype.get=hashGet,Hash.prototype.has=hashHas,Hash.prototype.set=hashSet,ListCache.prototype.clear=listCacheClear,ListCache.prototype["delete"]=listCacheDelete,ListCache.prototype.get=listCacheGet,ListCache.prototype.has=listCacheHas,ListCache.prototype.set=listCacheSet,MapCache.prototype.clear=mapCacheClear,MapCache.prototype["delete"]=mapCacheDelete,MapCache.prototype.get=mapCacheGet,MapCache.prototype.has=mapCacheHas,MapCache.prototype.set=mapCacheSet,SetCache.prototype.add=SetCache.prototype.push=setCacheAdd,SetCache.prototype.has=setCacheHas,Stack.prototype.clear=stackClear,Stack.prototype["delete"]=stackDelete,Stack.prototype.get=stackGet,Stack.prototype.has=stackHas,Stack.prototype.set=stackSet;var baseEach=createBaseEach(baseForOwn),baseFor=createBaseFor(),baseForRight=createBaseFor(!0),baseSetData=metaMap?function(func,data){return metaMap.set(func,data),func}:identity,baseSetToString=defineProperty?function(func,string){return defineProperty(func,"toString",{configurable:!0,enumerable:!1,value:constant(string),writable:!0})}:identity,createSet=Set&&1/setToArray(new Set([,-0]))[1]==INFINITY?function(values){return new Set(values)}:noop,getData=metaMap?function(func){return metaMap.get(func)}:noop,getSymbols=nativeGetSymbols?function(object){return null==object?[]:(object=Object(object),arrayFilter(nativeGetSymbols(object),function(symbol){return propertyIsEnumerable.call(object,symbol)}))}:stubArray,getSymbolsIn=nativeGetSymbols?function(object){for(var result=[];object;)arrayPush(result,getSymbols(object)),object=getPrototype(object);return result}:stubArray,getTag=baseGetTag;(DataView&&getTag(new DataView(new ArrayBuffer(1)))!=dataViewTag||Map&&getTag(new Map)!=mapTag||Promise&&getTag(Promise.resolve())!=promiseTag||Set&&getTag(new Set)!=setTag||WeakMap&&getTag(new WeakMap)!=weakMapTag)&&(getTag=function(value){var result=baseGetTag(value),Ctor=result==objectTag?value.constructor:undefined,ctorString=Ctor?toSource(Ctor):"";if(ctorString)switch(ctorString){case dataViewCtorString:return dataViewTag;case mapCtorString:return mapTag;case promiseCtorString:return promiseTag;case setCtorString:return setTag;case weakMapCtorString:return weakMapTag}return result});var setData=shortOut(baseSetData),setToString=shortOut(baseSetToString),stringToPath=memoizeCapped(function(string){var result=[];return 46===string.charCodeAt(0)&&result.push(""),string.replace(rePropName,function(match,number,quote,subString){result.push(quote?subString.replace(reEscapeChar,"$1"):number||match)}),result}),difference=baseRest(function(array,values){return isArrayLikeObject(array)?baseDifference(array,baseFlatten(values,1,isArrayLikeObject,!0)):[]}),intersection=baseRest(function(arrays){var mapped=arrayMap(arrays,castArrayLikeObject);return mapped.length&&mapped[0]===arrays[0]?baseIntersection(mapped):[]}),union=baseRest(function(arrays){return baseUniq(baseFlatten(arrays,1,isArrayLikeObject,!0))}),without=baseRest(function(array,values){return isArrayLikeObject(array)?baseDifference(array,values):[]}),zip=baseRest(unzip),wrapperAt=flatRest(function(paths){var length=paths.length,start=length?paths[0]:0,value=this.__wrapped__,interceptor=function(object){return baseAt(object,paths)};return!(length>1||this.__actions__.length)&&value instanceof LazyWrapper&&isIndex(start)?(value=value.slice(start,+start+(length?1:0)),value.__actions__.push({func:thru,args:[interceptor],thisArg:undefined}),new LodashWrapper(value,this.__chain__).thru(function(array){return length&&!array.length&&array.push(undefined),array})):this.thru(interceptor)}),countBy=createAggregator(function(result,value,key){hasOwnProperty.call(result,key)?++result[key]:baseAssignValue(result,key,1)}),find=createFind(findIndex),groupBy=createAggregator(function(result,value,key){hasOwnProperty.call(result,key)?result[key].push(value):baseAssignValue(result,key,[value])}),sortBy=baseRest(function(collection,iteratees){if(null==collection)return[];var length=iteratees.length;return length>1&&isIterateeCall(collection,iteratees[0],iteratees[1])?iteratees=[]:length>2&&isIterateeCall(iteratees[0],iteratees[1],iteratees[2])&&(iteratees=[iteratees[0]]),baseOrderBy(collection,baseFlatten(iteratees,1),[])}),now=function(){return root.Date.now()},bind=baseRest(function(func,thisArg,partials){var bitmask=WRAP_BIND_FLAG;if(partials.length){var holders=replaceHolders(partials,getHolder(bind));bitmask|=WRAP_PARTIAL_FLAG}return createWrap(func,bitmask,thisArg,partials,holders)}),defer=baseRest(function(func,args){return baseDelay(func,1,args)}),delay=baseRest(function(func,wait,args){return baseDelay(func,toNumber(wait)||0,args)});memoize.Cache=MapCache;var isArguments=baseIsArguments(function(){return arguments}())?baseIsArguments:function(value){return isObjectLike(value)&&hasOwnProperty.call(value,"callee")&&!propertyIsEnumerable.call(value,"callee")},isArray=Array.isArray,isBuffer=nativeIsBuffer||stubFalse,isDate=nodeIsDate?baseUnary(nodeIsDate):baseIsDate,isMap=nodeIsMap?baseUnary(nodeIsMap):baseIsMap,isRegExp=nodeIsRegExp?baseUnary(nodeIsRegExp):baseIsRegExp,isSet=nodeIsSet?baseUnary(nodeIsSet):baseIsSet,isTypedArray=nodeIsTypedArray?baseUnary(nodeIsTypedArray):baseIsTypedArray,assignIn=createAssigner(function(object,source){copyObject(source,keysIn(source),object)}),defaults=baseRest(function(object,sources){object=Object(object);var index=-1,length=sources.length,guard=length>2?sources[2]:undefined;for(guard&&isIterateeCall(sources[0],sources[1],guard)&&(length=1);++index1),path}),copyObject(object,getAllKeysIn(object),result),isDeep&&(result=baseClone(result,CLONE_DEEP_FLAG|CLONE_FLAT_FLAG|CLONE_SYMBOLS_FLAG,customOmitClone));for(var length=paths.length;length--;)baseUnset(result,paths[length]);return result}),pick=flatRest(function(object,paths){return null==object?{}:basePick(object,paths)}),range=createRange();lodash.assignIn=assignIn,lodash.before=before,lodash.bind=bind,lodash.chain=chain,lodash.compact=compact,lodash.concat=concat,lodash.countBy=countBy,lodash.create=create,lodash.debounce=debounce,lodash.defaults=defaults,lodash.defaultsDeep=defaultsDeep,lodash.defer=defer,lodash.delay=delay,lodash.difference=difference,lodash.drop=drop,lodash.filter=filter,lodash.flatten=flatten,lodash.flattenDeep=flattenDeep,lodash.groupBy=groupBy,lodash.initial=initial,lodash.intersection=intersection,lodash.invert=invert,lodash.invertBy=invertBy,lodash.iteratee=iteratee,lodash.keys=keys,lodash.map=map,lodash.matches=matches,lodash.merge=merge,lodash.mixin=mixin,lodash.negate=negate,lodash.omit=omit,lodash.omitBy=omitBy,lodash.once=once,lodash.pick=pick,lodash.range=range,lodash.reject=reject,lodash.rest=rest,lodash.slice=slice,lodash.sortBy=sortBy,lodash.take=take,lodash.takeRight=takeRight,lodash.tap=tap,lodash.throttle=throttle,lodash.thru=thru,lodash.toArray=toArray,lodash.union=union,lodash.uniq=uniq,lodash.uniqBy=uniqBy,lodash.unzip=unzip,lodash.values=values,lodash.without=without,lodash.zip=zip,lodash.zipObject=zipObject,lodash.extend=assignIn,mixin(lodash,lodash),lodash.clamp=clamp,lodash.clone=clone,lodash.cloneDeep=cloneDeep,lodash.escape=escape,lodash.every=every,lodash.find=find,lodash.findIndex=findIndex,lodash.findKey=findKey,lodash.findLastIndex=findLastIndex,lodash.findLastKey=findLastKey,lodash.forEach=forEach,lodash.get=get,lodash.has=has,lodash.head=head,lodash.identity=identity,lodash.indexOf=indexOf,lodash.isArguments=isArguments,lodash.isArray=isArray,lodash.isArrayLike=isArrayLike,lodash.isBoolean=isBoolean,lodash.isDate=isDate,lodash.isEmpty=isEmpty,lodash.isEqual=isEqual,lodash.isFinite=isFinite,lodash.isFunction=isFunction,lodash.isNaN=isNaN,lodash.isNull=isNull,lodash.isNumber=isNumber,lodash.isObject=isObject,lodash.isPlainObject=isPlainObject,lodash.isRegExp=isRegExp,lodash.isString=isString,lodash.isUndefined=isUndefined,lodash.last=last,lodash.max=max,lodash.min=min,lodash.noConflict=noConflict,lodash.noop=noop,lodash.random=random,lodash.reduce=reduce,lodash.result=result,lodash.size=size,lodash.some=some,lodash.trim=trim,lodash.uniqueId=uniqueId,lodash.each=forEach,lodash.first=head,mixin(lodash,function(){var source={};return baseForOwn(lodash,function(func,methodName){hasOwnProperty.call(lodash.prototype,methodName)||(source[methodName]=func)}),source}(),{chain:!1}),lodash.VERSION=VERSION,arrayEach(["drop","take"],function(methodName,index){LazyWrapper.prototype[methodName]=function(n){n=n===undefined?1:nativeMax(toInteger(n),0);var result=this.__filtered__&&!index?new LazyWrapper(this):this.clone();return result.__filtered__?result.__takeCount__=nativeMin(n,result.__takeCount__):result.__views__.push({size:nativeMin(n,MAX_ARRAY_LENGTH),type:methodName+(result.__dir__<0?"Right":"")}),result},LazyWrapper.prototype[methodName+"Right"]=function(n){return this.reverse()[methodName](n).reverse()}}),arrayEach(["filter","map","takeWhile"],function(methodName,index){var type=index+1,isFilter=type==LAZY_FILTER_FLAG||type==LAZY_WHILE_FLAG;LazyWrapper.prototype[methodName]=function(iteratee){var result=this.clone();return result.__iteratees__.push({iteratee:getIteratee(iteratee,3),type:type}),result.__filtered__=result.__filtered__||isFilter,result}}),arrayEach(["head","last"],function(methodName,index){var takeName="take"+(index?"Right":"");LazyWrapper.prototype[methodName]=function(){return this[takeName](1).value()[0]}}),arrayEach(["initial","tail"],function(methodName,index){var dropName="drop"+(index?"":"Right");LazyWrapper.prototype[methodName]=function(){return this.__filtered__?new LazyWrapper(this):this[dropName](1)}}),LazyWrapper.prototype.compact=function(){return this.filter(identity)},LazyWrapper.prototype.find=function(predicate){return this.filter(predicate).head()},LazyWrapper.prototype.findLast=function(predicate){return this.reverse().find(predicate)},LazyWrapper.prototype.invokeMap=baseRest(function(path,args){return"function"==typeof path?new LazyWrapper(this):this.map(function(value){return baseInvoke(value,path,args)})}),LazyWrapper.prototype.reject=function(predicate){return this.filter(negate(getIteratee(predicate)))},LazyWrapper.prototype.slice=function(start,end){start=toInteger(start);var result=this;return result.__filtered__&&(start>0||end<0)?new LazyWrapper(result):(start<0?result=result.takeRight(-start):start&&(result=result.drop(start)),end!==undefined&&(end=toInteger(end),result=end<0?result.dropRight(-end):result.take(end-start)),result)},LazyWrapper.prototype.takeRightWhile=function(predicate){return this.reverse().takeWhile(predicate).reverse()},LazyWrapper.prototype.toArray=function(){return this.take(MAX_ARRAY_LENGTH)},baseForOwn(LazyWrapper.prototype,function(func,methodName){var checkIteratee=/^(?:filter|find|map|reject)|While$/.test(methodName),isTaker=/^(?:head|last)$/.test(methodName),lodashFunc=lodash[isTaker?"take"+("last"==methodName?"Right":""):methodName],retUnwrapped=isTaker||/^find/.test(methodName);lodashFunc&&(lodash.prototype[methodName]=function(){var value=this.__wrapped__,args=isTaker?[1]:arguments,isLazy=value instanceof LazyWrapper,iteratee=args[0],useLazy=isLazy||isArray(value),interceptor=function(value){var result=lodashFunc.apply(lodash,arrayPush([value],args));return isTaker&&chainAll?result[0]:result};useLazy&&checkIteratee&&"function"==typeof iteratee&&1!=iteratee.length&&(isLazy=useLazy=!1);var chainAll=this.__chain__,isHybrid=!!this.__actions__.length,isUnwrapped=retUnwrapped&&!chainAll,onlyLazy=isLazy&&!isHybrid;if(!retUnwrapped&&useLazy){value=onlyLazy?value:new LazyWrapper(this);var result=func.apply(value,args);return result.__actions__.push({func:thru,args:[interceptor],thisArg:undefined}),new LodashWrapper(result,chainAll)}return isUnwrapped&&onlyLazy?func.apply(this,args):(result=this.thru(interceptor),isUnwrapped?isTaker?result.value()[0]:result.value():result)})}),arrayEach(["pop","push","shift","sort","splice","unshift"],function(methodName){var func=arrayProto[methodName],chainName=/^(?:push|sort|unshift)$/.test(methodName)?"tap":"thru",retUnwrapped=/^(?:pop|shift)$/.test(methodName);lodash.prototype[methodName]=function(){var args=arguments;if(retUnwrapped&&!this.__chain__){var value=this.value();return func.apply(isArray(value)?value:[],args)}return this[chainName](function(value){return func.apply(isArray(value)?value:[],args)})}}),baseForOwn(LazyWrapper.prototype,function(func,methodName){var lodashFunc=lodash[methodName];if(lodashFunc){var key=lodashFunc.name+"",names=realNames[key]||(realNames[key]=[]);names.push({name:methodName,func:lodashFunc})}}),realNames[createHybrid(undefined,WRAP_BIND_KEY_FLAG).name]=[{name:"wrapper",func:undefined}],LazyWrapper.prototype.clone=lazyClone,LazyWrapper.prototype.reverse=lazyReverse,LazyWrapper.prototype.value=lazyValue,lodash.prototype.first=lodash.prototype.head,symIterator&&(lodash.prototype[symIterator]=wrapperToIterator),"function"==typeof define&&"object"==typeof define.amd&&define.amd?(root._=lodash,define(function(){return lodash})):freeModule?((freeModule.exports=lodash)._=lodash,freeExports._=lodash):root._=lodash}.call(this);var _global;_global="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,_global.BI||(_global.BI={}),!function(undefined){var traverse=function(func,context){return function(value,key,obj){return func.call(context,key,value,obj); +}},_apply=function(name){return function(){return _[name].apply(_,arguments)}},_applyFunc=function(name){return function(){var args=Array.prototype.slice.call(arguments,0);return args[1]=_.isFunction(args[1])?traverse(args[1],args[2]):args[1],_[name].apply(_,args)}};_.extend(BI,{assert:function(v,is){if(this.isFunction(is)){if(is(v))return!0;throw new Error(v+" error")}if(this.isArray(is)||(is=[is]),!this.deepContains(is,v))throw new Error(v+" error")},warn:function(message){console.warn(message)},UUID:function(){for(var f=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"],str="",i=0;i<16;i++){var r=parseInt(f.length*Math.random(),10);str+=f[r]}return str},isWidget:function(widget){return widget instanceof BI.Widget||BI.View&&widget instanceof BI.View},createWidgets:function(items,options,context){if(!BI.isArray(items))throw new Error("cannot create Widgets");return BI.isWidget(options)?(context=options,options={}):options||(options={}),BI.map(BI.flatten(items),function(i,item){return BI.createWidget(item,BI.deepClone(options))})},createItems:function(data,innerAttr,outerAttr){return innerAttr=BI.isArray(innerAttr)?innerAttr:BI.makeArray(BI.flatten(data).length,innerAttr||{}),outerAttr=BI.isArray(outerAttr)?outerAttr:BI.makeArray(BI.flatten(data).length,outerAttr||{}),BI.map(data,function(i,item){return BI.isArray(item)?BI.createItems(item,innerAttr,outerAttr):item instanceof BI.Widget?BI.extend({},innerAttr.shift(),outerAttr.shift(),{type:null,el:item}):innerAttr[0]instanceof BI.Widget?(outerAttr.shift(),BI.extend({},item,{el:innerAttr.shift()})):item.el instanceof BI.Widget||BI.View&&item.el instanceof BI.View?(innerAttr.shift(),BI.extend({},outerAttr.shift(),{type:null},item)):item.el?BI.extend({},outerAttr.shift(),item,{el:BI.extend({},innerAttr.shift(),item.el)}):BI.extend({},outerAttr.shift(),{el:BI.extend({},innerAttr.shift(),item)})})},packageItems:function(items,layouts){for(var i=layouts.length-1;i>=0;i--)items=BI.map(items,function(k,it){return BI.extend({},layouts[i],{items:[BI.extend({},layouts[i].el,{el:it})]})});return items},formatEL:function(obj){return obj&&!obj.type&&obj.el?obj:{el:obj}},stripEL:function(obj){return obj.type&&obj||obj.el||obj},trans2Element:function(widgets){return BI.map(widgets,function(i,wi){return wi.element})}}),_.each(["where","findWhere","invoke","pluck","shuffle","sample","toArray","size"],function(name){BI[name]=_apply(name)}),_.each(["get","each","map","reduce","reduceRight","find","filter","reject","every","all","some","any","max","min","sortBy","groupBy","indexBy","countBy","partition","clamp"],function(name){"any"===name?BI[name]=_applyFunc("some"):BI[name]=_applyFunc(name)}),_.extend(BI,{count:function(from,to,predicate){var t;if(predicate)for(t=from;t=0;index--)predicate(index,obj[index],obj);return!1},backAny:function(obj,predicate,context){predicate=BI.iteratee(predicate,context);for(var index=obj.length-1;index>=0;index--)if(predicate(index,obj[index],obj))return!0;return!1},backEvery:function(obj,predicate,context){predicate=BI.iteratee(predicate,context);for(var index=obj.length-1;index>=0;index--)if(!predicate(index,obj[index],obj))return!1;return!0},backFindKey:function(obj,predicate,context){predicate=BI.iteratee(predicate,context);for(var keys=_.keys(obj),key,i=keys.length-1;i>=0;i--)if(key=keys[i],predicate(obj[key],key,obj))return key},backFind:function(obj,predicate,context){var key;if(key=BI.isArray(obj)?BI.findLastIndex(obj,predicate,context):BI.backFindKey(obj,predicate,context),void 0!==key&&key!==-1)return obj[key]},remove:function(obj,target,context){var isFunction=BI.isFunction(target);target=isFunction||BI.isArray(target)?target:[target];var i;if(BI.isArray(obj))for(i=0;i(2147483646-str.charAt(i).charCodeAt(0)+start.charCodeAt(0))/26)return 0;return idx},int2Abc:function(num){var DIGITS=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"],idx=num,str="";if(0===num)return"";for(;0!==idx;){var t=idx%26;0===t&&(t=26),str=DIGITS[t-1]+str,idx=(idx-t)/26}return str}}),_.each(["first","initial","last","rest","compact","flatten","without","union","intersection","difference","zip","unzip","object","indexOf","lastIndexOf","sortedIndex","range","take","takeRight","uniqBy"],function(name){BI[name]=_apply(name)}),_.each(["findIndex","findLastIndex"],function(name){BI[name]=_applyFunc(name)}),_.extend(BI,{makeArray:function(length,value){for(var res=[],i=0;i0;)BI.prepares.shift()()},has:function(obj,keys){return BI.isArray(keys)?0!==keys.length&&BI.every(keys,function(i,key){return _.has(obj,key)}):_.has.apply(_,arguments)},freeze:function(value){return Object.freeze&&BI.isObject(value)?Object.freeze(value):value},isKey:function(key){return BI.isNumber(key)||BI.isString(key)&&key.length>0},isCapitalEqual:function(a,b){return a=BI.isNull(a)?a:(""+a).toLowerCase(),b=BI.isNull(b)?b:(""+b).toLowerCase(),BI.isEqual(a,b)},isWidthOrHeight:function(w){return"number"==typeof w?w>=0:"string"==typeof w?/^\d{1,3}%$/.exec(w)||"auto"==w||/^\d+px$/.exec(w):void 0},isNotNull:function(obj){return!BI.isNull(obj)},isNull:function(obj){return"undefined"==typeof obj||null===obj},isEmptyArray:function(arr){return BI.isArray(arr)&&BI.isEmpty(arr)},isNotEmptyArray:function(arr){return BI.isArray(arr)&&!BI.isEmpty(arr)},isEmptyObject:function(obj){return BI.isEqual(obj,{})},isNotEmptyObject:function(obj){return BI.isPlainObject(obj)&&!BI.isEmptyObject(obj)},isEmptyString:function(obj){return BI.isString(obj)&&0===obj.length},isNotEmptyString:function(obj){return BI.isString(obj)&&!BI.isEmptyString(obj)},isWindow:function(obj){return null!=obj&&obj==obj.window}}),_.extend(BI,{deepClone:_.cloneDeep,deepExtend:_.merge,isDeepMatch:function(object,attrs){var keys=BI.keys(attrs),length=keys.length;if(null==object)return!length;for(var obj=Object(object),i=0;i=0},deepContains:function(obj,copy){return BI.isObject(copy)?BI.any(obj,function(i,v){if(BI.isEqual(v,copy))return!0}):BI.contains(obj,copy)},deepIndexOf:function(obj,target){for(var i=0;imaxDate[0]?back=["y",1]:YY>=minDate[0]&&YY<=maxDate[0]&&(YY==minDate[0]&&(MMmaxDate[1]?back=["m",1]:MM==maxDate[1]&&DD>maxDate[2]&&(back=["d",1]))),back},checkDateLegal:function(str){var ar=str.match(/\d+/g),YY=0|ar[0],MM=0|ar[1],DD=0|ar[2];if(ar.length<=1)return!0;if(ar.length<=2)return MM>=1&&MM<=12;var MD=BI.Date._MD.slice(0);return MD[1]=BI.isLeapYear(YY)?29:28,MM>=1&&MM<=12&&DD<=MD[MM-1]},parseDateTime:function(str,fmt){var today=BI.getDate(),y=0,m=0,d=1,a=str.split(/\W+/);if("%y%x"==fmt.toLowerCase()||"%y%x%d"==fmt.toLowerCase()){var yearlength=4,otherlength=2;a[0]=str.substring(0,yearlength),a[1]=str.substring(yearlength,yearlength+otherlength),a[2]=str.substring(yearlength+otherlength,yearlength+2*otherlength)}var b=fmt.match(/%./g),i=0,j=0,hr=0,min=0,sec=0;for(i=0;i29?1900:2e3);break;case"%b":case"%B":for(j=0;j<12;++j)if(BI.Date._MN[j].substr(0,a[i].length).toLowerCase()==a[i].toLowerCase()){m=j;break}break;case"%H":case"%I":case"%k":case"%l":hr=parseInt(a[i],10);break;case"%P":case"%p":/pm/i.test(a[i])&&hr<12?hr+=12:/am/i.test(a[i])&&hr>=12&&(hr-=12);break;case"%M":min=parseInt(a[i],10);case"%S":sec=parseInt(a[i],10)}if(isNaN(y)&&(y=today.getFullYear()),isNaN(m)&&(m=today.getMonth()),isNaN(d)&&(d=today.getDate()),isNaN(hr)&&(hr=today.getHours()),isNaN(min)&&(min=today.getMinutes()),isNaN(sec)&&(sec=today.getSeconds()),0!=y)return BI.getDate(y,m,d,hr,min,sec);for(y=0,m=-1,d=0,i=0;i31&&0==y?(y=parseInt(a[i],10),y<100&&(y+=y>29?1900:2e3)):0==d&&(d=a[i]);return 0==y&&(y=today.getFullYear()),m!=-1&&0!=d?BI.getDate(y,m,d,hr,min,sec):today},getDate:function(){var length=arguments.length,args=arguments,dt;switch(length){case 0:dt=new Date;break;case 1:dt=new Date(args[0]);break;case 2:dt=new Date(args[0],args[1]);break;case 3:dt=new Date(args[0],args[1],args[2]);break;case 4:dt=new Date(args[0],args[1],args[2],args[3]);break;case 5:dt=new Date(args[0],args[1],args[2],args[3],args[4]);break;case 6:dt=new Date(args[0],args[1],args[2],args[3],args[4],args[5]);break;case 7:dt=new Date(args[0],args[1],args[2],args[3],args[4],args[5],args[6]);break;default:dt=new Date}if(BI.isNotNull(BI.timeZone)&&(0===arguments.length||1===arguments.length&&BI.isNumber(arguments[0]))){var localTime=dt.getTime(),localOffset=6e4*dt.getTimezoneOffset(),utc=localTime+localOffset;return new Date(utc+BI.timeZone)}return dt},getTime:function(){var length=arguments.length,args=arguments,dt;switch(length){case 0:dt=new Date;break;case 1:dt=new Date(args[0]);break;case 2:dt=new Date(args[0],args[1]);break;case 3:dt=new Date(args[0],args[1],args[2]);break;case 4:dt=new Date(args[0],args[1],args[2],args[3]);break;case 5:dt=new Date(args[0],args[1],args[2],args[3],args[4]);break;case 6:dt=new Date(args[0],args[1],args[2],args[3],args[4],args[5]);break;case 7:dt=new Date(args[0],args[1],args[2],args[3],args[4],args[5],args[6]);break;default:dt=new Date}return BI.isNotNull(BI.timeZone)?dt.getTime()-BI.timeZone-6e4*(new Date).getTimezoneOffset():dt.getTime()}})}(),!function(){function extend(){for(var target=arguments[0]||{},length=arguments.length,i=1,options,name,src,copy;i0;)BI.prepares.shift()();var el,w;if(item||(item={}),BI.isWidget(options)?(context=options,options={}):options||(options={}),BI.isEmpty(item)&&BI.isEmpty(options))return BI.createWidget({type:"bi.layout"});if(BI.isWidget(item))return item;if(item.type||options.type)return el=BI.extend({},options,item),w=BI.Plugin.getWidget(el.type,el),w.listeners=(w.listeners||[]).concat([{eventName:BI.Events.MOUNT,action:function(){BI.Plugin.getObject(el.type,this)}}]),w.type===el.type?createWidget(w):BI.createWidget(BI.extend({},item,{type:w.type},options));if(item.el&&(item.el.type||options.type))return el=BI.extend({},options,item.el),w=BI.Plugin.getWidget(el.type,el),w.listeners=(w.listeners||[]).concat([{eventName:BI.Events.MOUNT,action:function(){BI.Plugin.getObject(el.type,this)}}]),w.type===el.type?createWidget(w):BI.createWidget(BI.extend({},item,{type:w.type},options));if(BI.isWidget(item.el))return item.el;throw new Error("无法根据item创建组件")},BI.createElement=function(){var widget=BI.createWidget.apply(this,arguments);return widget.element}}(),!function(){BI.CRYPT_TYPE=BI.CRYPT_TYPE||{},BI.CRYPT_TYPE.AES="aes";var CryptoJS=CryptoJS||function(Math,undefined){var C={},C_lib=C.lib={},Base=C_lib.Base=function(){function F(){}return{extend:function(overrides){F.prototype=this;var subtype=new F;return overrides&&subtype.mixIn(overrides),subtype.hasOwnProperty("init")||(subtype.init=function(){subtype.$super.init.apply(this,arguments)}),subtype.init.prototype=subtype,subtype.$super=this,subtype},create:function(){var instance=this.extend();return instance.init.apply(instance,arguments),instance},init:function(){},mixIn:function(properties){for(var propertyName in properties)properties.hasOwnProperty(propertyName)&&(this[propertyName]=properties[propertyName]);properties.hasOwnProperty("toString")&&(this.toString=properties.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),WordArray=C_lib.WordArray=Base.extend({init:function(words,sigBytes){words=this.words=words||[],sigBytes!=undefined?this.sigBytes=sigBytes:this.sigBytes=4*words.length},toString:function(encoder){return(encoder||Hex).stringify(this)},concat:function(wordArray){var thisWords=this.words,thatWords=wordArray.words,thisSigBytes=this.sigBytes,thatSigBytes=wordArray.sigBytes;if(this.clamp(),thisSigBytes%4)for(var i=0;i>>2]>>>24-i%4*8&255;thisWords[thisSigBytes+i>>>2]|=thatByte<<24-(thisSigBytes+i)%4*8}else if(thatWords.length>65535)for(var i=0;i>>2]=thatWords[i>>>2];else thisWords.push.apply(thisWords,thatWords);return this.sigBytes+=thatSigBytes,this},clamp:function(){var words=this.words,sigBytes=this.sigBytes;words[sigBytes>>>2]&=4294967295<<32-sigBytes%4*8,words.length=Math.ceil(sigBytes/4); +},clone:function(){var clone=Base.clone.call(this);return clone.words=this.words.slice(0),clone},random:function(nBytes){for(var words=[],i=0;i>>2]>>>24-i%4*8&255;hexChars.push((bite>>>4).toString(16)),hexChars.push((15&bite).toString(16))}return hexChars.join("")},parse:function(hexStr){for(var hexStrLength=hexStr.length,words=[],i=0;i>>3]|=parseInt(hexStr.substr(i,2),16)<<24-i%8*4;return new WordArray.init(words,hexStrLength/2)}},Latin1=C_enc.Latin1={stringify:function(wordArray){for(var words=wordArray.words,sigBytes=wordArray.sigBytes,latin1Chars=[],i=0;i>>2]>>>24-i%4*8&255;latin1Chars.push(String.fromCharCode(bite))}return latin1Chars.join("")},parse:function(latin1Str){for(var latin1StrLength=latin1Str.length,words=[],i=0;i>>2]|=(255&latin1Str.charCodeAt(i))<<24-i%4*8;return new WordArray.init(words,latin1StrLength)}},Utf8=C_enc.Utf8={stringify:function(wordArray){try{return decodeURIComponent(escape(Latin1.stringify(wordArray)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(utf8Str){return Latin1.parse(unescape(encodeURIComponent(utf8Str)))}},BufferedBlockAlgorithm=C_lib.BufferedBlockAlgorithm=Base.extend({reset:function(){this._data=new WordArray.init,this._nDataBytes=0},_append:function(data){"string"==typeof data&&(data=Utf8.parse(data)),this._data.concat(data),this._nDataBytes+=data.sigBytes},_process:function(doFlush){var data=this._data,dataWords=data.words,dataSigBytes=data.sigBytes,blockSize=this.blockSize,blockSizeBytes=4*blockSize,nBlocksReady=dataSigBytes/blockSizeBytes;nBlocksReady=doFlush?Math.ceil(nBlocksReady):Math.max((0|nBlocksReady)-this._minBufferSize,0);var nWordsReady=nBlocksReady*blockSize,nBytesReady=Math.min(4*nWordsReady,dataSigBytes);if(nWordsReady){for(var offset=0;offset>>2]>>>24-i%4*8&255,byte2=words[i+1>>>2]>>>24-(i+1)%4*8&255,byte3=words[i+2>>>2]>>>24-(i+2)%4*8&255,triplet=byte1<<16|byte2<<8|byte3,j=0;j<4&&i+.75*j>>6*(3-j)&63));var paddingChar=map.charAt(64);if(paddingChar)for(;base64Chars.length%4;)base64Chars.push(paddingChar);return base64Chars.join("")},parse:function(base64Str){var base64StrLength=base64Str.length,map=this._map,paddingChar=map.charAt(64);if(paddingChar){var paddingIndex=base64Str.indexOf(paddingChar);paddingIndex!=-1&&(base64StrLength=paddingIndex)}for(var words=[],nBytes=0,i=0;i>>6-i%4*2;words[nBytes>>>2]|=(bits1|bits2)<<24-nBytes%4*8,nBytes++}return WordArray.create(words,nBytes)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(Math){function FF(a,b,c,d,x,s,t){var n=a+(b&c|~b&d)+x+t;return(n<>>32-s)+b}function GG(a,b,c,d,x,s,t){var n=a+(b&d|c&~d)+x+t;return(n<>>32-s)+b}function HH(a,b,c,d,x,s,t){var n=a+(b^c^d)+x+t;return(n<>>32-s)+b}function II(a,b,c,d,x,s,t){var n=a+(c^(b|~d))+x+t;return(n<>>32-s)+b}var C=CryptoJS,C_lib=C.lib,WordArray=C_lib.WordArray,Hasher=C_lib.Hasher,C_algo=C.algo,T=[];!function(){for(var i=0;i<64;i++)T[i]=4294967296*Math.abs(Math.sin(i+1))|0}();var MD5=C_algo.MD5=Hasher.extend({_doReset:function(){this._hash=new WordArray.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(M,offset){for(var i=0;i<16;i++){var offset_i=offset+i,M_offset_i=M[offset_i];M[offset_i]=16711935&(M_offset_i<<8|M_offset_i>>>24)|4278255360&(M_offset_i<<24|M_offset_i>>>8)}var H=this._hash.words,M_offset_0=M[offset+0],M_offset_1=M[offset+1],M_offset_2=M[offset+2],M_offset_3=M[offset+3],M_offset_4=M[offset+4],M_offset_5=M[offset+5],M_offset_6=M[offset+6],M_offset_7=M[offset+7],M_offset_8=M[offset+8],M_offset_9=M[offset+9],M_offset_10=M[offset+10],M_offset_11=M[offset+11],M_offset_12=M[offset+12],M_offset_13=M[offset+13],M_offset_14=M[offset+14],M_offset_15=M[offset+15],a=H[0],b=H[1],c=H[2],d=H[3];a=FF(a,b,c,d,M_offset_0,7,T[0]),d=FF(d,a,b,c,M_offset_1,12,T[1]),c=FF(c,d,a,b,M_offset_2,17,T[2]),b=FF(b,c,d,a,M_offset_3,22,T[3]),a=FF(a,b,c,d,M_offset_4,7,T[4]),d=FF(d,a,b,c,M_offset_5,12,T[5]),c=FF(c,d,a,b,M_offset_6,17,T[6]),b=FF(b,c,d,a,M_offset_7,22,T[7]),a=FF(a,b,c,d,M_offset_8,7,T[8]),d=FF(d,a,b,c,M_offset_9,12,T[9]),c=FF(c,d,a,b,M_offset_10,17,T[10]),b=FF(b,c,d,a,M_offset_11,22,T[11]),a=FF(a,b,c,d,M_offset_12,7,T[12]),d=FF(d,a,b,c,M_offset_13,12,T[13]),c=FF(c,d,a,b,M_offset_14,17,T[14]),b=FF(b,c,d,a,M_offset_15,22,T[15]),a=GG(a,b,c,d,M_offset_1,5,T[16]),d=GG(d,a,b,c,M_offset_6,9,T[17]),c=GG(c,d,a,b,M_offset_11,14,T[18]),b=GG(b,c,d,a,M_offset_0,20,T[19]),a=GG(a,b,c,d,M_offset_5,5,T[20]),d=GG(d,a,b,c,M_offset_10,9,T[21]),c=GG(c,d,a,b,M_offset_15,14,T[22]),b=GG(b,c,d,a,M_offset_4,20,T[23]),a=GG(a,b,c,d,M_offset_9,5,T[24]),d=GG(d,a,b,c,M_offset_14,9,T[25]),c=GG(c,d,a,b,M_offset_3,14,T[26]),b=GG(b,c,d,a,M_offset_8,20,T[27]),a=GG(a,b,c,d,M_offset_13,5,T[28]),d=GG(d,a,b,c,M_offset_2,9,T[29]),c=GG(c,d,a,b,M_offset_7,14,T[30]),b=GG(b,c,d,a,M_offset_12,20,T[31]),a=HH(a,b,c,d,M_offset_5,4,T[32]),d=HH(d,a,b,c,M_offset_8,11,T[33]),c=HH(c,d,a,b,M_offset_11,16,T[34]),b=HH(b,c,d,a,M_offset_14,23,T[35]),a=HH(a,b,c,d,M_offset_1,4,T[36]),d=HH(d,a,b,c,M_offset_4,11,T[37]),c=HH(c,d,a,b,M_offset_7,16,T[38]),b=HH(b,c,d,a,M_offset_10,23,T[39]),a=HH(a,b,c,d,M_offset_13,4,T[40]),d=HH(d,a,b,c,M_offset_0,11,T[41]),c=HH(c,d,a,b,M_offset_3,16,T[42]),b=HH(b,c,d,a,M_offset_6,23,T[43]),a=HH(a,b,c,d,M_offset_9,4,T[44]),d=HH(d,a,b,c,M_offset_12,11,T[45]),c=HH(c,d,a,b,M_offset_15,16,T[46]),b=HH(b,c,d,a,M_offset_2,23,T[47]),a=II(a,b,c,d,M_offset_0,6,T[48]),d=II(d,a,b,c,M_offset_7,10,T[49]),c=II(c,d,a,b,M_offset_14,15,T[50]),b=II(b,c,d,a,M_offset_5,21,T[51]),a=II(a,b,c,d,M_offset_12,6,T[52]),d=II(d,a,b,c,M_offset_3,10,T[53]),c=II(c,d,a,b,M_offset_10,15,T[54]),b=II(b,c,d,a,M_offset_1,21,T[55]),a=II(a,b,c,d,M_offset_8,6,T[56]),d=II(d,a,b,c,M_offset_15,10,T[57]),c=II(c,d,a,b,M_offset_6,15,T[58]),b=II(b,c,d,a,M_offset_13,21,T[59]),a=II(a,b,c,d,M_offset_4,6,T[60]),d=II(d,a,b,c,M_offset_11,10,T[61]),c=II(c,d,a,b,M_offset_2,15,T[62]),b=II(b,c,d,a,M_offset_9,21,T[63]),H[0]=H[0]+a|0,H[1]=H[1]+b|0,H[2]=H[2]+c|0,H[3]=H[3]+d|0},_doFinalize:function(){var data=this._data,dataWords=data.words,nBitsTotal=8*this._nDataBytes,nBitsLeft=8*data.sigBytes;dataWords[nBitsLeft>>>5]|=128<<24-nBitsLeft%32;var nBitsTotalH=Math.floor(nBitsTotal/4294967296),nBitsTotalL=nBitsTotal;dataWords[(nBitsLeft+64>>>9<<4)+15]=16711935&(nBitsTotalH<<8|nBitsTotalH>>>24)|4278255360&(nBitsTotalH<<24|nBitsTotalH>>>8),dataWords[(nBitsLeft+64>>>9<<4)+14]=16711935&(nBitsTotalL<<8|nBitsTotalL>>>24)|4278255360&(nBitsTotalL<<24|nBitsTotalL>>>8),data.sigBytes=4*(dataWords.length+1),this._process();for(var hash=this._hash,H=hash.words,i=0;i<4;i++){var H_i=H[i];H[i]=16711935&(H_i<<8|H_i>>>24)|4278255360&(H_i<<24|H_i>>>8)}return hash},clone:function(){var clone=Hasher.clone.call(this);return clone._hash=this._hash.clone(),clone}});C.MD5=Hasher._createHelper(MD5),C.HmacMD5=Hasher._createHmacHelper(MD5)}(Math),function(){var C=CryptoJS,C_lib=C.lib,Base=C_lib.Base,WordArray=C_lib.WordArray,C_algo=C.algo,MD5=C_algo.MD5,EvpKDF=C_algo.EvpKDF=Base.extend({cfg:Base.extend({keySize:4,hasher:MD5,iterations:1}),init:function(cfg){this.cfg=this.cfg.extend(cfg)},compute:function(password,salt){for(var cfg=this.cfg,hasher=cfg.hasher.create(),derivedKey=WordArray.create(),derivedKeyWords=derivedKey.words,keySize=cfg.keySize,iterations=cfg.iterations;derivedKeyWords.length>>2];data.sigBytes-=nPaddingBytes}},BlockCipher=C_lib.BlockCipher=Cipher.extend({cfg:Cipher.cfg.extend({mode:CBC,padding:Pkcs7}),reset:function(){Cipher.reset.call(this);var cfg=this.cfg,iv=cfg.iv,mode=cfg.mode;if(this._xformMode==this._ENC_XFORM_MODE)var modeCreator=mode.createEncryptor;else{var modeCreator=mode.createDecryptor;this._minBufferSize=1}this._mode=modeCreator.call(mode,this,iv&&iv.words)},_doProcessBlock:function(words,offset){this._mode.processBlock(words,offset)},_doFinalize:function(){var padding=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){padding.pad(this._data,this.blockSize);var finalProcessedBlocks=this._process(!0)}else{var finalProcessedBlocks=this._process(!0);padding.unpad(finalProcessedBlocks)}return finalProcessedBlocks},blockSize:4}),CipherParams=C_lib.CipherParams=Base.extend({init:function(cipherParams){this.mixIn(cipherParams)},toString:function(formatter){return(formatter||this.formatter).stringify(this)}}),C_format=C.format={},OpenSSLFormatter=C_format.OpenSSL={stringify:function(cipherParams){var ciphertext=cipherParams.ciphertext,salt=cipherParams.salt;if(salt)var wordArray=WordArray.create([1398893684,1701076831]).concat(salt).concat(ciphertext);else var wordArray=ciphertext;return wordArray.toString(Base64)},parse:function(openSSLStr){var ciphertext=Base64.parse(openSSLStr),ciphertextWords=ciphertext.words;if(1398893684==ciphertextWords[0]&&1701076831==ciphertextWords[1]){var salt=WordArray.create(ciphertextWords.slice(2,4));ciphertextWords.splice(0,4),ciphertext.sigBytes-=16}return CipherParams.create({ciphertext:ciphertext,salt:salt})}},SerializableCipher=C_lib.SerializableCipher=Base.extend({cfg:Base.extend({format:OpenSSLFormatter}),encrypt:function(cipher,message,key,cfg){cfg=this.cfg.extend(cfg);var encryptor=cipher.createEncryptor(key,cfg),ciphertext=encryptor.finalize(message),cipherCfg=encryptor.cfg;return CipherParams.create({ciphertext:ciphertext,key:key,iv:cipherCfg.iv,algorithm:cipher,mode:cipherCfg.mode,padding:cipherCfg.padding,blockSize:cipher.blockSize,formatter:cfg.format})},decrypt:function(cipher,ciphertext,key,cfg){cfg=this.cfg.extend(cfg),ciphertext=this._parse(ciphertext,cfg.format);var plaintext=cipher.createDecryptor(key,cfg).finalize(ciphertext.ciphertext);return plaintext},_parse:function(ciphertext,format){return"string"==typeof ciphertext?format.parse(ciphertext,this):ciphertext}}),C_kdf=C.kdf={},OpenSSLKdf=C_kdf.OpenSSL={execute:function(password,keySize,ivSize,salt){salt||(salt=WordArray.random(8));var key=EvpKDF.create({keySize:keySize+ivSize}).compute(password,salt),iv=WordArray.create(key.words.slice(keySize),4*ivSize);return key.sigBytes=4*keySize,CipherParams.create({key:key,iv:iv,salt:salt})}},PasswordBasedCipher=C_lib.PasswordBasedCipher=SerializableCipher.extend({cfg:SerializableCipher.cfg.extend({kdf:OpenSSLKdf}),encrypt:function(cipher,message,password,cfg){cfg=this.cfg.extend(cfg);var derivedParams=cfg.kdf.execute(password,cipher.keySize,cipher.ivSize);cfg.iv=derivedParams.iv;var ciphertext=SerializableCipher.encrypt.call(this,cipher,message,derivedParams.key,cfg);return ciphertext.mixIn(derivedParams),ciphertext},decrypt:function(cipher,ciphertext,password,cfg){cfg=this.cfg.extend(cfg),ciphertext=this._parse(ciphertext,cfg.format);var derivedParams=cfg.kdf.execute(password,cipher.keySize,cipher.ivSize,ciphertext.salt);cfg.iv=derivedParams.iv;var plaintext=SerializableCipher.decrypt.call(this,cipher,ciphertext,derivedParams.key,cfg);return plaintext}})}(),CryptoJS.mode.ECB=function(){var ECB=CryptoJS.lib.BlockCipherMode.extend();return ECB.Encryptor=ECB.extend({processBlock:function(words,offset){this._cipher.encryptBlock(words,offset)}}),ECB.Decryptor=ECB.extend({processBlock:function(words,offset){this._cipher.decryptBlock(words,offset)}}),ECB}(),function(){var C=CryptoJS,C_lib=C.lib,BlockCipher=C_lib.BlockCipher,C_algo=C.algo,SBOX=[],INV_SBOX=[],SUB_MIX_0=[],SUB_MIX_1=[],SUB_MIX_2=[],SUB_MIX_3=[],INV_SUB_MIX_0=[],INV_SUB_MIX_1=[],INV_SUB_MIX_2=[],INV_SUB_MIX_3=[];!function(){for(var d=[],i=0;i<256;i++)i<128?d[i]=i<<1:d[i]=i<<1^283;for(var x=0,xi=0,i=0;i<256;i++){var sx=xi^xi<<1^xi<<2^xi<<3^xi<<4;sx=sx>>>8^255&sx^99,SBOX[x]=sx,INV_SBOX[sx]=x;var x2=d[x],x4=d[x2],x8=d[x4],t=257*d[sx]^16843008*sx;SUB_MIX_0[x]=t<<24|t>>>8,SUB_MIX_1[x]=t<<16|t>>>16,SUB_MIX_2[x]=t<<8|t>>>24,SUB_MIX_3[x]=t;var t=16843009*x8^65537*x4^257*x2^16843008*x;INV_SUB_MIX_0[sx]=t<<24|t>>>8,INV_SUB_MIX_1[sx]=t<<16|t>>>16,INV_SUB_MIX_2[sx]=t<<8|t>>>24,INV_SUB_MIX_3[sx]=t,x?(x=x2^d[d[d[x8^x2]]],xi^=d[d[xi]]):x=xi=1}}();var RCON=[0,1,2,4,8,16,32,64,128,27,54],AES=C_algo.AES=BlockCipher.extend({_doReset:function(){for(var key=this._key,keyWords=key.words,keySize=key.sigBytes/4,nRounds=this._nRounds=keySize+6,ksRows=4*(nRounds+1),keySchedule=this._keySchedule=[],ksRow=0;ksRow6&&ksRow%keySize==4&&(t=SBOX[t>>>24]<<24|SBOX[t>>>16&255]<<16|SBOX[t>>>8&255]<<8|SBOX[255&t]):(t=t<<8|t>>>24,t=SBOX[t>>>24]<<24|SBOX[t>>>16&255]<<16|SBOX[t>>>8&255]<<8|SBOX[255&t],t^=RCON[ksRow/keySize|0]<<24),keySchedule[ksRow]=keySchedule[ksRow-keySize]^t}for(var invKeySchedule=this._invKeySchedule=[],invKsRow=0;invKsRow>>24]]^INV_SUB_MIX_1[SBOX[t>>>16&255]]^INV_SUB_MIX_2[SBOX[t>>>8&255]]^INV_SUB_MIX_3[SBOX[255&t]]}},encryptBlock:function(M,offset){this._doCryptBlock(M,offset,this._keySchedule,SUB_MIX_0,SUB_MIX_1,SUB_MIX_2,SUB_MIX_3,SBOX)},decryptBlock:function(M,offset){var t=M[offset+1];M[offset+1]=M[offset+3],M[offset+3]=t,this._doCryptBlock(M,offset,this._invKeySchedule,INV_SUB_MIX_0,INV_SUB_MIX_1,INV_SUB_MIX_2,INV_SUB_MIX_3,INV_SBOX);var t=M[offset+1];M[offset+1]=M[offset+3],M[offset+3]=t},_doCryptBlock:function(M,offset,keySchedule,SUB_MIX_0,SUB_MIX_1,SUB_MIX_2,SUB_MIX_3,SBOX){for(var nRounds=this._nRounds,s0=M[offset]^keySchedule[0],s1=M[offset+1]^keySchedule[1],s2=M[offset+2]^keySchedule[2],s3=M[offset+3]^keySchedule[3],ksRow=4,round=1;round>>24]^SUB_MIX_1[s1>>>16&255]^SUB_MIX_2[s2>>>8&255]^SUB_MIX_3[255&s3]^keySchedule[ksRow++],t1=SUB_MIX_0[s1>>>24]^SUB_MIX_1[s2>>>16&255]^SUB_MIX_2[s3>>>8&255]^SUB_MIX_3[255&s0]^keySchedule[ksRow++],t2=SUB_MIX_0[s2>>>24]^SUB_MIX_1[s3>>>16&255]^SUB_MIX_2[s0>>>8&255]^SUB_MIX_3[255&s1]^keySchedule[ksRow++],t3=SUB_MIX_0[s3>>>24]^SUB_MIX_1[s0>>>16&255]^SUB_MIX_2[s1>>>8&255]^SUB_MIX_3[255&s2]^keySchedule[ksRow++];s0=t0,s1=t1,s2=t2,s3=t3}var t0=(SBOX[s0>>>24]<<24|SBOX[s1>>>16&255]<<16|SBOX[s2>>>8&255]<<8|SBOX[255&s3])^keySchedule[ksRow++],t1=(SBOX[s1>>>24]<<24|SBOX[s2>>>16&255]<<16|SBOX[s3>>>8&255]<<8|SBOX[255&s0])^keySchedule[ksRow++],t2=(SBOX[s2>>>24]<<24|SBOX[s3>>>16&255]<<16|SBOX[s0>>>8&255]<<8|SBOX[255&s1])^keySchedule[ksRow++],t3=(SBOX[s3>>>24]<<24|SBOX[s0>>>16&255]<<16|SBOX[s1>>>8&255]<<8|SBOX[255&s2])^keySchedule[ksRow++];M[offset]=t0,M[offset+1]=t1,M[offset+2]=t2,M[offset+3]=t3},keySize:8});C.AES=BlockCipher._createHelper(AES)}(),_.extend(BI,{aesEncrypt:function(text,key){key=CryptoJS.enc.Utf8.parse(key);var cipher=CryptoJS.AES.encrypt(text,key,{mode:CryptoJS.mode.ECB,padding:CryptoJS.pad.Pkcs7}),base64Cipher=cipher.ciphertext.toString(CryptoJS.enc.Base64);return base64Cipher}})}(),!function(){function aspect(type){return function(target,methodName,advice){var exist=target[methodName],dispatcher;exist&&exist.target==target||(dispatcher=target[methodName]=function(){for(var beforeArr=dispatcher.before,args=arguments,next,l=beforeArr.length;l--;){if(next=beforeArr[l].advice.apply(this,args),next===!1)return!1;args=next||args}for(var rs=dispatcher.method.apply(this,args),afterArr=dispatcher.after,i=0,ii=afterArr.length;i127&&c<2048?(utftext+=String.fromCharCode(c>>6|192),utftext+=String.fromCharCode(63&c|128)):(utftext+=String.fromCharCode(c>>12|224),utftext+=String.fromCharCode(c>>6&63|128),utftext+=String.fromCharCode(63&c|128))}return utftext},_utf8_decode=function(utftext){for(var string="",i=0,c=0,c3=0,c2=0;i191&&c<224?(c2=utftext.charCodeAt(i+1),string+=String.fromCharCode((31&c)<<6|63&c2),i+=2):(c2=utftext.charCodeAt(i+1),c3=utftext.charCodeAt(i+2),string+=String.fromCharCode((15&c)<<12|(63&c2)<<6|63&c3),i+=3);return string};_.extend(BI,{encode:function(input){var output="",chr1,chr2,chr3,enc1,enc2,enc3,enc4,i=0;for(input=_utf8_encode(input);i>2,enc2=(3&chr1)<<4|chr2>>4,enc3=(15&chr2)<<2|chr3>>6,enc4=63&chr3,isNaN(chr2)?enc3=enc4=64:isNaN(chr3)&&(enc4=64),output=output+_keyStr.charAt(enc1)+_keyStr.charAt(enc2)+_keyStr.charAt(enc3)+_keyStr.charAt(enc4);return output},decode:function(input){var output="",chr1,chr2,chr3,enc1,enc2,enc3,enc4,i=0;for(input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");i>4,chr2=(15&enc2)<<4|enc3>>2,chr3=(3&enc3)<<6|enc4,output+=String.fromCharCode(chr1),64!=enc3&&(output+=String.fromCharCode(chr2)),64!=enc4&&(output+=String.fromCharCode(chr3));return output=_utf8_decode(output)}})}(),BI.Cache={_prefix:"bi",setUsername:function(username){localStorage.setItem(BI.Cache._prefix+".username",(username+""||"").toUpperCase())},getUsername:function(){return localStorage.getItem(BI.Cache._prefix+".username")||""},_getKeyPrefix:function(){return BI.Cache.getUsername()+"."+BI.Cache._prefix+"."},_generateKey:function(key){return BI.Cache._getKeyPrefix()+(key||"")},getItem:function(key){return localStorage.getItem(BI.Cache._generateKey(key))},setItem:function(key,value){localStorage.setItem(BI.Cache._generateKey(key),value)},removeItem:function(key){localStorage.removeItem(BI.Cache._generateKey(key))},clear:function(){for(var i=localStorage.length;i>=0;i--){var key=localStorage.key(i);key&&0===key.indexOf(BI.Cache._getKeyPrefix())&&localStorage.removeItem(key)}},keys:function(){for(var result=[],i=localStorage.length;i>=0;i--){var key=localStorage.key(i);if(key){var prefix=BI.Cache._getKeyPrefix();0===key.indexOf(prefix)&&(result[result.length]=key.substring(prefix.length))}}return result},addCookie:function(name,value,path,expiresHours){var cookieString=name+"="+escape(value);if(expiresHours&&expiresHours>0){var date=new Date;date.setTime(BI.getTime()+3600*expiresHours*1e3),cookieString=cookieString+"; expires="+date.toGMTString()}path&&(cookieString=cookieString+"; path="+path),document.cookie=cookieString},getCookie:function(name){var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");return(arr=document.cookie.match(reg))?unescape(arr[2]):null},deleteCookie:function(name,path){var date=new Date;date.setTime(BI.getTime()-1e4);var cookieString=name+"=v; expires="+date.toGMTString();path&&(cookieString=cookieString+"; path="+path),document.cookie=cookieString}},BI.CellSizeAndPositionManager=function(cellCount,cellSizeGetter,estimatedCellSize){this._cellSizeGetter=cellSizeGetter,this._cellCount=cellCount,this._estimatedCellSize=estimatedCellSize,this._cellSizeAndPositionData={},this._lastMeasuredIndex=-1},BI.CellSizeAndPositionManager.prototype={constructor:BI.CellSizeAndPositionManager,configure:function(cellCount,estimatedCellSize){this._cellCount=cellCount,this._estimatedCellSize=estimatedCellSize},getCellCount:function(){return this._cellCount},getEstimatedCellSize:function(){return this._estimatedCellSize},getLastMeasuredIndex:function(){return this._lastMeasuredIndex},getSizeAndPositionOfCell:function(index){if(!(index<0||index>=this._cellCount)){if(index>this._lastMeasuredIndex){for(var lastMeasuredCellSizeAndPosition=this.getSizeAndPositionOfLastMeasuredCell(),offset=lastMeasuredCellSizeAndPosition.offset+lastMeasuredCellSizeAndPosition.size,i=this._lastMeasuredIndex+1;i<=index;i++){var size=this._cellSizeGetter(i);null==size||isNaN(size)||(this._cellSizeAndPositionData[i]={offset:offset,size:size},offset+=size)}this._lastMeasuredIndex=index}return this._cellSizeAndPositionData[index]}},getSizeAndPositionOfLastMeasuredCell:function(){return this._lastMeasuredIndex>=0?this._cellSizeAndPositionData[this._lastMeasuredIndex]:{offset:0,size:0}},getTotalSize:function(){var lastMeasuredCellSizeAndPosition=this.getSizeAndPositionOfLastMeasuredCell();return lastMeasuredCellSizeAndPosition.offset+lastMeasuredCellSizeAndPosition.size+(this._cellCount-this._lastMeasuredIndex-1)*this._estimatedCellSize},getUpdatedOffsetForIndex:function(align,containerSize,currentOffset,targetIndex){var datum=this.getSizeAndPositionOfCell(targetIndex),maxOffset=datum.offset,minOffset=maxOffset-containerSize+datum.size,idealOffset;switch(align){case"start":idealOffset=maxOffset;break;case"end":idealOffset=minOffset;break;case"center":idealOffset=maxOffset-(containerSize-datum.size)/2;break;default:idealOffset=Math.max(minOffset,Math.min(maxOffset,currentOffset))}var totalSize=this.getTotalSize();return Math.max(0,Math.min(totalSize-containerSize,idealOffset))},getVisibleCellRange:function(containerSize,offset){var totalSize=this.getTotalSize();if(0===totalSize)return{};var maxOffset=offset+containerSize,start=this._findNearestCell(offset),datum=this.getSizeAndPositionOfCell(start);offset=datum.offset+datum.size;for(var stop=start;offsetoffset&&(high=middle-1)}if(low>0)return low-1},_exponentialSearch:function(index,offset){for(var interval=1;index=offset?this._binarySearch(lastMeasuredIndex,0,offset):this._exponentialSearch(lastMeasuredIndex,offset)}}},BI.ScalingCellSizeAndPositionManager=function(cellCount,cellSizeGetter,estimatedCellSize,maxScrollSize){this._cellSizeAndPositionManager=new BI.CellSizeAndPositionManager(cellCount,cellSizeGetter,estimatedCellSize),this._maxScrollSize=maxScrollSize||1e7},BI.ScalingCellSizeAndPositionManager.prototype={constructor:BI.ScalingCellSizeAndPositionManager,configure:function(){this._cellSizeAndPositionManager.configure.apply(this._cellSizeAndPositionManager,arguments)},getCellCount:function(){return this._cellSizeAndPositionManager.getCellCount()},getEstimatedCellSize:function(){return this._cellSizeAndPositionManager.getEstimatedCellSize()},getLastMeasuredIndex:function(){return this._cellSizeAndPositionManager.getLastMeasuredIndex()},getOffsetAdjustment:function(containerSize,offset){var totalSize=this._cellSizeAndPositionManager.getTotalSize(),safeTotalSize=this.getTotalSize(),offsetPercentage=this._getOffsetPercentage(containerSize,offset,safeTotalSize);return Math.round(offsetPercentage*(safeTotalSize-totalSize))},getSizeAndPositionOfCell:function(index){return this._cellSizeAndPositionManager.getSizeAndPositionOfCell(index)},getSizeAndPositionOfLastMeasuredCell:function(){return this._cellSizeAndPositionManager.getSizeAndPositionOfLastMeasuredCell()},getTotalSize:function(){return Math.min(this._maxScrollSize,this._cellSizeAndPositionManager.getTotalSize())},getUpdatedOffsetForIndex:function(align,containerSize,currentOffset,targetIndex){currentOffset=this._safeOffsetToOffset(containerSize,currentOffset);var offset=this._cellSizeAndPositionManager.getUpdatedOffsetForIndex(align,containerSize,currentOffset,targetIndex);return this._offsetToSafeOffset(containerSize,offset)},getVisibleCellRange:function(containerSize,offset){return offset=this._safeOffsetToOffset(containerSize,offset),this._cellSizeAndPositionManager.getVisibleCellRange(containerSize,offset)},resetCell:function(index){this._cellSizeAndPositionManager.resetCell(index)},_getOffsetPercentage:function(containerSize,offset,totalSize){return totalSize<=containerSize?0:offset/(totalSize-containerSize)},_offsetToSafeOffset:function(containerSize,offset){var totalSize=this._cellSizeAndPositionManager.getTotalSize(),safeTotalSize=this.getTotalSize();if(totalSize===safeTotalSize)return offset;var offsetPercentage=this._getOffsetPercentage(containerSize,offset,totalSize);return Math.round(offsetPercentage*(safeTotalSize-containerSize))},_safeOffsetToOffset:function(containerSize,offset){var totalSize=this._cellSizeAndPositionManager.getTotalSize(),safeTotalSize=this.getTotalSize();if(totalSize===safeTotalSize)return offset;var offsetPercentage=this._getOffsetPercentage(containerSize,offset,safeTotalSize);return Math.round(offsetPercentage*(totalSize-containerSize))}},!function(){var _ChineseFirstPY="YDYQSXMWZSSXJBYMGCCZQPSSQBYCDSCDQLDYLYBSSJGYZZJJFKCCLZDHWDWZJLJPFYYNWJJTMYHZWZHFLZPPQHGSCYYYNJQYXXGJHHSDSJNKKTMOMLCRXYPSNQSECCQZGGLLYJLMYZZSECYKYYHQWJSSGGYXYZYJWWKDJHYCHMYXJTLXJYQBYXZLDWRDJRWYSRLDZJPCBZJJBRCFTLECZSTZFXXZHTRQHYBDLYCZSSYMMRFMYQZPWWJJYFCRWFDFZQPYDDWYXKYJAWJFFXYPSFTZYHHYZYSWCJYXSCLCXXWZZXNBGNNXBXLZSZSBSGPYSYZDHMDZBQBZCWDZZYYTZHBTSYYBZGNTNXQYWQSKBPHHLXGYBFMJEBJHHGQTJCYSXSTKZHLYCKGLYSMZXYALMELDCCXGZYRJXSDLTYZCQKCNNJWHJTZZCQLJSTSTBNXBTYXCEQXGKWJYFLZQLYHYXSPSFXLMPBYSXXXYDJCZYLLLSJXFHJXPJBTFFYABYXBHZZBJYZLWLCZGGBTSSMDTJZXPTHYQTGLJSCQFZKJZJQNLZWLSLHDZBWJNCJZYZSQQYCQYRZCJJWYBRTWPYFTWEXCSKDZCTBZHYZZYYJXZCFFZZMJYXXSDZZOTTBZLQWFCKSZSXFYRLNYJMBDTHJXSQQCCSBXYYTSYFBXDZTGBCNSLCYZZPSAZYZZSCJCSHZQYDXLBPJLLMQXTYDZXSQJTZPXLCGLQTZWJBHCTSYJSFXYEJJTLBGXSXJMYJQQPFZASYJNTYDJXKJCDJSZCBARTDCLYJQMWNQNCLLLKBYBZZSYHQQLTWLCCXTXLLZNTYLNEWYZYXCZXXGRKRMTCNDNJTSYYSSDQDGHSDBJGHRWRQLYBGLXHLGTGXBQJDZPYJSJYJCTMRNYMGRZJCZGJMZMGXMPRYXKJNYMSGMZJYMKMFXMLDTGFBHCJHKYLPFMDXLQJJSMTQGZSJLQDLDGJYCALCMZCSDJLLNXDJFFFFJCZFMZFFPFKHKGDPSXKTACJDHHZDDCRRCFQYJKQCCWJDXHWJLYLLZGCFCQDSMLZPBJJPLSBCJGGDCKKDEZSQCCKJGCGKDJTJDLZYCXKLQSCGJCLTFPCQCZGWPJDQYZJJBYJHSJDZWGFSJGZKQCCZLLPSPKJGQJHZZLJPLGJGJJTHJJYJZCZMLZLYQBGJWMLJKXZDZNJQSYZMLJLLJKYWXMKJLHSKJGBMCLYYMKXJQLBMLLKMDXXKWYXYSLMLPSJQQJQXYXFJTJDXMXXLLCXQBSYJBGWYMBGGBCYXPJYGPEPFGDJGBHBNSQJYZJKJKHXQFGQZKFHYGKHDKLLSDJQXPQYKYBNQSXQNSZSWHBSXWHXWBZZXDMNSJBSBKBBZKLYLXGWXDRWYQZMYWSJQLCJXXJXKJEQXSCYETLZHLYYYSDZPAQYZCMTLSHTZCFYZYXYLJSDCJQAGYSLCQLYYYSHMRQQKLDXZSCSSSYDYCJYSFSJBFRSSZQSBXXPXJYSDRCKGJLGDKZJZBDKTCSYQPYHSTCLDJDHMXMCGXYZHJDDTMHLTXZXYLYMOHYJCLTYFBQQXPFBDFHHTKSQHZYYWCNXXCRWHOWGYJLEGWDQCWGFJYCSNTMYTOLBYGWQWESJPWNMLRYDZSZTXYQPZGCWXHNGPYXSHMYQJXZTDPPBFYHZHTJYFDZWKGKZBLDNTSXHQEEGZZYLZMMZYJZGXZXKHKSTXNXXWYLYAPSTHXDWHZYMPXAGKYDXBHNHXKDPJNMYHYLPMGOCSLNZHKXXLPZZLBMLSFBHHGYGYYGGBHSCYAQTYWLXTZQCEZYDQDQMMHTKLLSZHLSJZWFYHQSWSCWLQAZYNYTLSXTHAZNKZZSZZLAXXZWWCTGQQTDDYZTCCHYQZFLXPSLZYGPZSZNGLNDQTBDLXGTCTAJDKYWNSYZLJHHZZCWNYYZYWMHYCHHYXHJKZWSXHZYXLYSKQYSPSLYZWMYPPKBYGLKZHTYXAXQSYSHXASMCHKDSCRSWJPWXSGZJLWWSCHSJHSQNHCSEGNDAQTBAALZZMSSTDQJCJKTSCJAXPLGGXHHGXXZCXPDMMHLDGTYBYSJMXHMRCPXXJZCKZXSHMLQXXTTHXWZFKHCCZDYTCJYXQHLXDHYPJQXYLSYYDZOZJNYXQEZYSQYAYXWYPDGXDDXSPPYZNDLTWRHXYDXZZJHTCXMCZLHPYYYYMHZLLHNXMYLLLMDCPPXHMXDKYCYRDLTXJCHHZZXZLCCLYLNZSHZJZZLNNRLWHYQSNJHXYNTTTKYJPYCHHYEGKCTTWLGQRLGGTGTYGYHPYHYLQYQGCWYQKPYYYTTTTLHYHLLTYTTSPLKYZXGZWGPYDSSZZDQXSKCQNMJJZZBXYQMJRTFFBTKHZKBXLJJKDXJTLBWFZPPTKQTZTGPDGNTPJYFALQMKGXBDCLZFHZCLLLLADPMXDJHLCCLGYHDZFGYDDGCYYFGYDXKSSEBDHYKDKDKHNAXXYBPBYYHXZQGAFFQYJXDMLJCSQZLLPCHBSXGJYNDYBYQSPZWJLZKSDDTACTBXZDYZYPJZQSJNKKTKNJDJGYYPGTLFYQKASDNTCYHBLWDZHBBYDWJRYGKZYHEYYFJMSDTYFZJJHGCXPLXHLDWXXJKYTCYKSSSMTWCTTQZLPBSZDZWZXGZAGYKTYWXLHLSPBCLLOQMMZSSLCMBJCSZZKYDCZJGQQDSMCYTZQQLWZQZXSSFPTTFQMDDZDSHDTDWFHTDYZJYQJQKYPBDJYYXTLJHDRQXXXHAYDHRJLKLYTWHLLRLLRCXYLBWSRSZZSYMKZZHHKYHXKSMDSYDYCJPBZBSQLFCXXXNXKXWYWSDZYQOGGQMMYHCDZTTFJYYBGSTTTYBYKJDHKYXBELHTYPJQNFXFDYKZHQKZBYJTZBXHFDXKDASWTAWAJLDYJSFHBLDNNTNQJTJNCHXFJSRFWHZFMDRYJYJWZPDJKZYJYMPCYZNYNXFBYTFYFWYGDBNZZZDNYTXZEMMQBSQEHXFZMBMFLZZSRXYMJGSXWZJSPRYDJSJGXHJJGLJJYNZZJXHGXKYMLPYYYCXYTWQZSWHWLYRJLPXSLSXMFSWWKLCTNXNYNPSJSZHDZEPTXMYYWXYYSYWLXJQZQXZDCLEEELMCPJPCLWBXSQHFWWTFFJTNQJHJQDXHWLBYZNFJLALKYYJLDXHHYCSTYYWNRJYXYWTRMDRQHWQCMFJDYZMHMYYXJWMYZQZXTLMRSPWWCHAQBXYGZYPXYYRRCLMPYMGKSJSZYSRMYJSNXTPLNBAPPYPYLXYYZKYNLDZYJZCZNNLMZHHARQMPGWQTZMXXMLLHGDZXYHXKYXYCJMFFYYHJFSBSSQLXXNDYCANNMTCJCYPRRNYTYQNYYMBMSXNDLYLYSLJRLXYSXQMLLYZLZJJJKYZZCSFBZXXMSTBJGNXYZHLXNMCWSCYZYFZLXBRNNNYLBNRTGZQYSATSWRYHYJZMZDHZGZDWYBSSCSKXSYHYTXXGCQGXZZSHYXJSCRHMKKBXCZJYJYMKQHZJFNBHMQHYSNJNZYBKNQMCLGQHWLZNZSWXKHLJHYYBQLBFCDSXDLDSPFZPSKJYZWZXZDDXJSMMEGJSCSSMGCLXXKYYYLNYPWWWGYDKZJGGGZGGSYCKNJWNJPCXBJJTQTJWDSSPJXZXNZXUMELPXFSXTLLXCLJXJJLJZXCTPSWXLYDHLYQRWHSYCSQYYBYAYWJJJQFWQCQQCJQGXALDBZZYJGKGXPLTZYFXJLTPADKYQHPMATLCPDCKBMTXYBHKLENXDLEEGQDYMSAWHZMLJTWYGXLYQZLJEEYYBQQFFNLYXRDSCTGJGXYYNKLLYQKCCTLHJLQMKKZGCYYGLLLJDZGYDHZWXPYSJBZKDZGYZZHYWYFQYTYZSZYEZZLYMHJJHTSMQWYZLKYYWZCSRKQYTLTDXWCTYJKLWSQZWBDCQYNCJSRSZJLKCDCDTLZZZACQQZZDDXYPLXZBQJYLZLLLQDDZQJYJYJZYXNYYYNYJXKXDAZWYRDLJYYYRJLXLLDYXJCYWYWNQCCLDDNYYYNYCKCZHXXCCLGZQJGKWPPCQQJYSBZZXYJSQPXJPZBSBDSFNSFPZXHDWZTDWPPTFLZZBZDMYYPQJRSDZSQZSQXBDGCPZSWDWCSQZGMDHZXMWWFYBPDGPHTMJTHZSMMBGZMBZJCFZWFZBBZMQCFMBDMCJXLGPNJBBXGYHYYJGPTZGZMQBQTCGYXJXLWZKYDPDYMGCFTPFXYZTZXDZXTGKMTYBBCLBJASKYTSSQYYMSZXFJEWLXLLSZBQJJJAKLYLXLYCCTSXMCWFKKKBSXLLLLJYXTYLTJYYTDPJHNHNNKBYQNFQYYZBYYESSESSGDYHFHWTCJBSDZZTFDMXHCNJZYMQWSRYJDZJQPDQBBSTJGGFBKJBXTGQHNGWJXJGDLLTHZHHYYYYYYSXWTYYYCCBDBPYPZYCCZYJPZYWCBDLFWZCWJDXXHYHLHWZZXJTCZLCDPXUJCZZZLYXJJTXPHFXWPYWXZPTDZZBDZCYHJHMLXBQXSBYLRDTGJRRCTTTHYTCZWMXFYTWWZCWJWXJYWCSKYBZSCCTZQNHXNWXXKHKFHTSWOCCJYBCMPZZYKBNNZPBZHHZDLSYDDYTYFJPXYNGFXBYQXCBHXCPSXTYZDMKYSNXSXLHKMZXLYHDHKWHXXSSKQYHHCJYXGLHZXCSNHEKDTGZXQYPKDHEXTYKCNYMYYYPKQYYYKXZLTHJQTBYQHXBMYHSQCKWWYLLHCYYLNNEQXQWMCFBDCCMLJGGXDQKTLXKGNQCDGZJWYJJLYHHQTTTNWCHMXCXWHWSZJYDJCCDBQCDGDNYXZTHCQRXCBHZTQCBXWGQWYYBXHMBYMYQTYEXMQKYAQYRGYZSLFYKKQHYSSQYSHJGJCNXKZYCXSBXYXHYYLSTYCXQTHYSMGSCPMMGCCCCCMTZTASMGQZJHKLOSQYLSWTMXSYQKDZLJQQYPLSYCZTCQQPBBQJZCLPKHQZYYXXDTDDTSJCXFFLLCHQXMJLWCJCXTSPYCXNDTJSHJWXDQQJSKXYAMYLSJHMLALYKXCYYDMNMDQMXMCZNNCYBZKKYFLMCHCMLHXRCJJHSYLNMTJZGZGYWJXSRXCWJGJQHQZDQJDCJJZKJKGDZQGJJYJYLXZXXCDQHHHEYTMHLFSBDJSYYSHFYSTCZQLPBDRFRZTZYKYWHSZYQKWDQZRKMSYNBCRXQBJYFAZPZZEDZCJYWBCJWHYJBQSZYWRYSZPTDKZPFPBNZTKLQYHBBZPNPPTYZZYBQNYDCPJMMCYCQMCYFZZDCMNLFPBPLNGQJTBTTNJZPZBBZNJKLJQYLNBZQHKSJZNGGQSZZKYXSHPZSNBCGZKDDZQANZHJKDRTLZLSWJLJZLYWTJNDJZJHXYAYNCBGTZCSSQMNJPJYTYSWXZFKWJQTKHTZPLBHSNJZSYZBWZZZZLSYLSBJHDWWQPSLMMFBJDWAQYZTCJTBNNWZXQXCDSLQGDSDPDZHJTQQPSWLYYJZLGYXYZLCTCBJTKTYCZJTQKBSJLGMGZDMCSGPYNJZYQYYKNXRPWSZXMTNCSZZYXYBYHYZAXYWQCJTLLCKJJTJHGDXDXYQYZZBYWDLWQCGLZGJGQRQZCZSSBCRPCSKYDZNXJSQGXSSJMYDNSTZTPBDLTKZWXQWQTZEXNQCZGWEZKSSBYBRTSSSLCCGBPSZQSZLCCGLLLZXHZQTHCZMQGYZQZNMCOCSZJMMZSQPJYGQLJYJPPLDXRGZYXCCSXHSHGTZNLZWZKJCXTCFCJXLBMQBCZZWPQDNHXLJCTHYZLGYLNLSZZPCXDSCQQHJQKSXZPBAJYEMSMJTZDXLCJYRYYNWJBNGZZTMJXLTBSLYRZPYLSSCNXPHLLHYLLQQZQLXYMRSYCXZLMMCZLTZSDWTJJLLNZGGQXPFSKYGYGHBFZPDKMWGHCXMSGDXJMCJZDYCABXJDLNBCDQYGSKYDQTXDJJYXMSZQAZDZFSLQXYJSJZYLBTXXWXQQZBJZUFBBLYLWDSLJHXJYZJWTDJCZFQZQZZDZSXZZQLZCDZFJHYSPYMPQZMLPPLFFXJJNZZYLSJEYQZFPFZKSYWJJJHRDJZZXTXXGLGHYDXCSKYSWMMZCWYBAZBJKSHFHJCXMHFQHYXXYZFTSJYZFXYXPZLCHMZMBXHZZSXYFYMNCWDABAZLXKTCSHHXKXJJZJSTHYGXSXYYHHHJWXKZXSSBZZWHHHCWTZZZPJXSNXQQJGZYZYWLLCWXZFXXYXYHXMKYYSWSQMNLNAYCYSPMJKHWCQHYLAJJMZXHMMCNZHBHXCLXTJPLTXYJHDYYLTTXFSZHYXXSJBJYAYRSMXYPLCKDUYHLXRLNLLSTYZYYQYGYHHSCCSMZCTZQXKYQFPYYRPFFLKQUNTSZLLZMWWTCQQYZWTLLMLMPWMBZSSTZRBPDDTLQJJBXZCSRZQQYGWCSXFWZLXCCRSZDZMCYGGDZQSGTJSWLJMYMMZYHFBJDGYXCCPSHXNZCSBSJYJGJMPPWAFFYFNXHYZXZYLREMZGZCYZSSZDLLJCSQFNXZKPTXZGXJJGFMYYYSNBTYLBNLHPFZDCYFBMGQRRSSSZXYSGTZRNYDZZCDGPJAFJFZKNZBLCZSZPSGCYCJSZLMLRSZBZZLDLSLLYSXSQZQLYXZLSKKBRXBRBZCYCXZZZEEYFGKLZLYYHGZSGZLFJHGTGWKRAAJYZKZQTSSHJJXDCYZUYJLZYRZDQQHGJZXSSZBYKJPBFRTJXLLFQWJHYLQTYMBLPZDXTZYGBDHZZRBGXHWNJTJXLKSCFSMWLSDQYSJTXKZSCFWJLBXFTZLLJZLLQBLSQMQQCGCZFPBPHZCZJLPYYGGDTGWDCFCZQYYYQYSSCLXZSKLZZZGFFCQNWGLHQYZJJCZLQZZYJPJZZBPDCCMHJGXDQDGDLZQMFGPSYTSDYFWWDJZJYSXYYCZCYHZWPBYKXRYLYBHKJKSFXTZJMMCKHLLTNYYMSYXYZPYJQYCSYCWMTJJKQYRHLLQXPSGTLYYCLJSCPXJYZFNMLRGJJTYZBXYZMSJYJHHFZQMSYXRSZCWTLRTQZSSTKXGQKGSPTGCZNJSJCQCXHMXGGZTQYDJKZDLBZSXJLHYQGGGTHQSZPYHJHHGYYGKGGCWJZZYLCZLXQSFTGZSLLLMLJSKCTBLLZZSZMMNYTPZSXQHJCJYQXYZXZQZCPSHKZZYSXCDFGMWQRLLQXRFZTLYSTCTMJCXJJXHJNXTNRZTZFQYHQGLLGCXSZSJDJLJCYDSJTLNYXHSZXCGJZYQPYLFHDJSBPCCZHJJJQZJQDYBSSLLCMYTTMQTBHJQNNYGKYRQYQMZGCJKPDCGMYZHQLLSLLCLMHOLZGDYYFZSLJCQZLYLZQJESHNYLLJXGJXLYSYYYXNBZLJSSZCQQCJYLLZLTJYLLZLLBNYLGQCHXYYXOXCXQKYJXXXYKLXSXXYQXCYKQXQCSGYXXYQXYGYTQOHXHXPYXXXULCYEYCHZZCBWQBBWJQZSCSZSSLZYLKDESJZWMYMCYTSDSXXSCJPQQSQYLYYZYCMDJDZYWCBTJSYDJKCYDDJLBDJJSODZYSYXQQYXDHHGQQYQHDYXWGMMMAJDYBBBPPBCMUUPLJZSMTXERXJMHQNUTPJDCBSSMSSSTKJTSSMMTRCPLZSZMLQDSDMJMQPNQDXCFYNBFSDQXYXHYAYKQYDDLQYYYSSZBYDSLNTFQTZQPZMCHDHCZCWFDXTMYQSPHQYYXSRGJCWTJTZZQMGWJJTJHTQJBBHWZPXXHYQFXXQYWYYHYSCDYDHHQMNMTMWCPBSZPPZZGLMZFOLLCFWHMMSJZTTDHZZYFFYTZZGZYSKYJXQYJZQBHMBZZLYGHGFMSHPZFZSNCLPBQSNJXZSLXXFPMTYJYGBXLLDLXPZJYZJYHHZCYWHJYLSJEXFSZZYWXKZJLUYDTMLYMQJPWXYHXSKTQJEZRPXXZHHMHWQPWQLYJJQJJZSZCPHJLCHHNXJLQWZJHBMZYXBDHHYPZLHLHLGFWLCHYYTLHJXCJMSCPXSTKPNHQXSRTYXXTESYJCTLSSLSTDLLLWWYHDHRJZSFGXTSYCZYNYHTDHWJSLHTZDQDJZXXQHGYLTZPHCSQFCLNJTCLZPFSTPDYNYLGMJLLYCQHYSSHCHYLHQYQTMZYPBYWRFQYKQSYSLZDQJMPXYYSSRHZJNYWTQDFZBWWTWWRXCWHGYHXMKMYYYQMSMZHNGCEPMLQQMTCWCTMMPXJPJJHFXYYZSXZHTYBMSTSYJTTQQQYYLHYNPYQZLCYZHZWSMYLKFJXLWGXYPJYTYSYXYMZCKTTWLKSMZSYLMPWLZWXWQZSSAQSYXYRHSSNTSRAPXCPWCMGDXHXZDZYFJHGZTTSBJHGYZSZYSMYCLLLXBTYXHBBZJKSSDMALXHYCFYGMQYPJYCQXJLLLJGSLZGQLYCJCCZOTYXMTMTTLLWTGPXYMZMKLPSZZZXHKQYSXCTYJZYHXSHYXZKXLZWPSQPYHJWPJPWXQQYLXSDHMRSLZZYZWTTCYXYSZZSHBSCCSTPLWSSCJCHNLCGCHSSPHYLHFHHXJSXYLLNYLSZDHZXYLSXLWZYKCLDYAXZCMDDYSPJTQJZLNWQPSSSWCTSTSZLBLNXSMNYYMJQBQHRZWTYYDCHQLXKPZWBGQYBKFCMZWPZLLYYLSZYDWHXPSBCMLJBSCGBHXLQHYRLJXYSWXWXZSLDFHLSLYNJLZYFLYJYCDRJLFSYZFSLLCQYQFGJYHYXZLYLMSTDJCYHBZLLNWLXXYGYYHSMGDHXXHHLZZJZXCZZZCYQZFNGWPYLCPKPYYPMCLQKDGXZGGWQBDXZZKZFBXXLZXJTPJPTTBYTSZZDWSLCHZHSLTYXHQLHYXXXYYZYSWTXZKHLXZXZPYHGCHKCFSYHUTJRLXFJXPTZTWHPLYXFCRHXSHXKYXXYHZQDXQWULHYHMJTBFLKHTXCWHJFWJCFPQRYQXCYYYQYGRPYWSGSUNGWCHKZDXYFLXXHJJBYZWTSXXNCYJJYMSWZJQRMHXZWFQSYLZJZGBHYNSLBGTTCSYBYXXWXYHXYYXNSQYXMQYWRGYQLXBBZLJSYLPSYTJZYHYZAWLRORJMKSCZJXXXYXCHDYXRYXXJDTSQFXLYLTSFFYXLMTYJMJUYYYXLTZCSXQZQHZXLYYXZHDNBRXXXJCTYHLBRLMBRLLAXKYLLLJLYXXLYCRYLCJTGJCMTLZLLCYZZPZPCYAWHJJFYBDYYZSMPCKZDQYQPBPCJPDCYZMDPBCYYDYCNNPLMTMLRMFMMGWYZBSJGYGSMZQQQZTXMKQWGXLLPJGZBQCDJJJFPKJKCXBLJMSWMDTQJXLDLPPBXCWRCQFBFQJCZAHZGMYKPHYYHZYKNDKZMBPJYXPXYHLFPNYYGXJDBKXNXHJMZJXSTRSTLDXSKZYSYBZXJLXYSLBZYSLHXJPFXPQNBYLLJQKYGZMCYZZYMCCSLCLHZFWFWYXZMWSXTYNXJHPYYMCYSPMHYSMYDYSHQYZCHMJJMZCAAGCFJBBHPLYZYLXXSDJGXDHKXXTXXNBHRMLYJSLTXMRHNLXQJXYZLLYSWQGDLBJHDCGJYQYCMHWFMJYBMBYJYJWYMDPWHXQLDYGPDFXXBCGJSPCKRSSYZJMSLBZZJFLJJJLGXZGYXYXLSZQYXBEXYXHGCXBPLDYHWETTWWCJMBTXCHXYQXLLXFLYXLLJLSSFWDPZSMYJCLMWYTCZPCHQEKCQBWLCQYDPLQPPQZQFJQDJHYMMCXTXDRMJWRHXCJZYLQXDYYNHYYHRSLSRSYWWZJYMTLTLLGTQCJZYABTCKZCJYCCQLJZQXALMZYHYWLWDXZXQDLLQSHGPJFJLJHJABCQZDJGTKHSSTCYJLPSWZLXZXRWGLDLZRLZXTGSLLLLZLYXXWGDZYGBDPHZPBRLWSXQBPFDWOFMWHLYPCBJCCLDMBZPBZZLCYQXLDOMZBLZWPDWYYGDSTTHCSQSCCRSSSYSLFYBFNTYJSZDFNDPDHDZZMBBLSLCMYFFGTJJQWFTMTPJWFNLBZCMMJTGBDZLQLPYFHYYMJYLSDCHDZJWJCCTLJCLDTLJJCPDDSQDSSZYBNDBJLGGJZXSXNLYCYBJXQYCBYLZCFZPPGKCXZDZFZTJJFJSJXZBNZYJQTTYJYHTYCZHYMDJXTTMPXSPLZCDWSLSHXYPZGTFMLCJTYCBPMGDKWYCYZCDSZZYHFLYCTYGWHKJYYLSJCXGYWJCBLLCSNDDBTZBSCLYZCZZSSQDLLMQYYHFSLQLLXFTYHABXGWNYWYYPLLSDLDLLBJCYXJZMLHLJDXYYQYTDLLLBUGBFDFBBQJZZMDPJHGCLGMJJPGAEHHBWCQXAXHHHZCHXYPHJAXHLPHJPGPZJQCQZGJJZZUZDMQYYBZZPHYHYBWHAZYJHYKFGDPFQSDLZMLJXKXGALXZDAGLMDGXMWZQYXXDXXPFDMMSSYMPFMDMMKXKSYZYSHDZKXSYSMMZZZMSYDNZZCZXFPLSTMZDNMXCKJMZTYYMZMZZMSXHHDCZJEMXXKLJSTLWLSQLYJZLLZJSSDPPMHNLZJCZYHMXXHGZCJMDHXTKGRMXFWMCGMWKDTKSXQMMMFZZYDKMSCLCMPCGMHSPXQPZDSSLCXKYXTWLWJYAHZJGZQMCSNXYYMMPMLKJXMHLMLQMXCTKZMJQYSZJSYSZHSYJZJCDAJZYBSDQJZGWZQQXFKDMSDJLFWEHKZQKJPEYPZYSZCDWYJFFMZZYLTTDZZEFMZLBNPPLPLPEPSZALLTYLKCKQZKGENQLWAGYXYDPXLHSXQQWQCQXQCLHYXXMLYCCWLYMQYSKGCHLCJNSZKPYZKCQZQLJPDMDZHLASXLBYDWQLWDNBQCRYDDZTJYBKBWSZDXDTNPJDTCTQDFXQQMGNXECLTTBKPWSLCTYQLPWYZZKLPYGZCQQPLLKCCYLPQMZCZQCLJSLQZDJXLDDHPZQDLJJXZQDXYZQKZLJCYQDYJPPYPQYKJYRMPCBYMCXKLLZLLFQPYLLLMBSGLCYSSLRSYSQTMXYXZQZFDZUYSYZTFFMZZSMZQHZSSCCMLYXWTPZGXZJGZGSJSGKDDHTQGGZLLBJDZLCBCHYXYZHZFYWXYZYMSDBZZYJGTSMTFXQYXQSTDGSLNXDLRYZZLRYYLXQHTXSRTZNGZXBNQQZFMYKMZJBZYMKBPNLYZPBLMCNQYZZZSJZHJCTZKHYZZJRDYZHNPXGLFZTLKGJTCTSSYLLGZRZBBQZZKLPKLCZYSSUYXBJFPNJZZXCDWXZYJXZZDJJKGGRSRJKMSMZJLSJYWQSKYHQJSXPJZZZLSNSHRNYPZTWCHKLPSRZLZXYJQXQKYSJYCZTLQZYBBYBWZPQDWWYZCYTJCJXCKCWDKKZXSGKDZXWWYYJQYYTCYTDLLXWKCZKKLCCLZCQQDZLQLCSFQCHQHSFSMQZZLNBJJZBSJHTSZDYSJQJPDLZCDCWJKJZZLPYCGMZWDJJBSJQZSYZYHHXJPBJYDSSXDZNCGLQMBTSFSBPDZDLZNFGFJGFSMPXJQLMBLGQCYYXBQKDJJQYRFKZTJDHCZKLBSDZCFJTPLLJGXHYXZCSSZZXSTJYGKGCKGYOQXJPLZPBPGTGYJZGHZQZZLBJLSQFZGKQQJZGYCZBZQTLDXRJXBSXXPZXHYZYCLWDXJJHXMFDZPFZHQHQMQGKSLYHTYCGFRZGNQXCLPDLBZCSCZQLLJBLHBZCYPZZPPDYMZZSGYHCKCPZJGSLJLNSCDSLDLXBMSTLDDFJMKDJDHZLZXLSZQPQPGJLLYBDSZGQLBZLSLKYYHZTTNTJYQTZZPSZQZTLLJTYYLLQLLQYZQLBDZLSLYYZYMDFSZSNHLXZNCZQZPBWSKRFBSYZMTHBLGJPMCZZLSTLXSHTCSYZLZBLFEQHLXFLCJLYLJQCBZLZJHHSSTBRMHXZHJZCLXFNBGXGTQJCZTMSFZKJMSSNXLJKBHSJXNTNLZDNTLMSJXGZJYJCZXYJYJWRWWQNZTNFJSZPZSHZJFYRDJSFSZJZBJFZQZZHZLXFYSBZQLZSGYFTZDCSZXZJBQMSZKJRHYJZCKMJKHCHGTXKXQGLXPXFXTRTYLXJXHDTSJXHJZJXZWZLCQSBTXWXGXTXXHXFTSDKFJHZYJFJXRZSDLLLTQSQQZQWZXSYQTWGWBZCGZLLYZBCLMQQTZHZXZXLJFRMYZFLXYSQXXJKXRMQDZDMMYYBSQBHGZMWFWXGMXLZPYYTGZYCCDXYZXYWGSYJYZNBHPZJSQSYXSXRTFYZGRHZTXSZZTHCBFCLSYXZLZQMZLMPLMXZJXSFLBYZMYQHXJSXRXSQZZZSSLYFRCZJRCRXHHZXQYDYHXSJJHZCXZBTYNSYSXJBQLPXZQPYMLXZKYXLXCJLCYSXXZZLXDLLLJJYHZXGYJWKJRWYHCPSGNRZLFZWFZZNSXGXFLZSXZZZBFCSYJDBRJKRDHHGXJLJJTGXJXXSTJTJXLYXQFCSGSWMSBCTLQZZWLZZKXJMLTMJYHSDDBXGZHDLBMYJFRZFSGCLYJBPMLYSMSXLSZJQQHJZFXGFQFQBPXZGYYQXGZTCQWYLTLGWSGWHRLFSFGZJMGMGBGTJFSYZZGZYZAFLSSPMLPFLCWBJZCLJJMZLPJJLYMQDMYYYFBGYGYZMLYZDXQYXRQQQHSYYYQXYLJTYXFSFSLLGNQCYHYCWFHCCCFXPYLYPLLZYXXXXXKQHHXSHJZCFZSCZJXCPZWHHHHHAPYLQALPQAFYHXDYLUKMZQGGGDDESRNNZLTZGCHYPPYSQJJHCLLJTOLNJPZLJLHYMHEYDYDSQYCDDHGZUNDZCLZYZLLZNTNYZGSLHSLPJJBDGWXPCDUTJCKLKCLWKLLCASSTKZZDNQNTTLYYZSSYSSZZRYLJQKCQDHHCRXRZYDGRGCWCGZQFFFPPJFZYNAKRGYWYQPQXXFKJTSZZXSWZDDFBBXTBGTZKZNPZZPZXZPJSZBMQHKCYXYLDKLJNYPKYGHGDZJXXEAHPNZKZTZCMXCXMMJXNKSZQNMNLWBWWXJKYHCPSTMCSQTZJYXTPCTPDTNNPGLLLZSJLSPBLPLQHDTNJNLYYRSZFFJFQWDPHZDWMRZCCLODAXNSSNYZRESTYJWJYJDBCFXNMWTTBYLWSTSZGYBLJPXGLBOCLHPCBJLTMXZLJYLZXCLTPNCLCKXTPZJSWCYXSFYSZDKNTLBYJCYJLLSTGQCBXRYZXBXKLYLHZLQZLNZCXWJZLJZJNCJHXMNZZGJZZXTZJXYCYYCXXJYYXJJXSSSJSTSSTTPPGQTCSXWZDCSYFPTFBFHFBBLZJCLZZDBXGCXLQPXKFZFLSYLTUWBMQJHSZBMDDBCYSCCLDXYCDDQLYJJWMQLLCSGLJJSYFPYYCCYLTJANTJJPWYCMMGQYYSXDXQMZHSZXPFTWWZQSWQRFKJLZJQQYFBRXJHHFWJJZYQAZMYFRHCYYBYQWLPEXCCZSTYRLTTDMQLYKMBBGMYYJPRKZNPBSXYXBHYZDJDNGHPMFSGMWFZMFQMMBCMZZCJJLCNUXYQLMLRYGQZCYXZLWJGCJCGGMCJNFYZZJHYCPRRCMTZQZXHFQGTJXCCJEAQCRJYHPLQLSZDJRBCQHQDYRHYLYXJSYMHZYDWLDFRYHBPYDTSSCNWBXGLPZMLZZTQSSCPJMXXYCSJYTYCGHYCJWYRXXLFEMWJNMKLLSWTXHYYYNCMMCWJDQDJZGLLJWJRKHPZGGFLCCSCZMCBLTBHBQJXQDSPDJZZGHGLFQYWBZYZJLTSTDHQHCTCBCHFLQMPWDSHYYTQWCNZZJTLBYMBPDYYYXSQKXWYYFLXXNCWCXYPMAELYKKJMZZZBRXYYQJFLJPFHHHYTZZXSGQQMHSPGDZQWBWPJHZJDYSCQWZKTXXSQLZYYMYSDZGRXCKKUJLWPYSYSCSYZLRMLQSYLJXBCXTLWDQZPCYCYKPPPNSXFYZJJRCEMHSZMSXLXGLRWGCSTLRSXBZGBZGZTCPLUJLSLYLYMTXMTZPALZXPXJTJWTCYYZLBLXBZLQMYLXPGHDSLSSDMXMBDZZSXWHAMLCZCPJMCNHJYSNSYGCHSKQMZZQDLLKABLWJXSFMOCDXJRRLYQZKJMYBYQLYHETFJZFRFKSRYXFJTWDSXXSYSQJYSLYXWJHSNLXYYXHBHAWHHJZXWMYLJCSSLKYDZTXBZSYFDXGXZJKHSXXYBSSXDPYNZWRPTQZCZENYGCXQFJYKJBZMLJCMQQXUOXSLYXXLYLLJDZBTYMHPFSTTQQWLHOKYBLZZALZXQLHZWRRQHLSTMYPYXJJXMQSJFNBXYXYJXXYQYLTHYLQYFMLKLJTMLLHSZWKZHLJMLHLJKLJSTLQXYLMBHHLNLZXQJHXCFXXLHYHJJGBYZZKBXSCQDJQDSUJZYYHZHHMGSXCSYMXFEBCQWWRBPYYJQTYZCYQYQQZYHMWFFHGZFRJFCDPXNTQYZPDYKHJLFRZXPPXZDBBGZQSTLGDGYLCQMLCHHMFYWLZYXKJLYPQHSYWMQQGQZMLZJNSQXJQSYJYCBEHSXFSZPXZWFLLBCYYJDYTDTHWZSFJMQQYJLMQXXLLDTTKHHYBFPWTYYSQQWNQWLGWDEBZWCMYGCULKJXTMXMYJSXHYBRWFYMWFRXYQMXYSZTZZTFYKMLDHQDXWYYNLCRYJBLPSXCXYWLSPRRJWXHQYPHTYDNXHHMMYWYTZCSQMTSSCCDALWZTCPQPYJLLQZYJSWXMZZMMYLMXCLMXCZMXMZSQTZPPQQBLPGXQZHFLJJHYTJSRXWZXSCCDLXTYJDCQJXSLQYCLZXLZZXMXQRJMHRHZJBHMFLJLMLCLQNLDXZLLLPYPSYJYSXCQQDCMQJZZXHNPNXZMEKMXHYKYQLXSXTXJYYHWDCWDZHQYYBGYBCYSCFGPSJNZDYZZJZXRZRQJJYMCANYRJTLDPPYZBSTJKXXZYPFDWFGZZRPYMTNGXZQBYXNBUFNQKRJQZMJEGRZGYCLKXZDSKKNSXKCLJSPJYYZLQQJYBZSSQLLLKJXTBKTYLCCDDBLSPPFYLGYDTZJYQGGKQTTFZXBDKTYYHYBBFYTYYBCLPDYTGDHRYRNJSPTCSNYJQHKLLLZSLYDXXWBCJQSPXBPJZJCJDZFFXXBRMLAZHCSNDLBJDSZBLPRZTSWSBXBCLLXXLZDJZSJPYLYXXYFTFFFBHJJXGBYXJPMMMPSSJZJMTLYZJXSWXTYLEDQPJMYGQZJGDJLQJWJQLLSJGJGYGMSCLJJXDTYGJQJQJCJZCJGDZZSXQGSJGGCXHQXSNQLZZBXHSGZXCXYLJXYXYYDFQQJHJFXDHCTXJYRXYSQTJXYEFYYSSYYJXNCYZXFXMSYSZXYYSCHSHXZZZGZZZGFJDLTYLNPZGYJYZYYQZPBXQBDZTZCZYXXYHHSQXSHDHGQHJHGYWSZTMZMLHYXGEBTYLZKQWYTJZRCLEKYSTDBCYKQQSAYXCJXWWGSBHJYZYDHCSJKQCXSWXFLTYNYZPZCCZJQTZWJQDZZZQZLJJXLSBHPYXXPSXSHHEZTXFPTLQYZZXHYTXNCFZYYHXGNXMYWXTZSJPTHHGYMXMXQZXTSBCZYJYXXTYYZYPCQLMMSZMJZZLLZXGXZAAJZYXJMZXWDXZSXZDZXLEYJJZQBHZWZZZQTZPSXZTDSXJJJZNYAZPHXYYSRNQDTHZHYYKYJHDZXZLSWCLYBZYECWCYCRYLCXNHZYDZYDYJDFRJJHTRSQTXYXJRJHOJYNXELXSFSFJZGHPZSXZSZDZCQZBYYKLSGSJHCZSHDGQGXYZGXCHXZJWYQWGYHKSSEQZZNDZFKWYSSTCLZSTSYMCDHJXXYWEYXCZAYDMPXMDSXYBSQMJMZJMTZQLPJYQZCGQHXJHHLXXHLHDLDJQCLDWBSXFZZYYSCHTYTYYBHECXHYKGJPXHHYZJFXHWHBDZFYZBCAPNPGNYDMSXHMMMMAMYNBYJTMPXYYMCTHJBZYFCGTYHWPHFTWZZEZSBZEGPFMTSKFTYCMHFLLHGPZJXZJGZJYXZSBBQSCZZLZCCSTPGXMJSFTCCZJZDJXCYBZLFCJSYZFGSZLYBCWZZBYZDZYPSWYJZXZBDSYUXLZZBZFYGCZXBZHZFTPBGZGEJBSTGKDMFHYZZJHZLLZZGJQZLSFDJSSCBZGPDLFZFZSZYZYZSYGCXSNXXCHCZXTZZLJFZGQSQYXZJQDCCZTQCDXZJYQJQCHXZTDLGSCXZSYQJQTZWLQDQZTQCHQQJZYEZZZPBWKDJFCJPZTYPQYQTTYNLMBDKTJZPQZQZZFPZSBNJLGYJDXJDZZKZGQKXDLPZJTCJDQBXDJQJSTCKNXBXZMSLYJCQMTJQWWCJQNJNLLLHJCWQTBZQYDZCZPZZDZYDDCYZZZCCJTTJFZDPRRTZTJDCQTQZDTJNPLZBCLLCTZSXKJZQZPZLBZRBTJDCXFCZDBCCJJLTQQPLDCGZDBBZJCQDCJWYNLLZYZCCDWLLXWZLXRXNTQQCZXKQLSGDFQTDDGLRLAJJTKUYMKQLLTZYTDYYCZGJWYXDXFRSKSTQTENQMRKQZHHQKDLDAZFKYPBGGPZREBZZYKZZSPEGJXGYKQZZZSLYSYYYZWFQZYLZZLZHWCHKYPQGNPGBLPLRRJYXCCSYYHSFZFYBZYYTGZXYLXCZWXXZJZBLFFLGSKHYJZEYJHLPLLLLCZGXDRZELRHGKLZZYHZLYQSZZJZQLJZFLNBHGWLCZCFJYSPYXZLZLXGCCPZBLLCYBBBBUBBCBPCRNNZCZYRBFSRLDCGQYYQXYGMQZWTZYTYJXYFWTEHZZJYWLCCNTZYJJZDEDPZDZTSYQJHDYMBJNYJZLXTSSTPHNDJXXBYXQTZQDDTJTDYYTGWSCSZQFLSHLGLBCZPHDLYZJYCKWTYTYLBNYTSDSYCCTYSZYYEBHEXHQDTWNYGYCLXTSZYSTQMYGZAZCCSZZDSLZCLZRQXYYELJSBYMXSXZTEMBBLLYYLLYTDQYSHYMRQWKFKBFXNXSBYCHXBWJYHTQBPBSBWDZYLKGZSKYHXQZJXHXJXGNLJKZLYYCDXLFYFGHLJGJYBXQLYBXQPQGZTZPLNCYPXDJYQYDYMRBESJYYHKXXSTMXRCZZYWXYQYBMCLLYZHQYZWQXDBXBZWZMSLPDMYSKFMZKLZCYQYCZLQXFZZYDQZPZYGYJYZMZXDZFYFYTTQTZHGSPCZMLCCYTZXJCYTJMKSLPZHYSNZLLYTPZCTZZCKTXDHXXTQCYFKSMQCCYYAZHTJPCYLZLYJBJXTPNYLJYYNRXSYLMMNXJSMYBCSYSYLZYLXJJQYLDZLPQBFZZBLFNDXQKCZFYWHGQMRDSXYCYTXNQQJZYYPFZXDYZFPRXEJDGYQBXRCNFYYQPGHYJDYZXGRHTKYLNWDZNTSMPKLBTHBPYSZBZTJZSZZJTYYXZPHSSZZBZCZPTQFZMYFLYPYBBJQXZMXXDJMTSYSKKBJZXHJCKLPSMKYJZCXTMLJYXRZZQSLXXQPYZXMKYXXXJCLJPRMYYGADYSKQLSNDHYZKQXZYZTCGHZTLMLWZYBWSYCTBHJHJFCWZTXWYTKZLXQSHLYJZJXTMPLPYCGLTBZZTLZJCYJGDTCLKLPLLQPJMZPAPXYZLKKTKDZCZZBNZDYDYQZJYJGMCTXLTGXSZLMLHBGLKFWNWZHDXUHLFMKYSLGXDTWWFRJEJZTZHYDXYKSHWFZCQSHKTMQQHTZHYMJDJSKHXZJZBZZXYMPAGQMSTPXLSKLZYNWRTSQLSZBPSPSGZWYHTLKSSSWHZZLYYTNXJGMJSZSUFWNLSOZTXGXLSAMMLBWLDSZYLAKQCQCTMYCFJBSLXCLZZCLXXKSBZQCLHJPSQPLSXXCKSLNHPSFQQYTXYJZLQLDXZQJZDYYDJNZPTUZDSKJFSLJHYLZSQZLBTXYDGTQFDBYAZXDZHZJNHHQBYKNXJJQCZMLLJZKSPLDYCLBBLXKLELXJLBQYCXJXGCNLCQPLZLZYJTZLJGYZDZPLTQCSXFDMNYCXGBTJDCZNBGBQYQJWGKFHTNPYQZQGBKPBBYZMTJDYTBLSQMPSXTBNPDXKLEMYYCJYNZCTLDYKZZXDDXHQSHDGMZSJYCCTAYRZLPYLTLKXSLZCGGEXCLFXLKJRTLQJAQZNCMBYDKKCXGLCZJZXJHPTDJJMZQYKQSECQZDSHHADMLZFMMZBGNTJNNLGBYJBRBTMLBYJDZXLCJLPLDLPCQDHLXZLYCBLCXZZJADJLNZMMSSSMYBHBSQKBHRSXXJMXSDZNZPXLGBRHWGGFCXGMSKLLTSJYYCQLTSKYWYYHYWXBXQYWPYWYKQLSQPTNTKHQCWDQKTWPXXHCPTHTWUMSSYHBWCRWXHJMKMZNGWTMLKFGHKJYLSYYCXWHYECLQHKQHTTQKHFZLDXQWYZYYDESBPKYRZPJFYYZJCEQDZZDLATZBBFJLLCXDLMJSSXEGYGSJQXCWBXSSZPDYZCXDNYXPPZYDLYJCZPLTXLSXYZYRXCYYYDYLWWNZSAHJSYQYHGYWWAXTJZDAXYSRLTDPSSYYFNEJDXYZHLXLLLZQZSJNYQYQQXYJGHZGZCYJCHZLYCDSHWSHJZYJXCLLNXZJJYYXNFXMWFPYLCYLLABWDDHWDXJMCXZTZPMLQZHSFHZYNZTLLDYWLSLXHYMMYLMBWWKYXYADTXYLLDJPYBPWUXJMWMLLSAFDLLYFLBHHHBQQLTZJCQJLDJTFFKMMMBYTHYGDCQRDDWRQJXNBYSNWZDBYYTBJHPYBYTTJXAAHGQDQTMYSTQXKBTZPKJLZRBEQQSSMJJBDJOTGTBXPGBKTLHQXJJJCTHXQDWJLWRFWQGWSHCKRYSWGFTGYGBXSDWDWRFHWYTJJXXXJYZYSLPYYYPAYXHYDQKXSHXYXGSKQHYWFDDDPPLCJLQQEEWXKSYYKDYPLTJTHKJLTCYYHHJTTPLTZZCDLTHQKZXQYSTEEYWYYZYXXYYSTTJKLLPZMCYHQGXYHSRMBXPLLNQYDQHXSXXWGDQBSHYLLPJJJTHYJKYPPTHYYKTYEZYENMDSHLCRPQFDGFXZPSFTLJXXJBSWYYSKSFLXLPPLBBBLBSFXFYZBSJSSYLPBBFFFFSSCJDSTZSXZRYYSYFFSYZYZBJTBCTSBSDHRTJJBYTCXYJEYLXCBNEBJDSYXYKGSJZBXBYTFZWGENYHHTHZHHXFWGCSTBGXKLSXYWMTMBYXJSTZSCDYQRCYTWXZFHMYMCXLZNSDJTTTXRYCFYJSBSDYERXJLJXBBDEYNJGHXGCKGSCYMBLXJMSZNSKGXFBNBPTHFJAAFXYXFPXMYPQDTZCXZZPXRSYWZDLYBBKTYQPQJPZYPZJZNJPZJLZZFYSBTTSLMPTZRTDXQSJEHBZYLZDHLJSQMLHTXTJECXSLZZSPKTLZKQQYFSYGYWPCPQFHQHYTQXZKRSGTTSQCZLPTXCDYYZXSQZSLXLZMYCPCQBZYXHBSXLZDLTCDXTYLZJYYZPZYZLTXJSJXHLPMYTXCQRBLZSSFJZZTNJYTXMYJHLHPPLCYXQJQQKZZSCPZKSWALQSBLCCZJSXGWWWYGYKTJBBZTDKHXHKGTGPBKQYSLPXPJCKBMLLXDZSTBKLGGQKQLSBKKTFXRMDKBFTPZFRTBBRFERQGXYJPZSSTLBZTPSZQZSJDHLJQLZBPMSMMSXLQQNHKNBLRDDNXXDHDDJCYYGYLXGZLXSYGMQQGKHBPMXYXLYTQWLWGCPBMQXCYZYDRJBHTDJYHQSHTMJSBYPLWHLZFFNYPMHXXHPLTBQPFBJWQDBYGPNZTPFZJGSDDTQSHZEAWZZYLLTYYBWJKXXGHLFKXDJTMSZSQYNZGGSWQSPHTLSSKMCLZXYSZQZXNCJDQGZDLFNYKLJCJLLZLMZZNHYDSSHTHZZLZZBBHQZWWYCRZHLYQQJBEYFXXXWHSRXWQHWPSLMSSKZTTYGYQQWRSLALHMJTQJSMXQBJJZJXZYZKXBYQXBJXSHZTSFJLXMXZXFGHKZSZGGYLCLSARJYHSLLLMZXELGLXYDJYTLFBHBPNLYZFBBHPTGJKWETZHKJJXZXXGLLJLSTGSHJJYQLQZFKCGNNDJSSZFDBCTWWSEQFHQJBSAQTGYPQLBXBMMYWXGSLZHGLZGQYFLZBYFZJFRYSFMBYZHQGFWZSYFYJJPHZBYYZFFWODGRLMFTWLBZGYCQXCDJYGZYYYYTYTYDWEGAZYHXJLZYYHLRMGRXXZCLHNELJJTJTPWJYBJJBXJJTJTEEKHWSLJPLPSFYZPQQBDLQJJTYYQLYZKDKSQJYYQZLDQTGJQYZJSUCMRYQTHTEJMFCTYHYPKMHYZWJDQFHYYXWSHCTXRLJHQXHCCYYYJLTKTTYTMXGTCJTZAYYOCZLYLBSZYWJYTSJYHBYSHFJLYGJXXTMZYYLTXXYPZLXYJZYZYYPNHMYMDYYLBLHLSYYQQLLNJJYMSOYQBZGDLYXYLCQYXTSZEGXHZGLHWBLJHEYXTWQMAKBPQCGYSHHEGQCMWYYWLJYJHYYZLLJJYLHZYHMGSLJLJXCJJYCLYCJPCPZJZJMMYLCQLNQLJQJSXYJMLSZLJQLYCMMHCFMMFPQQMFYLQMCFFQMMMMHMZNFHHJGTTHHKHSLNCHHYQDXTMMQDCYZYXYQMYQYLTDCYYYZAZZCYMZYDLZFFFMMYCQZWZZMABTBYZTDMNZZGGDFTYPCGQYTTSSFFWFDTZQSSYSTWXJHXYTSXXYLBYQHWWKXHZXWZNNZZJZJJQJCCCHYYXBZXZCYZTLLCQXYNJYCYYCYNZZQYYYEWYCZDCJYCCHYJLBTZYYCQWMPWPYMLGKDLDLGKQQBGYCHJXY",oMultiDiff={ +19969:"DZ",19975:"WM",19988:"QJ",20048:"YL",20056:"SC",20060:"NM",20094:"QG",20127:"QJ",20167:"QC",20193:"YG",20250:"KH",20256:"ZC",20282:"SC",20285:"QJG",20291:"TD",20314:"YD",20315:"BF",20340:"NE",20375:"TD",20389:"YJ",20391:"CZ",20415:"PB",20446:"YS",20447:"SQ",20504:"TC",20608:"KG",20854:"QJ",20857:"ZC",20911:"PF",20985:"AW",21032:"PB",21048:"XQ",21049:"SC",21089:"YS",21119:"JC",21242:"SB",21273:"SC",21305:"YP",21306:"QO",21330:"ZC",21333:"SDC",21345:"QK",21378:"CA",21397:"SC",21414:"XS",21442:"SC",21477:"JG",21480:"TD",21484:"ZS",21494:"YX",21505:"YX",21512:"HG",21523:"XH",21537:"PB",21542:"PF",21549:"KH",21571:"E",21574:"DA",21588:"TD",21589:"O",21618:"ZC",21621:"KHA",21632:"ZJ",21654:"KG",21679:"LKG",21683:"KH",21710:"A",21719:"YH",21734:"WOE",21769:"A",21780:"WN",21804:"XH",21834:"A",21899:"ZD",21903:"RN",21908:"WO",21939:"ZC",21956:"SA",21964:"YA",21970:"TD",22003:"A",22031:"JG",22040:"XS",22060:"ZC",22066:"ZC",22079:"MH",22129:"XJ",22179:"XA",22237:"NJ",22244:"TD",22280:"JQ",22300:"YH",22313:"XW",22331:"YQ",22343:"YJ",22351:"PH",22395:"DC",22412:"TD",22484:"PB",22500:"PB",22534:"ZD",22549:"DH",22561:"PB",22612:"TD",22771:"KQ",22831:"HB",22841:"JG",22855:"QJ",22865:"XQ",23013:"ML",23081:"WM",23487:"SX",23558:"QJ",23561:"YW",23586:"YW",23614:"YW",23615:"SN",23631:"PB",23646:"ZS",23663:"ZT",23673:"YG",23762:"TD",23769:"ZS",23780:"QJ",23884:"QK",24055:"XH",24113:"DC",24162:"ZC",24191:"GA",24273:"QJ",24324:"NL",24377:"TD",24378:"QJ",24439:"PF",24554:"ZS",24683:"TD",24694:"WE",24733:"LK",24925:"TN",25094:"ZG",25100:"XQ",25103:"XH",25153:"PB",25170:"PB",25179:"KG",25203:"PB",25240:"ZS",25282:"FB",25303:"NA",25324:"KG",25341:"ZY",25373:"WZ",25375:"XJ",25384:"A",25457:"A",25528:"SD",25530:"SC",25552:"TD",25774:"ZC",25874:"ZC",26044:"YW",26080:"WM",26292:"PB",26333:"PB",26355:"ZY",26366:"CZ",26397:"ZC",26399:"QJ",26415:"ZS",26451:"SB",26526:"ZC",26552:"JG",26561:"TD",26588:"JG",26597:"CZ",26629:"ZS",26638:"YL",26646:"XQ",26653:"KG",26657:"XJ",26727:"HG",26894:"ZC",26937:"ZS",26946:"ZC",26999:"KJ",27099:"KJ",27449:"YQ",27481:"XS",27542:"ZS",27663:"ZS",27748:"TS",27784:"SC",27788:"ZD",27795:"TD",27812:"O",27850:"PB",27852:"MB",27895:"SL",27898:"PL",27973:"QJ",27981:"KH",27986:"HX",27994:"XJ",28044:"YC",28065:"WG",28177:"SM",28267:"QJ",28291:"KH",28337:"ZQ",28463:"TL",28548:"DC",28601:"TD",28689:"PB",28805:"JG",28820:"QG",28846:"PB",28952:"TD",28975:"ZC",29100:"A",29325:"QJ",29575:"SL",29602:"FB",30010:"TD",30044:"CX",30058:"PF",30091:"YSP",30111:"YN",30229:"XJ",30427:"SC",30465:"SX",30631:"YQ",30655:"QJ",30684:"QJG",30707:"SD",30729:"XH",30796:"LG",30917:"PB",31074:"NM",31085:"JZ",31109:"SC",31181:"ZC",31192:"MLB",31293:"JQ",31400:"YX",31584:"YJ",31896:"ZN",31909:"ZY",31995:"XJ",32321:"PF",32327:"ZY",32418:"HG",32420:"XQ",32421:"HG",32438:"LG",32473:"GJ",32488:"TD",32521:"QJ",32527:"PB",32562:"ZSQ",32564:"JZ",32735:"ZD",32793:"PB",33071:"PF",33098:"XL",33100:"YA",33152:"PB",33261:"CX",33324:"BP",33333:"TD",33406:"YA",33426:"WM",33432:"PB",33445:"JG",33486:"ZN",33493:"TS",33507:"QJ",33540:"QJ",33544:"ZC",33564:"XQ",33617:"YT",33632:"QJ",33636:"XH",33637:"YX",33694:"WG",33705:"PF",33728:"YW",33882:"SR",34067:"WM",34074:"YW",34121:"QJ",34255:"ZC",34259:"XL",34425:"JH",34430:"XH",34485:"KH",34503:"YS",34532:"HG",34552:"XS",34558:"YE",34593:"ZL",34660:"YQ",34892:"XH",34928:"SC",34999:"QJ",35048:"PB",35059:"SC",35098:"ZC",35203:"TQ",35265:"JX",35299:"JX",35782:"SZ",35828:"YS",35830:"E",35843:"TD",35895:"YG",35977:"MH",36158:"JG",36228:"QJ",36426:"XQ",36466:"DC",36710:"JC",36711:"ZYG",36767:"PB",36866:"SK",36951:"YW",37034:"YX",37063:"XH",37218:"ZC",37325:"ZC",38063:"PB",38079:"TD",38085:"QY",38107:"DC",38116:"TD",38123:"YD",38224:"HG",38241:"XTC",38271:"ZC",38415:"YE",38426:"KH",38461:"YD",38463:"AE",38466:"PB",38477:"XJ",38518:"YT",38551:"WK",38585:"ZC",38704:"XS",38739:"LJ",38761:"GJ",38808:"SQ",39048:"JG",39049:"XJ",39052:"HG",39076:"CZ",39271:"XT",39534:"TD",39552:"TD",39584:"PB",39647:"SB",39730:"LG",39748:"TPB",40109:"ZQ",40479:"ND",40516:"HG",40536:"HG",40583:"QJ",40765:"YQ",40784:"QJ",40840:"YK",40863:"QJG"},_checkPYCh=function(ch){var uni=ch.charCodeAt(0);return uni>40869||uni<19968?ch:oMultiDiff[uni]?oMultiDiff[uni]:_ChineseFirstPY.charAt(uni-19968)},_mkPYRslt=function(arr,ignoreMulti){for(var arrRslt=[""],k,multiLen=0,i=0,len=arr.length;i14||ignoreMulti){var tmpStr=str.substring(0,1);for(k=0;k0&&(this._items[0]=lastElt,this._sinkDown(0)),elt}},push:function(item){this._items[this._size++]=item,this._bubbleUp(this._size-1)},size:function(){return this._size},peek:function(){if(0!==this._size)return this._items[0]},_heapify:function(){for(var index=Math.floor((this._size+1)/2);index>=0;index--)this._sinkDown(index)},_bubbleUp:function(index){for(var elt=this._items[index];index>0;){var parentIndex=Math.floor((index+1)/2)-1,parentElt=this._items[parentIndex];if(this._comparator(parentElt,elt))return;this._items[parentIndex]=elt,this._items[index]=parentElt,index=parentIndex}},_sinkDown:function(index){for(var elt=this._items[index];;){var leftChildIndex=2*(index+1)-1,rightChildIndex=2*(index+1),swapIndex=-1;if(leftChildIndex=0;--i)xs[i]=0;return xs},ceilLog2=function(x){for(var y=1;y0;--i)this._heap[i]=this._heap[2*i]+this._heap[2*i+1]},BI.PrefixIntervalTree.prototype={constructor:BI.PrefixIntervalTree,set:function(index,value){var node=this._half+index;for(this._heap[node]=value,node=parent(node);0!==node;node=parent(node))this._heap[node]=this._heap[2*node]+this._heap[2*node+1]},get:function(index){var node=this._half+index;return this._heap[node]},getSize:function(){return this._size},sumUntil:function(end){if(0===end)return 0;for(var node=this._half+end-1,sum=this._heap[node];1!==node;node=parent(node))node%2===1&&(sum+=this._heap[node-1]);return sum},sumTo:function(inclusiveEnd){return this.sumUntil(inclusiveEnd+1)},sum:function(begin,end){return this.sumUntil(end)-this.sumUntil(begin)},greatestLowerBound:function(t){if(t<0)return-1;var node=1;if(this._heap[node]<=t)return this._size;for(;node=0;--i)xs[i]=initialValue;return new BI.PrefixIntervalTree(xs)},BI.PrefixIntervalTree.empty=function(size){return BI.PrefixIntervalTree.uniform(size,0)}}(),!function(){BI.Queue=function(capacity){this.capacity=capacity,this.array=[]},BI.Queue.prototype={constructor:BI.Queue,contains:function(v){return BI.contains(this.array,v)},indexOf:function(v){return BI.contains(this.array,v)},getElementByIndex:function(index){return this.array[index]},push:function(v){this.array.push(v),this.capacity&&this.array.length>this.capacity&&this.array.shift()},pop:function(){this.array.pop()},shift:function(){this.array.shift()},unshift:function(v){this.array.unshift(v),this.capacity&&this.array.length>this.capacity&&this.array.pop()},remove:function(v){BI.remove(this.array,v)},splice:function(){this.array.splice.apply(this.array,arguments)},slice:function(){this.array.slice.apply(this.array,arguments)},size:function(){return this.array.length},each:function(fn,scope){var scope=scope||window,fn=fn||null;if(null!=fn&&"function"==typeof fn)for(var i=0;i0?{children:children}:{})},toJSON:function(node){var self=this,result=[];return BI.each((node||this.root).getChildren(),function(i,child){result.push(self._toJSON(child))}),result},_toJSONWithNode:function(node){var self=this,children=[];return BI.each(node.getChildren(),function(i,child){children.push(self._toJSONWithNode(child))}),BI.extend({id:node.id},BI.deepClone(node.get("data")),{node:node},children.length>0?{children:children}:{})},toJSONWithNode:function(node){var self=this,result=[];return BI.each((node||this.root).getChildren(),function(i,child){result.push(self._toJSONWithNode(child))}),result},search:function(root,target,param){if(!(root instanceof BI.Node))return arguments.callee.apply(this,[this.root,root,target]);var self=this,next=null;return BI.isNull(target)?null:BI.isEqual(root[param||"id"],target)?root:(BI.any(root.getChildren(),function(i,child){if(next=self.search(child,target,param),null!==next)return!0}),next)},_traverse:function(node,callback){var queue=[];for(queue.push(node);!BI.isEmpty(queue);){var temp=queue.shift(),b=callback&&callback(temp);if(b===!1)break;b!==!0&&null!=temp&&(queue=queue.concat(temp.getChildren()))}},traverse:function(callback){this._traverse(this.root,callback)},_recursion:function(node,route,callback){var self=this;return BI.every(node.getChildren(),function(i,child){var next=BI.clone(route);next.push(child.id);var b=callback&&callback(child,next);return b!==!1&&(b===!0||self._recursion(child,next,callback))})},recursion:function(callback){this._recursion(this.root,[],callback)},inOrderTraverse:function(callback){this._inOrderTraverse(this.root,callback)},_inOrderTraverse:function(node,callback){null!=node&&(this._inOrderTraverse(node.getLeft()),callback&&callback(node),this._inOrderTraverse(node.getRight()))},nrInOrderTraverse:function(callback){for(var stack=[],node=this.root;null!=node||!BI.isEmpty(stack);){for(;null!=node;)stack.push(node),node=node.getLeft();node=stack.pop(),callback&&callback(node),node=node.getRight()}},preOrderTraverse:function(callback){this._preOrderTraverse(this.root,callback)},_preOrderTraverse:function(node,callback){null!=node&&(callback&&callback(node),this._preOrderTraverse(node.getLeft()),this._preOrderTraverse(node.getRight()))},nrPreOrderTraverse:function(callback){for(var stack=[],node=this.root;null!=node||!BI.isEmpty(stack);){for(;null!=node;)callback&&callback(node),stack.push(node),node=node.getLeft();node=stack.pop(),node=node.getRight()}},postOrderTraverse:function(callback){this._postOrderTraverse(this.root,callback)},_postOrderTraverse:function(node,callback){null!=node&&(this._postOrderTraverse(node.getLeft()),this._postOrderTraverse(node.getRight()),callback&&callback(node))},nrPostOrderTraverse:function(callback){for(var stack=[],node=this.root,preNode=null;null!=node||!BI.isEmpty(stack);){for(;null!=node;)stack.push(node),node=node.getLeft();node=BI.last(stack),null==node.getRight()||node.getRight()==preNode?(callback&&callback(node),node=stack.pop(),preNode=node,node=null):node=node.getRight()}}},BI.Node=function(id){BI.isObject(id)?BI.extend(this,id):this.id=id,this.clear.apply(this,arguments)},BI.Node.prototype={constructor:BI.Node,set:function(key,value){return BI.isObject(key)?void BI.extend(this,key):void(this[key]=value)},get:function(key){return this[key]},isLeaf:function(){return BI.isEmpty(this.children)},getChildren:function(){return this.children},getChildrenLength:function(){return this.children.length},getFirstChild:function(){return BI.first(this.children)},getLastChild:function(){return BI.last(this.children)},setLeft:function(left){this.left=left},getLeft:function(){return this.left},setRight:function(right){this.right=right},getRight:function(){return this.right},setParent:function(parent){this.parent=parent},getParent:function(){return this.parent},getChild:function(index){return this.children[index]},getChildIndex:function(id){return BI.findIndex(this.children,function(i,ch){return ch.get("id")===id})},removeChild:function(id){this.removeChildByIndex(this.getChildIndex(id))},removeChildByIndex:function(index){var before=this.getChild(index-1),behind=this.getChild(index+1);null!=before&&before.setRight(behind||null),null!=behind&&behind.setLeft(before||null),this.children.splice(index,1)},removeAllChilds:function(){this.children=[]},addChild:function(child,index){var cur=null;cur=BI.isUndefined(index)?this.children.length-1:index-1,child.setParent(this),cur>=0&&(this.getChild(cur)&&this.getChild(cur).setRight(child),child.setLeft(this.getChild(cur))),BI.isUndefined(index)?this.children.push(child):this.children.splice(index,0,child)},equals:function(obj){return this===obj||this.id===obj.id},clear:function(){this.parent=null,this.left=null,this.right=null,this.children=[]}},BI.extend(BI.Tree,{transformToArrayFormat:function(nodes,pId){if(!nodes)return[];var r=[];if(BI.isArray(nodes))for(var i=0,l=nodes.length;i=this.x&&x<=this.x+this.w&&y>=this.y&&y<=this.y+this.h)},getPosition:function(){var pos=[];return pos.push(this.x+this.w/2),pos.push(this.y+this.h/2),pos}},BI.BehaviorFactory={createBehavior:function(key,options){var behavior;switch(key){case"highlight":behavior=BI.HighlightBehavior;break;case"redmark":behavior=BI.RedMarkBehavior}return new behavior(options)}},BI.Behavior=BI.inherit(BI.OB,{_defaultConfig:function(){return BI.extend(BI.Behavior.superclass._defaultConfig.apply(this,arguments),{rule:function(){return!0}})},_init:function(){BI.Behavior.superclass._init.apply(this,arguments)},doBehavior:function(){}}),BI.Layout=BI.inherit(BI.Widget,{props:function(){return{scrollable:null,scrollx:!1,scrolly:!1,items:[]}},render:function(){this._init4Margin(),this._init4Scroll()},_init4Margin:function(){this.options.top&&this.element.css("top",this.options.top),this.options.left&&this.element.css("left",this.options.left),this.options.bottom&&this.element.css("bottom",this.options.bottom),this.options.right&&this.element.css("right",this.options.right)},_init4Scroll:function(){switch(this.options.scrollable){case!0:this.element.css("overflow","auto");break;case!1:this.element.css("overflow","hidden")}this.options.scrollx&&this.element.css({"overflow-x":"auto","overflow-y":"hidden"}),this.options.scrolly&&this.element.css({"overflow-x":"hidden","overflow-y":"auto"})},appendFragment:function(frag){this.element.append(frag)},_mountChildren:function(){var self=this,frag=BI.Widget._renderEngine.createFragment(),hasChild=!1;BI.each(this._children,function(i,widget){widget.element!==self.element&&(frag.appendChild(widget.element[0]),hasChild=!0)}),hasChild===!0&&this.appendFragment(frag)},_getChildName:function(index){return index+""},_addElement:function(i,item,context){var self=this,w;return this.hasWidget(this._getChildName(i))?w=this.getWidgetByName(this._getChildName(i)):(w=BI.createWidget(item,context),w.on(BI.Events.DESTROY,function(){BI.each(self._children,function(name,child){child===w&&(BI.remove(self._children,child),self.removeItemAt(0|name))})}),this.addWidget(this._getChildName(i),w)),w},_getOptions:function(item){return item instanceof BI.Widget&&(item=item.options),item=BI.stripEL(item),item instanceof BI.Widget&&(item=item.options),item},_compare:function(item1,item2){function eq(a,b,aStack,bStack){if(a===b)return 0!==a||1/a===1/b;if(null==a||null==b)return a===b;var className=Object.prototype.toString.call(a);switch(className){case"[object RegExp]":case"[object String]":return""+a==""+b;case"[object Number]":return+a!==+a?+b!==+b:0===+a?1/+a===1/b:+a===+b;case"[object Date]":case"[object Boolean]":return+a===+b}var areArrays="[object Array]"===className;if(!areArrays){if(BI.isFunction(a)&&BI.isFunction(b))return!0;a=self._getOptions(a),b=self._getOptions(b)}aStack=aStack||[],bStack=bStack||[];for(var length=aStack.length;length--;)if(aStack[length]===a)return bStack[length]===b;if(aStack.push(a),bStack.push(b),areArrays){if(length=a.length,length!==b.length)return!1;for(;length--;)if(!eq(a[length],b[length],aStack,bStack))return!1}else{var keys=_.keys(a),key;if(length=keys.length,_.keys(b).length!==length)return!1;for(;length--;)if(key=keys[length],!_.has(b,key)||!eq(a[key],b[key],aStack,bStack))return!1}return aStack.pop(),bStack.pop(),!0}var self=this;return eq(item1,item2)},_getWrapper:function(){return this.element},_addItemAt:function(index,item){for(var i=this.options.items.length;i>index;i--)this._children[this._getChildName(i)]=this._children[this._getChildName(i-1)];delete this._children[this._getChildName(index)],this.options.items.splice(index,0,item)},_removeItemAt:function(index){for(var i=index;ithis.options.items.length)){this._addItemAt(index,item);var w=this._addElement(index,item);return index>0?this._children[this._getChildName(index-1)].element.after(w.element):w.element.prependTo(this._getWrapper()),w._mount(),w}},removeItemAt:function(indexes){indexes=BI.isArray(indexes)?indexes:[indexes];for(var deleted=[],newItems=[],newChildren={},i=0,len=this.options.items.length;ithis.options.items.length-1)return!1;var child=this._children[this._getChildName(index)];return child.shouldUpdate?child.shouldUpdate(this._getOptions(item))===!0:null},updateItemAt:function(index,item){if(!(index<0||index>this.options.items.length-1)){ +var child=this._children[this._getChildName(index)],updated;if(updated=child.update(this._getOptions(item)))return updated;var del=this._children[this._getChildName(index)];delete this._children[this._getChildName(index)],this.options.items.splice(index,1);var w=this._addElement(index,item);this.options.items.splice(index,0,item),this._children[this._getChildName(index)]=w,index>0?this._children[this._getChildName(index-1)].element.after(w.element):w.element.prependTo(this._getWrapper()),del._destroy(),w._mount()}},addItems:function(items,context){var self=this,o=this.options,fragment=BI.Widget._renderEngine.createFragment(),added=[];BI.each(items,function(i,item){var w=self._addElement(o.items.length,item,context);self._children[self._getChildName(o.items.length)]=w,o.items.push(item),added.push(w),fragment.appendChild(w.element[0])}),this._isMounted&&(this._getWrapper().append(fragment),BI.each(added,function(i,w){w._mount()}))},prependItems:function(items,context){var self=this;items=items||[];for(var fragment=BI.Widget._renderEngine.createFragment(),added=[],i=items.length-1;i>=0;i--){this._addItemAt(0,items[i]);var w=this._addElement(0,items[i],context);self._children[self._getChildName(0)]=w,this.options.items.unshift(items[i]),added.push(w),fragment.appendChild(w.element[0])}this._isMounted&&(this._getWrapper().prepend(fragment),BI.each(added,function(i,w){w._mount()}))},getValue:function(){var self=this,value=[],child;return BI.each(this.options.items,function(i){if(child=self._children[self._getChildName(i)]){var v=child.getValue();v=BI.isArray(v)?v:[v],value=value.concat(v)}}),value},setValue:function(v){var self=this,child;BI.each(this.options.items,function(i){(child=self._children[self._getChildName(i)])&&child.setValue(v)})},setText:function(v){var self=this,child;BI.each(this.options.items,function(i){(child=self._children[self._getChildName(i)])&&child.setText(v)})},patchItem:function(oldVnode,vnode,index){var shouldUpdate=this.shouldUpdateItem(index,vnode);if(shouldUpdate===!0||null===shouldUpdate&&!this._compare(oldVnode,vnode))return this.updateItemAt(index,vnode)},updateChildren:function(oldCh,newCh){function sameVnode(vnode1,vnode2,oldIndex,newIndex){return vnode1=self._getOptions(vnode1),vnode2=self._getOptions(vnode2),BI.isKey(vnode1.key)?vnode1.key===vnode2.key:oldIndex>=0?oldIndex===newIndex:void 0}function addNode(vnode,index){var opt=self._getOptions(vnode),key=null==opt.key?self._getChildName(index):opt.key;return children[key]=self._addElement(key,vnode)}function addVnodes(before,vnodes,startIdx,endIdx){for(;startIdx<=endIdx;++startIdx){var node=addNode(vnodes[startIdx],startIdx);insertBefore(node,before,!1,startIdx)}}function removeVnodes(vnodes,startIdx,endIdx){for(;startIdx<=endIdx;++startIdx){var ch=vnodes[startIdx];if(BI.isNotNull(ch)){var node=self._getOptions(ch),key=null==node.key?self._getChildName(startIdx):node.key;delete self._children[self._getChildName(key)],children[key]._destroy()}}}function insertBefore(insert,before,isNext,index){insert=self._getOptions(insert),before=before&&self._getOptions(before);var insertKey=BI.isKey(insert.key)?insert.key:self._getChildName(index);if(before&&children[before.key]){var beforeKey=BI.isKey(before.key)?before.key:self._getChildName(index),next;next=isNext?children[beforeKey].element.next():children[beforeKey].element,next.length>0?next.before(children[insertKey].element):self._getWrapper().append(children[insertKey].element)}else self._getWrapper().append(children[insertKey].element)}function findOldVnode(vnodes,vNode,beginIdx,endIdx){var i,found;for(i=beginIdx;i<=endIdx;++i)vnodes[i]&&sameVnode(vnodes[i],vNode)&&(found=vnodes[i]);return found}var self=this,oldStartIdx=0,newStartIdx=0,oldEndIdx=oldCh.length-1,oldStartVnode=oldCh[0],oldEndVnode=oldCh[oldEndIdx],newEndIdx=newCh.length-1,newStartVnode=newCh[0],newEndVnode=newCh[newEndIdx],before,updated,children={};for(BI.each(oldCh,function(i,child){child=self._getOptions(child);var key=null==child.key?i:child.key;BI.isKey(key)&&(children[key]=self._children[self._getChildName(i)])});oldStartIdx<=oldEndIdx&&newStartIdx<=newEndIdx;)if(BI.isNull(oldStartVnode))oldStartVnode=oldCh[++oldStartIdx];else if(BI.isNull(oldEndVnode))oldEndVnode=oldCh[--oldEndIdx];else if(sameVnode(oldStartVnode,newStartVnode,oldStartIdx,newStartIdx))updated=this.patchItem(oldStartVnode,newStartVnode,oldStartIdx)||updated,children[null==oldStartVnode.key?this._getChildName(oldStartIdx):oldStartVnode.key]=this._children[this._getChildName(oldStartIdx)],oldStartVnode=oldCh[++oldStartIdx],newStartVnode=newCh[++newStartIdx];else if(sameVnode(oldEndVnode,newEndVnode,oldEndIdx,newEndIdx))updated=this.patchItem(oldEndVnode,newEndVnode,oldEndIdx)||updated,children[null==oldEndVnode.key?this._getChildName(oldEndIdx):oldEndVnode.key]=this._children[this._getChildName(oldEndIdx)],oldEndVnode=oldCh[--oldEndIdx],newEndVnode=newCh[--newEndIdx];else if(sameVnode(oldStartVnode,newEndVnode))updated=this.patchItem(oldStartVnode,newEndVnode,oldStartIdx)||updated,children[null==oldStartVnode.key?this._getChildName(oldStartIdx):oldStartVnode.key]=this._children[this._getChildName(oldStartIdx)],insertBefore(oldStartVnode,oldEndVnode,!0),oldStartVnode=oldCh[++oldStartIdx],newEndVnode=newCh[--newEndIdx];else if(sameVnode(oldEndVnode,newStartVnode))updated=this.patchItem(oldEndVnode,newStartVnode,oldEndIdx)||updated,children[null==oldEndVnode.key?this._getChildName(oldEndIdx):oldEndVnode.key]=this._children[this._getChildName(oldEndIdx)],insertBefore(oldEndVnode,oldStartVnode),oldEndVnode=oldCh[--oldEndIdx],newStartVnode=newCh[++newStartIdx];else{var sameOldVnode=findOldVnode(oldCh,newStartVnode,oldStartIdx,oldEndIdx);if(BI.isNull(sameOldVnode)){var node=addNode(newStartVnode);insertBefore(node,oldStartVnode),newStartVnode=newCh[++newStartIdx]}else BI.each(oldCh,function(index,child){child&&sameVnode(child,newStartVnode)&&(updated=self.patchItem(sameOldVnode,newStartVnode,index)||updated,children[null==sameOldVnode.key?self._getChildName(index):sameOldVnode.key]=self._children[self._getChildName(index)],oldCh[index]=void 0,insertBefore(sameOldVnode,oldStartVnode))}),newStartVnode=newCh[++newStartIdx]}return oldStartIdx>oldEndIdx?(before=BI.isNull(newCh[newEndIdx+1])?null:newCh[newEndIdx+1],addVnodes(before,newCh,newStartIdx,newEndIdx)):newStartIdx>newEndIdx&&removeVnodes(oldCh,oldStartIdx,oldEndIdx),this._children={},BI.each(newCh,function(i,child){var node=self._getOptions(child),key=null==node.key?self._getChildName(i):node.key;children[key]._mount(),self._children[self._getChildName(i)]=children[key]}),updated},update:function(opt){var o=this.options,items=opt.items||[],updated=this.updateChildren(o.items,items);return this.options.items=items,updated},stroke:function(items){var self=this;BI.each(items,function(i,item){item&&self._addElement(i,item)})},removeWidget:function(nameOrWidget){var removeIndex;BI.isWidget(nameOrWidget)?BI.each(this._children,function(name,child){child===nameOrWidget&&(removeIndex=name)}):removeIndex=nameOrWidget,removeIndex&&this._removeItemAt(0|removeIndex)},empty:function(){BI.Layout.superclass.empty.apply(this,arguments),this.options.items=[]},destroy:function(){BI.Layout.superclass.destroy.apply(this,arguments),this.options.items=[]},populate:function(items){var self=this,o=this.options;return items=items||[],this._isMounted?void this.update({items:items}):(this.options.items=items,void this.stroke(items))},resize:function(){}}),BI.shortcut("bi.layout",BI.Layout),BI.Plugin=BI.Plugin||{},!function(){var _WidgetsPlugin={},_ObjectPlugin={},_ConfigPlugin={},_GlobalWidgetConfigFn,_GlobalObjectConfigFn;BI.extend(BI.Plugin,{getWidget:function(type,options){if(_GlobalWidgetConfigFn&&_GlobalWidgetConfigFn(type,options),_ConfigPlugin[type])for(var i=_ConfigPlugin[type].length-1;i>=0;i--)_ConfigPlugin[type][i](options);if(_WidgetsPlugin[type])for(var res,i=_WidgetsPlugin[type].length-1;i>=0;i--)if(res=_WidgetsPlugin[type][i](options))return res;return options},config:function(widgetConfigFn,objectConfigFn){_GlobalWidgetConfigFn=widgetConfigFn,_GlobalObjectConfigFn=objectConfigFn},configWidget:function(type,fn){_ConfigPlugin[type]||(_ConfigPlugin[type]=[]),_ConfigPlugin[type].push(fn)},registerWidget:function(type,fn){_WidgetsPlugin[type]||(_WidgetsPlugin[type]=[]),_WidgetsPlugin[type].length>0&&console.log("组件已经注册过了!"),_WidgetsPlugin[type].push(fn)},relieveWidget:function(type){delete _WidgetsPlugin[type]},getObject:function(type,object){if(_GlobalObjectConfigFn&&_GlobalObjectConfigFn(type,object),_ObjectPlugin[type])for(var res,i=0,len=_ObjectPlugin[type].length;i0&&console.log("对象已经注册过了!"),_ObjectPlugin[type].push(fn)},relieveObject:function(type){delete _ObjectPlugin[type]}})}(),BI.Action=BI.inherit(BI.OB,{_defaultConfig:function(){return BI.extend(BI.Action.superclass._defaultConfig.apply(this,arguments),{src:null,tar:null})},_init:function(){BI.Action.superclass._init.apply(this,arguments)},actionPerformed:function(src,tar,callback){},actionBack:function(tar,src,callback){}}),BI.ActionFactory={createAction:function(key,options){var action;switch(key){case"show":action=BI.ShowAction}return new action(options)}},BI.ShowAction=BI.inherit(BI.Action,{_defaultConfig:function(){return BI.extend(BI.ShowAction.superclass._defaultConfig.apply(this,arguments),{})},_init:function(){BI.ShowAction.superclass._init.apply(this,arguments)},actionPerformed:function(src,tar,callback){tar=tar||this.options.tar,tar.setVisible(!0),callback&&callback()},actionBack:function(tar,src,callback){tar=tar||this.options.tar,tar.setVisible(!1),callback&&callback()}}),function(){function isEmpty(value){var result=""===value||null===value||void 0===value;return result}function isInvalidDate(date){return"Invalid Date"==date||"NaN"==date}function _eFormat(text,fmt){function eFormat(num,format){var neg=num<0?(num*=-1,"-"):"",magnitudeNeg="",funcName=num>0&&num<1?"floor":"ceil",magnitude=Math[funcName](Math.log(num)/Math.log(10));if(!isFinite(magnitude))return format.replace(/#/gi,"").replace(/\.e/gi,"E");num/=Math.pow(10,magnitude),num>0&&num<1&&(num*=10,magnitude-=1);var integerLen=getInteger(magnitude,format);integerLen>1&&(magnitude-=integerLen-1,num*=Math.pow(10,integerLen-1)),magnitude<0&&(magnitudeNeg="-",magnitude*=-1);var precision=getPrecision(format),isValueCarry=isValueCarried(num);return num*=Math.pow(10,precision),num=Math.round(num),isValueCarry&&(num/=10,magnitude+="-"===magnitudeNeg?-1:1),num/=Math.pow(10,precision),num=num.toFixed(precision),magnitude=formatExponential(format,magnitude,magnitudeNeg),neg+num+"E"+magnitude}function formatExponential(format,num,magnitudeNeg){if(num+="",!/e/gi.test(format))return num;for(format=format.split(/e/gi)[1];num.length1?arr[1].length:0}function getInteger(magnitude,format){if(!/e/gi.test(format))return 0;var formatLeft=format.split(/e/gi)[0].split(".")[0],i,f,len=formatLeft.length,valueLeftLen=0;for(i=0;i-1)return text>=0?_numberFormat(text+"",format.substring(0,numMod)):_numberFormat(-text+"",format.substr(numMod+1));if(+text<0&&"-"!==format.charAt(0))return _numberFormat(-text+"","-"+format);var fp=format.split("."),fleft=fp[0]||"",fright=fp[1]||"";text=_dealNumberPrecision(text,fright);var tp=text.split("."),tleft=tp[0]||"",tright=tp[1]||"";if(/[%‰]$/.test(format)){var paddingZero=/[%]$/.test(format)?"00":"000";tright+=paddingZero,tleft+=tright.substr(0,paddingZero.length),tleft=tleft.replace(/^0+/gi,""),tright=tright.substr(paddingZero.length).replace(/0+$/gi,"")}var right=_dealWithRight(tright,fright);right.leftPlus&&(tleft=parseInt(tleft)+1+"",tleft=isNaN(tleft)?"1":tleft),right=right.num;var left=_dealWithLeft(tleft,fleft);return/[0-9]/.test(left)||(left+="0"),/[0-9]/.test(right)?left+"."+right:left+right}function _dealWithRight(tright,fright){for(var right="",j=0,i=0,len=fright.length;i4){result.leftPlus=!0;var numReg=right.match(/^[0-9]+/);if(numReg){var num=numReg[0],orilen=num.length,newnum=parseInt(num)+1+"";newnum.length>orilen?newnum=newnum.substr(1):(newnum=BI.leftPad(newnum,orilen,"0"),result.leftPlus=!1),right=right.replace(/^[0-9]+/,newnum)}}return result.num=right,result}function _dealWithLeft(tleft,fleft){for(var left="",j=tleft.length-1,combo=-1,last=-1,i=fleft.length-1;i>=0;i--){var ch=fleft.charAt(i),c=tleft.charAt(j);switch(ch){case"0":isEmpty(c)&&(c="0"),last=-1,left=c+left,j--;break;case"#":last=i,left=c+left,j--;break;case",":if(!isEmpty(c)){var com=fleft.match(/,[#0]+/);com&&(combo=com[0].length-1),left=","+left}break;default:left=ch+left}}if(last>-1){var tll=tleft.substr(0,j+1);left=left.substr(0,last)+tll+left.substr(last)}if(combo>0){var res=left.match(/[0-9]+,/);if(res){res=res[0];for(var newstr="",n=res.length-1-combo;n>=0;n-=combo)newstr=res.substr(n,combo)+","+newstr;var lres=res.substr(0,n+combo);isEmpty(lres)||(newstr=lres+","+newstr)}left=left.replace(/[0-9]+,/,newstr)}return left}var _global;_global="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,_global.BI||(_global.BI={}),BI.cjkEncode=function(text){if("string"!=typeof text)return text;for(var newText="",i=0;i=128||91===code||93===code?"["+code.toString(16)+"]":text.charAt(i)}return newText},BI.cjkDecode=function(text){if(null==text)return"";if(!isNaN(text)||text.indexOf("[")==-1)return text;for(var newText="",i=0;ii+1){var subText=text.substring(i+1,rightIdx);subText.length>0&&(ch=String.fromCharCode(eval("0x"+subText))),i=rightIdx}}newText+=ch}return newText};var SPECIAL_TAGS={"&":"&",'"':""","<":"<",">":">"," ":" "};BI.htmlEncode=function(text){return BI.isNull(text)?"":BI.replaceAll(text+"",'&|"|<|>|\\s',function(v){return SPECIAL_TAGS[v]?SPECIAL_TAGS[v]:" "})},BI.htmlDecode=function(text){return BI.isNull(text)?"":BI.replaceAll(text+"","&|"|<|>| ",function(v){switch(v){case"&":return"&";case""":return'"';case"<":return"<";case">":return">";case" ":default:return" "}})},BI.cjkEncodeDO=function(o){if(BI.isPlainObject(o)){var result={};return _.each(o,function(v,k){"string"!=typeof v&&(v=BI.jsonEncode(v)),k=BI.cjkEncode(k),result[k]=BI.cjkEncode(v)}),result}return o},BI.jsonEncode=function(o){var useHasOwn=!!{}.hasOwnProperty,m={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},encodeString=function(s){return/["\\\x00-\x1f]/.test(s)?'"'+s.replace(/([\x00-\x1f\\"])/g,function(a,b){var c=m[b];return c?c:(c=b.charCodeAt(),"\\u00"+Math.floor(c/16).toString(16)+(c%16).toString(16))})+'"':'"'+s+'"'},encodeArray=function(o){var a=["["],b,i,l=o.length,v;for(i=0;i2?BI.Date._MN[date.getMonth()]:len<2?date.getMonth()+1:BI.leftPad(date.getMonth()+1+"",2,"0");break;case"d":str=len>1?BI.leftPad(date.getDate()+"",2,"0"):date.getDate();break;case"h":var hour=date.getHours()%12;0===hour&&(hour=12),str=len>1?BI.leftPad(hour+"",2,"0"):hour;break;case"H":str=len>1?BI.leftPad(date.getHours()+"",2,"0"):date.getHours();break;case"m":str=len>1?BI.leftPad(date.getMinutes()+"",2,"0"):date.getMinutes();break;case"s":str=len>1?BI.leftPad(date.getSeconds()+"",2,"0"):date.getSeconds();break;case"a":str=date.getHours()<12?"am":"pm";break;case"z":str=BI.getTimezone(date);break;default:str=jfmt.str}return str}if(!date)return"";var len=format.length,result="";if(len>0){for(var flagch=format.charAt(0),start=0,str=flagch,i=1;iBI.Widget._renderEngine.createElement("body").outerWidth()&&(x-=tooltip.element.outerWidth()+15);var bodyHeight=BI.Widget._renderEngine.createElement("body").outerHeight();return y+tooltip.element.outerHeight()>bodyHeight||top+tooltip.element.outerHeight()>bodyHeight?(y-=tooltip.element.outerHeight()+15,!opt.belowMouse&&(y=Math.min(y,offset.top-tooltip.element.outerHeight()-5))):!opt.belowMouse&&(y=Math.max(y,top)),tooltip.element.css({left:x<0?0:x+"px",top:y<0?0:y+"px"}),tooltip.element.hover(function(){self.remove(name),context.element.trigger("mouseleave.title"+context.getName())}),this},add:function(name,bubble){return this.has(name)?this:(this.set(name,bubble),this)},get:function(name){return this.tooltipsManager[name]},set:function(name,bubble){this.tooltipsManager[name]=bubble},has:function(name){return null!=this.tooltipsManager[name]},remove:function(name){return this.has(name)?(this.tooltipsManager[name].destroy(),delete this.tooltipsManager[name],this):this}}),_.extend(BI,{Events:{KEYDOWN:"_KEYDOWN",BACKSPACE:"_BACKSPACE",SPACE:"_SPACE",ENTER:"_ENTER",CONFIRM:"_CONFIRM",ERROR:"_ERROR",PAUSE:"_PAUSE",DESTROY:"_DESTROY",MOUNT:"_MOUNT",UNMOUNT:"_UNMOUNT",CLEAR:"_CLEAR",ADD:"_ADD",EDITING:"_EDITING",EMPTY:"_EMPTY",VIEW:"_VIEW",RESIZE:"_RESIZE",BEFOREEDIT:"_BEFOREEDIT",AFTEREDIT:"_AFTEREDIT",STARTEDIT:"_STARTEDIT",STOPEDIT:"_STOPEDIT",CHANGE:"_CHANGE",EXPAND:"_EXPAND",COLLAPSE:"_COLLAPSE",CALLBACK:"_CALLBACK",CLICK:"_CLICK",STATECHANGE:"_STATECHANGE",BEFORESTATECHANGE:"_BEFORESTATECHANGE",INIT:"_INIT",AFTERINIT:"_AFTERINIT",SCROLL:"_SCROLL",STARTLOAD:"_STARTLOAD",AFTERLOAD:"_AFTERLOAD",BS:"beforesubmit",AS:"aftersubmit",SC:"submitcomplete",SF:"submitfailure",SS:"submitsuccess",BVW:"beforeverifywrite",AVW:"afterverifywrite",AV:"afterverify",BW:"beforewrite",AW:"afterwrite",WS:"writesuccess",WF:"writefailure",BA:"beforeappend",AA:"afterappend",BD:"beforedelete",AD:"beforedelete",UC:"unloadcheck",BTOPDF:"beforetopdf",ATOPDF:"aftertopdf",BTOEXCEL:"beforetoexcel",ATOEXCEL:"aftertoexcel",BTOWORD:"beforetoword",ATOWORD:"aftertoword",BTOIMAGE:"beforetoimage",ATOIMAGE:"aftertoimage",BTOHTML:"beforetohtml",ATOHTML:"aftertohtml",BIMEXCEL:"beforeimportexcel",AIMEXCEL:"afterimportexcel",BPDFPRINT:"beforepdfprint",APDFPRINT:"afterpdfprint",BFLASHPRINT:"beforeflashprint",AFLASHPRINT:"afterflashprint",BAPPLETPRINT:"beforeappletprint",AAPPLETPRINT:"afterappletprint",BSEVERPRINT:"beforeserverprint",ASERVERPRINT:"afterserverprint",BEMAIL:"beforeemail",AEMAIL:"afteremail"}}),_.extend(BI,{pushArray:function(sArray,array){for(var i=0;imonthDay&&(day=monthDay),dt.setDate(day),dt.setMonth(dt.getMonth()+3*parseInt(n)),dt},getQuarterStartMonth:function(date){var quarterStartMonth=0,nowMonth=date.getMonth();return nowMonth<3&&(quarterStartMonth=0),28&&(quarterStartMonth=9),quarterStartMonth},getQuarterStartDate:function(date){return BI.getDate(date.getFullYear(),BI.getQuarterStartMonth(date),1)},getQuarterEndDate:function(date){var quarterEndMonth=BI.getQuarterStartMonth(date)+2;return BI.getDate(date.getFullYear(),quarterEndMonth,BI.getMonthDays(date,quarterEndMonth))},getOffsetMonth:function(date,n){var dt=BI.getDate(BI.getTime(date.getFullYear(),date.getMonth(),date.getDate(),date.getHours(),date.getMinutes(),date.getSeconds())),day=dt.getDate(),monthDay=BI.getMonthDays(BI.getDate(dt.getFullYear(),dt.getMonth()+parseInt(n),1));return day>monthDay&&(day=monthDay),dt.setDate(day),dt.setMonth(dt.getMonth()+parseInt(n)),dt},getWeekStartDate:function(date){var w=date.getDay(),startOfWeek=BI.StartOfWeek%7;return BI.getOffsetDate(date,BI.Date._OFFSET[w=12,ir=pm?hr-12:hr,dy=BI.getDayOfYear(date);0==ir&&(ir=12);var min=date.getMinutes(),sec=date.getSeconds();s["%a"]=BI.Date._SDN[w],s["%A"]=BI.Date._DN[w],s["%b"]=BI.Date._SMN[m],s["%B"]=BI.Date._MN[m],s["%C"]=1+Math.floor(y/100),s["%d"]=d<10?"0"+d:d,s["%e"]=d,s["%H"]=hr<10?"0"+hr:hr,s["%I"]=ir<10?"0"+ir:ir,s["%j"]=dy<100?dy<10?"00"+dy:"0"+dy:dy,s["%k"]=hr+"",s["%l"]=ir+"",s["%X"]=m<9?"0"+(1+m):1+m,s["%x"]=m+1,s["%M"]=min<10?"0"+min:min,s["%n"]="\n",s["%p"]=pm?"PM":"AM",s["%P"]=pm?"pm":"am",s["%s"]=Math.floor(date.getTime()/1e3),s["%S"]=sec<10?"0"+sec:sec,s["%t"]="\t",s["%U"]=s["%W"]=s["%V"]=wn<10?"0"+wn:wn,s["%u"]=w+1,s["%w"]=w,s["%y"]=yWith4number.substr(2,2),s["%Y"]=yWith4number,s["%%"]="%",s["%Q"]=qr;var re=/%./g;if(BI.isKhtml=BI.isKhtml||function(){return!!_global.navigator&&/Konqueror|Safari|KHTML/i.test(navigator.userAgent)},!(str.indexOf("%Y")===-1&&str.indexOf("%y")===-1||str.indexOf("%W")===-1&&str.indexOf("%U")===-1&&str.indexOf("%V")===-1))switch(wn){case 1:11===m&&(s["%y"]=parseInt(s["%y"])+1,s["%Y"]=parseInt(s["%Y"])+1);break;case 53:0===m&&(s["%y"]=parseInt(s["%y"])-1,s["%Y"]=parseInt(s["%Y"])-1)}if(!BI.isKhtml())return str.replace(re,function(par){return s[par]||par});for(var a=str.match(re),i=0;i-1?text===keyword?isArray?matched.push(item):matched[i]=item:isArray?find.push(item):find[i]=item:(pidx=py.indexOf(keyword),pidx>-1&&Math.floor(pidx/text.length)===Math.floor((pidx+keyword.length-1)/text.length)&&(text===keyword||keyword.length===text.length?isArray?matched.push(item):matched[i]=item:isArray?find.push(item):find[i]=item))}}),{match:matched,find:find}}}),_.extend(BI,{beforeFunc:function(sFunc,func){var __self=sFunc;return function(){return func.apply(sFunc,arguments)!==!1&&__self.apply(sFunc,arguments)}},afterFunc:function(sFunc,func){var __self=sFunc;return function(){var ret=__self.apply(sFunc,arguments);return ret!==!1&&(func.apply(sFunc,arguments),ret)}}}),_.extend(BI,{add:function(num,arg){function accAdd(arg1,arg2){var r1,r2,m,c;try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}if(c=Math.abs(r1-r2),m=Math.pow(10,Math.max(r1,r2)),c>0){var cm=Math.pow(10,c);r1>r2?(arg1=Number(arg1.toString().replace(".","")),arg2=Number(arg2.toString().replace(".",""))*cm):(arg1=Number(arg1.toString().replace(".",""))*cm,arg2=Number(arg2.toString().replace(".","")))}else arg1=Number(arg1.toString().replace(".","")),arg2=Number(arg2.toString().replace(".",""));return(arg1+arg2)/m}return accAdd(arg,num)},sub:function(num,arg){function accSub(arg1,arg2){var r1,r2,m,n;try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}return m=Math.pow(10,Math.max(r1,r2)),n=r1>=r2?r1:r2,((arg1*m-arg2*m)/m).toFixed(n)}return accSub(num,arg)},mul:function(num,arg){function accMul(arg1,arg2){var m=0,s1=arg1.toString(),s2=arg2.toString();try{m+=s1.split(".")[1].length}catch(e){}try{m+=s2.split(".")[1].length}catch(e){}return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)}return accMul(arg,num)},div:function(num,arg){function digitLength(num){var eSplit=num.toString().split(/[eE]/),len=(eSplit[0].split(".")[1]||"").length-+(eSplit[1]||0);return len>0?len:0}function float2Fixed(num){if(num.toString().indexOf("e")===-1)return Number(num.toString().replace(".",""));var dLen=digitLength(num);return dLen>0?num*Math.pow(10,dLen):num}function times(num1,num2){for(var others=[],_i=2;_i0)return times.apply(void 0,[times(num1,num2),others[0]].concat(others.slice(1)));var num1Changed=float2Fixed(num1),num2Changed=float2Fixed(num2),baseNum=digitLength(num1)+digitLength(num2),leftValue=num1Changed*num2Changed;return leftValue/Math.pow(10,baseNum)}function accDivide(num1,num2){for(var others=[],_i=2;_i0)return accDivide.apply(void 0,[accDivide(num1,num2),others[0]].concat(others.slice(1)));var num1Changed=float2Fixed(num1),num2Changed=float2Fixed(num2);return times(num1Changed/num2Changed,Math.pow(10,digitLength(num2)-digitLength(num1)))}return accDivide(num,arg)}}),_.extend(BI,{startWith:function(str,startTag){return str=str||"",!(null==startTag||""==startTag||0===str.length||startTag.length>str.length)&&str.substr(0,startTag.length)==startTag},endWith:function(str,endTag){return!(null==endTag||""==endTag||0===str.length||endTag.length>str.length)&&str.substring(str.length-endTag.length)==endTag},getQuery:function(str,name){var reg=new RegExp("(^|&)"+name+"=([^&]*)(&|$)"),r=str.substr(str.indexOf("?")+1).match(reg);return r?unescape(r[2]):null},appendQuery:function(str,paras){if(!paras)return str;var src=str;return src.indexOf("?")===-1&&(src+="?"),src.endWith("?")!==!1||(src+="&"),_.each(paras,function(value,name){"string"==typeof name&&(src+=name+"="+value+"&")}),src=src.substr(0,src.length-1)},replaceAll:function(str,s1,s2){return str.replace(new RegExp(s1,"gm"),s2)},perfectStart:function(str,start){return str.startWith(start)?str:start+str},allIndexOf:function(str,sub){if("string"!=typeof sub)return[];for(var location=[],offset=0;str.length>0;){var loc=str.indexOf(sub);if(loc===-1)break;location.push(offset+loc),str=str.substring(loc+sub.length,str.length),offset+=loc+sub.length}return location}}),!function(){var i18nStore={};_.extend(BI,{addI18n:function(i18n){BI.extend(i18nStore,i18n)},i18nText:function(key){var localeText=i18nStore[key]||BI.i18n&&BI.i18n[key]||"";localeText||(localeText=key);var len=arguments.length;if(len>1){if(!(localeText.indexOf("{R1}")>-1)){var args=Array.prototype.slice.call(arguments),count=1;return BI.replaceAll(localeText,"\\{\\s*\\}",function(){return args[count++]+""})}for(var i=1;i1?v.toString():v[0]:v,BI.isNull(v))throw new Error("value cannot be null");var cardName=o.cardNameCreator(v);if(!o.cardLayout.isCardExisted(cardName)){var card=o.cardCreator(cardName);o.cardLayout.addCardByName(cardName,card),o.afterCardCreated(cardName)}o.cardLayout.showCardByName(cardName),BI.nextTick(function(){o.afterCardShow(cardName),self.fireEvent(BI.ShowListener.EVENT_CHANGE,cardName)})}})}}),BI.ShowListener.EVENT_CHANGE="EVENT_CHANGE",BI.StyleLoaderManager=BI.inherit(BI.OB,{_defaultConfig:function(){return BI.extend(BI.StyleLoaderManager.superclass._defaultConfig.apply(this,arguments),{})},_init:function(){BI.StyleLoaderManager.superclass._init.apply(this,arguments),this.stylesManager={}},loadStyle:function(name,styleString){if(_global.document){var d=document,styles=d.createElement("style");return d.getElementsByTagName("head")[0].appendChild(styles),styles.setAttribute("type","text/css"),styles.styleSheet?styles.styleSheet.cssText=styleString:styles.appendChild(document.createTextNode(styleString)),this.stylesManager[name]=styles,this}},get:function(name){return this.stylesManager[name]},has:function(name){return null!=this.stylesManager[name]},removeStyle:function(name){return this.has(name)?(this.stylesManager[name].parentNode.removeChild(this.stylesManager[name]),delete this.stylesManager[name],this):this}}),BI.Logic=BI.inherit(BI.OB,{createLogic:function(){return this.options||{}}}),BI.LogicFactory={Type:{Vertical:"vertical",Horizontal:"horizontal",Table:"table",HorizontalFill:"horizontal_fill"},createLogic:function(key,options){var logic;switch(key){case BI.LogicFactory.Type.Vertical:logic=BI.VerticalLayoutLogic;break;case BI.LogicFactory.Type.Horizontal:logic=BI.HorizontalLayoutLogic;break;case BI.LogicFactory.Type.Table:logic=BI.TableLayoutLogic;break;case BI.LogicFactory.Type.HorizontalFill:logic=BI.HorizontalFillLayoutLogic;break;default:logic=BI.Logic}return new logic(options).createLogic()},createLogicTypeByDirection:function(direction){switch(direction){case BI.Direction.Top:case BI.Direction.Bottom:case BI.Direction.Custom:return BI.LogicFactory.Type.Vertical;case BI.Direction.Left:case BI.Direction.Right:return BI.LogicFactory.Type.Horizontal}},createLogicItemsByDirection:function(direction){var layout,items=Array.prototype.slice.call(arguments,1);switch(items=BI.map(items,function(i,item){return BI.isWidget(item)?{el:item,width:item.options.width,height:item.options.height}:item}),direction){case BI.Direction.Bottom:layout=BI.LogicFactory.Type.Vertical,items.reverse();break;case BI.Direction.Right:layout=BI.LogicFactory.Type.Horizontal,items.reverse();break;case BI.Direction.Custom:items=items.slice(1)}return items}},BI.VerticalLayoutLogic=BI.inherit(BI.Logic,{_defaultConfig:function(){return BI.extend(BI.VerticalLayoutLogic.superclass._defaultConfig.apply(this,arguments),{dynamic:!1,scrollable:null,scrolly:!1,scrollx:!1,items:[],hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},createLogic:function(){var layout,o=this.options;return layout=o.dynamic?"bi.vertical":"bi.vtape",{type:layout,scrollable:o.scrollable,scrolly:o.scrolly,scrollx:o.scrollx,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,items:o.items}},_init:function(){BI.VerticalLayoutLogic.superclass._init.apply(this,arguments)}}),BI.HorizontalLayoutLogic=BI.inherit(BI.Logic,{_defaultConfig:function(){return BI.extend(BI.HorizontalLayoutLogic.superclass._defaultConfig.apply(this,arguments),{dynamic:!1,scrollable:null,scrolly:!1,scrollx:!1,items:[],hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},createLogic:function(){var layout,o=this.options;return layout=o.dynamic?"bi.vertical_adapt":"bi.htape",{type:layout,scrollable:o.scrollable,scrolly:o.scrolly,scrollx:o.scrollx,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,items:o.items}},_init:function(){BI.HorizontalLayoutLogic.superclass._init.apply(this,arguments)}}),BI.TableLayoutLogic=BI.inherit(BI.Logic,{_defaultConfig:function(){return BI.extend(BI.TableLayoutLogic.superclass._defaultConfig.apply(this,arguments),{dynamic:!1,scrollable:null,scrolly:!1,scrollx:!1,columns:0,rows:0,columnSize:[],rowSize:[],hgap:0,vgap:0,items:[]})},createLogic:function(){var layout,o=this.options;return layout=o.dynamic?"bi.table":"bi.window",{type:layout,scrollable:o.scrollable,scrolly:o.scrolly,scrollx:o.scrollx,columns:o.columns,rows:o.rows,columnSize:o.columnSize,rowSize:o.rowSize,hgap:o.hgap,vgap:o.vgap,items:o.items}},_init:function(){BI.TableLayoutLogic.superclass._init.apply(this,arguments)}}),BI.HorizontalFillLayoutLogic=BI.inherit(BI.Logic,{_defaultConfig:function(){return BI.extend(BI.HorizontalFillLayoutLogic.superclass._defaultConfig.apply(this,arguments),{dynamic:!1,scrollable:null,scrolly:!1,scrollx:!1,items:[],hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},createLogic:function(){var layout,o=this.options,columnSize=[];return BI.each(o.items,function(i,item){columnSize.push(item.width||0)}),layout=o.dynamic?"bi.horizontal_adapt":"bi.htape",{type:layout,columnSize:columnSize,scrollable:o.scrollable,scrolly:o.scrolly,scrollx:o.scrollx,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,items:o.items}},_init:function(){BI.HorizontalFillLayoutLogic.superclass._init.apply(this,arguments)}}),BI.prepares.push(function(){var _isSupportFlex,isSupportFlex=function(){return null==_isSupportFlex&&(_isSupportFlex=!(!BI.isSupportCss3||!BI.isSupportCss3("flex"))),_isSupportFlex};BI.Plugin.registerWidget("bi.horizontal",function(ob){var isIE=BI.isIE(),supportFlex=isSupportFlex(),isLessIE8=isIE&&BI.getIEVersion()<8;return ob.verticalAlign===BI.VerticalAlign.Middle&&ob.horizontalAlign===BI.HorizontalAlign.Center?isLessIE8?ob:BI.extend(ob,{type:"bi.table_adapt"}):ob.verticalAlign===BI.VerticalAlign.Middle&&ob.horizontalAlign===BI.HorizontalAlign.Left?isLessIE8?ob:BI.extend(ob,{type:"bi.table_adapt"}):ob.verticalAlign===BI.VerticalAlign.Top&&ob.horizontalAlign===BI.HorizontalAlign.Center?isLessIE8?ob:BI.extend(ob,{type:"bi.table_adapt"}):isIE?ob:supportFlex?BI.extend(ob,{type:"bi.flex_horizontal"}):BI.extend(ob,{type:"bi.table_adapt"})}),BI.Plugin.registerWidget("bi.center_adapt",function(ob){var isIE=BI.isIE(),supportFlex=isSupportFlex(),justOneItem=ob.items&&ob.items.length<=1;return!isIE&&supportFlex&&justOneItem?ob.scrollable===!0||ob.scrollx===!0||ob.scrolly===!0?BI.extend(ob,{type:"bi.flex_scrollable_center_adapt"}):BI.extend(ob,{type:"bi.flex_center_adapt"}):justOneItem?BI.extend(ob,{type:"bi.inline_center_adapt"}):ob}),BI.Plugin.registerWidget("bi.vertical_adapt",function(ob){ +var isIE=BI.isIE(),supportFlex=isSupportFlex();return!isIE&&supportFlex?ob.scrollable===!0||ob.scrollx===!0||ob.scrolly===!0?BI.extend({},ob,{type:"bi.flex_scrollable_vertical_center_adapt"}):BI.extend(ob,{type:"bi.flex_vertical_center_adapt"}):BI.extend(ob,{type:"bi.inline_vertical_adapt"})}),BI.Plugin.registerWidget("bi.horizontal_adapt",function(ob){return ob.items&&ob.items.length<=1?BI.extend(ob,{type:"bi.horizontal_auto"}):ob}),BI.Plugin.registerWidget("bi.float_center_adapt",function(ob){return!BI.isIE()&&isSupportFlex()?ob.scrollable===!0||ob.scrollx===!0||ob.scrolly===!0?BI.extend({},ob,{type:"bi.flex_scrollable_center_adapt"}):BI.extend(ob,{type:"bi.flex_center_adapt"}):BI.extend(ob,{type:"bi.inline_center_adapt"})}),BI.Plugin.registerWidget("bi.flex_horizontal",function(ob){if(ob.scrollable===!0||ob.scrolly===!0)return BI.extend({},ob,{type:"bi.flex_scrollable_horizontal"})}),BI.Plugin.registerWidget("bi.flex_vertical",function(ob){if(ob.scrollable===!0||ob.scrollx===!0)return BI.extend({},ob,{type:"bi.flex_scrollable_vertical"})}),BI.Plugin.registerWidget("bi.flex_horizontal_adapt",function(ob){if(ob.scrollable===!0||ob.scrollx===!0)return BI.extend({},ob,{type:"bi.flex_scrollable_horizontal_adapt"})}),BI.Plugin.registerWidget("bi.flex_vertical_adapt",function(ob){if(ob.scrollable===!0||ob.scrolly===!0)return BI.extend({},ob,{type:"bi.flex_scrollable_vertical_adapt"})}),BI.Plugin.registerWidget("bi.flex_horizontal_center_adapt",function(ob){if(ob.scrollable===!0||ob.scrollx===!0)return BI.extend({},ob,{type:"bi.flex_scrollable_horizontal_adapt"})}),BI.Plugin.registerWidget("bi.flex_vertical_center_adapt",function(ob){if(ob.scrollable===!0||ob.scrolly===!0)return BI.extend({},ob,{type:"bi.flex_scrollable_vertical_adapt"})}),BI.Plugin.registerWidget("bi.flex_center_adapt",function(ob){if(ob.scrollable===!0||ob.scrolly===!0||ob.scrollx===!0)return BI.extend({},ob,{type:"bi.flex_scrollable_center_adapt"})}),BI.Plugin.registerWidget("bi.radio",function(ob){return BI.isIE()&&BI.getIEVersion()<9?BI.extend(ob,{type:"bi.image_radio"}):ob}),BI.Plugin.registerWidget("bi.checkbox",function(ob){return BI.isIE()&&BI.getIEVersion()<9?BI.extend(ob,{type:"bi.image_checkbox"}):ob}),BI.Plugin.registerWidget("bi.half_icon_button",function(ob){return BI.isIE()&&BI.getIEVersion()<9?ob:BI.extend(ob,{type:"bi.half_button"})})}),!function(){var attachEvent=_global.document&&_global.document.attachEvent,stylesCreated=!1;if(_global.document&&!attachEvent){var requestFrame=function(){var raf=_global.requestAnimationFrame||_global.mozRequestAnimationFrame||_global.webkitRequestAnimationFrame||function(fn){return _global.setTimeout(fn,20)};return function(fn){return raf(fn)}}(),cancelFrame=function(){var cancel=_global.cancelAnimationFrame||_global.mozCancelAnimationFrame||_global.webkitCancelAnimationFrame||_global.clearTimeout;return function(id){return cancel(id)}}(),resetTriggers=function(element){var triggers=element.__resizeTriggers__,expand=triggers.firstElementChild,contract=triggers.lastElementChild,expandChild=expand.firstElementChild;contract.scrollLeft=contract.scrollWidth,contract.scrollTop=contract.scrollHeight,expandChild.style.width=expand.offsetWidth+1+"px",expandChild.style.height=expand.offsetHeight+1+"px",expand.scrollLeft=expand.scrollWidth,expand.scrollTop=expand.scrollHeight},checkTriggers=function(element){return element.offsetWidth!==element.__resizeLast__.width||element.offsetHeight!==element.__resizeLast__.height},scrollListener=function(e){var element=this;resetTriggers(this),this.__resizeRAF__&&cancelFrame(this.__resizeRAF__),this.__resizeRAF__=requestFrame(function(){checkTriggers(element)&&(element.__resizeLast__.width=element.offsetWidth,element.__resizeLast__.height=element.offsetHeight,element.__resizeListeners__.forEach(function(fn){fn.call(element,e)}))})},animation=!1,animationstring="animation",keyframeprefix="",animationstartevent="animationstart",domPrefixes="Webkit Moz O ms".split(" "),startEvents="webkitAnimationStart animationstart oAnimationStart MSAnimationStart".split(" "),pfx="",elm=document.createElement("fakeelement");if(void 0!==elm.style.animationName&&(animation=!0),animation===!1)for(var i=0;i div, .contract-trigger:before { content: " "; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',head=document.head||document.getElementsByTagName("head")[0],style=document.createElement("style");style.type="text/css",style.styleSheet?style.styleSheet.cssText=css:style.appendChild(document.createTextNode(css)),head.appendChild(style),stylesCreated=!0}},addResizeListener=function(element,fn){attachEvent?(element.attachEvent("onresize",fn),BI.nextTick(fn)):(element.__resizeTriggers__||("static"===getComputedStyle(element).position&&(element.style.position="relative"),createStyles(),element.__resizeLast__={},element.__resizeListeners__=[],(element.__resizeTriggers__=document.createElement("div")).className="resize-triggers",element.__resizeTriggers__.innerHTML='
    ',element.appendChild(element.__resizeTriggers__),resetTriggers(element),element.addEventListener("scroll",scrollListener,!0),animationstartevent&&element.__resizeTriggers__.addEventListener(animationstartevent,function(e){e.animationName===animationName&&resetTriggers(element)})),element.__resizeListeners__.push(fn))},removeResizeListener=function(element,fn){attachEvent?element.detachEvent("onresize",fn):(element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn),1),element.__resizeListeners__.length||(element.removeEventListener("scroll",scrollListener),element.__resizeTriggers__=!element.removeChild(element.__resizeTriggers__)))};BI.ResizeDetector={addResizeListener:function(widget,fn){return addResizeListener(widget.element[0],fn),function(){removeResizeListener(widget.element[0],fn)}},removeResizeListener:function(widget,fn){removeResizeListener(widget.element[0],fn)}}}(),!function(){BI.DOM={},BI.extend(BI.DOM,{ready:function(fn){BI.Widget._renderEngine.createElement(document).ready(fn)}}),BI.extend(BI.DOM,{patchProps:function(fromElement,toElement){var elemData=BI.jQuery._data(fromElement[0]),events=elemData.events;BI.each(events,function(eventKey,event){BI.each(event,function(i,handler){toElement.on(eventKey+(handler.namespace?"."+handler.namespace:""),handler)})});var fromChildren=fromElement.children(),toChildren=toElement.children();if(fromChildren.length!==toChildren.length)throw new Error("不匹配");BI.each(fromChildren,function(i,child){BI.DOM.patchProps(BI.jQuery(child),BI.jQuery(toChildren[i]))}),BI.each(fromElement.data("__widgets"),function(i,widget){widget.element=toElement})},hang:function(doms){if(!BI.isEmpty(doms)){var frag=BI.Widget._renderEngine.createFragment();return BI.each(doms,function(i,dom){dom instanceof BI.Widget&&(dom=dom.element),dom instanceof BI.$&&dom[0]&&frag.appendChild(dom[0])}),frag}},isExist:function(obj){return BI.Widget._renderEngine.createElement("body").find(obj.element).length>0},preloadImages:function(srcArray,onload){function complete(){count++,count>=srcArray.length&&onload()}var count=0,images=[];BI.each(srcArray,function(i,src){images[i]=new Image,images[i].src=src,images[i].onload=function(){complete()},images[i].onerror=function(){complete()}})},getTextSizeWidth:function(text,fontSize){var span=BI.Widget._renderEngine.createElement("").addClass("text-width-span").appendTo("body");null==fontSize&&(fontSize=12),fontSize+="px",span.css("font-size",fontSize).text(text);var width=span.width();return span.remove(),width},getTextSizeHeight:function(text,fontSize){var span=BI.Widget._renderEngine.createElement("").addClass("text-width-span").appendTo("body");null==fontSize&&(fontSize=12),fontSize+="px",span.css("font-size",fontSize).text(text);var height=span.height();return span.remove(),height},getScrollWidth:function(){if(BI.isNull(this._scrollWidth)||0===this._scrollWidth){var ul=BI.Widget._renderEngine.createElement("
    ").width(50).height(50).css({position:"absolute",top:"-9999px",overflow:"scroll"}).appendTo("body");this._scrollWidth=ul[0].offsetWidth-ul[0].clientWidth,ul.destroy()}return this._scrollWidth},getImage:function(param,fillStyle,backgroundColor){var canvas=document.createElement("canvas"),ratio=2;BI.Widget._renderEngine.createElement("body").append(canvas);var ctx=canvas.getContext("2d");ctx.font="12px Georgia";var w=ctx.measureText(param).width+4;canvas.width=w*ratio,canvas.height=16*ratio,ctx.font=12*ratio+"px Georgia",ctx.fillStyle=fillStyle||"#3685f2",ctx.textBaseline="middle",ctx.fillText(param,2*ratio,9*ratio),BI.Widget._renderEngine.createElement(canvas).destroy();var backColor=backgroundColor||"rgba(54, 133, 242, 0.1)";return{width:w,height:16,src:canvas.toDataURL("image/png"),style:"background-color: "+backColor+";vertical-align: middle; margin: 0 1px; width:"+w+"px;height: 16px; max-width:"+w+"px;max-height: 16px; min-width:"+w+"px;min-height: 16px",param:param}}}),BI.extend(BI.DOM,{isColor:function(color){return color&&(this.isRGBColor(color)||this.isHexColor(color))},isRGBColor:function(color){return!!color&&"rgb"===color.substr(0,3)},isHexColor:function(color){return!!color&&("#"===color[0]&&7===color.length)},isDarkColor:function(hex){if(!hex||!this.isHexColor(hex))return!1;var rgb=this.rgb2json(this.hex2rgb(hex)),grayLevel=Math.round(.299*rgb.r+.587*rgb.g+.114*rgb.b);return grayLevel<192},getContrastColor:function(color){return color&&this.isColor(color)?this.isDarkColor(color)?"#ffffff":"#1a1a1a":""},rgb2hex:function(rgbColour){if(!rgbColour||"rgb"!=rgbColour.substr(0,3))return"";var rgbValues=rgbColour.match(/\d+(\.\d+)?/g),red=BI.parseInt(rgbValues[0]),green=BI.parseInt(rgbValues[1]),blue=BI.parseInt(rgbValues[2]),hexColour="#"+this.int2hex(red)+this.int2hex(green)+this.int2hex(blue);return hexColour},rgb2json:function(rgbColour){if(!rgbColour)return{};if(!this.isRGBColor(rgbColour))return{};var rgbValues=rgbColour.match(/\d+(\.\d+)?/g);return{r:BI.parseInt(rgbValues[0]),g:BI.parseInt(rgbValues[1]),b:BI.parseInt(rgbValues[2])}},rgba2json:function(rgbColour){if(!rgbColour)return{};var rgbValues=rgbColour.match(/\d+(\.\d+)?/g);return{r:BI.parseInt(rgbValues[0]),g:BI.parseInt(rgbValues[1]),b:BI.parseInt(rgbValues[2]),a:BI.parseFloat(rgbValues[3])}},json2rgb:function(rgb){return BI.isKey(rgb.r)&&BI.isKey(rgb.g)&&BI.isKey(rgb.b)?"rgb("+rgb.r+","+rgb.g+","+rgb.b+")":""},json2rgba:function(rgba){return BI.isKey(rgba.r)&&BI.isKey(rgba.g)&&BI.isKey(rgba.b)?"rgba("+rgba.r+","+rgba.g+","+rgba.b+","+rgba.a+")":""},int2hex:function(strNum){var hexdig=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];return hexdig[strNum>>>4]+""+hexdig[15&strNum]},hex2rgb:function(color){if(!color)return"";if(!this.isHexColor(color))return color;var tempValue="rgb(",colorArray;return 7===color.length?colorArray=[BI.parseInt("0x"+color.substring(1,3)),BI.parseInt("0x"+color.substring(3,5)),BI.parseInt("0x"+color.substring(5,7))]:4===color.length&&(colorArray=[BI.parseInt("0x"+color.substring(1,2)),BI.parseInt("0x"+color.substring(2,3)),BI.parseInt("0x"+color.substring(3,4))]),tempValue+=colorArray[0]+",",tempValue+=colorArray[1]+",",tempValue+=colorArray[2]+")"},rgba2rgb:function(rgbColor,bgColor){if(BI.isNull(bgColor)&&(bgColor=1),"rgba"!=rgbColor.substr(0,4))return"";var rgbValues=rgbColor.match(/\d+(\.\d+)?/g);if(rgbValues.length<4)return"";var R=BI.parseFloat(rgbValues[0]),G=BI.parseFloat(rgbValues[1]),B=BI.parseFloat(rgbValues[2]),A=BI.parseFloat(rgbValues[3]);return"rgb("+Math.floor(255*(bgColor*(1-A))+R*A)+","+Math.floor(255*(bgColor*(1-A))+G*A)+","+Math.floor(255*(bgColor*(1-A))+B*A)+")"}}),BI.extend(BI.DOM,{getLeftPosition:function(combo,popup,extraWidth){return{left:combo.element.offset().left-popup.element.outerWidth()-(extraWidth||0)}},getInnerLeftPosition:function(combo,popup,extraWidth){return{left:combo.element.offset().left+(extraWidth||0)}},getRightPosition:function(combo,popup,extraWidth){var el=combo.element;return{left:el.offset().left+el.outerWidth()+(extraWidth||0)}},getInnerRightPosition:function(combo,popup,extraWidth){var el=combo.element,viewBounds=popup.element.bounds();return{left:el.offset().left+el.outerWidth()-viewBounds.width-(extraWidth||0)}},getTopPosition:function(combo,popup,extraHeight){return{top:combo.element.offset().top-popup.element.outerHeight()-(extraHeight||0)}},getBottomPosition:function(combo,popup,extraHeight){var el=combo.element;return{top:el.offset().top+el.outerHeight()+(extraHeight||0)}},isLeftSpaceEnough:function(combo,popup,extraWidth){return BI.DOM.getLeftPosition(combo,popup,extraWidth).left>=0},isInnerLeftSpaceEnough:function(combo,popup,extraWidth){var viewBounds=popup.element.bounds(),windowBounds=BI.Widget._renderEngine.createElement("body").bounds();return BI.DOM.getInnerLeftPosition(combo,popup,extraWidth).left+viewBounds.width<=windowBounds.width},isRightSpaceEnough:function(combo,popup,extraWidth){var viewBounds=popup.element.bounds(),windowBounds=BI.Widget._renderEngine.createElement("body").bounds();return BI.DOM.getRightPosition(combo,popup,extraWidth).left+viewBounds.width<=windowBounds.width},isInnerRightSpaceEnough:function(combo,popup,extraWidth){return BI.DOM.getInnerRightPosition(combo,popup,extraWidth).left>=0},isTopSpaceEnough:function(combo,popup,extraHeight){return BI.DOM.getTopPosition(combo,popup,extraHeight).top>=0},isBottomSpaceEnough:function(combo,popup,extraHeight){var viewBounds=popup.element.bounds(),windowBounds=BI.Widget._renderEngine.createElement("body").bounds();return BI.DOM.getBottomPosition(combo,popup,extraHeight).top+viewBounds.height<=windowBounds.height},isRightSpaceLarger:function(combo){var windowBounds=BI.Widget._renderEngine.createElement("body").bounds();return windowBounds.width-combo.element.offset().left-combo.element.bounds().width>=combo.element.offset().left},isBottomSpaceLarger:function(combo){var windowBounds=BI.Widget._renderEngine.createElement("body").bounds();return windowBounds.height-combo.element.offset().top-combo.element.bounds().height>=combo.element.offset().top},getLeftAlignPosition:function(combo,popup,extraWidth){var viewBounds=popup.element.bounds(),windowBounds=BI.Widget._renderEngine.createElement("body").bounds(),left=combo.element.offset().left+extraWidth;return left+viewBounds.width>windowBounds.width&&(left=windowBounds.width-viewBounds.width),left<0&&(left=0),{left:left}},getLeftAdaptPosition:function(combo,popup,extraWidth){return BI.DOM.isLeftSpaceEnough(combo,popup,extraWidth)?BI.DOM.getLeftPosition(combo,popup,extraWidth):{left:0}},getRightAlignPosition:function(combo,popup,extraWidth){var comboBounds=combo.element.bounds(),viewBounds=popup.element.bounds(),left=combo.element.offset().left+comboBounds.width-viewBounds.width-extraWidth;return left<0&&(left=0),{left:left}},getRightAdaptPosition:function(combo,popup,extraWidth){return BI.DOM.isRightSpaceEnough(combo,popup,extraWidth)?BI.DOM.getRightPosition(combo,popup,extraWidth):{left:BI.Widget._renderEngine.createElement("body").bounds().width-popup.element.bounds().width}},getTopAlignPosition:function(combo,popup,extraHeight,needAdaptHeight){var comboOffset=combo.element.offset(),comboBounds=combo.element.bounds(),popupBounds=popup.element.bounds(),windowBounds=BI.Widget._renderEngine.createElement("body").bounds(),top,adaptHeight;return BI.DOM.isBottomSpaceEnough(combo,popup,-1*comboBounds.height+extraHeight)?top=comboOffset.top+extraHeight:needAdaptHeight?(top=comboOffset.top+extraHeight,adaptHeight=windowBounds.height-top):(top=windowBounds.height-popupBounds.height,topwindowBounds.height?{top:0,adaptHeight:windowBounds.height-extraHeight}:{top:0}},getBottomAlignPosition:function(combo,popup,extraHeight,needAdaptHeight){var comboOffset=combo.element.offset(),comboBounds=combo.element.bounds(),popupBounds=popup.element.bounds(),windowBounds=BI.Widget._renderEngine.createElement("body").bounds(),top,adaptHeight;return BI.DOM.isTopSpaceEnough(combo,popup,-1*comboBounds.height+extraHeight)?top=comboOffset.top+comboBounds.height-popupBounds.height-extraHeight:needAdaptHeight?(top=0,adaptHeight=comboOffset.top+comboBounds.height-extraHeight):(top=0,popupBounds.height+extraHeight>windowBounds.height&&(adaptHeight=windowBounds.height-extraHeight)),top<0&&(top=0),adaptHeight?{top:top,adaptHeight:adaptHeight}:{top:top}},getBottomAdaptPosition:function(combo,popup,extraHeight,needAdaptHeight){var comboOffset=combo.element.offset(),comboBounds=combo.element.bounds(),popupBounds=popup.element.bounds(),windowBounds=BI.Widget._renderEngine.createElement("body").bounds();return BI.DOM.isBottomSpaceEnough(combo,popup,extraHeight)?BI.DOM.getBottomPosition(combo,popup,extraHeight):needAdaptHeight?{top:comboOffset.top+comboBounds.height+extraHeight,adaptHeight:windowBounds.height-comboOffset.top-comboBounds.height-extraHeight}:popupBounds.height+extraHeight>windowBounds.height?{top:extraHeight,adaptHeight:windowBounds.height-extraHeight}:{top:windowBounds.height-popupBounds.height-extraHeight}},getCenterAdaptPosition:function(combo,popup){var comboOffset=combo.element.offset(),comboBounds=combo.element.bounds(),popupBounds=popup.element.bounds(),windowBounds=BI.Widget._renderEngine.createElement("body").bounds(),left;return left=comboOffset.left+comboBounds.width/2+popupBounds.width/2>windowBounds.width?windowBounds.width-popupBounds.width:comboOffset.left+comboBounds.width/2-popupBounds.width/2,left<0&&(left=0),{left:left}},getMiddleAdaptPosition:function(combo,popup){var comboOffset=combo.element.offset(),comboBounds=combo.element.bounds(),popupBounds=popup.element.bounds(),windowBounds=BI.Widget._renderEngine.createElement("body").bounds(),top;return top=comboOffset.top+comboBounds.height/2+popupBounds.height/2>windowBounds.height?windowBounds.height-popupBounds.height:comboOffset.top+comboBounds.height/2-popupBounds.height/2,top<0&&(top=0),{top:top}},getComboPositionByDirections:function(combo,popup,extraWidth,extraHeight,needAdaptHeight,directions){extraWidth||(extraWidth=0),extraHeight||(extraHeight=0);var i,direct,leftRight=[],topBottom=[],innerLeftRight=[],isNeedAdaptHeight=!1,tbFirst=!1,lrFirst=!1,left,top,pos,firstDir=directions[0];for(i=0;i0&&length-1 in obj)))}function createOptions(options){var object=optionsCache[options]={};return jQuery.each(options.match(core_rnotwhite)||[],function(_,flag){object[flag]=!0}),object}function internalData(elem,name,data,pvt){if(jQuery.acceptData(elem)){var thisCache,ret,internalKey=jQuery.expando,getByName="string"==typeof name,isNode=elem.nodeType,cache=isNode?jQuery.cache:elem,id=isNode?elem[internalKey]:elem[internalKey]&&internalKey;if(id&&cache[id]&&(pvt||cache[id].data)||!getByName||data!==undefined)return id||(isNode?elem[internalKey]=id=core_deletedIds.pop()||jQuery.guid++:id=internalKey),cache[id]||(cache[id]={},isNode||(cache[id].toJSON=jQuery.noop)),"object"!=typeof name&&"function"!=typeof name||(pvt?cache[id]=jQuery.extend(cache[id],name):cache[id].data=jQuery.extend(cache[id].data,name)),thisCache=cache[id],pvt||(thisCache.data||(thisCache.data={}),thisCache=thisCache.data),data!==undefined&&(thisCache[jQuery.camelCase(name)]=data),getByName?(ret=thisCache[name],null==ret&&(ret=thisCache[jQuery.camelCase(name)])):ret=thisCache,ret}}function internalRemoveData(elem,name,pvt){if(jQuery.acceptData(elem)){var i,l,thisCache,isNode=elem.nodeType,cache=isNode?jQuery.cache:elem,id=isNode?elem[jQuery.expando]:jQuery.expando;if(cache[id]){if(name&&(thisCache=pvt?cache[id]:cache[id].data)){jQuery.isArray(name)?name=name.concat(jQuery.map(name,jQuery.camelCase)):name in thisCache?name=[name]:(name=jQuery.camelCase(name),name=name in thisCache?[name]:name.split(" "));for(i=0,l=name.length;i=0===keep})}function createSafeFragment(document){var list=nodeNames.split("|"),safeFrag=document.createDocumentFragment();if(safeFrag.createElement)for(;list.length;)safeFrag.createElement(list.pop());return safeFrag}function findOrAppend(elem,tag){return elem.getElementsByTagName(tag)[0]||elem.appendChild(elem.ownerDocument.createElement(tag))}function disableScript(elem){var attr=elem.getAttributeNode("type");return elem.type=(attr&&attr.specified)+"/"+elem.type,elem}function restoreScript(elem){var match=rscriptTypeMasked.exec(elem.type);return match?elem.type=match[1]:elem.removeAttribute("type"),elem}function setGlobalEval(elems,refElements){for(var elem,i=0;null!=(elem=elems[i]);i++)jQuery._data(elem,"globalEval",!refElements||jQuery._data(refElements[i],"globalEval"))}function cloneCopyEvent(src,dest){if(1===dest.nodeType&&jQuery.hasData(src)){var type,i,l,oldData=jQuery._data(src),curData=jQuery._data(dest,oldData),events=oldData.events;if(events){delete curData.handle,curData.events={};for(type in events)for(i=0,l=events[type].length;i").css("cssText","display:block !important")).appendTo(doc.documentElement),doc=(iframe[0].contentWindow||iframe[0].contentDocument).document,doc.write(""),doc.close(),display=actualDisplay(nodeName,doc),iframe.detach()),elemdisplay[nodeName]=display),display}function actualDisplay(name,doc){var elem=jQuery(doc.createElement(name)).appendTo(doc.body),display=jQuery.css(elem[0],"display");return elem.remove(),display}function buildParams(prefix,obj,traditional,add){var name;if(jQuery.isArray(obj))jQuery.each(obj,function(i,v){traditional||rbracket.test(prefix)?add(prefix,v):buildParams(prefix+"["+("object"==typeof v?i:"")+"]",v,traditional,add)});else if(traditional||"object"!==jQuery.type(obj))add(prefix,obj);else for(name in obj)buildParams(prefix+"["+name+"]",obj[name],traditional,add)}function addToPrefiltersOrTransports(structure){return function(dataTypeExpression,func){"string"!=typeof dataTypeExpression&&(func=dataTypeExpression,dataTypeExpression="*");var dataType,i=0,dataTypes=dataTypeExpression.toLowerCase().match(core_rnotwhite)||[];if(jQuery.isFunction(func))for(;dataType=dataTypes[i++];)"+"===dataType[0]?(dataType=dataType.slice(1)||"*",(structure[dataType]=structure[dataType]||[]).unshift(func)):(structure[dataType]=structure[dataType]||[]).push(func)}}function inspectPrefiltersOrTransports(structure,options,originalOptions,jqXHR){function inspect(dataType){var selected;return inspected[dataType]=!0,jQuery.each(structure[dataType]||[],function(_,prefilterOrFactory){var dataTypeOrTransport=prefilterOrFactory(options,originalOptions,jqXHR);return"string"!=typeof dataTypeOrTransport||seekingTransport||inspected[dataTypeOrTransport]?seekingTransport?!(selected=dataTypeOrTransport):void 0:(options.dataTypes.unshift(dataTypeOrTransport),inspect(dataTypeOrTransport),!1)}),selected}var inspected={},seekingTransport=structure===transports;return inspect(options.dataTypes[0])||!inspected["*"]&&inspect("*")}function ajaxExtend(target,src){var deep,key,flatOptions=jQuery.ajaxSettings.flatOptions||{};for(key in src)src[key]!==undefined&&((flatOptions[key]?target:deep||(deep={}))[key]=src[key]);return deep&&jQuery.extend(!0,target,deep),target}function ajaxHandleResponses(s,jqXHR,responses){var firstDataType,ct,finalDataType,type,contents=s.contents,dataTypes=s.dataTypes,responseFields=s.responseFields;for(type in responseFields)type in responses&&(jqXHR[responseFields[type]]=responses[type]);for(;"*"===dataTypes[0];)dataTypes.shift(),ct===undefined&&(ct=s.mimeType||jqXHR.getResponseHeader("Content-Type"));if(ct)for(type in contents)if(contents[type]&&contents[type].test(ct)){dataTypes.unshift(type);break}if(dataTypes[0]in responses)finalDataType=dataTypes[0];else{for(type in responses){if(!dataTypes[0]||s.converters[type+" "+dataTypes[0]]){finalDataType=type;break}firstDataType||(firstDataType=type)}finalDataType=finalDataType||firstDataType}if(finalDataType)return finalDataType!==dataTypes[0]&&dataTypes.unshift(finalDataType),responses[finalDataType]}function ajaxConvert(s,response){var conv2,current,conv,tmp,converters={},i=0,dataTypes=s.dataTypes.slice(),prev=dataTypes[0];if(s.dataFilter&&(response=s.dataFilter(response,s.dataType)),dataTypes[1])for(conv in s.converters)converters[conv.toLowerCase()]=s.converters[conv];for(;current=dataTypes[++i];)if("*"!==current){if("*"!==prev&&prev!==current){if(conv=converters[prev+" "+current]||converters["* "+current],!conv)for(conv2 in converters)if(tmp=conv2.split(" "),tmp[1]===current&&(conv=converters[prev+" "+tmp[0]]||converters["* "+tmp[0]])){conv===!0?conv=converters[conv2]:converters[conv2]!==!0&&(current=tmp[0],dataTypes.splice(i--,0,current));break}if(conv!==!0)if(conv&&s["throws"])response=conv(response);else try{response=conv(response)}catch(e){return{state:"parsererror",error:conv?e:"No conversion from "+prev+" to "+current}}}prev=current}return{state:"success",data:response}}function createStandardXHR(){try{return new window.XMLHttpRequest}catch(e){}}function createActiveXHR(){try{return new window.ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}function createFxNow(){return setTimeout(function(){fxNow=undefined}),fxNow=jQuery.now()}function createTweens(animation,props){jQuery.each(props,function(prop,value){for(var collection=(tweeners[prop]||[]).concat(tweeners["*"]),index=0,length=collection.length;index)[^>]*|#([\w-]*))$/,rsingleTag=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,rvalidchars=/^[\],:{}\s]*$/,rvalidbraces=/(?:^|:|,)(?:\s*\[)+/g,rvalidescape=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,rvalidtokens=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,rmsPrefix=/^-ms-/,rdashAlpha=/-([\da-z])/gi,fcamelCase=function(all,letter){return letter.toUpperCase()},completed=function(event){(document.addEventListener||"load"===event.type||"complete"===document.readyState)&&(detach(),jQuery.ready())},detach=function(){document.addEventListener?(document.removeEventListener("DOMContentLoaded",completed,!1),window.removeEventListener("load",completed,!1)):(document.detachEvent("onreadystatechange",completed),window.detachEvent("onload",completed))};jQuery.fn=jQuery.prototype={jquery:core_version,constructor:jQuery,init:function(selector,context,rootjQuery){var match,elem;if(!selector)return this;if("string"==typeof selector){if(match="<"===selector.charAt(0)&&">"===selector.charAt(selector.length-1)&&selector.length>=3?[null,selector,null]:rquickExpr.exec(selector),!match||!match[1]&&context)return!context||context.jquery?(context||rootjQuery).find(selector):this.constructor(context).find(selector);if(match[1]){if(context=context instanceof jQuery?context[0]:context,jQuery.merge(this,jQuery.parseHTML(match[1],context&&context.nodeType?context.ownerDocument||context:document,!0)),rsingleTag.test(match[1])&&jQuery.isPlainObject(context))for(match in context)jQuery.isFunction(this[match])?this[match](context[match]):this.attr(match,context[match]);return this}if(elem=document.getElementById(match[2]),elem&&elem.parentNode){if(elem.id!==match[2])return rootjQuery.find(selector);this.length=1,this[0]=elem}return this.context=document,this.selector=selector,this}return selector.nodeType?(this.context=this[0]=selector,this.length=1,this):jQuery.isFunction(selector)?rootjQuery.ready(selector):(selector.selector!==undefined&&(this.selector=selector.selector,this.context=selector.context),jQuery.makeArray(selector,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return core_slice.call(this)},get:function(num){return null==num?this.toArray():num<0?this[this.length+num]:this[num]},pushStack:function(elems){var ret=jQuery.merge(this.constructor(),elems);return ret.prevObject=this,ret.context=this.context,ret},each:function(callback,args){return jQuery.each(this,callback,args)},ready:function(fn){return jQuery.ready.promise().done(fn),this},slice:function(){return this.pushStack(core_slice.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(i){var len=this.length,j=+i+(i<0?len:0);return this.pushStack(j>=0&&j0||(readyList.resolveWith(document,[jQuery]),jQuery.fn.trigger&&jQuery(document).trigger("ready").off("ready"))}},isFunction:function(obj){return"function"===jQuery.type(obj)},isArray:Array.isArray||function(obj){return"array"===jQuery.type(obj)},isWindow:function(obj){return null!=obj&&obj==obj.window},isNumeric:function(obj){return!isNaN(parseFloat(obj))&&isFinite(obj)},type:function(obj){return null==obj?String(obj):"object"==typeof obj||"function"==typeof obj?class2type[core_toString.call(obj)]||"object":typeof obj},isPlainObject:function(obj){if(!obj||"object"!==jQuery.type(obj)||obj.nodeType||jQuery.isWindow(obj))return!1;try{if(obj.constructor&&!core_hasOwn.call(obj,"constructor")&&!core_hasOwn.call(obj.constructor.prototype,"isPrototypeOf"))return!1}catch(e){return!1}var key;for(key in obj);return key===undefined||core_hasOwn.call(obj,key)},isEmptyObject:function(obj){var name;for(name in obj)return!1;return!0},error:function(msg){throw new Error(msg)},parseHTML:function(data,context,keepScripts){if(!data||"string"!=typeof data)return null;"boolean"==typeof context&&(keepScripts=context,context=!1),context=context||document;var parsed=rsingleTag.exec(data),scripts=!keepScripts&&[];return parsed?[context.createElement(parsed[1])]:(parsed=jQuery.buildFragment([data],context,scripts),scripts&&jQuery(scripts).remove(),jQuery.merge([],parsed.childNodes))},parseJSON:function(data){return window.JSON&&window.JSON.parse?window.JSON.parse(data):null===data?data:"string"==typeof data&&(data=jQuery.trim(data),data&&rvalidchars.test(data.replace(rvalidescape,"@").replace(rvalidtokens,"]").replace(rvalidbraces,"")))?new Function("return "+data)():void jQuery.error("Invalid JSON: "+data)},parseXML:function(data){var xml,tmp;if(!data||"string"!=typeof data)return null;try{window.DOMParser?(tmp=new DOMParser,xml=tmp.parseFromString(data,"text/xml")):(xml=new ActiveXObject("Microsoft.XMLDOM"),xml.async="false",xml.loadXML(data))}catch(e){xml=undefined}return xml&&xml.documentElement&&!xml.getElementsByTagName("parsererror").length||jQuery.error("Invalid XML: "+data),xml},noop:function(){},globalEval:function(data){data&&jQuery.trim(data)&&(window.execScript||function(data){window.eval.call(window,data)})(data)},camelCase:function(string){return string.replace(rmsPrefix,"ms-").replace(rdashAlpha,fcamelCase)},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toLowerCase()===name.toLowerCase()},each:function(obj,callback,args){var value,i=0,length=obj.length,isArray=isArraylike(obj);if(args){if(isArray)for(;i-1;)list.splice(index,1),firing&&(index<=firingLength&&firingLength--,index<=firingIndex&&firingIndex--)}),this},has:function(fn){return fn?jQuery.inArray(fn,list)>-1:!(!list||!list.length)},empty:function(){return list=[],this},disable:function(){return list=stack=memory=undefined,this},disabled:function(){return!list},lock:function(){return stack=undefined,memory||self.disable(),this},locked:function(){return!stack},fireWith:function(context,args){return args=args||[],args=[context,args.slice?args.slice():args],!list||fired&&!stack||(firing?stack.push(args):fire(args)),this},fire:function(){return self.fireWith(this,arguments),this},fired:function(){return!!fired}};return self},jQuery.extend({Deferred:function(func){var tuples=[["resolve","done",jQuery.Callbacks("once memory"),"resolved"],["reject","fail",jQuery.Callbacks("once memory"),"rejected"],["notify","progress",jQuery.Callbacks("memory")]],state="pending",promise={state:function(){return state},always:function(){return deferred.done(arguments).fail(arguments),this},then:function(){var fns=arguments;return jQuery.Deferred(function(newDefer){jQuery.each(tuples,function(i,tuple){var action=tuple[0],fn=jQuery.isFunction(fns[i])&&fns[i];deferred[tuple[1]](function(){var returned=fn&&fn.apply(this,arguments);returned&&jQuery.isFunction(returned.promise)?returned.promise().done(newDefer.resolve).fail(newDefer.reject).progress(newDefer.notify):newDefer[action+"With"](this===promise?newDefer.promise():this,fn?[returned]:arguments)})}),fns=null}).promise()},promise:function(obj){return null!=obj?jQuery.extend(obj,promise):promise}},deferred={};return promise.pipe=promise.then,jQuery.each(tuples,function(i,tuple){var list=tuple[2],stateString=tuple[3];promise[tuple[1]]=list.add,stateString&&list.add(function(){state=stateString},tuples[1^i][2].disable,tuples[2][2].lock),deferred[tuple[0]]=function(){return deferred[tuple[0]+"With"](this===deferred?promise:this,arguments),this},deferred[tuple[0]+"With"]=list.fireWith}),promise.promise(deferred),func&&func.call(deferred,deferred),deferred},when:function(subordinate){var i=0,resolveValues=core_slice.call(arguments),length=resolveValues.length,remaining=1!==length||subordinate&&jQuery.isFunction(subordinate.promise)?length:0,deferred=1===remaining?subordinate:jQuery.Deferred(),updateFunc=function(i,contexts,values){return function(value){contexts[i]=this,values[i]=arguments.length>1?core_slice.call(arguments):value,values===progressValues?deferred.notifyWith(contexts,values):--remaining||deferred.resolveWith(contexts,values)}},progressValues,progressContexts,resolveContexts;if(length>1)for(progressValues=new Array(length),progressContexts=new Array(length),resolveContexts=new Array(length);i
  • a",all=div.getElementsByTagName("*"),a=div.getElementsByTagName("a")[0],!all||!a||!all.length)return{};select=document.createElement("select"),opt=select.appendChild(document.createElement("option")),input=div.getElementsByTagName("input")[0],a.style.cssText="top:1px;float:left;opacity:.5",support={getSetAttribute:"t"!==div.className,leadingWhitespace:3===div.firstChild.nodeType,tbody:!div.getElementsByTagName("tbody").length,htmlSerialize:!!div.getElementsByTagName("link").length,style:/top/.test(a.getAttribute("style")),hrefNormalized:"/a"===a.getAttribute("href"),opacity:/^0.5/.test(a.style.opacity),cssFloat:!!a.style.cssFloat,checkOn:!!input.value,optSelected:opt.selected,enctype:!!document.createElement("form").enctype,html5Clone:"<:nav>"!==document.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===document.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},input.checked=!0,support.noCloneChecked=input.cloneNode(!0).checked,select.disabled=!0,support.optDisabled=!opt.disabled;try{delete div.test}catch(e){support.deleteExpando=!1}input=document.createElement("input"),input.setAttribute("value",""),support.input=""===input.getAttribute("value"),input.value="t",input.setAttribute("type","radio"),support.radioValue="t"===input.value,input.setAttribute("checked","t"),input.setAttribute("name","t"),fragment=document.createDocumentFragment(),fragment.appendChild(input),support.appendChecked=input.checked,support.checkClone=fragment.cloneNode(!0).cloneNode(!0).lastChild.checked,div.attachEvent&&(div.attachEvent("onclick",function(){support.noCloneEvent=!1}),div.cloneNode(!0).click());for(i in{submit:!0,change:!0,focusin:!0})div.setAttribute(eventName="on"+i,"t"),support[i+"Bubbles"]=eventName in window||div.attributes[eventName].expando===!1;return div.style.backgroundClip="content-box",div.cloneNode(!0).style.backgroundClip="",support.clearCloneStyle="content-box"===div.style.backgroundClip,jQuery(function(){var container,marginDiv,tds,divReset="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",body=document.getElementsByTagName("body")[0];body&&(container=document.createElement("div"),container.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",body.appendChild(container).appendChild(div),div.innerHTML="
    t
    ",tds=div.getElementsByTagName("td"),tds[0].style.cssText="padding:0;margin:0;border:0;display:none",isSupported=0===tds[0].offsetHeight,tds[0].style.display="",tds[1].style.display="none",support.reliableHiddenOffsets=isSupported&&0===tds[0].offsetHeight,div.innerHTML="",div.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",support.boxSizing=4===div.offsetWidth,support.doesNotIncludeMarginInBodyOffset=1!==body.offsetTop,window.getComputedStyle&&(support.pixelPosition="1%"!==(window.getComputedStyle(div,null)||{}).top,support.boxSizingReliable="4px"===(window.getComputedStyle(div,null)||{width:"4px"}).width,marginDiv=div.appendChild(document.createElement("div")),marginDiv.style.cssText=div.style.cssText=divReset,marginDiv.style.marginRight=marginDiv.style.width="0",div.style.width="1px",support.reliableMarginRight=!parseFloat((window.getComputedStyle(marginDiv,null)||{}).marginRight)),typeof div.style.zoom!==core_strundefined&&(div.innerHTML="",div.style.cssText=divReset+"width:1px;padding:1px;display:inline;zoom:1",support.inlineBlockNeedsLayout=3===div.offsetWidth,div.style.display="block",div.innerHTML="
    ",div.firstChild.style.width="5px", +support.shrinkWrapBlocks=3!==div.offsetWidth,support.inlineBlockNeedsLayout&&(body.style.zoom=1)),body.removeChild(container),container=div=tds=marginDiv=null)}),all=select=fragment=opt=a=input=null,support}();var rbrace=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,rmultiDash=/([A-Z])/g;jQuery.extend({cache:{},expando:"jQuery"+(core_version+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(elem){return elem=elem.nodeType?jQuery.cache[elem[jQuery.expando]]:elem[jQuery.expando],!!elem&&!isEmptyDataObject(elem)},data:function(elem,name,data){return internalData(elem,name,data)},removeData:function(elem,name){return internalRemoveData(elem,name)},_data:function(elem,name,data){return internalData(elem,name,data,!0)},_removeData:function(elem,name){return internalRemoveData(elem,name,!0)},acceptData:function(elem){if(elem.nodeType&&1!==elem.nodeType&&9!==elem.nodeType)return!1;var noData=elem.nodeName&&jQuery.noData[elem.nodeName.toLowerCase()];return!noData||noData!==!0&&elem.getAttribute("classid")===noData}}),jQuery.fn.extend({data:function(key,value){var attrs,name,elem=this[0],i=0,data=null;if(key===undefined){if(this.length&&(data=jQuery.data(elem),1===elem.nodeType&&!jQuery._data(elem,"parsedAttrs"))){for(attrs=elem.attributes;i1,null,!0)},removeData:function(key){return this.each(function(){jQuery.removeData(this,key)})}}),jQuery.extend({queue:function(elem,type,data){var queue;if(elem)return type=(type||"fx")+"queue",queue=jQuery._data(elem,type),data&&(!queue||jQuery.isArray(data)?queue=jQuery._data(elem,type,jQuery.makeArray(data)):queue.push(data)),queue||[]},dequeue:function(elem,type){type=type||"fx";var queue=jQuery.queue(elem,type),startLength=queue.length,fn=queue.shift(),hooks=jQuery._queueHooks(elem,type),next=function(){jQuery.dequeue(elem,type)};"inprogress"===fn&&(fn=queue.shift(),startLength--),hooks.cur=fn,fn&&("fx"===type&&queue.unshift("inprogress"),delete hooks.stop,fn.call(elem,next,hooks)),!startLength&&hooks&&hooks.empty.fire()},_queueHooks:function(elem,type){var key=type+"queueHooks";return jQuery._data(elem,key)||jQuery._data(elem,key,{empty:jQuery.Callbacks("once memory").add(function(){jQuery._removeData(elem,type+"queue"),jQuery._removeData(elem,key)})})}}),jQuery.fn.extend({queue:function(type,data){var setter=2;return"string"!=typeof type&&(data=type,type="fx",setter--),arguments.length1)},removeAttr:function(name){return this.each(function(){jQuery.removeAttr(this,name)})},prop:function(name,value){return jQuery.access(this,jQuery.prop,name,value,arguments.length>1)},removeProp:function(name){return name=jQuery.propFix[name]||name,this.each(function(){try{this[name]=undefined,delete this[name]}catch(e){}})},addClass:function(value){var classes,elem,cur,clazz,j,i=0,len=this.length,proceed="string"==typeof value&&value;if(jQuery.isFunction(value))return this.each(function(j){jQuery(this).addClass(value.call(this,j,this.className))});if(proceed)for(classes=(value||"").match(core_rnotwhite)||[];i=0;)cur=cur.replace(" "+clazz+" "," ");elem.className=value?jQuery.trim(cur):""}return this},toggleClass:function(value,stateVal){var type=typeof value,isBool="boolean"==typeof stateVal;return jQuery.isFunction(value)?this.each(function(i){jQuery(this).toggleClass(value.call(this,i,this.className,stateVal),stateVal)}):this.each(function(){if("string"===type)for(var className,i=0,self=jQuery(this),state=stateVal,classNames=value.match(core_rnotwhite)||[];className=classNames[i++];)state=isBool?state:!self.hasClass(className),self[state?"addClass":"removeClass"](className);else type!==core_strundefined&&"boolean"!==type||(this.className&&jQuery._data(this,"__className__",this.className),this.className=this.className||value===!1?"":jQuery._data(this,"__className__")||"")})},hasClass:function(selector){for(var className=" "+selector+" ",i=0,l=this.length;i=0)return!0;return!1},val:function(value){var ret,hooks,isFunction,elem=this[0];{if(arguments.length)return isFunction=jQuery.isFunction(value),this.each(function(i){var val,self=jQuery(this);1===this.nodeType&&(val=isFunction?value.call(this,i,self.val()):value,null==val?val="":"number"==typeof val?val+="":jQuery.isArray(val)&&(val=jQuery.map(val,function(value){return null==value?"":value+""})),hooks=jQuery.valHooks[this.type]||jQuery.valHooks[this.nodeName.toLowerCase()],hooks&&"set"in hooks&&hooks.set(this,val,"value")!==undefined||(this.value=val))});if(elem)return hooks=jQuery.valHooks[elem.type]||jQuery.valHooks[elem.nodeName.toLowerCase()],hooks&&"get"in hooks&&(ret=hooks.get(elem,"value"))!==undefined?ret:(ret=elem.value,"string"==typeof ret?ret.replace(rreturn,""):null==ret?"":ret)}}}),jQuery.extend({valHooks:{option:{get:function(elem){var val=elem.attributes.value;return!val||val.specified?elem.value:elem.text}},select:{get:function(elem){for(var value,option,options=elem.options,index=elem.selectedIndex,one="select-one"===elem.type||index<0,values=one?null:[],max=one?index+1:options.length,i=index<0?max:one?index:0;i=0}),values.length||(elem.selectedIndex=-1),values}}},attr:function(elem,name,value){var hooks,notxml,ret,nType=elem.nodeType;if(elem&&3!==nType&&8!==nType&&2!==nType)return typeof elem.getAttribute===core_strundefined?jQuery.prop(elem,name,value):(notxml=1!==nType||!jQuery.isXMLDoc(elem),notxml&&(name=name.toLowerCase(),hooks=jQuery.attrHooks[name]||(rboolean.test(name)?boolHook:nodeHook)),value===undefined?hooks&¬xml&&"get"in hooks&&null!==(ret=hooks.get(elem,name))?ret:(typeof elem.getAttribute!==core_strundefined&&(ret=elem.getAttribute(name)),null==ret?undefined:ret):null!==value?hooks&¬xml&&"set"in hooks&&(ret=hooks.set(elem,value,name))!==undefined?ret:(elem.setAttribute(name,value+""),value):void jQuery.removeAttr(elem,name))},removeAttr:function(elem,value){var name,propName,i=0,attrNames=value&&value.match(core_rnotwhite);if(attrNames&&1===elem.nodeType)for(;name=attrNames[i++];)propName=jQuery.propFix[name]||name,rboolean.test(name)?!getSetAttribute&&ruseDefault.test(name)?elem[jQuery.camelCase("default-"+name)]=elem[propName]=!1:elem[propName]=!1:jQuery.attr(elem,name,""),elem.removeAttribute(getSetAttribute?name:propName)},attrHooks:{type:{set:function(elem,value){if(!jQuery.support.radioValue&&"radio"===value&&jQuery.nodeName(elem,"input")){var val=elem.value;return elem.setAttribute("type",value),val&&(elem.value=val),value}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(elem,name,value){var ret,hooks,notxml,nType=elem.nodeType;if(elem&&3!==nType&&8!==nType&&2!==nType)return notxml=1!==nType||!jQuery.isXMLDoc(elem),notxml&&(name=jQuery.propFix[name]||name,hooks=jQuery.propHooks[name]),value!==undefined?hooks&&"set"in hooks&&(ret=hooks.set(elem,value,name))!==undefined?ret:elem[name]=value:hooks&&"get"in hooks&&null!==(ret=hooks.get(elem,name))?ret:elem[name]},propHooks:{tabIndex:{get:function(elem){var attributeNode=elem.getAttributeNode("tabindex");return attributeNode&&attributeNode.specified?parseInt(attributeNode.value,10):rfocusable.test(elem.nodeName)||rclickable.test(elem.nodeName)&&elem.href?0:undefined}}}}),boolHook={get:function(elem,name){var prop=jQuery.prop(elem,name),attr="boolean"==typeof prop&&elem.getAttribute(name),detail="boolean"==typeof prop?getSetInput&&getSetAttribute?null!=attr:ruseDefault.test(name)?elem[jQuery.camelCase("default-"+name)]:!!attr:elem.getAttributeNode(name);return detail&&detail.value!==!1?name.toLowerCase():undefined},set:function(elem,value,name){return value===!1?jQuery.removeAttr(elem,name):getSetInput&&getSetAttribute||!ruseDefault.test(name)?elem.setAttribute(!getSetAttribute&&jQuery.propFix[name]||name,name):elem[jQuery.camelCase("default-"+name)]=elem[name]=!0,name}},getSetInput&&getSetAttribute||(jQuery.attrHooks.value={get:function(elem,name){var ret=elem.getAttributeNode(name);return jQuery.nodeName(elem,"input")?elem.defaultValue:ret&&ret.specified?ret.value:undefined},set:function(elem,value,name){return jQuery.nodeName(elem,"input")?void(elem.defaultValue=value):nodeHook&&nodeHook.set(elem,value,name)}}),getSetAttribute||(nodeHook=jQuery.valHooks.button={get:function(elem,name){var ret=elem.getAttributeNode(name);return ret&&("id"===name||"name"===name||"coords"===name?""!==ret.value:ret.specified)?ret.value:undefined},set:function(elem,value,name){var ret=elem.getAttributeNode(name);return ret||elem.setAttributeNode(ret=elem.ownerDocument.createAttribute(name)),ret.value=value+="","value"===name||value===elem.getAttribute(name)?value:undefined}},jQuery.attrHooks.contenteditable={get:nodeHook.get,set:function(elem,value,name){nodeHook.set(elem,""!==value&&value,name)}},jQuery.each(["width","height"],function(i,name){jQuery.attrHooks[name]=jQuery.extend(jQuery.attrHooks[name],{set:function(elem,value){if(""===value)return elem.setAttribute(name,"auto"),value}})})),jQuery.support.hrefNormalized||(jQuery.each(["href","src","width","height"],function(i,name){jQuery.attrHooks[name]=jQuery.extend(jQuery.attrHooks[name],{get:function(elem){var ret=elem.getAttribute(name,2);return null==ret?undefined:ret}})}),jQuery.each(["href","src"],function(i,name){jQuery.propHooks[name]={get:function(elem){return elem.getAttribute(name,4)}}})),jQuery.support.style||(jQuery.attrHooks.style={get:function(elem){return elem.style.cssText||undefined},set:function(elem,value){return elem.style.cssText=value+""}}),jQuery.support.optSelected||(jQuery.propHooks.selected=jQuery.extend(jQuery.propHooks.selected,{get:function(elem){var parent=elem.parentNode;return parent&&(parent.selectedIndex,parent.parentNode&&parent.parentNode.selectedIndex),null}})),jQuery.support.enctype||(jQuery.propFix.enctype="encoding"),jQuery.support.checkOn||jQuery.each(["radio","checkbox"],function(){jQuery.valHooks[this]={get:function(elem){return null===elem.getAttribute("value")?"on":elem.value}}}),jQuery.each(["radio","checkbox"],function(){jQuery.valHooks[this]=jQuery.extend(jQuery.valHooks[this],{set:function(elem,value){if(jQuery.isArray(value))return elem.checked=jQuery.inArray(jQuery(elem).val(),value)>=0}})});var rformElems=/^(?:input|select|textarea)$/i,rkeyEvent=/^key/,rmouseEvent=/^(?:mouse|contextmenu)|click/,rfocusMorph=/^(?:focusinfocus|focusoutblur)$/,rtypenamespace=/^([^.]*)(?:\.(.+)|)$/;jQuery.event={global:{},add:function(elem,types,handler,data,selector){var tmp,events,t,handleObjIn,special,eventHandle,handleObj,handlers,type,namespaces,origType,elemData=jQuery._data(elem);if(elemData){for(handler.handler&&(handleObjIn=handler,handler=handleObjIn.handler,selector=handleObjIn.selector),handler.guid||(handler.guid=jQuery.guid++),(events=elemData.events)||(events=elemData.events={}),(eventHandle=elemData.handle)||(eventHandle=elemData.handle=function(e){return typeof jQuery===core_strundefined||e&&jQuery.event.triggered===e.type?undefined:jQuery.event.dispatch.apply(eventHandle.elem,arguments)},eventHandle.elem=elem),types=(types||"").match(core_rnotwhite)||[""],t=types.length;t--;)tmp=rtypenamespace.exec(types[t])||[],type=origType=tmp[1],namespaces=(tmp[2]||"").split(".").sort(),special=jQuery.event.special[type]||{},type=(selector?special.delegateType:special.bindType)||type,special=jQuery.event.special[type]||{},handleObj=jQuery.extend({type:type,origType:origType,data:data,handler:handler,guid:handler.guid,selector:selector,needsContext:selector&&jQuery.expr.match.needsContext.test(selector),namespace:namespaces.join(".")},handleObjIn),(handlers=events[type])||(handlers=events[type]=[],handlers.delegateCount=0,special.setup&&special.setup.call(elem,data,namespaces,eventHandle)!==!1||(elem.addEventListener?elem.addEventListener(type,eventHandle,!1):elem.attachEvent&&elem.attachEvent("on"+type,eventHandle))),special.add&&(special.add.call(elem,handleObj),handleObj.handler.guid||(handleObj.handler.guid=handler.guid)),selector?handlers.splice(handlers.delegateCount++,0,handleObj):handlers.push(handleObj),jQuery.event.global[type]=!0;elem=null}},remove:function(elem,types,handler,selector,mappedTypes){var j,handleObj,tmp,origCount,t,events,special,handlers,type,namespaces,origType,elemData=jQuery.hasData(elem)&&jQuery._data(elem);if(elemData&&(events=elemData.events)){for(types=(types||"").match(core_rnotwhite)||[""],t=types.length;t--;)if(tmp=rtypenamespace.exec(types[t])||[],type=origType=tmp[1],namespaces=(tmp[2]||"").split(".").sort(),type){for(special=jQuery.event.special[type]||{},type=(selector?special.delegateType:special.bindType)||type,handlers=events[type]||[],tmp=tmp[2]&&new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.|)")+"(\\.|$)"),origCount=j=handlers.length;j--;)handleObj=handlers[j],!mappedTypes&&origType!==handleObj.origType||handler&&handler.guid!==handleObj.guid||tmp&&!tmp.test(handleObj.namespace)||selector&&selector!==handleObj.selector&&("**"!==selector||!handleObj.selector)||(handlers.splice(j,1),handleObj.selector&&handlers.delegateCount--,special.remove&&special.remove.call(elem,handleObj));origCount&&!handlers.length&&(special.teardown&&special.teardown.call(elem,namespaces,elemData.handle)!==!1||jQuery.removeEvent(elem,type,elemData.handle),delete events[type])}else for(type in events)jQuery.event.remove(elem,type+types[t],handler,selector,!0);jQuery.isEmptyObject(events)&&(delete elemData.handle,jQuery._removeData(elem,"events"))}},trigger:function(event,data,elem,onlyHandlers){var handle,ontype,cur,bubbleType,special,tmp,i,eventPath=[elem||document],type=core_hasOwn.call(event,"type")?event.type:event,namespaces=core_hasOwn.call(event,"namespace")?event.namespace.split("."):[];if(cur=tmp=elem=elem||document,3!==elem.nodeType&&8!==elem.nodeType&&!rfocusMorph.test(type+jQuery.event.triggered)&&(type.indexOf(".")>=0&&(namespaces=type.split("."),type=namespaces.shift(),namespaces.sort()),ontype=type.indexOf(":")<0&&"on"+type,event=event[jQuery.expando]?event:new jQuery.Event(type,"object"==typeof event&&event),event.isTrigger=!0,event.namespace=namespaces.join("."),event.namespace_re=event.namespace?new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,event.result=undefined,event.target||(event.target=elem),data=null==data?[event]:jQuery.makeArray(data,[event]),special=jQuery.event.special[type]||{},onlyHandlers||!special.trigger||special.trigger.apply(elem,data)!==!1)){if(!onlyHandlers&&!special.noBubble&&!jQuery.isWindow(elem)){for(bubbleType=special.delegateType||type,rfocusMorph.test(bubbleType+type)||(cur=cur.parentNode);cur;cur=cur.parentNode)eventPath.push(cur),tmp=cur;tmp===(elem.ownerDocument||document)&&eventPath.push(tmp.defaultView||tmp.parentWindow||window)}for(i=0;(cur=eventPath[i++])&&!event.isPropagationStopped();)event.type=i>1?bubbleType:special.bindType||type,handle=(jQuery._data(cur,"events")||{})[event.type]&&jQuery._data(cur,"handle"),handle&&handle.apply(cur,data),handle=ontype&&cur[ontype],handle&&jQuery.acceptData(cur)&&handle.apply&&handle.apply(cur,data)===!1&&event.preventDefault();if(event.type=type,!onlyHandlers&&!event.isDefaultPrevented()&&(!special._default||special._default.apply(elem.ownerDocument,data)===!1)&&("click"!==type||!jQuery.nodeName(elem,"a"))&&jQuery.acceptData(elem)&&ontype&&elem[type]&&!jQuery.isWindow(elem)){tmp=elem[ontype],tmp&&(elem[ontype]=null),jQuery.event.triggered=type;try{elem[type]()}catch(e){}jQuery.event.triggered=undefined,tmp&&(elem[ontype]=tmp)}return event.result}},dispatch:function(event){event=jQuery.event.fix(event);var i,ret,handleObj,matched,j,handlerQueue=[],args=core_slice.call(arguments),handlers=(jQuery._data(this,"events")||{})[event.type]||[],special=jQuery.event.special[event.type]||{};if(args[0]=event,event.delegateTarget=this,!special.preDispatch||special.preDispatch.call(this,event)!==!1){for(handlerQueue=jQuery.event.handlers.call(this,event,handlers),i=0;(matched=handlerQueue[i++])&&!event.isPropagationStopped();)for(event.currentTarget=matched.elem,j=0;(handleObj=matched.handlers[j++])&&!event.isImmediatePropagationStopped();)if(!event.namespace_re||event.namespace_re.test(handleObj.namespace)){event.handleObj=handleObj,event.data=handleObj.data;var obj=(jQuery.event.special[handleObj.origType]||{}).handle||handleObj.handler;obj.apply&&(ret=obj.apply(matched.elem,args)),ret!==undefined&&(event.result=ret)===!1&&(event.preventDefault(),event.stopPropagation())}return special.postDispatch&&special.postDispatch.call(this,event),event.result}},handlers:function(event,handlers){var sel,handleObj,matches,i,handlerQueue=[],delegateCount=handlers.delegateCount,cur=event.target;if(delegateCount&&cur.nodeType&&(!event.button||"click"!==event.type))for(;cur!=this;cur=cur.parentNode||this)if(1===cur.nodeType&&(cur.disabled!==!0||"click"!==event.type)){for(matches=[],i=0;i=0:jQuery.find(sel,this,null,[cur]).length),matches[sel]&&matches.push(handleObj);matches.length&&handlerQueue.push({elem:cur,handlers:matches})}return delegateCountExpr.cacheLength&&delete cache[keys.shift()],cache[key]=value}}function markFunction(fn){return fn[expando]=!0,fn}function assert(fn){var div=document.createElement("div");try{return fn(div)}catch(e){return!1}finally{div=null}}function Sizzle(selector,context,results,seed){var match,elem,m,nodeType,i,groups,old,nid,newContext,newSelector;if((context?context.ownerDocument||context:preferredDoc)!==document&&setDocument(context),context=context||document,results=results||[],!selector||"string"!=typeof selector)return results;if(1!==(nodeType=context.nodeType)&&9!==nodeType)return[];if(!documentIsXML&&!seed){if(match=rquickExpr.exec(selector))if(m=match[1]){if(9===nodeType){if(elem=context.getElementById(m),!elem||!elem.parentNode)return results;if(elem.id===m)return results.push(elem),results}else if(context.ownerDocument&&(elem=context.ownerDocument.getElementById(m))&&contains(context,elem)&&elem.id===m)return results.push(elem),results}else{if(match[2])return push.apply(results,slice.call(context.getElementsByTagName(selector),0)),results;if((m=match[3])&&support.getByClassName&&context.getElementsByClassName)return push.apply(results,slice.call(context.getElementsByClassName(m),0)),results}if(support.qsa&&!rbuggyQSA.test(selector)){if(old=!0,nid=expando,newContext=context,newSelector=9===nodeType&&selector,1===nodeType&&"object"!==context.nodeName.toLowerCase()){for(groups=tokenize(selector),(old=context.getAttribute("id"))?nid=old.replace(rescape,"\\$&"):context.setAttribute("id",nid),nid="[id='"+nid+"'] ",i=groups.length;i--;)groups[i]=nid+toSelector(groups[i]);newContext=rsibling.test(selector)&&context.parentNode||context,newSelector=groups.join(",")}if(newSelector)try{return push.apply(results,slice.call(newContext.querySelectorAll(newSelector),0)),results}catch(qsaError){}finally{old||context.removeAttribute("id")}}}return select(selector.replace(rtrim,"$1"),context,results,seed)}function siblingCheck(a,b){var cur=b&&a,diff=cur&&(~b.sourceIndex||MAX_NEGATIVE)-(~a.sourceIndex||MAX_NEGATIVE);if(diff)return diff;if(cur)for(;cur=cur.nextSibling;)if(cur===b)return-1;return a?1:-1}function createInputPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return"input"===name&&elem.type===type}}function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return("input"===name||"button"===name)&&elem.type===type}}function createPositionalPseudo(fn){return markFunction(function(argument){return argument=+argument,markFunction(function(seed,matches){for(var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length;i--;)seed[j=matchIndexes[i]]&&(seed[j]=!(matches[j]=seed[j]))})})}function tokenize(selector,parseOnly){var matched,match,tokens,type,soFar,groups,preFilters,cached=tokenCache[selector+" "];if(cached)return parseOnly?0:cached.slice(0);for(soFar=selector,groups=[],preFilters=Expr.preFilter;soFar;){ +matched&&!(match=rcomma.exec(soFar))||(match&&(soFar=soFar.slice(match[0].length)||soFar),groups.push(tokens=[])),matched=!1,(match=rcombinators.exec(soFar))&&(matched=match.shift(),tokens.push({value:matched,type:match[0].replace(rtrim," ")}),soFar=soFar.slice(matched.length));for(type in Expr.filter)!(match=matchExpr[type].exec(soFar))||preFilters[type]&&!(match=preFilters[type](match))||(matched=match.shift(),tokens.push({value:matched,type:type,matches:match}),soFar=soFar.slice(matched.length));if(!matched)break}return parseOnly?soFar.length:soFar?Sizzle.error(selector):tokenCache(selector,groups).slice(0)}function toSelector(tokens){for(var i=0,len=tokens.length,selector="";i1?function(elem,context,xml){for(var i=matchers.length;i--;)if(!matchers[i](elem,context,xml))return!1;return!0}:matchers[0]}function condense(unmatched,map,filter,context,xml){for(var elem,newUnmatched=[],i=0,len=unmatched.length,mapped=null!=map;i-1&&(seed[temp]=!(results[temp]=elem))}}else matcherOut=condense(matcherOut===results?matcherOut.splice(preexisting,matcherOut.length):matcherOut),postFinder?postFinder(null,results,matcherOut,xml):push.apply(results,matcherOut)})}function matcherFromTokens(tokens){for(var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],implicitRelative=leadingRelative||Expr.relative[" "],i=leadingRelative?1:0,matchContext=addCombinator(function(elem){return elem===checkContext},implicitRelative,!0),matchAnyContext=addCombinator(function(elem){return indexOf.call(checkContext,elem)>-1},implicitRelative,!0),matchers=[function(elem,context,xml){return!leadingRelative&&(xml||context!==outermostContext)||((checkContext=context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml))}];i1&&elementMatcher(matchers),i>1&&toSelector(tokens.slice(0,i-1)).replace(rtrim,"$1"),matcher,i0,byElement=elementMatchers.length>0,superMatcher=function(seed,context,xml,results,expandContext){var elem,j,matcher,setMatched=[],matchedCount=0,i="0",unmatched=seed&&[],outermost=null!=expandContext,contextBackup=outermostContext,elems=seed||byElement&&Expr.find.TAG("*",expandContext&&context.parentNode||context),dirrunsUnique=dirruns+=null==contextBackup?1:Math.random()||.1;for(outermost&&(outermostContext=context!==document&&context,cachedruns=matcherCachedRuns);null!=(elem=elems[i]);i++){if(byElement&&elem){for(j=0;matcher=elementMatchers[j++];)if(matcher(elem,context,xml)){results.push(elem);break}outermost&&(dirruns=dirrunsUnique,cachedruns=++matcherCachedRuns)}bySet&&((elem=!matcher&&elem)&&matchedCount--,seed&&unmatched.push(elem))}if(matchedCount+=i,bySet&&i!==matchedCount){for(j=0;matcher=setMatchers[j++];)matcher(unmatched,setMatched,context,xml);if(seed){if(matchedCount>0)for(;i--;)unmatched[i]||setMatched[i]||(setMatched[i]=pop.call(results));setMatched=condense(setMatched)}push.apply(results,setMatched),outermost&&!seed&&setMatched.length>0&&matchedCount+setMatchers.length>1&&Sizzle.uniqueSort(results)}return outermost&&(dirruns=dirrunsUnique,outermostContext=contextBackup),unmatched};return bySet?markFunction(superMatcher):superMatcher}function multipleContexts(selector,contexts,results){for(var i=0,len=contexts.length;i2&&"ID"===(token=tokens[0]).type&&9===context.nodeType&&!documentIsXML&&Expr.relative[tokens[1].type]){if(context=Expr.find.ID(token.matches[0].replace(runescape,funescape),context)[0],!context)return results;selector=selector.slice(tokens.shift().value.length)}for(i=matchExpr.needsContext.test(selector)?0:tokens.length;i--&&(token=tokens[i],!Expr.relative[type=token.type]);)if((find=Expr.find[type])&&(seed=find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type)&&context.parentNode||context))){if(tokens.splice(i,1),selector=seed.length&&toSelector(tokens),!selector)return push.apply(results,slice.call(seed,0)),results;break}}return compile(selector,match)(seed,context,documentIsXML,results,rsibling.test(selector)),results}function setFilters(){}var i,cachedruns,Expr,getText,isXML,compile,hasDuplicate,outermostContext,setDocument,document,docElem,documentIsXML,rbuggyQSA,rbuggyMatches,matches,contains,sortOrder,expando="sizzle"+-new Date,preferredDoc=window.document,support={},dirruns=0,done=0,classCache=createCache(),tokenCache=createCache(),compilerCache=createCache(),strundefined=typeof undefined,MAX_NEGATIVE=1<<31,arr=[],pop=arr.pop,push=arr.push,slice=arr.slice,indexOf=arr.indexOf||function(elem){for(var i=0,len=this.length;i+~])"+whitespace+"*"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp("^"+identifier+"$"),matchExpr={ID:new RegExp("^#("+characterEncoding+")"),CLASS:new RegExp("^\\.("+characterEncoding+")"),NAME:new RegExp("^\\[name=['\"]?("+characterEncoding+")['\"]?\\]"),TAG:new RegExp("^("+characterEncoding.replace("w","w*")+")"),ATTR:new RegExp("^"+attributes),PSEUDO:new RegExp("^"+pseudos),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+whitespace+"*(even|odd|(([+-]|)(\\d*)n|)"+whitespace+"*(?:([+-]|)"+whitespace+"*(\\d+)|))"+whitespace+"*\\)|)","i"),needsContext:new RegExp("^"+whitespace+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+whitespace+"*((?:-\\d)?\\d*)"+whitespace+"*\\)|)(?=[^-]|$)","i")},rsibling=/[\x20\t\r\n\f]*[+~]/,rnative=/^[^{]+\{\s*\[native code/,rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\d$/i,rescape=/'|\\/g,rattributeQuotes=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,runescape=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,funescape=function(_,escaped){var high="0x"+escaped-65536;return high!==high?escaped:high<0?String.fromCharCode(high+65536):String.fromCharCode(high>>10|55296,1023&high|56320)};try{slice.call(preferredDoc.documentElement.childNodes,0)[0].nodeType}catch(e){slice=function(i){for(var elem,results=[];elem=this[i++];)results.push(elem);return results}}isXML=Sizzle.isXML=function(elem){var documentElement=elem&&(elem.ownerDocument||elem).documentElement;return!!documentElement&&"HTML"!==documentElement.nodeName},setDocument=Sizzle.setDocument=function(node){var doc=node?node.ownerDocument||node:preferredDoc;return doc!==document&&9===doc.nodeType&&doc.documentElement?(document=doc,docElem=doc.documentElement,documentIsXML=isXML(doc),support.tagNameNoComments=assert(function(div){return div.appendChild(doc.createComment("")),!div.getElementsByTagName("*").length}),support.attributes=assert(function(div){div.innerHTML="";var type=typeof div.lastChild.getAttribute("multiple");return"boolean"!==type&&"string"!==type}),support.getByClassName=assert(function(div){return div.innerHTML="",!(!div.getElementsByClassName||!div.getElementsByClassName("e").length)&&(div.lastChild.className="e",2===div.getElementsByClassName("e").length)}),support.getByName=assert(function(div){div.id=expando+0,div.innerHTML="
    ",docElem.insertBefore(div,docElem.firstChild);var pass=doc.getElementsByName&&doc.getElementsByName(expando).length===2+doc.getElementsByName(expando+0).length;return support.getIdNotName=!doc.getElementById(expando),docElem.removeChild(div),pass}),Expr.attrHandle=assert(function(div){return div.innerHTML="",div.firstChild&&typeof div.firstChild.getAttribute!==strundefined&&"#"===div.firstChild.getAttribute("href")})?{}:{href:function(elem){return elem.getAttribute("href",2)},type:function(elem){return elem.getAttribute("type")}},support.getIdNotName?(Expr.find.ID=function(id,context){if(typeof context.getElementById!==strundefined&&!documentIsXML){var m=context.getElementById(id);return m&&m.parentNode?[m]:[]}},Expr.filter.ID=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId}}):(Expr.find.ID=function(id,context){if(typeof context.getElementById!==strundefined&&!documentIsXML){var m=context.getElementById(id);return m?m.id===id||typeof m.getAttributeNode!==strundefined&&m.getAttributeNode("id").value===id?[m]:undefined:[]}},Expr.filter.ID=function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=typeof elem.getAttributeNode!==strundefined&&elem.getAttributeNode("id");return node&&node.value===attrId}}),Expr.find.TAG=support.tagNameNoComments?function(tag,context){if(typeof context.getElementsByTagName!==strundefined)return context.getElementsByTagName(tag)}:function(tag,context){var elem,tmp=[],i=0,results=context.getElementsByTagName(tag);if("*"===tag){for(;elem=results[i++];)1===elem.nodeType&&tmp.push(elem);return tmp}return results},Expr.find.NAME=support.getByName&&function(tag,context){if(typeof context.getElementsByName!==strundefined)return context.getElementsByName(name)},Expr.find.CLASS=support.getByClassName&&function(className,context){if(typeof context.getElementsByClassName!==strundefined&&!documentIsXML)return context.getElementsByClassName(className)},rbuggyMatches=[],rbuggyQSA=[":focus"],(support.qsa=isNative(doc.querySelectorAll))&&(assert(function(div){div.innerHTML="",div.querySelectorAll("[selected]").length||rbuggyQSA.push("\\["+whitespace+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),div.querySelectorAll(":checked").length||rbuggyQSA.push(":checked")}),assert(function(div){div.innerHTML="",div.querySelectorAll("[i^='']").length&&rbuggyQSA.push("[*^$]="+whitespace+"*(?:\"\"|'')"),div.querySelectorAll(":enabled").length||rbuggyQSA.push(":enabled",":disabled"),div.querySelectorAll("*,:x"),rbuggyQSA.push(",.*:")})),(support.matchesSelector=isNative(matches=docElem.matchesSelector||docElem.mozMatchesSelector||docElem.webkitMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector))&&assert(function(div){support.disconnectedMatch=matches.call(div,"div"),matches.call(div,"[s!='']:x"),rbuggyMatches.push("!=",pseudos)}),rbuggyQSA=new RegExp(rbuggyQSA.join("|")),rbuggyMatches=new RegExp(rbuggyMatches.join("|")),contains=isNative(docElem.contains)||docElem.compareDocumentPosition?function(a,b){var adown=9===a.nodeType?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!(!bup||1!==bup.nodeType||!(adown.contains?adown.contains(bup):a.compareDocumentPosition&&16&a.compareDocumentPosition(bup)))}:function(a,b){if(b)for(;b=b.parentNode;)if(b===a)return!0;return!1},sortOrder=docElem.compareDocumentPosition?function(a,b){var compare;return a===b?(hasDuplicate=!0,0):(compare=b.compareDocumentPosition&&a.compareDocumentPosition&&a.compareDocumentPosition(b))?1&compare||a.parentNode&&11===a.parentNode.nodeType?a===doc||contains(preferredDoc,a)?-1:b===doc||contains(preferredDoc,b)?1:0:4&compare?-1:1:a.compareDocumentPosition?-1:1}:function(a,b){var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b];if(a===b)return hasDuplicate=!0,0;if(!aup||!bup)return a===doc?-1:b===doc?1:aup?-1:bup?1:0;if(aup===bup)return siblingCheck(a,b);for(cur=a;cur=cur.parentNode;)ap.unshift(cur);for(cur=b;cur=cur.parentNode;)bp.unshift(cur);for(;ap[i]===bp[i];)i++;return i?siblingCheck(ap[i],bp[i]):ap[i]===preferredDoc?-1:bp[i]===preferredDoc?1:0},hasDuplicate=!1,[0,0].sort(sortOrder),support.detectDuplicates=hasDuplicate,document):document},Sizzle.matches=function(expr,elements){return Sizzle(expr,null,null,elements)},Sizzle.matchesSelector=function(elem,expr){if((elem.ownerDocument||elem)!==document&&setDocument(elem),expr=expr.replace(rattributeQuotes,"='$1']"),support.matchesSelector&&!documentIsXML&&(!rbuggyMatches||!rbuggyMatches.test(expr))&&!rbuggyQSA.test(expr))try{var ret=matches.call(elem,expr);if(ret||support.disconnectedMatch||elem.document&&11!==elem.document.nodeType)return ret}catch(e){}return Sizzle(expr,document,null,[elem]).length>0},Sizzle.contains=function(context,elem){return(context.ownerDocument||context)!==document&&setDocument(context),contains(context,elem)},Sizzle.attr=function(elem,name){var val;return(elem.ownerDocument||elem)!==document&&setDocument(elem),documentIsXML||(name=name.toLowerCase()),(val=Expr.attrHandle[name])?val(elem):documentIsXML||support.attributes?elem.getAttribute(name):((val=elem.getAttributeNode(name))||elem.getAttribute(name))&&elem[name]===!0?name:val&&val.specified?val.value:null},Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg)},Sizzle.uniqueSort=function(results){var elem,duplicates=[],i=1,j=0;if(hasDuplicate=!support.detectDuplicates,results.sort(sortOrder),hasDuplicate){for(;elem=results[i];i++)elem===results[i-1]&&(j=duplicates.push(i));for(;j--;)results.splice(duplicates[j],1)}return results},getText=Sizzle.getText=function(elem){var node,ret="",i=0,nodeType=elem.nodeType;if(nodeType){if(1===nodeType||9===nodeType||11===nodeType){if("string"==typeof elem.textContent)return elem.textContent;for(elem=elem.firstChild;elem;elem=elem.nextSibling)ret+=getText(elem)}else if(3===nodeType||4===nodeType)return elem.nodeValue}else for(;node=elem[i];i++)ret+=getText(node);return ret},Expr=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:matchExpr,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(match){return match[1]=match[1].replace(runescape,funescape),match[3]=(match[4]||match[5]||"").replace(runescape,funescape),"~="===match[2]&&(match[3]=" "+match[3]+" "),match.slice(0,4)},CHILD:function(match){return match[1]=match[1].toLowerCase(),"nth"===match[1].slice(0,3)?(match[3]||Sizzle.error(match[0]),match[4]=+(match[4]?match[5]+(match[6]||1):2*("even"===match[3]||"odd"===match[3])),match[5]=+(match[7]+match[8]||"odd"===match[3])):match[3]&&Sizzle.error(match[0]),match},PSEUDO:function(match){var excess,unquoted=!match[5]&&match[2];return matchExpr.CHILD.test(match[0])?null:(match[4]?match[2]=match[4]:unquoted&&rpseudo.test(unquoted)&&(excess=tokenize(unquoted,!0))&&(excess=unquoted.indexOf(")",unquoted.length-excess)-unquoted.length)&&(match[0]=match[0].slice(0,excess),match[2]=unquoted.slice(0,excess)),match.slice(0,3))}},filter:{TAG:function(nodeName){return"*"===nodeName?function(){return!0}:(nodeName=nodeName.replace(runescape,funescape).toLowerCase(),function(elem){return elem.nodeName&&elem.nodeName.toLowerCase()===nodeName})},CLASS:function(className){var pattern=classCache[className+" "];return pattern||(pattern=new RegExp("(^|"+whitespace+")"+className+"("+whitespace+"|$)"))&&classCache(className,function(elem){return pattern.test(elem.className||typeof elem.getAttribute!==strundefined&&elem.getAttribute("class")||"")})},ATTR:function(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);return null==result?"!="===operator:!operator||(result+="","="===operator?result===check:"!="===operator?result!==check:"^="===operator?check&&0===result.indexOf(check):"*="===operator?check&&result.indexOf(check)>-1:"$="===operator?check&&result.slice(-check.length)===check:"~="===operator?(" "+result+" ").indexOf(check)>-1:"|="===operator&&(result===check||result.slice(0,check.length+1)===check+"-"))}},CHILD:function(type,what,argument,first,last){var simple="nth"!==type.slice(0,3),forward="last"!==type.slice(-4),ofType="of-type"===what;return 1===first&&0===last?function(elem){return!!elem.parentNode}:function(elem,context,xml){var cache,outerCache,node,diff,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType;if(parent){if(simple){for(;dir;){for(node=elem;node=node[dir];)if(ofType?node.nodeName.toLowerCase()===name:1===node.nodeType)return!1;start=dir="only"===type&&!start&&"nextSibling"}return!0}if(start=[forward?parent.firstChild:parent.lastChild],forward&&useCache){for(outerCache=parent[expando]||(parent[expando]={}),cache=outerCache[type]||[],nodeIndex=cache[0]===dirruns&&cache[1],diff=cache[0]===dirruns&&cache[2],node=nodeIndex&&parent.childNodes[nodeIndex];node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop();)if(1===node.nodeType&&++diff&&node===elem){outerCache[type]=[dirruns,nodeIndex,diff];break}}else if(useCache&&(cache=(elem[expando]||(elem[expando]={}))[type])&&cache[0]===dirruns)diff=cache[1];else for(;(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop())&&((ofType?node.nodeName.toLowerCase()!==name:1!==node.nodeType)||!++diff||(useCache&&((node[expando]||(node[expando]={}))[type]=[dirruns,diff]),node!==elem)););return diff-=last,diff===first||diff%first===0&&diff/first>=0}}},PSEUDO:function(pseudo,argument){var args,fn=Expr.pseudos[pseudo]||Expr.setFilters[pseudo.toLowerCase()]||Sizzle.error("unsupported pseudo: "+pseudo);return fn[expando]?fn(argument):fn.length>1?(args=[pseudo,pseudo,"",argument],Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?markFunction(function(seed,matches){for(var idx,matched=fn(seed,argument),i=matched.length;i--;)idx=indexOf.call(seed,matched[i]),seed[idx]=!(matches[idx]=matched[i])}):function(elem){return fn(elem,0,args)}):fn}},pseudos:{not:markFunction(function(selector){var input=[],results=[],matcher=compile(selector.replace(rtrim,"$1"));return matcher[expando]?markFunction(function(seed,matches,context,xml){for(var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length;i--;)(elem=unmatched[i])&&(seed[i]=!(matches[i]=elem))}):function(elem,context,xml){return input[0]=elem,matcher(input,null,xml,results),!results.pop()}}),has:markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length>0}}),contains:markFunction(function(text){return function(elem){return(elem.textContent||elem.innerText||getText(elem)).indexOf(text)>-1}}),lang:markFunction(function(lang){return ridentifier.test(lang||"")||Sizzle.error("unsupported lang: "+lang),lang=lang.replace(runescape,funescape).toLowerCase(),function(elem){var elemLang;do if(elemLang=documentIsXML?elem.getAttribute("xml:lang")||elem.getAttribute("lang"):elem.lang)return elemLang=elemLang.toLowerCase(),elemLang===lang||0===elemLang.indexOf(lang+"-");while((elem=elem.parentNode)&&1===elem.nodeType);return!1}}),target:function(elem){var hash=window.location&&window.location.hash;return hash&&hash.slice(1)===elem.id},root:function(elem){return elem===docElem},focus:function(elem){return elem===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(elem.type||elem.href||~elem.tabIndex)},enabled:function(elem){return elem.disabled===!1},disabled:function(elem){return elem.disabled===!0},checked:function(elem){var nodeName=elem.nodeName.toLowerCase();return"input"===nodeName&&!!elem.checked||"option"===nodeName&&!!elem.selected},selected:function(elem){return elem.parentNode&&elem.parentNode.selectedIndex,elem.selected===!0},empty:function(elem){for(elem=elem.firstChild;elem;elem=elem.nextSibling)if(elem.nodeName>"@"||3===elem.nodeType||4===elem.nodeType)return!1;return!0},parent:function(elem){return!Expr.pseudos.empty(elem)},header:function(elem){return rheader.test(elem.nodeName)},input:function(elem){return rinputs.test(elem.nodeName)},button:function(elem){var name=elem.nodeName.toLowerCase();return"input"===name&&"button"===elem.type||"button"===name},text:function(elem){var attr;return"input"===elem.nodeName.toLowerCase()&&"text"===elem.type&&(null==(attr=elem.getAttribute("type"))||attr.toLowerCase()===elem.type)},first:createPositionalPseudo(function(){return[0]}),last:createPositionalPseudo(function(matchIndexes,length){return[length-1]}),eq:createPositionalPseudo(function(matchIndexes,length,argument){return[argument<0?argument+length:argument]}),even:createPositionalPseudo(function(matchIndexes,length){for(var i=0;i=0;)matchIndexes.push(i);return matchIndexes}),gt:createPositionalPseudo(function(matchIndexes,length,argument){for(var i=argument<0?argument+length:argument;++i1?jQuery.unique(ret):ret),ret.selector=(this.selector?this.selector+" ":"")+selector,ret},has:function(target){var i,targets=jQuery(target,this),len=targets.length;return this.filter(function(){for(i=0;i=0:jQuery.filter(selector,this).length>0:this.filter(selector).length>0)},closest:function(selectors,context){for(var cur,i=0,l=this.length,ret=[],pos=rneedsContext.test(selectors)||"string"!=typeof selectors?jQuery(selectors,context||this.context):0;i-1:jQuery.find.matchesSelector(cur,selectors)){ret.push(cur);break}cur=cur.parentNode}return this.pushStack(ret.length>1?jQuery.unique(ret):ret)},index:function(elem){return elem?"string"==typeof elem?jQuery.inArray(this[0],jQuery(elem)):jQuery.inArray(elem.jquery?elem[0]:elem,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(selector,context){var set="string"==typeof selector?jQuery(selector,context):jQuery.makeArray(selector&&selector.nodeType?[selector]:selector),all=jQuery.merge(this.get(),set);return this.pushStack(jQuery.unique(all))},addBack:function(selector){return this.add(null==selector?this.prevObject:this.prevObject.filter(selector))}}),jQuery.fn.andSelf=jQuery.fn.addBack,jQuery.each({parent:function(elem){var parent=elem.parentNode;return parent&&11!==parent.nodeType?parent:null},parents:function(elem){return jQuery.dir(elem,"parentNode")},parentsUntil:function(elem,i,until){return jQuery.dir(elem,"parentNode",until)},next:function(elem){return sibling(elem,"nextSibling")},prev:function(elem){return sibling(elem,"previousSibling")},nextAll:function(elem){return jQuery.dir(elem,"nextSibling")},prevAll:function(elem){return jQuery.dir(elem,"previousSibling")},nextUntil:function(elem,i,until){return jQuery.dir(elem,"nextSibling",until)},prevUntil:function(elem,i,until){return jQuery.dir(elem,"previousSibling",until)},siblings:function(elem){return jQuery.sibling((elem.parentNode||{}).firstChild,elem)},children:function(elem){return jQuery.sibling(elem.firstChild)},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.merge([],elem.childNodes)}},function(name,fn){jQuery.fn[name]=function(until,selector){var ret=jQuery.map(this,fn,until);return runtil.test(name)||(selector=until),selector&&"string"==typeof selector&&(ret=jQuery.filter(selector,ret)),ret=this.length>1&&!guaranteedUnique[name]?jQuery.unique(ret):ret,this.length>1&&rparentsprev.test(name)&&(ret=ret.reverse()),this.pushStack(ret)}}),jQuery.extend({filter:function(expr,elems,not){return not&&(expr=":not("+expr+")"),1===elems.length?jQuery.find.matchesSelector(elems[0],expr)?[elems[0]]:[]:jQuery.find.matches(expr,elems)},dir:function(elem,dir,until){for(var matched=[],cur=elem[dir];cur&&9!==cur.nodeType&&(until===undefined||1!==cur.nodeType||!jQuery(cur).is(until));)1===cur.nodeType&&matched.push(cur),cur=cur[dir];return matched},sibling:function(n,elem){for(var r=[];n;n=n.nextSibling)1===n.nodeType&&n!==elem&&r.push(n);return r}});var nodeNames="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",rinlinejQuery=/ jQuery\d+="(?:null|\d+)"/g,rnoshimcache=new RegExp("<(?:"+nodeNames+")[\\s/>]","i"),rleadingWhitespace=/^\s+/,rxhtmlTag=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,rtagName=/<([\w:]+)/,rtbody=/\s*$/g,wrapMap={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:jQuery.support.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]},safeFragment=createSafeFragment(document),fragmentDiv=safeFragment.appendChild(document.createElement("div"));wrapMap.optgroup=wrapMap.option,wrapMap.tbody=wrapMap.tfoot=wrapMap.colgroup=wrapMap.caption=wrapMap.thead,wrapMap.th=wrapMap.td,jQuery.fn.extend({text:function(value){return jQuery.access(this,function(value){return value===undefined?jQuery.text(this):this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(value))},null,value,arguments.length)},wrapAll:function(html){if(jQuery.isFunction(html))return this.each(function(i){jQuery(this).wrapAll(html.call(this,i))});if(this[0]){var wrap=jQuery(html,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&wrap.insertBefore(this[0]),wrap.map(function(){for(var elem=this;elem.firstChild&&1===elem.firstChild.nodeType;)elem=elem.firstChild;return elem}).append(this)}return this},wrapInner:function(html){return jQuery.isFunction(html)?this.each(function(i){jQuery(this).wrapInner(html.call(this,i))}):this.each(function(){var self=jQuery(this),contents=self.contents();contents.length?contents.wrapAll(html):self.append(html)})},wrap:function(html){var isFunction=jQuery.isFunction(html);return this.each(function(i){jQuery(this).wrapAll(isFunction?html.call(this,i):html)})},unwrap:function(){return this.parent().each(function(){jQuery.nodeName(this,"body")||jQuery(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(elem){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||this.appendChild(elem)})},prepend:function(){return this.domManip(arguments,!0,function(elem){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||this.insertBefore(elem,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(elem){this.parentNode&&this.parentNode.insertBefore(elem,this)})},after:function(){return this.domManip(arguments,!1,function(elem){this.parentNode&&this.parentNode.insertBefore(elem,this.nextSibling)})},remove:function(selector,keepData){for(var elem,i=0;null!=(elem=this[i]);i++)(!selector||jQuery.filter(selector,[elem]).length>0)&&(keepData||1!==elem.nodeType||jQuery.cleanData(getAll(elem)), +elem.parentNode&&(keepData&&jQuery.contains(elem.ownerDocument,elem)&&setGlobalEval(getAll(elem,"script")),elem.parentNode.removeChild(elem)));return this},empty:function(){for(var elem,i=0;null!=(elem=this[i]);i++){for(1===elem.nodeType&&jQuery.cleanData(getAll(elem,!1));elem.firstChild;)elem.removeChild(elem.firstChild);elem.options&&jQuery.nodeName(elem,"select")&&(elem.options.length=0)}return this},clone:function(dataAndEvents,deepDataAndEvents){return dataAndEvents=null!=dataAndEvents&&dataAndEvents,deepDataAndEvents=null==deepDataAndEvents?dataAndEvents:deepDataAndEvents,this.map(function(){return jQuery.clone(this,dataAndEvents,deepDataAndEvents)})},html:function(value){return jQuery.access(this,function(value){var elem=this[0]||{},i=0,l=this.length;if(value===undefined)return 1===elem.nodeType?elem.innerHTML.replace(rinlinejQuery,""):undefined;if("string"==typeof value&&!rnoInnerhtml.test(value)&&(jQuery.support.htmlSerialize||!rnoshimcache.test(value))&&(jQuery.support.leadingWhitespace||!rleadingWhitespace.test(value))&&!wrapMap[(rtagName.exec(value)||["",""])[1].toLowerCase()]){value=value.replace(rxhtmlTag,"<$1>");try{for(;i")?clone=elem.cloneNode(!0):(fragmentDiv.innerHTML=elem.outerHTML,fragmentDiv.removeChild(clone=fragmentDiv.firstChild)),!(jQuery.support.noCloneEvent&&jQuery.support.noCloneChecked||1!==elem.nodeType&&11!==elem.nodeType||jQuery.isXMLDoc(elem)))for(destElements=getAll(clone),srcElements=getAll(elem),i=0;null!=(node=srcElements[i]);++i)destElements[i]&&fixCloneNodeIssues(node,destElements[i]);if(dataAndEvents)if(deepDataAndEvents)for(srcElements=srcElements||getAll(elem),destElements=destElements||getAll(clone),i=0;null!=(node=srcElements[i]);i++)cloneCopyEvent(node,destElements[i]);else cloneCopyEvent(elem,clone);return destElements=getAll(clone,"script"),destElements.length>0&&setGlobalEval(destElements,!inPage&&getAll(elem,"script")),destElements=srcElements=node=null,clone},buildFragment:function(elems,context,scripts,selection){for(var j,elem,contains,tmp,tag,tbody,wrap,l=elems.length,safe=createSafeFragment(context),nodes=[],i=0;i")+wrap[2],j=wrap[0];j--;)tmp=tmp.lastChild;if(!jQuery.support.leadingWhitespace&&rleadingWhitespace.test(elem)&&nodes.push(context.createTextNode(rleadingWhitespace.exec(elem)[0])),!jQuery.support.tbody)for(elem="table"!==tag||rtbody.test(elem)?""!==wrap[1]||rtbody.test(elem)?0:tmp:tmp.firstChild,j=elem&&elem.childNodes.length;j--;)jQuery.nodeName(tbody=elem.childNodes[j],"tbody")&&!tbody.childNodes.length&&elem.removeChild(tbody);for(jQuery.merge(nodes,tmp.childNodes),tmp.textContent="";tmp.firstChild;)tmp.removeChild(tmp.firstChild);tmp=safe.lastChild}else nodes.push(context.createTextNode(elem));for(tmp&&safe.removeChild(tmp),jQuery.support.appendChecked||jQuery.grep(getAll(nodes,"input"),fixDefaultChecked),i=0;elem=nodes[i++];)if((!selection||jQuery.inArray(elem,selection)===-1)&&(contains=jQuery.contains(elem.ownerDocument,elem),tmp=getAll(safe.appendChild(elem),"script"),contains&&setGlobalEval(tmp),scripts))for(j=0;elem=tmp[j++];)rscriptType.test(elem.type||"")&&scripts.push(elem);return tmp=null,safe},cleanData:function(elems,acceptData){for(var elem,type,id,data,i=0,internalKey=jQuery.expando,cache=jQuery.cache,deleteExpando=jQuery.support.deleteExpando,special=jQuery.event.special;null!=(elem=elems[i]);i++)if((acceptData||jQuery.acceptData(elem))&&(id=elem[internalKey],data=id&&cache[id])){if(data.events)for(type in data.events)special[type]?jQuery.event.remove(elem,type):jQuery.removeEvent(elem,type,data.handle);cache[id]&&(delete cache[id],deleteExpando?delete elem[internalKey]:typeof elem.removeAttribute!==core_strundefined?elem.removeAttribute(internalKey):elem[internalKey]=null,core_deletedIds.push(id))}}});var iframe,getStyles,curCSS,ralpha=/alpha\([^)]*\)/i,ropacity=/opacity\s*=\s*([^)]*)/,rposition=/^(top|right|bottom|left)$/,rdisplayswap=/^(none|table(?!-c[ea]).+)/,rmargin=/^margin/,rnumsplit=new RegExp("^("+core_pnum+")(.*)$","i"),rnumnonpx=new RegExp("^("+core_pnum+")(?!px)[a-z%]+$","i"),rrelNum=new RegExp("^([+-])=("+core_pnum+")","i"),elemdisplay={BODY:"block"},cssShow={position:"absolute",visibility:"hidden",display:"block"},cssNormalTransform={letterSpacing:0,fontWeight:400},cssExpand=["Top","Right","Bottom","Left"],cssPrefixes=["Webkit","O","Moz","ms"];jQuery.fn.extend({css:function(name,value){return jQuery.access(this,function(elem,name,value){var len,styles,map={},i=0;if(jQuery.isArray(name)){for(styles=getStyles(elem),len=name.length;i1)},show:function(){return showHide(this,!0)},hide:function(){return showHide(this)},toggle:function(state){var bool="boolean"==typeof state;return this.each(function(){(bool?state:isHidden(this))?jQuery(this).show():jQuery(this).hide()})}}),jQuery.extend({cssHooks:{opacity:{get:function(elem,computed){if(computed){var ret=curCSS(elem,"opacity");return""===ret?"1":ret}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":jQuery.support.cssFloat?"cssFloat":"styleFloat"},style:function(elem,name,value,extra){if(elem&&3!==elem.nodeType&&8!==elem.nodeType&&elem.style){var ret,type,hooks,origName=jQuery.camelCase(name),style=elem.style;if(name=jQuery.cssProps[origName]||(jQuery.cssProps[origName]=vendorPropName(style,origName)),hooks=jQuery.cssHooks[name]||jQuery.cssHooks[origName],value===undefined)return hooks&&"get"in hooks&&(ret=hooks.get(elem,!1,extra))!==undefined?ret:style[name];if(type=typeof value,"string"===type&&(ret=rrelNum.exec(value))&&(value=(ret[1]+1)*ret[2]+parseFloat(jQuery.css(elem,name)),type="number"),!(null==value||"number"===type&&isNaN(value)||("number"!==type||jQuery.cssNumber[origName]||(value+="px"),jQuery.support.clearCloneStyle||""!==value||0!==name.indexOf("background")||(style[name]="inherit"),hooks&&"set"in hooks&&(value=hooks.set(elem,value,extra))===undefined)))try{style[name]=value}catch(e){}}},css:function(elem,name,extra,styles){var num,val,hooks,origName=jQuery.camelCase(name);return name=jQuery.cssProps[origName]||(jQuery.cssProps[origName]=vendorPropName(elem.style,origName)),hooks=jQuery.cssHooks[name]||jQuery.cssHooks[origName],hooks&&"get"in hooks&&(val=hooks.get(elem,!0,extra)),val===undefined&&(val=curCSS(elem,name,styles)),"normal"===val&&name in cssNormalTransform&&(val=cssNormalTransform[name]),""===extra||extra?(num=parseFloat(val),extra===!0||jQuery.isNumeric(num)?num||0:val):val},swap:function(elem,options,callback,args){var ret,name,old={};for(name in options)old[name]=elem.style[name],elem.style[name]=options[name];ret=callback.apply(elem,args||[]);for(name in options)elem.style[name]=old[name];return ret}}),window.getComputedStyle?(getStyles=function(elem){return window.getComputedStyle(elem,null)},curCSS=function(elem,name,_computed){var width,minWidth,maxWidth,computed=_computed||getStyles(elem),ret=computed?computed.getPropertyValue(name)||computed[name]:undefined,style=elem.style;return computed&&(""!==ret||jQuery.contains(elem.ownerDocument,elem)||(ret=jQuery.style(elem,name)),rnumnonpx.test(ret)&&rmargin.test(name)&&(width=style.width,minWidth=style.minWidth,maxWidth=style.maxWidth,style.minWidth=style.maxWidth=style.width=ret,ret=computed.width,style.width=width,style.minWidth=minWidth,style.maxWidth=maxWidth)),ret}):document.documentElement.currentStyle&&(getStyles=function(elem){return elem.currentStyle},curCSS=function(elem,name,_computed){var left,rs,rsLeft,computed=_computed||getStyles(elem),ret=computed?computed[name]:undefined,style=elem.style;return null==ret&&style&&style[name]&&(ret=style[name]),rnumnonpx.test(ret)&&!rposition.test(name)&&(left=style.left,rs=elem.runtimeStyle,rsLeft=rs&&rs.left,rsLeft&&(rs.left=elem.currentStyle.left),style.left="fontSize"===name?"1em":ret,ret=style.pixelLeft+"px",style.left=left,rsLeft&&(rs.left=rsLeft)),""===ret?"auto":ret}),jQuery.each(["height","width"],function(i,name){jQuery.cssHooks[name]={get:function(elem,computed,extra){if(computed)return 0===elem.offsetWidth&&rdisplayswap.test(jQuery.css(elem,"display"))?jQuery.swap(elem,cssShow,function(){return getWidthOrHeight(elem,name,extra)}):getWidthOrHeight(elem,name,extra)},set:function(elem,value,extra){var styles=extra&&getStyles(elem);return setPositiveNumber(elem,value,extra?augmentWidthOrHeight(elem,name,extra,jQuery.support.boxSizing&&"border-box"===jQuery.css(elem,"boxSizing",!1,styles),styles):0)}}}),jQuery.support.opacity||(jQuery.cssHooks.opacity={get:function(elem,computed){return ropacity.test((computed&&elem.currentStyle?elem.currentStyle.filter:elem.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":computed?"1":""},set:function(elem,value){var style=elem.style,currentStyle=elem.currentStyle,opacity=jQuery.isNumeric(value)?"alpha(opacity="+100*value+")":"",filter=currentStyle&¤tStyle.filter||style.filter||"";style.zoom=1,(value>=1||""===value)&&""===jQuery.trim(filter.replace(ralpha,""))&&style.removeAttribute&&(style.removeAttribute("filter"),""===value||currentStyle&&!currentStyle.filter)||(style.filter=ralpha.test(filter)?filter.replace(ralpha,opacity):filter+" "+opacity)}}),jQuery(function(){jQuery.support.reliableMarginRight||(jQuery.cssHooks.marginRight={get:function(elem,computed){if(computed)return jQuery.swap(elem,{display:"inline-block"},curCSS,[elem,"marginRight"])}}),!jQuery.support.pixelPosition&&jQuery.fn.position&&jQuery.each(["top","left"],function(i,prop){jQuery.cssHooks[prop]={get:function(elem,computed){if(computed)return computed=curCSS(elem,prop),rnumnonpx.test(computed)?jQuery(elem).position()[prop]+"px":computed}}})}),jQuery.expr&&jQuery.expr.filters&&(jQuery.expr.filters.hidden=function(elem){return elem.offsetWidth<=0&&elem.offsetHeight<=0||!jQuery.support.reliableHiddenOffsets&&"none"===(elem.style&&elem.style.display||jQuery.css(elem,"display"))},jQuery.expr.filters.visible=function(elem){return!jQuery.expr.filters.hidden(elem)}),jQuery.each({margin:"",padding:"",border:"Width"},function(prefix,suffix){jQuery.cssHooks[prefix+suffix]={expand:function(value){for(var i=0,expanded={},parts="string"==typeof value?value.split(" "):[value];i<4;i++)expanded[prefix+cssExpand[i]+suffix]=parts[i]||parts[i-2]||parts[0];return expanded}},rmargin.test(prefix)||(jQuery.cssHooks[prefix+suffix].set=setPositiveNumber)});var r20=/%20/g,rbracket=/\[\]$/,rCRLF=/\r?\n/g,rsubmitterTypes=/^(?:submit|button|image|reset|file)$/i,rsubmittable=/^(?:input|select|textarea|keygen)/i;jQuery.fn.extend({serialize:function(){return jQuery.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var elements=jQuery.prop(this,"elements");return elements?jQuery.makeArray(elements):this}).filter(function(){var type=this.type;return this.name&&!jQuery(this).is(":disabled")&&rsubmittable.test(this.nodeName)&&!rsubmitterTypes.test(type)&&(this.checked||!manipulation_rcheckableType.test(type))}).map(function(i,elem){var val=jQuery(this).val();return null==val?null:jQuery.isArray(val)?jQuery.map(val,function(val){return{name:elem.name,value:val.replace(rCRLF,"\r\n")}}):{name:elem.name,value:val.replace(rCRLF,"\r\n")}}).get()}}),jQuery.param=function(a,traditional){var prefix,s=[],add=function(key,value){value=jQuery.isFunction(value)?value():null==value?"":value,s[s.length]=encodeURIComponent(key)+"="+encodeURIComponent(value)};if(traditional===undefined&&(traditional=jQuery.ajaxSettings&&jQuery.ajaxSettings.traditional),jQuery.isArray(a)||a.jquery&&!jQuery.isPlainObject(a))jQuery.each(a,function(){add(this.name,this.value)});else for(prefix in a)buildParams(prefix,a[prefix],traditional,add);return s.join("&").replace(r20,"+")},jQuery.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(i,name){jQuery.fn[name]=function(data,fn){return arguments.length>0?this.on(name,null,data,fn):this.trigger(name)}}),jQuery.fn.hover=function(fnOver,fnOut){return this.mouseenter(fnOver).mouseleave(fnOut||fnOver)};var ajaxLocParts,ajaxLocation,ajax_nonce=jQuery.now(),ajax_rquery=/\?/,rhash=/#.*$/,rts=/([?&])_=[^&]*/,rheaders=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,rlocalProtocol=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,rnoContent=/^(?:GET|HEAD)$/,rprotocol=/^\/\//,rurl=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,_load=jQuery.fn.load,prefilters={},transports={},allTypes="*/".concat("*");try{ajaxLocation=location.href}catch(e){ajaxLocation=document.createElement("a"),ajaxLocation.href="",ajaxLocation=ajaxLocation.href}ajaxLocParts=rurl.exec(ajaxLocation.toLowerCase())||[],jQuery.fn.load=function(url,params,callback){if("string"!=typeof url&&_load)return _load.apply(this,arguments);var selector,response,type,self=this,off=url.indexOf(" ");return off>=0&&(selector=url.slice(off,url.length),url=url.slice(0,off)),jQuery.isFunction(params)?(callback=params,params=undefined):params&&"object"==typeof params&&(type="POST"),self.length>0&&jQuery.ajax({url:url,type:type,dataType:"html",data:params}).done(function(responseText){response=arguments,self.html(selector?jQuery("
    ").append(jQuery.parseHTML(responseText)).find(selector):responseText)}).complete(callback&&function(jqXHR,status){self.each(callback,response||[jqXHR.responseText,status,jqXHR])}),this},jQuery.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(i,type){jQuery.fn[type]=function(fn){return this.on(type,fn)}}),jQuery.each(["get","post"],function(i,method){jQuery[method]=function(url,data,callback,type){return jQuery.isFunction(data)&&(type=type||callback,callback=data,data=undefined),jQuery.ajax({url:url,type:method,dataType:type,data:data,success:callback})}}),jQuery.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:ajaxLocation,type:"GET",isLocal:rlocalProtocol.test(ajaxLocParts[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":allTypes,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":window.String,"text html":!0,"text json":jQuery.parseJSON,"text xml":jQuery.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(target,settings){return settings?ajaxExtend(ajaxExtend(target,jQuery.ajaxSettings),settings):ajaxExtend(jQuery.ajaxSettings,target)},ajaxPrefilter:addToPrefiltersOrTransports(prefilters),ajaxTransport:addToPrefiltersOrTransports(transports),ajax:function(url,options){function done(status,nativeStatusText,responses,headers){var isSuccess,success,error,response,modified,statusText=nativeStatusText;2!==state&&(state=2,timeoutTimer&&clearTimeout(timeoutTimer),transport=undefined,responseHeadersString=headers||"",jqXHR.readyState=status>0?4:0,responses&&(response=ajaxHandleResponses(s,jqXHR,responses)),status>=200&&status<300||304===status?(s.ifModified&&(modified=jqXHR.getResponseHeader("Last-Modified"),modified&&(jQuery.lastModified[cacheURL]=modified),modified=jqXHR.getResponseHeader("etag"),modified&&(jQuery.etag[cacheURL]=modified)),204===status?(isSuccess=!0,statusText="nocontent"):304===status?(isSuccess=!0,statusText="notmodified"):(isSuccess=ajaxConvert(s,response),statusText=isSuccess.state,success=isSuccess.data,error=isSuccess.error,isSuccess=!error)):(error=statusText,!status&&statusText||(statusText="error",status<0&&(status=0))),jqXHR.status=status,jqXHR.statusText=(nativeStatusText||statusText)+"",isSuccess?deferred.resolveWith(callbackContext,[success,statusText,jqXHR]):deferred.rejectWith(callbackContext,[jqXHR,statusText,error]),jqXHR.statusCode(statusCode),statusCode=undefined,fireGlobals&&globalEventContext.trigger(isSuccess?"ajaxSuccess":"ajaxError",[jqXHR,s,isSuccess?success:error]),completeDeferred.fireWith(callbackContext,[jqXHR,statusText]),fireGlobals&&(globalEventContext.trigger("ajaxComplete",[jqXHR,s]),--jQuery.active||jQuery.event.trigger("ajaxStop")))}"object"==typeof url&&(options=url,url=undefined),options=options||{};var parts,i,cacheURL,responseHeadersString,timeoutTimer,fireGlobals,transport,responseHeaders,s=jQuery.ajaxSetup({},options),callbackContext=s.context||s,globalEventContext=s.context&&(callbackContext.nodeType||callbackContext.jquery)?jQuery(callbackContext):jQuery.event,deferred=jQuery.Deferred(),completeDeferred=jQuery.Callbacks("once memory"),statusCode=s.statusCode||{},requestHeaders={},requestHeadersNames={},state=0,strAbort="canceled",jqXHR={readyState:0,getResponseHeader:function(key){var match;if(2===state){if(!responseHeaders)for(responseHeaders={};match=rheaders.exec(responseHeadersString);)responseHeaders[match[1].toLowerCase()]=match[2];match=responseHeaders[key.toLowerCase()]}return null==match?null:match},getAllResponseHeaders:function(){return 2===state?responseHeadersString:null},setRequestHeader:function(name,value){var lname=name.toLowerCase();return state||(name=requestHeadersNames[lname]=requestHeadersNames[lname]||name,requestHeaders[name]=value),this},overrideMimeType:function(type){return state||(s.mimeType=type),this},statusCode:function(map){var code;if(map)if(state<2)for(code in map)statusCode[code]=[statusCode[code],map[code]];else jqXHR.always(map[jqXHR.status]);return this},abort:function(statusText){var finalText=statusText||strAbort;return transport&&transport.abort(finalText),done(0,finalText),this}};if(deferred.promise(jqXHR).complete=completeDeferred.add,jqXHR.success=jqXHR.done,jqXHR.error=jqXHR.fail,s.url=((url||s.url||ajaxLocation)+"").replace(rhash,"").replace(rprotocol,ajaxLocParts[1]+"//"),s.type=options.method||options.type||s.method||s.type,s.dataTypes=jQuery.trim(s.dataType||"*").toLowerCase().match(core_rnotwhite)||[""],null==s.crossDomain&&(parts=rurl.exec(s.url.toLowerCase()),s.crossDomain=!(!parts||parts[1]===ajaxLocParts[1]&&parts[2]===ajaxLocParts[2]&&(parts[3]||("http:"===parts[1]?80:443))==(ajaxLocParts[3]||("http:"===ajaxLocParts[1]?80:443)))),s.data&&s.processData&&"string"!=typeof s.data&&(s.data=jQuery.param(s.data,s.traditional)),inspectPrefiltersOrTransports(prefilters,s,options,jqXHR),2===state)return jqXHR;fireGlobals=s.global,fireGlobals&&0===jQuery.active++&&jQuery.event.trigger("ajaxStart"),s.type=s.type.toUpperCase(),s.hasContent=!rnoContent.test(s.type),cacheURL=s.url,s.hasContent||(s.data&&(cacheURL=s.url+=(ajax_rquery.test(cacheURL)?"&":"?")+s.data,delete s.data),s.cache===!1&&(s.url=rts.test(cacheURL)?cacheURL.replace(rts,"$1_="+ajax_nonce++):cacheURL+(ajax_rquery.test(cacheURL)?"&":"?")+"_="+ajax_nonce++)),s.ifModified&&(jQuery.lastModified[cacheURL]&&jqXHR.setRequestHeader("If-Modified-Since",jQuery.lastModified[cacheURL]),jQuery.etag[cacheURL]&&jqXHR.setRequestHeader("If-None-Match",jQuery.etag[cacheURL])),(s.data&&s.hasContent&&s.contentType!==!1||options.contentType)&&jqXHR.setRequestHeader("Content-Type",s.contentType),jqXHR.setRequestHeader("Accept",s.dataTypes[0]&&s.accepts[s.dataTypes[0]]?s.accepts[s.dataTypes[0]]+("*"!==s.dataTypes[0]?", "+allTypes+"; q=0.01":""):s.accepts["*"]);for(i in s.headers)jqXHR.setRequestHeader(i,s.headers[i]);if(s.beforeSend&&(s.beforeSend.call(callbackContext,jqXHR,s)===!1||2===state))return jqXHR.abort();strAbort="abort";for(i in{success:1,error:1,complete:1})jqXHR[i](s[i]);if(transport=inspectPrefiltersOrTransports(transports,s,options,jqXHR)){jqXHR.readyState=1,fireGlobals&&globalEventContext.trigger("ajaxSend",[jqXHR,s]),s.async&&s.timeout>0&&(timeoutTimer=setTimeout(function(){jqXHR.abort("timeout")},s.timeout));try{state=1,transport.send(requestHeaders,done)}catch(e){if(!(state<2))throw e;done(-1,e)}}else done(-1,"No Transport");return jqXHR},getScript:function(url,callback){return jQuery.get(url,undefined,callback,"script")},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json")}}),jQuery.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(text){return jQuery.globalEval(text),text}}}),jQuery.ajaxPrefilter("script",function(s){s.cache===undefined&&(s.cache=!1),s.crossDomain&&(s.type="GET",s.global=!1)}),jQuery.ajaxTransport("script",function(s){if(s.crossDomain){var script,head=document.head||jQuery("head")[0]||document.documentElement;return{send:function(_,callback){script=document.createElement("script"),script.async=!0,s.scriptCharset&&(script.charset=s.scriptCharset),script.src=s.url,script.onload=script.onreadystatechange=function(_,isAbort){(isAbort||!script.readyState||/loaded|complete/.test(script.readyState))&&(script.onload=script.onreadystatechange=null,script.parentNode&&script.parentNode.removeChild(script),script=null,isAbort||callback(200,"success"))},head.insertBefore(script,head.firstChild)},abort:function(){script&&script.onload(undefined,!0)}}}});var oldCallbacks=[],rjsonp=/(=)\?(?=&|$)|\?\?/;jQuery.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var callback=oldCallbacks.pop()||jQuery.expando+"_"+ajax_nonce++;return this[callback]=!0,callback}}),jQuery.ajaxPrefilter("json jsonp",function(s,originalSettings,jqXHR){var callbackName,overwritten,responseContainer,jsonProp=s.jsonp!==!1&&(rjsonp.test(s.url)?"url":"string"==typeof s.data&&!(s.contentType||"").indexOf("application/x-www-form-urlencoded")&&rjsonp.test(s.data)&&"data");if(jsonProp||"jsonp"===s.dataTypes[0])return callbackName=s.jsonpCallback=jQuery.isFunction(s.jsonpCallback)?s.jsonpCallback():s.jsonpCallback,jsonProp?s[jsonProp]=s[jsonProp].replace(rjsonp,"$1"+callbackName):s.jsonp!==!1&&(s.url+=(ajax_rquery.test(s.url)?"&":"?")+s.jsonp+"="+callbackName),s.converters["script json"]=function(){return responseContainer||jQuery.error(callbackName+" was not called"),responseContainer[0]},s.dataTypes[0]="json",overwritten=window[callbackName],window[callbackName]=function(){responseContainer=arguments},jqXHR.always(function(){window[callbackName]=overwritten,s[callbackName]&&(s.jsonpCallback=originalSettings.jsonpCallback,oldCallbacks.push(callbackName)),responseContainer&&jQuery.isFunction(overwritten)&&overwritten(responseContainer[0]),responseContainer=overwritten=undefined}),"script"});var xhrCallbacks,xhrSupported,xhrId=0,xhrOnUnloadAbort=window.ActiveXObject&&function(){var key;for(key in xhrCallbacks)xhrCallbacks[key](undefined,!0)};jQuery.ajaxSettings.xhr=window.ActiveXObject?function(){return!this.isLocal&&createStandardXHR()||createActiveXHR()}:createStandardXHR,xhrSupported=jQuery.ajaxSettings.xhr(),jQuery.support.cors=!!xhrSupported&&"withCredentials"in xhrSupported,xhrSupported=jQuery.support.ajax=!!xhrSupported,xhrSupported&&jQuery.ajaxTransport(function(s){if(!s.crossDomain||jQuery.support.cors){var callback;return{send:function(headers,complete){var handle,i,xhr=s.xhr();if(s.username?xhr.open(s.type,s.url,s.async,s.username,s.password):xhr.open(s.type,s.url,s.async),s.xhrFields)for(i in s.xhrFields)xhr[i]=s.xhrFields[i];s.mimeType&&xhr.overrideMimeType&&xhr.overrideMimeType(s.mimeType),s.crossDomain||headers["X-Requested-With"]||(headers["X-Requested-With"]="XMLHttpRequest");try{for(i in headers)xhr.setRequestHeader(i,headers[i])}catch(err){}xhr.send(s.hasContent&&s.data||null),callback=function(_,isAbort){var status,responseHeaders,statusText,responses;try{if(callback&&(isAbort||4===xhr.readyState))if(callback=undefined,handle&&(xhr.onreadystatechange=jQuery.noop,xhrOnUnloadAbort&&delete xhrCallbacks[handle]),isAbort)4!==xhr.readyState&&xhr.abort();else{responses={},status=xhr.status,responseHeaders=xhr.getAllResponseHeaders(),"string"==typeof xhr.responseText&&(responses.text=xhr.responseText);try{statusText=xhr.statusText}catch(e){statusText=""}status||!s.isLocal||s.crossDomain?1223===status&&(status=204):status=responses.text?200:404}}catch(firefoxAccessException){isAbort||complete(-1,firefoxAccessException)}responses&&complete(status,statusText,responses,responseHeaders)},s.async?4===xhr.readyState?setTimeout(callback):(handle=++xhrId,xhrOnUnloadAbort&&(xhrCallbacks||(xhrCallbacks={},jQuery(window).unload(xhrOnUnloadAbort)),xhrCallbacks[handle]=callback),xhr.onreadystatechange=callback):callback()},abort:function(){callback&&callback(undefined,!0)}}}});var fxNow,timerId,rfxtypes=/^(?:toggle|show|hide)$/,rfxnum=new RegExp("^(?:([+-])=|)("+core_pnum+")([a-z%]*)$","i"),rrun=/queueHooks$/,animationPrefilters=[defaultPrefilter],tweeners={"*":[function(prop,value){var end,unit,tween=this.createTween(prop,value),parts=rfxnum.exec(value),target=tween.cur(),start=+target||0,scale=1,maxIterations=20;if(parts){if(end=+parts[2],unit=parts[3]||(jQuery.cssNumber[prop]?"":"px"),"px"!==unit&&start){start=jQuery.css(tween.elem,prop,!0)||end||1;do scale=scale||".5",start/=scale,jQuery.style(tween.elem,prop,start+unit);while(scale!==(scale=tween.cur()/target)&&1!==scale&&--maxIterations)}tween.unit=unit,tween.start=start,tween.end=parts[1]?start+(parts[1]+1)*end:end}return tween}]};jQuery.Animation=jQuery.extend(Animation,{tweener:function(props,callback){jQuery.isFunction(props)?(callback=props,props=["*"]):props=props.split(" ");for(var prop,index=0,length=props.length;index-1,props={},curPosition={},curTop,curLeft;calculatePosition?(curPosition=curElem.position(),curTop=curPosition.top,curLeft=curPosition.left):(curTop=parseFloat(curCSSTop)||0,curLeft=parseFloat(curCSSLeft)||0),jQuery.isFunction(options)&&(options=options.call(elem,i,curOffset)),null!=options.top&&(props.top=options.top-curOffset.top+curTop),null!=options.left&&(props.left=options.left-curOffset.left+curLeft),"using"in options?options.using.call(elem,props):curElem.css(props)}},jQuery.fn.extend({position:function(){if(this[0]){var offsetParent,offset,parentOffset={top:0,left:0},elem=this[0];return"fixed"===jQuery.css(elem,"position")?offset=elem.getBoundingClientRect():(offsetParent=this.offsetParent(),offset=this.offset(),jQuery.nodeName(offsetParent[0],"html")||(parentOffset=offsetParent.offset()),parentOffset.top+=jQuery.css(offsetParent[0],"borderTopWidth",!0),parentOffset.left+=jQuery.css(offsetParent[0],"borderLeftWidth",!0)),{top:offset.top-parentOffset.top-jQuery.css(elem,"marginTop",!0),left:offset.left-parentOffset.left-jQuery.css(elem,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var offsetParent=this.offsetParent||document.documentElement;offsetParent&&!jQuery.nodeName(offsetParent,"html")&&"static"===jQuery.css(offsetParent,"position");)offsetParent=offsetParent.offsetParent;return offsetParent||document.documentElement})}}),jQuery.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(method,prop){var top=/Y/.test(prop);jQuery.fn[method]=function(val){return jQuery.access(this,function(elem,method,val){var win=getWindow(elem);return val===undefined?win?prop in win?win[prop]:win.document.documentElement[method]:elem[method]:void(win?win.scrollTo(top?jQuery(win).scrollLeft():val,top?val:jQuery(win).scrollTop()):elem[method]=val)},method,val,arguments.length,null)}}),jQuery.each({Height:"height",Width:"width"},function(name,type){jQuery.each({padding:"inner"+name,content:type,"":"outer"+name},function(defaultExtra,funcName){jQuery.fn[funcName]=function(margin,value){var chainable=arguments.length&&(defaultExtra||"boolean"!=typeof margin),extra=defaultExtra||(margin===!0||value===!0?"margin":"border");return jQuery.access(this,function(elem,type,value){var doc;return jQuery.isWindow(elem)?elem.document.documentElement["client"+name]:9===elem.nodeType?(doc=elem.documentElement,Math.max(elem.body["scroll"+name],doc["scroll"+name],elem.body["offset"+name],doc["offset"+name],doc["client"+name])):value===undefined?jQuery.css(elem,type,extra):jQuery.style(elem,type,value,extra)},type,chainable?margin:undefined,chainable,null)}})}),BI.jQuery=BI.$=jQuery,window.$=window.$||jQuery,window.jQuery=window.jQuery||jQuery,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return jQuery})}(window),BI.$.extend(BI.$.Event.prototype,{stopEvent:function(){this.stopPropagation(),this.preventDefault()}}),BI.jQuery&&(!function($){$.fn.insets||($.fn.insets=function(){var p=this.padding(),b=this.border();return{top:p.top,bottom:p.bottom+b.bottom+b.top,left:p.left,right:p.right+b.right+b.left}}),$.fn.bounds||($.fn.bounds=function(value){var tmp={hasIgnoredBounds:!0};return value?(isNaN(value.x)||(tmp.left=value.x),isNaN(value.y)||(tmp.top=value.y),null!=value.width&&(tmp.width=value.width-(this.outerWidth(!0)-this.width()),tmp.width=tmp.width>=0?tmp.width:value.width),null!=value.height&&(tmp.height=value.height-(this.outerHeight(!0)-this.height()),tmp.height=tmp.height>=0?tmp.height:value.height),this.css(tmp),this):(tmp=this.position(),{x:tmp.left,y:tmp.top,width:this.outerWidth(),height:this.outerHeight()})})}(BI.jQuery),BI.extend(BI.jQuery.fn,{destroy:function(){this.remove(),BI.isIE()===!0&&(this[0].outerHTML="")},__textKeywordMarked__:function(text,keyword,py){if(!BI.isKey(keyword)||(text+"").length>100)return this.html(BI.htmlEncode(text));keyword+="",keyword=BI.toUpperCase(keyword);var textLeft=(text||"")+"";for(py=(py||BI.makeFirstPY(text))+"",null!=py&&(py=BI.toUpperCase(py)),this.empty();py.length>0&&textLeft.length>0;){var tidx=BI.toUpperCase(textLeft).indexOf(keyword),pidx=null;if(null!=py&&(pidx=py.indexOf(keyword),pidx>=0&&(pidx%=text.length)),tidx>=0)this.append(BI.htmlEncode(textLeft.substr(0,tidx))),this.append(BI.$("").addClass("bi-keyword-red-mark").html(BI.htmlEncode(textLeft.substr(tidx,keyword.length)))),textLeft=textLeft.substr(tidx+keyword.length),null!=py&&(py=py.substr(tidx+keyword.length));else{if(!(null!=pidx&&pidx>=0&&Math.floor(pidx/text.length)===Math.floor((pidx+keyword.length-1)/text.length))){this.append(BI.htmlEncode(textLeft));break}this.append(BI.htmlEncode(textLeft.substr(0,pidx))),this.append(BI.$("").addClass("bi-keyword-red-mark").html(BI.htmlEncode(textLeft.substr(pidx,keyword.length)))),null!=py&&(py=py.substr(pidx+keyword.length)),textLeft=textLeft.substr(pidx+keyword.length)}}return this},getDomHeight:function(parent){var clone=BI.$(this).clone();clone.appendTo(BI.$(parent||"body"));var height=clone.height();return clone.remove(),height},hasVerticalScroll:function(){return this.height()>0&&this[0].clientWidth0&&this[0].clientHeightoffset2Body.left+width||e.pageYoffset2Body.top+height)},__hasZIndexMask__:function(zindex){return zindex&&null!=this.zIndexMask[zindex]},__buildZIndexMask__:function(zindex,domArray){this.zIndexMask=this.zIndexMask||{},this.indexMask=this.indexMask||[];var mask=BI.createWidget({type:"bi.center_adapt",cls:"bi-z-index-mask",items:domArray});return mask.element.css({"z-index":zindex}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:mask,left:0,right:0,top:0,bottom:0}]}),this.indexMask.push(mask),zindex&&(this.zIndexMask[zindex]=mask),mask.element},__releaseZIndexMask__:function(zindex){if(zindex&&this.zIndexMask[zindex])return BI.remove(this.indexMask,this.zIndexMask[zindex]),void this.zIndexMask[zindex].destroy();this.indexMask=this.indexMask||[];var indexMask=this.indexMask.pop();indexMask&&indexMask.destroy()}})),_.extend(BI,{$import:function(){function loadReady(src,must){var $scripts=BI.$("head script, body script");BI.$.each($scripts,function(i,item){item.src.indexOf(src)!=-1&&(_LOADED[src]=!0)});var $links=BI.$("head link");BI.$.each($links,function(i,item){item.href.indexOf(src)!=-1&&must&&(_LOADED[src]=!1,BI.$(item).remove())})}var _LOADED={};return function(src,ext,must){if(loadReady(src,must),_LOADED[src]!==!0)if("css"===ext){var link=document.createElement("link");link.rel="stylesheet",link.type="text/css",link.href=src;var head=document.getElementsByTagName("head")[0];head.appendChild(link),_LOADED[src]=!0}else BI.$.ajax({url:src,dataType:"script",async:!1,cache:!0,complete:function(res,status){"success"==status&&(_LOADED[src]=!0)}})}}()}),Number.prototype.toFixed&&"0.000"===8e-5.toFixed(3)&&"0"!==.9.toFixed(0)&&"1.25"===1.255.toFixed(2)&&"1000000000000000128"===(0xde0b6b3a7640080).toFixed(0)||!function(){function multiply(n,c){for(var i=-1;++i=0;)c+=data[i],data[i]=Math.floor(c/n),c=c%n*base}function toString(){for(var i=size,s="";--i>=0;)if(""!==s||0===i||0!==data[i]){var t=String(data[i]);""===s?s=t:s+="0000000".slice(0,7-t.length)+t}return s}function pow(x,n,acc){return 0===n?acc:n%2===1?pow(x,n-1,acc*x):pow(x*x,n/2,acc)}function log(x){for(var n=0;x>=4096;)n+=12,x/=4096;for(;x>=2;)n+=1,x/=2;return n}var base,size,data,i;base=1e7,size=6,data=[0,0,0,0,0,0],Number.prototype.toFixed=function(fractionDigits){var f,x,s,m,e,z,j,k;if(f=Number(fractionDigits),f=f!==f?0:Math.floor(f),f<0||f>20)throw new RangeError("Number.toFixed called with invalid number of decimals");if(x=Number(this),x!==x)return"NaN";if(x<=-1e21||x>1e21)return String(x);if(s="",x<0&&(s="-",x=-x),m="0",x>1e-21)if(e=log(x*pow(2,69,1))-69,z=e<0?x*pow(2,-e,1):x/pow(2,e,1),z*=4503599627370496,e=52-e,e>0){for(multiply(0,z),j=f;j>=7;)multiply(1e7,0),j-=7;for(multiply(pow(10,j,1),0),j=e-1;j>=23;)divide(1<<23),j-=23;divide(1<0?(k=m.length,m=k<=f?s+"0.0000000000000000000".slice(0,f-k+2)+m:s+m.slice(0,k-f)+"."+m.slice(k-f)):m=s+m,m}}(),_.extend(BI,{MAX:0x1000000000000000,MIN:-0x1000000000000000,EVENT_RESPONSE_TIME:200,zIndex_layer:1e5,zIndex_popover:1e6,zIndex_popup:1e7,zIndex_masker:1e8,zIndex_tip:1e9,emptyStr:"",emptyFn:function(){},empty:null,Key:{48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9",106:"*",107:"+",109:"-",110:".",111:"/"},KeyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},Status:{SUCCESS:1,WRONG:2,START:3,END:4,WAITING:5,READY:6,RUNNING:7,OUTOFBOUNDS:8,NULL:-1},Direction:{Top:"top",Bottom:"bottom",Left:"left",Right:"right",Custom:"custom"},Axis:{Vertical:"vertical",Horizontal:"horizontal"},Selection:{Default:-2,None:-1,Single:0,Multi:1,All:2},HorizontalAlign:{Left:"left",Right:"right",Center:"center",Stretch:"stretch"},VerticalAlign:{Middle:"middle",Top:"top",Bottom:"bottom",Stretch:"stretch"},StartOfWeek:1}),BI.version="2.0",BI.AbsoluteCenterLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.AbsoluteCenterLayout.superclass.props.apply(this,arguments),{baseCls:"bi-absolute-center-layout",hgap:0,lgap:0,rgap:0,vgap:0,tgap:0,bgap:0})},render:function(){BI.AbsoluteCenterLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.AbsoluteCenterLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"absolute",left:o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0),right:o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0),top:o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0),bottom:o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0),margin:"auto"}),w},resize:function(){},populate:function(items){BI.AbsoluteCenterLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.absolute_center_adapt",BI.AbsoluteCenterLayout),BI.AbsoluteHorizontalLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.AbsoluteHorizontalLayout.superclass.props.apply(this,arguments),{baseCls:"bi-absolute-horizontal-layout",hgap:0,lgap:0,rgap:0,vgap:0,tgap:0,bgap:0})},render:function(){BI.AbsoluteHorizontalLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.AbsoluteHorizontalLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"absolute",left:o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0),right:o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0),margin:"auto"}),o.vgap+o.tgap+(item.vgap||0)+(item.tgap||0)!==0&&w.element.css("top",o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)),o.vgap+o.bgap+(item.vgap||0)+(item.bgap||0)!==0&&w.element.css("bottom",o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)),w},resize:function(){},populate:function(items){BI.AbsoluteHorizontalLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.absolute_horizontal_adapt",BI.AbsoluteHorizontalLayout),BI.AbsoluteVerticalLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.AbsoluteVerticalLayout.superclass.props.apply(this,arguments),{baseCls:"bi-absolute-vertical-layout",hgap:0,lgap:0,rgap:0,vgap:0,tgap:0,bgap:0})},render:function(){BI.AbsoluteVerticalLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.AbsoluteVerticalLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"absolute",left:item.lgap,right:item.rgap,top:o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0),bottom:o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0),margin:"auto"}),o.hgap+o.lgap+(item.hgap||0)+(item.lgap||0)!==0&&w.element.css("left",o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)),o.hgap+o.rgap+(item.hgap||0)+(item.rgap||0)!==0&&w.element.css("right",o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)),w},resize:function(){},populate:function(items){BI.AbsoluteVerticalLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.absolute_vertical_adapt",BI.AbsoluteVerticalLayout),BI.CenterAdaptLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.CenterAdaptLayout.superclass.props.apply(this,arguments),{baseCls:"bi-center-adapt-layout",horizontalAlign:BI.HorizontalAlign.Center,columnSize:[],scrollx:!1,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){var o=this.options,self=this;return BI.CenterAdaptLayout.superclass.render.apply(this,arguments),{type:"bi.horizontal",verticalAlign:BI.VerticalAlign.Middle,horizontalAlign:o.horizontalAlign,columnSize:o.columnSize,scrollx:o.scrollx,items:o.items,ref:function(_ref){self.layout=_ref},hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap}},resize:function(){},populate:function(items){this.layout.populate.apply(this,arguments)}}),BI.shortcut("bi.center_adapt",BI.CenterAdaptLayout),BI.HorizontalAdaptLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.HorizontalAdaptLayout.superclass.props.apply(this,arguments),{baseCls:"bi-horizontal-adapt-layout",verticalAlign:BI.VerticalAlign.Top,horizontalAlign:BI.HorizontalAlign.Center,columnSize:[],scrollx:!1,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){var self=this,o=this.options;return BI.HorizontalAdaptLayout.superclass.render.apply(this,arguments),{type:"bi.horizontal",verticalAlign:BI.VerticalAlign.Top,horizontalAlign:o.horizontalAlign,columnSize:o.columnSize,items:o.items,scrollx:o.scrollx,ref:function(_ref){self.layout=_ref},hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap}},resize:function(){},populate:function(items){this.layout.populate.apply(this,arguments)}}),BI.shortcut("bi.horizontal_adapt",BI.HorizontalAdaptLayout),BI.LeftRightVerticalAdaptLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.LeftRightVerticalAdaptLayout.superclass.props.apply(this,arguments),{baseCls:"bi-left-right-vertical-adapt-layout",items:{},llgap:0,lrgap:0,lhgap:0,rlgap:0,rrgap:0,rhgap:0})},render:function(){var o=this.options,self=this;BI.LeftRightVerticalAdaptLayout.superclass.render.apply(this,arguments);var layoutArray=[];return"left"in o.items&&layoutArray.push({type:"bi.left",items:[{el:{type:"bi.vertical_adapt",height:"100%",items:o.items.left,hgap:o.lhgap,lgap:o.llgap,rgap:o.lrgap}}]}),"right"in o.items&&layoutArray.push({type:"bi.right",items:[{el:{type:"bi.vertical_adapt",height:"100%",items:o.items.right,textAlign:"right",hgap:o.rhgap,lgap:o.rlgap,rgap:o.rrgap}}]}),layoutArray},resize:function(){},addItem:function(){throw new Error("cannot be added")},populate:function(items){BI.LeftRightVerticalAdaptLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.left_right_vertical_adapt",BI.LeftRightVerticalAdaptLayout),BI.LeftVerticalAdaptLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.LeftRightVerticalAdaptLayout.superclass.props.apply(this,arguments),{baseCls:"bi-left-vertical-adapt-layout",items:[],lgap:0,rgap:0,hgap:0})},render:function(){var o=this.options,self=this;return BI.LeftVerticalAdaptLayout.superclass.render.apply(this,arguments),{type:"bi.left",ref:function(_ref){self.layout=_ref},items:[{el:{type:"bi.vertical_adapt",height:"100%",items:o.items,lgap:o.lgap,hgap:o.hgap,rgap:o.rgap}}]}},resize:function(){},addItem:function(){throw new Error("cannot be added")},populate:function(items){this.layout.populate.apply(this,arguments)}}),BI.shortcut("bi.left_vertical_adapt",BI.LeftVerticalAdaptLayout),BI.RightVerticalAdaptLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.RightVerticalAdaptLayout.superclass.props.apply(this,arguments),{baseCls:"bi-right-vertical-adapt-layout",items:[],lgap:0,rgap:0,hgap:0})},render:function(){var o=this.options,self=this;return BI.RightVerticalAdaptLayout.superclass.render.apply(this,arguments),{type:"bi.right",ref:function(_ref){self.layout=_ref},items:[{el:{type:"bi.vertical_adapt",height:"100%",textAlign:"right",items:o.items,lgap:o.lgap,hgap:o.hgap,rgap:o.rgap}}]}},resize:function(){},addItem:function(){throw new Error("cannot be added")},populate:function(items){this.layout.populate.apply(this,arguments)}}),BI.shortcut("bi.right_vertical_adapt",BI.RightVerticalAdaptLayout),BI.TableAdaptLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.TableAdaptLayout.superclass.props.apply(this,arguments),{baseCls:"bi-table-center-adapt-layout",columnSize:[],verticalAlign:BI.VerticalAlign.Top,horizontalAlign:BI.HorizontalAlign.Left,scrollx:!0,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){var o=this.options;BI.TableAdaptLayout.superclass.render.apply(this,arguments),this.$table=BI.Widget._renderEngine.createElement("
    ").css({position:"relative",display:"table",height:o.verticalAlign===BI.VerticalAlign.Middle?"100%":"auto",width:o.horizontalAlign===BI.HorizontalAlign.Center?"100%":"auto","white-space":"nowrap"}),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,td,width=o.columnSize[i]<=1?100*o.columnSize[i]+"%":o.columnSize[i];if(this.hasWidget(this._getChildName(i)))td=this.getWidgetByName(this._getChildName(i)),td.element.width(width);else{var w=BI.createWidget(item);w.element.css({position:"relative",top:"0",left:"0",margin:"0px auto"}),td=BI.createWidget({type:"bi.default",width:width,items:[w]}),this.addWidget(this._getChildName(i),td)}return td.element.css({"max-width":o.columnSize[i]<=1?width:width+"px"}),0===i&&td.element.addClass("first-element"),td.element.css({position:"relative",display:"table-cell","vertical-align":o.verticalAlign,margin:"0",padding:"0",height:"100%"}),o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-top":o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)+"px"}),o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-left":(0===i?o.hgap:0)+o.lgap+(item.lgap||0)+(item.hgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-right":o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)+"px"}),td},appendFragment:function(frag){this.$table.append(frag),this.element.append(this.$table)},resize:function(){},populate:function(items){BI.TableAdaptLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.table_adapt",BI.TableAdaptLayout),BI.VerticalAdaptLayout=BI.inherit(BI.Layout,{props:{baseCls:"bi-vertical-adapt-layout",horizontalAlign:BI.HorizontalAlign.Left,columnSize:[],scrollx:!1,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0},render:function(){var self=this,o=this.options;return BI.VerticalAdaptLayout.superclass.render.apply(this,arguments),{type:"bi.horizontal",verticalAlign:BI.VerticalAlign.Middle,horizontalAlign:o.horizontalAlign,columnSize:o.columnSize,items:o.items,scrollx:o.scrollx,ref:function(_ref){self.layout=_ref},hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap}},resize:function(){},populate:function(items){this.layout.populate.apply(this,arguments)}}),BI.shortcut("bi.vertical_adapt",BI.VerticalAdaptLayout),BI.HorizontalAutoLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.HorizontalAutoLayout.superclass.props.apply(this,arguments),{baseCls:"bi-horizon-auto-layout",hgap:0,lgap:0,rgap:0,vgap:0,tgap:0,bgap:0})},render:function(){BI.HorizontalAutoLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.HorizontalAutoLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"relative",margin:"0px auto"}),o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-top":(0===i?o.vgap:0)+o.tgap+(item.tgap||0)+(item.vgap||0)+"px"}),o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-left":o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-right":o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)+"px"}),w},resize:function(){},populate:function(items){BI.HorizontalAutoLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.horizontal_auto",BI.HorizontalAutoLayout),BI.FloatHorizontalLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FloatHorizontalLayout.superclass.props.apply(this,arguments),{baseCls:"bi-float-horizontal-adapt-layout",items:[],hgap:0,vgap:0,tgap:0,bgap:0,lgap:0,rgap:0})},render:function(){BI.FloatHorizontalLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},resize:function(){},mounted:function(){var self=this,width=this.left.element.width(),height=this.left.element.height();this.left.element.width(width).height(height).css("float","none"),BI.remove(this._children,function(i,wi){wi===self.container&&delete self._children[i]}),BI.createWidget({type:"bi.horizontal_auto",element:this,items:[this.left]})},_addElement:function(i,item){var self=this,o=this.options;return this.left=BI.createWidget({type:"bi.vertical",items:[item],hgap:o.hgap,vgap:o.vgap,tgap:o.tgap,bgap:o.bgap,lgap:o.lgap,rgap:o.rgap}),this.container=BI.createWidget({type:"bi.left",element:this,items:[this.left]}),this.left},populate:function(items){BI.HorizontalAutoLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.horizontal_float",BI.FloatHorizontalLayout),BI.InlineCenterAdaptLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.InlineLayout.superclass.props.apply(this,arguments),{baseCls:"bi-inline-center-adapt-layout",hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){BI.InlineCenterAdaptLayout.superclass.render.apply(this,arguments),this.element.css({whiteSpace:"nowrap",textAlign:"center"}),this.populate(this.options.items)},_addElement:function(i,item,length){var o=this.options,w=BI.InlineVerticalAdaptLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"relative","vertical-align":"middle"}),w.element.addClass("inline-center-adapt-item"),o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-top":o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)+"px"}),o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-left":(0===i?o.hgap:0)+o.lgap+(item.lgap||0)+(item.hgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-right":o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)+"px"}),w},resize:function(){this.stroke(this.options.items)},addItem:function(item){throw new Error("不能添加元素")},stroke:function(items){var self=this;BI.each(items,function(i,item){item&&self._addElement(i,item,items.length)})},populate:function(items){BI.InlineCenterAdaptLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.inline_center_adapt",BI.InlineCenterAdaptLayout),BI.InlineVerticalAdaptLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.InlineLayout.superclass.props.apply(this,arguments),{baseCls:"bi-inline-vertical-adapt-layout",hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0,textAlign:"left"})},render:function(){BI.InlineVerticalAdaptLayout.superclass.render.apply(this,arguments);var o=this.options;this.element.css({whiteSpace:"nowrap",textAlign:o.textAlign}),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.InlineVerticalAdaptLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"relative","vertical-align":"middle"}),w.element.addClass("inline-vertical-adapt-item"),o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-top":o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)+"px"}),o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-left":(0===i?o.hgap:0)+o.lgap+(item.lgap||0)+(item.hgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-right":o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)+"px"}),w},resize:function(){this.stroke(this.options.items)},populate:function(items){BI.InlineVerticalAdaptLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.inline_vertical_adapt",BI.InlineVerticalAdaptLayout),BI.FlexCenterLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FlexCenterLayout.superclass.props.apply(this,arguments),{baseCls:"bi-flex-center-adapt-layout",hgap:0,vgap:0})},render:function(){BI.FlexCenterLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.FlexCenterLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"relative","flex-shrink":"0","margin-left":(0===i?o.hgap:0)+"px","margin-right":o.hgap+"px","margin-top":o.vgap+"px","margin-bottom":o.vgap+"px"}),w},resize:function(){},populate:function(items){BI.FlexCenterLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.flex_center_adapt",BI.FlexCenterLayout),BI.FlexHorizontalCenter=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FlexHorizontalCenter.superclass.props.apply(this,arguments),{baseCls:"bi-flex-horizontal-center-adapt-layout",verticalAlign:BI.VerticalAlign.Top,rowSize:[],scrolly:!1,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){var self=this,o=this.options;return{type:"bi.flex_vertical",ref:function(_ref){self.wrapper=_ref},horizontalAlign:BI.HorizontalAlign.Center,verticalAlign:o.verticalAlign,rowSize:o.rowSize,scrollx:o.scrollx,scrolly:o.scrolly,scrollable:o.scrollable,hgap:o.hgap,vgap:o.vgap,tgap:o.tgap,bgap:o.bgap,items:o.items}},resize:function(){},update:function(opt){return this.wrapper.update(opt)},populate:function(items){this.wrapper.populate(items)}}),BI.shortcut("bi.flex_horizontal_adapt",BI.FlexHorizontalCenter),BI.shortcut("bi.flex_horizontal_center_adapt",BI.FlexHorizontalCenter),BI.FlexHorizontalLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FlexHorizontalLayout.superclass.props.apply(this,arguments),{baseCls:"bi-flex-horizontal-layout",verticalAlign:BI.VerticalAlign.Top,horizontalAlign:BI.HorizontalAlign.Left,columnSize:[],scrollx:!0,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){BI.FlexHorizontalLayout.superclass.render.apply(this,arguments);var o=this.options;this.element.addClass("v-"+o.verticalAlign).addClass("h-"+o.horizontalAlign),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.FlexHorizontalLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"relative","flex-shrink":"0"}),o.columnSize[i]>0&&w.element.width(o.columnSize[i]),"fill"===o.columnSize[i]&&w.element.css("flex","1"),o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-top":o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)+"px"}),o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-left":(0===i?o.hgap:0)+o.lgap+(item.lgap||0)+(item.hgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)!==0&&w.element.css({ +"margin-right":o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)+"px"}),w},resize:function(){},populate:function(items){BI.FlexHorizontalLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.flex_horizontal",BI.FlexHorizontalLayout),BI.FlexVerticalCenter=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FlexVerticalCenter.superclass.props.apply(this,arguments),{baseCls:"bi-flex-vertical-center-adapt-layout",horizontalAlign:BI.HorizontalAlign.Left,columnSize:[],scrollx:!1,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){var self=this,o=this.options;return{type:"bi.flex_horizontal",ref:function(_ref){self.wrapper=_ref},verticalAlign:BI.VerticalAlign.Middle,horizontalAlign:o.horizontalAlign,columnSize:o.columnSize,scrollx:o.scrollx,scrolly:o.scrolly,scrollable:o.scrollable,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,hgap:o.hgap,items:o.items}},resize:function(){},update:function(opt){return this.wrapper.update(opt)},populate:function(items){this.wrapper.populate(items)}}),BI.shortcut("bi.flex_vertical_adapt",BI.FlexVerticalCenter),BI.shortcut("bi.flex_vertical_center_adapt",BI.FlexVerticalCenter),BI.FlexVerticalLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FlexVerticalLayout.superclass.props.apply(this,arguments),{baseCls:"bi-flex-vertical-layout",horizontalAlign:BI.HorizontalAlign.Left,verticalAlign:BI.VerticalAlign.Top,rowSize:[],scrolly:!0,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){BI.FlexVerticalLayout.superclass.render.apply(this,arguments);var o=this.options;this.element.addClass("h-"+o.horizontalAlign).addClass("v-"+o.verticalAlign),this.populate(this.options.items)},_addElement:function(i,item){var w=BI.FlexVerticalLayout.superclass._addElement.apply(this,arguments),o=this.options;return w.element.css({position:"relative","flex-shrink":"0"}),o.rowSize[i]>0&&w.element.height(o.rowSize[i]),"fill"===o.rowSize[i]&&w.element.css("flex","1"),o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-top":(0===i?o.vgap:0)+o.tgap+(item.tgap||0)+(item.vgap||0)+"px"}),o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-left":o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-right":o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)+"px"}),w},resize:function(){},populate:function(items){BI.FlexVerticalLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.flex_vertical",BI.FlexVerticalLayout),BI.FlexWrapperCenterLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FlexWrapperCenterLayout.superclass.props.apply(this,arguments),{baseCls:"bi-flex-scrollable-center-adapt-layout clearfix",scrollable:!0})},render:function(){BI.FlexWrapperCenterLayout.superclass.render.apply(this,arguments),this.$wrapper=BI.Widget._renderEngine.createElement("
    ").addClass("flex-scrollable-center-adapt-layout-wrapper"),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.FlexWrapperCenterLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"relative","margin-left":(0===i?o.hgap:0)+"px","margin-right":o.hgap+"px","margin-top":o.vgap+"px","margin-bottom":o.vgap+"px"}),w},appendFragment:function(frag){this.$wrapper.append(frag),this.element.append(this.$wrapper)},_getWrapper:function(){return this.$wrapper},resize:function(){},populate:function(items){BI.FlexWrapperCenterLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.flex_scrollable_center_adapt",BI.FlexWrapperCenterLayout),BI.FlexWrapperHorizontalCenter=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FlexWrapperHorizontalCenter.superclass.props.apply(this,arguments),{baseCls:"bi-flex-scrollable-vertical-center-adapt-layout clearfix",verticalAlign:BI.VerticalAlign.Top,rowSize:[],scrollable:!0,scrolly:!1,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){var self=this,o=this.options;return{type:"bi.flex_scrollable_vertical",ref:function(_ref){self.wrapper=_ref},horizontalAlign:BI.HorizontalAlign.Center,verticalAlign:o.verticalAlign,rowSize:o.rowSize,scrollx:o.scrollx,scrolly:o.scrolly,scrollable:o.scrollable,hgap:o.hgap,vgap:o.vgap,tgap:o.tgap,bgap:o.bgap,items:o.items}},update:function(opt){return this.wrapper.update(opt)},populate:function(items){this.wrapper.populate(items)}}),BI.shortcut("bi.flex_scrollable_horizontal_adapt",BI.FlexWrapperHorizontalCenter),BI.shortcut("bi.flex_scrollable_horizontal_center_adapt",BI.FlexWrapperHorizontalCenter),BI.FlexWrapperHorizontalLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FlexWrapperHorizontalLayout.superclass.props.apply(this,arguments),{baseCls:"bi-flex-scrollable-horizontal-layout clearfix",verticalAlign:BI.VerticalAlign.Top,horizontalAlign:BI.HorizontalAlign.Left,columnSize:[],scrollable:null,scrollx:!0,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){BI.FlexWrapperHorizontalLayout.superclass.render.apply(this,arguments);var o=this.options;this.$wrapper=BI.Widget._renderEngine.createElement("
    ").addClass("flex-scrollable-horizontal-layout-wrapper v-"+o.verticalAlign).addClass("h-"+o.horizontalAlign),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.FlexWrapperHorizontalLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"relative","flex-shrink":"0"}),o.columnSize[i]>0&&w.element.width(o.columnSize[i]),"fill"===o.columnSize[i]&&w.element.css("flex","1"),o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-top":o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)+"px"}),o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-left":(0===i?o.hgap:0)+o.lgap+(item.lgap||0)+(item.hgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-right":o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)+"px"}),w},appendFragment:function(frag){this.$wrapper.append(frag),this.element.append(this.$wrapper)},_getWrapper:function(){return this.$wrapper},resize:function(){},populate:function(items){BI.FlexWrapperHorizontalLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.flex_scrollable_horizontal",BI.FlexWrapperHorizontalLayout),BI.FlexWrapperVerticalCenter=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FlexWrapperVerticalCenter.superclass.props.apply(this,arguments),{baseCls:"bi-flex-scrollable-vertical-center-adapt-layout clearfix",horizontalAlign:BI.HorizontalAlign.Left,columnSize:[],scrollx:!1,scrollable:!0,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){var self=this,o=this.options;return{type:"bi.flex_scrollable_horizontal",ref:function(_ref){self.wrapper=_ref},verticalAlign:BI.VerticalAlign.Middle,horizontalAlign:o.horizontalAlign,columnSize:o.columnSize,scrollx:o.scrollx,scrolly:o.scrolly,scrollable:o.scrollable,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,items:o.items}},update:function(opt){return this.wrapper.update(opt)},populate:function(items){this.wrapper.populate(items)}}),BI.shortcut("bi.flex_scrollable_vertical_adapt",BI.FlexWrapperVerticalCenter),BI.shortcut("bi.flex_scrollable_vertical_center_adapt",BI.FlexWrapperVerticalCenter),BI.FlexWrapperVerticalLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FlexWrapperVerticalLayout.superclass.props.apply(this,arguments),{baseCls:"bi-flex-scrollable-vertical-layout clearfix",horizontalAlign:BI.HorizontalAlign.Left,verticalAlign:BI.VerticalAlign.Top,rowSize:[],scrollable:null,scrolly:!0,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){BI.FlexWrapperVerticalLayout.superclass.render.apply(this,arguments);var o=this.options;this.$wrapper=BI.Widget._renderEngine.createElement("
    ").addClass("flex-scrollable-vertical-layout-wrapper h-"+o.horizontalAlign).addClass("v-"+o.verticalAlign),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.FlexWrapperVerticalLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"relative","flex-shrink":"0"}),o.rowSize[i]>0&&w.element.height(o.rowSize[i]),"fill"===o.rowSize[i]&&w.element.css("flex","1"),o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-top":(0===i?o.vgap:0)+o.tgap+(item.tgap||0)+(item.vgap||0)+"px"}),o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-left":o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-right":o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)+"px"}),w},appendFragment:function(frag){this.$wrapper.append(frag),this.element.append(this.$wrapper)},_getWrapper:function(){return this.$wrapper},resize:function(){},populate:function(items){BI.FlexWrapperVerticalLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.flex_scrollable_vertical",BI.FlexWrapperVerticalLayout),BI.AbsoluteLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.AbsoluteLayout.superclass.props.apply(this,arguments),{baseCls:"bi-absolute-layout",hgap:null,vgap:null,lgap:null,rgap:null,tgap:null,bgap:null})},render:function(){BI.AbsoluteLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.AbsoluteLayout.superclass._addElement.apply(this,arguments),left=0,right=0,top=0,bottom=0;return BI.isNotNull(item.left)&&(w.element.css({left:item.left}),left+=item.left),BI.isNotNull(item.right)&&(w.element.css({right:item.right}),right+=item.right),BI.isNotNull(item.top)&&(w.element.css({top:item.top}),top+=item.top),BI.isNotNull(item.bottom)&&(w.element.css({bottom:item.bottom}),bottom+=item.bottom),BI.isNotNull(o.hgap)&&(left+=o.hgap,w.element.css({left:left}),right+=o.hgap,w.element.css({right:right})),BI.isNotNull(o.vgap)&&(top+=o.vgap,w.element.css({top:top}),bottom+=o.vgap,w.element.css({bottom:bottom})),BI.isNotNull(o.lgap)&&(left+=o.lgap,w.element.css({left:left})),BI.isNotNull(o.rgap)&&(right+=o.rgap,w.element.css({right:right})),BI.isNotNull(o.tgap)&&(top+=o.tgap,w.element.css({top:top})),BI.isNotNull(o.bgap)&&(bottom+=o.bgap,w.element.css({bottom:bottom})),BI.isNotNull(item.width)&&w.element.css({width:item.width}),BI.isNotNull(item.height)&&w.element.css({height:item.height}),w.element.css({position:"absolute"}),w},resize:function(){this.stroke(this.options.items)},stroke:function(items){this.options.items=items||[];var self=this;BI.each(items,function(i,item){if(item){if(!BI.isWidget(item)&&!item.el)throw new Error("el must be exist");self._addElement(i,item)}})},populate:function(items){BI.AbsoluteLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.absolute",BI.AbsoluteLayout),BI.AdaptiveLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.AdaptiveLayout.superclass.props.apply(this,arguments),{baseCls:"bi-adaptive-layout",hgap:null,vgap:null,lgap:null,rgap:null,tgap:null,bgap:null})},render:function(){BI.AdaptiveLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.AdaptiveLayout.superclass._addElement.apply(this,arguments);w.element.css({position:"relative"});var left=0,right=0,top=0,bottom=0;return BI.isNotNull(item.left)&&w.element.css({left:item.left}),BI.isNotNull(item.right)&&w.element.css({right:item.right}),BI.isNotNull(item.top)&&w.element.css({top:item.top}),BI.isNotNull(item.bottom)&&w.element.css({bottom:item.bottom}),BI.isNotNull(o.hgap)&&(left+=o.hgap,w.element.css({"margin-left":left}),right+=o.hgap,w.element.css({"margin-right":right})),BI.isNotNull(o.vgap)&&(top+=o.vgap,w.element.css({"margin-top":top}),bottom+=o.vgap,w.element.css({"margin-bottom":bottom})),BI.isNotNull(o.lgap)&&(left+=o.lgap,w.element.css({"margin-left":left})),BI.isNotNull(o.rgap)&&(right+=o.rgap,w.element.css({"margin-right":right})),BI.isNotNull(o.tgap)&&(top+=o.tgap,w.element.css({"margin-top":top})),BI.isNotNull(o.bgap)&&(bottom+=o.bgap,w.element.css({"margin-bottom":bottom})),BI.isNotNull(item.width)&&w.element.css({width:item.width}),BI.isNotNull(item.height)&&w.element.css({height:item.height}),w},resize:function(){this.stroke(this.options.items)},populate:function(items){BI.AbsoluteLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.adaptive",BI.AdaptiveLayout),BI.BorderLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.BorderLayout.superclass.props.apply(this,arguments),{baseCls:"bi-border-layout",items:{}})},render:function(){BI.BorderLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},resize:function(){this.stroke(this.options.items)},addItem:function(item){throw new Error("cannot be added")},stroke:function(regions){var item,top=0,bottom=0,left=0,right=0;if("north"in regions&&(item=regions.north,null!=item)){if(item.el){if(!this.hasWidget(this.getName()+"north")){var w=BI.createWidget(item);this.addWidget(this.getName()+"north",w)}this.getWidgetByName(this.getName()+"north").element.height(item.height).css({position:"absolute",top:item.top||0,left:item.left||0,right:item.right||0,bottom:"initial"})}top=(item.height||0)+(item.top||0)+(item.bottom||0)}if("south"in regions&&(item=regions.south,null!=item)){if(item.el){if(!this.hasWidget(this.getName()+"south")){var w=BI.createWidget(item);this.addWidget(this.getName()+"south",w)}this.getWidgetByName(this.getName()+"south").element.height(item.height).css({position:"absolute",bottom:item.bottom||0,left:item.left||0,right:item.right||0,top:"initial"})}bottom=(item.height||0)+(item.top||0)+(item.bottom||0)}if("west"in regions&&(item=regions.west,null!=item)){if(item.el){if(!this.hasWidget(this.getName()+"west")){var w=BI.createWidget(item);this.addWidget(this.getName()+"west",w)}this.getWidgetByName(this.getName()+"west").element.width(item.width).css({position:"absolute",left:item.left||0,top:top,bottom:bottom,right:"initial"})}left=(item.width||0)+(item.left||0)+(item.right||0)}if("east"in regions&&(item=regions.east,null!=item)){if(item.el){if(!this.hasWidget(this.getName()+"east")){var w=BI.createWidget(item);this.addWidget(this.getName()+"east",w)}this.getWidgetByName(this.getName()+"east").element.width(item.width).css({position:"absolute",right:item.right||0,top:top,bottom:bottom,left:"initial"})}right=(item.width||0)+(item.left||0)+(item.right||0)}if("center"in regions&&(item=regions.center,null!=item)){if(!this.hasWidget(this.getName()+"center")){var w=BI.createWidget(item);this.addWidget(this.getName()+"center",w)}this.getWidgetByName(this.getName()+"center").element.css({position:"absolute",top:top,bottom:bottom,left:left,right:right})}},update:function(opt){},populate:function(items){BI.BorderLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.border",BI.BorderLayout),BI.CardLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.CardLayout.superclass.props.apply(this,arguments),{baseCls:"bi-card-layout",items:[]})},render:function(){BI.CardLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},resize:function(){},stroke:function(items){var self=this,o=this.options;this.showIndex=void 0,BI.each(items,function(i,item){if(item){if(self.hasWidget(item.cardName))var w=self.getWidgetByName(item.cardName);else{var w=BI.createWidget(item);w.on(BI.Events.DESTROY,function(){var index=BI.findIndex(o.items,function(i,tItem){return tItem.cardName==item.cardName});index>-1&&o.items.splice(index,1)}),self.addWidget(item.cardName,w)}w.element.css({position:"absolute",top:"0",right:"0",bottom:"0",left:"0"}),w.setVisible(!1)}})},update:function(){},empty:function(){BI.CardLayout.superclass.empty.apply(this,arguments),this.options.items=[]},populate:function(items){BI.CardLayout.superclass.populate.apply(this,arguments),this._mount(),this.options.defaultShowName&&this.showCardByName(this.options.defaultShowName)},isCardExisted:function(cardName){return BI.some(this.options.items,function(i,item){return item.cardName==cardName&&item.el})},getCardByName:function(cardName){if(!this.isCardExisted(cardName))throw new Error("cardName is not exist");return this._children[cardName]},_deleteCardByName:function(cardName){delete this._children[cardName];var index=BI.findIndex(this.options.items,function(i,item){return item.cardName==cardName});index>-1&&this.options.items.splice(index,1)},deleteCardByName:function(cardName){if(!this.isCardExisted(cardName))throw new Error("cardName is not exist");var child=this._children[cardName];this._deleteCardByName(cardName),child&&child._destroy()},addCardByName:function(cardName,cardItem){if(this.isCardExisted(cardName))throw new Error("cardName is already exist");var widget=BI.createWidget(cardItem,this);return widget.element.css({position:"relative",top:"0",left:"0",width:"100%",height:"100%"}).appendTo(this.element),widget.invisible(),this.addWidget(cardName,widget),this.options.items.push({el:cardItem,cardName:cardName}),widget},showCardByName:function(name,action,callback){var self=this,exist=this.isCardExisted(name);null!=this.showIndex&&(this.lastShowIndex=this.showIndex),this.showIndex=name;var flag=!1;BI.each(this.options.items,function(i,item){var el=self._children[item.cardName];el&&(name!=item.cardName?!flag&&!exist&&BI.Action&&action instanceof BI.Action?(action.actionBack(el),flag=!0):el.invisible():BI.Action&&action instanceof BI.Action?action.actionPerformed(void 0,el,callback):(el.visible(),callback&&callback()))})},showLastCard:function(){var self=this;this.showIndex=this.lastShowIndex,BI.each(this.options.items,function(i,item){self._children[item.cardName].setVisible(self.showIndex==i)})},setDefaultShowName:function(name){return this.options.defaultShowName=name,this},getDefaultShowName:function(){return this.options.defaultShowName},getAllCardNames:function(){return BI.map(this.options.items,function(i,item){return item.cardName})},getShowingCard:function(){if(BI.isKey(this.showIndex))return this.getWidgetByName(this.showIndex)},deleteAllCard:function(){var self=this;BI.each(this.getAllCardNames(),function(i,name){self.deleteCardByName(name)})},hideAllCard:function(){var self=this;BI.each(this.options.items,function(i,item){self._children[item.cardName].invisible()})},isAllCardHide:function(){var self=this,flag=!0;return BI.some(this.options.items,function(i,item){if(self._children[item.cardName].isVisible())return flag=!1,!1}),flag},removeWidget:function(nameOrWidget){var removeName;BI.isWidget(nameOrWidget)?BI.each(this._children,function(name,child){child===nameOrWidget&&(removeName=name)}):removeName=nameOrWidget,removeName&&this._deleteCardByName(removeName)}}),BI.shortcut("bi.card",BI.CardLayout),BI.DefaultLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.DefaultLayout.superclass.props.apply(this,arguments),{hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0,items:[]})},render:function(){BI.DefaultLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.DefaultLayout.superclass._addElement.apply(this,arguments);return o.vgap+o.tgap+(item.tgap||0)!==0&&w.element.css({"margin-top":o.vgap+o.tgap+(item.tgap||0)+"px"}),o.hgap+o.lgap+(item.lgap||0)!==0&&w.element.css({"margin-left":o.hgap+o.lgap+(item.lgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)!==0&&w.element.css({"margin-right":o.hgap+o.rgap+(item.rgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+"px"}),w},resize:function(){},populate:function(items){BI.DefaultLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.default",BI.DefaultLayout),BI.DivisionLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.DivisionLayout.superclass.props.apply(this,arguments),{baseCls:"bi-division-layout",columns:null,rows:null,items:[]})},render:function(){BI.DivisionLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},resize:function(){this.stroke(this.opitons.items)},addItem:function(item){throw new Error("cannot be added")},stroke:function(items){function firstElement(item,row,col){0===row&&item.addClass("first-row"),0===col&&item.addClass("first-col"),item.addClass(BI.isOdd(row+1)?"odd-row":"even-row"),item.addClass(BI.isOdd(col+1)?"odd-col":"even-col"),item.addClass("center-element")}function firstObject(item,row,col){var cls="";0===row&&(cls+=" first-row"),0===col&&(cls+=" first-col"),cls+=BI.isOdd(row+1)?" odd-row":" even-row",cls+=BI.isOdd(col+1)?" odd-col":" even-col",item.cls=(item.cls||"")+cls+" center-element"}function first(item,row,col){item instanceof BI.Widget?firstElement(item.element,row,col):item.el instanceof BI.Widget?firstElement(item.el.element,row,col):item.el?firstObject(item.el,row,col):firstObject(item,row,col)}var o=this.options,rows=o.rows||o.items.length,columns=o.columns||0|(o.items[0]&&o.items[0].length),map=BI.makeArray(rows),widths={},heights={};BI.each(map,function(i){map[i]=BI.makeArray(columns)}),BI.each(items,function(i,item){return BI.isArray(item)?void BI.each(item,function(j,el){widths[i]=(widths[i]||0)+item.width,heights[j]=(heights[j]||0)+item.height,map[i][j]=el}):(widths[item.row]=(widths[item.row]||0)+item.width,heights[item.column]=(heights[item.column]||0)+item.height,void(map[item.row][item.column]=item))});for(var i=0;i0){var lastW=this.getWidgetByName(this.getName()+i+"_"+(j-1));lastW.element.css({right:100-left+"%"})}j==o.columns-1&&w.element.css({right:"0%"}),first(w,i,j),totalW+=map[i][j].width}for(var j=0;j0){var lastW=this.getWidgetByName(this.getName()+(i-1)+"_"+j);lastW.element.css({bottom:100-top+"%"})}i==o.rows-1&&w.element.css({bottom:"0%"}),totalH+=map[i][j].height}},update:function(){},populate:function(items){BI.DivisionLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.division",BI.DivisionLayout),BI.FloatLeftLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FloatLeftLayout.superclass.props.apply(this,arguments),{baseCls:"bi-float-left-layout clearfix",hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){BI.FloatLeftLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.FloatLeftLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"relative","float":"left"}),BI.isNotNull(item.left)&&w.element.css({left:item.left}),BI.isNotNull(item.right)&&w.element.css({right:item.right}),BI.isNotNull(item.top)&&w.element.css({top:item.top}),BI.isNotNull(item.bottom)&&w.element.css({bottom:item.bottom}),o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-top":o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)+"px"}),o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-left":(0===i?o.hgap:0)+o.lgap+(item.lgap||0)+(item.hgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-right":o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)+"px"}),w},resize:function(){this.stroke(this.options.items)},populate:function(items){BI.FloatLeftLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.left",BI.FloatLeftLayout),BI.FloatRightLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.FloatRightLayout.superclass.props.apply(this,arguments),{baseCls:"bi-float-right-layout clearfix",hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){BI.FloatRightLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.FloatRightLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"relative","float":"right"}),BI.isNotNull(item.left)&&w.element.css({left:item.left}),BI.isNotNull(item.right)&&w.element.css({right:item.right}),BI.isNotNull(item.top)&&w.element.css({top:item.top}),BI.isNotNull(item.bottom)&&w.element.css({bottom:item.bottom}),o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-top":o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)+"px"}),o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-left":o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-right":(0===i?o.hgap:0)+o.rgap+(item.rgap||0)+(item.hgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)+"px"}),w},resize:function(){this.stroke(this.options.items)},populate:function(items){BI.FloatRightLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.right",BI.FloatRightLayout),BI.GridLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.GridLayout.superclass.props.apply(this,arguments),{baseCls:"bi-grid-layout",columns:null,rows:null,items:[]})},render:function(){BI.GridLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},resize:function(){},addItem:function(){throw new Error("cannot be added")},stroke:function(items){function firstElement(item,row,col){0===row&&item.addClass("first-row"),0===col&&item.addClass("first-col"),item.addClass(BI.isOdd(row+1)?"odd-row":"even-row"),item.addClass(BI.isOdd(col+1)?"odd-col":"even-col"),item.addClass("center-element")}function firstObject(item,row,col){var cls="";0===row&&(cls+=" first-row"),0===col&&(cls+=" first-col"),cls+=BI.isOdd(row+1)?" odd-row":" even-row",cls+=BI.isOdd(col+1)?" odd-col":" even-col",item.cls=(item.cls||"")+cls+" center-element"}function first(item,row,col){item instanceof BI.Widget?firstElement(item.element,row,col):item.el instanceof BI.Widget?firstElement(item.el.element,row,col):item.el?firstObject(item.el,row,col):firstObject(item,row,col)}for(var self=this,o=this.options,rows=o.rows||o.items.length,columns=o.columns||0|(o.items[0]&&o.items[0].length),width=100/columns,height=100/rows,els=[],i=0;i").attr({cellspacing:0,cellpadding:0}).css({position:"relative","white-space":"nowrap",height:o.verticalAlign===BI.VerticalAlign.Middle?"100%":"auto",width:o.horizontalAlign===BI.HorizontalAlign.Center||o.horizontalAlign===BI.HorizontalAlign.Stretch?"100%":"auto","border-spacing":"0px",border:"none","border-collapse":"separate"}),this.$tr=BI.Widget._renderEngine.createElement("
    "),this.$tr.appendTo(this.$table),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,td,width=o.columnSize[i]<=1?100*o.columnSize[i]+"%":o.columnSize[i];if(this.hasWidget(this._getChildName(i)))td=this.getWidgetByName(this._getChildName(i)),td.element.attr("width",width);else{var w=BI.createWidget(item);w.element.css({position:"relative",margin:"0px auto"}),td=BI.createWidget({type:"bi.default",tagName:"td",attributes:{width:width},items:[w]}),this.addWidget(this._getChildName(i),td)}return td.element.css({"max-width":o.columnSize[i]<=1?width:width+"px"}),0===i&&td.element.addClass("first-element"),td.element.css({position:"relative","vertical-align":o.verticalAlign,margin:"0",padding:"0",border:"none"}),o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-top":o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)+"px"}),o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-left":(0===i?o.hgap:0)+o.lgap+(item.lgap||0)+(item.hgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-right":o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)+"px"}),td},appendFragment:function(frag){this.$tr.append(frag),this.element.append(this.$table)},resize:function(){},_getWrapper:function(){return this.$tr},populate:function(items){BI.HorizontalLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.horizontal",BI.HorizontalLayout),BI.HorizontalCellLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.HorizontalCellLayout.superclass.props.apply(this,arguments),{baseCls:"bi-horizontal-cell-layout",scrollable:!0,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){BI.HorizontalCellLayout.superclass.render.apply(this,arguments),this.element.css({display:"table","vertical-align":"top"}),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.HorizontalCellLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"relative",display:"table-cell","vertical-align":"middle"}),o.hgap+o.lgap>0&&w.element.css({"margin-left":o.hgap+o.lgap+"px"}),o.hgap+o.rgap>0&&w.element.css({"margin-right":o.hgap+o.rgap+"px"}),o.vgap+o.tgap>0&&w.element.css({"margin-top":o.vgap+o.tgap+"px"}),o.vgap+o.bgap>0&&w.element.css({"margin-bottom":o.vgap+o.bgap+"px"}),w},resize:function(){},populate:function(items){BI.HorizontalCellLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.horizontal_cell",BI.HorizontalCellLayout),BI.InlineLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.InlineLayout.superclass.props.apply(this,arguments),{baseCls:"bi-inline-layout",hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0})},render:function(){BI.InlineLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.InlineLayout.superclass._addElement.apply(this,arguments);return w.element.css({position:"relative",display:"inline-block","*display":"inline","*zoom":1}),o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-top":o.vgap+o.tgap+(item.tgap||0)+(item.vgap||0)+"px" +}),o.hgap+o.lgap+(item.lgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-left":(0===i?o.hgap:0)+o.lgap+(item.lgap||0)+(item.hgap||0)+"px"}),o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)!==0&&w.element.css({"margin-right":o.hgap+o.rgap+(item.rgap||0)+(item.hgap||0)+"px"}),o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)!==0&&w.element.css({"margin-bottom":o.vgap+o.bgap+(item.bgap||0)+(item.vgap||0)+"px"}),w},resize:function(){this.stroke(this.options.items)},populate:function(items){BI.InlineLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.inline",BI.InlineLayout),BI.LatticeLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.LatticeLayout.superclass.props.apply(this,arguments),{baseCls:"bi-lattice-layout clearfix"})},render:function(){BI.LatticeLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},_addElement:function(i,item){var o=this.options,w=BI.LatticeLayout.superclass._addElement.apply(this,arguments);if(o.columnSize&&o.columnSize[i])var width=o.columnSize[i]/BI.sum(o.columnSize)*100+"%";else var width=1/this.options.items.length*100+"%";return w.element.css({position:"relative","float":"left",width:width}),w},addItem:function(item){var w=BI.LatticeLayout.superclass.addItem.apply(this,arguments);return this.resize(),w},addItemAt:function(item){var w=BI.LatticeLayout.superclass.addItemAt.apply(this,arguments);return this.resize(),w},resize:function(){this.stroke(this.options.items)},populate:function(items){BI.LatticeLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.lattice",BI.LatticeLayout),BI.TableLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.TableLayout.superclass.props.apply(this,arguments),{baseCls:"bi-table-layout",scrolly:!0,columnSize:[200,200,"fill"],rowSize:30,hgap:0,vgap:0,items:[[{el:{text:"label1"}},{el:{text:"label2"}},{el:{text:"label3"}}]]})},render:function(){BI.TableLayout.superclass.render.apply(this,arguments),this.rows=0,this.populate(this.options.items)},_addElement:function(idx,arr){function firstElement(item,row,col){0===row&&item.addClass("first-row"),0===col&&item.addClass("first-col"),item.addClass(BI.isOdd(row+1)?"odd-row":"even-row"),item.addClass(BI.isOdd(col+1)?"odd-col":"even-col"),item.addClass("center-element")}function firstObject(item,row,col){var cls="";0===row&&(cls+=" first-row"),0===col&&(cls+=" first-col"),cls+=BI.isOdd(row+1)?" odd-row":" even-row",cls+=BI.isOdd(col+1)?" odd-col":" even-col",item.cls=(item.cls||"")+cls+" center-element"}function first(item,row,col){item instanceof BI.Widget?firstElement(item.element,row,col):item.el instanceof BI.Widget?firstElement(item.el.element,row,col):item.el?firstObject(item.el,row,col):firstObject(item,row,col)}var o=this.options,abs=[],left=0,right=0,i,j;for(i=0;ii;j--){if(!BI.isNumber(o.columnSize[j]))throw new Error("item with fill can only be one");first(arr[j],this.rows,j),abs.push(BI.extend({top:0,bottom:0,right:o.columnSize[j]<=1?100*right+"%":right,width:o.columnSize[j]<=1?100*o.columnSize[j]+"%":o.columnSize[j]},arr[j])),right+=o.columnSize[j]+(o.columnSize[j]<1?0:o.hgap)}i>=0&&i0&&this.getWidgetByName(this.getName()+(this.rows-1)).element.css({"margin-bottom":o.vgap}),w.element.css({position:"relative"}),this.addWidget(this.getName()+this.rows++,w),w},resize:function(){},addItem:function(arr){if(!BI.isArray(arr))throw new Error("item must be array");return BI.TableLayout.superclass.addItem.apply(this,arguments)},update:function(){},populate:function(items){BI.TableLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.table",BI.TableLayout),BI.HTapeLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.HTapeLayout.superclass.props.apply(this,arguments),{baseCls:"bi-h-tape-layout",hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0,items:[{width:100,el:{type:"bi.button",text:"button1"}},{width:"fill",el:{type:"bi.button",text:"button2"}},{width:200,el:{type:"bi.button",text:"button3"}}]})},render:function(){BI.HTapeLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},resize:function(){this.stroke(this.options.items)},addItem:function(item){throw new Error("cannot be added")},stroke:function(items){var self=this,o=this.options;items=BI.compact(items),BI.each(items,function(i,item){if(self.hasWidget(self.getName()+i+""))w=self.getWidgetByName(self.getName()+i+"");else{var w=BI.createWidget(item);self.addWidget(self.getName()+i+"",w)}w.element.css({position:"absolute",top:(item.vgap||0)+(item.tgap||0)+o.vgap+o.tgap+"px",bottom:(item.bgap||0)+(item.vgap||0)+o.vgap+o.bgap+"px"})});var left={},right={};left[0]=0,right[items.length-1]=0,BI.any(items,function(i,item){var w=self.getWidgetByName(self.getName()+i+"");if(BI.isNull(left[i])&&(left[i]=left[i-1]+items[i-1].width+(items[i-1].lgap||0)+2*(items[i-1].hgap||0)+o.hgap+o.lgap+o.rgap),item.width<1&&item.width>=0?w.element.css({left:100*left[i]+"%",width:100*item.width+"%"}):w.element.css({left:left[i]+(item.lgap||0)+(item.hgap||0)+o.hgap+o.lgap+"px",width:BI.isNumber(item.width)?item.width:""}),!BI.isNumber(item.width))return!0}),BI.backAny(items,function(i,item){var w=self.getWidgetByName(self.getName()+i+"");if(BI.isNull(right[i])&&(right[i]=right[i+1]+items[i+1].width+(items[i+1].rgap||0)+2*(items[i+1].hgap||0)+o.hgap+o.lgap+o.rgap),item.width<1&&item.width>=0?w.element.css({right:100*right[i]+"%",width:100*item.width+"%"}):w.element.css({right:right[i]+(item.rgap||0)+(item.hgap||0)+o.hgap+o.rgap+"px",width:BI.isNumber(item.width)?item.width:""}),!BI.isNumber(item.width))return!0})},update:function(){var updated;return BI.each(this._children,function(i,child){updated=child.update()||updated}),updated},populate:function(items){BI.HTapeLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.htape",BI.HTapeLayout),BI.VTapeLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.VTapeLayout.superclass.props.apply(this,arguments),{baseCls:"bi-v-tape-layout",hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0,items:[{height:100,el:{type:"bi.button",text:"button1"}},{height:"fill",el:{type:"bi.button",text:"button2"}},{height:200,el:{type:"bi.button",text:"button3"}}]})},render:function(){BI.VTapeLayout.superclass.render.apply(this,arguments),this.populate(this.options.items)},resize:function(){this.stroke(this.options.items)},addItem:function(item){throw new Error("cannot be added")},stroke:function(items){var self=this,o=this.options;items=BI.compact(items),BI.each(items,function(i,item){if(self.hasWidget(self.getName()+i+""))w=self.getWidgetByName(self.getName()+i+"");else{var w=BI.createWidget(item);self.addWidget(self.getName()+i+"",w)}w.element.css({position:"absolute",left:(item.lgap||0)+(item.hgap||0)+o.hgap+o.lgap+"px",right:+(item.hgap||0)+(item.rgap||0)+o.hgap+o.rgap+"px"})});var top={},bottom={};top[0]=0,bottom[items.length-1]=0,BI.any(items,function(i,item){var w=self.getWidgetByName(self.getName()+i+"");if(BI.isNull(top[i])&&(top[i]=top[i-1]+items[i-1].height+(items[i-1].tgap||0)+2*(items[i-1].vgap||0)+o.vgap+o.tgap+o.bgap),item.height<1&&item.height>=0?w.element.css({top:100*top[i]+"%",height:100*item.height+"%"}):w.element.css({top:top[i]+(item.vgap||0)+(item.tgap||0)+o.vgap+o.tgap+"px",height:BI.isNumber(item.height)?item.height:""}),!BI.isNumber(item.height))return!0}),BI.backAny(items,function(i,item){var w=self.getWidgetByName(self.getName()+i+"");if(BI.isNull(bottom[i])&&(bottom[i]=bottom[i+1]+items[i+1].height+(items[i+1].bgap||0)+2*(items[i+1].vgap||0)+o.vgap+o.tgap+o.bgap),item.height<1&&item.height>=0?w.element.css({bottom:100*bottom[i]+"%",height:100*item.height+"%"}):w.element.css({bottom:bottom[i]+(item.vgap||0)+(item.bgap||0)+o.vgap+o.bgap+"px",height:BI.isNumber(item.height)?item.height:""}),!BI.isNumber(item.height))return!0})},update:function(){},populate:function(items){BI.VTapeLayout.superclass.populate.apply(this,arguments),this._mount()}}),BI.shortcut("bi.vtape",BI.VTapeLayout),BI.TdLayout=BI.inherit(BI.Layout,{props:function(){return BI.extend(BI.TdLayout.superclass.props.apply(this,arguments),{baseCls:"bi-td-layout",columnSize:[200,200,200],hgap:0,vgap:0,items:[[{el:{text:"label1"}},{el:{text:"label2"}},{el:{text:"label3"}}]]})},render:function(){BI.TdLayout.superclass.render.apply(this,arguments),this.$table=BI.Widget._renderEngine.createElement("
    ").attr({cellspacing:0,cellpadding:0}).css({position:"relative",width:"100%",height:"100%","border-spacing":"0px",border:"none","border-collapse":"separate"}),this.rows=0,this.populate(this.options.items)},_addElement:function(idx,arr){function firstElement(item,row,col){0===row&&item.addClass("first-row"),0===col&&item.addClass("first-col"),item.addClass(BI.isOdd(row+1)?"odd-row":"even-row"),item.addClass(BI.isOdd(col+1)?"odd-col":"even-col"),item.addClass("center-element")}function firstObject(item,row,col){var cls="";0===row&&(cls+=" first-row"),0===col&&(cls+=" first-col"),cls+=BI.isOdd(row+1)?" odd-row":" even-row",cls+=BI.isOdd(col+1)?" odd-col":" even-col",item.cls=(item.cls||"")+cls+" center-element"}function first(item,row,col){item instanceof BI.Widget?firstElement(item.element,row,col):item.el instanceof BI.Widget?firstElement(item.el.element,row,col):item.el?firstObject(item.el,row,col):firstObject(item,row,col)}for(var o=this.options,tr=BI.createWidget({type:"bi.default",tagName:"tr"}),i=0;i=0;i--){for(var j=0;j=0;j--){for(var i=0;i-1)return arr.splice(_index,1)}}function parsePath(path){if(!bailRE.test(path)){var segments=path.split(".");return function(obj){for(var i=0;iindex&&queue[i].watcher.id>watcher.id;)i--;queue.splice(i+1,0,{watcher:watcher,options:options})}else queue.push({watcher:watcher,options:options});waiting||(waiting=!0,nextTick(flushSchedulerQueue))}}function traverse(val){seenObjects.clear(),_traverse(val,seenObjects)}function _traverse(val,seen){var i=void 0,keys=void 0,isA=_.isArray(val);if(isA||_.isObject(val)){if(val.__ob__){var depId=val.__ob__.dep.id;if(seen.has(depId))return;seen.add(depId)}if(isA)for(i=val.length;i--;)_traverse(val[i],seen);else for(keys=_.keys(val),i=keys.length;i--;)_traverse(val[keys[i]],seen)}}function runBinaryFunction(binarys){for(var expr="",i=0,len=binarys.length;i 0 Then","\t\t["+name+'] = [$vbsetter](Me, [$accessors],"'+name+'")',"\tEnd If","\tOn Error Goto 0","\tEnd Property"));for(name in properties)uniq[name]||(uniq[name]=!0,buffer.push("\tPublic ["+name+"]"));buffer.push("\tPublic [hasOwnProperty]"),buffer.push("End Class");var body=buffer.join("\r\n"),className=VBClassPool[body];className||(className=makeHashCode("VBClass"),window.parseVB("Class "+className+body),window.parseVB(["Function "+className+"Factory(acc, vbm)","\tDim o","\tSet o = (New "+className+")(acc, vbm)","\tSet "+className+"Factory = o","End Function"].join("\r\n")),VBClassPool[body]=className);var ret=window[className+"Factory"](accessors,VBMediator);return ret}}var createViewModel$1=createViewModel,arrayKeys=_.keys(arrayMethods),observerState={shouldConvert:!0},Observer=function(){function Observer(value){if(_classCallCheck(this,Observer),this.value=value,this.dep=new Dep,this.vmCount=0,_.isArray(value)){var augment=hasProto?protoAugment:copyAugment;augment(value,arrayMethods,arrayKeys),this.model=this.observeArray(value)}else this.model=this.walk(value);isIE9Below?this.model.__ob__=this:def(this.model,"__ob__",this)}return Observer.prototype.walk=function walk(obj){return defineReactive(obj,this)},Observer.prototype.observeArray=function observeArray(items){for(var i=0,l=items.length;i=1?"floor":"ceil"](delta/lowestDelta),deltaX=Math[deltaX>=1?"floor":"ceil"](deltaX/lowestDelta),deltaY=Math[deltaY>=1?"floor":"ceil"](deltaY/lowestDelta),special.settings.normalizeOffset&&this.getBoundingClientRect){var boundingRect=this.getBoundingClientRect();offsetX=event.clientX-boundingRect.left,offsetY=event.clientY-boundingRect.top}return event.deltaX=deltaX,event.deltaY=deltaY,event.deltaFactor=lowestDelta,event.offsetX=offsetX,event.offsetY=offsetY,event.deltaMode=0,args.unshift(event,delta,deltaX,deltaY),nullLowestDeltaTimeout&&clearTimeout(nullLowestDeltaTimeout),nullLowestDeltaTimeout=setTimeout(nullLowestDelta,200),($.event.dispatch||$.event.handle).apply(this,args)}}function nullLowestDelta(){lowestDelta=null}function shouldAdjustOldDeltas(orgEvent,absDelta){return special.settings.adjustOldDeltas&&"mousewheel"===orgEvent.type&&absDelta%120===0}var toFix=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],toBind="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],slice=Array.prototype.slice,nullLowestDeltaTimeout,lowestDelta;if($.event.fixHooks)for(var i=toFix.length;i;)$.event.fixHooks[toFix[--i]]=$.event.mouseHooks;var special=$.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var i=toBind.length;i;)this.addEventListener(toBind[--i],handler,!1);else this.onmousewheel=handler},teardown:function(){if(this.removeEventListener)for(var i=toBind.length;i;)this.removeEventListener(toBind[--i],handler,!1);else this.onmousewheel=null},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};$.fn.extend({mousewheel:function(fn){return fn?this.bind("mousewheel",fn):this.trigger("mousewheel")},unmousewheel:function(fn){return this.unbind("mousewheel",fn)}})}),BI.Pane=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.Pane.superclass._defaultConfig.apply(this,arguments),{_baseCls:"bi-pane",tipText:BI.i18nText("BI-No_Selected_Item"),overlap:!0,onLoaded:BI.emptyFn})},_assertTip:function(){var o=this.options;this._tipText||(this._tipText=BI.createWidget({type:"bi.label",cls:"bi-tips",text:o.tipText,height:25}),BI.createWidget({type:"bi.absolute_center_adapt",element:this,items:[this._tipText]}))},loading:function(){var self=this,o=this.options,isIE=BI.isIE(),loadingAnimation=BI.createWidget({type:"bi.horizontal",cls:"bi-loading-widget"+(isIE?" wave-loading hack":""),height:30,width:30,hgap:5,vgap:2.5,items:isIE?[]:[{type:"bi.layout",cls:"animate-rect rect1",height:25,width:3},{type:"bi.layout",cls:"animate-rect rect2",height:25,width:3},{type:"bi.layout",cls:"animate-rect rect3",height:25,width:3}]});this.setTipVisible(!1),o.overlap===!0?(BI.Layers.has(this.getName())||BI.createWidget({type:"bi.absolute_center_adapt",cls:"loading-container",items:[{el:loadingAnimation}],element:BI.Layers.make(this.getName(),this)}),BI.Layers.show(self.getName())):BI.isNull(this._loading)&&(this._loading=loadingAnimation,this._loading.element.css("zIndex",1),BI.createWidget({type:"bi.absolute_center_adapt",element:this,cls:"loading-container",items:[{el:this._loading,left:0,right:0,top:0}]})),this.element.addClass("loading-status")},loaded:function(){var self=this,o=this.options;BI.Layers.remove(self.getName()),this._loading&&this._loading.destroy(),this._loading&&(this._loading=null),o.onLoaded(),self.fireEvent(BI.Pane.EVENT_LOADED),this.element.removeClass("loading-status")},check:function(){this.setTipVisible(BI.isEmpty(this.options.items))},setTipVisible:function(b){b===!0?(this._assertTip(),this._tipText.setVisible(!0)):this._tipText&&this._tipText.setVisible(!1)},populate:function(items){this.options.items=items||[],this.check()},empty:function(){}}),BI.Pane.EVENT_LOADED="EVENT_LOADED",BI.Single=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.Single.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{_baseCls:(conf._baseCls||"")+" bi-single",readonly:!1,title:null,warningTitle:null,tipType:null,value:null,belowMouse:!1})},_showToolTip:function(e,opt){opt||(opt={});var self=this,o=this.options,type=this.getTipType()||(this.isEnabled()?"success":"warning"),title="success"===type?this.getTitle():this.getWarningTitle()||this.getTitle();BI.isKey(title)&&(BI.Tooltips.show(e,this.getName(),title,type,this,opt),o.action&&BI.Actions.runAction(o.action,"hover",o,this),BI.Actions.runGlobalAction("hover",o,this))},_hideTooltip:function(){var self=this,tooltip=BI.Tooltips.get(this.getName());BI.isNotNull(tooltip)&&tooltip.element.fadeOut(200,function(){BI.Tooltips.remove(self.getName())})},_init:function(){BI.Single.superclass._init.apply(this,arguments);var self=this,o=this.options;(BI.isKey(o.title)||BI.isKey(o.warningTitle)||BI.isFunction(o.title)||BI.isFunction(o.warningTitle))&&this.enableHover({belowMouse:o.belowMouse,container:o.container})},_clearTimeOut:function(){BI.isNotNull(this.showTimeout)&&(clearTimeout(this.showTimeout),this.showTimeout=null),BI.isNotNull(this.hideTimeout)&&(clearTimeout(this.hideTimeout),this.hideTimeout=null)},enableHover:function(opt){opt||(opt={});var self=this;this._hoverBinded||(this.element.on("mouseenter.title"+this.getName(),function(e){self._e=e,"warning"===self.getTipType()||BI.isKey(self.getWarningTitle())&&!self.isEnabled()?self.showTimeout=BI.delay(function(){BI.isNotNull(self.showTimeout)&&self._showToolTip(self._e||e,opt)},200):("success"===self.getTipType()||self.isEnabled())&&(self.showTimeout=BI.delay(function(){BI.isNotNull(self.showTimeout)&&self._showToolTip(self._e||e,opt)},500))}),this.element.on("mousemove.title"+this.getName(),function(e){self._e=e,BI.isNotNull(self.showTimeout)&&(clearTimeout(self.showTimeout),self.showTimeout=null),BI.isNull(self.hideTimeout)&&(self.hideTimeout=BI.delay(function(){BI.isNotNull(self.hideTimeout)&&self._hideTooltip()},500)),self.showTimeout=BI.delay(function(){BI.isNotNull(self.showTimeout)&&(BI.isNotNull(self.hideTimeout)&&(clearTimeout(self.hideTimeout),self.hideTimeout=null),self.element.__isMouseInBounds__(self._e||e)&&self._showToolTip(self._e||e,opt))},500)}),this.element.on("mouseleave.title"+this.getName(),function(e){self._e=null,self._clearTimeOut(),self._hideTooltip()}),this._hoverBinded=!0)},disabledHover:function(){this._clearTimeOut(),this._hideTooltip(),this.element.unbind("mouseenter.title"+this.getName()).unbind("mousemove.title"+this.getName()).unbind("mouseleave.title"+this.getName()),this._hoverBinded=!1},populate:function(items){this.items=items||[]},setTitle:function(title,opt){this.options.title=title,BI.isKey(title)||BI.isFunction(title)?this.enableHover(opt):this.disabledHover()},setWarningTitle:function(title,opt){this.options.warningTitle=title,BI.isKey(title)||BI.isFunction(title)?this.enableHover(opt):this.disabledHover()},getTipType:function(){return this.options.tipType},isReadOnly:function(){return!!this.options.readonly},getTitle:function(){var title=this.options.title;return BI.isFunction(title)?title():title},getWarningTitle:function(){var title=this.options.warningTitle;return BI.isFunction(title)?title():title},setValue:function(val){this.options.readonly||(this.options.value=val)},getValue:function(){return this.options.value},_unMount:function(){BI.Single.superclass._unMount.apply(this,arguments),BI.Tooltips.remove(this.getName())}}),BI.Text=BI.inherit(BI.Single,{props:{baseCls:"bi-text",textAlign:"left",whiteSpace:"normal",lineHeight:null,handler:null,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0,text:"",py:"",highLight:!1},render:function(){var self=this,o=this.options;o.hgap+o.lgap>0&&this.element.css({"padding-left":o.hgap+o.lgap+"px"}),o.hgap+o.rgap>0&&this.element.css({"padding-right":o.hgap+o.rgap+"px"}),o.vgap+o.tgap>0&&this.element.css({"padding-top":o.vgap+o.tgap+"px"}),o.vgap+o.bgap>0&&this.element.css({"padding-bottom":o.vgap+o.bgap+"px"}),BI.isNumber(o.height)&&this.element.css({lineHeight:o.height+"px"}),BI.isNumber(o.lineHeight)&&this.element.css({lineHeight:o.lineHeight+"px"}),BI.isWidthOrHeight(o.maxWidth)&&this.element.css({maxWidth:o.maxWidth}),this.element.css({textAlign:o.textAlign,whiteSpace:o.whiteSpace,textOverflow:"nowrap"===o.whiteSpace?"ellipsis":"",overflow:"nowrap"===o.whiteSpace?"":BI.isWidthOrHeight(o.height)?"auto":""}),o.handler?(this.text=BI.createWidget({type:"bi.layout",tagName:"span"}),this.text.element.click(function(){o.handler(self.getValue())}),BI.createWidget({type:"bi.default",element:this,items:[this.text]})):this.text=this;var text=this._getShowText();BI.isKey(text)?this.setText(text):BI.isKey(o.value)&&this.setText(o.value),BI.isKey(o.keyword)&&this.doRedMark(o.keyword),o.highLight&&this.doHighLight()},_getShowText:function(){var o=this.options;return BI.isFunction(o.text)?o.text():o.text},doRedMark:function(keyword){var o=this.options;o.keyword=keyword,this.text.element.__textKeywordMarked__(this._getShowText()||o.value,keyword,o.py)},unRedMark:function(){var o=this.options;o.keyword="",this.text.element.__textKeywordMarked__(this._getShowText()||o.value,"",o.py)},doHighLight:function(){this.text.element.addClass("bi-high-light")},unHighLight:function(){this.text.element.removeClass("bi-high-light")},setValue:function(text){BI.Text.superclass.setValue.apply(this,arguments),this.isReadOnly()||this.setText(text)},setStyle:function(css){this.text.element.css(css)},setText:function(text){return BI.Text.superclass.setText.apply(this,arguments),this.options.text=BI.isNotNull(text)?text:"",BI.isIE9Below()?void this.text.element.html(BI.htmlEncode(this._getShowText())):void(/\s/.test(text)?this.text.element[0].innerHTML=BI.htmlEncode(this._getShowText()):this.text.element[0].textContent=this._getShowText())}}),BI.shortcut("bi.text",BI.Text),BI.BasicButton=BI.inherit(BI.Single,{_defaultConfig:function(){var conf=BI.BasicButton.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{_baseCls:(conf._baseCls||"")+" bi-basic-button"+(conf.invalid?"":" cursor-pointer")+(BI.isIE()&&BI.getIEVersion()<10?" hack":""),value:"",text:"",stopEvent:!1,stopPropagation:!1,selected:!1,once:!1,forceSelected:!1,forceNotSelected:!1,disableSelected:!1,shadow:!1,isShadowShowingOnSelected:!1,trigger:null,handler:BI.emptyFn,bubble:null})},_init:function(){BI.BasicButton.superclass._init.apply(this,arguments);var opts=this.options;opts.selected===!0&&BI.nextTick(BI.bind(function(){this.setSelected(opts.selected)},this)),BI.nextTick(BI.bind(this.bindEvent,this)),opts.shadow&&this._createShadow(),opts.level&&this.element.addClass("button-"+opts.level)},_createShadow:function(){var self=this,o=this.options,assertMask=function(){self.$mask||(self.$mask=BI.createWidget(BI.isObject(o.shadow)?o.shadow:{},{type:"bi.layout",cls:"bi-button-mask"}),self.$mask.invisible(),BI.createWidget({type:"bi.absolute",element:self,items:[{el:self.$mask,left:0,right:0,top:0,bottom:0}]}))};this.element.mouseup(function(){self._hover||o.isShadowShowingOnSelected||(assertMask(),self.$mask.invisible())}),this.element.on("mouseenter."+this.getName(),function(e){self.element.__isMouseInBounds__(e)&&(!self.isEnabled()||self._hover||!o.isShadowShowingOnSelected&&self.isSelected()||(assertMask(),self.$mask.visible()))}),this.element.on("mousemove."+this.getName(),function(e){self.element.__isMouseInBounds__(e)||self.isEnabled()&&!self._hover&&(assertMask(),self.$mask.invisible())}),this.element.on("mouseleave."+this.getName(),function(){self.isEnabled()&&!self._hover&&(assertMask(),self.$mask.invisible())})},bindEvent:function(){function ev(e){o.stopEvent&&e.stopEvent(),o.stopPropagation&&e.stopPropagation()}function clk(e){if(ev(e),!(!self.isEnabled()||self.isOnce()&&self.isSelected())){if(BI.isKey(o.bubble)||BI.isFunction(o.bubble)){if(BI.isNull(self.combo)){var popup;BI.createWidget({type:"bi.absolute",element:self,items:[{el:{type:"bi.bubble_combo",trigger:"",destroyWhenHide:!0,ref:function(){self.combo=this},el:{type:"bi.layout",height:"100%"},popup:{type:"bi.text_bubble_bar_popup_view",text:getBubble(),ref:function(){popup=this},listeners:[{eventName:BI.BubblePopupBarView.EVENT_CLICK_TOOLBAR_BUTTON,action:function(v){self.combo.hideView(),v&&onClick.apply(self,arguments)}}]},listeners:[{eventName:BI.BubbleCombo.EVENT_BEFORE_POPUPVIEW,action:function(){popup.populate(getBubble())}}]},left:0,right:0,bottom:0,top:0}]})}return void(self.combo.isViewVisible()?self.combo.hideView():self.combo.showView())}onClick.apply(self,arguments)}}function getBubble(){var bubble=self.options.bubble;return BI.isFunction(bubble)?bubble():bubble}var self=this,o=this.options,hand=this.handle();if(hand){hand=hand.element;var triggerArr=(o.trigger||"").split(",");BI.each(triggerArr,function(idx,trigger){switch(trigger){case"mouseup":var mouseDown=!1;hand.mousedown(function(){mouseDown=!0}),hand.mouseup(function(e){mouseDown===!0&&clk(e),mouseDown=!1,ev(e)});break;case"mousedown":var mouseDown=!1,selected=!1;hand.mousedown(function(e){BI.Widget._renderEngine.createElement(document).bind("mouseup."+self.getName(),function(e){!BI.DOM.isExist(self)||hand.__isMouseInBounds__(e)||mouseDown!==!0||selected||self._trigger(),mouseDown=!1,BI.Widget._renderEngine.createElement(document).unbind("mouseup."+self.getName())}),mouseDown!==!0&&(self.isSelected()?selected=!0:clk(e),mouseDown=!0,ev(e))}),hand.mouseup(function(e){BI.DOM.isExist(self)&&mouseDown===!0&&selected===!0&&clk(e),mouseDown=!1,selected=!1,BI.Widget._renderEngine.createElement(document).unbind("mouseup."+self.getName())});break;case"dblclick":hand.dblclick(clk);break;case"lclick":var mouseDown=!1,interval;hand.mousedown(function(e){BI.Widget._renderEngine.createElement(document).bind("mouseup."+self.getName(),function(e){interval&&clearInterval(interval),interval=null,mouseDown=!1,BI.Widget._renderEngine.createElement(document).unbind("mouseup."+self.getName())}),mouseDown!==!0&&(!self.isEnabled()||self.isOnce()&&self.isSelected()||(interval=setInterval(function(){self.isEnabled()&&self.doClick()},180),mouseDown=!0,ev(e)))});break;default:(o.stopEvent||o.stopPropagation)&&hand.mousedown(function(e){ev(e)}),hand.click(clk)}});var onClick=BI.debounce(this._doClick,BI.EVENT_RESPONSE_TIME,{leading:!0,trailing:!1})}},_trigger:function(e){var o=this.options;if(this.isEnabled()&&(this.isDisableSelected()||(this.isForceSelected()?this.setSelected(!0):this.isForceNotSelected()?this.setSelected(!1):this.setSelected(!this.isSelected())),this.isValid())){o.handler.call(this,this.getValue(),this,e);var v=this.getValue();this.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.CLICK,v,this,e),this.fireEvent(BI.BasicButton.EVENT_CHANGE,v,this),o.action&&BI.Actions.runAction(o.action,"click",o,this),BI.Actions.runGlobalAction("click",o,this)}},_doClick:function(e){this.isValid()&&this.beforeClick(e),this._trigger(e),this.isValid()&&this.doClick(e)},beforeClick:function(){},doClick:function(){},handle:function(){return this},hover:function(){this._hover=!0,this.handle().element.addClass("hover"),this.options.shadow&&this.$mask&&this.$mask.setVisible(!0)},dishover:function(){this._hover=!1,this.handle().element.removeClass("hover"),this.options.shadow&&this.$mask&&this.$mask.setVisible(!1)},setSelected:function(b){var o=this.options;o.selected=b,b?this.handle().element.addClass("active"):this.handle().element.removeClass("active"),o.shadow&&!o.isShadowShowingOnSelected&&this.$mask&&this.$mask.setVisible(!1)},isSelected:function(){return this.options.selected},isOnce:function(){return this.options.once},isForceSelected:function(){return this.options.forceSelected},isForceNotSelected:function(){return this.options.forceNotSelected},isDisableSelected:function(){return this.options.disableSelected},setText:function(text){this.options.text=text},getText:function(){return this.options.text},_setEnable:function(enable){BI.BasicButton.superclass._setEnable.apply(this,arguments),enable===!0?this.element.removeClass("base-disabled disabled"):enable===!1&&this.element.addClass("base-disabled disabled"),enable||this.options.shadow&&this.$mask&&this.$mask.setVisible(!1)},empty:function(){BI.Widget._renderEngine.createElement(document).unbind("mouseup."+this.getName()),BI.BasicButton.superclass.empty.apply(this,arguments)},destroy:function(){BI.BasicButton.superclass.destroy.apply(this,arguments)}}),BI.BasicButton.EVENT_CHANGE="BasicButton.EVENT_CHANGE",BI.NodeButton=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.NodeButton.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{_baseCls:(conf._baseCls||"")+" bi-node",open:!1})},_init:function(){BI.NodeButton.superclass._init.apply(this,arguments);var self=this;BI.nextTick(function(){self.setOpened(self.isOpened())})},doClick:function(){BI.NodeButton.superclass.doClick.apply(this,arguments),this.setOpened(!this.isOpened())},isOnce:function(){return!1},isOpened:function(){return!!this.options.open},setOpened:function(b){this.options.open=!!b},triggerCollapse:function(){this.isOpened()&&(this.setOpened(!1),this.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.COLLAPSE,this.getValue(),this))},triggerExpand:function(){this.isOpened()||(this.setOpened(!0),this.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.EXPAND,this.getValue(),this))}}),BI.Tip=BI.inherit(BI.Single,{_defaultConfig:function(){var conf=BI.Tip.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{_baseCls:(conf._baseCls||"")+" bi-tip",zIndex:BI.zIndex_tip})},_init:function(){BI.Tip.superclass._init.apply(this,arguments),this.element.css({zIndex:this.options.zIndex})}}),BI.ButtonGroup=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.ButtonGroup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-button-group",behaviors:{},items:[],value:"",chooseType:BI.Selection.Single,layouts:[{type:"bi.center",hgap:0,vgap:0}]})},_init:function(){BI.ButtonGroup.superclass._init.apply(this,arguments);var o=this.options,behaviors={};BI.each(o.behaviors,function(key,rule){behaviors[key]=BI.BehaviorFactory.createBehavior(key,{rule:rule})}),this.behaviors=behaviors,this.populate(o.items),(BI.isKey(o.value)||BI.isNotEmptyArray(o.value))&&this.setValue(o.value)},_createBtns:function(items){var o=this.options;return BI.createWidgets(BI.createItems(items,{type:"bi.text_button"}))},_btnsCreator:function(items){var self=this,args=Array.prototype.slice.call(arguments),o=this.options,buttons=this._createBtns(items);return args[0]=buttons,BI.each(this.behaviors,function(i,behavior){behavior.doBehavior.apply(behavior,args)}),BI.each(buttons,function(i,btn){btn.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){if(type===BI.Events.CLICK){switch(o.chooseType){case BI.ButtonGroup.CHOOSE_TYPE_SINGLE:self.setValue(btn.getValue());break;case BI.ButtonGroup.CHOOSE_TYPE_NONE:self.setValue([])}self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),self.fireEvent(BI.ButtonGroup.EVENT_CHANGE,value,obj)}else self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),btn.on(BI.Events.DESTROY,function(){BI.remove(self.buttons,btn)})}),buttons},_packageBtns:function(btns){ +for(var o=this.options,i=o.layouts.length-1;i>0;i--)btns=BI.map(btns,function(k,it){return BI.extend({},o.layouts[i],{items:[BI.extend({},o.layouts[i].el,{el:it})]})});return btns},_packageSimpleItems:function(btns){var o=this.options;return BI.map(o.items,function(i,item){return BI.stripEL(item)===item?btns[i]:BI.extend({},item,{el:btns[i]})})},_packageItems:function(items,packBtns){return BI.createItems(BI.makeArrayByArray(items,{}),BI.clone(packBtns))},_packageLayout:function(items){for(var o=this.options,layout=BI.deepClone(o.layouts[0]),lay=BI.formatEL(layout).el;lay&&lay.items&&!BI.isEmpty(lay.items);)lay=BI.formatEL(lay.items[0]).el;return lay.items=items,layout},_isSimpleLayout:function(){var o=this.options;return 1===o.layouts.length&&!BI.isArray(o.items[0])},doBehavior:function(){var args=Array.prototype.slice.call(arguments);args.unshift(this.buttons),BI.each(this.behaviors,function(i,behavior){behavior.doBehavior.apply(behavior,args)})},prependItems:function(items){var o=this.options,btns=this._btnsCreator.apply(this,arguments);return this.buttons=BI.concat(btns,this.buttons),this._isSimpleLayout()&&this.layouts&&this.layouts.prependItems?void this.layouts.prependItems(btns):(items=this._packageItems(items,this._packageBtns(btns)),void this.layouts.prependItems(this._packageLayout(items).items))},addItems:function(items){var o=this.options,btns=this._btnsCreator.apply(this,arguments);return this.buttons=BI.concat(this.buttons,btns),this._isSimpleLayout()&&this.layouts&&this.layouts.addItems?void this.layouts.addItems(btns):(items=this._packageItems(items,this._packageBtns(btns)),void this.layouts.addItems(this._packageLayout(items).items))},removeItemAt:function(indexes){BI.removeAt(this.buttons,indexes),this.layouts.removeItemAt(indexes)},removeItems:function(values){values=BI.isArray(values)?values:[values];var deleted=[];BI.each(this.buttons,function(i,button){BI.deepContains(values,button.getValue())&&deleted.push(i)}),BI.removeAt(this.buttons,deleted),this.layouts.removeItemAt(deleted)},populate:function(items){items=items||[],this.empty(),this.options.items=items,this.buttons=this._btnsCreator.apply(this,arguments),items=this._isSimpleLayout()?this._packageSimpleItems(this.buttons):this._packageItems(items,this._packageBtns(this.buttons)),this.layouts=BI.createWidget(BI.extend({element:this},this._packageLayout(items)))},setNotSelectedValue:function(v){v=BI.isArray(v)?v:[v],BI.each(this.buttons,function(i,item){BI.deepContains(v,item.getValue())?item.setSelected&&item.setSelected(!1):item.setSelected&&item.setSelected(!0)})},setEnabledValue:function(v){v=BI.isArray(v)?v:[v],BI.each(this.buttons,function(i,item){BI.deepContains(v,item.getValue())?item.setEnable(!0):item.setEnable(!1)})},setValue:function(v){v=BI.isArray(v)?v:[v],BI.each(this.buttons,function(i,item){BI.deepContains(v,item.getValue())?item.setSelected&&item.setSelected(!0):item.setSelected&&item.setSelected(!1)})},getNotSelectedValue:function(){var v=[];return BI.each(this.buttons,function(i,item){!item.isEnabled()||item.isSelected&&item.isSelected()||v.push(item.getValue())}),v},getValue:function(){var v=[];return BI.each(this.buttons,function(i,item){item.isEnabled()&&item.isSelected&&item.isSelected()&&v.push(item.getValue())}),v},getAllButtons:function(){return this.buttons},getAllLeaves:function(){return this.buttons},getSelectedButtons:function(){var btns=[];return BI.each(this.buttons,function(i,item){item.isSelected&&item.isSelected()&&btns.push(item)}),btns},getNotSelectedButtons:function(){var btns=[];return BI.each(this.buttons,function(i,item){item.isSelected&&!item.isSelected()&&btns.push(item)}),btns},getIndexByValue:function(value){var index=-1;return BI.any(this.buttons,function(i,item){if(item.isEnabled()&&item.getValue()===value)return index=i,!0}),index},getNodeById:function(id){var node;return BI.any(this.buttons,function(i,item){if(item.isEnabled()&&item.options.id===id)return node=item,!0}),node},getNodeByValue:function(value){var node;return BI.any(this.buttons,function(i,item){if(item.isEnabled()&&item.getValue()===value)return node=item,!0}),node},empty:function(){BI.ButtonGroup.superclass.empty.apply(this,arguments),this.options.items=[]},destroy:function(){BI.ButtonGroup.superclass.destroy.apply(this,arguments),this.options.items=[]}}),BI.extend(BI.ButtonGroup,{CHOOSE_TYPE_SINGLE:BI.Selection.Single,CHOOSE_TYPE_MULTI:BI.Selection.Multi,CHOOSE_TYPE_ALL:BI.Selection.All,CHOOSE_TYPE_NONE:BI.Selection.None,CHOOSE_TYPE_DEFAULT:BI.Selection.Default}),BI.ButtonGroup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.button_group",BI.ButtonGroup),BI.ButtonTree=BI.inherit(BI.ButtonGroup,{_defaultConfig:function(){return BI.extend(BI.ButtonTree.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-button-tree"})},_init:function(){BI.ButtonTree.superclass._init.apply(this,arguments)},setNotSelectedValue:function(v){v=BI.isArray(v)?v:[v],BI.each(this.buttons,function(i,item){return BI.isFunction(item.setSelected)?void(BI.deepContains(v,item.getValue())?item.setSelected(!1):item.setSelected(!0)):void item.setNotSelectedValue(v)})},setEnabledValue:function(v){v=BI.isArray(v)?v:[v],BI.each(this.buttons,function(i,item){return BI.isFunction(item.setEnabledValue)?void item.setEnabledValue(v):void(BI.deepContains(v,item.getValue())?item.setEnable(!0):item.setEnable(!1))})},setValue:function(v){v=BI.isArray(v)?v:[v],BI.each(this.buttons,function(i,item){return BI.isFunction(item.setSelected)?void(BI.deepContains(v,item.getValue())?item.setSelected(!0):item.setSelected(!1)):void item.setValue(v)})},getNotSelectedValue:function(){var v=[];return BI.each(this.buttons,function(i,item){return item.isEnabled()&&!BI.isFunction(item.setSelected)?void(v=BI.concat(v,item.getNotSelectedValue())):void(item.isEnabled()&&item.isSelected&&!item.isSelected()&&v.push(item.getValue()))}),v},getValue:function(){var v=[];return BI.each(this.buttons,function(i,item){return item.isEnabled()&&!BI.isFunction(item.setSelected)?void(v=BI.concat(v,item.getValue())):void(item.isEnabled()&&item.isSelected&&item.isSelected()&&v.push(item.getValue()))}),v},getSelectedButtons:function(){var btns=[];return BI.each(this.buttons,function(i,item){return item.isEnabled()&&!BI.isFunction(item.setSelected)?void(btns=btns.concat(item.getSelectedButtons())):void(item.isSelected&&item.isSelected()&&btns.push(item))}),btns},getNotSelectedButtons:function(){var btns=[];return BI.each(this.buttons,function(i,item){return item.isEnabled()&&!BI.isFunction(item.setSelected)?void(btns=btns.concat(item.getNotSelectedButtons())):void(item.isSelected&&!item.isSelected()&&btns.push(item))}),btns},getAllLeaves:function(){var leaves=[];return BI.each(this.buttons,function(i,item){return item.isEnabled()&&!BI.isFunction(item.setSelected)?void(leaves=leaves.concat(item.getAllLeaves())):void(item.isEnabled()&&leaves.push(item))}),leaves},getIndexByValue:function(value){var index=-1;return BI.any(this.buttons,function(i,item){var vs=item.getValue();if(item.isEnabled()&&(vs===value||BI.contains(vs,value)))return index=i,!0}),index},getNodeById:function(id){var node;return BI.any(this.buttons,function(i,item){if(item.isEnabled()){if(item.attr("id")===id)return node=item,!0;if(BI.isFunction(item.getNodeById)&&(node=item.getNodeById(id)))return!0}}),node},getNodeByValue:function(value){var node;return BI.any(this.buttons,function(i,item){if(item.isEnabled())if(BI.isFunction(item.getNodeByValue)){if(node=item.getNodeByValue(value))return!0}else if(item.attr("value")===value)return node=item,!0}),node}}),BI.ButtonTree.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.button_tree",BI.ButtonTree),BI.TreeView=BI.inherit(BI.Pane,{_defaultConfig:function(){return BI.extend(BI.TreeView.superclass._defaultConfig.apply(this,arguments),{_baseCls:"bi-tree",paras:{selectedValues:{}},itemsCreator:BI.emptyFn})},_init:function(){BI.TreeView.superclass._init.apply(this,arguments);var o=this.options;this._stop=!1,this._createTree(),this.tip=BI.createWidget({type:"bi.loading_bar",invisible:!0,handler:BI.bind(this._loadMore,this)}),BI.createWidget({type:"bi.vertical",scrollable:!0,scrolly:!1,element:this,items:[this.tip]}),BI.isNotNull(o.value)&&this.setSelectedValue(o.value),BI.isIE9Below&&BI.isIE9Below()&&this.element.addClass("hack")},_createTree:function(){this.id="bi-tree"+BI.UUID(),this.nodes&&this.nodes.destroy(),this.tree&&this.tree.destroy(),this.tree=BI.createWidget({type:"bi.layout",element:"
      "}),BI.createWidget({type:"bi.default",element:this.element,items:[this.tree]})},_selectTreeNode:function(treeId,treeNode){this.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.CLICK,treeNode,this),this.fireEvent(BI.TreeView.EVENT_CHANGE,treeNode,this)},_configSetting:function(){function onClick(event,treeId,treeNode){var checked=treeNode.checked,status=treeNode.getCheckStatus();status.half===!0&&status.checked===!0&&(checked=!1),self.nodes.checkNode(treeNode,!checked,!0,!0)}function getUrl(treeId,treeNode){var parentNode=self._getParentValues(treeNode);treeNode.times=treeNode.times||1;var param="id="+treeNode.id+"×="+treeNode.times++ +"&parentValues= "+_global.encodeURIComponent(BI.jsonEncode(parentNode))+"&checkState="+_global.encodeURIComponent(BI.jsonEncode(treeNode.getCheckStatus()));return"&"+param}function beforeExpand(treeId,treeNode){return treeNode.isAjaxing?(BI.Msg.toast("Please Wait。","warning"),!1):(treeNode.children||(treeNode.times=1,ajaxGetNodes(treeNode,"refresh")),!0)}function onAsyncSuccess(event,treeId,treeNode,msg){if(treeNode.halfCheck=!1,msg&&0!==msg.length&&!/^[\s,\S]*<\/html>$/gi.test(msg)&&!self._stop){var zTree=self.nodes,totalCount=treeNode.count||0;treeNode.children.length>totalCount?(treeNode.count=treeNode.children.length,BI.delay(function(){ajaxGetNodes(treeNode)},perTime)):(zTree.updateNode(treeNode),zTree.selectNode(treeNode.children[0]))}}function onAsyncError(event,treeId,treeNode,XMLHttpRequest,textStatus,errorThrown){var zTree=self.nodes;BI.Msg.toast("Error!","warning")}function ajaxGetNodes(treeNode,reloadType){var zTree=self.nodes;"refresh"==reloadType&&zTree.updateNode(treeNode),zTree.reAsyncChildNodes(treeNode,reloadType,!0)}function beforeCheck(treeId,treeNode){function track(children){BI.each(children,function(i,ch){ch.halfCheck===!0&&(ch.halfCheck=!1,track(ch.children))})}if(treeNode.halfCheck=!1,treeNode.checked===!0){track(treeNode.children);var treeObj=self.nodes,nodes=treeObj.getSelectedNodes();BI.$.each(nodes,function(index,node){node.halfCheck=!1})}var status=treeNode.getCheckStatus();status.half===!0&&status.checked===!0&&(treeNode.checked=!1)}function onCheck(event,treeId,treeNode){self._selectTreeNode(treeId,treeNode)}function onExpand(event,treeId,treeNode){treeNode.halfCheck=!1}function onCollapse(event,treeId,treeNode){}var paras=this.options.paras,self=this,setting={async:{enable:!0,url:getUrl,autoParam:["id","name"],otherParam:BI.cjkEncodeDO(paras)},check:{enable:!0},data:{key:{title:"title",name:"text"},simpleData:{enable:!0}},view:{showIcon:!1,expandSpeed:"",nameIsHTML:!0,dblClickExpand:!1},callback:{beforeExpand:beforeExpand,onAsyncSuccess:onAsyncSuccess,onAsyncError:onAsyncError,beforeCheck:beforeCheck,onCheck:onCheck,onExpand:onExpand,onCollapse:onCollapse,onClick:onClick}},className="dark",perTime=100;return setting},_getParentValues:function(treeNode){if(!treeNode.getParentNode())return[];var parentNode=treeNode.getParentNode(),result=this._getParentValues(parentNode);return result=result.concat([this._getNodeValue(parentNode)])},_getNodeValue:function(node){return null==node.value?BI.replaceAll(node.text.replace(/<[^>]+>/g,"")," "," "):node.value},_getHalfSelectedValues:function(map,node){var self=this,checkState=node.getCheckStatus();if(checkState.checked!==!1||checkState.half!==!1){if(BI.isNotEmptyArray(node.children)&&checkState.half===!0){var children=node.children;return void BI.each(children,function(i,ch){self._getHalfSelectedValues(map,ch)})}var parent=node.parentValues||self._getParentValues(node),path=parent.concat(this._getNodeValue(node));if(BI.isNotEmptyArray(node.children)||checkState.half===!1)return void this._buildTree(map,path);var storeValues=BI.deepClone(this.options.paras.selectedValues),treeNode=this._getTree(storeValues,path);this._addTreeNode(map,parent,this._getNodeValue(node),treeNode)}},_getTree:function(map,values){var cur=map;return BI.any(values,function(i,value){return null==cur[value]||void(cur=cur[value])}),cur},_addTreeNode:function(map,values,key,value){var cur=map;BI.each(values,function(i,value){null==cur[value]&&(cur[value]={}),cur=cur[value]}),cur[key]=value},_buildTree:function(map,values){var cur=map;BI.each(values,function(i,value){null==cur[value]&&(cur[value]={}),cur=cur[value]})},_getSelectedValues:function(){function track(nodes){BI.each(nodes,function(i,node){var checkState=node.getCheckStatus();if(checkState.checked===!0||checkState.half===!0)if(checkState.half===!0)self._getHalfSelectedValues(hashMap,node);else{var parentValues=node.parentValues||self._getParentValues(node),values=parentValues.concat([self._getNodeValue(node)]);self._buildTree(hashMap,values)}})}var self=this,hashMap={},rootNoots=this.nodes.getNodes();return track(rootNoots),hashMap},_dealWidthNodes:function(nodes){var self=this,o=this.options,ns=BI.Tree.arrayFormat(nodes);return BI.each(ns,function(i,n){n.title=n.title||n.text||n.value,n.isParent=n.isParent||n.parent,BI.isKey(o.paras.keyword)?n.text=BI.$("
      ").__textKeywordMarked__(n.text,o.paras.keyword,n.py).html():n.text=BI.htmlEncode(n.text+"")}),nodes},_loadMore:function(){var self=this,o=this.options;this.tip.setLoading();var op=BI.extend({},o.paras,{times:++this.times});o.itemsCreator(op,function(res){if(self._stop!==!0){var hasNext=!!res.hasNext,nodes=res.items||[];hasNext?self.tip.setLoaded():self.tip.setEnd(),nodes.length>0&&self.nodes.addNodes(null,self._dealWidthNodes(nodes))}})},_initTree:function(setting){var self=this,o=this.options;self.fireEvent(BI.Events.INIT),this.times=1;var tree=this.tree;tree.empty(),this.loading(),this.tip.setVisible(!1);var callback=function(nodes){self._stop!==!0&&(self.nodes=BI.$.fn.zTree.init(tree.element,setting,nodes))},op=BI.extend({},o.paras,{times:1});o.itemsCreator(op,function(res){if(self._stop!==!0){var hasNext=!!res.hasNext,nodes=res.items||[];nodes.length>0&&callback(self._dealWidthNodes(nodes)),self.setTipVisible(nodes.length<=0),self.loaded(),hasNext?self.tip.setLoaded():self.tip.invisible(),1===op.times&&self.fireEvent(BI.Events.AFTERINIT)}})},initTree:function(nodes,setting){var setting=setting||{async:{enable:!1},check:{enable:!1},data:{key:{title:"title",name:"text"},simpleData:{enable:!0}},view:{showIcon:!1,expandSpeed:"",nameIsHTML:!0},callback:{}};this.nodes=BI.$.fn.zTree.init(this.tree.element,setting,nodes)},start:function(){this._stop=!1},stop:function(){this._stop=!0},stroke:function(config){delete this.options.keyword,BI.extend(this.options.paras,config);var setting=this._configSetting();this._createTree(),this.start(),this._initTree(setting)},populate:function(){this.stroke.apply(this,arguments)},hasChecked:function(){var treeObj=this.nodes;return treeObj.getCheckedNodes(!0).length>0},checkAll:function(checked){function setNode(children){BI.each(children,function(i,child){child.halfCheck=!1,setNode(child.children)})}this.nodes&&(BI.each(this.nodes.getNodes(),function(i,node){node.halfCheck=!1,setNode(node.children)}),this.nodes.checkAllNodes(checked))},expandAll:function(flag){this.nodes&&this.nodes.expandAll(flag)},setValue:function(value,param){this.checkAll(!1),this.updateValue(value,param),this.refresh()},setSelectedValue:function(value){this.options.paras.selectedValues=BI.deepClone(value||{})},updateValue:function(values,param){if(this.nodes){param||(param="value");var treeObj=this.nodes;BI.each(values,function(v,op){var nodes=treeObj.getNodesByParam(param,v,null);BI.each(nodes,function(j,node){BI.extend(node,{checked:!0},op),treeObj.updateNode(node)})})}},refresh:function(){this.nodes&&this.nodes.refresh()},getValue:function(){return this.nodes?this._getSelectedValues():null},destroyed:function(){this.stop(),this.nodes&&this.nodes.destroy()}}),BI.extend(BI.TreeView,{REQ_TYPE_INIT_DATA:1,REQ_TYPE_ADJUST_DATA:2,REQ_TYPE_SELECT_DATA:3,REQ_TYPE_GET_SELECTED_DATA:4}),BI.TreeView.EVENT_CHANGE="EVENT_CHANGE",BI.TreeView.EVENT_INIT=BI.Events.INIT,BI.TreeView.EVENT_AFTERINIT=BI.Events.AFTERINIT,BI.shortcut("bi.tree_view",BI.TreeView),BI.AsyncTree=BI.inherit(BI.TreeView,{_defaultConfig:function(){return BI.extend(BI.AsyncTree.superclass._defaultConfig.apply(this,arguments),{})},_init:function(){BI.AsyncTree.superclass._init.apply(this,arguments)},_configSetting:function(){function onClick(event,treeId,treeNode){var zTree=BI.$.fn.zTree.getZTreeObj(treeId),checked=treeNode.checked,status=treeNode.getCheckStatus();status.half===!0&&status.checked===!0&&(checked=!1),zTree.checkNode(treeNode,!checked,!0,!0)}function beforeCheck(treeId,treeNode){function track(children){BI.each(children,function(i,ch){ch.halfCheck===!0&&(ch.halfCheck=!1,track(ch.children))})}if(treeNode.halfCheck=!1,treeNode.checked===!0){track(treeNode.children);var treeObj=BI.$.fn.zTree.getZTreeObj(treeId),nodes=treeObj.getSelectedNodes();BI.each(nodes,function(index,node){node.halfCheck=!1})}var status=treeNode.getCheckStatus();status.half===!0&&status.checked===!0&&(treeNode.checked=!1)}function beforeExpand(treeId,treeNode){self._beforeExpandNode(treeId,treeNode)}function onCheck(event,treeId,treeNode){self._selectTreeNode(treeId,treeNode)}function onExpand(event,treeId,treeNode){treeNode.halfCheck=!1}function onCollapse(event,treeId,treeNode){treeNode.halfCheck=!1}var paras=this.options.paras,self=this,setting={async:{enable:!1,otherParam:BI.cjkEncodeDO(paras)},check:{enable:!0},data:{key:{title:"title",name:"text"},simpleData:{enable:!0}},view:{showIcon:!1,expandSpeed:"",nameIsHTML:!0,dblClickExpand:!1},callback:{beforeCheck:beforeCheck,onCheck:onCheck,beforeExpand:beforeExpand,onExpand:onExpand,onCollapse:onCollapse,onClick:onClick}};return setting},_selectTreeNode:function(treeId,treeNode){var self=this,o=this.options,parentValues=BI.deepClone(treeNode.parentValues||self._getParentValues(treeNode)),name=this._getNodeValue(treeNode);if(treeNode.checked===!0);else{var tNode=treeNode,pNode=this._getTree(this.options.paras.selectedValues,parentValues);for(BI.isNotNull(pNode[name])&&delete pNode[name];null!=tNode&&BI.isEmpty(pNode);)parentValues=parentValues.slice(0,parentValues.length-1),tNode=tNode.getParentNode(),null!=tNode&&(pNode=this._getTree(this.options.paras.selectedValues,parentValues),name=this._getNodeValue(tNode),delete pNode[name])}BI.AsyncTree.superclass._selectTreeNode.apply(self,arguments)},_beforeExpandNode:function(treeId,treeNode){function callback(nodes,hasNext){self.nodes.addNodes(treeNode,nodes),hasNext===!0&&BI.delay(function(){times++,op.times=times,o.itemsCreator(op,complete)},100)}var self=this,o=this.options,parentValues=treeNode.parentValues||self._getParentValues(treeNode),op=BI.extend({},o.paras,{id:treeNode.id,times:1,parentValues:parentValues.concat(this._getNodeValue(treeNode)),checkState:treeNode.getCheckStatus()}),complete=function(d){var nodes=d.items||[];nodes.length>0&&callback(self._dealWidthNodes(nodes),!!d.hasNext)},times=1;treeNode.children||setTimeout(function(){o.itemsCreator(op,complete)},17)},_join:function(valueA,valueB){function track(parent,node,compare){BI.each(node,function(n,item){BI.isNull(compare[n])?self._addTreeNode(map,parent,n,item):BI.isEmpty(compare[n])?self._addTreeNode(map,parent,n,{}):track(parent.concat([n]),node[n],compare[n])})}var self=this,map={};return track([],valueA,valueB),track([],valueB,valueA),map},hasChecked:function(){return!BI.isEmpty(this.options.paras.selectedValues)||BI.AsyncTree.superclass.hasChecked.apply(this,arguments)},_getJoinValue:function(){if(!this.nodes)return{};var checkedValues=this._getSelectedValues();return BI.isEmpty(checkedValues)?BI.deepClone(this.options.paras.selectedValues):BI.isEmpty(this.options.paras.selectedValues)?checkedValues:this._join(checkedValues,this.options.paras.selectedValues)},getValue:function(){return this._getJoinValue()},stroke:function(config){delete this.options.keyword,BI.extend(this.options.paras,config);var setting=this._configSetting();this._initTree(setting)}}),BI.shortcut("bi.async_tree",BI.AsyncTree),BI.PartTree=BI.inherit(BI.AsyncTree,{_defaultConfig:function(){return BI.extend(BI.PartTree.superclass._defaultConfig.apply(this,arguments),{})},_init:function(){BI.PartTree.superclass._init.apply(this,arguments)},_loadMore:function(){var self=this,o=this.options,op=BI.extend({},o.paras,{type:BI.TreeView.REQ_TYPE_INIT_DATA,times:++this.times});this.tip.setLoading(),o.itemsCreator(op,function(d){var hasNext=!!d.hasNext,nodes=d.items||[];o.paras.lastSearchValue=d.lastSearchValue,self._stop!==!0&&(hasNext?self.tip.setLoaded():self.tip.setEnd(),nodes.length>0&&self.nodes.addNodes(null,self._dealWidthNodes(nodes)))})},_selectTreeNode:function(treeId,treeNode){var self=this,o=this.options,parentValues=BI.deepClone(treeNode.parentValues||self._getParentValues(treeNode)),name=this._getNodeValue(treeNode);if(treeNode.checked===!0)this.options.paras.selectedValues=this._getJoinValue(),o.itemsCreator(BI.extend({},o.paras,{type:BI.TreeView.REQ_TYPE_ADJUST_DATA,curSelectedValue:name,parentValues:parentValues}),function(res){self.options.paras.selectedValues=res,BI.AsyncTree.superclass._selectTreeNode.apply(self,arguments)});else{for(var t=this.options.paras.selectedValues,p=parentValues.concat(name),i=0,len=p.length;i0?self._dealWidthNodes(nodes):[]),self.setTipVisible(nodes.length<=0),self.loaded(),hasNext?self.tip.setLoaded():self.tip.invisible(),self.fireEvent(BI.Events.AFTERINIT)}};BI.delay(function(){o.itemsCreator(op,complete)},100)},getValue:function(){return BI.deepClone(this.options.paras.selectedValues||{})},stroke:function(config){var o=this.options;delete o.paras.keyword,BI.extend(o.paras,config),delete o.paras.lastSearchValue;var setting=this._configSetting();this._initTree(setting,o.paras.keyword)}}),BI.shortcut("bi.part_tree",BI.PartTree),BI.ListTreeView=BI.inherit(BI.TreeView,{_constants:{SPLIT:"<|>"},_defaultConfig:function(){return BI.extend(BI.ListTreeView.superclass._defaultConfig.apply(this,arguments),{})},_init:function(){BI.ListTreeView.superclass._init.apply(this,arguments);var o=this.options;this.storeValue=o.value||{}},_configSetting:function(){function onClick(event,treeId,treeNode){var zTree=BI.$.fn.zTree.getZTreeObj(treeId),checked=treeNode.checked;self._checkValue(treeNode,!checked),zTree.checkNode(treeNode,!checked,!0,!0)}function onCheck(event,treeId,treeNode){self._selectTreeNode(treeId,treeNode)}var paras=this.options.paras,self=this,setting={async:{enable:!1},check:{enable:!0,chkboxType:{Y:"",N:""}},data:{key:{title:"title",name:"text"},simpleData:{enable:!0}},view:{showIcon:!1,expandSpeed:"",nameIsHTML:!0,dblClickExpand:!1},callback:{onCheck:onCheck,onClick:onClick}};return setting},_selectTreeNode:function(treeId,treeNode){this._checkValue(treeNode,treeNode.checked),BI.ListTreeView.superclass._selectTreeNode.apply(this,arguments)},_transArrayToMap:function(treeArrays){var self=this,map={};return BI.each(treeArrays,function(idx,array){var key=array.join(self._constants.SPLIT);map[key]=!0}),map},_transMapToArray:function(treeMap){var self=this,array=[];return BI.each(treeMap,function(key){var item=key.split(self._constants.SPLIT);array.push(item)}),array},_checkValue:function(treeNode,checked){var key=BI.concat(this._getParentValues(treeNode),this._getNodeValue(treeNode)).join(this._constants.SPLIT);checked?this.storeValue[key]=!0:delete this.storeValue[key]},setSelectedValue:function(value){this.options.paras.selectedValues=value||[],this.storeValue=this._transArrayToMap(value)},getValue:function(){return this._transMapToArray(this.storeValue)}}),BI.shortcut("bi.list_tree_view",BI.ListTreeView),BI.ListAsyncTree=BI.inherit(BI.ListTreeView,{_defaultConfig:function(){return BI.extend(BI.ListAsyncTree.superclass._defaultConfig.apply(this,arguments),{})},_init:function(){BI.ListAsyncTree.superclass._init.apply(this,arguments)},_configSetting:function(){function beforeCheck(treeId,treeNode){treeNode.half=!1}function onClick(event,treeId,treeNode){var zTree=BI.$.fn.zTree.getZTreeObj(treeId),checked=treeNode.checked;self._checkValue(treeNode,!checked),zTree.checkNode(treeNode,!checked,!0,!0)}function beforeExpand(treeId,treeNode){self._beforeExpandNode(treeId,treeNode)}function onCheck(event,treeId,treeNode){self._selectTreeNode(treeId,treeNode)}var paras=this.options.paras,self=this,setting={async:{enable:!1,otherParam:BI.cjkEncodeDO(paras)},check:{enable:!0,chkboxType:{Y:"",N:""}},data:{key:{title:"title",name:"text"},simpleData:{enable:!0}},view:{showIcon:!1,expandSpeed:"",nameIsHTML:!0,dblClickExpand:!1},callback:{onCheck:onCheck,beforeExpand:beforeExpand,beforeCheck:beforeCheck,onClick:onClick}};return setting},_beforeExpandNode:function(treeId,treeNode){function callback(nodes,hasNext){self.nodes.addNodes(treeNode,nodes),hasNext===!0&&BI.delay(function(){times++,op.times=times,o.itemsCreator(op,complete)},100)}var self=this,o=this.options,parentValues=treeNode.parentValues||self._getParentValues(treeNode),op=BI.extend({},o.paras,{id:treeNode.id,times:1,parentValues:parentValues.concat(this._getNodeValue(treeNode))}),complete=function(d){var nodes=d.items||[];nodes.length>0&&callback(self._dealWidthNodes(nodes),!!d.hasNext)},times=1;treeNode.children||setTimeout(function(){o.itemsCreator(op,complete)},17)},hasChecked:function(){return!BI.isEmpty(this.options.paras.selectedValues)||BI.ListAsyncTree.superclass.hasChecked.apply(this,arguments)},stroke:function(config){delete this.options.keyword,BI.extend(this.options.paras,config);var setting=this._configSetting();this._initTree(setting)}}),BI.shortcut("bi.list_async_tree",BI.ListAsyncTree),BI.ListPartTree=BI.inherit(BI.ListAsyncTree,{_defaultConfig:function(){return BI.extend(BI.ListPartTree.superclass._defaultConfig.apply(this,arguments),{})},_init:function(){BI.ListPartTree.superclass._init.apply(this,arguments)},_loadMore:function(){var self=this,o=this.options,op=BI.extend({},o.paras,{type:BI.TreeView.REQ_TYPE_INIT_DATA,times:++this.times});this.tip.setLoading(),o.itemsCreator(op,function(d){var hasNext=!!d.hasNext,nodes=d.items||[];o.paras.lastSearchValue=d.lastSearchValue,self._stop!==!0&&(hasNext?self.tip.setLoaded():self.tip.setEnd(),nodes.length>0&&self.nodes.addNodes(null,self._dealWidthNodes(nodes)))})},_initTree:function(setting,keyword){function callback(nodes){self._stop!==!0&&(self.nodes=BI.$.fn.zTree.init(tree.element,setting,nodes))}var self=this,o=this.options;this.times=1;var tree=this.tree;tree.empty(),self.tip.setVisible(!1),this.loading();var op=BI.extend({},o.paras,{type:BI.TreeView.REQ_TYPE_INIT_DATA,times:this.times}),complete=function(d){if(self._stop!==!0&&keyword==o.paras.keyword){var hasNext=!!d.hasNext,nodes=d.items||[];o.paras.lastSearchValue=d.lastSearchValue,callback(nodes.length>0?self._dealWidthNodes(nodes):[]),self.setTipVisible(nodes.length<=0),self.loaded(),hasNext?self.tip.setLoaded():self.tip.invisible(),self.fireEvent(BI.Events.AFTERINIT)}};BI.delay(function(){o.itemsCreator(op,complete)},100)},stroke:function(config){var o=this.options;delete o.paras.keyword,BI.extend(o.paras,config),delete o.paras.lastSearchValue;var setting=this._configSetting();this._initTree(setting,o.paras.keyword)}}),BI.shortcut("bi.list_part_tree",BI.ListPartTree),BI.prepares.push(function(){BI.Resizers=new BI.ResizeController,BI.Layers=new BI.LayerController,BI.Maskers=new BI.MaskersController,BI.Bubbles=new BI.BubblesController,BI.Tooltips=new BI.TooltipsController,BI.Popovers=new BI.PopoverController,BI.Broadcasts=new BI.BroadcastController,BI.StyleLoaders=new BI.StyleLoaderManager}),BI.CollectionView=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.CollectionView.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-collection",overflowX:!0,overflowY:!0,cellSizeAndPositionGetter:BI.emptyFn,horizontalOverscanSize:0,verticalOverscanSize:0,scrollLeft:0,scrollTop:0,items:[]})},_init:function(){BI.CollectionView.superclass._init.apply(this,arguments);var self=this,o=this.options;this.renderedCells=[],this.renderedKeys=[],this.renderRange={},this._scrollLock=!1,this._debounceRelease=BI.debounce(function(){self._scrollLock=!1},1e3/60),this.container=BI.createWidget({type:"bi.absolute"}),this.element.scroll(function(){self._scrollLock!==!0&&(o.scrollLeft=self.element.scrollLeft(),o.scrollTop=self.element.scrollTop(),self._calculateChildrenToRender(),self.fireEvent(BI.CollectionView.EVENT_SCROLL,{scrollLeft:o.scrollLeft,scrollTop:o.scrollTop}))}),BI.createWidget({type:"bi.vertical",element:this,scrollable:o.overflowX===!0&&o.overflowY===!0,scrolly:o.overflowX===!1&&o.overflowY===!0,scrollx:o.overflowX===!0&&o.overflowY===!1,items:[this.container]}),o.items.length>0&&(this._calculateSizeAndPositionData(),this._populate())},mounted:function(){var o=this.options;0===o.scrollLeft&&0===o.scrollTop||(this.element.scrollTop(o.scrollTop),this.element.scrollLeft(o.scrollLeft))},_calculateSizeAndPositionData:function(){for(var o=this.options,cellMetadata=[],sectionManager=new BI.SectionManager,height=0,width=0,index=0,len=o.items.length;index0&&bottom>0){if(top>=this.renderRange.minY&&bottom<=this.renderRange.maxY&&left>=this.renderRange.minX&&right<=this.renderRange.maxX)return;for(var childrenToDisplay=this._cellRenderers(bottom-top,right-left,left,top),renderedCells=[],renderedKeys={},renderedWidgets={},lefts={},tops={},i=0,len=childrenToDisplay.length;i=0?(datum.width!==this.renderedCells[index]._width&&(this.renderedCells[index]._width=datum.width,this.renderedCells[index].el.setWidth(datum.width)),datum.height!==this.renderedCells[index]._height&&(this.renderedCells[index]._height=datum.height,this.renderedCells[index].el.setHeight(datum.height)),this.renderedCells[index]._left!==datum.x&&this.renderedCells[index].el.element.css("left",datum.x+"px"),this.renderedCells[index]._top!==datum.y&&this.renderedCells[index].el.element.css("top",datum.y+"px"),renderedCells.push(child=this.renderedCells[index])):(child=BI.createWidget(BI.extend({type:"bi.label",width:datum.width,height:datum.height},o.items[datum.index],{cls:(o.items[datum.index].cls||"")+" container-cell"+(0===datum.y?" first-row":"")+(0===datum.x?" first-col":""),_left:datum.x,_top:datum.y})),renderedCells.push({el:child,left:datum.x,top:datum.y,_left:datum.x,_top:datum.y,_width:datum.width,_height:datum.height}));for(var startTopIndex=0|topMap[datum.y],endTopIndex=0|topMap[datum.y+datum.height],k=startTopIndex;k<=endTopIndex;k++){var t=tops[k];assertMinBorder(leftBorder,t),assertMaxBorder(rightBorder,t),leftBorder[t]=Math.min(leftBorder[t],datum.x),rightBorder[t]=Math.max(rightBorder[t],datum.x+datum.width)}for(var startLeftIndex=0|leftMap[datum.x],endLeftIndex=0|leftMap[datum.x+datum.width],k=startLeftIndex;k<=endLeftIndex;k++){var l=lefts[k];assertMinBorder(topBorder,l),assertMaxBorder(bottomBorder,l),topBorder[l]=Math.min(topBorder[l],datum.y),bottomBorder[l]=Math.max(bottomBorder[l],datum.y+datum.height)}renderedKeys[datum.index]=[datum.index,i],renderedWidgets[i]=child}var existSet={},addSet={},deleteArray=[];BI.each(renderedKeys,function(i,key){self.renderedKeys[i]?existSet[i]=key:addSet[i]=key}),BI.each(this.renderedKeys,function(i,key){existSet[i]||addSet[i]||deleteArray.push(key[1])}),BI.each(deleteArray,function(i,index){self.renderedCells[index].el._destroy()});var addedItems=[];BI.each(addSet,function(index,key){addedItems.push(renderedCells[key[1]])}),this.container.addItems(addedItems),this.container._children=renderedWidgets,this.container.attr("items",renderedCells),this.renderedCells=renderedCells,this.renderedKeys=renderedKeys;var minX=BI.min(leftBorder),maxX=BI.max(rightBorder),minY=BI.max(topBorder),maxY=BI.min(bottomBorder);this.renderRange={minX:minX,minY:minY,maxX:maxX,maxY:maxY}}},_getMaxScrollLeft:function(){return Math.max(0,this._width-this.options.width+(this.options.overflowX?BI.DOM.getScrollWidth():0))},_getMaxScrollTop:function(){return Math.max(0,this._height-this.options.height+(this.options.overflowY?BI.DOM.getScrollWidth():0))},_populate:function(items){var o=this.options;if(this._reRange(),items&&items!==this.options.items&&(this.options.items=items,this._calculateSizeAndPositionData()),o.items.length>0){this.container.setWidth(this._width),this.container.setHeight(this._height),this._calculateChildrenToRender();try{this.element.scrollTop(o.scrollTop),this.element.scrollLeft(o.scrollLeft)}catch(e){}}},setScrollLeft:function(scrollLeft){this.options.scrollLeft!==scrollLeft&&(this._scrollLock=!0,this.options.scrollLeft=BI.clamp(scrollLeft||0,0,this._getMaxScrollLeft()),this._debounceRelease(),this._calculateChildrenToRender(),this.element.scrollLeft(this.options.scrollLeft))},setScrollTop:function(scrollTop){this.options.scrollTop!==scrollTop&&(this._scrollLock=!0,this.options.scrollTop=BI.clamp(scrollTop||0,0,this._getMaxScrollTop()),this._debounceRelease(),this._calculateChildrenToRender(),this.element.scrollTop(this.options.scrollTop))},setOverflowX:function(b){var self=this;this.options.overflowX!==!!b&&(this.options.overflowX=!!b,BI.nextTick(function(){self.element.css({overflowX:b?"auto":"hidden"})}))},setOverflowY:function(b){var self=this;this.options.overflowY!==!!b&&(this.options.overflowY=!!b,BI.nextTick(function(){self.element.css({overflowY:b?"auto":"hidden"})}))},getScrollLeft:function(){return this.options.scrollLeft},getScrollTop:function(){return this.options.scrollTop},getMaxScrollLeft:function(){return this._getMaxScrollLeft()},getMaxScrollTop:function(){return this._getMaxScrollTop()},_reRange:function(){this.renderRange={}},_clearChildren:function(){this.container._children={},this.container.attr("items",[])},restore:function(){BI.each(this.renderedCells,function(i,cell){cell.el._destroy()}),this._clearChildren(),this.renderedCells=[],this.renderedKeys=[],this.renderRange={},this._scrollLock=!1},populate:function(items){items&&items!==this.options.items&&this.restore(),this._populate(items)}}),BI.CollectionView.EVENT_SCROLL="EVENT_SCROLL",BI.shortcut("bi.collection_view",BI.CollectionView),BI.Combo=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.Combo.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-combo",trigger:"click",toggle:!0,direction:"bottom",logic:{dynamic:!0},container:null,isDefaultInit:!1,destroyWhenHide:!1,isNeedAdjustHeight:!0,isNeedAdjustWidth:!0,stopEvent:!1,stopPropagation:!1,adjustLength:0,adjustXOffset:0,adjustYOffset:0,hideChecker:BI.emptyFn,offsetStyle:"left",el:{},popup:{},comboClass:"bi-combo-popup",hoverClass:"bi-combo-hover"})},_init:function(){BI.Combo.superclass._init.apply(this,arguments);var self=this,o=this.options;this._initCombo(),this._initPullDownAction(),this.combo.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){self.isEnabled()&&self.isValid()&&(type===BI.Events.EXPAND&&self._popupView(),type===BI.Events.COLLAPSE&&self._hideView(),type===BI.Events.EXPAND&&(self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),self.fireEvent(BI.Combo.EVENT_EXPAND)),type===BI.Events.COLLAPSE&&(self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),self.isViewVisible()&&self.fireEvent(BI.Combo.EVENT_COLLAPSE)),type===BI.Events.CLICK&&self.fireEvent(BI.Combo.EVENT_TRIGGER_CHANGE,obj))}),self.element.on("mouseenter."+self.getName(),function(e){self.isEnabled()&&self.isValid()&&self.combo.isEnabled()&&self.combo.isValid()&&self.element.addClass(o.hoverClass)}),self.element.on("mouseleave."+self.getName(),function(e){self.isEnabled()&&self.isValid()&&self.combo.isEnabled()&&self.combo.isValid()&&self.element.removeClass(o.hoverClass)}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("vertical",BI.extend(o.logic,{items:[{el:this.combo}]})))),o.isDefaultInit&&this._assertPopupView(),BI.Resizers.add(this.getName(),BI.bind(function(){this.isViewVisible()&&this._hideView()},this))},_toggle:function(){this._assertPopupViewRender(),this.popupView.isVisible()?this._hideView():this.isEnabled()&&this._popupView()},_initPullDownAction:function(){function hide(){self.isEnabled()&&self.isValid()&&self.combo.isEnabled()&&self.combo.isValid()&&o.toggle===!0&&(self._hideView(),self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.COLLAPSE,"",self.combo),self.fireEvent(BI.Combo.EVENT_COLLAPSE)),self.popupView&&self.popupView.element.off("mouseenter."+self.getName()).off("mouseleave."+self.getName()),enterPopup=!1}var self=this,o=this.options,evs=(this.options.trigger||"").split(","),st=function(e){o.stopEvent&&e.stopEvent(),o.stopPropagation&&e.stopPropagation()},enterPopup=!1;BI.each(evs,function(i,ev){switch(ev){case"hover":self.element.on("mouseenter."+self.getName(),function(e){self.isEnabled()&&self.isValid()&&self.combo.isEnabled()&&self.combo.isValid()&&(self._popupView(),self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.EXPAND,"",self.combo),self.fireEvent(BI.Combo.EVENT_EXPAND))}),self.element.on("mouseleave."+self.getName(),function(e){self.popupView&&(self.popupView.element.on("mouseenter."+self.getName(),function(e){enterPopup=!0,self.popupView.element.on("mouseleave."+self.getName(),function(e){hide()}),self.popupView.element.off("mouseenter."+self.getName())}),BI.defer(function(){enterPopup||hide()},50))});break;case"click":var debounce=BI.debounce(function(e){self.combo.element.__isMouseInBounds__(e)&&self.isEnabled()&&self.isValid()&&self.combo.isEnabled()&&self.combo.isValid()&&(o.toggle?self._toggle():self._popupView(),self.isViewVisible()?(self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.EXPAND,"",self.combo),self.fireEvent(BI.Combo.EVENT_EXPAND)):(self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.COLLAPSE,"",self.combo),self.fireEvent(BI.Combo.EVENT_COLLAPSE)))},BI.EVENT_RESPONSE_TIME,{leading:!0,trailing:!1});self.element.off(ev+"."+self.getName()).on(ev+"."+self.getName(),function(e){debounce(e),st(e)});break;case"click-hover":var debounce=BI.debounce(function(e){self.combo.element.__isMouseInBounds__(e)&&self.isEnabled()&&self.isValid()&&self.combo.isEnabled()&&self.combo.isValid()&&(self._popupView(),self.isViewVisible()&&(self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.EXPAND,"",self.combo),self.fireEvent(BI.Combo.EVENT_EXPAND)))},BI.EVENT_RESPONSE_TIME,{leading:!0,trailing:!1});self.element.off("click."+self.getName()).on("click."+self.getName(),function(e){debounce(e),st(e)}),self.element.on("mouseleave."+self.getName(),function(e){self.popupView&&(self.popupView.element.on("mouseenter."+self.getName(),function(e){enterPopup=!0,self.popupView.element.on("mouseleave."+self.getName(),function(e){hide()}),self.popupView.element.off("mouseenter."+self.getName())}),BI.defer(function(){enterPopup||hide()},50))})}})},_initCombo:function(){this.combo=BI.createWidget(this.options.el,{value:this.options.value})},_assertPopupView:function(){var self=this,o=this.options;null==this.popupView&&(this.popupView=BI.createWidget(this.options.popup,{type:"bi.popup_view",value:o.value},this),this.popupView.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){type===BI.Events.CLICK&&(self.combo.setValue(self.getValue()),self.fireEvent(BI.Combo.EVENT_CHANGE,value,obj)),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.popupView.setVisible(!1),BI.nextTick(function(){self.fireEvent(BI.Combo.EVENT_AFTER_INIT)}))},_assertPopupViewRender:function(){this._assertPopupView(),this._rendered||(BI.createWidget({type:"bi.vertical",scrolly:!1,element:this.options.container||this,items:[{el:this.popupView}]}),this._rendered=!0)},_hideIf:function(e){if(this.element.find(e.target).length>0||this.popupView&&this.popupView.element.find(e.target).length>0||"CodeMirror-cursor"===e.target.className||BI.Widget._renderEngine.createElement(e.target).closest(".CodeMirror-hints").length>0){var directions=this.options.direction.split(",");return void((BI.contains(directions,"innerLeft")||BI.contains(directions,"innerRight"))&&(this.adjustWidth(),this.adjustHeight()))}var isHide=this.options.hideChecker.apply(this,[e]);isHide!==!1&&this._hideView()},_hideView:function(){this.fireEvent(BI.Combo.EVENT_BEFORE_HIDEVIEW),this.options.destroyWhenHide===!0?(this.popupView&&this.popupView.destroy(),this.popupView=null,this._rendered=!1):this.popupView&&this.popupView.invisible(),this.element.removeClass(this.options.comboClass),BI.Widget._renderEngine.createElement(document).unbind("mousedown."+this.getName()).unbind("mousewheel."+this.getName()),this.fireEvent(BI.Combo.EVENT_AFTER_HIDEVIEW)},_popupView:function(e){this._assertPopupViewRender(),this.fireEvent(BI.Combo.EVENT_BEFORE_POPUPVIEW),this.popupView.visible(),this.adjustWidth(e),this.adjustHeight(e),this.element.addClass(this.options.comboClass),BI.Widget._renderEngine.createElement(document).unbind("mousedown."+this.getName()).unbind("mousewheel."+this.getName()),BI.Widget._renderEngine.createElement(document).bind("mousedown."+this.getName(),BI.bind(this._hideIf,this)).bind("mousewheel."+this.getName(),BI.bind(this._hideIf,this)),this.fireEvent(BI.Combo.EVENT_AFTER_POPUPVIEW)},adjustWidth:function(e){var o=this.options;if(this.popupView&&o.isNeedAdjustWidth===!0){this.resetListWidth("");var width=this.popupView.element.outerWidth(),maxW=this.element.outerWidth()||o.width;width>maxW+80?maxW+=80:width>maxW&&(maxW=width),this.resetListWidth(maxW<100?100:maxW)}},adjustHeight:function(e){var o=this.options,p={};if(this.popupView){var isVisible=this.popupView.isVisible();this.popupView.visible();var combo=BI.isNotNull(e)?{element:{offset:function(){return{left:e.pageX,top:e.pageY}},bounds:function(){return{x:e.offsetX,y:e.offsetY,width:0,height:24}},outerWidth:function(){return 0},outerHeight:function(){return 24}}}:this.combo;switch(o.direction){case"bottom":case"bottom,right":p=BI.DOM.getComboPosition(combo,this.popupView,o.adjustXOffset,o.adjustYOffset||o.adjustLength,o.isNeedAdjustHeight,["bottom","top","right","left"],o.offsetStyle);break;case"top":case"top,right":p=BI.DOM.getComboPosition(combo,this.popupView,o.adjustXOffset,o.adjustYOffset||o.adjustLength,o.isNeedAdjustHeight,["top","bottom","right","left"],o.offsetStyle);break;case"left":case"left,bottom":p=BI.DOM.getComboPosition(combo,this.popupView,o.adjustXOffset||o.adjustLength,o.adjustYOffset,o.isNeedAdjustHeight,["left","right","bottom","top"],o.offsetStyle);break;case"right":case"right,bottom":p=BI.DOM.getComboPosition(combo,this.popupView,o.adjustXOffset||o.adjustLength,o.adjustYOffset,o.isNeedAdjustHeight,["right","left","bottom","top"],o.offsetStyle);break;case"top,left":p=BI.DOM.getComboPosition(combo,this.popupView,o.adjustXOffset,o.adjustYOffset||o.adjustLength,o.isNeedAdjustHeight,["top","bottom","left","right"],o.offsetStyle);break;case"bottom,left":p=BI.DOM.getComboPosition(combo,this.popupView,o.adjustXOffset,o.adjustYOffset||o.adjustLength,o.isNeedAdjustHeight,["bottom","top","left","right"],o.offsetStyle);break;case"left,top":p=BI.DOM.getComboPosition(combo,this.popupView,o.adjustXOffset||o.adjustLength,o.adjustYOffset,o.isNeedAdjustHeight,["left","right","top","bottom"],o.offsetStyle);break;case"right,top":p=BI.DOM.getComboPosition(combo,this.popupView,o.adjustXOffset||o.adjustLength,o.adjustYOffset,o.isNeedAdjustHeight,["right","left","top","bottom"],o.offsetStyle);break;case"right,innerRight":p=BI.DOM.getComboPosition(combo,this.popupView,o.adjustXOffset||o.adjustLength,o.adjustYOffset,o.isNeedAdjustHeight,["right","left","innerRight","innerLeft","bottom","top"],o.offsetStyle);break;case"right,innerLeft":p=BI.DOM.getComboPosition(combo,this.popupView,o.adjustXOffset||o.adjustLength,o.adjustYOffset,o.isNeedAdjustHeight,["right","left","innerLeft","innerRight","bottom","top"],o.offsetStyle);break;case"innerRight":p=BI.DOM.getComboPosition(combo,this.popupView,o.adjustXOffset||o.adjustLength,o.adjustYOffset,o.isNeedAdjustHeight,["innerRight","innerLeft","right","left","bottom","top"],o.offsetStyle);break;case"innerLeft":p=BI.DOM.getComboPosition(combo,this.popupView,o.adjustXOffset||o.adjustLength,o.adjustYOffset,o.isNeedAdjustHeight,["innerLeft","innerRight","left","right","bottom","top"],o.offsetStyle);break;case"top,custom":case"custom,top":p=BI.DOM.getTopAdaptPosition(combo,this.popupView,o.adjustYOffset||o.adjustLength,o.isNeedAdjustHeight);break;case"custom,bottom":case"bottom,custom":p=BI.DOM.getBottomAdaptPosition(combo,this.popupView,o.adjustYOffset||o.adjustLength,o.isNeedAdjustHeight);break;case"left,custom":case"custom,left":p=BI.DOM.getLeftAdaptPosition(combo,this.popupView,o.adjustXOffset||o.adjustLength),delete p.top,delete p.adaptHeight;break;case"custom,right":case"right,custom":p=BI.DOM.getRightAdaptPosition(combo,this.popupView,o.adjustXOffset||o.adjustLength),delete p.top,delete p.adaptHeight}"adaptHeight"in p&&this.resetListHeight(p.adaptHeight),"left"in p&&this.popupView.element.css({left:p.left}),"top"in p&&this.popupView.element.css({top:p.top}),this.position=p,this.popupView.setVisible(isVisible)}},resetListHeight:function(h){this._assertPopupView(),this.popupView.resetHeight&&this.popupView.resetHeight(h)},resetListWidth:function(w){this._assertPopupView(),this.popupView.resetWidth&&this.popupView.resetWidth(w)},populate:function(items){this._assertPopupView(),this.popupView.populate.apply(this.popupView,arguments),this.combo.populate.apply(this.combo,arguments)},_setEnable:function(arg){BI.Combo.superclass._setEnable.apply(this,arguments),arg===!0?this.element.removeClass("base-disabled disabled"):arg===!1&&this.element.addClass("base-disabled disabled"),!arg&&this.element.removeClass(this.options.hoverClass),!arg&&this.isViewVisible()&&this._hideView()},setValue:function(v){this.combo.setValue(v),BI.isNull(this.popupView)?this.options.popup.value=v:this.popupView.setValue(v)},getValue:function(){return BI.isNull(this.popupView)?this.options.popup.value:this.popupView.getValue()},isViewVisible:function(){return this.isEnabled()&&this.combo.isEnabled()&&!!this.popupView&&this.popupView.isVisible()},showView:function(e){this.isEnabled()&&this.combo.isEnabled()&&!this.isViewVisible()&&this._popupView(e)},hideView:function(){this._hideView()},getView:function(){return this.popupView},getPopupPosition:function(){return this.position},toggle:function(){this._toggle()},destroyed:function(){BI.Widget._renderEngine.createElement(document).unbind("mousedown."+this.getName()).unbind("mousewheel."+this.getName()).unbind("mouseenter."+this.getName()).unbind("mousemove."+this.getName()).unbind("mouseleave."+this.getName()),BI.Resizers.remove(this.getName())}}),BI.Combo.EVENT_TRIGGER_CHANGE="EVENT_TRIGGER_CHANGE",BI.Combo.EVENT_CHANGE="EVENT_CHANGE",BI.Combo.EVENT_EXPAND="EVENT_EXPAND",BI.Combo.EVENT_COLLAPSE="EVENT_COLLAPSE",BI.Combo.EVENT_AFTER_INIT="EVENT_AFTER_INIT",BI.Combo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.Combo.EVENT_AFTER_POPUPVIEW="EVENT_AFTER_POPUPVIEW",BI.Combo.EVENT_BEFORE_HIDEVIEW="EVENT_BEFORE_HIDEVIEW",BI.Combo.EVENT_AFTER_HIDEVIEW="EVENT_AFTER_HIDEVIEW",BI.shortcut("bi.combo",BI.Combo),BI.Expander=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.Expander.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-expander",trigger:"click",toggle:!0,isDefaultInit:!1,el:{},popup:{},expanderClass:"bi-expander-popup",hoverClass:"bi-expander-hover"})},_init:function(){BI.Expander.superclass._init.apply(this,arguments);var self=this,o=this.options;this._expanded=!!o.el.open,this._initExpander(),this._initPullDownAction(),this.expander.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){self.isEnabled()&&self.isValid()&&(type===BI.Events.EXPAND&&self._popupView(),type===BI.Events.COLLAPSE&&self._hideView(),type===BI.Events.EXPAND&&(self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),self.fireEvent(BI.Expander.EVENT_EXPAND)),type===BI.Events.COLLAPSE&&(self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),self.isViewVisible()&&self.fireEvent(BI.Expander.EVENT_COLLAPSE)),type===BI.Events.CLICK&&self.fireEvent(BI.Expander.EVENT_TRIGGER_CHANGE,value,obj))}),this.element.hover(function(){self.isEnabled()&&self.isValid()&&self.expander.isEnabled()&&self.expander.isValid()&&self.element.addClass(o.hoverClass)},function(){self.isEnabled()&&self.isValid()&&self.expander.isEnabled()&&self.expander.isValid()&&self.element.removeClass(o.hoverClass)}),BI.createWidget({type:"bi.vertical",scrolly:!1,element:this,items:[{el:this.expander}]}),o.isDefaultInit&&this._assertPopupView(),this.expander.isOpened()===!0&&this._popupView()},_toggle:function(){this._assertPopupViewRender(),this.popupView.isVisible()?this._hideView():this.isEnabled()&&this._popupView()},_initPullDownAction:function(){var self=this,o=this.options,evs=this.options.trigger.split(",");BI.each(evs,function(i,e){switch(e){case"hover":self.element[e](function(e){self.isEnabled()&&self.isValid()&&self.expander.isEnabled()&&self.expander.isValid()&&(self._popupView(),self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.EXPAND,"",self.expander),self.fireEvent(BI.Expander.EVENT_EXPAND))},function(){self.isEnabled()&&self.isValid()&&self.expander.isEnabled()&&self.expander.isValid()&&o.toggle&&(self._hideView(),self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.COLLAPSE,"",self.expander),self.fireEvent(BI.Expander.EVENT_COLLAPSE))});break;case"click":e&&self.element.off(e+"."+self.getName()).on(e+"."+self.getName(),BI.debounce(function(e){self.expander.element.__isMouseInBounds__(e)&&self.isEnabled()&&self.isValid()&&self.expander.isEnabled()&&self.expander.isValid()&&(o.toggle?self._toggle():self._popupView(),self.isExpanded()?(self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.EXPAND,"",self.expander),self.fireEvent(BI.Expander.EVENT_EXPAND)):(self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.COLLAPSE,"",self.expander),self.fireEvent(BI.Expander.EVENT_COLLAPSE)))},BI.EVENT_RESPONSE_TIME,{leading:!0,trailing:!1}))}})},_initExpander:function(){this.expander=BI.createWidget(this.options.el)},_assertPopupView:function(){var self=this,o=this.options;null==this.popupView&&(this.popupView=BI.createWidget(this.options.popup,{type:"bi.button_group",cls:"expander-popup",layouts:[{type:"bi.vertical",hgap:0,vgap:0}],value:o.value},this),this.popupView.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.Expander.EVENT_CHANGE,value,obj)}),this.popupView.setVisible(this.isExpanded()),BI.nextTick(function(){self.fireEvent(BI.Expander.EVENT_AFTER_INIT)}))},_assertPopupViewRender:function(){this._assertPopupView(),this._rendered||(BI.createWidget({type:"bi.vertical",scrolly:!1,element:this,items:[{el:this.popupView}]}),this._rendered=!0)},_hideView:function(){this.fireEvent(BI.Expander.EVENT_BEFORE_HIDEVIEW),this._expanded=!1,this.expander.setOpened(!1),this.popupView&&this.popupView.invisible(),this.element.removeClass(this.options.expanderClass),this.fireEvent(BI.Expander.EVENT_AFTER_HIDEVIEW)},_popupView:function(){this._assertPopupViewRender(),this.fireEvent(BI.Expander.EVENT_BEFORE_POPUPVIEW),this._expanded=!0,this.expander.setOpened(!0),this.popupView.visible(),this.element.addClass(this.options.expanderClass),this.fireEvent(BI.Expander.EVENT_AFTER_POPUPVIEW)},populate:function(items){this.popupView&&this.popupView.populate.apply(this.popupView,arguments),this.expander.populate.apply(this.expander,arguments)},_setEnable:function(arg){BI.Expander.superclass._setEnable.apply(this,arguments),!arg&&this.element.removeClass(this.options.hoverClass),!arg&&this.isViewVisible()&&this._hideView()},setValue:function(v){this.expander.setValue(v),BI.isNull(this.popupView)?this.options.popup.value=v:this.popupView.setValue(v)},getValue:function(){return BI.isNull(this.popupView)?this.options.popup.value:this.popupView.getValue()},isViewVisible:function(){return this.isEnabled()&&this.expander.isEnabled()&&!!this.popupView&&this.popupView.isVisible()},isExpanded:function(){return this._expanded},showView:function(){this.isEnabled()&&this.expander.isEnabled()&&this._popupView()},hideView:function(){this._hideView()},getView:function(){return this.popupView},getAllLeaves:function(){return this.popupView&&this.popupView.getAllLeaves()},getNodeById:function(id){return this.expander.options.id===id?this.expander:this.popupView&&this.popupView.getNodeById(id)},getNodeByValue:function(value){return this.expander.getValue()===value?this.expander:this.popupView&&this.popupView.getNodeByValue(value)},destroy:function(){BI.Expander.superclass.destroy.apply(this,arguments)}}),BI.Expander.EVENT_EXPAND="EVENT_EXPAND",BI.Expander.EVENT_COLLAPSE="EVENT_COLLAPSE",BI.Expander.EVENT_TRIGGER_CHANGE="EVENT_TRIGGER_CHANGE",BI.Expander.EVENT_CHANGE="EVENT_CHANGE",BI.Expander.EVENT_AFTER_INIT="EVENT_AFTER_INIT",BI.Expander.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.Expander.EVENT_AFTER_POPUPVIEW="EVENT_AFTER_POPUPVIEW",BI.Expander.EVENT_BEFORE_HIDEVIEW="EVENT_BEFORE_HIDEVIEW",BI.Expander.EVENT_AFTER_HIDEVIEW="EVENT_AFTER_HIDEVIEW",BI.shortcut("bi.expander",BI.Expander),BI.ComboGroup=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.ComboGroup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-combo-group bi-list-item",trigger:"click,hover",direction:"right",adjustLength:0,isDefaultInit:!1,isNeedAdjustHeight:!1,isNeedAdjustWidth:!1,el:{type:"bi.text_button",text:"",value:""},children:[],popup:{el:{type:"bi.button_tree",chooseType:0,layouts:[{type:"bi.vertical"}]}}})},_init:function(){BI.ComboGroup.superclass._init.apply(this,arguments),this._populate(this.options.el)},_populate:function(item){var self=this,o=this.options,children=o.children;if(BI.isEmpty(children))throw new Error("ComboGroup构造错误");BI.each(children,function(i,ch){var son=BI.formatEL(ch).el.children;ch=BI.formatEL(ch).el,BI.isEmpty(son)||(ch.el=BI.clone(ch),ch.children=son,ch.type="bi.combo_group",ch.action=o.action,ch.height=o.height,ch.direction=o.direction,ch.isDefaultInit=o.isDefaultInit,ch.isNeedAdjustHeight=o.isNeedAdjustHeight,ch.isNeedAdjustWidth=o.isNeedAdjustWidth,ch.adjustLength=o.adjustLength,ch.popup=o.popup)}),this.combo=BI.createWidget({type:"bi.combo",element:this,container:o.container,height:o.height,trigger:o.trigger,direction:o.direction,isDefaultInit:o.isDefaultInit,isNeedAdjustWidth:o.isNeedAdjustWidth,isNeedAdjustHeight:o.isNeedAdjustHeight,adjustLength:o.adjustLength,el:item,popup:BI.extend({},o.popup,{el:BI.extend({items:children},o.popup.el)})}),this.combo.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.ComboGroup.EVENT_CHANGE,obj)})},getValue:function(){return this.combo.getValue()},setValue:function(v){this.combo.setValue(v)}}),BI.ComboGroup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.combo_group",BI.ComboGroup),BI.VirtualGroup=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.VirtualGroup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-virtual-group",items:[],layouts:[{type:"bi.center",hgap:0,vgap:0}]})},render:function(){var o=this.options;this.populate(o.items),BI.isKey(o.value)&&this.setValue(o.value)},_packageBtns:function(items){for(var o=this.options,map=this.buttonMap={},i=o.layouts.length-1;i>0;i--)items=BI.map(items,function(k,it){var el=BI.stripEL(it);return BI.extend({},o.layouts[i],{items:[BI.extend({},o.layouts[i].el,{el:BI.extend({ref:function(_ref){BI.isKey(map[el.value])&&(map[el.value]=_ref)}},el)})]})});return items},_packageLayout:function(items){for(var o=this.options,layout=BI.deepClone(o.layouts[0]),lay=BI.formatEL(layout).el;lay&&lay.items&&!BI.isEmpty(lay.items);)lay=BI.formatEL(lay.items[0]).el;return lay.items=items,layout},addItems:function(items){this.layouts.addItems(items)},prependItems:function(items){this.layouts.prependItems(items)},setValue:function(v){v=BI.isArray(v)?v:[v],BI.each(this.buttonMap,function(key,item){item&&(v.deepContains(key)?item.setSelected&&item.setSelected(!0):item.setSelected&&item.setSelected(!1))})},getNotSelectedValue:function(){var v=[];return BI.each(this.buttonMap,function(i,item){item&&(!item.isEnabled()||item.isSelected&&item.isSelected()||v.push(item.getValue()))}),v},getValue:function(){var v=[];return BI.each(this.buttonMap,function(i,item){item&&item.isEnabled()&&item.isSelected&&item.isSelected()&&v.push(item.getValue())}),v},populate:function(items){var self=this;items=items||[],this.options.items=items,items=this._packageBtns(items),this.layouts?this.layouts.populate(items):this.layouts=BI.createWidget(BI.extend({element:this},this._packageLayout(items)))}}),BI.VirtualGroup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.virtual_group",BI.VirtualGroup),BI.Loader=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.Loader.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-loader",direction:"top",isDefaultInit:!0,logic:{dynamic:!0,scrolly:!0},el:{type:"bi.button_group"},items:[],itemsCreator:BI.emptyFn,onLoaded:BI.emptyFn,count:!1,prev:!1,next:{},hasPrev:BI.emptyFn,hasNext:BI.emptyFn})},_prevLoad:function(){var self=this,o=this.options;this.prev.setLoading(),o.itemsCreator.apply(this,[{times:--this.times},function(){self.prev.setLoaded(),self.prependItems.apply(self,arguments)}])},_nextLoad:function(){var self=this,o=this.options;this.next.setLoading(),o.itemsCreator.apply(this,[{times:++this.times},function(){self.next.setLoaded(),self.addItems.apply(self,arguments)}])},_init:function(){BI.Loader.superclass._init.apply(this,arguments);var self=this,o=this.options;o.itemsCreator===!1&&(o.prev=!1,o.next=!1),o.prev!==!1&&(this.prev=BI.createWidget(BI.extend({type:"bi.loading_bar"},o.prev)),this.prev.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&self._prevLoad()})),this.button_group=BI.createWidget(o.el,{type:"bi.button_group",chooseType:0,items:o.items,behaviors:{},layouts:[{type:"bi.vertical"}],value:o.value}),this.button_group.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.Loader.EVENT_CHANGE,obj)}),o.next!==!1&&(this.next=BI.createWidget(BI.extend({type:"bi.loading_bar"},o.next)),this.next.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&self._nextLoad()})),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction),BI.extend({scrolly:!0},o.logic,{items:BI.LogicFactory.createLogicItemsByDirection(o.direction,this.prev,this.button_group,this.next)})))),o.isDefaultInit&&BI.isEmpty(o.items)&&BI.nextTick(BI.bind(function(){o.isDefaultInit&&BI.isEmpty(o.items)&&this._populate()},this)),BI.isNotEmptyArray(o.items)&&this._populate(o.items)},hasPrev:function(){var o=this.options;return BI.isNumber(o.count)?this.count0&&args.push(keyword),BI.Maskers.show(self.getName()),self.popupView.populate.apply(self.popupView,args),o.isAutoSync&&o.adapter&&o.adapter.getValue&&self.popupView.setValue(o.adapter.getValue()),self.popupView.loaded&&self.popupView.loaded(),self.fireEvent(BI.Searcher.EVENT_SEARCHING)}})}},setAdapter:function(adapter){this.options.adapter=adapter,BI.Maskers.remove(this.getName())},doSearch:function(){this.isSearching()&&this._search()},stopSearch:function(){this._stopSearch();try{this.editor.blur()}catch(e){if(!this.editor.blur)throw new Error("editor没有实现blur方法")}finally{this.editor.setValue("")}},isSearching:function(){return this._isSearching},isViewVisible:function(){return this.editor.isEnabled()&&BI.Maskers.isVisible(this.getName())},getView:function(){return this.popupView},hasMatched:function(){return this._assertPopupView(),this.popupView.hasMatched()},adjustHeight:function(){BI.Maskers.has(this.getName())&&BI.Maskers.get(this.getName()).isVisible()&&BI.Maskers.show(this.getName())},adjustView:function(){this.isViewVisible()&&BI.Maskers.show(this.getName())},setValue:function(v){BI.isNull(this.popupView)?this.options.popup.value=v:this.popupView.setValue(v)},getKeyword:function(){return this.editor.getValue()},getKeywords:function(){return this.editor.getKeywords()},getValue:function(){var o=this.options;return o.isAutoSync&&o.adapter&&o.adapter.getValue?o.adapter.getValue():this.isSearching()?this.popupView.getValue():o.adapter&&o.adapter.getValue?o.adapter.getValue():BI.isNull(this.popupView)?o.popup.value:this.popupView.getValue()},populate:function(result,searchResult,keyword){var o=this.options;this._assertPopupView(),this.popupView.populate.apply(this.popupView,arguments),o.isAutoSync&&o.adapter&&o.adapter.getValue&&this.popupView.setValue(o.adapter.getValue())},empty:function(){this.popupView&&this.popupView.empty()},destroyed:function(){BI.Maskers.remove(this.getName())}}),BI.Searcher.EVENT_CHANGE="EVENT_CHANGE",BI.Searcher.EVENT_START="EVENT_START",BI.Searcher.EVENT_STOP="EVENT_STOP",BI.Searcher.EVENT_PAUSE="EVENT_PAUSE",BI.Searcher.EVENT_SEARCHING="EVENT_SEARCHING",BI.Searcher.EVENT_AFTER_INIT="EVENT_AFTER_INIT",BI.shortcut("bi.searcher",BI.Searcher),BI.Switcher=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.Switcher.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-switcher",direction:BI.Direction.Top,trigger:"click",toggle:!0,el:{},popup:{},adapter:null,masker:{},switcherClass:"bi-switcher-popup",hoverClass:"bi-switcher-hover"})},_init:function(){BI.Switcher.superclass._init.apply(this,arguments);var self=this,o=this.options;this._initSwitcher(),this._initPullDownAction(),this.switcher.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){self.isEnabled()&&self.isValid()&&(type===BI.Events.EXPAND&&self._popupView(),type===BI.Events.COLLAPSE&&self._hideView(),type===BI.Events.EXPAND&&(self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),self.fireEvent(BI.Switcher.EVENT_EXPAND)),type===BI.Events.COLLAPSE&&(self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),self.isViewVisible()&&self.fireEvent(BI.Switcher.EVENT_COLLAPSE)),type===BI.Events.CLICK&&self.fireEvent(BI.Switcher.EVENT_TRIGGER_CHANGE,value,obj))}),this.element.hover(function(){self.isEnabled()&&self.switcher.isEnabled()&&self.element.addClass(o.hoverClass)},function(){self.isEnabled()&&self.switcher.isEnabled()&&self.element.removeClass(o.hoverClass)}),BI.createWidget({type:"bi.vertical",scrolly:!1,element:this,items:[{el:this.switcher}]}),o.isDefaultInit&&this._assertPopupView()},_toggle:function(){this._assertPopupView(),this.isExpanded()?this._hideView():this.isEnabled()&&this._popupView()},_initPullDownAction:function(){var self=this,o=this.options,evs=this.options.trigger.split(",");BI.each(evs,function(i,e){switch(e){case"hover":self.element[e](function(e){self.isEnabled()&&self.switcher.isEnabled()&&(self._popupView(),self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.EXPAND,"",self.switcher),self.fireEvent(BI.Switcher.EVENT_EXPAND))},function(){self.isEnabled()&&self.switcher.isEnabled()&&o.toggle&&(self._hideView(),self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.COLLAPSE,"",self.switcher),self.fireEvent(BI.Switcher.EVENT_COLLAPSE))});break;default:e&&self.element.off(e+"."+self.getName()).on(e+"."+self.getName(),BI.debounce(function(e){self.switcher.element.__isMouseInBounds__(e)&&self.isEnabled()&&self.switcher.isEnabled()&&(o.toggle?self._toggle():self._popupView(),self.isExpanded()?(self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.EXPAND,"",self.switcher),self.fireEvent(BI.Switcher.EVENT_EXPAND)):(self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.COLLAPSE,"",self.switcher),self.fireEvent(BI.Switcher.EVENT_COLLAPSE)))},BI.EVENT_RESPONSE_TIME,{leading:!0,trailing:!1}))}})},_initSwitcher:function(){this.switcher=BI.createWidget(this.options.el,{value:this.options.value})},_assertPopupView:function(){var self=this,o=this.options;this._created||(this.popupView=BI.createWidget(o.popup,{type:"bi.button_group",element:o.adapter&&BI.Maskers.create(this.getName(),o.adapter,BI.extend({container:this},o.masker)),cls:"switcher-popup",layouts:[{type:"bi.vertical",hgap:0,vgap:0}],value:o.value},this),this.popupView.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.Switcher.EVENT_CHANGE,value,obj)}),o.direction===BI.Direction.Custom||o.adapter||BI.createWidget({type:"bi.vertical",scrolly:!1,element:this,items:[{el:this.popupView}]}),this._created=!0,BI.nextTick(function(){self.fireEvent(BI.Switcher.EVENT_AFTER_INIT)}))},_hideView:function(){this.fireEvent(BI.Switcher.EVENT_BEFORE_HIDEVIEW);var self=this,o=this.options;o.adapter?BI.Maskers.hide(self.getName()):self.popupView&&self.popupView.setVisible(!1),BI.nextTick(function(){o.adapter?BI.Maskers.hide(self.getName()):self.popupView&&self.popupView.setVisible(!1),self.element.removeClass(o.switcherClass),self.fireEvent(BI.Switcher.EVENT_AFTER_HIDEVIEW)})},_popupView:function(){var self=this,o=this.options;this._assertPopupView(),this.fireEvent(BI.Switcher.EVENT_BEFORE_POPUPVIEW),o.adapter?BI.Maskers.show(this.getName()):self.popupView.setVisible(!0),BI.nextTick(function(name){o.adapter?BI.Maskers.show(name):self.popupView.setVisible(!0),self.element.addClass(o.switcherClass),self.fireEvent(BI.Switcher.EVENT_AFTER_POPUPVIEW)},this.getName())},populate:function(items){this._assertPopupView(),this.popupView.populate.apply(this.popupView,arguments),this.switcher.populate.apply(this.switcher,arguments)},_setEnable:function(arg){BI.Switcher.superclass._setEnable.apply(this,arguments),!arg&&this.isViewVisible()&&this._hideView()},setValue:function(v){this.switcher.setValue(v),BI.isNull(this.popupView)?this.options.popup.value=v:this.popupView.setValue(v)},getValue:function(){return BI.isNull(this.popupView)?this.options.popup.value:this.popupView.getValue()},setAdapter:function(adapter){this.options.adapter=adapter,BI.Maskers.remove(this.getName())},isViewVisible:function(){return this.isEnabled()&&this.switcher.isEnabled()&&(this.options.adapter?BI.Maskers.isVisible(this.getName()):this.popupView&&this.popupView.isVisible())},isExpanded:function(){return this.isViewVisible()},showView:function(){this.isEnabled()&&this.switcher.isEnabled()&&this._popupView()},hideView:function(){this._hideView()},getView:function(){return this.popupView},adjustView:function(){this.isViewVisible()&&BI.Maskers.show(this.getName())},getAllLeaves:function(){return this.popupView&&this.popupView.getAllLeaves()},getNodeById:function(id){return this.switcher.attr("id")===id?this.switcher:this.popupView&&this.popupView.getNodeById(id)},getNodeByValue:function(value){return this.switcher.getValue()===value?this.switcher:this.popupView&&this.popupView.getNodeByValue(value)},empty:function(){this.popupView&&this.popupView.empty()},destroy:function(){BI.Switcher.superclass.destroy.apply(this,arguments)}}),BI.Switcher.EVENT_EXPAND="EVENT_EXPAND",BI.Switcher.EVENT_COLLAPSE="EVENT_COLLAPSE",BI.Switcher.EVENT_TRIGGER_CHANGE="EVENT_TRIGGER_CHANGE",BI.Switcher.EVENT_CHANGE="EVENT_CHANGE",BI.Switcher.EVENT_AFTER_INIT="EVENT_AFTER_INIT",BI.Switcher.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.Switcher.EVENT_AFTER_POPUPVIEW="EVENT_AFTER_POPUPVIEW",BI.Switcher.EVENT_BEFORE_HIDEVIEW="EVENT_BEFORE_HIDEVIEW",BI.Switcher.EVENT_AFTER_HIDEVIEW="EVENT_AFTER_HIDEVIEW",BI.shortcut("bi.switcher",BI.Switcher),BI.Tab=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.Tab.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-tab",direction:"top",single:!1,logic:{dynamic:!1},showIndex:!1,tab:!1,cardCreator:function(v){return BI.createWidget()}})},render:function(){var self=this,o=this.options;BI.isObject(o.tab)&&(this.tab=BI.createWidget(this.options.tab,{type:"bi.button_group"}),this.tab.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)})),this.cardMap={},this.layout=BI.createWidget({type:"bi.card"}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction),BI.extend({},o.logic,{items:BI.LogicFactory.createLogicItemsByDirection(o.direction,this.tab,this.layout)}))));var listener=new BI.ShowListener({eventObj:this.tab,cardLayout:this.layout,cardCreator:function(v){var card=o.cardCreator.apply(self,arguments);return self.cardMap[v]=card,card},afterCardShow:function(v){self._deleteOtherCards(v),self.curr=v}});listener.on(BI.ShowListener.EVENT_CHANGE,function(value){self.fireEvent(BI.Tab.EVENT_CHANGE,value,self)})},_deleteOtherCards:function(currCardName){var self=this,o=this.options;o.single===!0&&BI.each(this.cardMap,function(name,card){name!==currCardName+""&&(self.layout.deleteCardByName(name),delete self.cardMap[name])})},_assertCard:function(v){if(!this.layout.isCardExisted(v)){var card=this.options.cardCreator(v);this.cardMap[v]=card,this.layout.addCardByName(v,card)}},mounted:function(){var o=this.options;o.showIndex!==!1&&this.setSelect(o.showIndex)},setSelect:function(v){this.tab&&this.tab.setValue(v),this._assertCard(v),this.layout.showCardByName(v),this._deleteOtherCards(v),this.curr!==v&&(this.curr=v)},removeTab:function(cardname){var self=this,o=this.options;BI.any(this.cardMap,function(name,card){if(BI.isEqual(name,cardname+""))return self.layout.deleteCardByName(name),delete self.cardMap[name],!0})},getSelect:function(){return this.curr},getSelectedTab:function(){return this.layout.getShowingCard()},getTab:function(v){return this._assertCard(v),this.layout.getCardByName(v)},setValue:function(v){var card=this.layout.getShowingCard();card&&card.setValue(v)},getValue:function(){var card=this.layout.getShowingCard();if(card)return card.getValue()},populate:function(){var card=this.layout.getShowingCard();if(card)return card.populate&&card.populate.apply(card,arguments)},empty:function(){this.layout.deleteAllCard(),this.cardMap={}},destroy:function(){this.cardMap={},BI.Tab.superclass.destroy.apply(this,arguments)}}),BI.Tab.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.tab",BI.Tab),BI.EL=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.EL.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-el",el:{},layout:{}})},_init:function(){BI.EL.superclass._init.apply(this,arguments);var self=this,o=this.options;this.ele=BI.createWidget(o.el),BI.createWidget(o.layout,{type:"bi.adaptive",element:this,items:[this.ele]}),this.ele.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)})},setValue:function(v){this.ele.setValue(v)},getValue:function(){return this.ele.getValue()},populate:function(){this.ele.populate.apply(this,arguments)}}),BI.shortcut("bi.el",BI.EL),BI.Msg=function(){var messageShow,$mask,$pop,toastStack=[];return{alert:function(title,message,callback){this._show(!1,title,message,callback)},confirm:function(title,message,callback){this._show(!0,title,message,callback)},prompt:function(title,message,value,callback,min_width){},toast:function(message,options,context){options=options||{},context=context||BI.Widget._renderEngine.createElement("body");var level=options.level||"normal",autoClose=!!BI.isNull(options.autoClose)||options.autoClose,toast=BI.createWidget({type:"bi.toast",cls:"bi-message-animate bi-message-leave",level:level,autoClose:autoClose,text:message,listeners:[{eventName:BI.Toast.EVENT_DESTORY,action:function(){BI.remove(toastStack,toast.element);var _height=10;BI.each(toastStack,function(i,element){element.css({top:_height}),_height+=element.outerHeight()+10})}}]}),height=10;BI.each(toastStack,function(i,element){height+=element.outerHeight()+10}),BI.createWidget({type:"bi.absolute",element:context,items:[{el:toast,left:"50%",top:height}]}),toastStack.push(toast.element),toast.element.css({"margin-left":-1*toast.element.outerWidth()/2}),toast.element.removeClass("bi-message-leave").addClass("bi-message-enter"),autoClose&&BI.delay(function(){toast.element.removeClass("bi-message-enter").addClass("bi-message-leave"),toast.destroy()},5e3)},_show:function(hasCancel,title,message,callback){$mask=BI.Widget._renderEngine.createElement('
      ').css({position:"absolute",zIndex:BI.zIndex_tip-2,top:0,left:0,right:0,bottom:0,opacity:.5}).appendTo("body"),$pop=BI.Widget._renderEngine.createElement('
      ').css({position:"absolute",zIndex:BI.zIndex_tip-1,top:0,left:0,right:0,bottom:0}).appendTo("body");var close=function(){messageShow.destroy(),$mask.remove()},controlItems=[];hasCancel===!0&&controlItems.push({el:{type:"bi.button",text:BI.i18nText("BI-Basic_Cancel"),level:"ignore",handler:function(){close(),BI.isFunction(callback)&&callback.apply(null,[!1])}}}),controlItems.push({el:{type:"bi.button",text:BI.i18nText("BI-Basic_OK"),handler:function(){close(),BI.isFunction(callback)&&callback.apply(null,[!0])}}});var conf={element:$pop,type:"bi.center_adapt",items:[{type:"bi.border",cls:"bi-card",items:{north:{el:{type:"bi.border",cls:"bi-message-title bi-background",items:{center:{el:{type:"bi.label",cls:"bi-font-bold",text:title||BI.i18nText("BI-Basic_Prompt"),textAlign:"left",hgap:20,height:40}},east:{el:{type:"bi.icon_button",cls:"bi-message-close close-font",handler:function(){close(),BI.isFunction(callback)&&callback.apply(null,[!1])}},width:60}}},height:40},center:{el:{type:"bi.label",vgap:10,hgap:20,whiteSpace:"normal",text:message}},south:{el:{type:"bi.absolute",items:[{el:{type:"bi.right_vertical_adapt",lgap:10,items:controlItems},top:0,left:20,right:20,bottom:0}]},height:44}},width:450,height:200}]};messageShow=BI.createWidget(conf)}}}(),BI.GridView=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.GridView.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-grid-view",overflowX:!0,overflowY:!0,overscanColumnCount:0,overscanRowCount:0,rowHeightGetter:BI.emptyFn,columnWidthGetter:BI.emptyFn,scrollLeft:0,scrollTop:0,items:[]})},_init:function(){BI.GridView.superclass._init.apply(this,arguments);var self=this,o=this.options;this.renderedCells=[],this.renderedKeys=[],this.renderRange={},this._scrollLock=!1,this._debounceRelease=BI.debounce(function(){self._scrollLock=!1},1e3/60),this.container=BI.createWidget({type:"bi.absolute"}),this.element.scroll(function(){self._scrollLock!==!0&&(o.scrollLeft=self.element.scrollLeft(),o.scrollTop=self.element.scrollTop(),self._calculateChildrenToRender(),self.fireEvent(BI.GridView.EVENT_SCROLL,{scrollLeft:o.scrollLeft,scrollTop:o.scrollTop}))}),BI.createWidget({type:"bi.vertical",element:this,scrollable:o.overflowX===!0&&o.overflowY===!0,scrolly:o.overflowX===!1&&o.overflowY===!0,scrollx:o.overflowX===!0&&o.overflowY===!1,items:[this.container]}),o.items.length>0&&this._populate()},mounted:function(){var o=this.options;0===o.scrollLeft&&0===o.scrollTop||(this.element.scrollTop(o.scrollTop),this.element.scrollLeft(o.scrollLeft))},_getOverscanIndices:function(cellCount,overscanCellsCount,startIndex,stopIndex){return{overscanStartIndex:Math.max(0,startIndex-overscanCellsCount),overscanStopIndex:Math.min(cellCount-1,stopIndex+overscanCellsCount)}},_calculateChildrenToRender:function(){var self=this,o=this.options,width=o.width,height=o.height,scrollLeft=BI.clamp(o.scrollLeft,0,this._getMaxScrollLeft()),scrollTop=BI.clamp(o.scrollTop,0,this._getMaxScrollTop()),overscanColumnCount=o.overscanColumnCount,overscanRowCount=o.overscanRowCount;if(height>0&&width>0){var visibleColumnIndices=this._columnSizeAndPositionManager.getVisibleCellRange(width,scrollLeft),visibleRowIndices=this._rowSizeAndPositionManager.getVisibleCellRange(height,scrollTop);if(BI.isEmpty(visibleColumnIndices)||BI.isEmpty(visibleRowIndices))return;var horizontalOffsetAdjustment=this._columnSizeAndPositionManager.getOffsetAdjustment(width,scrollLeft),verticalOffsetAdjustment=this._rowSizeAndPositionManager.getOffsetAdjustment(height,scrollTop);this._renderedColumnStartIndex=visibleColumnIndices.start,this._renderedColumnStopIndex=visibleColumnIndices.stop,this._renderedRowStartIndex=visibleRowIndices.start,this._renderedRowStopIndex=visibleRowIndices.stop;var overscanColumnIndices=this._getOverscanIndices(this.columnCount,overscanColumnCount,this._renderedColumnStartIndex,this._renderedColumnStopIndex),overscanRowIndices=this._getOverscanIndices(this.rowCount,overscanRowCount,this._renderedRowStartIndex,this._renderedRowStopIndex),columnStartIndex=overscanColumnIndices.overscanStartIndex,columnStopIndex=overscanColumnIndices.overscanStopIndex,rowStartIndex=overscanRowIndices.overscanStartIndex,rowStopIndex=overscanRowIndices.overscanStopIndex,minRowDatum=this._rowSizeAndPositionManager.getSizeAndPositionOfCell(rowStartIndex),minColumnDatum=this._columnSizeAndPositionManager.getSizeAndPositionOfCell(columnStartIndex),maxRowDatum=this._rowSizeAndPositionManager.getSizeAndPositionOfCell(rowStopIndex),maxColumnDatum=this._columnSizeAndPositionManager.getSizeAndPositionOfCell(columnStopIndex),top=minRowDatum.offset+verticalOffsetAdjustment,left=minColumnDatum.offset+horizontalOffsetAdjustment,bottom=maxRowDatum.offset+verticalOffsetAdjustment+maxRowDatum.size,right=maxColumnDatum.offset+horizontalOffsetAdjustment+maxColumnDatum.size;if(top>=this.renderRange.minY&&bottom<=this.renderRange.maxY&&left>=this.renderRange.minX&&right<=this.renderRange.maxX)return;for(var renderedCells=[],renderedKeys={},renderedWidgets={},minX=this._getMaxScrollLeft(),minY=this._getMaxScrollTop(),maxX=0,maxY=0,count=0,rowIndex=rowStartIndex;rowIndex<=rowStopIndex;rowIndex++)for(var rowDatum=this._rowSizeAndPositionManager.getSizeAndPositionOfCell(rowIndex),columnIndex=columnStartIndex;columnIndex<=columnStopIndex;columnIndex++){var key=rowIndex+"-"+columnIndex,columnDatum=this._columnSizeAndPositionManager.getSizeAndPositionOfCell(columnIndex),index=this.renderedKeys[key]&&this.renderedKeys[key][2],child;index>=0?(columnDatum.size!==this.renderedCells[index]._width&&(this.renderedCells[index]._width=columnDatum.size,this.renderedCells[index].el.setWidth(columnDatum.size)),rowDatum.size!==this.renderedCells[index]._height&&(this.renderedCells[index]._height=rowDatum.size,this.renderedCells[index].el.setHeight(rowDatum.size)),this.renderedCells[index]._left!==columnDatum.offset+horizontalOffsetAdjustment&&this.renderedCells[index].el.element.css("left",columnDatum.offset+horizontalOffsetAdjustment+"px"),this.renderedCells[index]._top!==rowDatum.offset+verticalOffsetAdjustment&&this.renderedCells[index].el.element.css("top",rowDatum.offset+verticalOffsetAdjustment+"px"),renderedCells.push(child=this.renderedCells[index])):(child=BI.createWidget(BI.extend({type:"bi.label",width:columnDatum.size,height:rowDatum.size},o.items[rowIndex][columnIndex],{cls:(o.items[rowIndex][columnIndex].cls||"")+" grid-cell"+(0===rowIndex?" first-row":"")+(0===columnIndex?" first-col":""),_rowIndex:rowIndex,_columnIndex:columnIndex,_left:columnDatum.offset+horizontalOffsetAdjustment,_top:rowDatum.offset+verticalOffsetAdjustment}),this),renderedCells.push({el:child,left:columnDatum.offset+horizontalOffsetAdjustment,top:rowDatum.offset+verticalOffsetAdjustment,_left:columnDatum.offset+horizontalOffsetAdjustment,_top:rowDatum.offset+verticalOffsetAdjustment,_width:columnDatum.size,_height:rowDatum.size})),minX=Math.min(minX,columnDatum.offset+horizontalOffsetAdjustment),maxX=Math.max(maxX,columnDatum.offset+horizontalOffsetAdjustment+columnDatum.size),minY=Math.min(minY,rowDatum.offset+verticalOffsetAdjustment),maxY=Math.max(maxY,rowDatum.offset+verticalOffsetAdjustment+rowDatum.size),renderedKeys[key]=[rowIndex,columnIndex,count],renderedWidgets[count]=child,count++}var existSet={},addSet={},deleteArray=[];BI.each(renderedKeys,function(i,key){self.renderedKeys[i]?existSet[i]=key:addSet[i]=key}),BI.each(this.renderedKeys,function(i,key){existSet[i]||addSet[i]||deleteArray.push(key[2])}),BI.each(deleteArray,function(i,index){self.renderedCells[index].el._destroy()});var addedItems=[];BI.each(addSet,function(index,key){addedItems.push(renderedCells[key[2]])}),this.container.addItems(addedItems,this),this.container._children=renderedWidgets,this.container.attr("items",renderedCells),this.renderedCells=renderedCells,this.renderedKeys=renderedKeys,this.renderRange={minX:minX,minY:minY,maxX:maxX,maxY:maxY}}},_getRealMaxScrollLeft:function(){var o=this.options,totalWidth=0;return BI.count(0,this.columnCount,function(index){totalWidth+=o.columnWidthGetter(index)}),Math.max(0,totalWidth-this.options.width+(this.options.overflowX?BI.DOM.getScrollWidth():0))},_getMaxScrollLeft:function(){return Math.max(0,this._columnSizeAndPositionManager.getTotalSize()-this.options.width+(this.options.overflowX?BI.DOM.getScrollWidth():0))},_getMaxScrollTop:function(){return Math.max(0,this._rowSizeAndPositionManager.getTotalSize()-this.options.height+(this.options.overflowY?BI.DOM.getScrollWidth():0))},_populate:function(items){var self=this,o=this.options;this._reRange(),this.columnCount=0,this.rowCount=0,items&&items!==this.options.items&&(this.options.items=items),BI.isNumber(o.columnCount)?this.columnCount=o.columnCount:o.items.length>0&&(this.columnCount=o.items[0].length),BI.isNumber(o.rowCount)?this.rowCount=o.rowCount:this.rowCount=o.items.length,this.container.setWidth(this.columnCount*o.estimatedColumnSize),this.container.setHeight(this.rowCount*o.estimatedRowSize),this._columnSizeAndPositionManager=new BI.ScalingCellSizeAndPositionManager(this.columnCount,o.columnWidthGetter,o.estimatedColumnSize),this._rowSizeAndPositionManager=new BI.ScalingCellSizeAndPositionManager(this.rowCount,o.rowHeightGetter,o.estimatedRowSize),this._calculateChildrenToRender();try{this.element.scrollTop(o.scrollTop),this.element.scrollLeft(o.scrollLeft)}catch(e){}},setScrollLeft:function(scrollLeft){this.options.scrollLeft!==scrollLeft&&(this._scrollLock=!0,this.options.scrollLeft=BI.clamp(scrollLeft||0,0,this._getRealMaxScrollLeft()),this._debounceRelease(),this._calculateChildrenToRender(),this.element.scrollLeft(this.options.scrollLeft))},setScrollTop:function(scrollTop){this.options.scrollTop!==scrollTop&&(this._scrollLock=!0,this.options.scrollTop=BI.clamp(scrollTop||0,0,this._getMaxScrollTop()),this._debounceRelease(),this._calculateChildrenToRender(),this.element.scrollTop(this.options.scrollTop))},setColumnCount:function(columnCount){this.options.columnCount=columnCount},setRowCount:function(rowCount){this.options.rowCount=rowCount},setOverflowX:function(b){var self=this;this.options.overflowX!==!!b&&(this.options.overflowX=!!b,BI.nextTick(function(){self.element.css({overflowX:b?"auto":"hidden"})}))},setOverflowY:function(b){var self=this;this.options.overflowY!==!!b&&(this.options.overflowY=!!b,BI.nextTick(function(){self.element.css({overflowY:b?"auto":"hidden"})}))},getScrollLeft:function(){return this.options.scrollLeft},getScrollTop:function(){return this.options.scrollTop},getMaxScrollLeft:function(){return this._getMaxScrollLeft()},getMaxScrollTop:function(){return this._getMaxScrollTop()},setEstimatedColumnSize:function(width){this.options.estimatedColumnSize=width},setEstimatedRowSize:function(height){this.options.estimatedRowSize=height},_reRange:function(){this.renderRange={}},_clearChildren:function(){this.container._children={},this.container.attr("items",[])},restore:function(){BI.each(this.renderedCells,function(i,cell){cell.el._destroy()}),this._clearChildren(),this.renderedCells=[],this.renderedKeys=[],this.renderRange={},this._scrollLock=!1},populate:function(items){items&&items!==this.options.items&&this.restore(),this._populate(items)}}),BI.GridView.EVENT_SCROLL="EVENT_SCROLL", +BI.shortcut("bi.grid_view",BI.GridView),BI.Popover=BI.inherit(BI.Widget,{_constant:{SIZE:{SMALL:"small",NORMAL:"normal",BIG:"big"},HEADER_HEIGHT:40},_defaultConfig:function(){return BI.extend(BI.Popover.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-popover bi-card bi-border-radius",size:"normal",logic:{dynamic:!1},header:null,body:null,footer:null,closable:!0})},render:function(){var self=this,o=this.options;this.startX=0,this.startY=0,this.tracker=new BI.MouseMoveTracker(function(deltaX,deltaY){var size=self._calculateSize(),W=BI.Widget._renderEngine.createElement("body").width(),H=BI.Widget._renderEngine.createElement("body").height();self.startX+=deltaX,self.startY+=deltaY,self.element.css({left:BI.clamp(self.startX,0,W-self.element.width())+"px",top:BI.clamp(self.startY,0,H-self.element.height())+"px"}),BI.Resizers._resize()},function(){self.tracker.releaseMouseMoves()},_global);var items=[{el:{type:"bi.htape",cls:"bi-message-title bi-header-background",ref:function(_ref){self.dragger=_ref},items:[{type:"bi.absolute",items:[{el:BI.isPlainObject(o.header)?BI.createWidget(o.header,{extraCls:"bi-font-bold"}):{type:"bi.label",cls:"bi-font-bold",height:this._constant.HEADER_HEIGHT,text:o.header,title:o.header,textAlign:"left"},left:20,top:0,right:0,bottom:0}]},{el:o.closable?{type:"bi.icon_button",cls:"bi-message-close close-font",height:this._constant.HEADER_HEIGHT,handler:function(){self.close()}}:{type:"bi.layout"},width:56}],height:this._constant.HEADER_HEIGHT},height:this._constant.HEADER_HEIGHT},{el:o.logic.dynamic?{type:"bi.vertical",scrolly:!1,cls:"popover-body",ref:function(){self.body=this},hgap:20,tgap:10,items:[{el:BI.createWidget(o.body)}]}:{type:"bi.absolute",items:[{el:BI.createWidget(o.body),left:20,top:10,right:20,bottom:0}]}}];o.footer&&items.push({el:{type:"bi.absolute",items:[{el:BI.createWidget(o.footer),left:20,top:0,right:20,bottom:0}],height:44},height:44});var size=this._calculateSize();return BI.extend({type:o.logic.dynamic?"bi.vertical":"bi.vtape",items:items,width:size.width},o.logic.dynamic?{type:"bi.vertical",scrolly:!1}:{type:"bi.vtape",height:size.height})},mounted:function(){var self=this,o=this.options;if(this.dragger.element.mousedown(function(e){var pos=self.element.offset();self.startX=pos.left,self.startY=pos.top,self.tracker.captureMouseMoves(e)}),o.logic.dynamic){var size=this._calculateSize(),height=this.element.height(),compareHeight=BI.clamp(height,size.height,600)-(o.footer?84:44);this.body.element.height(compareHeight)}},_calculateSize:function(){var o=this.options,size={};if(BI.isNotNull(o.size))switch(o.size){case this._constant.SIZE.SMALL:size.width=450,size.height=200;break;case this._constant.SIZE.BIG:size.width=900,size.height=500;break;default:size.width=550,size.height=500}return{width:o.width||size.width,height:o.height||size.height}},hide:function(){},open:function(){this.show(),this.fireEvent(BI.Popover.EVENT_OPEN,arguments)},close:function(){this.hide(),this.fireEvent(BI.Popover.EVENT_CLOSE,arguments)},setZindex:function(zindex){this.element.css({"z-index":zindex})},destroyed:function(){}}),BI.shortcut("bi.popover",BI.Popover),BI.BarPopover=BI.inherit(BI.Popover,{_defaultConfig:function(){return BI.extend(BI.BarPopover.superclass._defaultConfig.apply(this,arguments),{btns:[BI.i18nText("BI-Basic_Sure"),BI.i18nText("BI-Basic_Cancel")]})},beforeCreate:function(){var self=this,o=this.options;o.footer||(o.footer={type:"bi.right_vertical_adapt",lgap:10,items:[{type:"bi.button",text:this.options.btns[1],value:1,level:"ignore",handler:function(v){self.fireEvent(BI.Popover.EVENT_CANCEL,v),self.close(v)}},{type:"bi.button",text:this.options.btns[0],warningTitle:o.warningTitle,value:0,handler:function(v){self.fireEvent(BI.Popover.EVENT_CONFIRM,v),self.close(v)}}]})}}),BI.shortcut("bi.bar_popover",BI.BarPopover),BI.Popover.EVENT_CLOSE="EVENT_CLOSE",BI.Popover.EVENT_OPEN="EVENT_OPEN",BI.Popover.EVENT_CANCEL="EVENT_CANCEL",BI.Popover.EVENT_CONFIRM="EVENT_CONFIRM",BI.PopupView=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.PopupView.superclass._defaultConfig.apply(this,arguments),{_baseCls:"bi-popup-view",maxWidth:"auto",minWidth:100,minHeight:24,lgap:0,rgap:0,tgap:0,bgap:0,vgap:0,hgap:0,innerVGap:0,direction:BI.Direction.Top,stopEvent:!1,stopPropagation:!1,logic:{dynamic:!0},tool:!1,tabs:[],buttons:[],el:{type:"bi.button_group",items:[],chooseType:0,behaviors:{},layouts:[{type:"bi.vertical"}]}})},_init:function(){BI.PopupView.superclass._init.apply(this,arguments);var self=this,o=this.options,fn=function(e){e.stopPropagation()},stop=function(e){return e.stopEvent(),!1};this.element.css({"z-index":BI.zIndex_popup,"min-width":o.minWidth+"px","max-width":o.maxWidth+"px"}).bind({click:fn}),this.element.bind("mousewheel",fn),o.stopPropagation&&this.element.bind({mousedown:fn,mouseup:fn,mouseover:fn}),o.stopEvent&&this.element.bind({mousedown:stop,mouseup:stop,mouseover:stop}),this.tool=this._createTool(),this.tab=this._createTab(),this.view=this._createView(),this.toolbar=this._createToolBar(),this.view.on(BI.Controller.EVENT_CHANGE,function(type){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.PopupView.EVENT_CHANGE)}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction),BI.extend({},o.logic,{scrolly:!1,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,vgap:o.vgap,hgap:o.hgap,items:BI.LogicFactory.createLogicItemsByDirection(o.direction,BI.extend({cls:"list-view-outer bi-card list-view-shadow"},BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction),BI.extend({},o.logic,{items:BI.LogicFactory.createLogicItemsByDirection(o.direction,this.tool,this.tab,this.view,this.toolbar)}))))}))))},_createView:function(){var o=this.options;return this.button_group=BI.createWidget(o.el,{type:"bi.button_group",value:o.value}),this.button_group.element.css({"min-height":o.minHeight+"px","padding-top":o.innerVGap+"px","padding-bottom":o.innerVGap+"px"}),this.button_group},_createTool:function(){var o=this.options;if(!1!==o.tool)return BI.createWidget(o.tool)},_createTab:function(){var o=this.options;if(0!==o.tabs.length)return BI.createWidget({type:"bi.center",cls:"list-view-tab",height:25,items:o.tabs,value:o.value})},_createToolBar:function(){var o=this.options;if(0!==o.buttons.length)return BI.createWidget({type:"bi.center",cls:"list-view-toolbar bi-high-light bi-split-top",height:24,items:BI.createItems(o.buttons,{once:!1,shadow:!0,isShadowShowingOnSelected:!0})})},getView:function(){return this.view},populate:function(items){this.view.populate.apply(this.view,arguments)},resetWidth:function(w){this.options.width=w,this.element.width(w)},resetHeight:function(h){var tbHeight=this.toolbar?this.toolbar.attr("height")||24:0,tabHeight=this.tab?this.tab.attr("height")||24:0,toolHeight=(this.tool&&this.tool.attr("height")||24)*(this.tool&&this.tool.isVisible()?1:0),resetHeight=h-tbHeight-tabHeight-toolHeight-2*this.options.innerVGap;this.view.resetHeight?this.view.resetHeight(resetHeight):this.view.element.css({"max-height":resetHeight+"px"})},setValue:function(selectedValues){this.tab&&this.tab.setValue(selectedValues),this.view.setValue(selectedValues)},getValue:function(){return this.view.getValue()}}),BI.PopupView.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.popup_view",BI.PopupView),BI.SearcherView=BI.inherit(BI.Pane,{_defaultConfig:function(){var conf=BI.SearcherView.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-searcher-view bi-card",tipText:BI.i18nText("BI-No_Select"),chooseType:BI.Selection.Single,matcher:{type:"bi.button_group",behaviors:{redmark:function(){return!0}},items:[],layouts:[{type:"bi.vertical"}]},searcher:{type:"bi.button_group",behaviors:{redmark:function(){return!0}},items:[],layouts:[{type:"bi.vertical"}]}})},_init:function(){BI.SearcherView.superclass._init.apply(this,arguments);var self=this,o=this.options;this.matcher=BI.createWidget(o.matcher,{type:"bi.button_group",chooseType:o.chooseType,behaviors:{redmark:function(){return!0}},layouts:[{type:"bi.vertical"}],value:o.value}),this.matcher.on(BI.Controller.EVENT_CHANGE,function(type,val,ob){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.SearcherView.EVENT_CHANGE,val,ob)}),this.spliter=BI.createWidget({type:"bi.vertical",height:1,hgap:10,items:[{type:"bi.layout",height:1,cls:"searcher-view-spliter bi-background"}]}),this.searcher=BI.createWidget(o.searcher,{type:"bi.button_group",chooseType:o.chooseType,behaviors:{redmark:function(){return!0}},layouts:[{type:"bi.vertical"}],value:o.value}),this.searcher.on(BI.Controller.EVENT_CHANGE,function(type,val,ob){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.SearcherView.EVENT_CHANGE,val,ob)}),BI.createWidget({type:"bi.vertical",element:this,items:[this.matcher,this.spliter,this.searcher]})},startSearch:function(){},stopSearch:function(){},setValue:function(v){this.matcher.setValue(v),this.searcher.setValue(v)},getValue:function(){return this.matcher.getValue().concat(this.searcher.getValue())},populate:function(searchResult,matchResult,keyword){searchResult||(searchResult=[]),matchResult||(matchResult=[]),this.setTipVisible(searchResult.length+matchResult.length===0),this.spliter.setVisible(BI.isNotEmptyArray(matchResult)&&BI.isNotEmptyArray(searchResult)),this.matcher.populate(matchResult,keyword),this.searcher.populate(searchResult,keyword)},empty:function(){this.searcher.empty(),this.matcher.empty()},hasMatched:function(){return this.matcher.getAllButtons().length>0}}),BI.SearcherView.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.searcher_view",BI.SearcherView),BI.ListView=BI.inherit(BI.Widget,{props:function(){return{baseCls:"bi-list-view",overscanHeight:100,blockSize:10,scrollTop:0,el:{},items:[]}},init:function(){var self=this;this.renderedIndex=-1,this.cache={}},render:function(){var self=this,o=this.options;return{type:"bi.vertical",items:[BI.extend({type:"bi.vertical",scrolly:!1,ref:function(){self.container=this}},o.el)],element:this}},mounted:function(){var self=this,o=this.options;this._populate(),this.element.scroll(function(e){o.scrollTop=self.element.scrollTop(),self._calculateBlocksToRender()});var lastWidth=this.element.width(),lastHeight=this.element.height();BI.ResizeDetector.addResizeListener(this,function(){var width=self.element.width(),height=self.element.height();width===lastWidth&&height===lastHeight||(lastWidth=width,lastHeight=height,self._calculateBlocksToRender())})},_renderMoreIf:function(){for(var self=this,o=this.options,height=this.element.height(),minContentHeight=o.scrollTop+height+o.overscanHeight,index=this.cache[this.renderedIndex]&&this.cache[this.renderedIndex].index+o.blockSize||0,cnt=this.renderedIndex+1,lastHeight,getElementHeight=function(){return self.container.element.height()};(lastHeight=getElementHeight())pages&&(groups=pages),dict.index=Math.ceil((curr+(groups>1&&groups!==pages?1:0))/(0===groups?1:groups)),(!o.dynamicShow&&!o.dynamicShowPrevNext||curr>1)&&prev!==!1&&(BI.isKey(prev)?view.push({text:prev,value:"prev",disabled:pages===!1?o.hasPrev(curr)===!1:!(curr>1&&prev!==!1)}):view.push(BI.extend({disabled:pages===!1?o.hasPrev(curr)===!1:!(curr>1&&prev!==!1)},prev))),(!o.dynamicShow&&!o.dynamicShowFirstLast||dict.index>1&&0!==groups)&&first&&(view.push({text:first,value:"first",disabled:!(dict.index>1&&0!==groups)}),dict.index>1&&0!==groups&&view.push({type:"bi.label",cls:"page-ellipsis",text:"…"})),dict.poor=Math.floor((groups-1)/2),dict.start=dict.index>1?curr-dict.poor:1,dict.end=dict.index>1?function(){var max=curr+(groups-dict.poor-1);return max>pages?pages:max}():groups,dict.end-dict.start1&&0!==groups&&pages>groups&&dict.endgroups&&dict.endgroups&&dict.endgroups&&dict.end1},hasNext:function(v){v||(v=1);var o=this.options,pages=this.options.pages;return pages===!1?o.hasNext(v):vlastPage?lastPage:(firstPage=BI.result(o,"firstPage"),vo.pages?o.pages:v,this.currPage=v;this._populate()},getValue:function(){var val=this.button_group.getValue()[0];switch(val){case"prev":return-1;case"next":return 1;case"first":return BI.MIN;case"last":return BI.MAX;default:return val}},attr:function(key,value){BI.Pager.superclass.attr.apply(this,arguments),"curr"===key&&(this.currPage=BI.result(this.options,"curr"))},populate:function(){this._populate()}}),BI.Pager.EVENT_CHANGE="EVENT_CHANGE",BI.Pager.EVENT_AFTER_POPULATE="EVENT_AFTER_POPULATE",BI.shortcut("bi.pager",BI.Pager),BI.A=BI.inherit(BI.Text,{_defaultConfig:function(){var conf=BI.A.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-a display-block",href:"",target:"_blank",el:null,tagName:"a"})},_init:function(){var o=this.options;BI.A.superclass._init.apply(this,arguments),this.element.attr({href:o.href,target:o.target}),o.el&&BI.createWidget(o.el,{element:this})}}),BI.shortcut("bi.a",BI.A),BI.LoadingBar=BI.inherit(BI.Single,{_defaultConfig:function(){var conf=BI.LoadingBar.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-loading-bar bi-tips",height:30,handler:BI.emptyFn})},_init:function(){BI.LoadingBar.superclass._init.apply(this,arguments);var self=this;this.loaded=BI.createWidget({type:"bi.text_button",cls:"loading-text bi-list-item-simple",text:BI.i18nText("BI-Load_More"),width:120,handler:this.options.handler}),this.loaded.on(BI.Controller.EVENT_CHANGE,function(type){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.loading=BI.createWidget({type:"bi.layout",width:this.options.height,height:this.options.height,cls:"loading-background cursor-default"});var loaded=BI.createWidget({type:"bi.center_adapt",items:[this.loaded]}),loading=BI.createWidget({type:"bi.center_adapt",items:[this.loading]});this.cardLayout=BI.createWidget({type:"bi.card",element:this,items:[{el:loaded,cardName:"loaded"},{el:loading,cardName:"loading"}]}),this.invisible()},_reset:function(){this.visible(),this.loaded.setText(BI.i18nText("BI-Load_More")),this.loaded.enable()},setLoaded:function(){this._reset(),this.cardLayout.showCardByName("loaded")},setEnd:function(){this.setLoaded(),this.loaded.setText(BI.i18nText("BI-No_More_Data")),this.loaded.disable()},setLoading:function(){this._reset(),this.cardLayout.showCardByName("loading")}}),BI.shortcut("bi.loading_bar",BI.LoadingBar),BI.IconButton=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.IconButton.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{_baseCls:(conf._baseCls||"")+" bi-icon-button horizon-center",iconWidth:null,iconHeight:null})},_init:function(){BI.IconButton.superclass._init.apply(this,arguments);var o=this.options;this.element.css({textAlign:"center"}),this.icon=BI.createWidget({type:"bi.icon",width:o.iconWidth,height:o.iconHeight}),BI.isNumber(o.height)&&o.height>0&&BI.isNull(o.iconWidth)&&BI.isNull(o.iconHeight)?(this.element.css("lineHeight",o.height+"px"),BI.createWidget({type:"bi.default",element:this,items:[this.icon]})):(this.element.css("lineHeight","1"),BI.createWidget({element:this,type:"bi.center_adapt",items:[this.icon]}))},doClick:function(){BI.IconButton.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.IconButton.EVENT_CHANGE,this)}}),BI.IconButton.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.icon_button",BI.IconButton),BI.ImageButton=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.ImageButton.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-image-button",src:"",iconWidth:"100%",iconHeight:"100%"})},_init:function(){BI.ImageButton.superclass._init.apply(this,arguments);var o=this.options;this.image=BI.createWidget({type:"bi.img",width:o.iconWidth,height:o.iconHeight,src:o.src}),BI.isNumber(o.iconWidth)||BI.isNumber(o.iconHeight)?BI.createWidget({type:"bi.center_adapt",element:this,items:[this.image]}):BI.createWidget({type:"bi.adaptive",element:this,items:[this.image],scrollable:!1})},setWidth:function(w){BI.ImageButton.superclass.setWidth.apply(this,arguments),this.options.width=w},setHeight:function(h){BI.ImageButton.superclass.setHeight.apply(this,arguments),this.options.height=h},setImageWidth:function(w){this.image.setWidth(w)},setImageHeight:function(h){this.image.setHeight(h)},getImageWidth:function(){return this.image.element.width()},getImageHeight:function(){return this.image.element.height()},setSrc:function(src){this.options.src=src,this.image.setSrc(src)},getSrc:function(){return this.image.getSrc()},doClick:function(){BI.ImageButton.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.ImageButton.EVENT_CHANGE,this)}}),BI.ImageButton.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.image_button",BI.ImageButton),BI.Button=BI.inherit(BI.BasicButton,{_defaultConfig:function(props){var conf=BI.Button.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-button"+(BI.isIE()&&BI.isIE9Below()?" hack":""),minWidth:props.block===!0||props.clear===!0?0:80,height:24,shadow:props.clear!==!0,isShadowShowingOnSelected:!0,readonly:!0,iconCls:"",level:"common",block:!1,clear:!1,ghost:!1,textAlign:"center",whiteSpace:"nowrap",textWidth:null,textHeight:null,hgap:props.clear?0:10,vgap:0,tgap:0,bgap:0,lgap:0,rgap:0})},_init:function(){BI.Button.superclass._init.apply(this,arguments);var o=this.options,self=this;!BI.isNumber(o.height)||o.clear||o.block?o.clear||o.block?this.element.css({lineHeight:o.height+"px"}):this.element.css({lineHeight:o.height-2+"px"}):this.element.css({height:o.height+"px",lineHeight:o.height-2+"px"}),BI.isKey(o.iconCls)?(this.icon=BI.createWidget({type:"bi.icon_label",cls:o.iconCls,width:18,height:o.height-2,iconWidth:o.iconWidth,iconHeight:o.iconHeight}),this.text=BI.createWidget({type:"bi.label",text:o.text,value:o.value,height:o.height-2}),BI.createWidget({type:"bi.center_adapt",element:this,hgap:o.hgap,vgap:o.vgap,items:[{type:"bi.horizontal",items:[this.icon,this.text]}]})):this.text=BI.createWidget({type:"bi.label",textAlign:o.textAlign,whiteSpace:o.whiteSpace,textWidth:o.textWidth,textHeight:o.textHeight,hgap:o.hgap,vgap:o.vgap,tgap:o.tgap,bgap:o.bgap,lgap:o.lgap,rgap:o.rgap,element:this,text:o.text,value:o.value}),o.block===!0&&this.element.addClass("block"),o.clear===!0&&this.element.addClass("clear"),o.ghost===!0&&this.element.addClass("ghost"),o.minWidth>0&&this.element.css({"min-width":o.minWidth+"px"})},doClick:function(){BI.Button.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.Button.EVENT_CHANGE,this)},setText:function(text){BI.Button.superclass.setText.apply(this,arguments),this.text.setText(text)},setValue:function(text){BI.Button.superclass.setValue.apply(this,arguments),this.isReadOnly()||this.text.setValue(text)},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},destroy:function(){BI.Button.superclass.destroy.apply(this,arguments)}}),BI.shortcut("bi.button",BI.Button),BI.Button.EVENT_CHANGE="EVENT_CHANGE",BI.TextButton=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.TextButton.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-text-button",textAlign:"center",whiteSpace:"nowrap",textWidth:null,textHeight:null,hgap:0,lgap:0,rgap:0,text:"",py:""})},_init:function(){BI.TextButton.superclass._init.apply(this,arguments);var o=this.options;this.text=BI.createWidget({type:"bi.label",element:this,textAlign:o.textAlign,whiteSpace:o.whiteSpace,textWidth:o.textWidth,textHeight:o.textHeight,width:o.width,height:o.height,hgap:o.hgap,lgap:o.lgap,rgap:o.rgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword})},doClick:function(){BI.TextButton.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.TextButton.EVENT_CHANGE,this.getValue(),this)},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},setText:function(text){BI.TextButton.superclass.setText.apply(this,arguments),text=BI.isArray(text)?text.join(","):text,this.text.setText(text)},setStyle:function(style){this.text.setStyle(style)},setValue:function(text){BI.TextButton.superclass.setValue.apply(this,arguments),this.isReadOnly()||(text=BI.isArray(text)?text.join(","):text,this.text.setValue(text))}}),BI.TextButton.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.text_button",BI.TextButton),BI.BlankIconIconTextItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.BlankIconIconTextItem.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-blank-icon-text-item",logic:{dynamic:!1},iconCls1:"close-ha-font",iconCls2:"close-ha-font",blankWidth:0,iconHeight:null,iconWidth:null,textHgap:0,textVgap:0,textLgap:0,textRgap:0})},_init:function(){BI.BlankIconIconTextItem.superclass._init.apply(this,arguments);var o=this.options,c=this._const,blank=BI.createWidget({type:"bi.layout",width:o.blankWidth,height:o.height});this.text=BI.createWidget({type:"bi.label",cls:"list-item-text",textAlign:"left",hgap:o.textHgap,vgap:o.textVgap,lgap:o.textLgap,rgap:o.textRgap,text:o.text,value:o.value,keyword:o.keyword,height:o.height}),this.icon1=BI.createWidget({type:"bi.icon_button",cls:o.iconCls1,forceNotSelected:!0,width:o.height,height:o.height}),this.icon2=BI.createWidget({type:"bi.icon_button",cls:o.iconCls2,forceNotSelected:!0,width:o.height,height:o.height}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("horizontal",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("left",blank,this.icon1,this.icon2,this.text)}))))},doClick:function(){BI.BlankIconIconTextItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.BlankIconIconTextItem.EVENT_CHANGE,this.getValue(),this)},setSelected:function(b){BI.BlankIconIconTextItem.superclass.setSelected.apply(this,arguments),this.icon1.setSelected(b),this.icon2.setSelected(b)},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},getValue:function(){return this.text.getValue()},setText:function(){this.text.setText.apply(this.text,arguments)},getText:function(){return this.text.getText()},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)}}),BI.BlankIconIconTextItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.blank_icon_icon_text_item",BI.BlankIconIconTextItem),BI.BlankIconTextIconItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.BlankIconTextIconItem.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-blank-icon-text-icon-item",logic:{dynamic:!1},iconCls1:"close-ha-font",iconCls2:"close-ha-font",blankWidth:0,iconHeight:null,iconWidth:null,textHgap:0,textVgap:0,textLgap:0,textRgap:0})},_init:function(){BI.BlankIconTextIconItem.superclass._init.apply(this,arguments);var o=this.options,c=this._const;this.text=BI.createWidget({type:"bi.label",textAlign:"left",hgap:o.textHgap,vgap:o.textVgap,lgap:o.textLgap,rgap:o.textRgap,text:o.text,value:o.value,keyword:o.keyword,height:o.height});var icon1=BI.createWidget({type:"bi.icon_label",cls:o.iconCls1,width:o.height,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight});BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.icon_label",cls:o.iconCls2,width:o.height,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight},top:0,bottom:0,right:0}]}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("horizontal",BI.extend(o.logic,{ +items:BI.LogicFactory.createLogicItemsByDirection("left",{type:"bi.layout",width:o.blankWidth},icon1,this.text,{type:"bi.layout",width:o.height})}))))},doClick:function(){BI.BlankIconTextIconItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.BlankIconTextIconItem.EVENT_CHANGE,this.getValue(),this)},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},getValue:function(){return this.text.getValue()},setText:function(){this.text.setText.apply(this.text,arguments)},getText:function(){return this.text.getText()}}),BI.BlankIconTextIconItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.blank_icon_text_icon_item",BI.BlankIconTextIconItem),BI.BlankIconTextItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.BlankIconTextItem.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-blank-icon-text-item",logic:{dynamic:!1},cls:"close-ha-font",blankWidth:0,iconHeight:null,iconWidth:null,textHgap:0,textVgap:0,textLgap:0,textRgap:0})},_init:function(){BI.BlankIconTextItem.superclass._init.apply(this,arguments);var o=this.options,c=this._const,blank=BI.createWidget({type:"bi.layout",width:o.blankWidth});this.text=BI.createWidget({type:"bi.label",cls:"list-item-text",textAlign:"left",hgap:o.textHgap,vgap:o.textVgap,lgap:o.textLgap,rgap:o.textRgap,text:o.text,value:o.value,keyword:o.keyword,height:o.height}),this.icon=BI.createWidget({type:"bi.icon_label",width:o.height,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("horizontal",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("left",blank,this.icon,this.text)}))))},doClick:function(){BI.BlankIconTextItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.BlankIconTextItem.EVENT_CHANGE,this.getValue(),this)},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},getValue:function(){return this.text.getValue()},setText:function(){this.text.setText.apply(this.text,arguments)},getText:function(){return this.text.getText()},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)}}),BI.BlankIconTextItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.blank_icon_text_item",BI.BlankIconTextItem),BI.IconTextIconItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.IconTextIconItem.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-icon-text-icon-item",logic:{dynamic:!1},iconCls1:"close-ha-font",iconCls2:"close-ha-font",iconHeight:null,iconWidth:null,textHgap:0,textVgap:0,textLgap:0,textRgap:0})},_init:function(){BI.IconTextIconItem.superclass._init.apply(this,arguments);var o=this.options,c=this._const;this.text=BI.createWidget({type:"bi.label",textAlign:"left",hgap:o.textHgap,vgap:o.textVgap,lgap:o.textLgap,rgap:o.textRgap,text:o.text,value:o.value,keyword:o.keyword,height:o.height});var icon1=BI.createWidget({type:"bi.icon_label",cls:o.iconCls1,width:o.leftIconWrapperWidth,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight}),blank=BI.createWidget({type:"bi.layout",width:o.height});BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.icon_label",cls:o.iconCls2,width:o.rightIconWrapperWidth,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight},top:0,bottom:0,right:0}]}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("horizontal",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("left",icon1,this.text,blank)}))))},doClick:function(){BI.IconTextIconItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.IconTextIconItem.EVENT_CHANGE,this.getValue(),this)},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},getValue:function(){return this.text.getValue()},setText:function(){this.text.setText.apply(this.text,arguments)},getText:function(){return this.text.getText()}}),BI.IconTextIconItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.icon_text_icon_item",BI.IconTextIconItem),BI.IconTextItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.IconTextItem.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-icon-text-item",direction:BI.Direction.Left,logic:{dynamic:!1},iconWrapperWidth:null,iconHeight:null,iconWidth:null,textHgap:0,textVgap:0,textLgap:0,textRgap:0})},_init:function(){BI.IconTextItem.superclass._init.apply(this,arguments);var o=this.options,c=this._const;this.text=BI.createWidget({type:"bi.label",cls:"list-item-text",textAlign:"left",hgap:o.textHgap,vgap:o.textVgap,lgap:o.textLgap,rgap:o.textRgap,text:o.text,value:o.value,keyword:o.keyword,height:o.height}),this.icon=BI.createWidget({type:"bi.icon_label",width:o.iconWrapperWidth||o.height,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction),BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection(o.direction,this.icon,this.text)}))))},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},getValue:function(){return this.text.getValue()},setText:function(){this.text.setText.apply(this.text,arguments)},getText:function(){return this.text.getText()},doClick:function(){BI.IconTextItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.IconTextItem.EVENT_CHANGE,this.getValue(),this)},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)}}),BI.IconTextItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.icon_text_item",BI.IconTextItem),BI.TextIconItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.TextIconItem.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-text-icon-item",logic:{dynamic:!1},cls:"close-ha-font",iconHeight:null,iconWidth:null,textHgap:0,textVgap:0,textLgap:0,textRgap:0})},_init:function(){BI.TextIconItem.superclass._init.apply(this,arguments);var o=this.options,c=this._const;this.text=BI.createWidget({type:"bi.label",cls:"list-item-text",textAlign:"left",hgap:o.textHgap,vgap:o.textVgap,lgap:o.textLgap,rgap:o.textRgap,text:o.text,value:o.value,keyword:o.keyword,height:o.height}),this.icon=BI.createWidget({type:"bi.icon_label",width:o.height,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("horizontal",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("left",this.text,this.icon)}))))},doClick:function(){BI.TextIconItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.TextIconItem.EVENT_CHANGE,this.getValue(),this)},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},getValue:function(){return this.text.getValue()},setText:function(){this.text.setText.apply(this.text,arguments)},getText:function(){return this.text.getText()},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)}}),BI.TextIconItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.text_icon_item",BI.TextIconItem),BI.TextItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.TextItem.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-text-item",textAlign:"left",whiteSpace:"nowrap",textHgap:0,textVgap:0,textLgap:0,textRgap:0})},_init:function(){BI.TextItem.superclass._init.apply(this,arguments);var o=this.options;this.text=BI.createWidget({type:"bi.label",element:this,textAlign:o.textAlign,whiteSpace:o.whiteSpace,textHeight:"nowrap"==o.whiteSpace?o.height:o.textHeight,height:o.height,hgap:o.textHgap,vgap:o.textVgap,lgap:o.textLgap,rgap:o.textRgap,text:o.text,value:o.value,keyword:o.keyword,py:o.py})},doClick:function(){BI.TextItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.TextItem.EVENT_CHANGE,this.getValue(),this)},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},getValue:function(){return this.text.getValue()},setText:function(){this.text.setText.apply(this.text,arguments)},getText:function(){return this.text.getText()}}),BI.TextItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.text_item",BI.TextItem),BI.IconTextIconNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.IconTextIconNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-icon-text-icon-node",logic:{dynamic:!1},iconCls1:"close-ha-font",iconCls2:"close-ha-font",iconHeight:null,iconWidth:null,textHgap:0,textVgap:0,textLgap:0,textRgap:0})},_init:function(){BI.IconTextIconNode.superclass._init.apply(this,arguments);var o=this.options,c=this._const;this.text=BI.createWidget({type:"bi.label",textAlign:"left",hgap:o.textHgap,vgap:o.textVgap,lgap:o.textLgap,rgap:o.textRgap,text:o.text,value:o.value,keyword:o.keyword,height:o.height});var icon1=BI.createWidget({type:"bi.icon_label",cls:o.iconCls1,width:o.height,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight}),blank=BI.createWidget({type:"bi.layout",width:o.height,height:o.height});BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.icon_label",cls:o.iconCls2,width:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight},top:0,bottom:0,right:0}]}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("horizontal",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("left",icon1,this.text,blank)}))))},doClick:function(){BI.IconTextIconNode.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.IconTextIconNode.EVENT_CHANGE,this.getValue(),this)},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},getValue:function(){return this.text.getValue()},setText:function(){this.text.setText.apply(this.text,arguments)},getText:function(){return this.text.getText()}}),BI.IconTextIconNode.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.icon_text_icon_node",BI.IconTextIconNode),BI.IconTextNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.IconTextNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-icon-text-node",logic:{dynamic:!1},cls:"close-ha-font",iconHeight:null,iconWidth:null,textHgap:0,textVgap:0,textLgap:0,textRgap:0})},_init:function(){BI.IconTextNode.superclass._init.apply(this,arguments);var o=this.options,c=this._const;this.text=BI.createWidget({type:"bi.label",cls:"list-item-text",textAlign:"left",hgap:o.textHgap,vgap:o.textVgap,lgap:o.textLgap,rgap:o.textRgap,text:o.text,value:o.value,keyword:o.keyword,height:o.height}),this.icon=BI.createWidget({type:"bi.icon_label",width:o.height,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("horizontal",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("left",this.icon,this.text)}))))},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},getValue:function(){return this.text.getValue()},setText:function(){this.text.setText.apply(this.text,arguments)},getText:function(){return this.text.getText()},doClick:function(){BI.IconTextNode.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.IconTextNode.EVENT_CHANGE,this.getValue(),this)},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)}}),BI.IconTextNode.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.icon_text_node",BI.IconTextNode),BI.TextIconNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.TextIconNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-text-icon-node",logic:{dynamic:!1},cls:"close-ha-font",iconHeight:null,iconWidth:null,textHgap:0,textVgap:0,textLgap:0,textRgap:0})},_init:function(){BI.TextIconNode.superclass._init.apply(this,arguments);var o=this.options,c=this._const;this.text=BI.createWidget({type:"bi.label",cls:"list-item-text",textAlign:"left",hgap:o.textHgap,vgap:o.textVgap,lgap:o.textLgap,rgap:o.textRgap,text:o.text,value:o.value,keyword:o.keyword,height:o.height}),this.icon=BI.createWidget({type:"bi.icon_label",width:o.height,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("horizontal",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("left",this.text,this.icon)}))))},doClick:function(){BI.TextIconNode.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.TextIconNode.EVENT_CHANGE,this.getValue(),this)},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},getValue:function(){return this.text.getValue()},setText:function(){this.text.setText.apply(this.text,arguments)},getText:function(){return this.text.getText()},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)}}),BI.TextIconNode.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.text_icon_node",BI.TextIconNode),BI.TextNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.TextNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-text-node",textAlign:"left",whiteSpace:"nowrap",textHgap:0,textVgap:0,textLgap:0,textRgap:0})},_init:function(){BI.TextNode.superclass._init.apply(this,arguments);var o=this.options;this.text=BI.createWidget({type:"bi.label",element:this,textAlign:o.textAlign,whiteSpace:o.whiteSpace,textHeight:"nowrap"==o.whiteSpace?o.height:o.textHeight,height:o.height,hgap:o.textHgap,vgap:o.textVgap,lgap:o.textLgap,rgap:o.textRgap,text:o.text,value:o.value,keyword:o.keyword,py:o.py})},doClick:function(){BI.TextNode.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.TextNode.EVENT_CHANGE,this.getValue(),this)},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},getValue:function(){return this.text.getValue()},setText:function(){this.text.setText.apply(this.text,arguments)},getText:function(){return this.text.getText()}}),BI.TextNode.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.text_node",BI.TextNode),BI.Editor=BI.inherit(BI.Single,{_defaultConfig:function(){var conf=BI.Editor.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-editor bi-focus-shadow",hgap:4,vgap:2,lgap:0,rgap:0,tgap:0,bgap:0,tipType:"warning",inputType:"text",validationChecker:BI.emptyFn,quitChecker:BI.emptyFn,allowBlank:!1,watermark:"",errorText:""})},_init:function(){BI.Editor.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=this.addWidget(BI.createWidget({type:"bi.input",element:"",root:!0,value:o.value,watermark:o.watermark,validationChecker:o.validationChecker,quitChecker:o.quitChecker,allowBlank:o.allowBlank})),this.editor.element.css({width:"100%",height:"100%",border:"none",outline:"none",padding:"0",margin:"0"}),BI.isKey(this.options.watermark)&&this._assertWaterMark();var _items=[];this.watermark&&_items.push({el:this.watermark,left:3,right:3,top:0,bottom:0}),_items.push({el:this.editor,left:0,right:0,top:0,bottom:0});var items=[{el:{type:"bi.absolute",ref:function(_ref){self.contentWrapper=_ref},items:_items},left:o.hgap+o.lgap,right:o.hgap+o.rgap,top:o.vgap+o.tgap,bottom:o.vgap+o.bgap}];BI.createWidget({type:"bi.absolute",element:this,items:items}),this.editor.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editor.on(BI.Input.EVENT_FOCUS,function(){self._checkError(),self.element.addClass("bi-editor-focus"),self.fireEvent(BI.Editor.EVENT_FOCUS,arguments)}),this.editor.on(BI.Input.EVENT_BLUR,function(){self._setErrorVisible(!1),self.element.removeClass("bi-editor-focus"),self.fireEvent(BI.Editor.EVENT_BLUR,arguments)}),this.editor.on(BI.Input.EVENT_CLICK,function(){self.fireEvent(BI.Editor.EVENT_CLICK,arguments)}),this.editor.on(BI.Input.EVENT_CHANGE,function(){self.fireEvent(BI.Editor.EVENT_CHANGE,arguments)}),this.editor.on(BI.Input.EVENT_KEY_DOWN,function(v){self.fireEvent(BI.Editor.EVENT_KEY_DOWN,arguments)}),this.editor.on(BI.Input.EVENT_QUICK_DOWN,function(e){e.keyCode!==BI.KeyCode.TAB&&self.watermark&&self.watermark.invisible()}),this.editor.on(BI.Input.EVENT_VALID,function(){self._checkWaterMark(),self._setErrorVisible(!1),self.fireEvent(BI.Editor.EVENT_VALID,arguments)}),this.editor.on(BI.Input.EVENT_ERROR,function(){self._checkWaterMark(),self.fireEvent(BI.Editor.EVENT_ERROR,arguments),self._setErrorVisible(self.isEditing())}),this.editor.on(BI.Input.EVENT_RESTRICT,function(){self._checkWaterMark();var tip=self._setErrorVisible(!0);tip&&tip.element.fadeOut(100,function(){tip.element.fadeIn(100)}),self.fireEvent(BI.Editor.EVENT_RESTRICT,arguments)}),this.editor.on(BI.Input.EVENT_EMPTY,function(){self._checkWaterMark(),self.fireEvent(BI.Editor.EVENT_EMPTY,arguments)}),this.editor.on(BI.Input.EVENT_ENTER,function(){self.fireEvent(BI.Editor.EVENT_ENTER,arguments)}),this.editor.on(BI.Input.EVENT_SPACE,function(){self.fireEvent(BI.Editor.EVENT_SPACE,arguments)}),this.editor.on(BI.Input.EVENT_BACKSPACE,function(){self.fireEvent(BI.Editor.EVENT_BACKSPACE,arguments)}),this.editor.on(BI.Input.EVENT_REMOVE,function(){self.fireEvent(BI.Editor.EVENT_REMOVE,arguments)}),this.editor.on(BI.Input.EVENT_START,function(){self.fireEvent(BI.Editor.EVENT_START,arguments)}),this.editor.on(BI.Input.EVENT_PAUSE,function(){self.fireEvent(BI.Editor.EVENT_PAUSE,arguments)}),this.editor.on(BI.Input.EVENT_STOP,function(){self.fireEvent(BI.Editor.EVENT_STOP,arguments)}),this.editor.on(BI.Input.EVENT_CONFIRM,function(){self.fireEvent(BI.Editor.EVENT_CONFIRM,arguments)}),this.editor.on(BI.Input.EVENT_CHANGE_CONFIRM,function(){self.fireEvent(BI.Editor.EVENT_CHANGE_CONFIRM,arguments)}),this.element.click(function(e){return e.stopPropagation(),!1}),BI.isKey(this.options.value)||BI.isEmptyString(this.options.value)?(this._checkError(),this._checkWaterMark()):this._checkWaterMark()},_checkToolTip:function(){var o=this.options,errorText=o.errorText;BI.isFunction(errorText)&&(errorText=errorText(this.editor.getValue())),BI.isKey(errorText)&&(!this.isEnabled()||this.isValid()||BI.Bubbles.has(this.getName())&&BI.Bubbles.get(this.getName()).isVisible()?this.setTitle(""):this.setTitle(errorText))},_assertWaterMark:function(){var self=this,o=this.options;BI.isNull(this.watermark)&&(this.watermark=BI.createWidget({type:"bi.label",cls:"bi-water-mark",text:this.options.watermark,height:o.height-2*(o.vgap+o.tgap),whiteSpace:"nowrap",textAlign:"left"}),this.watermark.element.bind({mousedown:function(e){self.isEnabled()?self.editor.isEditing()||self.editor.focus():self.editor.isEditing()&&self.editor.blur(),e.stopEvent()}}),this.watermark.element.bind("click",function(e){self.isEnabled()?self.editor.isEditing()||self.editor.focus():self.editor.isEditing()&&self.editor.blur(),e.stopEvent()}))},_checkError:function(){this._setErrorVisible(this.isEnabled()&&!this.isValid()),this._checkToolTip()},_checkWaterMark:function(){var o=this.options;!this.disabledWaterMark&&""===this.editor.getValue()&&BI.isKey(o.watermark)?this.watermark&&this.watermark.visible():this.watermark&&this.watermark.invisible()},setErrorText:function(text){this.options.errorText=text},getErrorText:function(){return this.options.errorText},setWaterMark:function(v){this.options.watermark=v,BI.isNull(this.watermark)&&(this._assertWaterMark(),BI.createWidget({type:"bi.absolute",element:this.contentWrapper,items:[{el:this.watermark,left:3,right:3,top:0,bottom:0}]})),BI.isKey(v)&&this.watermark.setText(v)},_setErrorVisible:function(b){var o=this.options,errorText=o.errorText;if(BI.isFunction(errorText)&&(errorText=errorText(BI.trim(this.editor.getValue()))),!this.disabledError&&BI.isKey(errorText))return BI.Bubbles[b?"show":"hide"](this.getName(),errorText,this,{adjustYOffset:2}),this._checkToolTip(),BI.Bubbles.get(this.getName())},disableError:function(){this.disabledError=!0,this._checkError()},enableError:function(){this.disabledError=!1,this._checkError()},disableWaterMark:function(){this.disabledWaterMark=!0,this._checkWaterMark()},enableWaterMark:function(){this.disabledWaterMark=!1,this._checkWaterMark()},focus:function(){this.element.addClass("text-editor-focus"),this.editor.focus()},blur:function(){this.element.removeClass("text-editor-focus"),this.editor.blur()},selectAll:function(){this.editor.selectAll()},onKeyDown:function(k){this.editor.onKeyDown(k)},setValue:function(v){BI.Editor.superclass.setValue.apply(this,arguments),this.editor.setValue(v),this._checkError(),this._checkWaterMark()},getLastValidValue:function(){return this.editor.getLastValidValue()},getLastChangedValue:function(){return this.editor.getLastChangedValue()},getValue:function(){return this.isValid()?BI.trim(this.editor.getValue()):BI.trim(this.editor.getLastValidValue())},isEditing:function(){return this.editor.isEditing()},isValid:function(){return this.editor.isValid()},destroyed:function(){BI.Bubbles.remove(this.getName())}}),BI.Editor.EVENT_CHANGE="EVENT_CHANGE",BI.Editor.EVENT_FOCUS="EVENT_FOCUS",BI.Editor.EVENT_BLUR="EVENT_BLUR",BI.Editor.EVENT_CLICK="EVENT_CLICK",BI.Editor.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.Editor.EVENT_SPACE="EVENT_SPACE",BI.Editor.EVENT_BACKSPACE="EVENT_BACKSPACE",BI.Editor.EVENT_START="EVENT_START",BI.Editor.EVENT_PAUSE="EVENT_PAUSE",BI.Editor.EVENT_STOP="EVENT_STOP",BI.Editor.EVENT_CONFIRM="EVENT_CONFIRM",BI.Editor.EVENT_CHANGE_CONFIRM="EVENT_CHANGE_CONFIRM",BI.Editor.EVENT_VALID="EVENT_VALID",BI.Editor.EVENT_ERROR="EVENT_ERROR",BI.Editor.EVENT_ENTER="EVENT_ENTER",BI.Editor.EVENT_RESTRICT="EVENT_RESTRICT",BI.Editor.EVENT_REMOVE="EVENT_REMOVE",BI.Editor.EVENT_EMPTY="EVENT_EMPTY",BI.shortcut("bi.editor",BI.Editor),BI.MultifileEditor=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.MultifileEditor.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-multifile-editor",multiple:!1,maxSize:-1,accept:"",url:""})},_init:function(){var self=this,o=this.options;BI.MultifileEditor.superclass._init.apply(this,arguments),this.file=BI.createWidget({type:"bi.file",cls:"multifile-editor",width:"100%",height:"100%",name:o.name,url:o.url,multiple:o.multiple,accept:o.accept,maxSize:o.maxSize,title:o.title}),this.file.on(BI.File.EVENT_CHANGE,function(){self.fireEvent(BI.MultifileEditor.EVENT_CHANGE,arguments)}),this.file.on(BI.File.EVENT_UPLOADSTART,function(){self.fireEvent(BI.MultifileEditor.EVENT_UPLOADSTART,arguments)}),this.file.on(BI.File.EVENT_ERROR,function(){self.fireEvent(BI.MultifileEditor.EVENT_ERROR,arguments)}),this.file.on(BI.File.EVENT_PROGRESS,function(){self.fireEvent(BI.MultifileEditor.EVENT_PROGRESS,arguments)}),this.file.on(BI.File.EVENT_UPLOADED,function(){self.fireEvent(BI.MultifileEditor.EVENT_UPLOADED,arguments)}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.adaptive",scrollable:!1,items:[this.file]},top:0,right:0,left:0,bottom:0}]})},select:function(){this.file.select()},getValue:function(){return this.file.getValue()},upload:function(){this.file.upload()},reset:function(){this.file.reset()}}),BI.MultifileEditor.EVENT_CHANGE="EVENT_CHANGE",BI.MultifileEditor.EVENT_UPLOADSTART="EVENT_UPLOADSTART",BI.MultifileEditor.EVENT_ERROR="EVENT_ERROR",BI.MultifileEditor.EVENT_PROGRESS="EVENT_PROGRESS",BI.MultifileEditor.EVENT_UPLOADED="EVENT_UPLOADED",BI.shortcut("bi.multifile_editor",BI.MultifileEditor),BI.TextAreaEditor=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.TextAreaEditor.superclass._defaultConfig.apply(),{baseCls:"bi-textarea-editor",value:""})},render:function(){var o=this.options,self=this;this.content=BI.createWidget({type:"bi.layout",tagName:"textarea",width:"100%",height:"100%",cls:"bi-textarea textarea-editor-content display-block"}),this.content.element.css({resize:"none"}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.adaptive",items:[this.content]},left:4,right:4,top:4,bottom:8}]}),this.content.element.on("input propertychange",function(e){self._checkWaterMark(),self.fireEvent(BI.TextAreaEditor.EVENT_CHANGE)}),this.content.element.focus(function(){self.isValid()&&(self._focus(),self.fireEvent(BI.TextAreaEditor.EVENT_FOCUS)),BI.Widget._renderEngine.createElement(document).bind("mousedown."+self.getName(),function(e){BI.DOM.isExist(self)&&!self.element.__isMouseInBounds__(e)&&(BI.Widget._renderEngine.createElement(document).unbind("mousedown."+self.getName()),self.content.element.blur())})}),this.content.element.blur(function(){self.isValid()&&(self._blur(),self.fireEvent(BI.TextAreaEditor.EVENT_BLUR)),BI.Widget._renderEngine.createElement(document).unbind("mousedown."+self.getName())}),BI.isKey(o.value)&&this.setValue(o.value),BI.isNotNull(o.style)&&this.setStyle(o.style),this._checkWaterMark()},_checkWaterMark:function(){var self=this,o=this.options,val=this.getValue();BI.isNotEmptyString(val)?(this.watermark&&this.watermark.destroy(),this.watermark=null):BI.isNotEmptyString(o.watermark)&&(this.watermark?(this.watermark.setText(o.watermark),this.watermark.setValid(!o.invalid),this.watermark.setEnable(!o.disabled)):(this.watermark=BI.createWidget({type:"bi.text_button",cls:"bi-water-mark cursor-default",textAlign:"left",whiteSpace:"normal",text:o.watermark,invalid:o.invalid,disabled:o.disabled}),this.watermark.on(BI.TextButton.EVENT_CHANGE,function(){self.focus()}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.watermark,left:4,top:4,right:0}]})))},_focus:function(){this.content.element.addClass("textarea-editor-focus"),this._checkWaterMark()},_blur:function(){this.content.element.removeClass("textarea-editor-focus"),this._checkWaterMark()},focus:function(){this._focus(),this.content.element.focus()},blur:function(){this._blur(),this.content.element.blur()},getValue:function(){return this.content.element.val()},setValue:function(value){this.content.element.val(value),this._checkWaterMark()},setStyle:function(style){this.style=style,this.element.css(style),this.content.element.css(BI.extend({},style,{color:style.color||BI.DOM.getContrastColor(BI.DOM.isRGBColor(style.backgroundColor)?BI.DOM.rgb2hex(style.backgroundColor):style.backgroundColor)}))},getStyle:function(){return this.style},_setValid:function(b){BI.TextAreaEditor.superclass._setValid.apply(this,arguments)},_setEnable:function(b){BI.TextAreaEditor.superclass._setEnable.apply(this,[b]),this.content&&(this.content.element[0].disabled=!b)}}),BI.TextAreaEditor.EVENT_CHANGE="EVENT_CHANGE",BI.TextAreaEditor.EVENT_BLUR="EVENT_BLUR",BI.TextAreaEditor.EVENT_FOCUS="EVENT_FOCUS",BI.shortcut("bi.textarea_editor",BI.TextAreaEditor),BI.Html=BI.inherit(BI.Single,{props:{baseCls:"bi-html",textAlign:"left",whiteSpace:"normal",lineHeight:null,handler:null,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0,text:"",highLight:!1},render:function(){var self=this,o=this.options;o.hgap+o.lgap>0&&this.element.css({"padding-left":o.hgap+o.lgap+"px"}),o.hgap+o.rgap>0&&this.element.css({"padding-right":o.hgap+o.rgap+"px"}),o.vgap+o.tgap>0&&this.element.css({"padding-top":o.vgap+o.tgap+"px"}),o.vgap+o.bgap>0&&this.element.css({"padding-bottom":o.vgap+o.bgap+"px"}),BI.isNumber(o.height)&&this.element.css({lineHeight:o.height+"px"}),BI.isNumber(o.lineHeight)&&this.element.css({lineHeight:o.lineHeight+"px"}),BI.isWidthOrHeight(o.maxWidth)&&this.element.css({maxWidth:o.maxWidth}),this.element.css({textAlign:o.textAlign,whiteSpace:o.whiteSpace,textOverflow:"nowrap"===o.whiteSpace?"ellipsis":"",overflow:"nowrap"===o.whiteSpace?"":"auto"}),o.handler?(this.text=BI.createWidget({type:"bi.layout",tagName:"span"}),this.text.element.click(function(){o.handler(self.getValue())}),BI.createWidget({type:"bi.default",element:this,items:[this.text]})):this.text=this,BI.isKey(o.text)?this.setText(o.text):BI.isKey(o.value)&&this.setText(o.value),o.highLight&&this.doHighLight()},doHighLight:function(){this.text.element.addClass("bi-high-light")},unHighLight:function(){this.text.element.removeClass("bi-high-light")},setValue:function(text){BI.Html.superclass.setValue.apply(this,arguments),this.isReadOnly()||this.setText(text)},setStyle:function(css){this.text.element.css(css)},setText:function(text){BI.Html.superclass.setText.apply(this,arguments),this.options.text=text,this.text.element.html(text)}}),BI.shortcut("bi.html",BI.Html),BI.Icon=BI.inherit(BI.Single,{_defaultConfig:function(){var conf=BI.Icon.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{tagName:"i",baseCls:(conf.baseCls||"")+" x-icon b-font horizon-center display-block"})},_init:function(){BI.Icon.superclass._init.apply(this,arguments),BI.isIE9Below&&BI.isIE9Below()&&this.element.addClass("hack")}}),BI.shortcut("bi.icon",BI.Icon),BI.Iframe=BI.inherit(BI.Single,{_defaultConfig:function(){var conf=BI.Iframe.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{tagName:"iframe",baseCls:(conf.baseCls||"")+" bi-iframe",src:"",name:"",attributes:{},width:"100%",height:"100%"})},_init:function(){var o=this.options;o.attributes.frameborder="0",o.attributes.src=o.src,o.attributes.name=o.name,BI.Iframe.superclass._init.apply(this,arguments)},setSrc:function(src){this.options.src=src,this.element.attr("src",src)},getSrc:function(){return this.options.src},setName:function(name){this.options.name=name,this.element.attr("name",name)},getName:function(){return this.options.name}}),BI.shortcut("bi.iframe",BI.Iframe),BI.Img=BI.inherit(BI.Single,{_defaultConfig:function(){var conf=BI.Img.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{tagName:"img",baseCls:(conf.baseCls||"")+" bi-img display-block",src:"",attributes:{},width:"100%",height:"100%"})},_init:function(){var o=this.options;o.attributes.src=o.src,BI.Img.superclass._init.apply(this,arguments); +},setSrc:function(src){this.options.src=src,this.element.attr("src",src)},getSrc:function(){return this.options.src}}),BI.shortcut("bi.img",BI.Img),BI.ImageCheckbox=BI.inherit(BI.IconButton,{_defaultConfig:function(){var conf=BI.ImageCheckbox.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-image-checkbox check-box-icon",selected:!1,handler:BI.emptyFn,width:16,height:16,iconWidth:16,iconHeight:16})}}),BI.ImageCheckbox.EVENT_CHANGE=BI.IconButton.EVENT_CHANGE,BI.shortcut("bi.image_checkbox",BI.ImageCheckbox),BI.Checkbox=BI.inherit(BI.BasicButton,{props:{baseCls:"bi-checkbox",selected:!1,handler:BI.emptyFn,width:16,height:16,iconWidth:16,iconHeight:16},render:function(){var self=this,o=this.options;return{type:"bi.center_adapt",items:[{type:"bi.default",ref:function(_ref){self.checkbox=_ref},cls:"checkbox-content",width:o.iconWidth-2,height:o.iconHeight-2}]}},_setEnable:function(enable){BI.Checkbox.superclass._setEnable.apply(this,arguments),enable===!0?this.checkbox.element.removeClass("base-disabled disabled"):this.checkbox.element.addClass("base-disabled disabled")},doClick:function(){BI.Checkbox.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.Checkbox.EVENT_CHANGE)},setSelected:function(b){BI.Checkbox.superclass.setSelected.apply(this,arguments),b?this.checkbox.element.addClass("bi-high-light-background"):this.checkbox.element.removeClass("bi-high-light-background")}}),BI.Checkbox.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.checkbox",BI.Checkbox),function(document){var F=function(item){return function(input){var files=input.files||[input];return files.item||(files.item=item),files}}(function(i){return this[i]}),event={add:document.addEventListener?function(node,name,callback){return node.addEventListener(name,callback,!1),this}:function(node,name,callback){return node.attachEvent("on"+name,callback),this},del:document.removeEventListener?function(node,name,callback){return node.removeEventListener(name,callback,!1),this}:function(node,name,callback){return node.detachEvent("on"+name,callback),this},stop:function(e){return e?(e.stopPropagation?e.stopPropagation():e.cancelBubble=!0,e.preventDefault?e.preventDefault():e.returnValue=!1):self.event&&(event.returnValue=!(event.cancelBubble=!0)),!1}},sendFile=function(toString){var multipart=function(boundary,name,file){return"--".concat(boundary,CRLF,'Content-Disposition: form-data; name="',name,'"; filename="',_global.encodeURIComponent(file.fileName),'"',CRLF,"Content-Type: application/octet-stream",CRLF,CRLF,file.getAsBinary(),CRLF,"--",boundary,"--",CRLF)},isFunction=function(Function){return"[object Function]"===toString.call(Function)},split="onabort.onerror.onloadstart.onprogress".split("."),length=split.length,CRLF="\r\n",xhr=this.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP"),sendFile;return sendFile=xhr.upload||xhr.sendAsBinary?function(handler,maxSize,width,height){if(-1'),iframe=handler.iframe||(handler.iframe=document.createElement(''))}catch(e){var form=document.createElement("form"),iframe=handler.iframe||(handler.iframe=document.createElement("iframe"));form.setAttribute("enctype","multipart/form-data"),iframe.setAttribute("name",iframe.id=target),iframe.setAttribute("src",url)}with(iframe.style.position="absolute",iframe.style.left=iframe.style.top="-10000px",iframe.onload=onload,iframe.onerror=function(event){isFunction(handler.onerror)&&handler.onerror(rpe,event||_global.event)},iframe.onreadystatechange=function(){/loaded|complete/i.test(iframe.readyState)?onload():isFunction(handler.onloadprogress)&&(rpe.loadedxhr.status||xhr.status>399)return BI.Msg.toast(BI.i18nText("BI-Upload_File_Error"),{level:"error"}),void self.fireEvent(BI.File.EVENT_ERROR);var error=BI.some(_wrap.attach_array,function(index,attach){if(attach.errorCode)return BI.Msg.toast(attach.errorMsg,{level:"error"}),self.fireEvent(BI.File.EVENT_ERROR,attach),!0});!error&&self.fireEvent(BI.File.EVENT_UPLOADED)},1e3)},_wrap.url=o.url,_wrap.fileType=o.accept,_wrap.attach_array=[],_wrap.attach_names=[],_wrap.attachNum=0},_events:function(wrap){var self=this;return event.add(wrap.dom.input,"change",function(){event.del(wrap.dom.input,"change",arguments.callee);for(var input=wrap.dom.input.cloneNode(!0),i=0,files=F(wrap.dom.input);i0&&self.fireEvent(BI.File.EVENT_CHANGE,{files:wrap.files}),input.value="",wrap.dom.input.parentNode.replaceChild(input,wrap.dom.input),wrap.dom.input=input,event.add(wrap.dom.input,"change",arguments.callee)}),wrap},_wrap:function(){var self=this,o=this.options,input=this.element[0];return o.multiple===!0&&this.element.attr("multiple","multiple"),input.value="",this._events({dom:{input:input,disabled:!1},name:input.name,maxSize:o.maxSize?o.maxSize>>0:-1,files:[],clean:function(){this.files=[]},upload:function(handler){if(handler)for(var key in handler)this[key]=handler[key];return sendFiles(this,this.maxSize),this},hide:function(){this.dom.disabled&&(this.dom.disabled=!1,this.dom.input.removeAttribute("disabled"))},show:function(total,current,totalProp,currentProp){this.dom.disabled||(this.dom.disabled=!0,this.dom.input.setAttribute("disabled","disabled"))}})},select:function(){this.wrap&&BI.Widget._renderEngine.createElement(this.wrap.dom.input).click()},upload:function(handler){this.wrap&&this.wrap.upload(handler)},getValue:function(){return this.wrap?this.wrap.attach_array:[]},reset:function(){this.wrap&&(this.wrap.attach_array=[],this.wrap.attach_names=[],this.wrap.attachNum=0)},_setEnable:function(enable){BI.File.superclass._setEnable.apply(this,arguments),enable===!0?this.element.attr("disabled","disabled"):this.element.removeAttr("disabled")}}),BI.File.EVENT_CHANGE="EVENT_CHANGE",BI.File.EVENT_UPLOADSTART="EVENT_UPLOADSTART",BI.File.EVENT_ERROR="EVENT_ERROR",BI.File.EVENT_PROGRESS="EVENT_PROGRESS",BI.File.EVENT_UPLOADED="EVENT_UPLOADED",BI.shortcut("bi.file",BI.File)}(_global.document||{}),BI.Input=BI.inherit(BI.Single,{_defaultConfig:function(){var conf=BI.Input.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-input display-block overflow-dot",tagName:"input",validationChecker:BI.emptyFn,quitChecker:BI.emptyFn,allowBlank:!1})},_init:function(){BI.Input.superclass._init.apply(this,arguments);var self=this,ctrlKey=!1,keyCode=null,inputEventValid=!1,_keydown=BI.debounce(function(keyCode){self.onKeyDown(keyCode,ctrlKey),self._keydown_=!1},300),_clk=BI.debounce(BI.bind(this._click,this),BI.EVENT_RESPONSE_TIME,{leading:!0,trailing:!1});this._focusDebounce=BI.debounce(BI.bind(this._focus,this),BI.EVENT_RESPONSE_TIME,{leading:!0,trailing:!1}),this._blurDebounce=BI.debounce(BI.bind(this._blur,this),BI.EVENT_RESPONSE_TIME,{leading:!0,trailing:!1}),this.element.keydown(function(e){inputEventValid=!1,ctrlKey=e.ctrlKey||e.metaKey,keyCode=e.keyCode,self.fireEvent(BI.Input.EVENT_QUICK_DOWN,arguments)}).keyup(function(e){keyCode=null,inputEventValid&&e.keyCode===BI.KeyCode.ENTER||(self._keydown_=!0,_keydown(e.keyCode))}).on("input propertychange",function(e){var originalEvent=e.originalEvent;(BI.isNull(originalEvent.propertyName)||"value"===originalEvent.propertyName)&&(inputEventValid=!0,self._keydown_=!0,_keydown(keyCode),keyCode=null)}).click(function(e){e.stopPropagation(),_clk()}).mousedown(function(e){self.element.val(self.element.val())}).focus(function(e){self._focusDebounce()}).focusout(function(e){self._blurDebounce()}),(BI.isKey(this.options.value)||BI.isEmptyString(this.options.value))&&this.setValue(this.options.value)},_focus:function(){this.element.addClass("bi-input-focus"),this._checkValidationOnValueChange(),this._isEditing=!0,""==this.getValue()&&(this.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.EMPTY,this.getValue(),this),this.fireEvent(BI.Input.EVENT_EMPTY)),this.fireEvent(BI.Input.EVENT_FOCUS)},_blur:function(){function blur(){if(self.isValid()||self.options.quitChecker.apply(self,[BI.trim(self.getValue())])===!1||(self.element.val(self._lastValidValue?self._lastValidValue:""),self._checkValidationOnValueChange(),self._defaultState()),self.element.removeClass("bi-input-focus"),self._isEditing=!1,self._start=!1,self.isValid()){var lastValidValue=self._lastValidValue;self._lastValidValue=self.getValue(),self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.CONFIRM,self.getValue(),self),self.fireEvent(BI.Input.EVENT_CONFIRM),self._lastValidValue!==lastValidValue&&self.fireEvent(BI.Input.EVENT_CHANGE_CONFIRM)}self.fireEvent(BI.Input.EVENT_BLUR)}var self=this;self._keydown_===!0?BI.delay(blur,300):blur()},_click:function(){this._isEditing!==!0&&(this.selectAll(),this.fireEvent(BI.Input.EVENT_CLICK))},onClick:function(){this._click()},onKeyDown:function(keyCode,ctrlKey){this.isValid()&&BI.trim(this._lastChangedValue)===BI.trim(this.getValue())||this._checkValidationOnValueChange(),this.isValid()&&""!==BI.trim(this.getValue())&&((BI.trim(this.getValue())===this._lastValue||this._start&&null!=this._lastValue&&""!==this._lastValue)&&(this._pause!==!0||/(\s|\u00A0)$/.test(this.getValue()))||(this._start=!0,this._pause=!1,this.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.STARTEDIT,this.getValue(),this),this.fireEvent(BI.Input.EVENT_START))),keyCode==BI.KeyCode.ENTER&&(this.isValid()||this.options.quitChecker.apply(this,[BI.trim(this.getValue())])!==!1?(this.blur(),this.fireEvent(BI.Input.EVENT_ENTER)):this.fireEvent(BI.Input.EVENT_RESTRICT)),keyCode==BI.KeyCode.SPACE&&this.fireEvent(BI.Input.EVENT_SPACE),keyCode==BI.KeyCode.BACKSPACE&&""==this._lastValue&&this.fireEvent(BI.Input.EVENT_REMOVE),keyCode!=BI.KeyCode.BACKSPACE&&keyCode!=BI.KeyCode.DELETE||this.fireEvent(BI.Input.EVENT_BACKSPACE),this.fireEvent(BI.Input.EVENT_KEY_DOWN,arguments);var lastValue=this._lastValue;BI.trim(this.getValue())!==BI.trim(this._lastValue||"")&&this._valueChange(),BI.isEndWithBlank(this.getValue())?(this._pause=!0,this.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.PAUSE,"",this),this.fireEvent(BI.Input.EVENT_PAUSE),this._defaultState()):keyCode!==BI.KeyCode.BACKSPACE&&keyCode!==BI.KeyCode.DELETE||""!==BI.trim(this.getValue())||null===lastValue||""===BI.trim(lastValue)||(this.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.STOPEDIT,this.getValue(),this),this.fireEvent(BI.Input.EVENT_STOP))},_defaultState:function(){""==this.getValue()&&(this.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.EMPTY,this.getValue(),this),this.fireEvent(BI.Input.EVENT_EMPTY)),this._lastValue=this.getValue(),this._lastSubmitValue=null},_valueChange:function(){this.isValid()&&BI.trim(this.getValue())!==this._lastSubmitValue&&(this.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.CHANGE,this.getValue(),this),this.fireEvent(BI.Input.EVENT_CHANGE),this._lastSubmitValue=BI.trim(this.getValue())),""==this.getValue()&&(this.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.EMPTY,this.getValue(),this),this.fireEvent(BI.Input.EVENT_EMPTY)),this._lastValue=this.getValue()},_checkValidationOnValueChange:function(){var o=this.options,v=this.getValue();this.setValid(o.allowBlank===!0&&""==BI.trim(v)||BI.isNotEmptyString(BI.trim(v))&&o.validationChecker.apply(this,[BI.trim(v)])!==!1)},focus:function(){if(!this.element.is(":visible"))throw new Error("input输入框在不可见下不能focus");!this._isEditing==!0&&(this.element.focus(),this.selectAll())},blur:function(){if(!this.element.is(":visible"))throw new Error("input输入框在不可见下不能blur");this._isEditing===!0&&(this.element.blur(),this._blurDebounce())},selectAll:function(){if(!this.element.is(":visible"))throw new Error("input输入框在不可见下不能select");this.element.select(),this._isEditing=!0},setValue:function(textValue){this.element.val(textValue),BI.nextTick(BI.bind(function(){this._checkValidationOnValueChange(),this._defaultState(),this.isValid()&&(this._lastValidValue=this._lastSubmitValue=this.getValue())},this))},getValue:function(){return this.element.val()||""},isEditing:function(){return this._isEditing},getLastValidValue:function(){return this._lastValidValue},getLastChangedValue:function(){return this._lastChangedValue},_setValid:function(){BI.Input.superclass._setValid.apply(this,arguments),this.isValid()?(this._lastChangedValue=this.getValue(),this.element.removeClass("bi-input-error"),this.fireEvent(BI.Input.EVENT_VALID,BI.trim(this.getValue()),this)):(this._lastChangedValue===this.getValue()&&(this._lastChangedValue=null),this.element.addClass("bi-input-error"),this.fireEvent(BI.Input.EVENT_ERROR,BI.trim(this.getValue()),this))},_setEnable:function(b){BI.Input.superclass._setEnable.apply(this,[b]),this.element[0].disabled=!b}}),BI.Input.EVENT_CHANGE="EVENT_CHANGE",BI.Input.EVENT_FOCUS="EVENT_FOCUS",BI.Input.EVENT_CLICK="EVENT_CLICK",BI.Input.EVENT_BLUR="EVENT_BLUR",BI.Input.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.Input.EVENT_QUICK_DOWN="EVENT_QUICK_DOWN",BI.Input.EVENT_SPACE="EVENT_SPACE",BI.Input.EVENT_BACKSPACE="EVENT_BACKSPACE",BI.Input.EVENT_START="EVENT_START",BI.Input.EVENT_PAUSE="EVENT_PAUSE",BI.Input.EVENT_STOP="EVENT_STOP",BI.Input.EVENT_CHANGE_CONFIRM="EVENT_CHANGE_CONFIRM",BI.Input.EVENT_CONFIRM="EVENT_CONFIRM",BI.Input.EVENT_REMOVE="EVENT_REMOVE",BI.Input.EVENT_EMPTY="EVENT_EMPTY",BI.Input.EVENT_VALID="EVENT_VALID",BI.Input.EVENT_ERROR="EVENT_ERROR",BI.Input.EVENT_ENTER="EVENT_ENTER",BI.Input.EVENT_RESTRICT="EVENT_RESTRICT",BI.shortcut("bi.input",BI.Input),BI.ImageRadio=BI.inherit(BI.IconButton,{_defaultConfig:function(){var conf=BI.ImageRadio.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-radio radio-icon",selected:!1,handler:BI.emptyFn,width:16,height:16,iconWidth:16,iconHeight:16})},_init:function(){BI.ImageRadio.superclass._init.apply(this,arguments)},doClick:function(){BI.ImageRadio.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.ImageRadio.EVENT_CHANGE)}}),BI.ImageRadio.EVENT_CHANGE=BI.IconButton.EVENT_CHANGE,BI.shortcut("bi.image_radio",BI.ImageRadio),BI.Radio=BI.inherit(BI.BasicButton,{props:{baseCls:"bi-radio",selected:!1,handler:BI.emptyFn,width:16,height:16,iconWidth:14,iconHeight:14},render:function(){var self=this,o=this.options;return{type:"bi.center_adapt",element:this.element,items:[{type:"bi.layout",cls:"radio-content",ref:function(_ref){self.radio=_ref},width:o.iconWidth,height:o.iconHeight}]}},_setEnable:function(enable){BI.Radio.superclass._setEnable.apply(this,arguments),enable===!0?this.radio.element.removeClass("base-disabled disabled"):this.radio.element.addClass("base-disabled disabled")},doClick:function(){BI.Radio.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.Radio.EVENT_CHANGE)},setSelected:function(b){BI.Radio.superclass.setSelected.apply(this,arguments),b?this.radio.element.addClass("bi-high-light-background"):this.radio.element.removeClass("bi-high-light-background")}}),BI.Radio.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.radio",BI.Radio),BI.AbstractLabel=BI.inherit(BI.Single,{_defaultConfig:function(props){var conf=BI.AbstractLabel.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{textAlign:"center",whiteSpace:"nowrap",textWidth:null,textHeight:null,hgap:0,vgap:0,lgap:0,rgap:0,tgap:0,bgap:0,text:"",highLight:!1})},_createJson:function(){var o=this.options;return{type:"bi.text",textAlign:o.textAlign,whiteSpace:o.whiteSpace,lineHeight:o.textHeight,text:o.text,value:o.value,py:o.py,keyword:o.keyword,highLight:o.highLight}},_init:function(){BI.AbstractLabel.superclass._init.apply(this,arguments),"center"===this.options.textAlign?this._createCenterEl():this._createNotCenterEl()},_createCenterEl:function(){var o=this.options,json=this._createJson();return json.textAlign="left",BI.isNumber(o.width)&&o.width>0?BI.isNumber(o.textWidth)&&o.textWidth>0?(json.maxWidth=o.textWidth,BI.isNumber(o.height)&&o.height>0?void BI.createWidget({type:"bi.center_adapt",height:o.height,scrollable:"normal"===o.whiteSpace,element:this,items:[{el:this.text=BI.createWidget(json)}]}):void BI.createWidget({type:"bi.center_adapt",scrollable:"normal"===o.whiteSpace,element:this,items:[{el:this.text=BI.createWidget(json)}]})):"normal"==o.whiteSpace?(BI.extend(json,{hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap}),this.text=BI.createWidget(json),void BI.createWidget({type:"bi.center_adapt",scrollable:"normal"===o.whiteSpace,element:this,items:[this.text]})):BI.isNumber(o.height)&&o.height>0?(this.element.css({"line-height":o.height+"px"}),json.textAlign=o.textAlign,void(this.text=BI.createWidget(BI.extend(json,{element:this,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap})))):(BI.extend(json,{hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,maxWidth:"100%"}),this.text=BI.createWidget(json),void BI.createWidget({type:"bi.center_adapt",scrollable:"normal"===o.whiteSpace,element:this,items:[this.text]})):BI.isNumber(o.textWidth)&&o.textWidth>0?(json.maxWidth=o.textWidth,void BI.createWidget({type:"bi.center_adapt",scrollable:"normal"===o.whiteSpace,element:this,items:[{el:this.text=BI.createWidget(json)}]})):"normal"==o.whiteSpace?(BI.extend(json,{hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap}),this.text=BI.createWidget(json),void BI.createWidget({type:"bi.center_adapt",scrollable:!0,element:this,items:[this.text]})):BI.isNumber(o.height)&&o.height>0?(this.element.css({"line-height":o.height+"px"}),json.textAlign=o.textAlign,void(this.text=BI.createWidget(BI.extend(json,{element:this,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap})))):(BI.extend(json,{hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap}),this.text=BI.createWidget(BI.extend(json,{maxWidth:"100%"})),void BI.createWidget({type:"bi.center_adapt",element:this,items:[this.text]}))},_createNotCenterEl:function(){var o=this.options,adaptLayout="right"===o.textAlign?"bi.right_vertical_adapt":"bi.vertical_adapt",json=this._createJson();return BI.isNumber(o.width)&&o.width>0?BI.isNumber(o.textWidth)&&o.textWidth>0?(json.width=o.textWidth,BI.isNumber(o.height)&&o.height>0?void BI.createWidget({type:adaptLayout,height:o.height,scrollable:"normal"===o.whiteSpace,element:this,items:[{el:this.text=BI.createWidget(json)}]}):void BI.createWidget({type:adaptLayout,scrollable:"normal"===o.whiteSpace,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,element:this,items:[{el:this.text=BI.createWidget(json)}]})):BI.isNumber(o.height)&&o.height>0?(this.text=BI.createWidget(BI.extend(json,{element:this,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap})),void("normal"!==o.whiteSpace&&this.element.css({"line-height":o.height-2*o.vgap+"px"}))):(json.width=o.width-2*o.hgap-o.lgap-o.rgap,void BI.createWidget({type:adaptLayout,scrollable:"normal"===o.whiteSpace,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,element:this,items:[{el:this.text=BI.createWidget(json)}]})):BI.isNumber(o.textWidth)&&o.textWidth>0?(json.width=o.textWidth,void BI.createWidget({type:adaptLayout,scrollable:"normal"===o.whiteSpace,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,element:this,items:[{el:this.text=BI.createWidget(json)}]})):BI.isNumber(o.height)&&o.height>0?("normal"!==o.whiteSpace&&this.element.css({"line-height":o.height-2*o.vgap+"px"}),void(this.text=BI.createWidget(BI.extend(json,{element:this,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap})))):(BI.extend(json,{hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap}),this.text=BI.createWidget(BI.extend(json,{maxWidth:"100%"})),void BI.createWidget({type:adaptLayout,element:this,items:[this.text]}))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},setText:function(v){this.options.text=v,this.text.setText(v)},getText:function(){return this.options.text},setStyle:function(css){this.text.setStyle(css)},setValue:function(v){BI.AbstractLabel.superclass.setValue.apply(this,arguments),this.isReadOnly()||this.text.setValue(v)},populate:function(){BI.AbstractLabel.superclass.populate.apply(this,arguments)}}),BI.HtmlLabel=BI.inherit(BI.AbstractLabel,{props:{baseCls:"bi-html-label"},_createJson:function(){var o=this.options;return{type:"bi.html",textAlign:o.textAlign,whiteSpace:o.whiteSpace,lineHeight:o.textHeight,text:o.text,value:o.value}}}),BI.shortcut("bi.html_label",BI.HtmlLabel),BI.IconLabel=BI.inherit(BI.Single,{props:{baseCls:"bi-icon-label horizon-center",iconWidth:null,iconHeight:null},_init:function(){BI.IconLabel.superclass._init.apply(this,arguments);var o=this.options;this.element.css({textAlign:"center"}),this.icon=BI.createWidget({type:"bi.icon",width:o.iconWidth,height:o.iconHeight}),BI.isNumber(o.height)&&o.height>0&&BI.isNull(o.iconWidth)&&BI.isNull(o.iconHeight)?(this.element.css("lineHeight",o.height+"px"),BI.createWidget({type:"bi.default",element:this,items:[this.icon]})):(this.element.css("lineHeight","1"),BI.createWidget({element:this,type:"bi.center_adapt",items:[this.icon]}))}}),BI.shortcut("bi.icon_label",BI.IconLabel),BI.Label=BI.inherit(BI.AbstractLabel,{props:{baseCls:"bi-label",py:"",keyword:""},_createJson:function(){var o=this.options;return{type:"bi.text",textAlign:o.textAlign,whiteSpace:o.whiteSpace,lineHeight:o.textHeight,text:o.text,value:o.value,py:o.py,keyword:o.keyword,highLight:o.highLight}},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)}}),BI.shortcut("bi.label",BI.Label),BI.Link=BI.inherit(BI.Label,{_defaultConfig:function(){var conf=BI.Link.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-link display-block",tagName:"a",href:"",target:"_blank"})},_createJson:function(){var o=this.options;return{type:"bi.a",textAlign:o.textAlign,whiteSpace:o.whiteSpace,lineHeight:o.textHeight,text:o.text,keyword:o.keyword,value:o.value,py:o.py,href:o.href,target:o.target}},_init:function(){BI.Link.superclass._init.apply(this,arguments)}}),BI.shortcut("bi.link",BI.Link),BI.Bubble=BI.inherit(BI.Tip,{_defaultConfig:function(){return BI.extend(BI.Bubble.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-bubble",direction:"top",text:"",level:"error",height:18})},_init:function(){BI.Bubble.superclass._init.apply(this,arguments);var fn=function(e){return e.stopPropagation(),e.stopEvent(),!1};this.element.bind({click:fn,mousedown:fn,mouseup:fn,mouseover:fn,mouseenter:fn,mouseleave:fn,mousemove:fn}),BI.createWidget({type:"bi.left",element:this,items:[this["_"+this.options.direction]()]})},_createBubbleText:function(){var o=this.options;return this.text=BI.createWidget({type:"bi.label",cls:"bubble-text bubble-"+o.level,text:o.text,hgap:5,height:18})},_top:function(){return BI.createWidget({type:"bi.vertical",items:[{el:this._createBubbleText(),height:18},{el:{type:"bi.layout"},height:3}]})},_bottom:function(){return BI.createWidget({type:"bi.vertical",items:[{el:{type:"bi.layout"},height:3},{el:this._createBubbleText(),height:18}]})},_left:function(){return BI.createWidget({type:"bi.right",items:[{el:{type:"bi.layout",width:3,height:18}},{el:this._createBubbleText()}]})},_right:function(){return BI.createWidget({type:"bi.left",items:[{el:{type:"bi.layout",width:3,height:18}},{el:this._createBubbleText()}]})},setText:function(text){this.text.setText(text)}}),BI.shortcut("bi.bubble",BI.Bubble),BI.Toast=BI.inherit(BI.Tip,{_const:{minWidth:200,hgap:10},_defaultConfig:function(){return BI.extend(BI.Toast.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-toast",text:"",level:"success"})},_init:function(){BI.Toast.superclass._init.apply(this,arguments);var self=this,o=this.options;this.element.css({minWidth:this._const.minWidth+"px"}),this.element.addClass("toast-"+o.level);var fn=function(e){return e.stopPropagation(),e.stopEvent(),!1};this.element.bind({click:fn,mousedown:fn,mouseup:fn,mouseover:fn,mouseenter:fn,mouseleave:fn,mousemove:fn});var cls="close-font";switch(o.level){case"success":cls="toast-success-font";break;case"error":cls="toast-error-font";break;case"warning":cls="toast-warning-font";break;case"normal":default:cls="toast-message-font"}var items=[{type:"bi.icon_label",cls:cls+" toast-icon",width:36},{el:{type:"bi.label",whiteSpace:"normal",text:o.text,textHeight:16,textAlign:"left"},rgap:o.autoClose?this._const.hgap:0}],columnSize=[36,""];o.autoClose===!1&&(items.push({ +type:"bi.icon_button",cls:"close-font toast-icon",handler:function(){self.destroy()},width:36}),columnSize.push(36)),this.text=BI.createWidget({type:"bi.horizontal_adapt",element:this,items:items,vgap:7,columnSize:columnSize})},setText:function(text){this.text.setText(text)},beforeDestroy:function(){this.fireEvent(BI.Toast.EVENT_DESTORY)}}),BI.Toast.EVENT_DESTORY="EVENT_DESTORY",BI.shortcut("bi.toast",BI.Toast),BI.Tooltip=BI.inherit(BI.Tip,{_const:{hgap:5,vgap:3},_defaultConfig:function(){return BI.extend(BI.Tooltip.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-tooltip",text:"",level:"success",stopEvent:!1,stopPropagation:!1})},_init:function(){BI.Tooltip.superclass._init.apply(this,arguments);var self=this,o=this.options;this.element.addClass("tooltip-"+o.level);var fn=function(e){o.stopPropagation&&e.stopPropagation(),o.stopEvent&&e.stopEvent()};this.element.bind({click:fn,mousedown:fn,mouseup:fn,mouseover:fn,mouseenter:fn,mouseleave:fn,mousemove:fn});var texts=(o.text+"").split("\n");texts.length>1?BI.createWidget({type:"bi.vertical",element:this,hgap:this._const.hgap,items:BI.map(texts,function(i,text){return{type:"bi.label",textAlign:"left",whiteSpace:"normal",text:text,textHeight:18}})}):this.text=BI.createWidget({type:"bi.label",element:this,textAlign:"left",whiteSpace:"normal",text:o.text,textHeight:18,hgap:this._const.hgap})},setWidth:function(width){this.element.width(width-2*this._const.hgap)},setText:function(text){this.text&&this.text.setText(text)},setLevel:function(level){this.element.removeClass("tooltip-success").removeClass("tooltip-warning"),this.element.addClass("tooltip-"+level)}}),BI.shortcut("bi.tooltip",BI.Tooltip),BI.Trigger=BI.inherit(BI.Single,{_defaultConfig:function(){var conf=BI.Trigger.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{_baseCls:(conf._baseCls||"")+" bi-trigger cursor-pointer",height:24})},_init:function(){BI.Trigger.superclass._init.apply(this,arguments)},setKey:function(){},getKey:function(){}}),BI.CustomTree=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.CustomTree.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-custom-tree",expander:{el:{},popup:{type:"bi.custom_tree"}},items:[],itemsCreator:BI.emptyFn,el:{type:"bi.button_tree",chooseType:0,layouts:[{type:"bi.vertical"}]}})},_init:function(){BI.CustomTree.superclass._init.apply(this,arguments),this.initTree(this.options.items)},_formatItems:function(nodes){var self=this,o=this.options;nodes=BI.Tree.transformToTreeFormat(nodes);var items=[];return BI.each(nodes,function(i,node){if(BI.isNotEmptyArray(node.children)||node.isParent===!0){var item=BI.extend({type:"bi.expander",el:{value:node.value},popup:{type:"bi.custom_tree"}},BI.deepClone(o.expander),{id:node.id,pId:node.pId}),el=BI.stripEL(node);BI.isWidget(el)?item.el=el:(el=BI.clone(el),delete el.children,BI.extend(item.el,el)),item.popup.expander=BI.deepClone(o.expander),item.items=item.popup.items=node.children,item.itemsCreator=item.popup.itemsCreator=function(op){if(BI.isNotNull(op.node))return o.itemsCreator.apply(self,arguments);var args=Array.prototype.slice.call(arguments,0);return args[0].node=node,o.itemsCreator.apply(self,args)},BI.isNull(item.popup.el)&&(item.popup.el=BI.deepClone(o.el)),items.push(item)}else items.push(node)}),items},initTree:function(nodes){var self=this,o=this.options;this.tree=BI.createWidget(o.el,{element:this,items:this._formatItems(nodes),itemsCreator:function(op,callback){o.itemsCreator.apply(this,[op,function(items){var args=Array.prototype.slice.call(arguments,0);args[0]=self._formatItems(items),callback.apply(null,args)}])},value:o.value}),this.tree.on(BI.Controller.EVENT_CHANGE,function(type,val,obj){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.CustomTree.EVENT_CHANGE,val,obj)})},stroke:function(nodes){this.populate.apply(this,arguments)},populate:function(nodes){var args=Array.prototype.slice.call(arguments,0);arguments.length>0&&(args[0]=this._formatItems(nodes)),this.tree.populate.apply(this.tree,args)},setValue:function(v){this.tree&&this.tree.setValue(v)},getValue:function(){return this.tree?this.tree.getValue():[]},getAllButtons:function(){return this.tree?this.tree.getAllButtons():[]},getAllLeaves:function(){return this.tree?this.tree.getAllLeaves():[]},getNodeById:function(id){return this.tree&&this.tree.getNodeById(id)},getNodeByValue:function(id){return this.tree&&this.tree.getNodeByValue(id)},empty:function(){this.tree.empty()}}),BI.CustomTree.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.custom_tree",BI.CustomTree),function($){var settings={},roots={},caches={},_consts={className:{BUTTON:"button",LEVEL:"level",ICO_LOADING:"ico_loading",SWITCH:"switch"},event:{NODECREATED:"ztree_nodeCreated",CLICK:"ztree_click",EXPAND:"ztree_expand",COLLAPSE:"ztree_collapse",ASYNC_SUCCESS:"ztree_async_success",ASYNC_ERROR:"ztree_async_error",REMOVE:"ztree_remove",SELECTED:"ztree_selected",UNSELECTED:"ztree_unselected"},id:{A:"_a",ICON:"_ico",SPAN:"_span",SWITCH:"_switch",UL:"_ul"},line:{ROOT:"root",ROOTS:"roots",CENTER:"center",BOTTOM:"bottom",NOLINE:"noline",LINE:"line"},folder:{OPEN:"open",CLOSE:"close",DOCU:"docu"},node:{CURSELECTED:"curSelectedNode"}},_setting={treeId:"",treeObj:null,view:{addDiyDom:null,autoCancelSelected:!0,dblClickExpand:!0,expandSpeed:"fast",fontCss:{},nameIsHTML:!1,selectedMulti:!0,showIcon:!0,showLine:!0,showTitle:!0,txtSelectedEnable:!1},data:{key:{children:"children",name:"name",title:"",url:"url"},simpleData:{enable:!1,idKey:"id",pIdKey:"pId",rootPId:null},keep:{parent:!1,leaf:!1}},async:{enable:!1,contentType:"application/x-www-form-urlencoded",type:"post",dataType:"text",url:"",autoParam:[],otherParam:[],dataFilter:null},callback:{beforeAsync:null,beforeClick:null,beforeDblClick:null,beforeRightClick:null,beforeMouseDown:null,beforeMouseUp:null,beforeExpand:null,beforeCollapse:null,beforeRemove:null,onAsyncError:null,onAsyncSuccess:null,onNodeCreated:null,onClick:null,onDblClick:null,onRightClick:null,onMouseDown:null,onMouseUp:null,onExpand:null,onCollapse:null,onRemove:null}},_initRoot=function(setting){var r=data.getRoot(setting);r||(r={},data.setRoot(setting,r)),r[setting.data.key.children]=[],r.expandTriggerFlag=!1,r.curSelectedList=[],r.noSelection=!0,r.createdNodes=[],r.zId=0,r._ver=(new Date).getTime()},_initCache=function(setting){var c=data.getCache(setting);c||(c={},data.setCache(setting,c)),c.nodes=[],c.doms=[]},_bindEvent=function(setting){var o=setting.treeObj,c=consts.event;o.bind(c.NODECREATED,function(event,treeId,node){tools.apply(setting.callback.onNodeCreated,[event,treeId,node])}),o.bind(c.CLICK,function(event,srcEvent,treeId,node,clickFlag){tools.apply(setting.callback.onClick,[srcEvent,treeId,node,clickFlag])}),o.bind(c.EXPAND,function(event,treeId,node){tools.apply(setting.callback.onExpand,[event,treeId,node])}),o.bind(c.COLLAPSE,function(event,treeId,node){tools.apply(setting.callback.onCollapse,[event,treeId,node])}),o.bind(c.ASYNC_SUCCESS,function(event,treeId,node,msg){tools.apply(setting.callback.onAsyncSuccess,[event,treeId,node,msg])}),o.bind(c.ASYNC_ERROR,function(event,treeId,node,XMLHttpRequest,textStatus,errorThrown){tools.apply(setting.callback.onAsyncError,[event,treeId,node,XMLHttpRequest,textStatus,errorThrown])}),o.bind(c.REMOVE,function(event,treeId,treeNode){tools.apply(setting.callback.onRemove,[event,treeId,treeNode])}),o.bind(c.SELECTED,function(event,srcEvent,treeId,node){tools.apply(setting.callback.onSelected,[srcEvent,treeId,node])}),o.bind(c.UNSELECTED,function(event,srcEvent,treeId,node){tools.apply(setting.callback.onUnSelected,[srcEvent,treeId,node])})},_unbindEvent=function(setting){var o=setting.treeObj,c=consts.event;o.unbind(c.NODECREATED).unbind(c.CLICK).unbind(c.EXPAND).unbind(c.COLLAPSE).unbind(c.ASYNC_SUCCESS).unbind(c.ASYNC_ERROR).unbind(c.REMOVE).unbind(c.SELECTED).unbind(c.UNSELECTED)},_eventProxy=function(event){var target=event.target,setting=data.getSetting(event.data.treeId),tId="",node=null,nodeEventType="",treeEventType="",nodeEventCallback=null,treeEventCallback=null,tmp=null;if(tools.eqs(event.type,"mousedown")?treeEventType="mousedown":tools.eqs(event.type,"mouseup")?treeEventType="mouseup":tools.eqs(event.type,"contextmenu")?treeEventType="contextmenu":tools.eqs(event.type,"click")?tools.eqs(target.tagName,"span")&&null!==target.getAttribute("treeNode"+consts.id.SWITCH)?(tId=tools.getNodeMainDom(target).id,nodeEventType="switchNode"):(tmp=tools.getMDom(setting,target,[{tagName:"a",attrName:"treeNode"+consts.id.A}]),tmp&&(tId=tools.getNodeMainDom(tmp).id,nodeEventType="clickNode")):tools.eqs(event.type,"dblclick")&&(treeEventType="dblclick",tmp=tools.getMDom(setting,target,[{tagName:"a",attrName:"treeNode"+consts.id.A}]),tmp&&(tId=tools.getNodeMainDom(tmp).id,nodeEventType="switchNode")),treeEventType.length>0&&0==tId.length&&(tmp=tools.getMDom(setting,target,[{tagName:"a",attrName:"treeNode"+consts.id.A}]),tmp&&(tId=tools.getNodeMainDom(tmp).id)),tId.length>0)switch(node=data.getNodeCache(setting,tId),nodeEventType){case"switchNode":node.isParent&&(tools.eqs(event.type,"click")||tools.eqs(event.type,"dblclick")&&tools.apply(setting.view.dblClickExpand,[setting.treeId,node],setting.view.dblClickExpand))?nodeEventCallback=handler.onSwitchNode:nodeEventType="";break;case"clickNode":nodeEventCallback=handler.onClickNode}switch(treeEventType){case"mousedown":treeEventCallback=handler.onZTreeMousedown;break;case"mouseup":treeEventCallback=handler.onZTreeMouseup;break;case"dblclick":treeEventCallback=handler.onZTreeDblclick;break;case"contextmenu":treeEventCallback=handler.onZTreeContextmenu}var proxyResult={stop:!1,node:node,nodeEventType:nodeEventType,nodeEventCallback:nodeEventCallback,treeEventType:treeEventType,treeEventCallback:treeEventCallback};return proxyResult},_initNode=function(setting,level,n,parentNode,isFirstNode,isLastNode,openFlag){if(n){var r=data.getRoot(setting),childKey=setting.data.key.children;n.level=level,n.tId=setting.treeId+"_"+ ++r.zId,n.parentTId=parentNode?parentNode.tId:null,n.open="string"==typeof n.open?tools.eqs(n.open,"true"):!!n.open,n[childKey]&&n[childKey].length>0?(n.isParent=!0,n.zAsync=!0):(n.isParent="string"==typeof n.isParent?tools.eqs(n.isParent,"true"):!!n.isParent,n.open=!(!n.isParent||setting.async.enable)&&n.open,n.zAsync=!n.isParent),n.isFirstNode=isFirstNode,n.isLastNode=isLastNode,n.getParentNode=function(){return data.getNodeCache(setting,n.parentTId)},n.getPreNode=function(){return data.getPreNode(setting,n)},n.getNextNode=function(){return data.getNextNode(setting,n)},n.isAjaxing=!1,data.fixPIdKeyValue(setting,n)}},_init={bind:[_bindEvent],unbind:[_unbindEvent],caches:[_initCache],nodes:[_initNode],proxys:[_eventProxy],roots:[_initRoot],beforeA:[],afterA:[],innerBeforeA:[],innerAfterA:[],zTreeTools:[]},data={addNodeCache:function(setting,node){data.getCache(setting).nodes[data.getNodeCacheId(node.tId)]=node},getNodeCacheId:function(tId){return tId.substring(tId.lastIndexOf("_")+1)},addAfterA:function(afterA){_init.afterA.push(afterA)},addBeforeA:function(beforeA){_init.beforeA.push(beforeA)},addInnerAfterA:function(innerAfterA){_init.innerAfterA.push(innerAfterA)},addInnerBeforeA:function(innerBeforeA){_init.innerBeforeA.push(innerBeforeA)},addInitBind:function(bindEvent){_init.bind.push(bindEvent)},addInitUnBind:function(unbindEvent){_init.unbind.push(unbindEvent)},addInitCache:function(initCache){_init.caches.push(initCache)},addInitNode:function(initNode){_init.nodes.push(initNode)},addInitProxy:function(initProxy,isFirst){isFirst?_init.proxys.splice(0,0,initProxy):_init.proxys.push(initProxy)},addInitRoot:function(initRoot){_init.roots.push(initRoot)},addNodesData:function(setting,parentNode,nodes){var childKey=setting.data.key.children;parentNode[childKey]||(parentNode[childKey]=[]),parentNode[childKey].length>0&&(parentNode[childKey][parentNode[childKey].length-1].isLastNode=!1,view.setNodeLineIcos(setting,parentNode[childKey][parentNode[childKey].length-1])),parentNode.isParent=!0,parentNode[childKey]=parentNode[childKey].concat(nodes)},addSelectedNode:function(setting,node){var root=data.getRoot(setting);data.isSelectedNode(setting,node)||root.curSelectedList.push(node)},addCreatedNode:function(setting,node){if(setting.callback.onNodeCreated||setting.view.addDiyDom){var root=data.getRoot(setting);root.createdNodes.push(node)}},addZTreeTools:function(zTreeTools){_init.zTreeTools.push(zTreeTools)},exSetting:function(s){$.extend(!0,_setting,s)},fixPIdKeyValue:function(setting,node){setting.data.simpleData.enable&&(node[setting.data.simpleData.pIdKey]=node.parentTId?node.getParentNode()[setting.data.simpleData.idKey]:setting.data.simpleData.rootPId)},getAfterA:function(setting,node,array){for(var i=0,j=_init.afterA.length;i-1&&result.push(nodes[i]),result=result.concat(data.getNodesByParamFuzzy(setting,nodes[i][childKey],key,value));return result},getNodesByFilter:function(setting,nodes,filter,isSingle,invokeParam){if(!nodes)return isSingle?null:[];for(var childKey=setting.data.key.children,result=isSingle?null:[],i=0,l=nodes.length;i0)},clone:function(obj){if(null===obj)return null;var o=tools.isArray(obj)?[]:{};for(var i in obj)o[i]=obj[i]instanceof Date?new Date(obj[i].getTime()):"object"==typeof obj[i]?arguments.callee(obj[i]):obj[i];return o},eqs:function(str1,str2){return str1.toLowerCase()===str2.toLowerCase()},isArray:function(arr){return"[object Array]"===Object.prototype.toString.apply(arr)},$:function(node,exp,setting){return exp&&"string"!=typeof exp&&(setting=exp,exp=""),"string"==typeof node?$(node,setting?setting.treeObj.get(0).ownerDocument:null):$("#"+node.tId+exp,setting?setting.treeObj:null)},getMDom:function(setting,curDom,targetExpr){if(!curDom)return null;for(;curDom&&curDom.id!==setting.treeId;){for(var i=0,l=targetExpr.length;curDom.tagName&&i0},uCanDo:function(setting,e){return!0}},view={addNodes:function(setting,parentNode,newNodes,isSilent){if(!setting.data.keep.leaf||!parentNode||parentNode.isParent)if(tools.isArray(newNodes)||(newNodes=[newNodes]),setting.data.simpleData.enable&&(newNodes=data.transformTozTreeFormat(setting,newNodes)),parentNode){var target_switchObj=$$(parentNode,consts.id.SWITCH,setting),target_icoObj=$$(parentNode,consts.id.ICON,setting),target_ulObj=$$(parentNode,consts.id.UL,setting);parentNode.open||(view.replaceSwitchClass(parentNode,target_switchObj,consts.folder.CLOSE),view.replaceIcoClass(parentNode,target_icoObj,consts.folder.CLOSE),parentNode.open=!1,target_ulObj.css({display:"none"})),data.addNodesData(setting,parentNode,newNodes),view.createNodes(setting,parentNode.level+1,newNodes,parentNode),isSilent||view.expandCollapseParentNode(setting,parentNode,!0)}else data.addNodesData(setting,data.getRoot(setting),newNodes),view.createNodes(setting,0,newNodes,null)},appendNodes:function(setting,level,nodes,parentNode,initFlag,openFlag){if(!nodes)return[];for(var html=[],childKey=setting.data.key.children,i=0,l=nodes.length;i0&&(childHtml=view.appendNodes(setting,level+1,node[childKey],node,initFlag,openFlag&&node.open)),openFlag&&(view.makeDOMNodeMainBefore(html,setting,node),view.makeDOMNodeLine(html,setting,node),data.getBeforeA(setting,node,html),view.makeDOMNodeNameBefore(html,setting,node),data.getInnerBeforeA(setting,node,html),view.makeDOMNodeIcon(html,setting,node),data.getInnerAfterA(setting,node,html),view.makeDOMNodeNameAfter(html,setting,node),data.getAfterA(setting,node,html),node.isParent&&node.open&&view.makeUlHtml(setting,node,html,childHtml.join("")),view.makeDOMNodeMainAfter(html,setting,node),data.addCreatedNode(setting,node))}return html},appendParentULDom:function(setting,node){var html=[],nObj=$$(node,setting);!nObj.get(0)&&node.parentTId&&(view.appendParentULDom(setting,node.getParentNode()),nObj=$$(node,setting));var ulObj=$$(node,consts.id.UL,setting);ulObj.get(0)&&ulObj.remove();var childKey=setting.data.key.children,childHtml=view.appendNodes(setting,node.level+1,node[childKey],node,!1,!0);view.makeUlHtml(setting,node,html,childHtml.join("")),nObj.append(html.join(""))},asyncNode:function(setting,node,isSilent,callback){var i,l;if(node&&!node.isParent)return tools.apply(callback),!1;if(node&&node.isAjaxing)return!1;if(0==tools.apply(setting.callback.beforeAsync,[setting.treeId,node],!0))return tools.apply(callback),!1;if(node){node.isAjaxing=!0;var icoObj=$$(node,consts.id.ICON,setting);icoObj.attr({style:"","class":consts.className.BUTTON+" "+consts.className.ICO_LOADING})}var tmpParam={};for(i=0,l=setting.async.autoParam.length;node&&i1&&(spKey=pKey[1],pKey=pKey[0]),tmpParam[spKey]=node[pKey]}if(tools.isArray(setting.async.otherParam))for(i=0,l=setting.async.otherParam.length;i=0;i--)if(n=list[i],node===n||!node&&(!excludeNode||excludeNode!==n)){if($$(n,consts.id.A,setting).removeClass(consts.node.CURSELECTED),node){data.removeSelectedNode(setting,node),setting.treeObj.trigger(consts.event.UNSELECTED,[event,setting.treeId,n]);break}list.splice(i,1),setting.treeObj.trigger(consts.event.UNSELECTED,[event,setting.treeId,n])}},createNodeCallback:function(setting){if(setting.callback.onNodeCreated||setting.view.addDiyDom)for(var root=data.getRoot(setting);root.createdNodes.length>0;){var node=root.createdNodes.shift();tools.apply(setting.view.addDiyDom,[setting.treeId,node]),setting.callback.onNodeCreated&&setting.treeObj.trigger(consts.event.NODECREATED,[setting.treeId,node])}},createNodes:function(setting,level,nodes,parentNode){if(nodes&&0!=nodes.length){var root=data.getRoot(setting),childKey=setting.data.key.children,openFlag=!parentNode||parentNode.open||!!$$(parentNode[childKey][0],setting).get(0);root.createdNodes=[];var zTreeHtml=view.appendNodes(setting,level,nodes,parentNode,!0,openFlag);if(parentNode){var ulObj=$$(parentNode,consts.id.UL,setting);ulObj.get(0)&&ulObj.append(zTreeHtml.join(""))}else setting.treeObj.append(zTreeHtml.join(""));view.createNodeCallback(setting)}},destroy:function(setting){setting&&(data.initCache(setting),data.initRoot(setting),event.unbindTree(setting),event.unbindEvent(setting),setting.treeObj.empty(),delete settings[setting.treeId])},expandCollapseNode:function(setting,node,expandFlag,animateFlag,callback){var root=data.getRoot(setting),childKey=setting.data.key.children;if(!node)return void tools.apply(callback,[]);if(root.expandTriggerFlag){var _callback=callback;callback=function(){_callback&&_callback(),node.open?setting.treeObj.trigger(consts.event.EXPAND,[setting.treeId,node]):setting.treeObj.trigger(consts.event.COLLAPSE,[setting.treeId,node])},root.expandTriggerFlag=!1}if(!node.open&&node.isParent&&(!$$(node,consts.id.UL,setting).get(0)||node[childKey]&&node[childKey].length>0&&!$$(node[childKey][0],setting).get(0))&&(view.appendParentULDom(setting,node),view.createNodeCallback(setting)),node.open==expandFlag)return void tools.apply(callback,[]);var ulObj=$$(node,consts.id.UL,setting),switchObj=$$(node,consts.id.SWITCH,setting),icoObj=$$(node,consts.id.ICON,setting);node.isParent?(node.open=!node.open,node.iconOpen&&node.iconClose&&icoObj.attr("style",view.makeNodeIcoStyle(setting,node)),node.open?(view.replaceSwitchClass(node,switchObj,consts.folder.OPEN),view.replaceIcoClass(node,icoObj,consts.folder.OPEN),0==animateFlag||""==setting.view.expandSpeed?(ulObj.show(),tools.apply(callback,[])):node[childKey]&&node[childKey].length>0?ulObj.slideDown(setting.view.expandSpeed,callback):(ulObj.show(),tools.apply(callback,[]))):(view.replaceSwitchClass(node,switchObj,consts.folder.CLOSE),view.replaceIcoClass(node,icoObj,consts.folder.CLOSE),0!=animateFlag&&""!=setting.view.expandSpeed&&node[childKey]&&node[childKey].length>0?ulObj.slideUp(setting.view.expandSpeed,callback):(ulObj.hide(),tools.apply(callback,[])))):tools.apply(callback,[])},expandCollapseParentNode:function(setting,node,expandFlag,animateFlag,callback){if(node){if(!node.parentTId)return void view.expandCollapseNode(setting,node,expandFlag,animateFlag,callback);view.expandCollapseNode(setting,node,expandFlag,animateFlag),node.parentTId&&view.expandCollapseParentNode(setting,node.getParentNode(),expandFlag,animateFlag,callback)}},expandCollapseSonNode:function(setting,node,expandFlag,animateFlag,callback){var root=data.getRoot(setting),childKey=setting.data.key.children,treeNodes=node?node[childKey]:root[childKey],selfAnimateSign=!node&&animateFlag,expandTriggerFlag=data.getRoot(setting).expandTriggerFlag;if(data.getRoot(setting).expandTriggerFlag=!1,treeNodes)for(var i=0,l=treeNodes.length;i=0;i--)if(node===list[i])return!0;return!1},makeDOMNodeIcon:function(html,setting,node){var nameStr=data.getNodeName(setting,node),name=setting.view.nameIsHTML?nameStr:nameStr.replace(/&/g,"&").replace(//g,">");html.push("",name,"")},makeDOMNodeLine:function(html,setting,node){html.push("")},makeDOMNodeMainAfter:function(html,setting,node){html.push("")},makeDOMNodeMainBefore:function(html,setting,node){html.push("
    • ")},makeDOMNodeNameAfter:function(html,setting,node){html.push("")},makeDOMNodeNameBefore:function(html,setting,node){var title=data.getNodeTitle(setting,node),url=view.makeNodeUrl(setting,node),fontcss=view.makeNodeFontCss(setting,node),fontStyle=[];for(var f in fontcss)fontStyle.push(f,":",fontcss[f],";");html.push("0?"href='"+url+"'":""," target='",view.makeNodeTarget(node),"' style='",fontStyle.join(""),"'"),tools.apply(setting.view.showTitle,[setting.treeId,node],setting.view.showTitle)&&title&&html.push("title='",title.replace(/'/g,"'").replace(//g,">"),"'"),html.push(">")},makeNodeFontCss:function(setting,node){var fontCss=tools.apply(setting.view.fontCss,[setting.treeId,node],setting.view.fontCss);return fontCss&&"function"!=typeof fontCss?fontCss:{}},makeNodeIcoClass:function(setting,node){var icoCss=["ico"];return node.isAjaxing||(icoCss[0]=(node.iconSkin?node.iconSkin+"_":"")+icoCss[0],node.isParent?icoCss.push(node.open?consts.folder.OPEN:consts.folder.CLOSE):icoCss.push(consts.folder.DOCU)),consts.className.BUTTON+" "+icoCss.join("_")},makeNodeIcoStyle:function(setting,node){var icoStyle=[];if(!node.isAjaxing){var icon=node.isParent&&node.iconOpen&&node.iconClose?node.open?node.iconOpen:node.iconClose:node.icon;icon&&icoStyle.push("background:url(",icon,") 0 0 no-repeat;"),0!=setting.view.showIcon&&tools.apply(setting.view.showIcon,[setting.treeId,node],!0)||icoStyle.push("width:0px;height:0px;")}return icoStyle.join("")},makeNodeLineClass:function(setting,node){var lineClass=[];return setting.view.showLine?0==node.level&&node.isFirstNode&&node.isLastNode?lineClass.push(consts.line.ROOT):0==node.level&&node.isFirstNode?lineClass.push(consts.line.ROOTS):node.isLastNode?lineClass.push(consts.line.BOTTOM):lineClass.push(consts.line.CENTER):lineClass.push(consts.line.NOLINE),node.isParent?lineClass.push(node.open?consts.folder.OPEN:consts.folder.CLOSE):lineClass.push(consts.folder.DOCU),view.makeNodeLineClassEx(node)+lineClass.join("_")},makeNodeLineClassEx:function(node){return consts.className.BUTTON+" "+consts.className.LEVEL+node.level+" "+consts.className.SWITCH+" "},makeNodeTarget:function(node){return node.target||"_blank"},makeNodeUrl:function(setting,node){var urlKey=setting.data.key.url;return node[urlKey]?node[urlKey]:null},makeUlHtml:function(setting,node,html,content){html.push("
        "),html.push(content),html.push("
      ")},makeUlLineClass:function(setting,node){return setting.view.showLine&&!node.isLastNode?consts.line.LINE:""},removeChildNodes:function(setting,node){if(node){var childKey=setting.data.key.children,nodes=node[childKey];if(nodes){for(var i=0,l=nodes.length;i0&&(parentNode[childKey][0].isFirstNode=!0)},setLastNode:function(setting,parentNode){var childKey=setting.data.key.children,childLength=parentNode[childKey].length;childLength>0&&(parentNode[childKey][childLength-1].isLastNode=!0)},removeNode:function(setting,node){var root=data.getRoot(setting),childKey=setting.data.key.children,parentNode=node.parentTId?node.getParentNode():root;if(node.isFirstNode=!1,node.isLastNode=!1,node.getPreNode=function(){return null},node.getNextNode=function(){return null},data.getNodeCache(setting,node.tId)){$$(node,setting).remove(),data.removeNodeCache(setting,node),data.removeSelectedNode(setting,node);for(var i=0,l=parentNode[childKey].length;i0){var newLast=parentNode[childKey][childLength-1];if(tmp_ulObj=$$(newLast,consts.id.UL,setting),tmp_switchObj=$$(newLast,consts.id.SWITCH,setting),tmp_icoObj=$$(newLast,consts.id.ICON,setting),parentNode==root)if(1==parentNode[childKey].length)view.replaceSwitchClass(newLast,tmp_switchObj,consts.line.ROOT);else{var tmp_first_switchObj=$$(parentNode[childKey][0],consts.id.SWITCH,setting);view.replaceSwitchClass(parentNode[childKey][0],tmp_first_switchObj,consts.line.ROOTS),view.replaceSwitchClass(newLast,tmp_switchObj,consts.line.BOTTOM)}else view.replaceSwitchClass(newLast,tmp_switchObj,consts.line.BOTTOM);tmp_ulObj.removeClass(consts.line.LINE)}}else parentNode.isParent=!1,parentNode.open=!1,tmp_ulObj=$$(parentNode,consts.id.UL,setting),tmp_switchObj=$$(parentNode,consts.id.SWITCH,setting),tmp_icoObj=$$(parentNode,consts.id.ICON,setting),view.replaceSwitchClass(parentNode,tmp_switchObj,consts.folder.DOCU),view.replaceIcoClass(parentNode,tmp_icoObj,consts.folder.DOCU),tmp_ulObj.css("display","none")}},replaceIcoClass:function(node,obj,newName){if(obj&&!node.isAjaxing){var tmpName=obj.attr("class");if(void 0!=tmpName){var tmpList=tmpName.split("_");switch(newName){case consts.folder.OPEN:case consts.folder.CLOSE:case consts.folder.DOCU:tmpList[tmpList.length-1]=newName}obj.attr("class",tmpList.join("_"))}}},replaceSwitchClass:function(node,obj,newName){if(obj){var tmpName=obj.attr("class");if(void 0!=tmpName){var tmpList=tmpName.split("_");switch(newName){case consts.line.ROOT:case consts.line.ROOTS:case consts.line.CENTER:case consts.line.BOTTOM:case consts.line.NOLINE:tmpList[0]=view.makeNodeLineClassEx(node)+newName;break;case consts.folder.OPEN:case consts.folder.CLOSE:case consts.folder.DOCU:tmpList[1]=newName}obj.attr("class",tmpList.join("_")),newName!==consts.folder.DOCU?obj.removeAttr("disabled"):obj.attr("disabled","disabled")}}},selectNode:function(setting,node,addFlag){addFlag||view.cancelPreSelectedNode(setting,null,node),$$(node,consts.id.A,setting).addClass(consts.node.CURSELECTED),data.addSelectedNode(setting,node),setting.treeObj.trigger(consts.event.SELECTED,[event,setting.treeId,node])},setNodeFontCss:function(setting,treeNode){var aObj=$$(treeNode,consts.id.A,setting),fontCss=view.makeNodeFontCss(setting,treeNode);fontCss&&aObj.css(fontCss)},setNodeLineIcos:function(setting,node){if(node){var switchObj=$$(node,consts.id.SWITCH,setting),ulObj=$$(node,consts.id.UL,setting),icoObj=$$(node,consts.id.ICON,setting),ulLine=view.makeUlLineClass(setting,node);0==ulLine.length?ulObj.removeClass(consts.line.LINE):ulObj.addClass(ulLine),switchObj.attr("class",view.makeNodeLineClass(setting,node)),node.isParent?switchObj.removeAttr("disabled"):switchObj.attr("disabled","disabled"),icoObj.removeAttr("style"),icoObj.attr("style",view.makeNodeIcoStyle(setting,node)),icoObj.attr("class",view.makeNodeIcoClass(setting,node))}},setNodeName:function(setting,node){var title=data.getNodeTitle(setting,node),nObj=$$(node,consts.id.SPAN,setting);if(nObj.empty(),setting.view.nameIsHTML?nObj.html(data.getNodeName(setting,node)):nObj.text(data.getNodeName(setting,node)),tools.apply(setting.view.showTitle,[setting.treeId,node],setting.view.showTitle)){var aObj=$$(node,consts.id.A,setting);aObj.attr("title",title?title:"")}},setNodeTarget:function(setting,node){var aObj=$$(node,consts.id.A,setting);aObj.attr("target",view.makeNodeTarget(node))},setNodeUrl:function(setting,node){var aObj=$$(node,consts.id.A,setting),url=view.makeNodeUrl(setting,node);null==url||0==url.length?aObj.removeAttr("href"):aObj.attr("href",url)},switchNode:function(setting,node){if(node.open||!tools.canAsync(setting,node))view.expandCollapseNode(setting,node,!node.open);else if(setting.async.enable){if(!view.asyncNode(setting,node))return void view.expandCollapseNode(setting,node,!node.open)}else node&&view.expandCollapseNode(setting,node,!node.open)}};$.fn.zTree={consts:_consts,_z:{tools:tools,view:view,event:event,data:data},getZTreeObj:function(treeId){var o=data.getZTreeTools(treeId);return o?o:null},destroy:function(treeId){if(treeId&&treeId.length>0)view.destroy(data.getSetting(treeId));else for(var s in settings)view.destroy(settings[s])},init:function(obj,zSetting,zNodes){var setting=tools.clone(_setting);$.extend(!0,setting,zSetting),setting.treeId=obj.attr("id"),setting.treeObj=obj,setting.treeObj.empty(),settings[setting.treeId]=setting,"undefined"==typeof document.body.style.maxHeight&&(setting.view.expandSpeed=""),data.initRoot(setting);var root=data.getRoot(setting),childKey=setting.data.key.children;zNodes=zNodes?tools.clone(tools.isArray(zNodes)?zNodes:[zNodes]):[],setting.data.simpleData.enable?root[childKey]=data.transformTozTreeFormat(setting,zNodes):root[childKey]=zNodes,data.initCache(setting),event.unbindTree(setting),event.bindTree(setting),event.unbindEvent(setting),event.bindEvent(setting);var zTreeTools={setting:setting,addNodes:function(parentNode,newNodes,isSilent){function addCallback(){view.addNodes(setting,parentNode,xNewNodes,1==isSilent)}if(!newNodes)return null;if(parentNode||(parentNode=null),parentNode&&!parentNode.isParent&&setting.data.keep.leaf)return null;var xNewNodes=tools.clone(tools.isArray(newNodes)?newNodes:[newNodes]);return tools.canAsync(setting,parentNode)?view.asyncNode(setting,parentNode,isSilent,addCallback):addCallback(),xNewNodes},cancelSelectedNode:function(node){view.cancelPreSelectedNode(setting,node)},destroy:function(){view.destroy(setting)},expandAll:function(expandFlag){return expandFlag=!!expandFlag,view.expandCollapseSonNode(setting,null,expandFlag,!0),expandFlag},expandNode:function(node,expandFlag,sonSign,focus,callbackFlag){if(!node||!node.isParent)return null;if(expandFlag!==!0&&expandFlag!==!1&&(expandFlag=!node.open),callbackFlag=!!callbackFlag,callbackFlag&&expandFlag&&0==tools.apply(setting.callback.beforeExpand,[setting.treeId,node],!0))return null;if(callbackFlag&&!expandFlag&&0==tools.apply(setting.callback.beforeCollapse,[setting.treeId,node],!0))return null;if(expandFlag&&node.parentTId&&view.expandCollapseParentNode(setting,node.getParentNode(),expandFlag,!1),expandFlag===node.open&&!sonSign)return null;if(data.getRoot(setting).expandTriggerFlag=callbackFlag,!tools.canAsync(setting,node)&&sonSign)view.expandCollapseSonNode(setting,node,expandFlag,!0,function(){if(focus!==!1)try{$$(node,setting).focus().blur()}catch(e){}});else if(node.open=!expandFlag,view.switchNode(this.setting,node),focus!==!1)try{$$(node,setting).focus().blur()}catch(e){}return expandFlag},getNodes:function(){return data.getNodes(setting)},getNodeByParam:function(key,value,parentNode){return key?data.getNodeByParam(setting,parentNode?parentNode[setting.data.key.children]:data.getNodes(setting),key,value):null},getNodeByTId:function(tId){return data.getNodeCache(setting,tId)},getNodesByParam:function(key,value,parentNode){return key?data.getNodesByParam(setting,parentNode?parentNode[setting.data.key.children]:data.getNodes(setting),key,value):null},getNodesByParamFuzzy:function(key,value,parentNode){return key?data.getNodesByParamFuzzy(setting,parentNode?parentNode[setting.data.key.children]:data.getNodes(setting),key,value):null},getNodesByFilter:function(filter,isSingle,parentNode,invokeParam){return isSingle=!!isSingle,filter&&"function"==typeof filter?data.getNodesByFilter(setting,parentNode?parentNode[setting.data.key.children]:data.getNodes(setting),filter,isSingle,invokeParam):isSingle?null:[]},getNodeIndex:function(node){if(!node)return null;for(var childKey=setting.data.key.children,parentNode=node.parentTId?node.getParentNode():data.getRoot(setting),i=0,l=parentNode[childKey].length;i0?view.createNodes(setting,0,root[childKey]):setting.async.enable&&setting.async.url&&""!==setting.async.url&&view.asyncNode(setting),zTreeTools}};var zt=$.fn.zTree,$$=tools.$,consts=zt.consts}(BI.jQuery),function($){var _consts={event:{CHECK:"ztree_check"},id:{CHECK:"_check"},checkbox:{STYLE:"checkbox",DEFAULT:"chk",DISABLED:"disable",FALSE:"false",TRUE:"true",FULL:"full",PART:"part",FOCUS:"focus"},radio:{STYLE:"radio",TYPE_ALL:"all",TYPE_LEVEL:"level"}},_setting={check:{enable:!1,autoCheckTrigger:!1,chkStyle:_consts.checkbox.STYLE,nocheckInherit:!1,chkDisabledInherit:!1,radioType:_consts.radio.TYPE_LEVEL,chkboxType:{Y:"ps",N:"ps"}},data:{key:{checked:"checked"}},callback:{beforeCheck:null,onCheck:null}},_initRoot=function(setting){var r=data.getRoot(setting);r.radioCheckedList=[]},_initCache=function(treeId){},_bindEvent=function(setting){var o=setting.treeObj,c=consts.event;o.bind(c.CHECK,function(event,srcEvent,treeId,node){event.srcEvent=srcEvent,tools.apply(setting.callback.onCheck,[event,treeId,node])})},_unbindEvent=function(setting){var o=setting.treeObj,c=consts.event;o.unbind(c.CHECK)},_eventProxy=function(e){var target=e.target,setting=data.getSetting(e.data.treeId),tId="",node=null,nodeEventType="",treeEventType="",nodeEventCallback=null,treeEventCallback=null;if(tools.eqs(e.type,"mouseover")?setting.check.enable&&tools.eqs(target.tagName,"span")&&null!==target.getAttribute("treeNode"+consts.id.CHECK)&&(tId=tools.getNodeMainDom(target).id,nodeEventType="mouseoverCheck"):tools.eqs(e.type,"mouseout")?setting.check.enable&&tools.eqs(target.tagName,"span")&&null!==target.getAttribute("treeNode"+consts.id.CHECK)&&(tId=tools.getNodeMainDom(target).id,nodeEventType="mouseoutCheck"):tools.eqs(e.type,"click")&&setting.check.enable&&tools.eqs(target.tagName,"span")&&null!==target.getAttribute("treeNode"+consts.id.CHECK)&&(tId=tools.getNodeMainDom(target).id,nodeEventType="checkNode"),tId.length>0)switch(node=data.getNodeCache(setting,tId),nodeEventType){case"checkNode":nodeEventCallback=_handler.onCheckNode;break;case"mouseoverCheck":nodeEventCallback=_handler.onMouseoverCheck;break;case"mouseoutCheck":nodeEventCallback=_handler.onMouseoutCheck}var proxyResult={stop:"checkNode"===nodeEventType,node:node,nodeEventType:nodeEventType,nodeEventCallback:nodeEventCallback,treeEventType:treeEventType,treeEventCallback:treeEventCallback};return proxyResult},_initNode=function(setting,level,n,parentNode,isFirstNode,isLastNode,openFlag){if(n){var checkedKey=setting.data.key.checked;if("string"==typeof n[checkedKey]&&(n[checkedKey]=tools.eqs(n[checkedKey],"true")),n[checkedKey]=!!n[checkedKey],n.checkedOld=n[checkedKey],"string"==typeof n.nocheck&&(n.nocheck=tools.eqs(n.nocheck,"true")),n.nocheck=!!n.nocheck||setting.check.nocheckInherit&&parentNode&&!!parentNode.nocheck,"string"==typeof n.chkDisabled&&(n.chkDisabled=tools.eqs(n.chkDisabled,"true")),n.chkDisabled=!!n.chkDisabled||setting.check.chkDisabledInherit&&parentNode&&!!parentNode.chkDisabled,"string"==typeof n.halfCheck&&(n.halfCheck=tools.eqs(n.halfCheck,"true")),n.halfCheck=!!n.halfCheck,n.check_Child_State=-1,n.check_Focus=!1,n.getCheckStatus=function(){return data.getCheckStatus(setting,n)},setting.check.chkStyle==consts.radio.STYLE&&setting.check.radioType==consts.radio.TYPE_ALL&&n[checkedKey]){var r=data.getRoot(setting);r.radioCheckedList.push(n)}}},_beforeA=function(setting,node,html){var checkedKey=setting.data.key.checked;setting.check.enable&&(data.makeChkFlag(setting,node),html.push(""))},_zTreeTools=function(setting,zTreeTools){zTreeTools.checkNode=function(node,checked,checkTypeFlag,callbackFlag){var checkedKey=this.setting.data.key.checked;if(node.chkDisabled!==!0&&(checked!==!0&&checked!==!1&&(checked=!node[checkedKey]),callbackFlag=!!callbackFlag,(node[checkedKey]!==checked||checkTypeFlag)&&(!callbackFlag||0!=tools.apply(this.setting.callback.beforeCheck,[this.setting.treeId,node],!0))&&tools.uCanDo(this.setting)&&this.setting.check.enable&&node.nocheck!==!0)){node[checkedKey]=checked;var checkObj=$$(node,consts.id.CHECK,this.setting);(checkTypeFlag||this.setting.check.chkStyle===consts.radio.STYLE)&&view.checkNodeRelation(this.setting,node),view.setChkClass(this.setting,checkObj,node),view.repairParentChkClassWithSelf(this.setting,node),callbackFlag&&this.setting.treeObj.trigger(consts.event.CHECK,[null,this.setting.treeId,node])}},zTreeTools.checkAllNodes=function(checked){view.repairAllChk(this.setting,!!checked)},zTreeTools.getCheckedNodes=function(checked){var childKey=this.setting.data.key.children;return checked=checked!==!1,data.getTreeCheckedNodes(this.setting,data.getRoot(this.setting)[childKey],checked)},zTreeTools.getChangeCheckedNodes=function(){var childKey=this.setting.data.key.children;return data.getTreeChangeCheckedNodes(this.setting,data.getRoot(this.setting)[childKey])},zTreeTools.setChkDisabled=function(node,disabled,inheritParent,inheritChildren){disabled=!!disabled,inheritParent=!!inheritParent,inheritChildren=!!inheritChildren,view.repairSonChkDisabled(this.setting,node,disabled,inheritChildren),view.repairParentChkDisabled(this.setting,node.getParentNode(),disabled,inheritParent)};var _updateNode=zTreeTools.updateNode;zTreeTools.updateNode=function(node,checkTypeFlag){if(_updateNode&&_updateNode.apply(zTreeTools,arguments),node&&this.setting.check.enable){var nObj=$$(node,this.setting);if(nObj.get(0)&&tools.uCanDo(this.setting)){var checkObj=$$(node,consts.id.CHECK,this.setting);1!=checkTypeFlag&&this.setting.check.chkStyle!==consts.radio.STYLE||view.checkNodeRelation(this.setting,node),view.setChkClass(this.setting,checkObj,node),view.repairParentChkClassWithSelf(this.setting,node)}}}},_data={getRadioCheckedList:function(setting){for(var checkedList=data.getRoot(setting).radioCheckedList,i=0,j=checkedList.length;i-1&&node.check_Child_State<2:node.check_Child_State>0};return r},getTreeCheckedNodes:function(setting,nodes,checked,results){if(!nodes)return[];var childKey=setting.data.key.children,checkedKey=setting.data.key.checked,onlyOne=checked&&setting.check.chkStyle==consts.radio.STYLE&&setting.check.radioType==consts.radio.TYPE_ALL;results=results?results:[];for(var i=0,l=nodes.length;i0));i++);return results},getTreeChangeCheckedNodes:function(setting,nodes,results){if(!nodes)return[];var childKey=setting.data.key.children,checkedKey=setting.data.key.checked;results=results?results:[];for(var i=0,l=nodes.length;i0?2:0,2==tmp){chkFlag=2;break}0==tmp&&(chkFlag=0)}else if(setting.check.chkStyle==consts.checkbox.STYLE){if(tmp=cNode.nocheck===!0||cNode.chkDisabled===!0?cNode.check_Child_State:cNode.halfCheck===!0?1:cNode[checkedKey]?cNode.check_Child_State===-1||2===cNode.check_Child_State?2:1:cNode.check_Child_State>0?1:0,1===tmp){chkFlag=1;break}if(2===tmp&&chkFlag>-1&&i>0&&tmp!==chkFlag){chkFlag=1;break}if(2===chkFlag&&tmp>-1&&tmp<2){chkFlag=1;break}tmp>-1&&(chkFlag=tmp)}}node.check_Child_State=chkFlag}}},_event={},_handler={onCheckNode:function(event,node){if(node.chkDisabled===!0)return!1;var setting=data.getSetting(event.data.treeId),checkedKey=setting.data.key.checked;if(0==tools.apply(setting.callback.beforeCheck,[setting.treeId,node],!0))return!0;node[checkedKey]=!node[checkedKey],view.checkNodeRelation(setting,node);var checkObj=$$(node,consts.id.CHECK,setting);return view.setChkClass(setting,checkObj,node),view.repairParentChkClassWithSelf(setting,node),setting.treeObj.trigger(consts.event.CHECK,[event,setting.treeId,node]),!0},onMouseoverCheck:function(event,node){if(node.chkDisabled===!0)return!1;var setting=data.getSetting(event.data.treeId),checkObj=$$(node,consts.id.CHECK,setting);return node.check_Focus=!0,view.setChkClass(setting,checkObj,node),!0},onMouseoutCheck:function(event,node){if(node.chkDisabled===!0)return!1;var setting=data.getSetting(event.data.treeId),checkObj=$$(node,consts.id.CHECK,setting);return node.check_Focus=!1,view.setChkClass(setting,checkObj,node),!0}},_tools={},_view={checkNodeRelation:function(setting,node){var pNode,i,l,childKey=setting.data.key.children,checkedKey=setting.data.key.checked,r=consts.radio;if(setting.check.chkStyle==r.STYLE){var checkedList=data.getRadioCheckedList(setting);if(node[checkedKey])if(setting.check.radioType==r.TYPE_ALL){for(i=checkedList.length-1;i>=0;i--)pNode=checkedList[i],pNode[checkedKey]&&pNode!=node&&(pNode[checkedKey]=!1,checkedList.splice(i,1),view.setChkClass(setting,$$(pNode,consts.id.CHECK,setting),pNode),pNode.parentTId!=node.parentTId&&view.repairParentChkClassWithSelf(setting,pNode));checkedList.push(node)}else{var parentNode=node.parentTId?node.getParentNode():data.getRoot(setting);for(i=0,l=parentNode[childKey].length;i-1)&&view.setSonNodeCheckBox(setting,node,!0),node[checkedKey]||node[childKey]&&0!=node[childKey].length&&!(setting.check.chkboxType.N.indexOf("s")>-1)||view.setSonNodeCheckBox(setting,node,!1),node[checkedKey]&&setting.check.chkboxType.Y.indexOf("p")>-1&&view.setParentNodeCheckBox(setting,node,!0),!node[checkedKey]&&setting.check.chkboxType.N.indexOf("p")>-1&&view.setParentNodeCheckBox(setting,node,!1)},makeChkClass:function(setting,node){var checkedKey=setting.data.key.checked,c=consts.checkbox,r=consts.radio,checkboxType=setting.check.chkboxType,notEffectByOtherNode=""===checkboxType.Y&&""===checkboxType.N;fullStyle="",node.chkDisabled===!0?fullStyle=c.DISABLED:node.halfCheck?fullStyle=c.PART:setting.check.chkStyle==r.STYLE?fullStyle=node.check_Child_State<1?c.FULL:c.PART:fullStyle=node[checkedKey]?2===node.check_Child_State||node.check_Child_State===-1||notEffectByOtherNode?c.FULL:c.PART:node.check_Child_State<1||notEffectByOtherNode?c.FULL:c.PART;var chkName=setting.check.chkStyle+"_"+(node[checkedKey]?c.TRUE:c.FALSE)+"_"+fullStyle;return chkName=node.check_Focus&&node.chkDisabled!==!0?chkName+"_"+c.FOCUS:chkName,consts.className.BUTTON+" "+c.DEFAULT+" "+chkName},repairAllChk:function(setting,checked){if(setting.check.enable&&setting.check.chkStyle===consts.checkbox.STYLE)for(var checkedKey=setting.data.key.checked,childKey=setting.data.key.children,root=data.getRoot(setting),i=0,l=root[childKey].length;i0?view.repairParentChkClass(setting,node[childKey][0]):view.repairParentChkClass(setting,node)}},repairSonChkDisabled:function(setting,node,chkDisabled,inherit){if(node){var childKey=setting.data.key.children;if(node.chkDisabled!=chkDisabled&&(node.chkDisabled=chkDisabled),view.repairChkClass(setting,node),node[childKey]&&inherit)for(var i=0,l=node[childKey].length;i0){pSign=!1;break}pSign&&view.setParentNodeCheckBox(setting,node.getParentNode(),value,srcNode)}},setSonNodeCheckBox:function(setting,node,value,srcNode){if(node){var childKey=setting.data.key.children,checkedKey=setting.data.key.checked,checkObj=$$(node,consts.id.CHECK,setting);srcNode||(srcNode=node);var hasDisable=!1;if(node[childKey])for(var i=0,l=node[childKey].length;i0?value?2:0:-1)):node.check_Child_State=-1,view.setChkClass(setting,checkObj,node),setting.check.autoCheckTrigger&&node!=srcNode&&node.nocheck!==!0&&node.chkDisabled!==!0&&setting.treeObj.trigger(consts.event.CHECK,[null,setting.treeId,node]))}}},_z={tools:_tools,view:_view,event:_event,data:_data};$.extend(!0,$.fn.zTree.consts,_consts),$.extend(!0,$.fn.zTree._z,_z);var zt=$.fn.zTree,tools=zt._z.tools,consts=zt.consts,view=zt._z.view,data=zt._z.data,event=zt._z.event,$$=tools.$;data.exSetting(_setting),data.addInitBind(_bindEvent),data.addInitUnBind(_unbindEvent),data.addInitCache(_initCache),data.addInitNode(_initNode),data.addInitProxy(_eventProxy,!0),data.addInitRoot(_initRoot),data.addBeforeA(_beforeA),data.addZTreeTools(_zTreeTools);var _createNodes=view.createNodes;view.createNodes=function(setting,level,nodes,parentNode){_createNodes&&_createNodes.apply(view,arguments),nodes&&view.repairParentChkClassWithSelf(setting,parentNode)};var _removeNode=view.removeNode;view.removeNode=function(setting,node){var parentNode=node.getParentNode();_removeNode&&_removeNode.apply(view,arguments),node&&parentNode&&(view.repairChkClass(setting,parentNode),view.repairParentChkClass(setting,parentNode)); +};var _appendNodes=view.appendNodes;view.appendNodes=function(setting,level,nodes,parentNode,initFlag,openFlag){var html="";return _appendNodes&&(html=_appendNodes.apply(view,arguments)),parentNode&&data.makeChkFlag(setting,parentNode),html}}(BI.jQuery),BI.IconChangeButton=BI.inherit(BI.Single,{_defaultConfig:function(){var conf=BI.IconChangeButton.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-icon-change-button",iconCls:"",iconWidth:null,iconHeight:null,stopEvent:!1,stopPropagation:!1,selected:!1,once:!1,forceSelected:!1,forceNotSelected:!1,disableSelected:!1,shadow:!1,isShadowShowingOnSelected:!1,trigger:null,handler:BI.emptyFn})},_init:function(){BI.IconChangeButton.superclass._init.apply(this,arguments);var self=this,o=this.options;this.button=BI.createWidget({type:"bi.icon_button",element:this,cls:o.iconCls,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight,stopEvent:o.stopEvent,stopPropagation:o.stopPropagation,selected:o.selected,once:o.once,forceSelected:o.forceSelected,forceNotSelected:o.forceNotSelected,disableSelected:o.disableSelected,shadow:o.shadow,isShadowShowingOnSelected:o.isShadowShowingOnSelected,trigger:o.trigger,handler:o.handler}),this.button.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.button.on(BI.IconButton.EVENT_CHANGE,function(){self.fireEvent(BI.IconChangeButton.EVENT_CHANGE,arguments)})},isSelected:function(){return this.button.isSelected()},setSelected:function(b){this.button.setSelected(b)},setIcon:function(cls){var o=this.options;o.iconCls!==cls&&(this.element.removeClass(o.iconCls).addClass(cls),o.iconCls=cls)}}),BI.IconChangeButton.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.icon_change_button",BI.IconChangeButton),BI.TriggerIconButton=BI.inherit(BI.IconButton,{_defaultConfig:function(){var conf=BI.TriggerIconButton.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-trigger-icon-button",extraCls:"pull-down-font"})}}),BI.TriggerIconButton.EVENT_CHANGE=BI.IconButton.EVENT_CHANGE,BI.shortcut("bi.trigger_icon_button",BI.TriggerIconButton),BI.HalfIconButton=BI.inherit(BI.IconButton,{_defaultConfig:function(){var conf=BI.HalfIconButton.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-half-icon-button check-half-select-icon",height:16,width:16,iconWidth:16,iconHeight:16,selected:!1})}}),BI.HalfIconButton.EVENT_CHANGE=BI.IconButton.EVENT_CHANGE,BI.shortcut("bi.half_icon_button",BI.HalfIconButton),BI.HalfButton=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.HalfIconButton.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-half-button bi-high-light-border",height:14,width:14,selected:!1})},_init:function(){BI.HalfButton.superclass._init.apply(this,arguments),BI.createWidget({type:"bi.center_adapt",element:this.element,items:[{type:"bi.layout",cls:"bi-high-light-background",width:8,height:8}]})},doClick:function(){BI.HalfButton.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.HalfButton.EVENT_CHANGE)}}),BI.HalfButton.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.half_button",BI.HalfButton),BI.MultiSelectItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.MultiSelectItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-multi-select-item",height:24,logic:{dynamic:!1},iconWrapperWidth:26})},_init:function(){BI.MultiSelectItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.checkbox"}),this.text=BI.createWidget({type:"bi.label",cls:"list-item-text",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,rgap:o.rgap,text:o.text,keyword:o.keyword,value:o.value,py:o.py}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&self.setSelected(self.isSelected())}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("horizontal",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("left",{type:"bi.center_adapt",items:[this.checkbox],width:o.iconWrapperWidth},this.text)}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.MultiSelectItem.superclass.doClick.apply(this,arguments),this.checkbox.setSelected(this.isSelected()),this.isValid()&&this.fireEvent(BI.MultiSelectItem.EVENT_CHANGE,this.getValue(),this)},setSelected:function(v){BI.MultiSelectItem.superclass.setSelected.apply(this,arguments),this.checkbox.setSelected(v)}}),BI.MultiSelectItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_select_item",BI.MultiSelectItem),BI.SingleSelectIconTextItem=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.SingleSelectIconTextItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-single-select-icon-text-item bi-list-item-active",iconCls:"",height:24})},_init:function(){BI.SingleSelectIconTextItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.text=BI.createWidget({type:"bi.icon_text_item",element:this,cls:o.iconCls,once:o.once,iconWrapperWidth:o.iconWrapperWidth,selected:o.selected,height:o.height,iconHeight:o.iconHeight,iconWidth:o.iconWidth,text:o.text,keyword:o.keyword,value:o.value,py:o.py}),this.text.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)})},isSelected:function(){return this.text.isSelected()},setSelected:function(b){this.text.setSelected(b)},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.SingleSelectIconTextItem.superclass.doClick.apply(this,arguments)}}),BI.shortcut("bi.single_select_icon_text_item",BI.SingleSelectIconTextItem),BI.SingleSelectItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.SingleSelectItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-single-select-item bi-list-item-active",hgap:10,height:24,textAlign:"left"})},_init:function(){BI.SingleSelectItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.text=BI.createWidget({type:"bi.label",element:this,textAlign:o.textAlign,whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,keyword:o.keyword,value:o.value,title:o.title||o.text,warningTitle:o.warningTitle,py:o.py})},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.SingleSelectItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.SingleSelectItem.EVENT_CHANGE,this.isSelected(),this)},setSelected:function(v){BI.SingleSelectItem.superclass.setSelected.apply(this,arguments)}}),BI.SingleSelectItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.single_select_item",BI.SingleSelectItem),BI.SingleSelectRadioItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.SingleSelectRadioItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-single-select-radio-item",logic:{dynamic:!1},hgap:10,height:24})},_init:function(){BI.SingleSelectRadioItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.radio=BI.createWidget({type:"bi.radio"}),this.text=BI.createWidget({type:"bi.label",cls:"list-item-text",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,keyword:o.keyword,value:o.value,py:o.py}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("horizontal",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("left",{type:"bi.center_adapt",items:[this.radio],width:16},this.text)}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.SingleSelectRadioItem.superclass.doClick.apply(this,arguments),this.radio.setSelected(this.isSelected()),this.isValid()&&this.fireEvent(BI.SingleSelectRadioItem.EVENT_CHANGE,this.isSelected(),this)},setSelected:function(v){BI.SingleSelectRadioItem.superclass.setSelected.apply(this,arguments),this.radio.setSelected(v)}}),BI.SingleSelectRadioItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.single_select_radio_item",BI.SingleSelectRadioItem),BI.ArrowNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.ArrowNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-arrow-group-node bi-list-item",logic:{dynamic:!1},id:"",pId:"",open:!1,height:24})},_init:function(){var self=this,o=this.options;BI.ArrowNode.superclass._init.apply(this,arguments),this.checkbox=BI.createWidget({type:"bi.arrow_group_node_checkbox"}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&self.setSelected(self.isSelected()),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,{width:16,el:this.checkbox},this.text);BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.ArrowNode.superclass.doClick.apply(this,arguments),this.checkbox.setSelected(this.isOpened())},setText:function(text){BI.ArrowNode.superclass.setText.apply(this,arguments),this.text.setText(text)},setOpened:function(v){BI.ArrowNode.superclass.setOpened.apply(this,arguments),this.checkbox.setSelected(v)}}),BI.shortcut("bi.arrow_group_node",BI.ArrowNode),BI.FirstPlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.FirstPlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-first-plus-group-node bi-list-item",logic:{dynamic:!1},id:"",pId:"",open:!1,height:24})},_init:function(){BI.FirstPlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.first_tree_node_checkbox",stopPropagation:!0}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&(this.isSelected()?self.triggerExpand():self.triggerCollapse())});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,{width:24,el:this.checkbox},this.text);BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.FirstPlusGroupNode.superclass.doClick.apply(this,arguments),this.checkbox.setSelected(this.isSelected())},setOpened:function(v){BI.FirstPlusGroupNode.superclass.setOpened.apply(this,arguments),BI.isNotNull(this.checkbox)&&this.checkbox.setSelected(v)}}),BI.shortcut("bi.first_plus_group_node",BI.FirstPlusGroupNode),BI.IconArrowNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.IconArrowNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-icon-arrow-node bi-list-item",logic:{dynamic:!1},id:"",pId:"",open:!1,height:24,iconHeight:12,iconWidth:12,iconCls:""})},_init:function(){BI.IconArrowNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.arrow_group_node_checkbox",width:24,stopPropagation:!0});var icon=BI.createWidget({type:"bi.icon_label",width:24,cls:o.iconCls,iconWidth:o.iconWidth,iconHeight:o.iconHeight});this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&(this.isSelected()?self.triggerExpand():self.triggerCollapse())});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,{width:16,el:this.checkbox},{width:16,el:icon},this.text);BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items,rgap:5}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.IconArrowNode.superclass.doClick.apply(this,arguments),this.checkbox.setSelected(this.isSelected())},setOpened:function(v){BI.IconArrowNode.superclass.setOpened.apply(this,arguments),BI.isNotNull(this.checkbox)&&this.checkbox.setSelected(v)}}),BI.shortcut("bi.icon_arrow_node",BI.IconArrowNode),BI.LastPlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.LastPlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-last-plus-group-node bi-list-item",logic:{dynamic:!1},id:"",pId:"",open:!1,height:24})},_init:function(){BI.LastPlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.last_tree_node_checkbox",stopPropagation:!0}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&(this.isSelected()?self.triggerExpand():self.triggerCollapse())});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,{width:24,el:this.checkbox},this.text);BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.LastPlusGroupNode.superclass.doClick.apply(this,arguments),this.checkbox.setSelected(this.isSelected())},setOpened:function(v){BI.LastPlusGroupNode.superclass.setOpened.apply(this,arguments),BI.isNotNull(this.checkbox)&&this.checkbox.setSelected(v)}}),BI.shortcut("bi.last_plus_group_node",BI.LastPlusGroupNode),BI.MidPlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.MidPlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-mid-plus-group-node bi-list-item",logic:{dynamic:!1},id:"",pId:"",open:!1,height:24})},_init:function(){BI.MidPlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.mid_tree_node_checkbox",stopPropagation:!0}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&(this.isSelected()?self.triggerExpand():self.triggerCollapse())});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,{width:24,el:this.checkbox},this.text);BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.MidPlusGroupNode.superclass.doClick.apply(this,arguments),this.checkbox.setSelected(this.isSelected())},setOpened:function(v){BI.MidPlusGroupNode.superclass.setOpened.apply(this,arguments),BI.isNotNull(this.checkbox)&&this.checkbox.setSelected(v)}}),BI.shortcut("bi.mid_plus_group_node",BI.MidPlusGroupNode),BI.MultiLayerIconArrowNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.MultiLayerIconArrowNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-multilayer-icon-arrow-node bi-list-item",layer:0,id:"",pId:"",open:!1,height:24,iconHeight:16,iconWidth:16,iconCls:""})},_init:function(){BI.MultiLayerIconArrowNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.node=BI.createWidget({type:"bi.icon_arrow_node",iconCls:o.iconCls,cls:"bi-list-item-none",id:o.id,pId:o.pId,open:o.open,height:o.height,iconHeight:o.iconHeight,iconWidth:o.iconWidth,hgap:o.hgap,text:o.text,value:o.value,py:o.py}),this.node.on(BI.Controller.EVENT_CHANGE,function(type){self.setSelected(self.isSelected()),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});var items=[];BI.count(0,o.layer,function(){items.push({type:"bi.layout",width:15,height:o.height})}),items.push(this.node),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,15),items:[items]})},isOnce:function(){return!0},doRedMark:function(){this.node.doRedMark.apply(this.node,arguments)},unRedMark:function(){this.node.unRedMark.apply(this.node,arguments)},isSelected:function(){return this.node.isSelected()},setSelected:function(b){BI.MultiLayerIconArrowNode.superclass.setSelected.apply(this,arguments),this.node.setSelected(b)},doClick:function(){BI.NodeButton.superclass.doClick.apply(this,arguments),this.node.setSelected(this.isSelected())},setOpened:function(v){BI.MultiLayerIconArrowNode.superclass.setOpened.apply(this,arguments),this.node.setOpened(v)}}),BI.shortcut("bi.multilayer_icon_arrow_node",BI.MultiLayerIconArrowNode),BI.PlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.PlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-plus-group-node bi-list-item",logic:{dynamic:!1},id:"",pId:"",open:!1,height:24})},_init:function(){BI.PlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.tree_node_checkbox"}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,keyword:o.keyword,py:o.py}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&self.setSelected(self.isSelected()),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,{width:24,el:this.checkbox},this.text);BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.PlusGroupNode.superclass.doClick.apply(this,arguments),this.checkbox.setSelected(this.isSelected())},setOpened:function(v){BI.PlusGroupNode.superclass.setOpened.apply(this,arguments),this.checkbox&&this.checkbox.setSelected(v)}}),BI.shortcut("bi.plus_group_node",BI.PlusGroupNode),BI.Switch=BI.inherit(BI.BasicButton,{props:{extraCls:"bi-switch",height:22,width:44,logic:{dynamic:!1}},render:function(){var self=this;return{type:"bi.absolute",ref:function(){self.layout=this},items:[{el:{type:"bi.text_button",cls:"circle-button bi-card"},width:18,height:18,top:2,left:this.options.selected?24:2}]}},setSelected:function(v){BI.Switch.superclass.setSelected.apply(this,arguments),this.layout.attr("items")[0].left=v?24:2,this.layout.resize()},doClick:function(){BI.Switch.superclass.doClick.apply(this,arguments),this.fireEvent(BI.Switch.EVENT_CHANGE)}}),BI.Switch.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.switch",BI.Switch),BI.FirstTreeLeafItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.FirstTreeLeafItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-first-tree-leaf-item bi-list-item-active",logic:{dynamic:!1},id:"",pId:"",layer:0,height:24})},_init:function(){BI.FirstTreeLeafItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.checkbox"}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&self.setSelected(self.isSelected()),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,0===o.layer?"":{width:12,el:{type:"bi.layout",cls:o.pNode&&o.pNode.isLastNode?"":"base-line-conn-background",width:12,height:o.height}},{width:24,el:{type:"bi.layout",cls:"first-line-conn-background",width:24,height:o.height}},{el:this.text});BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},getId:function(){return this.options.id},getPId:function(){return this.options.pId},doClick:function(){BI.FirstTreeLeafItem.superclass.doClick.apply(this,arguments),this.checkbox.setSelected(this.isSelected())},setSelected:function(v){BI.FirstTreeLeafItem.superclass.setSelected.apply(this,arguments),this.checkbox.setSelected(v)}}),BI.shortcut("bi.first_tree_leaf_item",BI.FirstTreeLeafItem),BI.IconTreeLeafItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.IconTreeLeafItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-icon-tree-leaf-item bi-list-item-active",logic:{dynamic:!1},height:24,iconWidth:16,iconHeight:16,iconCls:""})},_init:function(){BI.IconTreeLeafItem.superclass._init.apply(this,arguments);var self=this,o=this.options,icon=BI.createWidget({type:"bi.center_adapt",width:24,cls:o.iconCls,items:[{type:"bi.icon",width:o.iconWidth,height:o.iconHeight}]});this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,{width:16,el:icon},{el:this.text});BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items,hgap:5}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},getId:function(){return this.options.id},getPId:function(){return this.options.pId},doClick:function(){BI.IconTreeLeafItem.superclass.doClick.apply(this,arguments)},setSelected:function(v){BI.IconTreeLeafItem.superclass.setSelected.apply(this,arguments)}}),BI.shortcut("bi.icon_tree_leaf_item",BI.IconTreeLeafItem),BI.LastTreeLeafItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.LastTreeLeafItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-last-tree-leaf-item bi-list-item-active",logic:{dynamic:!1},id:"",pId:"",layer:0,height:24})},_init:function(){BI.LastTreeLeafItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.checkbox"}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&self.setSelected(self.isSelected()),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,0===o.layer?"":{width:12,el:{type:"bi.layout",cls:o.pNode&&o.pNode.isLastNode?"":"base-line-conn-background",width:12,height:o.height}},{width:24,el:{type:"bi.layout",cls:"last-line-conn-background",width:24,height:o.height}},{el:this.text});BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},getId:function(){return this.options.id},getPId:function(){return this.options.pId},doClick:function(){BI.LastTreeLeafItem.superclass.doClick.apply(this,arguments)},setSelected:function(v){BI.LastTreeLeafItem.superclass.setSelected.apply(this,arguments)}}),BI.shortcut("bi.last_tree_leaf_item",BI.LastTreeLeafItem),BI.MidTreeLeafItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.MidTreeLeafItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-mid-tree-leaf-item bi-list-item-active",logic:{dynamic:!1},id:"",pId:"",layer:0,height:24})},_init:function(){BI.MidTreeLeafItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.checkbox"}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&self.setSelected(self.isSelected()),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,0===o.layer?"":{width:12,el:{type:"bi.layout",cls:o.pNode&&o.pNode.isLastNode?"":"base-line-conn-background",width:12,height:o.height}},{width:24,el:{type:"bi.layout",cls:"mid-line-conn-background",width:24,height:o.height}},{el:this.text});BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},getId:function(){return this.options.id},getPId:function(){return this.options.pId},doClick:function(){BI.MidTreeLeafItem.superclass.doClick.apply(this,arguments),this.checkbox.setSelected(this.isSelected())},setSelected:function(v){BI.MidTreeLeafItem.superclass.setSelected.apply(this,arguments),this.checkbox.setSelected(v)}}),BI.shortcut("bi.mid_tree_leaf_item",BI.MidTreeLeafItem),BI.MultiLayerIconTreeLeafItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.MultiLayerIconTreeLeafItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-multilayer-icon-tree-leaf-item bi-list-item-active",layer:0,height:24,iconCls:"",iconHeight:16,iconWidth:16})},_init:function(){BI.MultiLayerIconTreeLeafItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.item=BI.createWidget({type:"bi.icon_tree_leaf_item",cls:"bi-list-item-none",iconCls:o.iconCls,id:o.id,pId:o.pId,isFront:!0,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,iconWidth:o.iconWidth,iconHeight:o.iconHeight}),this.item.on(BI.Controller.EVENT_CHANGE,function(type){type!==BI.Events.CLICK&&self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});var items=[];BI.count(0,o.layer,function(){items.push({type:"bi.layout",width:15,height:o.height})}),items.push(this.item),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,15),items:[items]})},doRedMark:function(){this.item.doRedMark.apply(this.item,arguments)},unRedMark:function(){this.item.unRedMark.apply(this.item,arguments)},doHighLight:function(){this.item.doHighLight.apply(this.item,arguments)},unHighLight:function(){this.item.unHighLight.apply(this.item,arguments)},getId:function(){return this.options.id},getPId:function(){return this.options.pId},doClick:function(){BI.MultiLayerIconTreeLeafItem.superclass.doClick.apply(this,arguments),this.item.setSelected(this.isSelected())},setSelected:function(v){BI.MultiLayerIconTreeLeafItem.superclass.setSelected.apply(this,arguments),this.item.setSelected(v)},getValue:function(){return this.options.value}}),BI.shortcut("bi.multilayer_icon_tree_leaf_item",BI.MultiLayerIconTreeLeafItem),BI.TreeTextLeafItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.TreeTextLeafItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-tree-text-leaf-item bi-list-item-active",id:"",pId:"",height:24,hgap:0,lgap:0,rgap:0})},_init:function(){BI.TreeTextLeafItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,lgap:o.lgap,rgap:o.hgap,text:o.text,value:o.value,py:o.py}),BI.createWidget({type:"bi.htape",element:this,items:[{el:this.text}]})},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},getId:function(){return this.options.id},getPId:function(){return this.options.pId}}),BI.shortcut("bi.tree_text_leaf_item",BI.TreeTextLeafItem),BI.CalendarDateItem=BI.inherit(BI.BasicButton,{render:function(){var self=this,o=this.options;return{type:"bi.absolute",items:[{el:{type:"bi.text_item",cls:"bi-list-item-select",textAlign:"center",whiteSpace:"normal",text:o.text,value:o.value,ref:function(){self.text=this}},left:o.lgap,right:o.rgap,top:0,bottom:0}]}},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},setSelected:function(b){BI.CalendarDateItem.superclass.setSelected.apply(this,arguments),this.text.setSelected(b)},getValue:function(){return this.text.getValue()}}),BI.shortcut("bi.calendar_date_item",BI.CalendarDateItem),BI.Calendar=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.Calendar.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-calendar",logic:{dynamic:!1},min:"1900-01-01",max:"2099-12-31",year:2015,month:8,day:25})},_dateCreator:function(Y,M,D){var self=this,o=this.options,log={},De=BI.getDate(),mins=o.min.match(/\d+/g),maxs=o.max.match(/\d+/g);Y<(0|mins[0])&&(Y=0|mins[0]),Y>(0|maxs[0])&&(Y=0|maxs[0]),De.setFullYear(Y,M,D),log.ymd=[De.getFullYear(),De.getMonth(),De.getDate()];var MD=BI.Date._MD.slice(0);MD[1]=BI.isLeapYear(log.ymd[0])?29:28,De.setFullYear(log.ymd[0],log.ymd[1],1),log.FDay=De.getDay();var offSetFDay=(7-BI.StartOfWeek+log.FDay)%7;log.PDay=MD[0===M?11:M-1]-offSetFDay+1, +log.NDay=1;var items=[];return BI.each(BI.range(42),function(i){var td={},YY=log.ymd[0],MM=log.ymd[1]+1,DD;i=offSetFDay&&i=0?page%12:(12+page%12)%12;return{year:BI.getDate().getFullYear()+year,month:month+1}}}),BI.shortcut("bi.calendar",BI.Calendar),BI.YearCalendar=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.YearCalendar.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-year-calendar",behaviors:{},logic:{dynamic:!1},min:"1900-01-01",max:"2099-12-31",year:null})},_yearCreator:function(Y){var o=this.options;Y=0|Y;var start=BI.YearCalendar.getStartYear(Y),items=[],startDate=BI.parseDateTime(o.min,"%Y-%X-%d"),endDate=BI.parseDateTime(o.max,"%Y-%X-%d");return BI.each(BI.range(BI.YearCalendar.INTERVAL),function(i){var td={};BI.checkDateVoid(start+i,1,1,BI.print(BI.getDate(startDate.getFullYear(),0,1),"%Y-%X-%d"),BI.print(BI.getDate(endDate.getFullYear(),0,1),"%Y-%X-%d"))[0]&&(td.disabled=!0),td.text=start+i,items.push(td)}),items},_init:function(){BI.YearCalendar.superclass._init.apply(this,arguments);var self=this,o=this.options;this.currentYear=BI.getDate().getFullYear();var years=this._yearCreator(o.year||this.currentYear),len=years.length,tyears=BI.makeArray(len,""),map=[0,6,1,7,2,8,3,9,4,10,5,11];BI.each(years,function(i,y){tyears[i]=years[map[i]]});var items=[];items.push(tyears.slice(0,2)),items.push(tyears.slice(2,4)),items.push(tyears.slice(4,6)),items.push(tyears.slice(6,8)),items.push(tyears.slice(8,10)),items.push(tyears.slice(10,12)),items=BI.map(items,function(i,item){return BI.map(item,function(j,td){return BI.extend(td,{type:"bi.text_item",cls:"bi-list-item-select",textAlign:"center",whiteSpace:"normal",once:!1,forceSelected:!0,height:24,width:45,value:td.text,disabled:td.disabled})})}),this.years=BI.createWidget({type:"bi.button_group",behaviors:o.behaviors,items:BI.createItems(items,{}),layouts:[BI.LogicFactory.createLogic("table",BI.extend({},o.logic,{columns:2,rows:6,columnSize:[.5,.5],rowSize:24})),{type:"bi.center_adapt",vgap:1}]}),this.years.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("vertical",BI.extend({},o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("top",this.years)}))))},isFrontYear:function(){var o=this.options,Y=o.year;return Y=0|Y,!!BI.checkDateVoid(BI.YearCalendar.getStartYear(Y)-1,1,1,o.min,o.max)[0]},isFinalYear:function(){var o=this.options,c=this._const,Y=o.year;return Y=0|Y,!!BI.checkDateVoid(BI.YearCalendar.getEndYear(Y)+1,1,1,o.min,o.max)[0]},setValue:function(val){this.years.setValue([val])},getValue:function(){return this.years.getValue()[0]}}),BI.extend(BI.YearCalendar,{INTERVAL:12,getStartYear:function(year){var cur=BI.getDate().getFullYear();return year-((year-cur+3)%BI.YearCalendar.INTERVAL+12)%BI.YearCalendar.INTERVAL},getEndYear:function(year){return BI.YearCalendar.getStartYear(year)+BI.YearCalendar.INTERVAL-1},getPageByYear:function(year){var cur=BI.getDate().getFullYear();return year=BI.YearCalendar.getStartYear(year),(year-cur+3)/BI.YearCalendar.INTERVAL}}),BI.shortcut("bi.year_calendar",BI.YearCalendar),BI.ArrowTreeGroupNodeCheckbox=BI.inherit(BI.IconButton,{_defaultConfig:function(){return BI.extend(BI.ArrowTreeGroupNodeCheckbox.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-arrow-group-node-checkbox"})},setSelected:function(v){BI.ArrowTreeGroupNodeCheckbox.superclass.setSelected.apply(this,arguments),v?this.element.removeClass("expander-right-font").addClass("expander-down-font"):this.element.removeClass("expander-down-font").addClass("expander-right-font")}}),BI.shortcut("bi.arrow_group_node_checkbox",BI.ArrowTreeGroupNodeCheckbox),BI.CheckingMarkNode=BI.inherit(BI.IconButton,{_defaultConfig:function(){return BI.extend(BI.CheckingMarkNode.superclass._defaultConfig.apply(this,arguments),{extraCls:"check-mark-font"})},_init:function(){BI.CheckingMarkNode.superclass._init.apply(this,arguments),this.setSelected(this.options.selected)},setSelected:function(v){BI.CheckingMarkNode.superclass.setSelected.apply(this,arguments),v===!0?this.element.addClass("check-mark-font"):this.element.removeClass("check-mark-font")}}),BI.shortcut("bi.checking_mark_node",BI.CheckingMarkNode),BI.FirstTreeNodeCheckbox=BI.inherit(BI.IconButton,{_defaultConfig:function(){return BI.extend(BI.FirstTreeNodeCheckbox.superclass._defaultConfig.apply(this,arguments),{extraCls:"tree-collapse-icon-type2",iconWidth:24,iconHeight:24})},setSelected:function(v){BI.FirstTreeNodeCheckbox.superclass.setSelected.apply(this,arguments),v===!0?this.element.addClass("tree-expand-icon-type2"):this.element.removeClass("tree-expand-icon-type2")}}),BI.shortcut("bi.first_tree_node_checkbox",BI.FirstTreeNodeCheckbox),BI.LastTreeNodeCheckbox=BI.inherit(BI.IconButton,{_defaultConfig:function(){return BI.extend(BI.LastTreeNodeCheckbox.superclass._defaultConfig.apply(this,arguments),{extraCls:"tree-collapse-icon-type4",iconWidth:24,iconHeight:24})},setSelected:function(v){BI.LastTreeNodeCheckbox.superclass.setSelected.apply(this,arguments),v===!0?this.element.addClass("tree-expand-icon-type4"):this.element.removeClass("tree-expand-icon-type4")}}),BI.shortcut("bi.last_tree_node_checkbox",BI.LastTreeNodeCheckbox),BI.MidTreeNodeCheckbox=BI.inherit(BI.IconButton,{_defaultConfig:function(){return BI.extend(BI.MidTreeNodeCheckbox.superclass._defaultConfig.apply(this,arguments),{extraCls:"tree-collapse-icon-type3",iconWidth:24,iconHeight:24})},setSelected:function(v){BI.MidTreeNodeCheckbox.superclass.setSelected.apply(this,arguments),v===!0?this.element.addClass("tree-expand-icon-type3"):this.element.removeClass("tree-expand-icon-type3")}}),BI.shortcut("bi.mid_tree_node_checkbox",BI.MidTreeNodeCheckbox),BI.TreeNodeCheckbox=BI.inherit(BI.IconButton,{_defaultConfig:function(){return BI.extend(BI.TreeNodeCheckbox.superclass._defaultConfig.apply(this,arguments),{extraCls:"tree-collapse-icon-type1",iconWidth:24,iconHeight:24})},setSelected:function(v){BI.TreeNodeCheckbox.superclass.setSelected.apply(this,arguments),v?this.element.addClass("tree-expand-icon-type1"):this.element.removeClass("tree-expand-icon-type1")}}),BI.shortcut("bi.tree_node_checkbox",BI.TreeNodeCheckbox),BI.CustomColorChooser=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.CustomColorChooser.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-custom-color-chooser",width:227,height:245})},_init:function(){BI.CustomColorChooser.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget(o.editor,{type:"bi.simple_color_picker_editor"}),this.editor.on(BI.ColorPickerEditor.EVENT_CHANGE,function(){self.setValue(this.getValue())}),this.farbtastic=BI.createWidget({type:"bi.farbtastic"}),this.farbtastic.on(BI.Farbtastic.EVENT_CHANGE,function(){self.setValue(this.getValue())}),BI.createWidget({type:"bi.vtape",element:this,items:[{type:"bi.absolute",items:[{el:this.editor,left:0,top:0,right:0}],height:30},{type:"bi.absolute",items:[{el:this.farbtastic,left:15,right:15,top:7}],height:215}]})},setValue:function(color){this.editor.setValue(color),this.farbtastic.setValue(color)},getValue:function(){return this.editor.getValue()}}),BI.CustomColorChooser.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.custom_color_chooser",BI.CustomColorChooser),BI.ColorChooser=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.ColorChooser.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-color-chooser",value:"",height:24})},_init:function(){BI.ColorChooser.superclass._init.apply(this,arguments);var self=this,o=this.options;this.combo=BI.createWidget({type:"bi.combo",element:this,container:o.container,adjustLength:1,isNeedAdjustWidth:!1,isNeedAdjustHeight:!1,el:BI.extend({type:o.width<=24?"bi.color_chooser_trigger":"bi.long_color_chooser_trigger",ref:function(_ref){self.trigger=_ref},width:o.width-2,height:o.height-2},o.el),popup:{el:BI.extend({type:"bi.color_chooser_popup",ref:function(_ref){self.colorPicker=_ref},listeners:[{eventName:BI.ColorChooserPopup.EVENT_VALUE_CHANGE,action:function(){fn(),self._isRGBColor(self.colorPicker.getValue())||self.combo.hideView()}},{eventName:BI.ColorChooserPopup.EVENT_CHANGE,action:function(){fn(),self.combo.hideView()}}]},o.popup),width:230},value:o.value});var fn=function(){var color=self.colorPicker.getValue();self.trigger.setValue(color)};this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW,function(){self.fireEvent(BI.ColorChooser.EVENT_CHANGE,arguments)})},_isRGBColor:function(color){return BI.isNotEmptyString(color)&&"transparent"!==color},isViewVisible:function(){return this.combo.isViewVisible()},hideView:function(){this.combo.hideView()},showView:function(){this.combo.showView()},setValue:function(color){this.combo.setValue(color)},getValue:function(){return this.combo.getValue()}}),BI.ColorChooser.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.color_chooser",BI.ColorChooser),BI.ColorChooserPopup=BI.inherit(BI.Widget,{props:{baseCls:"bi-color-chooser-popup",width:230,height:145,simple:!1},render:function(){var self=this,o=this.options;this.colorEditor=BI.createWidget(o.editor,{type:o.simple?"bi.simple_color_picker_editor":"bi.color_picker_editor",value:o.value,cls:"bi-header-background bi-border-bottom",height:30}),this.colorEditor.on(BI.ColorPickerEditor.EVENT_CHANGE,function(){self.setValue(this.getValue()),self._dealStoreColors(),self.fireEvent(BI.ColorChooserPopup.EVENT_VALUE_CHANGE,arguments)}),this.storeColors=BI.createWidget({type:"bi.color_picker",cls:"bi-border-bottom bi-border-right",items:[this._digestStoreColors(this._getStoreColors())],width:210,height:24,value:o.value}),this.storeColors.on(BI.ColorPicker.EVENT_CHANGE,function(){self.setValue(this.getValue()[0]),self._dealStoreColors(),self.fireEvent(BI.ColorChooserPopup.EVENT_CHANGE,arguments)}),this.colorPicker=BI.createWidget({type:"bi.color_picker",width:210,height:50,value:o.value}),this.colorPicker.on(BI.ColorPicker.EVENT_CHANGE,function(){self.setValue(this.getValue()[0]),self._dealStoreColors(),self.fireEvent(BI.ColorChooserPopup.EVENT_CHANGE,arguments)}),this.customColorChooser=BI.createWidget({type:"bi.custom_color_chooser",editor:o.editor});var panel=BI.createWidget({type:"bi.popup_panel",buttons:[BI.i18nText("BI-Basic_Cancel"),BI.i18nText("BI-Basic_Save")],title:BI.i18nText("BI-Custom_Color"),el:this.customColorChooser,stopPropagation:!1,bgap:-1,rgap:1,lgap:1,minWidth:227});return this.more=BI.createWidget({type:"bi.combo",cls:"bi-border-top",container:null,direction:"right,top",isNeedAdjustHeight:!1,el:{type:"bi.text_item",cls:"color-chooser-popup-more bi-list-item",textAlign:"center",height:24,textLgap:10,text:BI.i18nText("BI-Basic_More")+"..."},popup:panel}),this.more.on(BI.Combo.EVENT_AFTER_POPUPVIEW,function(){self.customColorChooser.setValue(self.getValue())}),panel.on(BI.PopupPanel.EVENT_CLICK_TOOLBAR_BUTTON,function(index){switch(index){case 0:self.more.hideView();break;case 1:self.setValue(self.customColorChooser.getValue()),self._dealStoreColors(),self.more.hideView(),self.fireEvent(BI.ColorChooserPopup.EVENT_CHANGE,arguments)}}),{type:"bi.absolute",items:[{el:{type:"bi.vtape",items:[this.colorEditor,{el:{type:"bi.absolute",items:[{el:this.storeColors,left:10,right:10,top:5}]},height:29},{el:{type:"bi.absolute",items:[{el:this.colorPicker,left:10,right:10,top:5,bottom:5}]},height:60},{el:this.more,height:24}]},left:0,right:0,top:0,bottom:0},{el:{type:"bi.layout",cls:"disable-mask",invisible:!o.disabled,ref:function(){self.mask=this}},left:0,right:0,top:0,bottom:0}]}},mounted:function(){var self=this,o=this.options;BI.isNotNull(o.value)&&this.setValue(o.value)},_setEnable:function(enable){BI.ColorChooserPopup.superclass._setEnable.apply(this,arguments),this.mask.setVisible(!enable)},_dealStoreColors:function(){var color=this.getValue(),colors=this._getStoreColors(),que=new BI.Queue(8);que.fromArray(colors),que.remove(color),que.unshift(color);var array=que.toArray();BI.Cache.setItem("colors",BI.array2String(array)),this.setStoreColors(array)},_digestStoreColors:function(colors){var items=BI.map(colors,function(i,color){return{value:color}});return BI.count(colors.length,8,function(i){items.push({value:"",disabled:!0})}),items},_getStoreColors:function(){var self=this,o=this.options,colorsArray=BI.string2Array(BI.Cache.getItem("colors")||"");return BI.filter(colorsArray,function(idx,color){return!o.simple||self._isRGBColor(color)})},_isRGBColor:function(color){return BI.isNotEmptyString(color)&&"transparent"!==color},setStoreColors:function(colors){BI.isArray(colors)&&this.storeColors.populate([this._digestStoreColors(colors)])},setValue:function(color){this.colorEditor.setValue(color),this.colorPicker.setValue(color),this.storeColors.setValue(color)},getValue:function(){return this.colorEditor.getValue()}}),BI.ColorChooserPopup.EVENT_VALUE_CHANGE="EVENT_VALUE_CHANGE",BI.ColorChooserPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.color_chooser_popup",BI.ColorChooserPopup),BI.SimpleColorChooserPopup=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SimpleColorChooserPopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-color-chooser-popup"})},_init:function(){BI.SimpleColorChooserPopup.superclass._init.apply(this,arguments);var self=this,o=this.options;this.popup=BI.createWidget({type:"bi.color_chooser_popup",value:o.value,element:this,simple:!0}),this.popup.on(BI.ColorChooserPopup.EVENT_CHANGE,function(){self.fireEvent(BI.SimpleColorChooserPopup.EVENT_CHANGE,arguments)}),this.popup.on(BI.ColorChooserPopup.EVENT_VALUE_CHANGE,function(){self.fireEvent(BI.SimpleColorChooserPopup.EVENT_VALUE_CHANGE,arguments)})},setStoreColors:function(colors){this.popup.setStoreColors(colors)},setValue:function(color){this.popup.setValue(color)},getValue:function(){return this.popup.getValue()}}),BI.SimpleColorChooserPopup.EVENT_VALUE_CHANGE="EVENT_VALUE_CHANGE",BI.SimpleColorChooserPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.simple_color_chooser_popup",BI.SimpleColorChooserPopup),BI.SimpleColorChooser=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SimpleColorChooser.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-simple-color-chooser",value:"#ffffff"})},_init:function(){BI.SimpleColorChooser.superclass._init.apply(this,arguments);var self=this,o=this.options;this.combo=BI.createWidget({type:"bi.color_chooser",element:this,container:o.container,value:o.value,width:o.width,height:o.height,popup:{type:"bi.simple_color_chooser_popup"}}),this.combo.on(BI.ColorChooser.EVENT_CHANGE,function(){self.fireEvent(BI.SimpleColorChooser.EVENT_CHANGE,arguments)})},isViewVisible:function(){return this.combo.isViewVisible()},hideView:function(){this.combo.hideView()},showView:function(){this.combo.showView()},setValue:function(color){this.combo.setValue(color)},getValue:function(){return this.combo.getValue()}}),BI.SimpleColorChooser.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.simple_color_chooser",BI.SimpleColorChooser),BI.ColorChooserTrigger=BI.inherit(BI.Trigger,{_defaultConfig:function(){var conf=BI.ColorChooserTrigger.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-color-chooser-trigger bi-border",height:22})},_init:function(){BI.ColorChooserTrigger.superclass._init.apply(this,arguments),this.colorContainer=BI.createWidget({type:"bi.layout",cls:"color-chooser-trigger-content"+(BI.isIE9Below&&BI.isIE9Below()?" hack":"")});var down=BI.createWidget({type:"bi.icon_button",disableSelected:!0,cls:"icon-combo-down-icon trigger-triangle-font icon-size-12",width:12,height:8});BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.colorContainer,left:3,right:3,top:3,bottom:3},{el:down,right:-1,bottom:1}]}),BI.isNotNull(this.options.value)&&this.setValue(this.options.value)},setValue:function(color){BI.ColorChooserTrigger.superclass.setValue.apply(this,arguments),""===color?this.colorContainer.element.css("background-color","").removeClass("trans-color-background").addClass("auto-color-background"):"transparent"===color?this.colorContainer.element.css("background-color","").removeClass("auto-color-background").addClass("trans-color-background"):this.colorContainer.element.css({"background-color":color}).removeClass("auto-color-background").removeClass("trans-color-background")}}),BI.ColorChooserTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.color_chooser_trigger",BI.ColorChooserTrigger),BI.LongColorChooserTrigger=BI.inherit(BI.Trigger,{_defaultConfig:function(){var conf=BI.LongColorChooserTrigger.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-color-chooser-trigger bi-border",height:22})},_init:function(){BI.LongColorChooserTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options;this.colorContainer=BI.createWidget({type:"bi.htape",cls:"color-chooser-trigger-content",items:[{type:"bi.icon_change_button",ref:function(_ref){self.changeIcon=_ref},disableSelected:!0,iconCls:"auto-color-icon",width:24,iconWidth:16,iconHeight:16},{el:{type:"bi.label",ref:function(_ref){self.label=_ref},textAlign:"left",hgap:5,height:18,text:BI.i18nText("BI-Basic_Auto")}}]});var down=BI.createWidget({type:"bi.icon_button",disableSelected:!0,cls:"icon-combo-down-icon trigger-triangle-font icon-size-12",width:12,height:8});BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.colorContainer,left:3,right:3,top:3,bottom:3},{el:down,right:3,bottom:3}]}),this.options.value&&this.setValue(this.options.value)},setValue:function(color){BI.LongColorChooserTrigger.superclass.setValue.apply(this,arguments),""===color?(this.colorContainer.element.css("background-color",""),this.changeIcon.setVisible(!0),this.label.setVisible(!0),this.changeIcon.setIcon("auto-color-icon"),this.label.setText(BI.i18nText("BI-Basic_Auto"))):"transparent"===color?(this.colorContainer.element.css("background-color",""),this.changeIcon.setVisible(!0),this.label.setVisible(!0),this.changeIcon.setIcon("trans-color-icon"),this.label.setText(BI.i18nText("BI-Transparent_Color"))):(this.colorContainer.element.css({"background-color":color}),this.changeIcon.setVisible(!1),this.label.setVisible(!1))}}),BI.LongColorChooserTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.long_color_chooser_trigger",BI.LongColorChooserTrigger),BI.ColorPickerButton=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.ColorPickerButton.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-color-picker-button bi-background bi-border-top bi-border-left"})},_init:function(){BI.ColorPickerButton.superclass._init.apply(this,arguments);var self=this,o=this.options;if(o.value){this.element.css("background-color",o.value);var name=this.getName();this.element.hover(function(){self._createMask(),self.isEnabled()&&BI.Maskers.show(name)},function(){self.isSelected()||BI.Maskers.hide(name)})}},_createMask:function(){var o=this.options,name=this.getName();if(this.isEnabled()&&!BI.Maskers.has(name)){var w=BI.Maskers.make(name,this,{offset:{left:-1,top:-1,right:-1,bottom:-1}});w.element.addClass("color-picker-button-mask").css("background-color",o.value)}},setSelected:function(b){BI.ColorPickerButton.superclass.setSelected.apply(this,arguments),b&&this._createMask(),BI.Maskers[b?"show":"hide"](this.getName())}}),BI.ColorPickerButton.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.color_picker_button",BI.ColorPickerButton),BI.ColorPicker=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.ColorPicker.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-color-picker",items:null})},_items:[[{value:"#ffffff"},{value:"#f2f2f2"},{value:"#e5e5e5"},{value:"#d9d9d9"},{value:"#cccccc"},{value:"#bfbfbf"},{value:"#b2b2b2"},{value:"#a6a6a6"},{value:"#999999"},{value:"#8c8c8c"},{value:"#808080"},{value:"#737373"},{value:"#666666"},{value:"#4d4d4d"},{value:"#333333"},{value:"#000000"}],[{value:"#d8b5a6"},{value:"#ff9e9a"},{value:"#ffc17d"},{value:"#f5e56b"},{value:"#d8e698"},{value:"#e0ebaf"},{value:"#c3d825"},{value:"#bce2e8"},{value:"#85d3cd"},{value:"#bce2e8"},{value:"#a0d8ef"},{value:"#89c3eb"},{value:"#bbc8e6"},{value:"#bbbcde"},{value:"#d6b4cc"},{value:"#fbc0d3"}],[{value:"#bb9581"},{value:"#f37d79"},{value:"#fba74f"},{value:"#ffdb4f"},{value:"#c7dc68"},{value:"#b0ca71"},{value:"#99ab4e"},{value:"#84b9cb"},{value:"#00a3af"},{value:"#2ca9e1"},{value:"#0095d9"},{value:"#4c6cb3"},{value:"#8491c3"},{value:"#a59aca"},{value:"#cc7eb1"},{value:"#e89bb4"}],[{value:"#9d775f"},{value:"#dd4b4b"},{value:"#ef8b07"},{value:"#fcc800"},{value:"#aacf53"},{value:"#82ae46"},{value:"#69821b"},{value:"#59b9c6"},{value:"#2a83a2"},{value:"#007bbb"},{value:"#19448e"},{value:"#274a78"},{value:"#4a488e"},{value:"#7058a3"},{value:"#884898"},{value:"#d47596"}]],_init:function(){BI.ColorPicker.superclass._init.apply(this,arguments);var self=this,o=this.options;this.colors=BI.createWidget({type:"bi.button_group",element:this,items:BI.createItems(o.items||this._items,{type:"bi.color_picker_button",once:!1}),layouts:[{type:"bi.grid"}],value:o.value}),this.colors.on(BI.ButtonGroup.EVENT_CHANGE,function(){self.fireEvent(BI.ColorPicker.EVENT_CHANGE,arguments)})},populate:function(items){var args=[].slice.call(arguments);args[0]=BI.createItems(items,{type:"bi.color_picker_button",once:!1}),this.colors.populate.apply(this.colors,args)},setValue:function(color){this.colors.setValue(color)},getValue:function(){return this.colors.getValue()}}),BI.ColorPicker.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.color_picker",BI.ColorPicker),BI.ColorPickerEditor=BI.inherit(BI.Widget,{constants:{REB_WIDTH:32},_defaultConfig:function(){return BI.extend(BI.ColorPickerEditor.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-color-picker-editor",height:30})},_init:function(){BI.ColorPickerEditor.superclass._init.apply(this,arguments);var self=this,o=this.options,c=this.constants;this.storeValue={},this.colorShow=BI.createWidget({type:"bi.layout",cls:"color-picker-editor-display bi-card bi-border",height:16,width:16});var RGB=BI.createWidgets(BI.createItems([{text:"R"},{text:"G"},{text:"B"}],{type:"bi.label",cls:"color-picker-editor-label",width:20,height:20})),checker=function(v){return BI.isNumeric(v)&&(0|v)>=0&&(0|v)<=255},Ws=BI.createWidgets([{},{},{}],{type:"bi.small_text_editor",cls:"color-picker-editor-input",validationChecker:checker,errorText:BI.i18nText("BI-Color_Picker_Error_Text"),allowBlank:!0,value:255,width:c.REB_WIDTH,height:20});BI.each(Ws,function(i,w){w.on(BI.TextEditor.EVENT_CHANGE,function(){self._checkEditors(),checker(self.storeValue.r)&&checker(self.storeValue.g)&&checker(self.storeValue.b)&&(self.colorShow.element.css("background-color",self.getValue()),self.fireEvent(BI.ColorPickerEditor.EVENT_CHANGE))})}),this.R=Ws[0],this.G=Ws[1],this.B=Ws[2],this.none=BI.createWidget({type:"bi.icon_button",cls:"auto-color-icon",width:16,height:16,iconWidth:16,iconHeight:16,title:BI.i18nText("BI-Basic_Auto")}),this.none.on(BI.IconButton.EVENT_CHANGE,function(){this.isSelected()?(self.lastColor=self.getValue(),self.setValue("")):self.setValue(self.lastColor||"#ffffff"),(self.R.isValid()&&self.G.isValid()&&self.B.isValid()||self._isEmptyRGB())&&(self.colorShow.element.css("background-color",self.getValue()),self.fireEvent(BI.ColorPickerEditor.EVENT_CHANGE))}),this.transparent=BI.createWidget({type:"bi.icon_button",cls:"trans-color-icon",width:16,height:16,iconWidth:16,iconHeight:16,title:BI.i18nText("BI-Transparent_Color")}),this.transparent.on(BI.IconButton.EVENT_CHANGE,function(){this.isSelected()?(self.lastColor=self.getValue(),self.setValue("transparent")):("transparent"===self.lastColor&&(self.lastColor=""),self.setValue(self.lastColor||"#ffffff")),(self.R.isValid()&&self.G.isValid()&&self.B.isValid()||self._isEmptyRGB())&&(self.colorShow.element.css("background-color",self.getValue()),self.fireEvent(BI.ColorPickerEditor.EVENT_CHANGE))}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.vertical_adapt",items:[{el:this.colorShow,width:16},{el:RGB[0],width:20},{el:this.R,width:c.REB_WIDTH},{el:RGB[1],width:20},{el:this.G,width:c.REB_WIDTH},{el:RGB[2],width:20},{el:this.B,width:c.REB_WIDTH},{el:this.transparent,width:16,lgap:5},{el:this.none,width:16,lgap:5}]},left:10,right:10,top:0,bottom:0}]})},_checkEditors:function(){BI.isEmptyString(this.R.getValue())&&this.R.setValue(0),BI.isEmptyString(this.G.getValue())&&this.G.setValue(0),BI.isEmptyString(this.B.getValue())&&this.B.setValue(0),this.storeValue={r:this.R.getValue()||0,g:this.G.getValue()||0,b:this.B.getValue()||0}},_isEmptyRGB:function(){return BI.isEmptyString(this.storeValue.r)&&BI.isEmptyString(this.storeValue.g)&&BI.isEmptyString(this.storeValue.b)},_showPreColor:function(color){""===color?this.colorShow.element.css("background-color","").removeClass("trans-color-background").addClass("auto-color-normal-background"):"transparent"===color?this.colorShow.element.css("background-color","").removeClass("auto-color-normal-background").addClass("trans-color-background"):this.colorShow.element.css({"background-color":color}).removeClass("auto-color-normal-background").removeClass("trans-color-background")},_setEnable:function(enable){BI.ColorPickerEditor.superclass._setEnable.apply(this,arguments),enable===!0?this.element.removeClass("base-disabled disabled"):enable===!1&&this.element.addClass("base-disabled disabled")},setValue:function(color){if("transparent"===color)return this.transparent.setSelected(!0),this.none.setSelected(!1),this._showPreColor("transparent"),this.R.setValue(""),this.G.setValue(""),this.B.setValue(""),void(this.storeValue={r:"",g:"",b:""});color?this.none.setSelected(!1):(color="",this.none.setSelected(!0)),this.transparent.setSelected(!1),this._showPreColor(color);var json=BI.DOM.rgb2json(BI.DOM.hex2rgb(color));this.storeValue={r:BI.isNull(json.r)?"":json.r,g:BI.isNull(json.r)?"":json.g,b:BI.isNull(json.r)?"":json.b},this.R.setValue(this.storeValue.r),this.G.setValue(this.storeValue.g),this.B.setValue(this.storeValue.b)},getValue:function(){return this._isEmptyRGB()&&this.transparent.isSelected()?"transparent":BI.DOM.rgb2hex(BI.DOM.json2rgb({r:this.storeValue.r,g:this.storeValue.g,b:this.storeValue.b}))}}),BI.ColorPickerEditor.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.color_picker_editor",BI.ColorPickerEditor),BI.SimpleColorPickerEditor=BI.inherit(BI.Widget,{constants:{REB_WIDTH:32},_defaultConfig:function(){return BI.extend(BI.SimpleColorPickerEditor.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-color-picker-editor",height:30})},_init:function(){BI.SimpleColorPickerEditor.superclass._init.apply(this,arguments);var self=this,o=this.options,c=this.constants;this.colorShow=BI.createWidget({type:"bi.layout",cls:"color-picker-editor-display bi-card bi-border",height:16,width:16});var RGB=BI.createWidgets(BI.createItems([{text:"R"},{text:"G"},{text:"B"}],{type:"bi.label",cls:"color-picker-editor-label",width:20,height:20})),checker=function(v){return BI.isNumeric(v)&&(0|v)>=0&&(0|v)<=255},Ws=BI.createWidgets([{},{},{}],{type:"bi.small_text_editor",cls:"color-picker-editor-input",validationChecker:checker,errorText:BI.i18nText("BI-Color_Picker_Error_Text"),allowBlank:!0,value:255,width:c.REB_WIDTH,height:20});BI.each(Ws,function(i,w){w.on(BI.TextEditor.EVENT_CHANGE,function(){self._checkEditors(),self.R.isValid()&&self.G.isValid()&&self.B.isValid()&&(self.colorShow.element.css("background-color",self.getValue()),self.fireEvent(BI.SimpleColorPickerEditor.EVENT_CHANGE))})}),this.R=Ws[0],this.G=Ws[1],this.B=Ws[2],BI.createWidget({type:"bi.vertical_adapt",element:this,items:[{el:this.colorShow,width:16,lgap:20,rgap:15},{el:RGB[0],width:20},{el:this.R,width:c.REB_WIDTH},{el:RGB[1],width:20},{el:this.G,width:c.REB_WIDTH},{el:RGB[2],width:20},{el:this.B,width:c.REB_WIDTH}]})},_checkEditors:function(){BI.isEmptyString(this.R.getValue())&&this.R.setValue(0),BI.isEmptyString(this.G.getValue())&&this.G.setValue(0),BI.isEmptyString(this.B.getValue())&&this.B.setValue(0)},setValue:function(color){this.colorShow.element.css({"background-color":color});var json=BI.DOM.rgb2json(BI.DOM.hex2rgb(color));this.R.setValue(BI.isNull(json.r)?"":json.r),this.G.setValue(BI.isNull(json.g)?"":json.g),this.B.setValue(BI.isNull(json.b)?"":json.b)},getValue:function(){return BI.DOM.rgb2hex(BI.DOM.json2rgb({r:this.R.getValue(),g:this.G.getValue(),b:this.B.getValue()}))}}),BI.SimpleColorPickerEditor.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.simple_color_picker_editor",BI.SimpleColorPickerEditor),BI.Farbtastic=BI.inherit(BI.BasicButton,{constants:{RADIUS:84,SQUARE:100,WIDTH:194},props:{baseCls:"bi-farbtastic",width:195,height:195,stopPropagation:!0,value:"#000000"},render:function(){var self=this;return{type:"bi.absolute",items:[{el:{type:"bi.layout",cls:"",ref:function(_ref){self.colorWrapper=_ref}},top:47,left:47,width:101,height:101},{el:{type:"bi.layout",cls:"wheel", +ref:function(_ref){self.wheel=_ref}},left:0,right:0,top:0,bottom:0},{el:{type:"bi.layout",cls:"overlay",ref:function(_ref){self.overlay=_ref}},top:47,left:47,width:101,height:101},{el:{type:"bi.layout",cls:"marker",ref:function(_ref){self.hMarker=_ref},scrollable:!1,width:17,height:17}},{el:{type:"bi.layout",cls:"marker",ref:function(_ref){self.slMarker=_ref},scrollable:!1,width:17,height:17}}]}},mounted:function(){var o=this.options;BI.isKey(o.value)&&this.setValue(o.value)},_unpack:function(color){return 7===color.length?[parseInt("0x"+color.substring(1,3))/255,parseInt("0x"+color.substring(3,5))/255,parseInt("0x"+color.substring(5,7))/255]:4===color.length?[parseInt("0x"+color.substring(1,2))/15,parseInt("0x"+color.substring(2,3))/15,parseInt("0x"+color.substring(3,4))/15]:void 0},_pack:function(rgb){var r=Math.round(255*rgb[0]),g=Math.round(255*rgb[1]),b=Math.round(255*rgb[2]);return"#"+(r<16?"0":"")+r.toString(16)+(g<16?"0":"")+g.toString(16)+(b<16?"0":"")+b.toString(16)},_setColor:function(color){var unpack=this._unpack(color);this.value!==color&&unpack&&(this.value=color,this.rgb=unpack,this.hsl=this._RGBToHSL(this.rgb),this._updateDisplay())},_setHSL:function(hsl){return this.hsl=hsl,this.rgb=this._HSLToRGB(hsl),this.value=this._pack(this.rgb),this._updateDisplay(),this},_HSLToRGB:function(hsl){var m1,m2,r,g,b,h=hsl[0],s=hsl[1],l=hsl[2];return m2=l<=.5?l*(s+1):l+s-l*s,m1=2*l-m2,[this._hueToRGB(m1,m2,h+.33333),this._hueToRGB(m1,m2,h),this._hueToRGB(m1,m2,h-.33333)]},_hueToRGB:function(m1,m2,h){return h=h<0?h+1:h>1?h-1:h,6*h<1?m1+(m2-m1)*h*6:2*h<1?m2:3*h<2?m1+(m2-m1)*(.66666-h)*6:m1},_RGBToHSL:function(rgb){var min,max,delta,h,s,l,r=rgb[0],g=rgb[1],b=rgb[2];return min=Math.min(r,Math.min(g,b)),max=Math.max(r,Math.max(g,b)),delta=max-min,l=(min+max)/2,s=0,l>0&&l<1&&(s=delta/(l<.5?2*l:2-2*l)),h=0,delta>0&&(max==r&&max!=g&&(h+=(g-b)/delta),max==g&&max!=b&&(h+=2+(b-r)/delta),max==b&&max!=r&&(h+=4+(r-g)/delta),h/=6),[h,s,l]},_updateDisplay:function(){var angle=6.28*this.hsl[0];this.hMarker.element.css({left:Math.round(Math.sin(angle)*this.constants.RADIUS+this.constants.WIDTH/2)+"px",top:Math.round(-Math.cos(angle)*this.constants.RADIUS+this.constants.WIDTH/2)+"px"}),this.slMarker.element.css({left:Math.round(this.constants.SQUARE*(.5-this.hsl[1])+this.constants.WIDTH/2)+"px",top:Math.round(this.constants.SQUARE*(.5-this.hsl[2])+this.constants.WIDTH/2)+"px"}),this.colorWrapper.element.css("backgroundColor",this._pack(this._HSLToRGB([this.hsl[0],1,.5]))),this.fireEvent(BI.Farbtastic.EVENT_CHANGE,this.getValue(),this)},_absolutePosition:function(el){var r={x:el.offsetLeft,y:el.offsetTop};if(el.offsetParent){var tmp=this._absolutePosition(el.offsetParent);r.x+=tmp.x,r.y+=tmp.y}return r},_widgetCoords:function(event){var x,y,el=event.target||event.srcElement,reference=this.wheel.element[0];if("undefined"!=typeof event.offsetX){for(var pos={x:event.offsetX,y:event.offsetY},e=el;e;)e.mouseX=pos.x,e.mouseY=pos.y,pos.x+=e.offsetLeft,pos.y+=e.offsetTop,e=e.offsetParent;for(var e=reference,offset={x:0,y:0};e;){if("undefined"!=typeof e.mouseX){x=e.mouseX-offset.x,y=e.mouseY-offset.y;break}offset.x+=e.offsetLeft,offset.y+=e.offsetTop,e=e.offsetParent}for(e=el;e;)e.mouseX=void 0,e.mouseY=void 0,e=e.offsetParent}else{var pos=this._absolutePosition(reference);x=(event.pageX||0)-pos.x,y=(event.pageY||0)-pos.y}return{x:x-this.constants.WIDTH/2,y:y-this.constants.WIDTH/2}},_doMouseMove:function(event){var pos=this._widgetCoords(event);if(this.circleDrag){var hue=Math.atan2(pos.x,-pos.y)/6.28;hue<0&&(hue+=1),this._setHSL([hue,this.hsl[1],this.hsl[2]])}else{var sat=Math.max(0,Math.min(1,-(pos.x/this.constants.SQUARE)+.5)),lum=Math.max(0,Math.min(1,-(pos.y/this.constants.SQUARE)+.5));this._setHSL([this.hsl[0],sat,lum])}},doClick:function(event){var pos=this._widgetCoords(event);return this.circleDrag=2*Math.max(Math.abs(pos.x),Math.abs(pos.y))>this.constants.SQUARE,this._doMouseMove(event),!1},setValue:function(color){this._setColor(color)},getValue:function(){return this.value}}),BI.Farbtastic.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.farbtastic",BI.Farbtastic),BI.BubbleCombo=BI.inherit(BI.Widget,{_const:{TRIANGLE_LENGTH:6},_defaultConfig:function(){return BI.extend(BI.BubbleCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-bubble-combo",trigger:"click",toggle:!0,direction:"bottom,left",isDefaultInit:!1,destroyWhenHide:!1,isNeedAdjustHeight:!0,isNeedAdjustWidth:!0,stopPropagation:!1,adjustLength:0,hideChecker:BI.emptyFn,offsetStyle:"left",el:{},popup:{}})},_init:function(){BI.BubbleCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.combo=BI.createWidget({type:"bi.combo",element:this,trigger:o.trigger,toggle:o.toggle,container:o.container,direction:o.direction,isDefaultInit:o.isDefaultInit,destroyWhenHide:o.destroyWhenHide,isNeedAdjustHeight:o.isNeedAdjustHeight,isNeedAdjustWidth:o.isNeedAdjustWidth,adjustLength:this._getAdjustLength(),stopPropagation:o.stopPropagation,adjustXOffset:0,adjustYOffset:0,hideChecker:o.hideChecker,offsetStyle:o.offsetStyle,el:o.el,popup:BI.extend({type:"bi.bubble_popup_view"},o.popup)}),this.combo.on(BI.Combo.EVENT_TRIGGER_CHANGE,function(){self.fireEvent(BI.BubbleCombo.EVENT_TRIGGER_CHANGE,arguments)}),this.combo.on(BI.Combo.EVENT_CHANGE,function(){self.fireEvent(BI.BubbleCombo.EVENT_CHANGE,arguments)}),this.combo.on(BI.Combo.EVENT_EXPAND,function(){self.fireEvent(BI.BubbleCombo.EVENT_EXPAND,arguments)}),this.combo.on(BI.Combo.EVENT_COLLAPSE,function(){self.fireEvent(BI.BubbleCombo.EVENT_COLLAPSE,arguments)}),this.combo.on(BI.Combo.EVENT_AFTER_INIT,function(){self.fireEvent(BI.BubbleCombo.EVENT_AFTER_INIT,arguments)}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){self.fireEvent(BI.BubbleCombo.EVENT_BEFORE_POPUPVIEW,arguments)}),this.combo.on(BI.Combo.EVENT_AFTER_POPUPVIEW,function(){self._showTriangle(),self.fireEvent(BI.BubbleCombo.EVENT_AFTER_POPUPVIEW,arguments)}),this.combo.on(BI.Combo.EVENT_BEFORE_HIDEVIEW,function(){self._hideTriangle(),self.fireEvent(BI.BubbleCombo.EVENT_BEFORE_HIDEVIEW,arguments)}),this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW,function(){self.fireEvent(BI.BubbleCombo.EVENT_AFTER_HIDEVIEW,arguments)})},_getAdjustLength:function(){return this._const.TRIANGLE_LENGTH+this.options.adjustLength},_createTriangle:function(direction){var pos={},op={},adjustLength=this.options.adjustLength,offset=this.element.offset(),left=offset.left,right=offset.left+this.element.outerWidth(),top=offset.top,bottom=offset.top+this.element.outerHeight();switch(direction){case"left":pos={top:top,height:this.element.outerHeight(),left:left-adjustLength-this._const.TRIANGLE_LENGTH},op={width:this._const.TRIANGLE_LENGTH};break;case"right":pos={top:top,height:this.element.outerHeight(),left:right+adjustLength},op={width:this._const.TRIANGLE_LENGTH};break;case"top":pos={left:left,width:this.element.outerWidth(),top:top-adjustLength-this._const.TRIANGLE_LENGTH},op={height:this._const.TRIANGLE_LENGTH};break;case"bottom":pos={left:left,width:this.element.outerWidth(),top:bottom+adjustLength},op={height:this._const.TRIANGLE_LENGTH}}this.triangle&&this.triangle.destroy(),this.triangle=BI.createWidget(op,{type:"bi.center_adapt",cls:"button-combo-triangle-wrapper",items:[{type:"bi.layout",cls:"bubble-combo-triangle-"+direction}]}),pos.el=this.triangle,BI.createWidget({type:"bi.absolute",element:this,items:[pos]})},_createLeftTriangle:function(){this._createTriangle("left")},_createRightTriangle:function(){this._createTriangle("right")},_createTopTriangle:function(){this._createTriangle("top")},_createBottomTriangle:function(){this._createTriangle("bottom")},_showTriangle:function(){var pos=this.combo.getPopupPosition();switch(pos.dir){case"left,top":case"left,bottom":this._createLeftTriangle();break;case"right,top":case"right,bottom":this._createRightTriangle();break;case"top,left":case"top,right":this._createTopTriangle();break;case"bottom,left":case"bottom,right":this._createBottomTriangle()}},_hideTriangle:function(){this.triangle&&this.triangle.destroy(),this.triangle=null},hideView:function(){this._hideTriangle(),this.combo&&this.combo.hideView()},showView:function(){this.combo&&this.combo.showView()},isViewVisible:function(){return this.combo.isViewVisible()}}),BI.BubbleCombo.EVENT_TRIGGER_CHANGE="EVENT_TRIGGER_CHANGE",BI.BubbleCombo.EVENT_CHANGE="EVENT_CHANGE",BI.BubbleCombo.EVENT_EXPAND="EVENT_EXPAND",BI.BubbleCombo.EVENT_COLLAPSE="EVENT_COLLAPSE",BI.BubbleCombo.EVENT_AFTER_INIT="EVENT_AFTER_INIT",BI.BubbleCombo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.BubbleCombo.EVENT_AFTER_POPUPVIEW="EVENT_AFTER_POPUPVIEW",BI.BubbleCombo.EVENT_BEFORE_HIDEVIEW="EVENT_BEFORE_HIDEVIEW",BI.BubbleCombo.EVENT_AFTER_HIDEVIEW="EVENT_AFTER_HIDEVIEW",BI.shortcut("bi.bubble_combo",BI.BubbleCombo),BI.BubblePopupView=BI.inherit(BI.PopupView,{_defaultConfig:function(){var config=BI.BubblePopupView.superclass._defaultConfig.apply(this,arguments);return BI.extend(config,{baseCls:config.baseCls+" bi-bubble-popup-view",minWidth:220,maxWidth:300,minHeight:90})},_init:function(){BI.BubblePopupView.superclass._init.apply(this,arguments)}}),BI.shortcut("bi.bubble_popup_view",BI.BubblePopupView),BI.BubblePopupBarView=BI.inherit(BI.BubblePopupView,{_defaultConfig:function(){return BI.extend(BI.BubblePopupBarView.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-bubble-bar-popup-view",buttons:[{value:!1,text:BI.i18nText("BI-Basic_Cancel"),ghost:!0},{text:BI.i18nText(BI.i18nText("BI-Basic_Sure")),value:!0}]})},_init:function(){BI.BubblePopupBarView.superclass._init.apply(this,arguments)},_createToolBar:function(){var o=this.options,self=this,items=[];return BI.each(o.buttons,function(i,buttonOpt){BI.isWidget(buttonOpt)?items.push(buttonOpt):items.push(BI.extend({type:"bi.button",height:24,handler:function(v){self.fireEvent(BI.BubblePopupBarView.EVENT_CLICK_TOOLBAR_BUTTON,v)}},buttonOpt))}),BI.createWidget({type:"bi.center",height:44,rgap:15,items:[{type:"bi.right_vertical_adapt",lgap:10,items:items}]})},_createView:function(){var o=this.options,button=BI.createWidget({type:"bi.button_group",items:[o.el],layouts:[{type:"bi.vertical",cls:"bar-popup-container",hgap:15,tgap:10}]});return button.element.css("min-height",o.minHeight-44),button}}),BI.BubblePopupBarView.EVENT_CLICK_TOOLBAR_BUTTON="EVENT_CLICK_TOOLBAR_BUTTON",BI.shortcut("bi.bubble_bar_popup_view",BI.BubblePopupBarView),BI.TextBubblePopupBarView=BI.inherit(BI.Widget,{props:function(){return{baseCls:"bi-text-bubble-bar-popup-view",text:"",buttons:[{level:"ignore",value:!1,stopPropagation:!0,text:BI.i18nText("BI-Basic_Cancel")},{value:!0,stopPropagation:!0,text:BI.i18nText("BI-Basic_Sure")}]}},render:function(){var self=this,o=this.options,buttons=BI.map(o.buttons,function(index,buttonOpt){return BI.isWidget(buttonOpt)?buttonOpt:BI.extend({type:"bi.button",height:24,handler:function(v){self.fireEvent(BI.TextBubblePopupBarView.EVENT_CHANGE,v)}},buttonOpt)});return{type:"bi.bubble_bar_popup_view",minWidth:o.minWidth,maxWidth:o.maxWidth,minHeight:o.minHeight,ref:function(){self.popup=this},el:{type:"bi.label",text:o.text,whiteSpace:"normal",textAlign:"left",ref:function(){self.text=this}},buttons:buttons}},populate:function(v){this.text.setText(v||this.options.text)}}),BI.TextBubblePopupBarView.EVENT_CHANGE="EVENT_CLICK_TOOLBAR_BUTTON",BI.shortcut("bi.text_bubble_bar_popup_view",BI.TextBubblePopupBarView),BI.EditorIconCheckCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.EditorIconCheckCombo.superclass._defaultConfig.apply(this,arguments),{baseClass:"bi-check-editor-combo",width:100,height:24,chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,validationChecker:BI.emptyFn,quitChecker:BI.emptyFn,allowBlank:!0,watermark:"",errorText:""})},_init:function(){BI.EditorIconCheckCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.trigger=BI.createWidget({type:"bi.editor_trigger",items:o.items,height:o.height,validationChecker:o.validationChecker,quitChecker:o.quitChecker,allowBlank:o.allowBlank,watermark:o.watermark,errorText:o.errorText,value:o.value}),this.trigger.on(BI.EditorTrigger.EVENT_CHANGE,function(){self.popup.setValue(this.getValue()),self.fireEvent(BI.EditorIconCheckCombo.EVENT_CHANGE)}),this.popup=BI.createWidget({type:"bi.text_value_check_combo_popup",chooseType:o.chooseType,items:o.items,value:o.value}),this.popup.on(BI.TextValueCheckComboPopup.EVENT_CHANGE,function(){self.setValue(self.popup.getValue()),self.editorIconCheckCombo.hideView(),self.fireEvent(BI.EditorIconCheckCombo.EVENT_CHANGE)}),this.popup.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editorIconCheckCombo=BI.createWidget({type:"bi.combo",container:o.container,element:this,adjustLength:2,el:this.trigger,popup:{el:this.popup,maxHeight:300}})},setValue:function(v){this.editorIconCheckCombo.setValue(v)},getValue:function(){return this.trigger.getValue()},populate:function(items){this.options.items=items,this.editorIconCheckCombo.populate(items)}}),BI.EditorIconCheckCombo.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.editor_icon_check_combo",BI.EditorIconCheckCombo),BI.IconCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.IconCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-icon-combo",width:24,height:24,el:{},popup:{},minWidth:100,maxWidth:"auto",maxHeight:300,direction:"bottom",adjustLength:3,adjustXOffset:0,adjustYOffset:0,offsetStyle:"left",chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE})},_init:function(){BI.IconCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.trigger=BI.createWidget(o.el,{type:"bi.icon_combo_trigger",iconCls:o.iconCls,title:o.title,items:o.items,width:o.width,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight,value:o.value}),this.popup=BI.createWidget(o.popup,{type:"bi.icon_combo_popup",chooseType:o.chooseType,items:o.items,value:o.value}),this.popup.on(BI.IconComboPopup.EVENT_CHANGE,function(){self.setValue(self.popup.getValue()),self.iconCombo.hideView(),self.fireEvent(BI.IconCombo.EVENT_CHANGE)}),this.popup.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.iconCombo=BI.createWidget({type:"bi.combo",element:this,direction:o.direction,trigger:o.trigger,container:o.container,adjustLength:o.adjustLength,adjustXOffset:o.adjustXOffset,adjustYOffset:o.adjustYOffset,offsetStyle:o.offsetStyle,el:this.trigger,popup:{el:this.popup,maxWidth:o.maxWidth,maxHeight:o.maxHeight,minWidth:o.minWidth}})},showView:function(){this.iconCombo.showView()},hideView:function(){this.iconCombo.hideView()},setValue:function(v){this.trigger.setValue(v),this.popup.setValue(v)},getValue:function(){var value=this.popup.getValue();return BI.isNull(value)?[]:BI.isArray(value)?value:[value]},populate:function(items){this.options.items=items,this.iconCombo.populate(items)}}),BI.IconCombo.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.icon_combo",BI.IconCombo),BI.IconComboPopup=BI.inherit(BI.Pane,{_defaultConfig:function(){return BI.extend(BI.IconComboPopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi.icon-combo-popup",chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE})},_init:function(){BI.IconComboPopup.superclass._init.apply(this,arguments);var o=this.options,self=this;this.popup=BI.createWidget({type:"bi.button_group",items:BI.createItems(o.items,{type:"bi.single_select_icon_text_item",height:24}),chooseType:o.chooseType,layouts:[{type:"bi.vertical"}],value:o.value}),this.popup.on(BI.Controller.EVENT_CHANGE,function(type,val,obj){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.IconComboPopup.EVENT_CHANGE,val,obj)}),BI.createWidget({type:"bi.vertical",element:this,vgap:5,items:[this.popup]})},populate:function(items){BI.IconComboPopup.superclass.populate.apply(this,arguments),items=BI.createItems(items,{type:"bi.single_select_icon_text_item",height:24}),this.popup.populate(items)},getValue:function(){return this.popup.getValue()},setValue:function(v){this.popup.setValue(v)}}),BI.IconComboPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.icon_combo_popup",BI.IconComboPopup),BI.IconComboTrigger=BI.inherit(BI.Trigger,{_defaultConfig:function(){return BI.extend(BI.IconComboTrigger.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-icon-combo-trigger",el:{},items:[],iconCls:"",width:24,height:24,isShowDown:!0,value:""})},_init:function(){BI.IconComboTrigger.superclass._init.apply(this,arguments);var o=this.options,self=this,iconCls="";BI.isKey(o.value)&&(iconCls=this._digest(o.value,o.items)),this.button=BI.createWidget(o.el,{type:"bi.icon_change_button",cls:"icon-combo-trigger-icon",iconCls:iconCls,disableSelected:!0,width:o.isShowDown?o.width-12:o.width,height:o.height,iconWidth:o.iconWidth,iconHeight:o.iconHeight,selected:BI.isNotEmptyString(iconCls)}),this.down=BI.createWidget({type:"bi.icon_button",disableSelected:!0,cls:"icon-combo-down-icon trigger-triangle-font font-size-12",width:12,height:8,selected:BI.isNotEmptyString(iconCls)}),this.down.setVisible(o.isShowDown),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.button,left:0,right:0,top:0,bottom:0},{el:this.down,right:3,bottom:0}]})},_digest:function(v,items){var iconCls="";return v=BI.isArray(v)?v[0]:v,BI.any(items,function(i,item){if(v===item.value)return iconCls=item.iconCls,!0}),iconCls},populate:function(items){var o=this.options;this.options.items=items||[],this.button.setIcon(o.iconCls),this.button.setSelected(!1),this.down.setSelected(!1)},setValue:function(v){BI.IconComboTrigger.superclass.setValue.apply(this,arguments);var o=this.options,iconCls=this._digest(v,this.options.items);v=BI.isArray(v)?v[0]:v,BI.isNotEmptyString(iconCls)?(this.button.setIcon(iconCls),this.button.setSelected(!0),this.down.setSelected(!0)):(this.button.setIcon(o.iconCls),this.button.setSelected(!1),this.down.setSelected(!1))}}),BI.IconComboTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.icon_combo_trigger",BI.IconComboTrigger),BI.IconTextValueCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.IconTextValueCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-icon-text-value-combo",height:24,iconHeight:null,iconWidth:null,value:"",attributes:{tabIndex:0}})},_init:function(){BI.IconTextValueCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.trigger=BI.createWidget({type:"bi.select_icon_text_trigger",cls:"icon-text-value-trigger",items:o.items,height:o.height,text:o.text,iconCls:o.iconCls,value:o.value,iconHeight:o.iconHeight,iconWidth:o.iconWidth,iconWrapperWidth:o.iconWrapperWidth,title:o.title,warningTitle:o.warningTitle}),this.popup=BI.createWidget({type:"bi.icon_text_value_combo_popup",items:o.items,value:o.value,iconHeight:o.iconHeight,iconWidth:o.iconWidth,iconWrapperWidth:o.iconWrapperWidth}),this.popup.on(BI.IconTextValueComboPopup.EVENT_CHANGE,function(){self.setValue(self.popup.getValue()),self.textIconCombo.hideView(),self.fireEvent(BI.IconTextValueCombo.EVENT_CHANGE,arguments)}),this.popup.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.textIconCombo=BI.createWidget({type:"bi.combo",element:this,container:o.container,adjustLength:2,el:this.trigger,popup:{el:this.popup,maxHeight:240,minHeight:25}}),BI.isKey(o.value)&&this.setValue(o.value)},_checkError:function(v){if(BI.isNotNull(v)){v=BI.isArray(v)?v:[v];var result=BI.find(this.options.items,function(idx,item){return BI.contains(v,item.value)});BI.isNull(result)?(this.trigger.options.tipType="warning",this.element.removeClass("combo-error").addClass("combo-error")):(this.trigger.options.tipType="success",this.element.removeClass("combo-error"))}},setValue:function(v){this.trigger.setValue(v),this.popup.setValue(v),this._checkError(v)},getValue:function(){var value=this.popup.getValue();return BI.isNull(value)?[]:BI.isArray(value)?value:[value]},populate:function(items){this.options.items=items,this.textIconCombo.populate(items)}}),BI.IconTextValueCombo.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.icon_text_value_combo",BI.IconTextValueCombo),BI.IconTextValueComboPopup=BI.inherit(BI.Pane,{_defaultConfig:function(){return BI.extend(BI.IconTextValueComboPopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-icon-text-icon-popup",behaviors:{redmark:function(){return!0}}})},_init:function(){BI.IconTextValueComboPopup.superclass._init.apply(this,arguments);var o=this.options,self=this;this.popup=BI.createWidget({type:"bi.button_group",items:BI.createItems(o.items,{type:"bi.single_select_icon_text_item",height:24,iconHeight:o.iconHeight,iconWidth:o.iconWidth,iconWrapperWidth:o.iconWrapperWidth}),chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,layouts:[{type:"bi.vertical"}],behaviors:o.behaviors,value:o.value}),this.popup.on(BI.Controller.EVENT_CHANGE,function(type,val,obj){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.IconTextValueComboPopup.EVENT_CHANGE,val,obj)}),this.check(),BI.createWidget({type:"bi.vertical",element:this,vgap:5,items:[this.popup]})},populate:function(items,keyword){BI.IconTextValueComboPopup.superclass.populate.apply(this,arguments);var o=this.options;items=BI.createItems(items,{type:"bi.single_select_icon_text_item",height:24,iconWrapperWidth:o.iconWrapperWidth,iconHeight:o.iconHeight,iconWidth:o.iconWidth}),this.popup.populate(items,keyword)},getValue:function(){return this.popup.getValue()},setValue:function(v){this.popup.setValue(v)}}),BI.IconTextValueComboPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.icon_text_value_combo_popup",BI.IconTextValueComboPopup),BI.SearchTextValueCombo=BI.inherit(BI.Widget,{props:{baseCls:"bi-search-text-value-combo",height:24,text:"",items:[],tipType:"",warningTitle:"",attributes:{tabIndex:0}},render:function(){var self=this,o=this.options;return{type:"bi.absolute",items:[{el:{type:"bi.combo",container:o.container,adjustLength:2,toggle:!1,ref:function(){self.combo=this},el:{type:"bi.search_text_value_trigger",cls:"search-text-value-trigger",ref:function(){self.trigger=this},items:o.items,height:o.height-2,text:o.text,value:o.value,tipType:o.tipType,warningTitle:o.warningTitle,title:o.title,listeners:[{eventName:BI.SearchTextValueTrigger.EVENT_CHANGE,action:function(){self.setValue(this.getValue()),self.combo.hideView(),self.fireEvent(BI.SearchTextValueCombo.EVENT_CHANGE)}}]},popup:{el:{type:"bi.text_value_combo_popup",chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,value:o.value,items:o.items,ref:function(){self.popup=this,self.trigger.getSearcher().setAdapter(self.popup)},listeners:[{eventName:BI.TextValueComboPopup.EVENT_CHANGE,action:function(){self.setValue(this.getValue()),self.combo.hideView(),self.fireEvent(BI.SearchTextValueCombo.EVENT_CHANGE)}}]},value:o.value,maxHeight:252,minHeight:25},listeners:[{eventName:BI.Combo.EVENT_AFTER_HIDEVIEW,action:function(){self.trigger.stopEditing()}},{eventName:BI.Combo.EVENT_BEFORE_POPUPVIEW,action:function(){self.fireEvent(BI.SearchTextValueCombo.EVENT_BEFORE_POPUPVIEW)}}],hideChecker:function(e){return 0===self.triggerBtn.element.find(e.target).length}},left:0,right:0,bottom:0,top:0},{el:{type:"bi.trigger_icon_button",cls:"trigger-icon-button",ref:function(){self.triggerBtn=this},width:o.height,height:o.height,handler:function(){self.combo.isViewVisible()?self.combo.hideView():self.combo.showView()}},right:0,bottom:0,top:0}]}},mounted:function(){var o=this.options;BI.isKey(o.value)&&this._checkError(o.value)},_checkError:function(v){if(BI.isNotNull(v)){v=BI.isArray(v)?v:[v];var result=BI.find(this.options.items,function(idx,item){return BI.contains(v,item.value)});BI.isNull(result)?(this.element.removeClass("combo-error").addClass("combo-error"),this.trigger.attr("tipType","warning")):(this.element.removeClass("combo-error"),this.trigger.attr("tipType","success"))}},populate:function(items){this.options.items=items,this.combo.populate(items)},setValue:function(v){this.combo.setValue(v),this._checkError(v)},getValue:function(){var value=this.combo.getValue();return BI.isNull(value)?[]:BI.isArray(value)?value:[value]}}),BI.SearchTextValueCombo.EVENT_CHANGE="EVENT_CHANGE",BI.SearchTextValueCombo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.search_text_value_combo",BI.SearchTextValueCombo),BI.SearchTextValueComboPopup=BI.inherit(BI.Pane,{props:{baseCls:"bi-search-text-value-popup"},render:function(){var self=this,o=this.options;return{type:"bi.vertical",vgap:5,items:[{type:"bi.button_group",ref:function(){self.popup=this},items:BI.createItems(o.items,{type:"bi.single_select_item",textAlign:o.textAlign,height:24}),chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,layouts:[{type:"bi.vertical"}],behaviors:{redmark:function(){return!0}},value:o.value,listeners:[{eventName:BI.Controller.EVENT_CHANGE,action:function(type,val,obj){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.SearchTextValueComboPopup.EVENT_CHANGE,val,obj)}}]}]}},mounted:function(){this.check()},populate:function(find,match,keyword){var items=BI.concat(find,match);BI.SearchTextValueComboPopup.superclass.populate.apply(this,items),items=BI.createItems(items,{type:"bi.single_select_item",height:24}),this.popup.populate(items,keyword)},getValue:function(){return this.popup.getValue()},setValue:function(v){this.popup.setValue(v)}}),BI.SearchTextValueComboPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.search_text_value_combo_popup",BI.SearchTextValueComboPopup),BI.SearchTextValueTrigger=BI.inherit(BI.Trigger,{props:{extraCls:"bi-search-text-value-trigger bi-border",height:24},render:function(){var self=this,o=this.options;return{type:"bi.htape",items:[{el:{type:"bi.searcher",ref:function(){self.searcher=this},isAutoSearch:!1,el:{type:"bi.state_editor",ref:function(){self.editor=this},defaultText:o.text,text:this._digest(o.value,o.items),value:o.value,height:o.height,tipText:""},popup:{type:"bi.search_text_value_combo_popup",cls:"bi-card",chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE},onSearch:function(obj,callback){var keyword=obj.keyword,finding=BI.Func.getSearchResult(o.items,keyword),matched=finding.match,find=finding.find;callback(find,matched)},listeners:[{eventName:BI.Searcher.EVENT_CHANGE,action:function(){self.fireEvent(BI.SearchTextValueTrigger.EVENT_CHANGE)}}]}},{el:{type:"bi.layout",width:24},width:24}]}},_setState:function(v){this.editor.setState(v)},_digest:function(vals,items){var o=this.options;vals=BI.isArray(vals)?vals:[vals];var result=[],formatItems=BI.Tree.transformToArrayFormat(items);return BI.each(formatItems,function(i,item){BI.deepContains(vals,item.value)&&!BI.contains(result,item.text||item.value)&&result.push(item.text||item.value)}),result.length>0?result.join(","):BI.isFunction(o.text)?o.text():o.text},stopEditing:function(){this.searcher.stopSearch()},getSearcher:function(){return this.searcher},populate:function(items){this.options.items=items},setValue:function(vals){this._setState(this._digest(vals,this.options.items))},getValue:function(){return this.searcher.getValue()}}),BI.SearchTextValueTrigger.EVENT_SEARCHING="EVENT_SEARCHING",BI.SearchTextValueTrigger.EVENT_STOP="EVENT_STOP",BI.SearchTextValueTrigger.EVENT_START="EVENT_START",BI.SearchTextValueTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.search_text_value_trigger",BI.SearchTextValueTrigger),BI.TextValueCheckCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.TextValueCheckCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-text-value-check-combo",width:100,height:24,chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,value:"",attributes:{tabIndex:0}})},_init:function(){BI.TextValueCheckCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.trigger=BI.createWidget({type:"bi.select_text_trigger",cls:"text-value-trigger",items:o.items,height:o.height,text:o.text,value:o.value}),this.popup=BI.createWidget({type:"bi.text_value_check_combo_popup",chooseType:o.chooseType,items:o.items,value:o.value}),this.popup.on(BI.TextValueCheckComboPopup.EVENT_CHANGE,function(){self.setValue(self.popup.getValue()),self.textIconCheckCombo.hideView(),self.fireEvent(BI.TextValueCheckCombo.EVENT_CHANGE)}),this.popup.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.textIconCheckCombo=BI.createWidget({type:"bi.combo",container:o.container,element:this,adjustLength:2,el:this.trigger,popup:{el:this.popup,maxHeight:300}}),BI.isKey(o.value)&&this.setValue(o.value)},setTitle:function(title){this.trigger.setTitle(title)},setValue:function(v){this.trigger.setValue(v),this.popup.setValue(v)},setWarningTitle:function(title){this.trigger.setWarningTitle(title)},getValue:function(){var value=this.popup.getValue();return BI.isNull(value)?[]:BI.isArray(value)?value:[value]},populate:function(items){this.options.items=items,this.textIconCheckCombo.populate(items)}}),BI.TextValueCheckCombo.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.text_value_check_combo",BI.TextValueCheckCombo),BI.TextValueCheckComboPopup=BI.inherit(BI.Pane,{_defaultConfig:function(){return BI.extend(BI.TextValueCheckComboPopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-text-icon-popup",chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE})},_init:function(){BI.TextValueCheckComboPopup.superclass._init.apply(this,arguments);var o=this.options,self=this;this.popup=BI.createWidget({type:"bi.button_group",items:this._formatItems(o.items),chooseType:o.chooseType,layouts:[{type:"bi.vertical"}],value:o.value}),this.popup.on(BI.Controller.EVENT_CHANGE,function(type,val,obj){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.TextValueCheckComboPopup.EVENT_CHANGE,val,obj)}),BI.createWidget({type:"bi.vertical",element:this,vgap:5,items:[this.popup]})},_formatItems:function(items){return BI.map(items,function(i,item){return BI.extend({type:"bi.single_select_item",cls:"bi-list-item",height:24},item)})},populate:function(items){BI.TextValueCheckComboPopup.superclass.populate.apply(this,arguments),this.popup.populate(this._formatItems(items))},getValue:function(){return this.popup.getValue()},setValue:function(v){this.popup.setValue(v)}}),BI.TextValueCheckComboPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.text_value_check_combo_popup",BI.TextValueCheckComboPopup),BI.TextValueCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.TextValueCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-text-value-combo",height:24,chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,text:"",value:"",attributes:{tabIndex:0}})},_init:function(){BI.TextValueCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.trigger=BI.createWidget({type:"bi.select_text_trigger",cls:"text-value-trigger",items:o.items,height:o.height,text:o.text,value:o.value,warningTitle:o.warningTitle}),this.popup=BI.createWidget({type:"bi.text_value_combo_popup",chooseType:o.chooseType,value:o.value,items:o.items}),this.popup.on(BI.TextValueComboPopup.EVENT_CHANGE,function(){self.setValue(self.popup.getValue()),self.textIconCombo.hideView(),self.fireEvent(BI.TextValueCombo.EVENT_CHANGE,arguments)}),this.popup.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.textIconCombo=BI.createWidget({type:"bi.combo",container:o.container,element:this,adjustLength:2,el:this.trigger,popup:{el:this.popup,maxHeight:240,minHeight:25}}),BI.isKey(o.value)&&this._checkError(o.value)},_checkError:function(v){if(BI.isNotNull(v)){v=BI.isArray(v)?v:[v];var result=BI.find(this.options.items,function(idx,item){return BI.contains(v,item.value)});BI.isNull(result)?(this.trigger.setTipType("warning"),this.element.removeClass("combo-error").addClass("combo-error")):(this.trigger.setTipType("success"),this.element.removeClass("combo-error"))} +},setValue:function(v){this.trigger.setValue(v),this.popup.setValue(v),this._checkError(v)},getValue:function(){var value=this.popup.getValue();return BI.isNull(value)?[]:BI.isArray(value)?value:[value]},populate:function(items){this.options.items=items,this.textIconCombo.populate(items)}}),BI.TextValueCombo.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.text_value_combo",BI.TextValueCombo),BI.SmallTextValueCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SmallTextValueCombo.superclass._defaultConfig.apply(this,arguments),{width:100,height:20,chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,el:{},text:""})},_init:function(){BI.SmallTextValueCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.trigger=BI.createWidget(o.el,{type:"bi.small_select_text_trigger",items:o.items,height:o.height,text:o.text}),this.popup=BI.createWidget({type:"bi.text_value_combo_popup",chooseType:o.chooseType,items:o.items}),this.popup.on(BI.TextValueComboPopup.EVENT_CHANGE,function(){self.setValue(self.popup.getValue()),self.SmallTextValueCombo.hideView(),self.fireEvent(BI.SmallTextValueCombo.EVENT_CHANGE)}),this.popup.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.SmallTextValueCombo=BI.createWidget({type:"bi.combo",element:this,container:o.container,adjustLength:2,el:this.trigger,popup:{el:this.popup,maxHeight:240,minHeight:25}})},setValue:function(v){this.trigger.setValue(v),this.popup.setValue(v)},getValue:function(){return this.popup.getValue()},populate:function(items){this.options.items=items,this.SmallTextValueCombo.populate(items)}}),BI.SmallTextValueCombo.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.small_text_value_combo",BI.SmallTextValueCombo),BI.TextValueComboPopup=BI.inherit(BI.Pane,{_defaultConfig:function(){return BI.extend(BI.TextValueComboPopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-text-icon-popup",chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE})},_init:function(){BI.TextValueComboPopup.superclass._init.apply(this,arguments);var o=this.options,self=this;this.popup=BI.createWidget({type:"bi.button_group",items:BI.createItems(o.items,{type:"bi.single_select_item",textAlign:o.textAlign,height:24}),chooseType:o.chooseType,layouts:[{type:"bi.vertical"}],value:o.value}),this.popup.on(BI.Controller.EVENT_CHANGE,function(type,val,obj){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.TextValueComboPopup.EVENT_CHANGE,val,obj)}),this.check(),BI.createWidget({type:"bi.vertical",element:this,vgap:5,items:[this.popup]})},populate:function(items){BI.TextValueComboPopup.superclass.populate.apply(this,arguments),items=BI.createItems(items,{type:"bi.single_select_item",height:24}),this.popup.populate(items)},getValue:function(){return this.popup.getValue()},setValue:function(v){this.popup.setValue(v)}}),BI.TextValueComboPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.text_value_combo_popup",BI.TextValueComboPopup),BI.ClearEditor=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.ClearEditor.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-clear-editor",height:24,errorText:"",watermark:"",validationChecker:BI.emptyFn,quitChecker:BI.emptyFn})},_init:function(){BI.ClearEditor.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget({type:"bi.editor",height:o.height,watermark:o.watermark,allowBlank:!0,errorText:o.errorText,validationChecker:o.validationChecker,quitChecker:o.quitChecker,value:o.value}),this.clear=BI.createWidget({type:"bi.icon_button",stopEvent:!0,cls:"search-close-h-font"}),this.clear.on(BI.IconButton.EVENT_CHANGE,function(){self.setValue(""),self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.STOPEDIT),self.fireEvent(BI.ClearEditor.EVENT_CLEAR)}),BI.createWidget({element:this,type:"bi.htape",items:[{el:this.editor},{el:this.clear,width:24}]}),this.editor.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editor.on(BI.Editor.EVENT_FOCUS,function(){self.fireEvent(BI.ClearEditor.EVENT_FOCUS)}),this.editor.on(BI.Editor.EVENT_BLUR,function(){self.fireEvent(BI.ClearEditor.EVENT_BLUR)}),this.editor.on(BI.Editor.EVENT_CLICK,function(){self.fireEvent(BI.ClearEditor.EVENT_CLICK)}),this.editor.on(BI.Editor.EVENT_CHANGE,function(){self._checkClear(),self.fireEvent(BI.ClearEditor.EVENT_CHANGE)}),this.editor.on(BI.Editor.EVENT_KEY_DOWN,function(v){self.fireEvent(BI.ClearEditor.EVENT_KEY_DOWN,v)}),this.editor.on(BI.Editor.EVENT_SPACE,function(){self.fireEvent(BI.ClearEditor.EVENT_SPACE)}),this.editor.on(BI.Editor.EVENT_BACKSPACE,function(){self.fireEvent(BI.ClearEditor.EVENT_BACKSPACE)}),this.editor.on(BI.Editor.EVENT_VALID,function(){self.fireEvent(BI.ClearEditor.EVENT_VALID)}),this.editor.on(BI.Editor.EVENT_ERROR,function(){self.fireEvent(BI.ClearEditor.EVENT_ERROR)}),this.editor.on(BI.Editor.EVENT_ENTER,function(){self.fireEvent(BI.ClearEditor.EVENT_ENTER)}),this.editor.on(BI.Editor.EVENT_RESTRICT,function(){self.fireEvent(BI.ClearEditor.EVENT_RESTRICT)}),this.editor.on(BI.Editor.EVENT_EMPTY,function(){self._checkClear(),self.fireEvent(BI.ClearEditor.EVENT_EMPTY)}),this.editor.on(BI.Editor.EVENT_REMOVE,function(){self.fireEvent(BI.ClearEditor.EVENT_REMOVE)}),this.editor.on(BI.Editor.EVENT_CONFIRM,function(){self.fireEvent(BI.ClearEditor.EVENT_CONFIRM)}),this.editor.on(BI.Editor.EVENT_CHANGE_CONFIRM,function(){self.fireEvent(BI.ClearEditor.EVENT_CHANGE_CONFIRM)}),this.editor.on(BI.Editor.EVENT_START,function(){self.fireEvent(BI.ClearEditor.EVENT_START)}),this.editor.on(BI.Editor.EVENT_PAUSE,function(){self.fireEvent(BI.ClearEditor.EVENT_PAUSE)}),this.editor.on(BI.Editor.EVENT_STOP,function(){self.fireEvent(BI.ClearEditor.EVENT_STOP)}),BI.isKey(o.value)?this.clear.visible():this.clear.invisible()},_checkClear:function(){this.getValue()?this.clear.visible():this.clear.invisible()},setWaterMark:function(v){this.options.watermark=v,this.editor.setWaterMark(v)},focus:function(){this.editor.focus()},blur:function(){this.editor.blur()},getValue:function(){if(this.isValid()){var res=this.editor.getValue().match(/[\S]+/g);return BI.isNull(res)?"":res[res.length-1]}},setValue:function(v){this.editor.setValue(v),BI.isKey(v)&&this.clear.visible()},isValid:function(){return this.editor.isValid()}}),BI.ClearEditor.EVENT_CHANGE="EVENT_CHANGE",BI.ClearEditor.EVENT_FOCUS="EVENT_FOCUS",BI.ClearEditor.EVENT_BLUR="EVENT_BLUR",BI.ClearEditor.EVENT_CLICK="EVENT_CLICK",BI.ClearEditor.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.ClearEditor.EVENT_SPACE="EVENT_SPACE",BI.ClearEditor.EVENT_BACKSPACE="EVENT_BACKSPACE",BI.ClearEditor.EVENT_CLEAR="EVENT_CLEAR",BI.ClearEditor.EVENT_START="EVENT_START",BI.ClearEditor.EVENT_PAUSE="EVENT_PAUSE",BI.ClearEditor.EVENT_STOP="EVENT_STOP",BI.ClearEditor.EVENT_CONFIRM="EVENT_CONFIRM",BI.ClearEditor.EVENT_CHANGE_CONFIRM="EVENT_CHANGE_CONFIRM",BI.ClearEditor.EVENT_VALID="EVENT_VALID",BI.ClearEditor.EVENT_ERROR="EVENT_ERROR",BI.ClearEditor.EVENT_ENTER="EVENT_ENTER",BI.ClearEditor.EVENT_RESTRICT="EVENT_RESTRICT",BI.ClearEditor.EVENT_REMOVE="EVENT_REMOVE",BI.ClearEditor.EVENT_EMPTY="EVENT_EMPTY",BI.shortcut("bi.clear_editor",BI.ClearEditor),BI.ShelterEditor=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.ShelterEditor.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-shelter-editor",hgap:4,vgap:2,lgap:0,rgap:0,tgap:0,bgap:0,validationChecker:BI.emptyFn,quitChecker:BI.emptyFn,allowBlank:!0,watermark:"",errorText:"",height:24,textAlign:"left"})},_init:function(){BI.ShelterEditor.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget({type:"bi.editor",height:o.height,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,value:o.value,validationChecker:o.validationChecker,quitChecker:o.quitChecker,allowBlank:o.allowBlank,watermark:o.watermark,errorText:o.errorText}),this.text=BI.createWidget({type:"bi.text_button",cls:"shelter-editor-text",title:o.title,warningTitle:o.warningTitle,tipType:o.tipType,textAlign:o.textAlign,height:o.height,hgap:o.hgap}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.text,left:0,right:0,top:0,bottom:0}]}),this.text.on(BI.Controller.EVENT_CHANGE,function(){arguments[2]=self,self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.text.on(BI.TextButton.EVENT_CHANGE,function(){self.fireEvent(BI.ShelterEditor.EVENT_CLICK_LABEL)}),this.editor.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editor.on(BI.Editor.EVENT_FOCUS,function(){self.fireEvent(BI.ShelterEditor.EVENT_FOCUS,arguments)}),this.editor.on(BI.Editor.EVENT_BLUR,function(){self.fireEvent(BI.ShelterEditor.EVENT_BLUR,arguments)}),this.editor.on(BI.Editor.EVENT_CLICK,function(){self.fireEvent(BI.ShelterEditor.EVENT_CLICK,arguments)}),this.editor.on(BI.Editor.EVENT_CHANGE,function(){self.fireEvent(BI.ShelterEditor.EVENT_CHANGE,arguments)}),this.editor.on(BI.Editor.EVENT_KEY_DOWN,function(v){self.fireEvent(BI.ShelterEditor.EVENT_KEY_DOWN,arguments)}),this.editor.on(BI.Editor.EVENT_VALID,function(){self.fireEvent(BI.ShelterEditor.EVENT_VALID,arguments)}),this.editor.on(BI.Editor.EVENT_CONFIRM,function(){self._showHint(),self._checkText(),self.fireEvent(BI.ShelterEditor.EVENT_CONFIRM,arguments)}),this.editor.on(BI.Editor.EVENT_CHANGE_CONFIRM,function(){self._showHint(),self._checkText(),self.fireEvent(BI.ShelterEditor.EVENT_CHANGE_CONFIRM,arguments)}),this.editor.on(BI.Editor.EVENT_START,function(){self.fireEvent(BI.ShelterEditor.EVENT_START,arguments)}),this.editor.on(BI.Editor.EVENT_PAUSE,function(){self.fireEvent(BI.ShelterEditor.EVENT_PAUSE,arguments)}),this.editor.on(BI.Editor.EVENT_STOP,function(){self.fireEvent(BI.ShelterEditor.EVENT_STOP,arguments)}),this.editor.on(BI.Editor.EVENT_SPACE,function(){self.fireEvent(BI.ShelterEditor.EVENT_SPACE,arguments)}),this.editor.on(BI.Editor.EVENT_ERROR,function(){self._checkText(),self.fireEvent(BI.ShelterEditor.EVENT_ERROR,arguments)}),this.editor.on(BI.Editor.EVENT_ENTER,function(){self.fireEvent(BI.ShelterEditor.EVENT_ENTER,arguments)}),this.editor.on(BI.Editor.EVENT_RESTRICT,function(){self.fireEvent(BI.ShelterEditor.EVENT_RESTRICT,arguments)}),this.editor.on(BI.Editor.EVENT_EMPTY,function(){self.fireEvent(BI.ShelterEditor.EVENT_EMPTY,arguments)}),BI.createWidget({type:"bi.vertical",scrolly:!1,element:this,items:[this.editor]}),this._showHint(),self._checkText(),BI.isKey(o.keyword)&&this.text.doRedMark(o.keyword)},_checkText:function(){var o=this.options;""===this.editor.getValue()?(this.text.setValue(o.watermark||""),this.text.element.addClass("bi-water-mark")):(this.text.setValue(this.editor.getValue()),this.text.element.removeClass("bi-water-mark"))},_showInput:function(){this.editor.visible(),this.text.invisible()},_showHint:function(){this.editor.invisible(),this.text.visible()},setWaterMark:function(v){this.options.watermark=v,this.editor.setWaterMark(v)},setTitle:function(title){this.text.setTitle(title)},setWarningTitle:function(title){this.text.setWarningTitle(title)},focus:function(){this._showInput(),this.editor.focus()},blur:function(){this.editor.blur(),this._showHint(),this._checkText()},doRedMark:function(){""===this.editor.getValue()&&BI.isKey(this.options.watermark)||this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){""===this.editor.getValue()&&BI.isKey(this.options.watermark)||this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},isValid:function(){return this.editor.isValid()},setErrorText:function(text){this.editor.setErrorText(text)},getErrorText:function(){return this.editor.getErrorText()},isEditing:function(){return this.editor.isEditing()},getLastValidValue:function(){return this.editor.getLastValidValue()},getLastChangedValue:function(){return this.editor.getLastChangedValue()},setTextStyle:function(style){this.text.setStyle(style)},setValue:function(k){var o=this.options;this.editor.setValue(k),this._checkText(),BI.isKey(o.keyword)&&this.text.doRedMark(o.keyword)},getValue:function(){return this.editor.getValue()},getState:function(){return this.text.getValue()},setState:function(v){this._showHint(),this.text.setValue(v)}}),BI.ShelterEditor.EVENT_CHANGE="EVENT_CHANGE",BI.ShelterEditor.EVENT_FOCUS="EVENT_FOCUS",BI.ShelterEditor.EVENT_BLUR="EVENT_BLUR",BI.ShelterEditor.EVENT_CLICK="EVENT_CLICK",BI.ShelterEditor.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.ShelterEditor.EVENT_CLICK_LABEL="EVENT_CLICK_LABEL",BI.ShelterEditor.EVENT_START="EVENT_START",BI.ShelterEditor.EVENT_PAUSE="EVENT_PAUSE",BI.ShelterEditor.EVENT_STOP="EVENT_STOP",BI.ShelterEditor.EVENT_CONFIRM="EVENT_CONFIRM",BI.ShelterEditor.EVENT_CHANGE_CONFIRM="EVENT_CHANGE_CONFIRM",BI.ShelterEditor.EVENT_VALID="EVENT_VALID",BI.ShelterEditor.EVENT_ERROR="EVENT_ERROR",BI.ShelterEditor.EVENT_ENTER="EVENT_ENTER",BI.ShelterEditor.EVENT_RESTRICT="EVENT_RESTRICT",BI.ShelterEditor.EVENT_SPACE="EVENT_SPACE",BI.ShelterEditor.EVENT_EMPTY="EVENT_EMPTY",BI.shortcut("bi.shelter_editor",BI.ShelterEditor),BI.SignEditor=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.SignEditor.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-sign-editor",hgap:4,vgap:2,lgap:0,rgap:0,tgap:0,bgap:0,validationChecker:BI.emptyFn,quitChecker:BI.emptyFn,allowBlank:!0,watermark:"",errorText:"",height:24})},_init:function(){BI.SignEditor.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget({type:"bi.editor",height:o.height,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,value:o.value,validationChecker:o.validationChecker,quitChecker:o.quitChecker,allowBlank:o.allowBlank,watermark:o.watermark,errorText:o.errorText}),this.text=BI.createWidget({type:"bi.text_button",cls:"sign-editor-text",title:o.title,warningTitle:o.warningTitle,tipType:o.tipType,textAlign:"left",height:o.height,hgap:o.hgap,handler:function(){self._showInput(),self.editor.focus(),self.editor.selectAll()}}),this.text.on(BI.TextButton.EVENT_CHANGE,function(){BI.nextTick(function(){self.fireEvent(BI.SignEditor.EVENT_CLICK_LABEL)})}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.text,left:0,right:0,top:0,bottom:0}]}),this.editor.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editor.on(BI.Editor.EVENT_FOCUS,function(){self.fireEvent(BI.SignEditor.EVENT_FOCUS,arguments)}),this.editor.on(BI.Editor.EVENT_BLUR,function(){self.fireEvent(BI.SignEditor.EVENT_BLUR,arguments)}),this.editor.on(BI.Editor.EVENT_CLICK,function(){self.fireEvent(BI.SignEditor.EVENT_CLICK,arguments)}),this.editor.on(BI.Editor.EVENT_CHANGE,function(){self.fireEvent(BI.SignEditor.EVENT_CHANGE,arguments)}),this.editor.on(BI.Editor.EVENT_KEY_DOWN,function(v){self.fireEvent(BI.SignEditor.EVENT_KEY_DOWN,arguments)}),this.editor.on(BI.Editor.EVENT_VALID,function(){self.fireEvent(BI.SignEditor.EVENT_VALID,arguments)}),this.editor.on(BI.Editor.EVENT_CONFIRM,function(){self._showHint(),self._checkText(),self.fireEvent(BI.SignEditor.EVENT_CONFIRM,arguments)}),this.editor.on(BI.Editor.EVENT_CHANGE_CONFIRM,function(){self._showHint(),self._checkText(),self.fireEvent(BI.SignEditor.EVENT_CHANGE_CONFIRM,arguments)}),this.editor.on(BI.Editor.EVENT_START,function(){self.fireEvent(BI.SignEditor.EVENT_START,arguments)}),this.editor.on(BI.Editor.EVENT_PAUSE,function(){self.fireEvent(BI.SignEditor.EVENT_PAUSE,arguments)}),this.editor.on(BI.Editor.EVENT_STOP,function(){self.fireEvent(BI.SignEditor.EVENT_STOP,arguments)}),this.editor.on(BI.Editor.EVENT_SPACE,function(){self.fireEvent(BI.SignEditor.EVENT_SPACE,arguments)}),this.editor.on(BI.Editor.EVENT_ERROR,function(){self._checkText(),self.fireEvent(BI.SignEditor.EVENT_ERROR,arguments)}),this.editor.on(BI.Editor.EVENT_ENTER,function(){self.fireEvent(BI.SignEditor.EVENT_ENTER,arguments)}),this.editor.on(BI.Editor.EVENT_RESTRICT,function(){self.fireEvent(BI.SignEditor.EVENT_RESTRICT,arguments)}),this.editor.on(BI.Editor.EVENT_EMPTY,function(){self.fireEvent(BI.SignEditor.EVENT_EMPTY,arguments)}),BI.createWidget({type:"bi.vertical",scrolly:!1,element:this,items:[this.editor]}),this._showHint(),self._checkText()},_checkText:function(){var o=this.options;BI.nextTick(BI.bind(function(){""===this.editor.getValue()?(this.text.setValue(o.watermark||""),this.text.element.addClass("bi-water-mark")):(this.text.setValue(this.editor.getValue()),this.text.element.removeClass("bi-water-mark"),BI.isKey(o.keyword)&&this.text.doRedMark(o.keyword))},this))},_showInput:function(){this.editor.visible(),this.text.invisible()},_showHint:function(){this.editor.invisible(),this.text.visible()},setTitle:function(title){this.text.setTitle(title)},setWarningTitle:function(title){this.text.setWarningTitle(title)},setWaterMark:function(v){this.options.watermark=v,this.editor.setWaterMark(v)},focus:function(){this._showInput(),this.editor.focus()},blur:function(){this.editor.blur(),this._showHint(),this._checkText()},doRedMark:function(){""===this.editor.getValue()&&BI.isKey(this.options.watermark)||this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){""===this.editor.getValue()&&BI.isKey(this.options.watermark)||this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},isValid:function(){return this.editor.isValid()},setErrorText:function(text){this.editor.setErrorText(text)},getErrorText:function(){return this.editor.getErrorText()},isEditing:function(){return this.editor.isEditing()},getLastValidValue:function(){return this.editor.getLastValidValue()},getLastChangedValue:function(){return this.editor.getLastChangedValue()},setValue:function(k){this.editor.setValue(k),this._checkText()},getValue:function(){return this.editor.getValue()},getState:function(){return this.text.getValue()},setState:function(v){this._showHint(),this.text.setValue(v)}}),BI.SignEditor.EVENT_CHANGE="EVENT_CHANGE",BI.SignEditor.EVENT_FOCUS="EVENT_FOCUS",BI.SignEditor.EVENT_BLUR="EVENT_BLUR",BI.SignEditor.EVENT_CLICK="EVENT_CLICK",BI.SignEditor.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.SignEditor.EVENT_CLICK_LABEL="EVENT_CLICK_LABEL",BI.SignEditor.EVENT_START="EVENT_START",BI.SignEditor.EVENT_PAUSE="EVENT_PAUSE",BI.SignEditor.EVENT_STOP="EVENT_STOP",BI.SignEditor.EVENT_CONFIRM="EVENT_CONFIRM",BI.SignEditor.EVENT_CHANGE_CONFIRM="EVENT_CHANGE_CONFIRM",BI.SignEditor.EVENT_VALID="EVENT_VALID",BI.SignEditor.EVENT_ERROR="EVENT_ERROR",BI.SignEditor.EVENT_ENTER="EVENT_ENTER",BI.SignEditor.EVENT_RESTRICT="EVENT_RESTRICT",BI.SignEditor.EVENT_SPACE="EVENT_SPACE",BI.SignEditor.EVENT_EMPTY="EVENT_EMPTY",BI.shortcut("bi.sign_editor",BI.SignEditor),BI.StateEditor=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.StateEditor.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-state-editor",hgap:4,vgap:2,lgap:0,rgap:0,tgap:0,bgap:0,validationChecker:BI.emptyFn,quitChecker:BI.emptyFn,allowBlank:!0,watermark:"",errorText:"",height:24,defaultText:"",text:BI.i18nText("BI-Basic_Unrestricted")})},_init:function(){BI.StateEditor.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget({type:"bi.editor",height:o.height,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,value:o.value,validationChecker:o.validationChecker,quitChecker:o.quitChecker,allowBlank:o.allowBlank,watermark:o.watermark,errorText:o.errorText}),this.text=BI.createWidget({type:"bi.text_button",cls:"bi-water-mark tip-text-style",textAlign:"left",height:o.height,text:o.text,hgap:o.hgap,handler:function(){self._showInput(),self.editor.focus(),self.editor.setValue("")},title:BI.isNotNull(o.tipText)?o.tipText:function(){var title="";return BI.isString(self.stateValue)&&(title=self.stateValue),BI.isArray(self.stateValue)&&1===self.stateValue.length&&(title=self.stateValue[0]),title},warningTitle:o.warningTitle,tipType:o.tipType}),this.text.on(BI.TextButton.EVENT_CHANGE,function(){BI.nextTick(function(){self.fireEvent(BI.StateEditor.EVENT_CLICK_LABEL)})}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.text,left:0,right:0,top:0,bottom:0}]}),this.editor.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editor.on(BI.Editor.EVENT_FOCUS,function(){self.fireEvent(BI.StateEditor.EVENT_FOCUS,arguments)}),this.editor.on(BI.Editor.EVENT_BLUR,function(){self.fireEvent(BI.StateEditor.EVENT_BLUR,arguments)}),this.editor.on(BI.Editor.EVENT_CLICK,function(){self.fireEvent(BI.StateEditor.EVENT_CLICK,arguments)}),this.editor.on(BI.Editor.EVENT_CHANGE,function(){self.fireEvent(BI.StateEditor.EVENT_CHANGE,arguments)}),this.editor.on(BI.Editor.EVENT_KEY_DOWN,function(v){self.fireEvent(BI.StateEditor.EVENT_KEY_DOWN,arguments)}),this.editor.on(BI.Editor.EVENT_VALID,function(){self.fireEvent(BI.StateEditor.EVENT_VALID,arguments)}),this.editor.on(BI.Editor.EVENT_CONFIRM,function(){self._showHint(),self.fireEvent(BI.StateEditor.EVENT_CONFIRM,arguments)}),this.editor.on(BI.Editor.EVENT_CHANGE_CONFIRM,function(){self._showHint(),self.fireEvent(BI.StateEditor.EVENT_CHANGE_CONFIRM,arguments)}),this.editor.on(BI.Editor.EVENT_START,function(){self.fireEvent(BI.StateEditor.EVENT_START,arguments)}),this.editor.on(BI.Editor.EVENT_PAUSE,function(){self.fireEvent(BI.StateEditor.EVENT_PAUSE,arguments)}),this.editor.on(BI.Editor.EVENT_STOP,function(){self.fireEvent(BI.StateEditor.EVENT_STOP,arguments)}),this.editor.on(BI.Editor.EVENT_SPACE,function(){self.fireEvent(BI.StateEditor.EVENT_SPACE,arguments)}),this.editor.on(BI.Editor.EVENT_ERROR,function(){self.fireEvent(BI.StateEditor.EVENT_ERROR,arguments)}),this.editor.on(BI.Editor.EVENT_ENTER,function(){self.fireEvent(BI.StateEditor.EVENT_ENTER,arguments)}),this.editor.on(BI.Editor.EVENT_RESTRICT,function(){self.fireEvent(BI.StateEditor.EVENT_RESTRICT,arguments)}),this.editor.on(BI.Editor.EVENT_EMPTY,function(){self.fireEvent(BI.StateEditor.EVENT_EMPTY,arguments)}),BI.createWidget({type:"bi.vertical",scrolly:!1,element:this,items:[this.editor]}),this._showHint(),BI.isNotNull(o.text)&&this.setState(o.text)},setWaterMark:function(v){this.options.watermark=v,this.editor.setWaterMark(v)},doRedMark:function(){""===this.editor.getValue()&&BI.isKey(this.options.watermark)||this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){""===this.editor.getValue()&&BI.isKey(this.options.watermark)||this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},focus:function(){this.options.disabled===!1&&(this._showInput(),this.editor.focus())},blur:function(){this.editor.blur(),this._showHint()},_showInput:function(){this.editor.visible(),this.text.invisible()},_showHint:function(){this.editor.invisible(),this.text.visible()},isValid:function(){return this.editor.isValid()},setErrorText:function(text){this.editor.setErrorText(text)},getErrorText:function(){return this.editor.getErrorText()},isEditing:function(){return this.editor.isEditing()},getLastValidValue:function(){return this.editor.getLastValidValue()},getLastChangedValue:function(){return this.editor.getLastChangedValue()},setValue:function(k){this.editor.setValue(k)},getValue:function(){return this.editor.getValue()},getState:function(){return this.editor.getValue().match(/[^\s]+/g)},setState:function(v){var o=this.options;return BI.StateEditor.superclass.setValue.apply(this,arguments),this.stateValue=v,BI.isNumber(v)?void(v===BI.Selection.All?(this.text.setText(BI.i18nText("BI-Select_All")),this.text.element.removeClass("bi-water-mark")):v===BI.Selection.Multi?(this.text.setText(BI.i18nText("BI-Select_Part")),this.text.element.removeClass("bi-water-mark")):(this.text.setText(BI.isKey(o.defaultText)?o.defaultText:o.text),BI.isKey(o.defaultText)?this.text.element.addClass("bi-water-mark"):this.text.element.removeClass("bi-water-mark"))):BI.isString(v)?(this.text.setText(v),void(BI.isKey(o.defaultText)&&o.defaultText===v?this.text.element.addClass("bi-water-mark"):this.text.element.removeClass("bi-water-mark"))):void(BI.isArray(v)&&(BI.isEmpty(v)?(this.text.setText(BI.isKey(o.defaultText)?o.defaultText:o.text),BI.isKey(o.defaultText)?this.text.element.addClass("bi-water-mark"):this.text.element.removeClass("bi-water-mark")):1===v.length?(this.text.setText(v[0]),this.text.element.removeClass("bi-water-mark")):(this.text.setText(BI.i18nText("BI-Select_Part")),this.text.element.removeClass("bi-water-mark"))))},setTipType:function(v){this.text.options.tipType=v}}),BI.StateEditor.EVENT_CHANGE="EVENT_CHANGE",BI.StateEditor.EVENT_FOCUS="EVENT_FOCUS",BI.StateEditor.EVENT_BLUR="EVENT_BLUR",BI.StateEditor.EVENT_CLICK="EVENT_CLICK",BI.StateEditor.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.StateEditor.EVENT_CLICK_LABEL="EVENT_CLICK_LABEL",BI.StateEditor.EVENT_START="EVENT_START",BI.StateEditor.EVENT_PAUSE="EVENT_PAUSE",BI.StateEditor.EVENT_STOP="EVENT_STOP",BI.StateEditor.EVENT_CONFIRM="EVENT_CONFIRM",BI.StateEditor.EVENT_CHANGE_CONFIRM="EVENT_CHANGE_CONFIRM",BI.StateEditor.EVENT_VALID="EVENT_VALID",BI.StateEditor.EVENT_ERROR="EVENT_ERROR",BI.StateEditor.EVENT_ENTER="EVENT_ENTER",BI.StateEditor.EVENT_RESTRICT="EVENT_RESTRICT",BI.StateEditor.EVENT_SPACE="EVENT_SPACE",BI.StateEditor.EVENT_EMPTY="EVENT_EMPTY",BI.shortcut("bi.state_editor",BI.StateEditor),BI.SimpleStateEditor=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.SimpleStateEditor.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-simple-state-editor",hgap:4,vgap:2,lgap:0,rgap:0,tgap:0,bgap:0,validationChecker:BI.emptyFn,quitChecker:BI.emptyFn,mouseOut:!1,allowBlank:!0,watermark:"",errorText:"",height:24,text:BI.i18nText("BI-Basic_Unrestricted")})},_init:function(){BI.SimpleStateEditor.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget({type:"bi.editor",height:o.height,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,value:o.value,validationChecker:o.validationChecker,quitChecker:o.quitChecker,allowBlank:o.allowBlank,watermark:o.watermark,errorText:o.errorText}),this.text=BI.createWidget({type:"bi.text_button",cls:"bi-water-mark",textAlign:"left",text:o.text,height:o.height,hgap:o.hgap,handler:function(){self._showInput(),self.editor.focus(),self.editor.setValue("")}}),this.text.on(BI.TextButton.EVENT_CHANGE,function(){BI.nextTick(function(){self.fireEvent(BI.SimpleStateEditor.EVENT_CLICK_LABEL)})}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.text,left:0,right:0,top:0,bottom:0}]}),this.editor.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editor.on(BI.Editor.EVENT_FOCUS,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_FOCUS,arguments)}),this.editor.on(BI.Editor.EVENT_BLUR,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_BLUR,arguments)}),this.editor.on(BI.Editor.EVENT_CLICK,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_CLICK,arguments)}),this.editor.on(BI.Editor.EVENT_CHANGE,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_CHANGE,arguments)}),this.editor.on(BI.Editor.EVENT_KEY_DOWN,function(v){self.fireEvent(BI.SimpleStateEditor.EVENT_KEY_DOWN,arguments)}),this.editor.on(BI.Editor.EVENT_VALID,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_VALID,arguments)}),this.editor.on(BI.Editor.EVENT_CONFIRM,function(){self._showHint(),self.fireEvent(BI.SimpleStateEditor.EVENT_CONFIRM,arguments)}),this.editor.on(BI.Editor.EVENT_CHANGE_CONFIRM,function(){self._showHint(),self.fireEvent(BI.SimpleStateEditor.EVENT_CHANGE_CONFIRM,arguments)}),this.editor.on(BI.Editor.EVENT_START,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_START,arguments)}),this.editor.on(BI.Editor.EVENT_PAUSE,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_PAUSE,arguments)}),this.editor.on(BI.Editor.EVENT_STOP,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_STOP,arguments)}),this.editor.on(BI.Editor.EVENT_SPACE,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_SPACE,arguments)}),this.editor.on(BI.Editor.EVENT_ERROR,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_ERROR,arguments)}),this.editor.on(BI.Editor.EVENT_ENTER,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_ENTER,arguments)}),this.editor.on(BI.Editor.EVENT_RESTRICT,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_RESTRICT,arguments)}),this.editor.on(BI.Editor.EVENT_EMPTY,function(){self.fireEvent(BI.SimpleStateEditor.EVENT_EMPTY,arguments)}),BI.createWidget({type:"bi.vertical",scrolly:!1,element:this,items:[this.editor]}),this._showHint(),BI.isNotNull(o.text)&&this.setState(o.text)},setWaterMark:function(v){this.options.watermark=v,this.editor.setWaterMark(v)},doRedMark:function(){""===this.editor.getValue()&&BI.isKey(this.options.watermark)||this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){""===this.editor.getValue()&&BI.isKey(this.options.watermark)||this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},focus:function(){this._showInput(),this.editor.focus()},blur:function(){this.editor.blur(),this._showHint()},_showInput:function(){this.editor.visible(),this.text.invisible()},_showHint:function(){this.editor.invisible(),this.text.visible()},isValid:function(){return this.editor.isValid()},setErrorText:function(text){this.editor.setErrorText(text)},getErrorText:function(){return this.editor.getErrorText()},isEditing:function(){return this.editor.isEditing()},getLastValidValue:function(){return this.editor.getLastValidValue()},getLastChangedValue:function(){return this.editor.getLastChangedValue()},setValue:function(k){this.editor.setValue(k)},getValue:function(){return this.editor.getValue()},getState:function(){return this.editor.getValue().match(/[^\s]+/g)},setState:function(v){var o=this.options;return BI.SimpleStateEditor.superclass.setValue.apply(this,arguments),BI.isNumber(v)?void(v===BI.Selection.All?(this.text.setText(BI.i18nText("BI-Already_Selected")),this.text.element.removeClass("bi-water-mark")):v===BI.Selection.Multi?(this.text.setText(BI.i18nText("BI-Already_Selected")),this.text.element.removeClass("bi-water-mark")):(this.text.setText(o.text),this.text.element.addClass("bi-water-mark"))):void(BI.isArray(v)&&1!==v.length?BI.isEmpty(v)?(this.text.setText(o.text),this.text.element.addClass("bi-water-mark")):(this.text.setText(BI.i18nText("BI-Already_Selected")),this.text.element.removeClass("bi-water-mark")):(this.text.setText(v),this.text.setTitle(v),this.text.element.removeClass("bi-water-mark")))}}),BI.SimpleStateEditor.EVENT_CHANGE="EVENT_CHANGE",BI.SimpleStateEditor.EVENT_FOCUS="EVENT_FOCUS",BI.SimpleStateEditor.EVENT_BLUR="EVENT_BLUR",BI.SimpleStateEditor.EVENT_CLICK="EVENT_CLICK",BI.SimpleStateEditor.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.SimpleStateEditor.EVENT_CLICK_LABEL="EVENT_CLICK_LABEL",BI.SimpleStateEditor.EVENT_START="EVENT_START",BI.SimpleStateEditor.EVENT_PAUSE="EVENT_PAUSE",BI.SimpleStateEditor.EVENT_STOP="EVENT_STOP",BI.SimpleStateEditor.EVENT_CONFIRM="EVENT_CONFIRM",BI.SimpleStateEditor.EVENT_CHANGE_CONFIRM="EVENT_CHANGE_CONFIRM",BI.SimpleStateEditor.EVENT_VALID="EVENT_VALID",BI.SimpleStateEditor.EVENT_ERROR="EVENT_ERROR",BI.SimpleStateEditor.EVENT_ENTER="EVENT_ENTER",BI.SimpleStateEditor.EVENT_RESTRICT="EVENT_RESTRICT",BI.SimpleStateEditor.EVENT_SPACE="EVENT_SPACE",BI.SimpleStateEditor.EVENT_EMPTY="EVENT_EMPTY",BI.shortcut("bi.simple_state_editor",BI.SimpleStateEditor), +BI.MultiPopupView=BI.inherit(BI.PopupView,{_defaultConfig:function(){var conf=BI.MultiPopupView.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{_baseCls:(conf._baseCls||"")+" bi-multi-list-view",buttons:[BI.i18nText("BI-Basic_Sure")]})},_init:function(){BI.MultiPopupView.superclass._init.apply(this,arguments)},_createToolBar:function(){var o=this.options,self=this;if(0!==o.buttons.length){var text=[];return BI.each(o.buttons,function(idx,item){text.push({text:item,value:idx})}),this.buttongroup=BI.createWidget({type:"bi.button_group",cls:"list-view-toolbar bi-high-light bi-split-top",height:24,items:BI.createItems(text,{type:"bi.text_button",once:!1,shadow:!0,isShadowShowingOnSelected:!0}),layouts:[{type:"bi.center",hgap:0,vgap:0}]}),this.buttongroup.on(BI.ButtonGroup.EVENT_CHANGE,function(value,obj){self.fireEvent(BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON,value,obj)}),this.buttongroup}}}),BI.MultiPopupView.EVENT_CHANGE="EVENT_CHANGE",BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON="EVENT_CLICK_TOOLBAR_BUTTON",BI.shortcut("bi.multi_popup_view",BI.MultiPopupView),BI.PopupPanel=BI.inherit(BI.MultiPopupView,{_defaultConfig:function(){var conf=BI.PopupPanel.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-popup-panel",title:""})},_init:function(){BI.PopupPanel.superclass._init.apply(this,arguments)},_createTool:function(){var self=this,o=this.options,close=BI.createWidget({type:"bi.icon_button",cls:"close-h-font",width:25,height:25});return close.on(BI.IconButton.EVENT_CHANGE,function(){self.setVisible(!1),self.fireEvent(BI.PopupPanel.EVENT_CLOSE)}),BI.createWidget({type:"bi.htape",cls:"popup-panel-title bi-header-background",height:25,items:[{el:{type:"bi.label",textAlign:"left",text:o.title,height:25,lgap:10}},{el:close,width:25}]})}}),BI.PopupPanel.EVENT_CHANGE="EVENT_CHANGE",BI.PopupPanel.EVENT_CLOSE="EVENT_CLOSE",BI.PopupPanel.EVENT_CLICK_TOOLBAR_BUTTON="EVENT_CLICK_TOOLBAR_BUTTON",BI.shortcut("bi.popup_panel",BI.PopupPanel),BI.ListPane=BI.inherit(BI.Pane,{_defaultConfig:function(){var conf=BI.ListPane.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-list-pane",logic:{dynamic:!0},lgap:0,rgap:0,tgap:0,bgap:0,vgap:0,hgap:0,items:[],itemsCreator:BI.emptyFn,hasNext:BI.emptyFn,onLoaded:BI.emptyFn,el:{type:"bi.button_group"}})},_init:function(){BI.ListPane.superclass._init.apply(this,arguments);var self=this,o=this.options;this.button_group=BI.createWidget(o.el,{type:"bi.button_group",chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,behaviors:{},items:o.items,itemsCreator:function(op,calback){1===op.times&&(self.empty(),BI.nextTick(function(){self.loading()})),o.itemsCreator(op,function(){calback.apply(self,arguments),1===op.times&&BI.nextTick(function(){self.loaded(),self.check()})})},hasNext:o.hasNext,layouts:[{type:"bi.vertical"}]}),this.button_group.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.ListPane.EVENT_CHANGE,value,obj)}),this.check(),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Top),BI.extend({scrolly:!0,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,vgap:o.vgap,hgap:o.hgap},o.logic,{items:BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Top,this.button_group)}))))},hasPrev:function(){return this.button_group.hasPrev&&this.button_group.hasPrev()},hasNext:function(){return this.button_group.hasNext&&this.button_group.hasNext()},prependItems:function(items){this.options.items=items.concat(this.options.items),this.button_group.prependItems.apply(this.button_group,arguments),this.check()},addItems:function(items){this.options.items=this.options.items.concat(items),this.button_group.addItems.apply(this.button_group,arguments),this.check()},removeItemAt:function(indexes){indexes=indexes||[],BI.removeAt(this.options.items,indexes),this.button_group.removeItemAt.apply(this.button_group,arguments),this.check()},populate:function(items){var self=this,o=this.options;return 0===arguments.length&&BI.isFunction(this.button_group.attr("itemsCreator"))?void this.button_group.attr("itemsCreator").apply(this,[{times:1},function(){if(0===arguments.length)throw new Error("参数不能为空");self.populate.apply(self,arguments)}]):(BI.ListPane.superclass.populate.apply(this,arguments),void this.button_group.populate.apply(this.button_group,arguments))},empty:function(){this.button_group.empty()},setNotSelectedValue:function(){this.button_group.setNotSelectedValue.apply(this.button_group,arguments)},getNotSelectedValue:function(){return this.button_group.getNotSelectedValue()},setValue:function(){this.button_group.setValue.apply(this.button_group,arguments)},getValue:function(){return this.button_group.getValue.apply(this.button_group,arguments)},getAllButtons:function(){return this.button_group.getAllButtons()},getAllLeaves:function(){return this.button_group.getAllLeaves()},getSelectedButtons:function(){return this.button_group.getSelectedButtons()},getNotSelectedButtons:function(){return this.button_group.getNotSelectedButtons()},getIndexByValue:function(value){return this.button_group.getIndexByValue(value)},getNodeById:function(id){return this.button_group.getNodeById(id)},getNodeByValue:function(value){return this.button_group.getNodeByValue(value)}}),BI.ListPane.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.list_pane",BI.ListPane),BI.Panel=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.Panel.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-panel bi-border",title:"",titleButtons:[],el:{},logic:{dynamic:!1}})},_init:function(){BI.Panel.superclass._init.apply(this,arguments);var o=this.options;BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("vertical",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("top",this._createTitle(),this.options.el)}))))},_createTitle:function(){var self=this,o=this.options;return this.text=BI.createWidget({type:"bi.label",cls:"panel-title-text",text:o.title,height:30}),this.button_group=BI.createWidget({type:"bi.button_group",items:o.titleButtons,layouts:[{type:"bi.center_adapt",lgap:10}]}),this.button_group.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.button_group.on(BI.ButtonGroup.EVENT_CHANGE,function(value,obj){self.fireEvent(BI.Panel.EVENT_CHANGE,value,obj)}),{el:{type:"bi.left_right_vertical_adapt",cls:"panel-title bi-header-background bi-border-bottom",height:29,items:{left:[this.text],right:[this.button_group]},lhgap:10,rhgap:10},height:29}},setTitle:function(title){this.text.setValue(title)}}),BI.Panel.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.panel",BI.Panel),BI.LinearSegmentButton=BI.inherit(BI.BasicButton,{props:{extraCls:"bi-line-segment-button bi-list-item-effect",once:!0,readonly:!0,hgap:10,height:25},render:function(){var self=this,o=this.options;return[{type:"bi.label",text:o.text,height:o.height,value:o.value,hgap:o.hgap,ref:function(){self.text=this}},{type:"bi.absolute",items:[{el:{type:"bi.layout",cls:"line-segment-button-line",height:2,ref:function(){self.line=this}},left:0,right:0,bottom:0}]}]},setSelected:function(v){BI.LinearSegmentButton.superclass.setSelected.apply(this,arguments),v?this.line.element.addClass("bi-high-light-background"):this.line.element.removeClass("bi-high-light-background")},setText:function(text){this.text.setText(text)}}),BI.shortcut("bi.linear_segment_button",BI.LinearSegmentButton),BI.LinearSegment=BI.inherit(BI.Widget,{props:{baseCls:"bi-linear-segment bi-split-bottom",items:[],height:29},render:function(){var self=this,o=this.options;return{type:"bi.button_group",items:BI.createItems(o.items,{type:"bi.linear_segment_button",height:o.height-1}),layout:[{type:"bi.center"}],listeners:[{eventName:"__EVENT_CHANGE__",action:function(){self.fireEvent("__EVENT_CHANGE__",arguments)}},{eventName:"EVENT_CHANGE",action:function(){self.fireEvent("EVENT_CHANGE")}}],ref:function(){self.buttonGroup=this}}},setValue:function(v){this.buttonGroup.setValue(v)},setEnabledValue:function(v){this.buttonGroup.setEnabledValue(v)},getValue:function(){return this.buttonGroup.getValue()}}),BI.shortcut("bi.linear_segment",BI.LinearSegment),BI.SelectList=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SelectList.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-select-list",direction:BI.Direction.Top,logic:{dynamic:!0},items:[],itemsCreator:BI.emptyFn,hasNext:BI.emptyFn,onLoaded:BI.emptyFn,toolbar:{type:"bi.multi_select_bar",iconWrapperWidth:36},el:{type:"bi.list_pane"}})},_init:function(){BI.SelectList.superclass._init.apply(this,arguments);var self=this,o=this.options;this.toolbar=BI.createWidget(o.toolbar),this.allSelected=!1,this.toolbar.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){self.allSelected=this.isSelected(),type===BI.Events.CLICK&&(self.setAllSelected(self.allSelected),self.fireEvent(BI.SelectList.EVENT_CHANGE,value,obj)),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.list=BI.createWidget(o.el,{type:"bi.list_pane",items:o.items,itemsCreator:function(op,callback){1===op.times&&self.toolbar.setVisible(!1),o.itemsCreator(op,function(items){callback.apply(self,arguments),1===op.times&&(self.toolbar.setVisible(items&&items.length>0),self.toolbar.setEnable(self.isEnabled()&&items&&items.length>0)),self._checkAllSelected()})},onLoaded:o.onLoaded,hasNext:o.hasNext}),this.list.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){type===BI.Events.CLICK&&(self._checkAllSelected(),self.fireEvent(BI.SelectList.EVENT_CHANGE,value,obj)),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction),BI.extend({scrolly:!0},o.logic,{items:BI.LogicFactory.createLogicItemsByDirection(o.direction,this.toolbar,this.list)})))),o.items.length<=0&&(this.toolbar.setVisible(!1),this.toolbar.setEnable(!1)),BI.isNotNull(o.value)&&this.setValue(o.value)},_checkAllSelected:function(){var selectLength=this.list.getValue().length,notSelectLength=this.getAllLeaves().length-selectLength,hasNext=this.list.hasNext(),isAlreadyAllSelected=this.toolbar.isSelected(),isHalf=selectLength>0&&(notSelectLength>0||!isAlreadyAllSelected&&hasNext);isHalf=isHalf||notSelectLength>0&&hasNext&&isAlreadyAllSelected,this.toolbar.setHalfSelected(isHalf),!isHalf&&this.toolbar.setSelected(selectLength>0&¬SelectLength<=0&&(!hasNext||isAlreadyAllSelected))},setAllSelected:function(v){BI.each(this.getAllButtons(),function(i,btn){(btn.setSelected||btn.setAllSelected).apply(btn,[v])}),this.allSelected=!!v,this.toolbar.setSelected(v),this.toolbar.setHalfSelected(!1)},setToolBarVisible:function(b){this.toolbar.setVisible(b)},isAllSelected:function(){return this.allSelected},hasPrev:function(){return this.list.hasPrev()},hasNext:function(){return this.list.hasNext()},prependItems:function(items){this.list.prependItems.apply(this.list,arguments)},addItems:function(items){this.list.addItems.apply(this.list,arguments)},setValue:function(data){var selectAll=data.type===BI.ButtonGroup.CHOOSE_TYPE_ALL;this.setAllSelected(selectAll),this.list[selectAll?"setNotSelectedValue":"setValue"](data.value),this._checkAllSelected()},getValue:function(){return this.isAllSelected()===!1?{type:BI.ButtonGroup.CHOOSE_TYPE_MULTI,value:this.list.getValue(),assist:this.list.getNotSelectedValue()}:{type:BI.ButtonGroup.CHOOSE_TYPE_ALL,value:this.list.getNotSelectedValue(),assist:this.list.getValue()}},empty:function(){this.list.empty()},populate:function(items){this.toolbar.setVisible(!BI.isEmptyArray(items)),this.toolbar.setEnable(this.isEnabled()&&!BI.isEmptyArray(items)),this.list.populate.apply(this.list,arguments),this._checkAllSelected()},_setEnable:function(enable){BI.SelectList.superclass._setEnable.apply(this,arguments),this.toolbar.setEnable(enable)},resetHeight:function(h){var toolHeight=(this.toolbar.element.outerHeight()||25)*(this.toolbar.isVisible()?1:0);this.list.resetHeight?this.list.resetHeight(h-toolHeight):this.list.element.css({"max-height":h-toolHeight+"px"})},setNotSelectedValue:function(){this.list.setNotSelectedValue.apply(this.list,arguments),this._checkAllSelected()},getNotSelectedValue:function(){return this.list.getNotSelectedValue()},getAllButtons:function(){return this.list.getAllButtons()},getAllLeaves:function(){return this.list.getAllLeaves()},getSelectedButtons:function(){return this.list.getSelectedButtons()},getNotSelectedButtons:function(){return this.list.getNotSelectedButtons()},getIndexByValue:function(value){return this.list.getIndexByValue(value)},getNodeById:function(id){return this.list.getNodeById(id)},getNodeByValue:function(value){return this.list.getNodeByValue(value)}}),BI.SelectList.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.select_list",BI.SelectList),BI.LazyLoader=BI.inherit(BI.Widget,{_const:{PAGE:100},_defaultConfig:function(){return BI.extend(BI.LazyLoader.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-lazy-loader",el:{}})},_init:function(){var self=this,o=this.options;BI.LazyLoader.superclass._init.apply(this,arguments);var all=o.items.length;this.loader=BI.createWidget({type:"bi.loader",element:this,el:o.el,itemsCreator:function(options,populate){populate(self._getNextItems(options))},hasNext:function(option){return option.count=1),this.setPagerVisible(v>1)},setValue:function(v){this.pager.setValue(v)},setVPage:function(v){this.pager.setValue(v)},setCount:function(count){this.rowCount.setText(count),this.rowCount.setTitle(count)},getCurrentPage:function(){return this.pager.getCurrentPage()},hasPrev:function(){return this.pager.hasPrev()},hasNext:function(){return this.pager.hasNext()},setPagerVisible:function(b){this.editor.setVisible(b),this.allPages.setVisible(b),this.pager.setVisible(b)},populate:function(){this.pager.populate(),this.setPagerVisible(this.options.pages>1)}}),BI.AllCountPager.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.all_count_pager",BI.AllCountPager),BI.DirectionPager=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.DirectionPager.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-direction-pager",height:24,horizontal:{pages:!1,curr:1,hasPrev:BI.emptyFn,hasNext:BI.emptyFn,firstPage:1,lastPage:BI.emptyFn},vertical:{pages:!1,curr:1,hasPrev:BI.emptyFn,hasNext:BI.emptyFn,firstPage:1,lastPage:BI.emptyFn}})},_init:function(){BI.DirectionPager.superclass._init.apply(this,arguments);var self=this,o=this.options,v=o.vertical,h=o.horizontal;this._createVPager(),this._createHPager(),this.layout=BI.createWidget({type:"bi.absolute",scrollable:!1,element:this,items:[{el:this.vpager,top:0,right:86},{el:this.vlabel,top:0,right:110},{el:this.hpager,top:0,right:0},{el:this.hlabel,top:0,right:24}]})},_createVPager:function(){var self=this,o=this.options,v=o.vertical;this.vlabel=BI.createWidget({type:"bi.label",width:24,height:24,value:v.curr,title:v.curr,invisible:!0}),this.vpager=BI.createWidget({type:"bi.pager",width:72,layouts:[{type:"bi.horizontal",scrollx:!1,rgap:24}],invisible:!0,dynamicShow:!1,pages:v.pages,curr:v.curr,groups:0,first:!1,last:!1,prev:{type:"bi.icon_button",value:"prev",title:BI.i18nText("BI-Up_Page"),warningTitle:BI.i18nText("BI-Current_Is_First_Page"),height:22,width:22,cls:"bi-border bi-border-radius direction-pager-prev column-pre-page-h-font bi-list-item-select2"},next:{type:"bi.icon_button",value:"next",title:BI.i18nText("BI-Down_Page"),warningTitle:BI.i18nText("BI-Current_Is_Last_Page"),height:22,width:22,cls:"bi-border bi-border-radius direction-pager-next column-next-page-h-font bi-list-item-select2"},hasPrev:v.hasPrev,hasNext:v.hasNext,firstPage:v.firstPage,lastPage:v.lastPage}),this.vpager.on(BI.Pager.EVENT_CHANGE,function(){self.fireEvent(BI.DirectionPager.EVENT_CHANGE)}),this.vpager.on(BI.Pager.EVENT_AFTER_POPULATE,function(){self.vlabel.setValue(this.getCurrentPage()),self.vlabel.setTitle(this.getCurrentPage())})},_createHPager:function(){var self=this,o=this.options,h=o.horizontal;this.hlabel=BI.createWidget({type:"bi.label",width:24,height:24,value:h.curr,title:h.curr,invisible:!0}),this.hpager=BI.createWidget({type:"bi.pager",width:72,layouts:[{type:"bi.horizontal",scrollx:!1,rgap:24}],invisible:!0,dynamicShow:!1,pages:h.pages,curr:h.curr,groups:0,first:!1,last:!1,prev:{type:"bi.icon_button",value:"prev",title:BI.i18nText("BI-Left_Page"),warningTitle:BI.i18nText("BI-Current_Is_First_Page"),height:22,width:22,cls:"bi-border bi-border-radius direction-pager-prev row-pre-page-h-font bi-list-item-select2"},next:{type:"bi.icon_button",value:"next",title:BI.i18nText("BI-Right_Page"),warningTitle:BI.i18nText("BI-Current_Is_Last_Page"),height:22,width:22,cls:"bi-border bi-border-radius direction-pager-next row-next-page-h-font bi-list-item-select2"},hasPrev:h.hasPrev,hasNext:h.hasNext,firstPage:h.firstPage,lastPage:h.lastPage}),this.hpager.on(BI.Pager.EVENT_CHANGE,function(){self.fireEvent(BI.DirectionPager.EVENT_CHANGE)}),this.hpager.on(BI.Pager.EVENT_AFTER_POPULATE,function(){self.hlabel.setValue(this.getCurrentPage()),self.hlabel.setTitle(this.getCurrentPage())})},getVPage:function(){return this.vpager.getCurrentPage()},getHPage:function(){return this.hpager.getCurrentPage()},setVPage:function(v){this.vpager.setValue(v),this.vlabel.setValue(v),this.vlabel.setTitle(v)},setHPage:function(v){this.hpager.setValue(v),this.hlabel.setValue(v),this.hlabel.setTitle(v)},hasVNext:function(){return this.vpager.hasNext()},hasHNext:function(){return this.hpager.hasNext()},hasVPrev:function(){return this.vpager.hasPrev()},hasHPrev:function(){return this.hpager.hasPrev()},setHPagerVisible:function(b){this.hpager.setVisible(b),this.hlabel.setVisible(b)},setVPagerVisible:function(b){this.vpager.setVisible(b),this.vlabel.setVisible(b)},populate:function(){this.vpager.populate(),this.hpager.populate();var vShow=!1,hShow=!1;this.hasHNext()||this.hasHPrev()?(this.setHPagerVisible(!0),hShow=!0):this.setHPagerVisible(!1),this.hasVNext()||this.hasVPrev()?(this.setVPagerVisible(!0),vShow=!0):this.setVPagerVisible(!1),this.setVisible(hShow||vShow);var num=[86,110,0,24],items=this.layout.attr("items");vShow===!0&&hShow===!0?(items[0].right=num[0],items[1].right=num[1],items[2].right=num[2],items[3].right=num[3]):vShow===!0?(items[0].right=num[2],items[1].right=num[3]):hShow===!0&&(items[2].right=num[2],items[3].right=num[3]),this.layout.attr("items",items),this.layout.resize()},clear:function(){this.vpager.attr("curr",1),this.hpager.attr("curr",1)}}),BI.DirectionPager.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.direction_pager",BI.DirectionPager),BI.DetailPager=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.DetailPager.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-detail-pager",behaviors:{},layouts:[{type:"bi.horizontal",hgap:10,vgap:0}],dynamicShow:!0,dynamicShowFirstLast:!1,dynamicShowPrevNext:!1,pages:!1,curr:function(){return 1},groups:0,jump:BI.emptyFn,first:!1,last:!1,prev:"上一页",next:"下一页",firstPage:1,lastPage:function(){return 1},hasPrev:BI.emptyFn,hasNext:BI.emptyFn})},_init:function(){BI.DetailPager.superclass._init.apply(this,arguments);var self=this;this.currPage=BI.result(this.options,"curr"),this._lock=!1,this._debouce=BI.debounce(function(){self._lock=!1},300),this._populate()},_populate:function(){var self=this,o=this.options,view=[],dict={};this.empty();var pages=BI.result(o,"pages"),curr=BI.result(this,"currPage"),groups=BI.result(o,"groups"),first=BI.result(o,"first"),last=BI.result(o,"last"),prev=BI.result(o,"prev"),next=BI.result(o,"next");pages===!1?(groups=0,first=!1,last=!1):groups>pages&&(groups=pages),dict.index=Math.ceil((curr+(groups>1&&groups!==pages?1:0))/(0===groups?1:groups)),(!o.dynamicShow&&!o.dynamicShowPrevNext||curr>1)&&prev!==!1&&(BI.isKey(prev)?view.push({text:prev,value:"prev",disabled:pages===!1?o.hasPrev(curr)===!1:!(curr>1&&prev!==!1)}):view.push(BI.extend({disabled:pages===!1?o.hasPrev(curr)===!1:!(curr>1&&prev!==!1)},prev))),(!o.dynamicShow&&!o.dynamicShowFirstLast||dict.index>1&&0!==groups)&&first&&(view.push({text:first,value:"first",disabled:!(dict.index>1&&0!==groups)}),dict.index>1&&0!==groups&&view.push({type:"bi.label",cls:"page-ellipsis",text:"…"})),dict.poor=Math.floor((groups-1)/2),dict.start=dict.index>1?curr-dict.poor:1,dict.end=dict.index>1?function(){var max=curr+(groups-dict.poor-1);return max>pages?pages:max}():groups,dict.end-dict.start1&&0!==groups&&pages>groups&&dict.endgroups&&dict.endgroups&&dict.endgroups&&dict.end1},hasNext:function(v){v||(v=1);var o=this.options,pages=this.options.pages;return pages===!1?o.hasNext(v):vlastPage?lastPage:(firstPage=BI.result(o,"firstPage"),vo.pages?o.pages:v,this.currPage=v;this._populate()},getValue:function(){var val=this.button_group.getValue()[0];switch(val){case"prev":return-1;case"next":return 1;case"first":return BI.MIN;case"last":return BI.MAX;default:return val}},attr:function(key,value){BI.DetailPager.superclass.attr.apply(this,arguments),"curr"===key&&(this.currPage=BI.result(this.options,"curr"))},populate:function(){this._populate()}}),BI.DetailPager.EVENT_CHANGE="EVENT_CHANGE",BI.DetailPager.EVENT_AFTER_POPULATE="EVENT_AFTER_POPULATE",BI.shortcut("bi.detail_pager",BI.DetailPager),BI.SegmentButton=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.SegmentButton.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-segment-button bi-list-item-select",shadow:!0,readonly:!0,hgap:5})},_init:function(){BI.SegmentButton.superclass._init.apply(this,arguments);var opts=this.options,self=this;this.text=BI.createWidget({type:"bi.label",element:this,textHeight:opts.height,whiteSpace:opts.whiteSpace,text:opts.text,value:opts.value,hgap:opts.hgap})},setSelected:function(){BI.SegmentButton.superclass.setSelected.apply(this,arguments)},setText:function(text){BI.SegmentButton.superclass.setText.apply(this,arguments),this.text.setText(text)},destroy:function(){BI.SegmentButton.superclass.destroy.apply(this,arguments)}}),BI.shortcut("bi.segment_button",BI.SegmentButton),BI.Segment=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.Segment.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-segment",items:[],height:24})},_init:function(){BI.Segment.superclass._init.apply(this,arguments);var self=this,o=this.options;this.buttonGroup=BI.createWidget({element:this,type:"bi.button_group",value:o.value,items:BI.createItems(o.items,{type:"bi.segment_button",height:o.height-2,whiteSpace:o.whiteSpace}),layout:[{type:"bi.center"}]}),this.buttonGroup.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.buttonGroup.on(BI.ButtonGroup.EVENT_CHANGE,function(value,obj){self.fireEvent(BI.Segment.EVENT_CHANGE,value,obj)})},_setEnable:function(enable){BI.Segment.superclass._setEnable.apply(this,arguments),enable===!0?this.element.removeClass("base-disabled disabled"):enable===!1&&this.element.addClass("base-disabled disabled")},setValue:function(v){this.buttonGroup.setValue(v)},setEnabledValue:function(v){this.buttonGroup.setEnabledValue(v)},getValue:function(){return this.buttonGroup.getValue()}}),BI.Segment.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.segment",BI.Segment),BI.MultiSelectBar=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.MultiSelectBar.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-multi-select-bar",height:25,text:BI.i18nText("BI-Select_All"),isAllCheckedBySelectedValue:BI.emptyFn,disableSelected:!0,isHalfCheckedBySelectedValue:function(selectedValues){return selectedValues.length>0},halfSelected:!1,iconWrapperWidth:26})},_init:function(){BI.MultiSelectBar.superclass._init.apply(this,arguments);var self=this,o=this.options,isSelect=o.selected===!0,isHalfSelect=!o.selected&&o.halfSelected;this.checkbox=BI.createWidget({type:"bi.checkbox",stopPropagation:!0,handler:function(){self.setSelected(self.isSelected())},selected:isSelect,invisible:isHalfSelect}),this.half=BI.createWidget({type:"bi.half_icon_button",stopPropagation:!0,handler:function(){self.setSelected(!0)},invisible:isSelect||!isHalfSelect}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.CLICK,self.isSelected(),self)}),this.checkbox.on(BI.Checkbox.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectBar.EVENT_CHANGE,self.isSelected(),self)}),this.half.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.CLICK,self.isSelected(),self)}),this.half.on(BI.HalfIconButton.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectBar.EVENT_CHANGE,self.isSelected(),self)}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,keyword:o.keyword,value:o.value,py:o.py}),BI.createWidget({type:"bi.htape",element:this,items:[{width:o.iconWrapperWidth,el:{type:"bi.center_adapt",items:[this.checkbox,this.half]}},{el:this.text}]})},_setSelected:function(v){this.checkbox.setSelected(!!v)},beforeClick:function(){var isHalf=this.isHalfSelected(),isSelected=this.isSelected();isHalf===!0?this.setSelected(!0):this.setSelected(!isSelected)},setSelected:function(v){this.checkbox.setSelected(v),this.setHalfSelected(!1)},setHalfSelected:function(b){this.halfSelected=!!b,b===!0?(this.checkbox.setSelected(!1),this.half.visible(),this.checkbox.invisible()):(this.half.invisible(),this.checkbox.visible())},isHalfSelected:function(){return!this.isSelected()&&!!this.halfSelected},isSelected:function(){return this.checkbox.isSelected()},setValue:function(selectedValues){BI.MultiSelectBar.superclass.setValue.apply(this,arguments);var isAllChecked=this.options.isAllCheckedBySelectedValue.apply(this,arguments);this._setSelected(isAllChecked),!isAllChecked&&this.setHalfSelected(this.options.isHalfCheckedBySelectedValue.apply(this,arguments))},doClick:function(){BI.MultiSelectBar.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.MultiSelectBar.EVENT_CHANGE,this.isSelected(),this)}}),BI.MultiSelectBar.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_select_bar",BI.MultiSelectBar),BI.LevelTree=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.LevelTree.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-level-tree",el:{chooseType:0},expander:{},items:[],value:""})},_init:function(){BI.LevelTree.superclass._init.apply(this,arguments),this.initTree(this.options.items)},_formatItems:function(nodes,layer,pNode){var self=this;return BI.each(nodes,function(i,node){var extend={layer:layer};BI.isKey(node.id)||(node.id=BI.UUID()),extend.pNode=pNode,node.isParent===!0||node.parent===!0||BI.isNotEmptyArray(node.children)?(extend.type="bi.mid_plus_group_node",i===nodes.length-1&&(extend.type="bi.last_plus_group_node",extend.isLastNode=!0),0!==i||pNode||(extend.type="bi.first_plus_group_node"),0===i&&i===nodes.length-1&&(extend.type="bi.plus_group_node"),BI.defaults(node,extend),self._formatItems(node.children,layer+1,node)):(extend.type="bi.mid_tree_leaf_item",0!==i||pNode||(extend.type="bi.first_tree_leaf_item"),i===nodes.length-1&&(extend.type="bi.last_tree_leaf_item"),BI.defaults(node,extend))}),nodes},_assertId:function(sNodes){BI.each(sNodes,function(i,node){BI.isKey(node.id)||(node.id=BI.UUID())})},initTree:function(nodes){var self=this,o=this.options;this.empty(),this._assertId(nodes),this.tree=BI.createWidget({type:"bi.custom_tree",element:this,expander:BI.extend({el:{},popup:{type:"bi.custom_tree"}},o.expander),items:this._formatItems(BI.Tree.transformToTreeFormat(nodes),0),value:o.value,el:BI.extend({type:"bi.button_tree",chooseType:0,layouts:[{type:"bi.vertical"}]},o.el)}),this.tree.on(BI.Controller.EVENT_CHANGE,function(type,value,ob){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.LevelTree.EVENT_CHANGE,value,ob)})},stroke:function(nodes){this.tree.stroke.apply(this.tree,arguments)},populate:function(items,keyword){items=this._formatItems(BI.Tree.transformToTreeFormat(items),0),this.tree.populate(items,keyword)},setValue:function(v){this.tree.setValue(v)},getValue:function(){return this.tree.getValue()},getAllLeaves:function(){return this.tree.getAllLeaves()},getNodeById:function(id){return this.tree.getNodeById(id)},getNodeByValue:function(id){return this.tree.getNodeByValue(id)}}),BI.LevelTree.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.level_tree",BI.LevelTree),BI.DisplayTree=BI.inherit(BI.TreeView,{_defaultConfig:function(){return BI.extend(BI.DisplayTree.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-display-tree"})},_init:function(){BI.DisplayTree.superclass._init.apply(this,arguments)},_configSetting:function(){function beforeCollapse(treeId,treeNode){return!1}var setting={view:{selectedMulti:!1,dblClickExpand:!1,showIcon:!1,nameIsHTML:!0,showTitle:!1},data:{key:{title:"title",name:"text"},simpleData:{enable:!0}},callback:{beforeCollapse:beforeCollapse}};return setting},_dealWidthNodes:function(nodes){nodes=BI.DisplayTree.superclass._dealWidthNodes.apply(this,arguments);var self=this,o=this.options;return BI.each(nodes,function(i,node){node.isParent=node.isParent||node.parent,null==node.text&&node.count>0&&(node.text=node.value+"("+BI.i18nText("BI-Basic_Altogether")+node.count+BI.i18nText("BI-Basic_Count")+")")}),nodes},initTree:function(nodes,setting){var setting=setting||this._configSetting();this.nodes=BI.$.fn.zTree.init(this.tree.element,setting,nodes)},destroy:function(){BI.DisplayTree.superclass.destroy.apply(this,arguments)}}),BI.DisplayTree.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.display_tree",BI.DisplayTree),BI.ListDisplayTree=BI.inherit(BI.ListTreeView,{_defaultConfig:function(){return BI.extend(BI.ListDisplayTree.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-list-display-tree"})},_init:function(){BI.ListDisplayTree.superclass._init.apply(this,arguments)},_configSetting:function(){function beforeCollapse(treeId,treeNode){return!1}function getFont(treeId,node){return node.isLeaf?{}:{color:"#999999"}}var setting={view:{selectedMulti:!1,dblClickExpand:!1,showIcon:!1,nameIsHTML:!0,showTitle:!1,fontCss:getFont},data:{key:{title:"title",name:"text"},simpleData:{enable:!0}},callback:{beforeCollapse:beforeCollapse}};return setting},_dealWidthNodes:function(nodes){nodes=BI.ListDisplayTree.superclass._dealWidthNodes.apply(this,arguments);var self=this,o=this.options;return BI.each(nodes,function(i,node){node.isParent=node.isParent||node.parent,null==node.text&&node.count>0&&(node.text=node.value+"("+BI.i18nText("BI-Basic_Altogether")+node.count+BI.i18nText("BI-Basic_Count")+")")}),nodes},initTree:function(nodes,setting){var setting=setting||this._configSetting();this.nodes=BI.$.fn.zTree.init(this.tree.element,setting,nodes)},destroy:function(){BI.ListDisplayTree.superclass.destroy.apply(this,arguments)}}),BI.ListDisplayTree.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.list_display_tree",BI.ListDisplayTree),BI.SimpleTreeView=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SimpleTreeView.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-simple-tree",itemsCreator:BI.emptyFn,items:null})},_init:function(){BI.SimpleTreeView.superclass._init.apply(this,arguments);var self=this,o=this.options;this.structure=new BI.Tree,this.tree=BI.createWidget({type:"bi.tree_view",element:this,itemsCreator:function(op,callback){var fn=function(items){callback({items:items}),self.structure.initTree(BI.Tree.transformToTreeFormat(items))};BI.isNotNull(o.items)?fn(o.items):o.itemsCreator(op,fn)}}),this.tree.on(BI.TreeView.EVENT_CHANGE,function(){self.fireEvent(BI.SimpleTreeView.EVENT_CHANGE,arguments)}),BI.isNotEmptyArray(o.items)&&this.populate(),BI.isNotNull(o.value)&&this.setValue(o.value)},populate:function(items,keyword){items&&(this.options.items=items),this.tree.stroke({keyword:keyword})},_digest:function(v){v||(v=[]);var self=this,map={},selected=[];return BI.each(v,function(i,val){var node=self.structure.search(val,"value");if(node){var p=node;for(p=p.getParent(),p&&(map[p.value]||(map[p.value]=0),map[p.value]++);p&&p.getChildrenLength()<=map[p.value];)selected.push(p.value),p=p.getParent(),p&&(map[p.value]||(map[p.value]=0),map[p.value]++)}}),BI.makeObject(v.concat(selected))},setValue:function(v){this.tree.setValue(this._digest(v))},_getValue:function(){var self=this,result=[],val=this.tree.getValue(),track=function(nodes){BI.each(nodes,function(key,node){BI.isEmpty(node)?result.push(key):track(node)})};return track(val),result},empty:function(){this.tree.empty()},getValue:function(){var self=this,result=[],val=this._getValue();return BI.each(val,function(i,key){var target=self.structure.search(key,"value");target&&self.structure._traverse(target,function(node){node.isLeaf()&&result.push(node.value)})}),result}}),BI.SimpleTreeView.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.simple_tree",BI.SimpleTreeView),BI.EditorTrigger=BI.inherit(BI.Trigger,{_const:{hgap:4},_defaultConfig:function(){var conf=BI.EditorTrigger.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-editor-trigger bi-border",height:24,validationChecker:BI.emptyFn,quitChecker:BI.emptyFn,allowBlank:!1,watermark:"",errorText:""})},_init:function(){this.options.height-=2,BI.EditorTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options,c=this._const;this.editor=BI.createWidget({type:"bi.sign_editor",height:o.height,value:o.value,validationChecker:o.validationChecker,quitChecker:o.quitChecker,allowBlank:o.allowBlank,watermark:o.watermark,errorText:o.errorText,title:function(){return self.getValue()}}),this.editor.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editor.on(BI.SignEditor.EVENT_CHANGE,function(){self.fireEvent(BI.EditorTrigger.EVENT_CHANGE,arguments)}),BI.createWidget({element:this,type:"bi.htape",items:[{el:this.editor},{el:{type:"bi.trigger_icon_button",width:o.triggerWidth||o.height},width:o.triggerWidth||o.height}]})},getValue:function(){return this.editor.getValue()},setValue:function(value){this.editor.setValue(value)},setText:function(text){this.editor.setState(text)}}),BI.EditorTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.editor_trigger",BI.EditorTrigger),BI.IconTrigger=BI.inherit(BI.Trigger,{_defaultConfig:function(){return BI.extend(BI.IconTrigger.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-icon-trigger",extraCls:"pull-down-font",el:{},height:24})},_init:function(){var o=this.options;BI.IconTrigger.superclass._init.apply(this,arguments),this.iconButton=BI.createWidget(o.el,{type:"bi.trigger_icon_button",element:this,width:o.width,height:o.height,extraCls:o.extraCls})}}),BI.shortcut("bi.icon_trigger",BI.IconTrigger),BI.IconTextTrigger=BI.inherit(BI.Trigger,{_const:{hgap:4},_defaultConfig:function(){var conf=BI.IconTextTrigger.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-text-trigger",height:24,iconHeight:null,iconWidth:null,textCls:""})},_init:function(){BI.IconTextTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options,c=this._const;this.text=BI.createWidget({type:"bi.label",cls:"select-text-label"+(BI.isKey(o.textCls)?" "+o.textCls:""),textAlign:"left",height:o.height,text:o.text}),this.trigerButton=BI.createWidget({type:"bi.trigger_icon_button",width:o.triggerWidth||o.height}),BI.createWidget({element:this,type:"bi.htape",ref:function(_ref){self.wrapper=_ref},items:[{el:{type:"bi.icon_change_button",cls:"icon-combo-trigger-icon",iconCls:o.iconCls,ref:function(_ref){self.icon=_ref},iconHeight:o.iconHeight,iconWidth:o.iconWidth,disableSelected:!0},width:BI.isEmptyString(o.iconCls)?0:o.iconWrapperWidth||o.height},{el:this.text,lgap:BI.isEmptyString(o.iconCls)?5:0},{el:this.trigerButton,width:o.triggerWidth||o.height}]})},setValue:function(value){this.text.setValue(value)},setIcon:function(iconCls){var o=this.options;this.icon.setIcon(iconCls);var iconItem=this.wrapper.attr("items")[0],textItem=this.wrapper.attr("items")[1];BI.isNull(iconCls)||BI.isEmptyString(iconCls)?0!==iconItem.width&&(iconItem.width=0,textItem.lgap=5,this.wrapper.resize()):iconItem.width!==(o.iconWrapperWidth||o.height)&&(iconItem.width=o.iconWrapperWidth||o.height,textItem.lgap=0,this.wrapper.resize())},setTextCls:function(cls){var o=this.options,oldCls=o.textCls;o.textCls=cls,this.text.element.removeClass(oldCls).addClass(cls)},setText:function(text){this.text.setText(text)}}),BI.shortcut("bi.icon_text_trigger",BI.IconTextTrigger),BI.SelectIconTextTrigger=BI.inherit(BI.Trigger,{_defaultConfig:function(){return BI.extend(BI.SelectIconTextTrigger.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-select-text-trigger bi-border",height:24,iconHeight:null,iconWidth:null,iconCls:""})},_init:function(){this.options.height-=2,BI.SelectIconTextTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options,obj=this._digist(o.value,o.items);this.trigger=BI.createWidget({type:"bi.icon_text_trigger",element:this,text:obj.text,textCls:obj.textCls,iconCls:obj.iconCls,height:o.height,iconHeight:o.iconHeight,iconWidth:o.iconWidth,iconWrapperWidth:o.iconWrapperWidth})},_digist:function(vals,items){var o=this.options;vals=BI.isArray(vals)?vals:[vals];var result,formatItems=BI.Tree.transformToArrayFormat(items);return BI.any(formatItems,function(i,item){if(BI.deepContains(vals,item.value))return result={text:item.text||item.value,iconCls:item.iconCls},!0}),BI.isNotNull(result)?{text:result.text,textCls:"",iconCls:result.iconCls}:{text:BI.isFunction(o.text)?o.text():o.text,textCls:"bi-water-mark",iconCls:o.iconCls}},setValue:function(vals){var obj=this._digist(vals,this.options.items);this.trigger.setText(obj.text),this.trigger.setIcon(obj.iconCls),this.trigger.setTextCls(obj.textCls)},populate:function(items){this.options.items=items}}),BI.shortcut("bi.select_icon_text_trigger",BI.SelectIconTextTrigger),BI.TextTrigger=BI.inherit(BI.Trigger,{_const:{hgap:4},_defaultConfig:function(){var conf=BI.TextTrigger.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-text-trigger",height:24,textCls:""})},_init:function(){BI.TextTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options,c=this._const;this.text=BI.createWidget({type:"bi.label",cls:"select-text-label"+(BI.isKey(o.textCls)?" "+o.textCls:""),textAlign:"left",height:o.height,text:o.text,title:function(){return self.text.getText()},tipType:o.tipType,warningTitle:o.warningTitle,hgap:c.hgap,readonly:o.readonly}),this.trigerButton=BI.createWidget({type:"bi.trigger_icon_button",width:o.triggerWidth||o.height}),BI.createWidget({element:this,type:"bi.htape",items:[{el:this.text},{el:this.trigerButton,width:o.triggerWidth||o.height}]})},setTextCls:function(cls){var o=this.options,oldCls=o.textCls;o.textCls=cls,this.text.element.removeClass(oldCls).addClass(cls)},setText:function(text){this.text.setText(text)},setTipType:function(v){this.text.options.tipType=v}}),BI.shortcut("bi.text_trigger",BI.TextTrigger),BI.SelectTextTrigger=BI.inherit(BI.Trigger,{_defaultConfig:function(){return BI.extend(BI.SelectTextTrigger.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-select-text-trigger bi-border bi-focus-shadow",height:24})},_init:function(){this.options.height-=2,BI.SelectTextTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options,obj=this._digest(o.value,o.items);this.trigger=BI.createWidget({type:"bi.text_trigger",element:this,height:o.height,readonly:o.readonly,text:obj.text,textCls:obj.textCls,tipType:o.tipType,warningTitle:o.warningTitle})},_digest:function(vals,items){var o=this.options;vals=BI.isArray(vals)?vals:[vals];var result=[],formatItems=BI.Tree.transformToArrayFormat(items);return BI.each(formatItems,function(i,item){BI.deepContains(vals,item.value)&&!BI.contains(result,item.text||item.value)&&result.push(item.text||item.value)}),result.length>0?{textCls:"",text:result.join(",")}:{textCls:"bi-water-mark",text:BI.isFunction(o.text)?o.text():o.text}},setValue:function(vals){var formatValue=this._digest(vals,this.options.items);this.trigger.setTextCls(formatValue.textCls),this.trigger.setText(formatValue.text)},setTipType:function(v){this.trigger.setTipType(v)},populate:function(items){this.options.items=items}}),BI.shortcut("bi.select_text_trigger",BI.SelectTextTrigger),BI.SmallSelectTextTrigger=BI.inherit(BI.Trigger,{_defaultConfig:function(){return BI.extend(BI.SmallSelectTextTrigger.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-small-select-text-trigger bi-border",height:20})},_init:function(){this.options.height-=2,BI.SmallSelectTextTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options,obj=this._digest(o.value,o.items);this.trigger=BI.createWidget({type:"bi.small_text_trigger",element:this,height:o.height-2,text:obj.text,cls:obj.cls})},_digest:function(vals,items){var o=this.options;vals=BI.isArray(vals)?vals:[vals];var result=[],formatItems=BI.Tree.transformToArrayFormat(items);return BI.each(formatItems,function(i,item){BI.deepContains(vals,item.value)&&!BI.contains(result,item.text||item.value)&&result.push(item.text||item.value)}),result.length>0?{cls:"",text:result.join(",")}:{cls:"bi-water-mark",text:o.text}},setValue:function(vals){var formatValue=this._digest(vals,this.options.items);this.trigger.element.removeClass("bi-water-mark").addClass(formatValue.cls),this.trigger.setText(formatValue.text)},populate:function(items){this.options.items=items}}),BI.shortcut("bi.small_select_text_trigger",BI.SmallSelectTextTrigger),BI.SmallTextTrigger=BI.inherit(BI.Trigger,{_const:{hgap:4},_defaultConfig:function(){var conf=BI.SmallTextTrigger.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-text-trigger",height:20})},_init:function(){BI.SmallTextTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options,c=this._const;this.text=BI.createWidget({type:"bi.label",textAlign:"left",height:o.height,text:o.text,hgap:c.hgap}),this.trigerButton=BI.createWidget({type:"bi.trigger_icon_button",width:o.triggerWidth||o.height}),BI.createWidget({element:this,type:"bi.htape",items:[{el:this.text},{el:this.trigerButton,width:o.triggerWidth||o.height}]})},setValue:function(value){this.text.setValue(value)},setText:function(text){this.text.setText(text)}}),BI.shortcut("bi.small_text_trigger",BI.SmallTextTrigger),BI.MonthDateCombo=BI.inherit(BI.Trigger,{_defaultConfig:function(){return BI.extend(BI.MonthDateCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-month-combo",height:24,container:null})},_init:function(){BI.MonthDateCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.trigger=BI.createWidget({type:"bi.date_triangle_trigger"}),this.popup=BI.createWidget({type:"bi.month_popup",behaviors:o.behaviors}),this.popup.on(BI.YearPopup.EVENT_CHANGE,function(){self.setValue(self.popup.getValue())}),this.combo=BI.createWidget({type:"bi.combo",offsetStyle:"center",container:o.container,element:this,isNeedAdjustHeight:!1,isNeedAdjustWidth:!1,el:this.trigger,popup:{minWidth:85,stopPropagation:!1,el:this.popup}}),this.combo.on(BI.Combo.EVENT_CHANGE,function(){self.combo.hideView(),self.fireEvent(BI.MonthDateCombo.EVENT_CHANGE)}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){self.doBehavior()})},setValue:function(v){this.trigger.setValue(v),this.popup.setValue(v)},getValue:function(){return this.popup.getValue()}}),BI.MonthDateCombo.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.month_date_combo",BI.MonthDateCombo),BI.YearDateCombo=BI.inherit(BI.Trigger,{_defaultConfig:function(){return BI.extend(BI.YearDateCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-year-combo",min:"1900-01-01",max:"2099-12-31",behaviors:{},height:24,container:null})},_init:function(){BI.YearDateCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.trigger=BI.createWidget({type:"bi.date_triangle_trigger"}),this.popup=BI.createWidget({type:"bi.year_popup",behaviors:o.behaviors,min:o.min,max:o.max}),this.popup.on(BI.YearPopup.EVENT_CHANGE,function(){self.setValue(self.popup.getValue()),self.combo.hideView(),self.fireEvent(BI.YearDateCombo.EVENT_CHANGE)}),this.combo=BI.createWidget({type:"bi.combo",offsetStyle:"center",element:this,container:o.container,isNeedAdjustHeight:!1,isNeedAdjustWidth:!1,el:this.trigger,popup:{minWidth:100,stopPropagation:!1,el:this.popup}}),this.combo.on(BI.Combo.EVENT_CHANGE,function(){self.fireEvent(BI.YearDateCombo.EVENT_CHANGE)}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){self.doBehavior()})},setValue:function(v){this.trigger.setValue(v),this.popup.setValue(v)},getValue:function(){return this.popup.getValue()}}),BI.YearDateCombo.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.year_date_combo",BI.YearDateCombo),BI.DatePicker=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.DatePicker.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-date-picker",height:40,min:"1900-01-01",max:"2099-12-31"})},_init:function(){BI.DatePicker.superclass._init.apply(this,arguments);var self=this,o=this.options;this._year=BI.getDate().getFullYear(),this._month=BI.getDate().getMonth()+1,this.left=BI.createWidget({type:"bi.icon_button",cls:"pre-page-h-font",width:24,height:24}),this.left.on(BI.IconButton.EVENT_CHANGE,function(){1===self._month?self.setValue({year:self.year.getValue()-1,month:12}):self.setValue({year:self.year.getValue(),month:self.month.getValue()-1}),self.fireEvent(BI.DatePicker.EVENT_CHANGE),self._checkLeftValid(),self._checkRightValid()}),this.right=BI.createWidget({type:"bi.icon_button",cls:"next-page-h-font",width:24,height:24}),this.right.on(BI.IconButton.EVENT_CHANGE,function(){12===self._month?self.setValue({year:self.year.getValue()+1,month:1}):self.setValue({year:self.year.getValue(),month:self.month.getValue()+1}),self.fireEvent(BI.DatePicker.EVENT_CHANGE),self._checkLeftValid(),self._checkRightValid()}),this.year=BI.createWidget({type:"bi.year_date_combo",behaviors:o.behaviors,min:o.min,max:o.max}),this.year.on(BI.YearDateCombo.EVENT_CHANGE,function(){self.setValue({year:self.year.getValue(),month:self.month.getValue()}),self.fireEvent(BI.DatePicker.EVENT_CHANGE)}),this.month=BI.createWidget({type:"bi.month_date_combo",behaviors:o.behaviors}),this.month.on(BI.MonthDateCombo.EVENT_CHANGE,function(){self.setValue({year:self.year.getValue(),month:self.month.getValue()}),self.fireEvent(BI.DatePicker.EVENT_CHANGE)}),BI.createWidget({type:"bi.htape",element:this,items:[{el:{type:"bi.center_adapt",items:[this.left]},width:24},{type:"bi.center_adapt",items:[{el:{type:"bi.horizontal",width:120,rgap:10,items:[{el:this.year,lgap:10},this.month]}}]},{el:{type:"bi.center_adapt",items:[this.right]},width:24}]}),this.setValue({year:this._year,month:this._month})},_checkLeftValid:function(){var o=this.options,valid=!(1===this._month&&this._year===BI.parseDateTime(o.min,"%Y-%X-%d").getFullYear());return this.left.setEnable(valid),valid},_checkRightValid:function(){var o=this.options,valid=!(12===this._month&&this._year===BI.parseDateTime(o.max,"%Y-%X-%d").getFullYear());return this.right.setEnable(valid),valid},setValue:function(ob){this._year=BI.parseInt(ob.year),this._month=BI.parseInt(ob.month),this.year.setValue(ob.year),this.month.setValue(ob.month),this._checkLeftValid(),this._checkRightValid()},getValue:function(){return{year:this.year.getValue(),month:this.month.getValue()}}}),BI.DatePicker.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.date_picker",BI.DatePicker),BI.YearPicker=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.YearPicker.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-year-picker",behaviors:{},height:40,min:"1900-01-01",max:"2099-12-31"})},_init:function(){BI.YearPicker.superclass._init.apply(this,arguments);var self=this,o=this.options;this._year=BI.getDate().getFullYear(),this.left=BI.createWidget({type:"bi.icon_button",cls:"pre-page-h-font",width:25,height:25}),this.left.on(BI.IconButton.EVENT_CHANGE,function(){self.setValue(self.year.getValue()-1),self.fireEvent(BI.YearPicker.EVENT_CHANGE),self._checkLeftValid(),self._checkRightValid()}),this.right=BI.createWidget({type:"bi.icon_button",cls:"next-page-h-font",width:25,height:25}),this.right.on(BI.IconButton.EVENT_CHANGE,function(){self.setValue(self.year.getValue()+1),self.fireEvent(BI.YearPicker.EVENT_CHANGE),self._checkLeftValid(),self._checkRightValid()}),this.year=BI.createWidget({type:"bi.year_date_combo",min:o.min,behaviors:o.behaviors,max:o.max}),this.year.on(BI.YearDateCombo.EVENT_CHANGE,function(){self.setValue(self.year.getValue()),self.fireEvent(BI.YearPicker.EVENT_CHANGE)}),BI.createWidget({type:"bi.htape",element:this,items:[{el:{type:"bi.center_adapt",items:[this.left]},width:25},{type:"bi.center_adapt",items:[{el:{type:"bi.horizontal_float",width:50,items:[{el:this.year}]}}]},{el:{type:"bi.center_adapt",items:[this.right]},width:25}]}),this.setValue({year:this._year})},_checkLeftValid:function(){var o=this.options,valid=!(this._year===BI.parseDateTime(o.min,"%Y-%X-%d").getFullYear());return this.left.setEnable(valid),valid},_checkRightValid:function(){var o=this.options,valid=!(this._year===BI.parseDateTime(o.max,"%Y-%X-%d").getFullYear());return this.right.setEnable(valid),valid},setValue:function(v){this._year=v,this.year.setValue(v),this._checkLeftValid(),this._checkRightValid()},getValue:function(){return this.year.getValue()}}),BI.YearPicker.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.year_picker",BI.YearPicker),BI.DateCalendarPopup=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.DateCalendarPopup.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-date-calendar-popup",min:"1900-01-01",max:"2099-12-31",selectedTime:null})},_createNav:function(v){var date=BI.Calendar.getDateJSONByPage(v),calendar=BI.createWidget({type:"bi.calendar",logic:{dynamic:!0},min:this.options.min,max:this.options.max,year:date.year,month:date.month,day:1});return calendar},_init:function(){BI.DateCalendarPopup.superclass._init.apply(this,arguments);var self=this,o=this.options;this.today=BI.getDate(),this._year=this.today.getFullYear(),this._month=this.today.getMonth()+1,this._day=this.today.getDate(),this.selectedTime=o.selectedTime||{year:this._year,month:this._month,day:this._day},this.datePicker=BI.createWidget({type:"bi.date_picker",behaviors:o.behaviors,min:o.min,max:o.max}),this.calendar=BI.createWidget({direction:"top",logic:{ +dynamic:!0},type:"bi.navigation",tab:this.datePicker,cardCreator:BI.bind(this._createNav,this),afterCardCreated:function(){},afterCardShow:function(){this.setValue(self.selectedTime)}}),this.datePicker.on(BI.DatePicker.EVENT_CHANGE,function(){self.selectedTime=self.datePicker.getValue(),self.selectedTime.day=1,self.calendar.setSelect(BI.Calendar.getPageByDateJSON(self.selectedTime))}),this.calendar.on(BI.Navigation.EVENT_CHANGE,function(){self.selectedTime=self.calendar.getValue(),self.setValue(self.selectedTime),self.fireEvent(BI.DateCalendarPopup.EVENT_CHANGE)}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.calendar,left:5,right:5},{el:{type:"bi.layout",cls:"bi-split-top"},height:1,top:40,left:0,right:0}]})},setValue:function(timeOb){this.datePicker.setValue(timeOb),this.calendar.setSelect(BI.Calendar.getPageByDateJSON(timeOb)),this.calendar.setValue(timeOb),this.selectedTime=timeOb},getValue:function(){return this.selectedTime}}),BI.DateCalendarPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.date_calendar_popup",BI.DateCalendarPopup),BI.MonthPopup=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MonthPopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-month-popup",behaviors:{}})},_init:function(){BI.MonthPopup.superclass._init.apply(this,arguments);var self=this,o=this.options,month=[1,7,2,8,3,9,4,10,5,11,6,12],items=[];items.push(month.slice(0,2)),items.push(month.slice(2,4)),items.push(month.slice(4,6)),items.push(month.slice(6,8)),items.push(month.slice(8,10)),items.push(month.slice(10,12)),items=BI.map(items,function(i,item){return BI.map(item,function(j,td){return{type:"bi.text_item",cls:"bi-list-item-select",textAlign:"center",whiteSpace:"nowrap",once:!1,forceSelected:!0,height:23,width:38,value:td,text:td}})}),this.month=BI.createWidget({type:"bi.button_group",element:this,behaviors:o.behaviors,items:BI.createItems(items,{}),layouts:[BI.LogicFactory.createLogic("table",BI.extend({dynamic:!0},{columns:2,rows:6,columnSize:[.5,.5],rowSize:25})),{type:"bi.center_adapt",vgap:1,hgap:2}],value:o.value}),this.month.on(BI.Controller.EVENT_CHANGE,function(type){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.MonthPopup.EVENT_CHANGE)})},getValue:function(){return this.month.getValue()[0]},setValue:function(v){v=BI.parseInt(v),this.month.setValue([v])}}),BI.MonthPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.month_popup",BI.MonthPopup),BI.YearPopup=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.YearPopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-year-popup",behaviors:{},min:"1900-01-01",max:"2099-12-31"})},_createYearCalendar:function(v){var o=this.options,y=this._year,calendar=BI.createWidget({type:"bi.year_calendar",behaviors:o.behaviors,min:o.min,max:o.max,logic:{dynamic:!0},year:y+12*v});return calendar.setValue(this._year),calendar},_init:function(){BI.YearPopup.superclass._init.apply(this,arguments);var self=this,o=this.options;this.selectedYear=this._year=BI.getDate().getFullYear();var backBtn=BI.createWidget({type:"bi.icon_button",cls:"pre-page-h-font",width:24,height:24,value:-1}),preBtn=BI.createWidget({type:"bi.icon_button",cls:"next-page-h-font",width:24,height:24,value:1});this.navigation=BI.createWidget({type:"bi.navigation",element:this,single:!0,logic:{dynamic:!0},tab:{cls:"year-popup-navigation bi-high-light bi-split-top",height:24,items:[backBtn,preBtn]},cardCreator:BI.bind(this._createYearCalendar,this),afterCardShow:function(){this.setValue(self.selectedYear);var calendar=this.getSelectedCard();backBtn.setEnable(!calendar.isFrontYear()),preBtn.setEnable(!calendar.isFinalYear())}}),this.navigation.on(BI.Navigation.EVENT_CHANGE,function(){self.selectedYear=this.getValue(),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),self.fireEvent(BI.YearPopup.EVENT_CHANGE,self.selectedYear)}),BI.isKey(o.value)&&this.setValue(o.value)},getValue:function(){return this.selectedYear},setValue:function(v){var o=this.options;v=BI.parseInt(v);var startDate=BI.parseDateTime(o.min,"%Y-%X-%d"),endDate=BI.parseDateTime(o.max,"%Y-%X-%d");BI.checkDateVoid(v,1,1,BI.print(BI.getDate(startDate.getFullYear(),0,1),"%Y-%X-%d"),BI.print(BI.getDate(endDate.getFullYear(),0,1),"%Y-%X-%d"))[0]?(v=BI.getDate().getFullYear(),this.selectedYear="",this.navigation.setSelect(BI.YearCalendar.getPageByYear(v)),this.navigation.setValue("")):(this.selectedYear=v,this.navigation.setSelect(BI.YearCalendar.getPageByYear(v)),this.navigation.setValue(v))}}),BI.YearPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.year_popup",BI.YearPopup),BI.DateTriangleTrigger=BI.inherit(BI.Trigger,{_const:{height:24,iconWidth:12,iconHeight:12},_defaultConfig:function(){return BI.extend(BI.DateTriangleTrigger.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-date-triangle-trigger pull-down-ha-font cursor-pointer",height:24})},_init:function(){BI.DateTriangleTrigger.superclass._init.apply(this,arguments);var o=this.options,c=this._const;this.text=BI.createWidget({type:"bi.label",cls:"list-item-text",textAlign:"right",text:o.text,value:o.value,height:c.height}),BI.createWidget({type:"bi.vertical_adapt",element:this,items:[{el:this.text,rgap:5},{type:"bi.icon_label",width:16}]})},setValue:function(v){this.text.setValue(v)},getValue:function(){return this.text.getValue()},setText:function(v){this.text.setText(v)},getText:function(){return this.item.getText()},getKey:function(){}}),BI.shortcut("bi.date_triangle_trigger",BI.DateTriangleTrigger),BI.StaticDatePaneCard=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.StaticDatePaneCard.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-date-pane",min:"1900-01-01",max:"2099-12-31",selectedTime:null})},_init:function(){BI.StaticDatePaneCard.superclass._init.apply(this,arguments);var self=this,o=this.options;this.today=BI.getDate(),this._year=this.today.getFullYear(),this._month=this.today.getMonth()+1,this.selectedTime=o.selectedTime||{year:this._year,month:this._month},this.datePicker=BI.createWidget({type:"bi.date_picker",behaviors:o.behaviors,min:o.min,max:o.max}),this.datePicker.on(BI.DatePicker.EVENT_CHANGE,function(){var value=self.datePicker.getValue(),monthDay=BI.getMonthDays(BI.getDate(value.year,value.month-1,1)),day=self.selectedTime.day||0;day>monthDay&&(day=monthDay),self.selectedTime={year:value.year,month:value.month},0!==day&&(self.selectedTime.day=day),self.calendar.setSelect(BI.Calendar.getPageByDateJSON(self.selectedTime)),self.calendar.setValue(self.selectedTime),0!==day&&self.fireEvent(BI.DateCalendarPopup.EVENT_CHANGE)}),this.calendar=BI.createWidget({direction:"custom",type:"bi.navigation",tab:this.datePicker,cardCreator:BI.bind(this._createNav,this)}),this.calendar.on(BI.Navigation.EVENT_CHANGE,function(){self.selectedTime=self.calendar.getValue(),self.calendar.empty(),self.setValue(self.selectedTime),self.fireEvent(BI.DateCalendarPopup.EVENT_CHANGE)}),this.setValue(o.selectedTime),BI.createWidget({type:"bi.vtape",element:this,items:[{el:this.datePicker,height:40},this.calendar],hgap:10}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.layout",cls:"bi-split-top"},height:1,top:40,left:0,right:0}]})},_createNav:function(v){var date=BI.Calendar.getDateJSONByPage(v),calendar=BI.createWidget({type:"bi.calendar",logic:{dynamic:!1},min:this.options.min,max:this.options.max,year:date.year,month:date.month,day:this.selectedTime.day});return calendar},_getNewCurrentDate:function(){var today=BI.getDate();return{year:today.getFullYear(),month:today.getMonth()+1}},_setCalenderValue:function(date){this.calendar.setSelect(BI.Calendar.getPageByDateJSON(date)),this.calendar.setValue(date),this.selectedTime=date},_setDatePicker:function(timeOb){BI.isNull(timeOb)||BI.isNull(timeOb.year)||BI.isNull(timeOb.month)?this.datePicker.setValue(this._getNewCurrentDate()):this.datePicker.setValue(timeOb)},_setCalendar:function(timeOb){BI.isNull(timeOb)||BI.isNull(timeOb.day)?(this.calendar.empty(),this._setCalenderValue(this._getNewCurrentDate())):this._setCalenderValue(timeOb)},setValue:function(timeOb){this._setDatePicker(timeOb),this._setCalendar(timeOb)},getValue:function(){return this.selectedTime}}),BI.shortcut("bi.static_date_pane_card",BI.StaticDatePaneCard),BI.DynamicDatePane=BI.inherit(BI.Widget,{props:{baseCls:"bi-dynamic-date-pane"},render:function(){var self=this,o=this.options;return{type:"bi.vtape",items:[{el:{type:"bi.linear_segment",cls:"bi-split-bottom",height:30,items:BI.createItems([{text:BI.i18nText("BI-Multi_Date_YMD"),value:BI.DynamicDatePane.Static},{text:BI.i18nText("BI-Basic_Dynamic_Title"),value:BI.DynamicDatePane.Dynamic}],{textAlign:"center"}),listeners:[{eventName:BI.ButtonGroup.EVENT_CHANGE,action:function(){var value=this.getValue()[0];switch(self.dateTab.setSelect(value),value){case BI.DynamicDatePane.Static:var date=BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue());self.ymd.setValue({year:date.getFullYear(),month:date.getMonth()+1,day:date.getDate()});break;case BI.DynamicDatePane.Dynamic:self.dynamicPane.setValue({year:0})}self.fireEvent("EVENT_CHANGE")}}],ref:function(){self.switcher=this}},height:30},{type:"bi.tab",ref:function(){self.dateTab=this},showIndex:BI.DynamicDatePane.Static,cardCreator:function(v){switch(v){case BI.DynamicDatePane.Static:return{type:"bi.static_date_pane_card",behaviors:o.behaviors,listeners:[{eventName:"EVENT_CHANGE",action:function(){self.fireEvent("EVENT_CHANGE")}}],ref:function(){self.ymd=this}};case BI.DynamicDatePane.Dynamic:default:return{type:"bi.dynamic_date_card",listeners:[{eventName:"EVENT_CHANGE",action:function(){self._checkValue(self.getValue())&&self.fireEvent("EVENT_CHANGE")}}],ref:function(){self.dynamicPane=this}}}}}]}},mounted:function(){this.setValue(this.options.value)},_checkValueValid:function(value){return BI.isNull(value)||BI.isEmptyObject(value)||BI.isEmptyString(value)},_checkValue:function(v){switch(v.type){case BI.DynamicDateCombo.Dynamic:return BI.isNotEmptyObject(v.value);case BI.DynamicDateCombo.Static:default:return!0}},setValue:function(v){v=v||{};var type=v.type||BI.DynamicDateCombo.Static,value=v.value||v;switch(this.switcher.setValue(type),this.dateTab.setSelect(type),type){case BI.DynamicDateCombo.Dynamic:this.dynamicPane.setValue(value);break;case BI.DynamicDateCombo.Static:default:if(this._checkValueValid(value)){var date=BI.getDate();this.ymd.setValue({year:date.getFullYear(),month:date.getMonth()+1})}else this.ymd.setValue(value)}},getValue:function(){return{type:this.dateTab.getSelect(),value:this.dateTab.getValue()}}}),BI.shortcut("bi.dynamic_date_pane",BI.DynamicDatePane),BI.extend(BI.DynamicDatePane,{Static:1,Dynamic:2}),BI.DateTimeCombo=BI.inherit(BI.Single,{constants:{popupHeight:290,popupWidth:270,comboAdjustHeight:1,border:1},_defaultConfig:function(){return BI.extend(BI.DateTimeCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-date-time-combo bi-border bi-border-radius",width:200,height:24,minDate:"1900-01-01",maxDate:"2099-12-31"})},_init:function(){BI.DateTimeCombo.superclass._init.apply(this,arguments);var self=this,opts=this.options,date=BI.getDate();this.storeValue=BI.isNotNull(opts.value)?opts.value:{year:date.getFullYear(),month:date.getMonth()+1,day:date.getDate(),hour:date.getHours(),minute:date.getMinutes(),second:date.getSeconds()},this.trigger=BI.createWidget({type:"bi.date_time_trigger",min:opts.minDate,max:opts.maxDate,value:opts.value}),this.popup=BI.createWidget({type:"bi.date_time_popup",behaviors:opts.behaviors,min:opts.minDate,max:opts.maxDate,value:opts.value}),self.setValue(this.storeValue),this.popup.on(BI.DateTimePopup.BUTTON_CANCEL_EVENT_CHANGE,function(){self.setValue(self.storeValue),self.hidePopupView(),self.fireEvent(BI.DateTimeCombo.EVENT_CANCEL)}),this.popup.on(BI.DateTimePopup.BUTTON_OK_EVENT_CHANGE,function(){self.storeValue=self.popup.getValue(),self.setValue(self.storeValue),self.hidePopupView(),self.fireEvent(BI.DateTimeCombo.EVENT_CONFIRM)}),this.combo=BI.createWidget({type:"bi.combo",container:opts.container,toggle:!1,isNeedAdjustHeight:!1,isNeedAdjustWidth:!1,el:this.trigger,adjustLength:this.constants.comboAdjustHeight,popup:{el:this.popup,width:this.constants.popupWidth,stopPropagation:!1},hideChecker:function(e){return 0===triggerBtn.element.find(e.target).length}}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){self.popup.setValue(self.storeValue),self.fireEvent(BI.DateTimeCombo.EVENT_BEFORE_POPUPVIEW)});var triggerBtn=BI.createWidget({type:"bi.icon_button",cls:"bi-trigger-icon-button date-font",width:24,height:24});triggerBtn.on(BI.IconButton.EVENT_CHANGE,function(){self.combo.isViewVisible()||self.combo.showView()}),BI.createWidget({type:"bi.htape",element:this,items:[{type:"bi.absolute",items:[{el:this.combo,top:0,left:0,right:0,bottom:0},{el:triggerBtn,top:0,right:0}]}]})},setValue:function(v){this.storeValue=v,this.popup.setValue(v),this.trigger.setValue(v)},getValue:function(){return this.storeValue},hidePopupView:function(){this.combo.hideView()}}),BI.DateTimeCombo.EVENT_CANCEL="EVENT_CANCEL",BI.DateTimeCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.DateTimeCombo.EVENT_CHANGE="EVENT_CHANGE",BI.DateTimeCombo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.date_time_combo",BI.DateTimeCombo),BI.DateTimePopup=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.DateTimePopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-date-time-popup",width:268,height:374})},_init:function(){BI.DateTimePopup.superclass._init.apply(this,arguments);var self=this,opts=this.options;this.cancelButton=BI.createWidget({type:"bi.text_button",cls:"multidate-popup-button bi-border-top bi-border-right",shadow:!0,text:BI.i18nText("BI-Basic_Cancel")}),this.cancelButton.on(BI.TextButton.EVENT_CHANGE,function(){self.fireEvent(BI.DateTimePopup.BUTTON_CANCEL_EVENT_CHANGE)}),this.okButton=BI.createWidget({type:"bi.text_button",cls:"multidate-popup-button bi-border-top",shadow:!0,text:BI.i18nText("BI-Basic_OK")}),this.okButton.on(BI.TextButton.EVENT_CHANGE,function(){self.fireEvent(BI.DateTimePopup.BUTTON_OK_EVENT_CHANGE)}),this.dateCombo=BI.createWidget({type:"bi.date_calendar_popup",behaviors:opts.behaviors,min:self.options.min,max:self.options.max}),self.dateCombo.on(BI.DateCalendarPopup.EVENT_CHANGE,function(){self.fireEvent(BI.DateTimePopup.CALENDAR_EVENT_CHANGE)}),this.dateButton=BI.createWidget({type:"bi.grid",items:[[this.cancelButton,this.okButton]]}),BI.createWidget({element:this,type:"bi.vtape",items:[{el:this.dateCombo},{el:{type:"bi.center_adapt",cls:"bi-split-top",items:[{type:"bi.dynamic_date_time_select",ref:function(_ref){self.timeSelect=_ref}}]},height:50},{el:this.dateButton,height:30}]}),this.setValue(opts.value)},setValue:function(v){var value=v,date;BI.isNull(value)?(date=BI.getDate(),this.dateCombo.setValue({year:date.getFullYear(),month:date.getMonth()+1,day:date.getDate()}),this.timeSelect.setValue({hour:date.getHours(),minute:date.getMinutes(),second:date.getSeconds()})):(this.dateCombo.setValue({year:value.year,month:value.month,day:value.day}),this.timeSelect.setValue({hour:value.hour,minute:value.minute,second:value.second}))},getValue:function(){return BI.extend({year:this.dateCombo.getValue().year,month:this.dateCombo.getValue().month,day:this.dateCombo.getValue().day},this.timeSelect.getValue())}}),BI.DateTimePopup.BUTTON_OK_EVENT_CHANGE="BUTTON_OK_EVENT_CHANGE",BI.DateTimePopup.BUTTON_CANCEL_EVENT_CHANGE="BUTTON_CANCEL_EVENT_CHANGE",BI.DateTimePopup.CALENDAR_EVENT_CHANGE="CALENDAR_EVENT_CHANGE",BI.shortcut("bi.date_time_popup",BI.DateTimePopup),BI.DateTimeTrigger=BI.inherit(BI.Trigger,{_const:{hgap:4},_defaultConfig:function(){return BI.extend(BI.DateTimeTrigger.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-date-time-trigger",min:"1900-01-01",max:"2099-12-31",height:24,width:200})},_init:function(){BI.DateTimeTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options,c=this._const;this.text=BI.createWidget({type:"bi.label",textAlign:"left",height:o.height,width:o.width,hgap:c.hgap}),BI.createWidget({type:"bi.htape",element:this,items:[{el:this.text},{el:BI.createWidget(),width:o.height}]}),this.setValue(o.value)},_printTime:function(v){return v<10?"0"+v:v},setValue:function(v){var self=this,value=v,dateStr;if(BI.isNull(value))value=BI.getDate(),dateStr=BI.print(value,"%Y-%X-%d %H:%M:%S");else{var date=BI.getDate(value.year,value.month-1,value.day,value.hour,value.minute,value.second);dateStr=BI.print(date,"%Y-%X-%d %H:%M:%S")}this.text.setText(dateStr),this.text.setTitle(dateStr)}}),BI.shortcut("bi.date_time_trigger",BI.DateTimeTrigger),BI.StaticDateTimePaneCard=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.StaticDateTimePaneCard.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-date-time-pane",min:"1900-01-01",max:"2099-12-31",selectedTime:null})},_init:function(){BI.StaticDateTimePaneCard.superclass._init.apply(this,arguments);var self=this,o=this.options;this.today=BI.getDate(),this._year=this.today.getFullYear(),this._month=this.today.getMonth()+1,this.selectedTime=o.selectedTime||{year:this._year,month:this._month},this.datePicker=BI.createWidget({type:"bi.date_picker",behaviors:o.behaviors,min:o.min,max:o.max}),this.datePicker.on(BI.DatePicker.EVENT_CHANGE,function(){var value=self.datePicker.getValue(),monthDay=BI.getMonthDays(BI.getDate(value.year,value.month-1,1)),day=self.selectedTime.day||0;day>monthDay&&(day=monthDay),self.selectedTime=BI.extend(self.selectedTime,{year:value.year,month:value.month,day:day}),0!==day&&(self.selectedTime.day=day),self.calendar.setSelect(BI.Calendar.getPageByDateJSON(self.selectedTime)),self.calendar.setValue(self.selectedTime),0!==day&&self.fireEvent(BI.DateCalendarPopup.EVENT_CHANGE)}),this.calendar=BI.createWidget({direction:"custom",type:"bi.navigation",tab:this.datePicker,cardCreator:BI.bind(this._createNav,this)}),this.calendar.on(BI.Navigation.EVENT_CHANGE,function(){self.selectedTime=BI.extend(self.calendar.getValue(),self.timeSelect.getValue()),self.calendar.empty(),self.setValue(self.selectedTime),self.fireEvent(BI.DateCalendarPopup.EVENT_CHANGE)}),BI.createWidget({type:"bi.vtape",element:this,hgap:10,items:[{el:this.datePicker,height:40},this.calendar,{el:{type:"bi.dynamic_date_time_select",cls:"bi-split-top",ref:function(){self.timeSelect=this},listeners:[{eventName:BI.DynamicDateTimeSelect.EVENT_CONFIRM,action:function(){self.selectedTime=BI.extend(self.calendar.getValue(),self.timeSelect.getValue()),self.fireEvent("EVENT_CHANGE")}}]},height:40}]}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.layout",cls:"bi-split-top"},height:1,top:40,left:0,right:0}]}),this.setValue(o.selectedTime)},_createNav:function(v){var date=BI.Calendar.getDateJSONByPage(v),calendar=BI.createWidget({type:"bi.calendar",logic:{dynamic:!1},min:this.options.min,max:this.options.max,year:date.year,month:date.month,day:this.selectedTime.day});return calendar},_getNewCurrentDate:function(){var today=BI.getDate();return{year:today.getFullYear(),month:today.getMonth()+1}},_setCalenderValue:function(date){this.calendar.setSelect(BI.Calendar.getPageByDateJSON(date)),this.calendar.setValue(date),this.selectedTime=BI.extend({},this.timeSelect.getValue(),date)},_setDatePicker:function(timeOb){BI.isNull(timeOb)||BI.isNull(timeOb.year)||BI.isNull(timeOb.month)?this.datePicker.setValue(this._getNewCurrentDate()):this.datePicker.setValue(timeOb)},_setCalendar:function(timeOb){BI.isNull(timeOb)||BI.isNull(timeOb.day)?(this.calendar.empty(),this._setCalenderValue(this._getNewCurrentDate())):this._setCalenderValue(timeOb)},setValue:function(timeOb){timeOb=timeOb||{},this._setDatePicker(timeOb),this._setCalendar(timeOb),this.timeSelect.setValue({hour:timeOb.hour,minute:timeOb.minute,second:timeOb.second})},getValue:function(){return this.selectedTime}}),BI.shortcut("bi.static_date_time_pane_card",BI.StaticDateTimePaneCard),BI.DynamicDateTimePane=BI.inherit(BI.Widget,{props:{baseCls:"bi-dynamic-date-pane"},render:function(){var self=this,o=this.options;return{type:"bi.vtape",items:[{el:{type:"bi.linear_segment",cls:"bi-split-bottom",height:30,items:BI.createItems([{text:BI.i18nText("BI-Multi_Date_YMD"),value:BI.DynamicDateTimePane.Static},{text:BI.i18nText("BI-Basic_Dynamic_Title"),value:BI.DynamicDateTimePane.Dynamic}],{textAlign:"center"}),listeners:[{eventName:BI.ButtonGroup.EVENT_CHANGE,action:function(){var value=this.getValue()[0];switch(self.dateTab.setSelect(value),value){case BI.DynamicDateTimePane.Static:var date=BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue());self.ymd.setValue({year:date.getFullYear(),month:date.getMonth()+1,day:date.getDate()});break;case BI.DynamicDateTimePane.Dynamic:self.dynamicPane.setValue({year:0})}}}],ref:function(){self.switcher=this}},height:30},{type:"bi.tab",ref:function(){self.dateTab=this},showIndex:BI.DynamicDateTimePane.Static,cardCreator:function(v){switch(v){case BI.DynamicDateTimePane.Static:return{type:"bi.static_date_time_pane_card",behaviors:o.behaviors,listeners:[{eventName:"EVENT_CHANGE",action:function(){self.fireEvent("EVENT_CHANGE")}}],ref:function(){self.ymd=this}};case BI.DynamicDateTimePane.Dynamic:default:return{type:"bi.dynamic_date_card",listeners:[{eventName:"EVENT_CHANGE",action:function(){self._checkValue(self.getValue())&&self.fireEvent("EVENT_CHANGE")}}],ref:function(){self.dynamicPane=this}}}}}]}},mounted:function(){this.setValue(this.options.value)},_checkValueValid:function(value){return BI.isNull(value)||BI.isEmptyObject(value)||BI.isEmptyString(value)},_checkValue:function(v){switch(v.type){case BI.DynamicDateCombo.Dynamic:return BI.isNotEmptyObject(v.value);case BI.DynamicDateCombo.Static:default:return!0}},setValue:function(v){v=v||{};var type=v.type||BI.DynamicDateTimePane.Static,value=v.value||v;switch(this.switcher.setValue(type),this.dateTab.setSelect(type),type){case BI.DynamicDateTimePane.Dynamic:this.dynamicPane.setValue(value);break;case BI.DynamicDateTimePane.Static:default:if(this._checkValueValid(value)){var date=BI.getDate();this.ymd.setValue({year:date.getFullYear(),month:date.getMonth()+1})}else this.ymd.setValue(value)}},getValue:function(){return{type:this.dateTab.getSelect(),value:this.dateTab.getValue()}}}),BI.shortcut("bi.dynamic_date_time_pane",BI.DynamicDateTimePane),BI.extend(BI.DynamicDateTimePane,{Static:1,Dynamic:2}),BI.DownListCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.DownListCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-down-list-combo",height:24,items:[],adjustLength:0,direction:"bottom",trigger:"click",container:null,stopPropagation:!1,el:{}})},_init:function(){BI.DownListCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.popupview=BI.createWidget({type:"bi.down_list_popup",items:o.items,chooseType:o.chooseType,value:o.value}),this.popupview.on(BI.DownListPopup.EVENT_CHANGE,function(value){self.fireEvent(BI.DownListCombo.EVENT_CHANGE,value),self.downlistcombo.hideView()}),this.popupview.on(BI.DownListPopup.EVENT_SON_VALUE_CHANGE,function(value,fatherValue){self.fireEvent(BI.DownListCombo.EVENT_SON_VALUE_CHANGE,value,fatherValue),self.downlistcombo.hideView()}),this.downlistcombo=BI.createWidget({element:this,type:"bi.combo",trigger:o.trigger,isNeedAdjustWidth:!1,container:o.container,adjustLength:o.adjustLength,direction:o.direction,stopPropagation:o.stopPropagation,el:BI.createWidget(o.el,{type:"bi.icon_trigger",extraCls:o.iconCls,width:o.width,height:o.height}),popup:{el:this.popupview,stopPropagation:o.stopPropagation,maxHeight:1e3,minWidth:140}}),this.downlistcombo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){self.fireEvent(BI.DownListCombo.EVENT_BEFORE_POPUPVIEW)})},hideView:function(){this.downlistcombo.hideView()},showView:function(e){this.downlistcombo.showView(e)},populate:function(items){this.popupview.populate(items)},setValue:function(v){this.popupview.setValue(v)},getValue:function(){return this.popupview.getValue()}}),BI.DownListCombo.EVENT_CHANGE="EVENT_CHANGE",BI.DownListCombo.EVENT_SON_VALUE_CHANGE="EVENT_SON_VALUE_CHANGE",BI.DownListCombo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.down_list_combo",BI.DownListCombo),BI.DownListGroup=BI.inherit(BI.Widget,{constants:{iconCls:"check-mark-ha-font"},_defaultConfig:function(){return BI.extend(BI.DownListGroup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-down-list-group",items:[{el:{}}]})},_init:function(){BI.DownListGroup.superclass._init.apply(this,arguments);var o=this.options,self=this;this.downlistgroup=BI.createWidget({element:this,type:"bi.button_tree",items:o.items,chooseType:0,layouts:[{type:"bi.vertical",hgap:0,vgap:0}],value:o.value}),this.downlistgroup.on(BI.Controller.EVENT_CHANGE,function(type){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&self.fireEvent(BI.DownListGroup.EVENT_CHANGE,arguments)})},getValue:function(){return this.downlistgroup.getValue()},setValue:function(v){this.downlistgroup.setValue(v)}}),BI.DownListGroup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.down_list_group",BI.DownListGroup),BI.DownListItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.DownListItem.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-down-list-item bi-list-item-active",cls:"",height:24,logic:{dynamic:!0},selected:!1,iconHeight:null,iconWidth:null,textHgap:0,textVgap:0,textLgap:0,textRgap:0})},_init:function(){BI.DownListItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.text=BI.createWidget({type:"bi.label",cls:"list-item-text",textAlign:"left",hgap:o.textHgap,vgap:o.textVgap,lgap:o.textLgap,rgap:o.textRgap,text:o.text,value:o.value,keyword:o.keyword,height:o.height}),this.icon=BI.createWidget({type:"bi.center_adapt",width:36,height:o.height,items:[{el:{type:"bi.icon",width:o.iconWidth,height:o.iconHeight}}]}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,this.icon,this.text)}))))},setValue:function(){this.isReadOnly()||this.text.setValue.apply(this.text,arguments)},getValue:function(){return this.text.getValue()},setText:function(){this.text.setText.apply(this.text,arguments)},getText:function(){return this.text.getText()},doClick:function(){BI.DownListItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.DownListItem.EVENT_CHANGE,this.getValue(),this)},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)}}),BI.DownListItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.down_list_item",BI.DownListItem),BI.DownListGroupItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){var conf=BI.DownListGroupItem.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-down-list-group-item",logic:{dynamic:!1},iconCls1:"dot-e-font",iconCls2:"pull-right-e-font"})},_init:function(){BI.DownListGroupItem.superclass._init.apply(this,arguments);var o=this.options,self=this;this.text=BI.createWidget({type:"bi.label",cls:"list-group-item-text",textAlign:"left",text:o.text,value:o.value,height:o.height}),this.icon1=BI.createWidget({type:"bi.icon_button",cls:o.iconCls1,width:36,disableSelected:!0,selected:this._digest(o.value)}),this.icon2=BI.createWidget({type:"bi.icon_button",cls:o.iconCls2,width:24,forceNotSelected:!0});var blank=BI.createWidget({type:"bi.layout",width:24});BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.icon2,top:0,bottom:0,right:0}]}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("horizontal",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("left",this.icon1,this.text,blank)})))),this.element.hover(function(){self.isEnabled()&&self.hover()},function(){self.isEnabled()&&self.dishover()})},_digest:function(v){var self=this,o=this.options;return v=BI.isArray(v)?v:[v],BI.any(v,function(idx,value){return BI.contains(o.childValues,value)})},hover:function(){BI.DownListGroupItem.superclass.hover.apply(this,arguments),this.icon1.element.addClass("hover"),this.icon2.element.addClass("hover")},dishover:function(){BI.DownListGroupItem.superclass.dishover.apply(this,arguments),this.icon1.element.removeClass("hover"),this.icon2.element.removeClass("hover")},doClick:function(){BI.DownListGroupItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent(BI.DownListGroupItem.EVENT_CHANGE,this.getValue())},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},setValue:function(v){this.icon1.setSelected(this._digest(v))}}),BI.DownListGroupItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.down_list_group_item",BI.DownListGroupItem),BI.DownListPopup=BI.inherit(BI.Pane,{constants:{nextIcon:"pull-right-e-font",height:24,iconHeight:12,iconWidth:12,hgap:0,vgap:0,border:1},_defaultConfig:function(){var conf=BI.DownListPopup.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-down-list-popup",items:[],chooseType:BI.Selection.Multi})},_init:function(){BI.DownListPopup.superclass._init.apply(this,arguments),this.singleValues=[],this.childValueMap={},this.fatherValueMap={},this.items=BI.deepClone(this.options.items);var self=this,o=this.options,children=this._createChildren(this.items);this.popup=BI.createWidget({type:"bi.button_tree",items:BI.createItems(children,{},{adjustLength:-2}),layouts:[{type:"bi.vertical",hgap:this.constants.hgap,vgap:this.constants.vgap}],value:this._digest(o.value),chooseType:o.chooseType}),this.popup.on(BI.ButtonTree.EVENT_CHANGE,function(value,object){var changedValue=value;if(BI.isNotNull(self.childValueMap[value])?(changedValue=self.childValueMap[value],self.fireEvent(BI.DownListPopup.EVENT_SON_VALUE_CHANGE,changedValue,self.fatherValueMap[value])):self.fireEvent(BI.DownListPopup.EVENT_CHANGE,changedValue,object),!BI.contains(self.singleValues,changedValue)){var item=self.getValue(),result=[];BI.each(item,function(i,valueObject){valueObject.value!=changedValue&&result.push(valueObject)}),self.setValue(result)}}),BI.createWidget({type:"bi.vertical",element:this,items:[this.popup],vgap:5})},_createChildren:function(items){var self=this,result=[];return BI.each(items,function(i,it){var item_done={type:"bi.down_list_group",items:[]};if(BI.each(it,function(i,item){BI.isNotEmptyArray(item.children)&&!BI.isEmpty(item.el)?(item.type="bi.combo_group",item.isDefaultInit=!0,item.cls="down-list-group",item.trigger="hover",item.isNeedAdjustWidth=!1,item.el.title=item.el.title||item.el.text,item.el.type="bi.down_list_group_item",item.el.logic={dynamic:!0},item.el.height=self.constants.height,item.el.iconCls2=self.constants.nextIcon,item.popup={lgap:1,el:{type:"bi.button_tree",chooseType:0,layouts:[{type:"bi.vertical"}]},innerVGap:5,maxHeight:378},item.el.childValues=[],BI.each(item.children,function(i,child){var fatherValue=BI.deepClone(item.el.value),childValue=BI.deepClone(child.value);self.singleValues.push(child.value),child.type="bi.down_list_item",child.extraCls=" child-down-list-item",child.title=child.title||child.text,child.textRgap=10,child.isNeedAdjustWidth=!1,child.logic={dynamic:!0},child.father=fatherValue,self.fatherValueMap[self._createChildValue(fatherValue,childValue)]=fatherValue,self.childValueMap[self._createChildValue(fatherValue,childValue)]=childValue,child.value=self._createChildValue(fatherValue,childValue),item.el.childValues.push(child.value)})):(item.type="bi.down_list_item", +item.title=item.title||item.text,item.textRgap=10,item.isNeedAdjustWidth=!1,item.logic={dynamic:!0});var el_done={};el_done.el=item,item_done.items.push(el_done)}),self._isGroup(item_done.items)&&BI.each(item_done.items,function(i,item){self.singleValues.push(item.el.value)}),result.push(item_done),self._needSpliter(i,items.length)){var spliter_container=BI.createWidget({type:"bi.vertical",items:[{el:{type:"bi.layout",cls:"bi-down-list-spliter bi-split-top cursor-pointer",height:0}}],cls:"bi-down-list-spliter-container cursor-pointer",vgap:5,lgap:10,rgap:0});result.push(spliter_container)}}),result},_isGroup:function(i){return i.length>1},_needSpliter:function(i,itemLength){return i0?1:0}},setValue:function(v){v=v||{},this.position=v.position||BI.DynamicDateCard.OFFSET.CURRENT;var values=[],valuesItems=[];BI.isNotNull(v.year)&&(values.push(BI.DynamicDateCard.TYPE.YEAR),valuesItems.push(this._createValue(BI.DynamicDateCard.TYPE.YEAR,v.year))),BI.isNotNull(v.quarter)&&(values.push(BI.DynamicDateCard.TYPE.QUARTER),valuesItems.push(this._createValue(BI.DynamicDateCard.TYPE.QUARTER,v.quarter))),BI.isNotNull(v.month)&&(values.push(BI.DynamicDateCard.TYPE.MONTH),valuesItems.push(this._createValue(BI.DynamicDateCard.TYPE.MONTH,v.month))),BI.isNotNull(v.week)&&(values.push(BI.DynamicDateCard.TYPE.WEEK),valuesItems.push(this._createValue(BI.DynamicDateCard.TYPE.WEEK,v.week))),BI.isNotNull(v.day)&&(values.push(BI.DynamicDateCard.TYPE.DAY),valuesItems.push(this._createValue(BI.DynamicDateCard.TYPE.DAY,v.day))),BI.isNotNull(v.workDay)&&(values.push(BI.DynamicDateCard.TYPE.WORK_DAY),valuesItems.push(this._createValue(BI.DynamicDateCard.TYPE.WORK_DAY,v.workDay))),this.checkgroup.setValue(values),this.workDayBox.setSelected(BI.isNotNull(v.workDay)),this.resultPane.populate(this._getParamJson(valuesItems,v.position))},getValue:function(){var self=this,valueMap={},selectValues=this.checkgroup.getValue(),buttons=this.resultPane.getAllButtons();if(0!==selectValues.length&&BI.each(buttons,function(idx,button){var value=button.getValue();switch(value.dateType){case BI.DynamicDateCard.TYPE.YEAR:valueMap.year=0===value.offset?-value.value:value.value;break;case BI.DynamicDateCard.TYPE.QUARTER:valueMap.quarter=0===value.offset?-value.value:value.value;break;case BI.DynamicDateCard.TYPE.MONTH:valueMap.month=0===value.offset?-value.value:value.value;break;case BI.DynamicDateCard.TYPE.WEEK:valueMap.week=0===value.offset?-value.value:value.value;break;case BI.DynamicDateCard.TYPE.DAY:valueMap.day=0===value.offset?-value.value:value.value}BI.isNull(value.dateType)&&(valueMap.position=self.position||BI.DynamicDateCard.OFFSET.CURRENT)}),this.workDayBox.isSelected()){var value=buttons[0].getValue();valueMap.workDay=0===value.offset?-value.value:value.value}return valueMap}}),BI.shortcut("bi.dynamic_date_card",BI.DynamicDateCard),BI.extend(BI.DynamicDateCard,{TYPE:{YEAR:1,QUARTER:2,MONTH:3,WEEK:4,DAY:5,WORK_DAY:6},OFFSET:{CURRENT:1,BEGIN:2,END:3}}),BI.DynamicDateCombo=BI.inherit(BI.Single,{constants:{popupHeight:259,popupWidth:270,comboAdjustHeight:1,border:1},props:{baseCls:"bi-dynamic-date-combo bi-border bi-focus-shadow bi-border-radius",height:22,minDate:"1900-01-01",maxDate:"2099-12-31",format:"",allowEdit:!0},render:function(){var self=this,opts=this.options;this.storeTriggerValue="";var date=BI.getDate();return this.storeValue=opts.value,{type:"bi.htape",items:[{el:{type:"bi.icon_button",cls:"bi-trigger-icon-button date-change-h-font",width:opts.height,height:opts.height,ref:function(){self.changeIcon=this}},width:opts.height},{type:"bi.absolute",items:[{el:{type:"bi.combo",container:opts.container,ref:function(){self.combo=this},toggle:!1,isNeedAdjustHeight:!1,isNeedAdjustWidth:!1,el:{type:"bi.dynamic_date_trigger",min:opts.minDate,max:opts.maxDate,format:opts.format,allowEdit:opts.allowEdit,watermark:opts.watermark,height:opts.height,value:opts.value,ref:function(){self.trigger=this},listeners:[{eventName:BI.DynamicDateTrigger.EVENT_KEY_DOWN,action:function(){self.combo.isViewVisible()&&self.combo.hideView(),self.fireEvent(BI.DynamicDateCombo.EVENT_KEY_DOWN,arguments)}},{eventName:BI.DynamicDateTrigger.EVENT_STOP,action:function(){self.combo.isViewVisible()||self.combo.showView()}},{eventName:BI.DynamicDateTrigger.EVENT_FOCUS,action:function(){self.storeTriggerValue=self.trigger.getKey(),self.combo.isViewVisible()||self.combo.showView(),self.fireEvent(BI.DynamicDateCombo.EVENT_FOCUS)}},{eventName:BI.DynamicDateTrigger.EVENT_BLUR,action:function(){self.fireEvent(BI.DynamicDateCombo.EVENT_BLUR)}},{eventName:BI.DynamicDateTrigger.EVENT_ERROR,action:function(){self.storeValue={type:BI.DynamicDateCombo.Static,value:{year:date.getFullYear(),month:date.getMonth()+1}},self.fireEvent(BI.DynamicDateCombo.EVENT_ERROR)}},{eventName:BI.DynamicDateTrigger.EVENT_VALID,action:function(){self.fireEvent(BI.DynamicDateCombo.EVENT_VALID)}},{eventName:BI.DynamicDateTrigger.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicDateCombo.EVENT_CHANGE)}},{eventName:BI.DynamicDateTrigger.EVENT_CONFIRM,action:function(){if(!self.combo.isViewVisible()){var dateStore=self.storeTriggerValue,dateObj=self.trigger.getKey();BI.isNotEmptyString(dateObj)&&!BI.isEqual(dateObj,dateStore)?(self.storeValue=self.trigger.getValue(),self.setValue(self.trigger.getValue())):BI.isEmptyString(dateObj)&&(self.storeValue=null,self.trigger.setValue()),self._checkDynamicValue(self.storeValue),self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM)}}}]},adjustLength:this.constants.comboAdjustHeight,popup:{el:{type:"bi.dynamic_date_popup",behaviors:opts.behaviors,min:opts.minDate,max:opts.maxDate,value:opts.value,ref:function(){self.popup=this},listeners:[{eventName:BI.DynamicDatePopup.BUTTON_CLEAR_EVENT_CHANGE,action:function(){self.setValue(),self.combo.hideView(),self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicDatePopup.BUTTON_lABEL_EVENT_CHANGE,action:function(){var date=BI.getDate();self.setValue({type:BI.DynamicDateCombo.Static,value:{year:date.getFullYear(),month:date.getMonth()+1,day:date.getDate()}}),self.combo.hideView(),self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicDatePopup.BUTTON_OK_EVENT_CHANGE,action:function(){var value=self.popup.getValue();self._checkValue(value)&&self.setValue(value),self.combo.hideView(),self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicDatePopup.EVENT_CHANGE,action:function(){self.setValue(self.popup.getValue()),self.combo.hideView(),self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM)}}]},stopPropagation:!1},hideChecker:function(e){return 0===self.triggerBtn.element.find(e.target).length},listeners:[{eventName:BI.Combo.EVENT_BEFORE_POPUPVIEW,action:function(){self.popup.setValue(self.storeValue),self.fireEvent(BI.DynamicDateCombo.EVENT_BEFORE_POPUPVIEW)}}]},top:0,left:0,right:0,bottom:0},{el:{type:"bi.icon_button",cls:"bi-trigger-icon-button date-font",width:opts.height,height:opts.height,listeners:[{eventName:BI.IconButton.EVENT_CHANGE,action:function(){self.combo.isViewVisible()||self.combo.showView()}}],ref:function(){self.triggerBtn=this}},top:0,right:0}]}],ref:function(_ref){self.comboWrapper=_ref}}},mounted:function(){this._checkDynamicValue(this.storeValue)},_checkDynamicValue:function(v){var o=this.options,type=null;switch(BI.isNotNull(v)&&(type=v.type),type){case BI.DynamicDateCombo.Dynamic:this.changeIcon.setVisible(!0),this.comboWrapper.attr("items")[0].width=o.height,this.comboWrapper.resize();break;default:this.comboWrapper.attr("items")[0].width=0,this.comboWrapper.resize(),this.changeIcon.setVisible(!1)}},_checkValue:function(v){switch(v.type){case BI.DynamicDateCombo.Dynamic:return BI.isNotEmptyObject(v.value);case BI.DynamicDateCombo.Static:default:return!0}},_defaultState:function(){},setValue:function(v){this.storeValue=v,this.trigger.setValue(v),this._checkDynamicValue(v)},getValue:function(){return this.storeValue},getKey:function(){return this.trigger.getKey()},hidePopupView:function(){this.combo.hideView()}}),BI.DynamicDateCombo.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.DynamicDateCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.DynamicDateCombo.EVENT_FOCUS="EVENT_FOCUS",BI.DynamicDateCombo.EVENT_BLUR="EVENT_BLUR",BI.DynamicDateCombo.EVENT_CHANGE="EVENT_CHANGE",BI.DynamicDateCombo.EVENT_VALID="EVENT_VALID",BI.DynamicDateCombo.EVENT_ERROR="EVENT_ERROR",BI.DynamicDateCombo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.dynamic_date_combo",BI.DynamicDateCombo),BI.extend(BI.DynamicDateCombo,{Static:1,Dynamic:2}),BI.DynamicDateParamItem=BI.inherit(BI.Widget,{props:{baseCls:"bi-dynamic-date-param-item",dateType:BI.DynamicDateCard.TYPE.YEAR,value:0,offset:0,height:24},render:function(){var self=this,o=this.options;return{type:"bi.htape",items:[{el:{type:"bi.sign_editor",cls:"bi-border",height:22,validationChecker:function(v){return BI.isNaturalNumber(v)},value:o.value,ref:function(){self.editor=this},errorText:function(v){return BI.isEmptyString(v)?BI.i18nText("BI-Basic_Please_Input_Content"):BI.i18nText("BI-Please_Input_Natural_Number")},allowBlank:!1,listeners:[{eventName:BI.SignEditor.EVENT_CONFIRM,action:function(){self.fireEvent(BI.DynamicDateParamItem.EVENT_CHANGE)}}]},width:60},{el:{type:"bi.label",height:24,text:this._getText()},width:o.dateType===BI.DynamicDateCard.TYPE.WORK_DAY?60:20},{type:"bi.text_value_combo",height:24,items:[{text:BI.i18nText("BI-Basic_Front"),value:0},{text:BI.i18nText("BI-Basic_Behind"),value:1}],ref:function(){self.offsetCombo=this},container:null,value:o.offset,listeners:[{eventName:BI.TextValueCombo.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicDateParamItem.EVENT_CHANGE)}}]}]}},_getText:function(){var text="";switch(this.options.dateType){case BI.DynamicDateCard.TYPE.YEAR:text=BI.i18nText("BI-Basic_Year");break;case BI.DynamicDateCard.TYPE.QUARTER:text=BI.i18nText("BI-Basic_Single_Quarter");break;case BI.DynamicDateCard.TYPE.MONTH:text=BI.i18nText("BI-Basic_Month");break;case BI.DynamicDateCard.TYPE.WEEK:text=BI.i18nText("BI-Basic_Week");break;case BI.DynamicDateCard.TYPE.DAY:text=BI.i18nText("BI-Basic_Day");break;case BI.DynamicDateCard.TYPE.WORK_DAY:default:text=BI.i18nText("BI-Basic_Work_Day")}return text},setValue:function(v){v=v||{},v.value=v.value||0,v.offset=v.offset||0,this.editor.setValue(v.value),this.offsetCombo.setValue(v.offset)},getValue:function(){return{dateType:this.options.dateType,value:this.editor.getValue(),offset:this.offsetCombo.getValue()[0]}}}),BI.DynamicDateParamItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.dynamic_date_param_item",BI.DynamicDateParamItem),BI.DynamicDatePopup=BI.inherit(BI.Widget,{constants:{tabHeight:30,buttonHeight:24},props:{baseCls:"bi-dynamic-date-popup",width:248,height:344},_init:function(){BI.DynamicDatePopup.superclass._init.apply(this,arguments);var self=this,opts=this.options,c=this.constants;this.storeValue={type:BI.DynamicDateCombo.Static},BI.createWidget({element:this,type:"bi.vtape",items:[{el:this._getTabJson()},{el:{type:"bi.grid",items:[[{type:"bi.text_button",cls:"bi-high-light bi-split-top",shadow:!0,text:BI.i18nText("BI-Basic_Clear"),textHeight:c.buttonHeight-1,listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicDatePopup.BUTTON_CLEAR_EVENT_CHANGE)}}]},{type:"bi.text_button",cls:"bi-split-left bi-split-right bi-high-light bi-split-top",shadow:!0,textHeight:c.buttonHeight-1,text:BI.i18nText("BI-Multi_Date_Today"),ref:function(){self.textButton=this},listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicDatePopup.BUTTON_lABEL_EVENT_CHANGE)}}]},{type:"bi.text_button",cls:"bi-high-light bi-split-top",textHeight:c.buttonHeight-1,shadow:!0,text:BI.i18nText("BI-Basic_OK"),listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicDatePopup.BUTTON_OK_EVENT_CHANGE)}}]}]]},height:24}]}),this.setValue(opts.value)},_getTabJson:function(){var self=this,o=this.options;return{type:"bi.tab",ref:function(){self.dateTab=this},tab:{type:"bi.linear_segment",cls:"bi-split-bottom",height:this.constants.tabHeight,items:BI.createItems([{text:BI.i18nText("BI-Multi_Date_YMD"),value:BI.DynamicDateCombo.Static},{text:BI.i18nText("BI-Basic_Dynamic_Title"),value:BI.DynamicDateCombo.Dynamic}],{textAlign:"center"})},cardCreator:function(v){switch(v){case BI.DynamicDateCombo.Dynamic:return{type:"bi.dynamic_date_card",listeners:[{eventName:"EVENT_CHANGE",action:function(){self._setInnerValue(self.year,v)}}],ref:function(){self.dynamicPane=this}};case BI.DynamicDateCombo.Static:default:return{type:"bi.date_calendar_popup",behaviors:o.behaviors,min:self.options.min,max:self.options.max,listeners:[{eventName:BI.DateCalendarPopup.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicDatePopup.EVENT_CHANGE)}}],ref:function(){self.ymd=this}}}},listeners:[{eventName:BI.Tab.EVENT_CHANGE,action:function(){var v=self.dateTab.getSelect();switch(v){case BI.DynamicDateCombo.Static:var date=BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue());self.ymd.setValue({year:date.getFullYear(),month:date.getMonth()+1,day:date.getDate()}),self._setInnerValue();break;case BI.DynamicDateCombo.Dynamic:default:self.storeValue&&self.storeValue.type===BI.DynamicDateCombo.Dynamic?self.dynamicPane.setValue(self.storeValue.value):self.dynamicPane.setValue({year:0}),self._setInnerValue()}}}]}},_setInnerValue:function(){if(this.dateTab.getSelect()===BI.DynamicDateCombo.Static)this.textButton.setValue(BI.i18nText("BI-Multi_Date_Today")),this.textButton.setEnable(!0);else{var date=BI.DynamicDateHelper.getCalculation(this.dynamicPane.getValue());date=BI.print(date,"%Y-%X-%d"),this.textButton.setValue(date),this.textButton.setEnable(!1)}},_checkValueValid:function(value){return BI.isNull(value)||BI.isEmptyObject(value)||BI.isEmptyString(value)},setValue:function(v){this.storeValue=v;var self=this,type,value;switch(v=v||{},type=v.type||BI.DynamicDateCombo.Static,value=v.value||v,this.dateTab.setSelect(type),type){case BI.DynamicDateCombo.Dynamic:this.dynamicPane.setValue(value),self._setInnerValue();break;case BI.DynamicDateCombo.Static:default:if(this._checkValueValid(value)){var date=BI.getDate();this.ymd.setValue({year:date.getFullYear(),month:date.getMonth()+1,day:date.getDate()}),this.textButton.setValue(BI.i18nText("BI-Multi_Date_Today"))}else this.ymd.setValue(value),this.textButton.setValue(BI.i18nText("BI-Multi_Date_Today"));this.textButton.setEnable(!0)}},getValue:function(){return{type:this.dateTab.getSelect(),value:this.dateTab.getValue()}}}),BI.DynamicDatePopup.EVENT_CHANGE="EVENT_CHANGE",BI.DynamicDatePopup.BUTTON_OK_EVENT_CHANGE="BUTTON_OK_EVENT_CHANGE",BI.DynamicDatePopup.BUTTON_lABEL_EVENT_CHANGE="BUTTON_lABEL_EVENT_CHANGE",BI.DynamicDatePopup.BUTTON_CLEAR_EVENT_CHANGE="BUTTON_CLEAR_EVENT_CHANGE",BI.shortcut("bi.dynamic_date_popup",BI.DynamicDatePopup),BI.DynamicDateTrigger=BI.inherit(BI.Trigger,{_const:{hgap:4,vgap:2,yearLength:4,yearMonthLength:6,yearFullMonthLength:7,compareFormat:"%Y-%X-%d"},props:{extraCls:"bi-date-trigger",min:"1900-01-01",max:"2099-12-31",height:24,format:"",allowEdit:!0,watermark:""},_init:function(){BI.DynamicDateTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options,c=this._const;this.storeTriggerValue="",this.editor=BI.createWidget({type:"bi.sign_editor",height:o.height,validationChecker:function(v){var formatStr=self._getStandardDateStr(v),date=formatStr.match(/\d+/g);return!BI.isKey(o.format)&&self._autoAppend(v,date),self._dateCheck(formatStr)&&BI.checkDateLegal(formatStr)&&self._checkVoid({year:0|date[0],month:0|date[1],day:0|date[2]})},quitChecker:function(){return!1},hgap:c.hgap,vgap:c.vgap,allowBlank:!0,watermark:BI.isKey(o.watermark)?o.watermark:BI.i18nText("BI-Basic_Unrestricted"),errorText:function(){var str="";return BI.isKey(o.format)||(str=self.editor.isEditing()?BI.i18nText("BI-Date_Trigger_Error_Text"):BI.i18nText("BI-Year_Trigger_Invalid_Text")),str},title:BI.bind(this._getTitle,this)}),this.editor.on(BI.SignEditor.EVENT_KEY_DOWN,function(){self.fireEvent(BI.DynamicDateTrigger.EVENT_KEY_DOWN,arguments)}),this.editor.on(BI.SignEditor.EVENT_FOCUS,function(){self.storeTriggerValue=self.getKey(),self.fireEvent(BI.DynamicDateTrigger.EVENT_FOCUS)}),this.editor.on(BI.SignEditor.EVENT_BLUR,function(){self.fireEvent(BI.DynamicDateTrigger.EVENT_BLUR)}),this.editor.on(BI.SignEditor.EVENT_STOP,function(){self.fireEvent(BI.DynamicDateTrigger.EVENT_STOP)}),this.editor.on(BI.SignEditor.EVENT_VALID,function(){self.fireEvent(BI.DynamicDateTrigger.EVENT_VALID)}),this.editor.on(BI.SignEditor.EVENT_ERROR,function(){self.fireEvent(BI.DynamicDateTrigger.EVENT_ERROR)}),this.editor.on(BI.SignEditor.EVENT_CONFIRM,function(){var value=self.editor.getValue();if(BI.isNotNull(value)&&self.editor.setState(value),BI.isNotEmptyString(value)&&!BI.isEqual(self.storeTriggerValue,self.getKey())){var formatStr=self._getStandardDateStr(value),date=formatStr.match(/\d+/g);self.storeValue={type:BI.DynamicDateCombo.Static,value:{year:0|date[0],month:0|date[1],day:0|date[2]}}}self.fireEvent(BI.DynamicDateTrigger.EVENT_CONFIRM)}),this.editor.on(BI.SignEditor.EVENT_SPACE,function(){self.editor.isValid()&&self.editor.blur()}),this.editor.on(BI.SignEditor.EVENT_START,function(){self.fireEvent(BI.DynamicDateTrigger.EVENT_START)}),this.editor.on(BI.SignEditor.EVENT_CHANGE,function(){self.fireEvent(BI.DynamicDateTrigger.EVENT_CHANGE)}),BI.createWidget({type:"bi.htape",element:this,items:[{el:this.editor},{el:BI.createWidget(),width:24}]}),!o.allowEdit&&BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.text",title:BI.bind(this._getTitle,this)},left:0,right:24,top:0,bottom:0}]}),this.setValue(o.value)},_getTitle:function(){var storeValue=this.storeValue||{},type=storeValue.type||BI.DynamicDateCombo.Static,value=storeValue.value;switch(type){case BI.DynamicDateCombo.Dynamic:var text=this._getText(value),date=BI.getDate();date=BI.DynamicDateHelper.getCalculation(value);var dateStr=BI.print(date,this._getFormatString());return BI.isEmptyString(text)?dateStr:text+":"+dateStr;case BI.DynamicDateCombo.Static:default:return BI.isNull(value)||BI.isNull(value.day)?"":BI.print(BI.getDate(value.year,value.month-1,value.day),this._getFormatString())}},_getStandardDateStr:function(v){var c=this._const,result=[0,1,2],formatArray=this._getFormatString().match(/%./g);BI.each(formatArray,function(idx,v){switch(v){case"%Y":case"%y":result[0]=idx;break;case"%X":case"%x":result[1]=idx;break;case"%d":case"%e":default:result[2]=idx}});var date=BI.parseDateTime(v,this._getFormatString());BI.print(date,this._getFormatString())===v&&(v=BI.print(date,c.compareFormat),result=[0,1,2]);var dateArray=v.match(/\d+/g),newArray=[];return BI.each(dateArray,function(idx){newArray[idx]=dateArray[result[idx]]}),newArray.length===result.length&&2===newArray[0].length?BI.print(BI.parseDateTime(newArray.join("-"),c.compareFormat),c.compareFormat):newArray.join("-")},_getFormatString:function(){return this.options.format||this._const.compareFormat},_dateCheck:function(date){return BI.print(BI.parseDateTime(date,"%Y-%x-%d"),"%Y-%x-%d")===date||BI.print(BI.parseDateTime(date,"%Y-%X-%d"),"%Y-%X-%d")===date||BI.print(BI.parseDateTime(date,"%Y-%x-%e"),"%Y-%x-%e")===date||BI.print(BI.parseDateTime(date,"%Y-%X-%e"),"%Y-%X-%e")===date},_checkVoid:function(obj){return!BI.checkDateVoid(obj.year,obj.month,obj.day,this.options.min,this.options.max)[0]},_autoAppend:function(v,dateObj){if(BI.isNotNull(dateObj)&&BI.checkDateLegal(v))switch(v.length){case this._const.yearLength:this._yearCheck(v)&&this.editor.setValue(v+"-");break;case this._const.yearMonthLength:case this._const.yearFullMonthLength:var splitMonth=v.split("-")[1];(BI.isNotNull(splitMonth)&&2===splitMonth.length||this._monthCheck(v))&&this.editor.setValue(v+"-")}},_yearCheck:function(v){var date=BI.print(BI.parseDateTime(v,this._getFormatString()),this._const.compareFormat);return BI.print(BI.parseDateTime(v,"%Y"),"%Y")===v&&date>=this.options.min&&date<=this.options.max},_monthCheck:function(v){var date=BI.parseDateTime(v,this._getFormatString()),dateStr=BI.print(date,this._const.compareFormat);return date.getMonth()>=0&&(BI.print(BI.parseDateTime(v,"%Y-%X"),"%Y-%X")===v||BI.print(BI.parseDateTime(v,"%Y-%x"),"%Y-%x")===v)&&dateStr>=this.options.min&&dateStr<=this.options.max},_setInnerValue:function(date){var dateStr=BI.print(date,this._getFormatString());this.editor.setState(dateStr),this.editor.setValue(dateStr)},_getText:function(obj){function getPositionText(baseText,position){switch(position){case BI.DynamicDateCard.OFFSET.BEGIN:return baseText+BI.i18nText("BI-Basic_Begin_Start");case BI.DynamicDateCard.OFFSET.END:return baseText+BI.i18nText("BI-Basic_End_Stop");case BI.DynamicDateCard.OFFSET.CURRENT:default:return BI.i18nText("BI-Basic_Current_Day")}}var value="",endText="";return BI.isNotNull(obj.year)&&(0!==BI.parseInt(obj.year)&&(value+=Math.abs(obj.year)+BI.i18nText("BI-Basic_Year")+(obj.year<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),endText=getPositionText(BI.i18nText("BI-Basic_Year"),obj.position)),BI.isNotNull(obj.quarter)&&(0!==BI.parseInt(obj.quarter)&&(value+=Math.abs(obj.quarter)+BI.i18nText("BI-Basic_Single_Quarter")+(obj.quarter<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),endText=getPositionText(BI.i18nText("BI-Basic_Single_Quarter"),obj.position)),BI.isNotNull(obj.month)&&(0!==BI.parseInt(obj.month)&&(value+=Math.abs(obj.month)+BI.i18nText("BI-Basic_Month")+(obj.month<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),endText=getPositionText(BI.i18nText("BI-Basic_Month"),obj.position)),BI.isNotNull(obj.week)&&(0!==BI.parseInt(obj.week)&&(value+=Math.abs(obj.week)+BI.i18nText("BI-Basic_Week")+(obj.week<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),endText=getPositionText(BI.i18nText("BI-Basic_Week"),obj.position)),BI.isNotNull(obj.day)&&(0!==BI.parseInt(obj.day)&&(value+=Math.abs(obj.day)+BI.i18nText("BI-Basic_Day")+(obj.day<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),endText=1===BI.size(obj)?getPositionText(BI.i18nText("BI-Basic_Month"),obj.position):""),BI.isNotNull(obj.workDay)&&0!==BI.parseInt(obj.workDay)&&(value+=Math.abs(obj.workDay)+BI.i18nText("BI-Basic_Work_Day")+(obj.workDay<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),value+endText},setValue:function(v){var type,value,self=this,date=BI.getDate();switch(this.storeValue=v,BI.isNotNull(v)&&(type=v.type||BI.DynamicDateCombo.Static,value=v.value||v),type){case BI.DynamicDateCombo.Dynamic:var text=this._getText(value);date=BI.DynamicDateHelper.getCalculation(value),this._setInnerValue(date,text);break;case BI.DynamicDateCombo.Static:default:if(BI.isNull(value)||BI.isNull(value.day))this.editor.setState(""),this.editor.setValue("");else{var dateStr=BI.print(BI.getDate(value.year,value.month-1,value.day),this._getFormatString());this.editor.setState(dateStr),this.editor.setValue(dateStr)}}},getKey:function(){return this.editor.getValue()},getValue:function(){return this.storeValue}}),BI.DynamicDateTrigger.EVENT_BLUR="EVENT_BLUR",BI.DynamicDateTrigger.EVENT_FOCUS="EVENT_FOCUS",BI.DynamicDateTrigger.EVENT_START="EVENT_START",BI.DynamicDateTrigger.EVENT_STOP="EVENT_STOP",BI.DynamicDateTrigger.EVENT_CONFIRM="EVENT_CONFIRM",BI.DynamicDateTrigger.EVENT_CHANGE="EVENT_CHANGE", +BI.DynamicDateTrigger.EVENT_VALID="EVENT_VALID",BI.DynamicDateTrigger.EVENT_ERROR="EVENT_ERROR",BI.DynamicDateTrigger.EVENT_TRIGGER_CLICK="EVENT_TRIGGER_CLICK",BI.DynamicDateTrigger.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.shortcut("bi.dynamic_date_trigger",BI.DynamicDateTrigger),BI.DynamicDateTimeCombo=BI.inherit(BI.Single,{constants:{popupHeight:259,popupWidth:270,comboAdjustHeight:1,border:1},props:{baseCls:"bi-dynamic-date-combo bi-border bi-focus-shadow bi-border-radius",height:22,minDate:"1900-01-01",maxDate:"2099-12-31",format:"",allowEdit:!0},render:function(){var self=this,opts=this.options;this.storeTriggerValue="";var date=BI.getDate();return this.storeValue=opts.value,{type:"bi.htape",items:[{el:{type:"bi.icon_button",cls:"bi-trigger-icon-button date-change-h-font",width:opts.height,height:opts.height,ref:function(){self.changeIcon=this}},width:opts.height},{type:"bi.absolute",items:[{el:{type:"bi.combo",container:opts.container,ref:function(){self.combo=this},toggle:!1,isNeedAdjustHeight:!1,isNeedAdjustWidth:!1,el:{type:"bi.dynamic_date_time_trigger",min:opts.minDate,max:opts.maxDate,allowEdit:opts.allowEdit,watermark:opts.watermark,format:opts.format,height:opts.height,value:opts.value,ref:function(){self.trigger=this},listeners:[{eventName:BI.DynamicDateTimeTrigger.EVENT_KEY_DOWN,action:function(){self.combo.isViewVisible()&&self.combo.hideView(),self.fireEvent(BI.DynamicDateTimeCombo.EVENT_KEY_DOWN,arguments)}},{eventName:BI.DynamicDateTimeTrigger.EVENT_STOP,action:function(){self.combo.isViewVisible()||self.combo.showView()}},{eventName:BI.DynamicDateTimeTrigger.EVENT_TRIGGER_CLICK,action:function(){self.combo.toggle()}},{eventName:BI.DynamicDateTimeTrigger.EVENT_FOCUS,action:function(){self.storeTriggerValue=self.trigger.getKey(),self.combo.isViewVisible()||self.combo.showView(),self.fireEvent(BI.DynamicDateTimeCombo.EVENT_FOCUS)}},{eventName:BI.DynamicDateTimeTrigger.EVENT_BLUR,action:function(){self.fireEvent(BI.DynamicDateTimeCombo.EVENT_BLUR)}},{eventName:BI.DynamicDateTimeTrigger.EVENT_ERROR,action:function(){self.storeValue={type:BI.DynamicDateTimeCombo.Static,value:{year:date.getFullYear(),month:date.getMonth()+1}},self.fireEvent(BI.DynamicDateTimeCombo.EVENT_ERROR)}},{eventName:BI.DynamicDateTimeTrigger.EVENT_VALID,action:function(){self.fireEvent(BI.DynamicDateTimeCombo.EVENT_VALID)}},{eventName:BI.DynamicDateTimeTrigger.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicDateTimeCombo.EVENT_CHANGE)}},{eventName:BI.DynamicDateTimeTrigger.EVENT_CONFIRM,action:function(){if(!self.combo.isViewVisible()){var dateStore=self.storeTriggerValue,dateObj=self.trigger.getKey();BI.isNotEmptyString(dateObj)&&!BI.isEqual(dateObj,dateStore)?(self.storeValue=self.trigger.getValue(),self.setValue(self.trigger.getValue())):BI.isEmptyString(dateObj)&&(self.storeValue=null,self.trigger.setValue()),self._checkDynamicValue(self.storeValue),self.fireEvent(BI.DynamicDateTimeCombo.EVENT_CONFIRM)}}}]},adjustLength:this.constants.comboAdjustHeight,popup:{el:{type:"bi.dynamic_date_time_popup",behaviors:opts.behaviors,min:opts.minDate,max:opts.maxDate,value:opts.value,ref:function(){self.popup=this},listeners:[{eventName:BI.DynamicDateTimePopup.BUTTON_CLEAR_EVENT_CHANGE,action:function(){self.setValue(),self.combo.hideView(),self.fireEvent(BI.DynamicDateTimeCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicDateTimePopup.BUTTON_lABEL_EVENT_CHANGE,action:function(){var date=BI.getDate();self.setValue({type:BI.DynamicDateTimeCombo.Static,value:{year:date.getFullYear(),month:date.getMonth()+1,day:date.getDate(),hour:0,minute:0,second:0}}),self.combo.hideView(),self.fireEvent(BI.DynamicDateTimeCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicDateTimePopup.BUTTON_OK_EVENT_CHANGE,action:function(){var value=self.popup.getValue();self._checkValue(value)&&self.setValue(value),self.combo.hideView(),self.fireEvent(BI.DynamicDateTimeCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicDateTimePopup.EVENT_CHANGE,action:function(){self.setValue(self.popup.getValue()),self.combo.hideView(),self.fireEvent(BI.DynamicDateTimeCombo.EVENT_CONFIRM)}}]},stopPropagation:!1},listeners:[{eventName:BI.Combo.EVENT_BEFORE_POPUPVIEW,action:function(){self.popup.setValue(self.storeValue),self.fireEvent(BI.DynamicDateTimeCombo.EVENT_BEFORE_POPUPVIEW)}}],hideChecker:function(e){return 0===self.triggerBtn.element.find(e.target).length}},top:0,left:0,right:0,bottom:0},{el:{type:"bi.icon_button",cls:"bi-trigger-icon-button date-font",width:opts.height,height:opts.height,listeners:[{eventName:BI.IconButton.EVENT_CHANGE,action:function(){self.combo.isViewVisible()||self.combo.showView()}}],ref:function(){self.triggerBtn=this}},top:0,right:0}]}],ref:function(_ref){self.comboWrapper=_ref}}},mounted:function(){this._checkDynamicValue(this.storeValue)},_checkDynamicValue:function(v){var o=this.options,type=null;switch(BI.isNotNull(v)&&(type=v.type),type){case BI.DynamicDateTimeCombo.Dynamic:this.changeIcon.setVisible(!0),this.comboWrapper.attr("items")[0].width=o.height,this.comboWrapper.resize();break;default:this.comboWrapper.attr("items")[0].width=0,this.comboWrapper.resize(),this.changeIcon.setVisible(!1)}},_checkValue:function(v){switch(v.type){case BI.DynamicDateCombo.Dynamic:return BI.isNotEmptyObject(v.value);case BI.DynamicDateCombo.Static:default:return!0}},setValue:function(v){this.storeValue=v,this.trigger.setValue(v),this._checkDynamicValue(v)},getValue:function(){return this.storeValue},getKey:function(){return this.trigger.getKey()},hidePopupView:function(){this.combo.hideView()},isValid:function(){return this.trigger.isValid()}}),BI.DynamicDateTimeCombo.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.DynamicDateTimeCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.DynamicDateTimeCombo.EVENT_FOCUS="EVENT_FOCUS",BI.DynamicDateTimeCombo.EVENT_BLUR="EVENT_BLUR",BI.DynamicDateTimeCombo.EVENT_CHANGE="EVENT_CHANGE",BI.DynamicDateTimeCombo.EVENT_VALID="EVENT_VALID",BI.DynamicDateTimeCombo.EVENT_ERROR="EVENT_ERROR",BI.DynamicDateTimeCombo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.dynamic_date_time_combo",BI.DynamicDateTimeCombo),BI.extend(BI.DynamicDateTimeCombo,{Static:1,Dynamic:2}),BI.DynamicDateTimePopup=BI.inherit(BI.Widget,{constants:{tabHeight:30,buttonHeight:24},props:{baseCls:"bi-dynamic-date-time-popup",width:248,height:385},_init:function(){BI.DynamicDateTimePopup.superclass._init.apply(this,arguments);var self=this,opts=this.options,c=this.constants;this.storeValue={type:BI.DynamicDateCombo.Static},BI.createWidget({element:this,type:"bi.vtape",items:[{el:this._getTabJson()},{el:{type:"bi.grid",items:[[{type:"bi.text_button",cls:"bi-high-light bi-split-top",textHeight:c.buttonHeight-1,shadow:!0,text:BI.i18nText("BI-Basic_Clear"),listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicDateTimePopup.BUTTON_CLEAR_EVENT_CHANGE)}}]},{type:"bi.text_button",cls:"bi-split-left bi-split-right bi-high-light bi-split-top",textHeight:c.buttonHeight-1,shadow:!0,text:BI.i18nText("BI-Multi_Date_Today"),ref:function(){self.textButton=this},listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicDateTimePopup.BUTTON_lABEL_EVENT_CHANGE)}}]},{type:"bi.text_button",cls:"bi-high-light bi-split-top",textHeight:c.buttonHeight-1,shadow:!0,text:BI.i18nText("BI-Basic_OK"),listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicDateTimePopup.BUTTON_OK_EVENT_CHANGE)}}]}]]},height:24}]}),this.setValue(opts.value)},_getTabJson:function(){var self=this,o=this.options;return{type:"bi.tab",ref:function(){self.dateTab=this},tab:{type:"bi.linear_segment",cls:"bi-split-bottom",height:this.constants.tabHeight,items:BI.createItems([{text:BI.i18nText("BI-Multi_Date_YMD"),value:BI.DynamicDateCombo.Static},{text:BI.i18nText("BI-Basic_Dynamic_Title"),value:BI.DynamicDateCombo.Dynamic}],{textAlign:"center"})},cardCreator:function(v){switch(v){case BI.DynamicDateCombo.Dynamic:return{type:"bi.dynamic_date_card",listeners:[{eventName:"EVENT_CHANGE",action:function(){self._setInnerValue(self.year,v)}}],ref:function(){self.dynamicPane=this}};case BI.DynamicDateCombo.Static:default:return{type:"bi.vtape",items:[{type:"bi.date_calendar_popup",behaviors:o.behaviors,min:self.options.min,max:self.options.max,ref:function(){self.ymd=this}},{el:{type:"bi.dynamic_date_time_select",cls:"bi-split-top",ref:function(){self.timeSelect=this}},height:40}]}}},listeners:[{eventName:BI.Tab.EVENT_CHANGE,action:function(){var v=self.dateTab.getSelect();switch(v){case BI.DynamicDateCombo.Static:var date=BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue());self.ymd.setValue({year:date.getFullYear(),month:date.getMonth()+1,day:date.getDate()}),self.timeSelect.setValue(),self._setInnerValue();break;case BI.DynamicDateCombo.Dynamic:default:self.storeValue&&self.storeValue.type===BI.DynamicDateCombo.Dynamic?self.dynamicPane.setValue(self.storeValue.value):self.dynamicPane.setValue({year:0}),self._setInnerValue()}}}]}},_setInnerValue:function(){if(this.dateTab.getSelect()===BI.DynamicDateCombo.Static)this.textButton.setValue(BI.i18nText("BI-Multi_Date_Today")),this.textButton.setEnable(!0);else{var date=BI.DynamicDateHelper.getCalculation(this.dynamicPane.getValue());date=BI.print(date,"%Y-%X-%d"),this.textButton.setValue(date),this.textButton.setEnable(!1)}},_checkValueValid:function(value){return BI.isNull(value)||BI.isEmptyObject(value)||BI.isEmptyString(value)},setValue:function(v){this.storeValue=v;var self=this,type,value;switch(v=v||{},type=v.type||BI.DynamicDateCombo.Static,value=v.value||v,this.dateTab.setSelect(type),type){case BI.DynamicDateCombo.Dynamic:this.dynamicPane.setValue(value),self._setInnerValue();break;case BI.DynamicDateCombo.Static:default:if(this._checkValueValid(value)){var date=BI.getDate();this.ymd.setValue({year:date.getFullYear(),month:date.getMonth()+1,day:date.getDate()}),this.timeSelect.setValue(),this.textButton.setValue(BI.i18nText("BI-Multi_Date_Today"))}else this.ymd.setValue(value),this.timeSelect.setValue({hour:value.hour,minute:value.minute,second:value.second}),this.textButton.setValue(BI.i18nText("BI-Multi_Date_Today"));this.textButton.setEnable(!0)}},getValue:function(){var type=this.dateTab.getSelect();return{type:type,value:type===BI.DynamicDateTimeCombo.Static?BI.extend(this.ymd.getValue(),this.timeSelect.getValue()):this.dynamicPane.getValue()}}}),BI.DynamicDateTimePopup.EVENT_CHANGE="EVENT_CHANGE",BI.DynamicDateTimePopup.BUTTON_OK_EVENT_CHANGE="BUTTON_OK_EVENT_CHANGE",BI.DynamicDateTimePopup.BUTTON_lABEL_EVENT_CHANGE="BUTTON_lABEL_EVENT_CHANGE",BI.DynamicDateTimePopup.BUTTON_CLEAR_EVENT_CHANGE="BUTTON_CLEAR_EVENT_CHANGE",BI.shortcut("bi.dynamic_date_time_popup",BI.DynamicDateTimePopup),BI.DynamicDateTimeSelect=BI.inherit(BI.Widget,{props:{baseCls:"bi-date-time-select"},render:function(){var self=this;return{type:"bi.center_adapt",items:[{type:"bi.vertical_adapt",items:[{el:{type:"bi.number_editor",ref:function(){self.hour=this},validationChecker:function(v){return BI.isNaturalNumber(v)&&BI.parseInt(v)<24},errorText:function(v){return BI.isNumeric(v)?BI.i18nText("BI-Basic_Input_From_To_Number",'"00-23"'):BI.i18nText("BI-Numerical_Interval_Input_Data")},listeners:[{eventName:BI.SignEditor.EVENT_CONFIRM,action:function(){var value=this.getValue();self._checkHour(value),this.setValue(self._formatValueToDoubleDigit(value)),self.fireEvent(BI.DynamicDateTimeSelect.EVENT_CONFIRM)}},{eventName:BI.SignEditor.EVENT_CHANGE,action:function(){var value=self._autoSwitch(this.getValue(),BI.DynamicDateTimeSelect.HOUR);this.setValue(value)}}],width:60,height:24}},{type:"bi.label",text:":",width:20},{type:"bi.number_editor",ref:function(){self.minute=this},validationChecker:function(v){return BI.isNaturalNumber(v)&&BI.parseInt(v)<60},errorText:function(v){return BI.isNumeric(v)?BI.i18nText("BI-Basic_Input_From_To_Number",'"00-59"'):BI.i18nText("BI-Numerical_Interval_Input_Data")},listeners:[{eventName:BI.SignEditor.EVENT_CONFIRM,action:function(){var value=this.getValue();self._checkMinute(value),this.setValue(self._formatValueToDoubleDigit(value),BI.DynamicDateTimeSelect.MINUTE),self.fireEvent(BI.DynamicDateTimeSelect.EVENT_CONFIRM)}},{eventName:BI.SignEditor.EVENT_CHANGE,action:function(){var value=self._autoSwitch(this.getValue(),BI.DynamicDateTimeSelect.MINUTE);this.setValue(value)}}],width:60,height:24},{type:"bi.label",text:":",width:20},{type:"bi.number_editor",ref:function(){self.second=this},validationChecker:function(v){return BI.isNaturalNumber(v)&&BI.parseInt(v)<60},errorText:function(v){return BI.isNumeric(v)?BI.i18nText("BI-Basic_Input_From_To_Number",'"00-59"'):BI.i18nText("BI-Numerical_Interval_Input_Data")},listeners:[{eventName:BI.SignEditor.EVENT_CONFIRM,action:function(){var value=this.getValue();self._checkSecond(value),this.setValue(self._formatValueToDoubleDigit(value)),self.fireEvent(BI.DynamicDateTimeSelect.EVENT_CONFIRM)}}],width:60,height:24}]}]}},_checkBorder:function(v){v=v||{},this._checkHour(v.hour),this._checkMinute(v.minute),this._checkSecond(v.second)},_checkHour:function(value){this.hour.setDownEnable(BI.parseInt(value)>0),this.hour.setUpEnable(BI.parseInt(value)<23)},_checkMinute:function(value){this.minute.setDownEnable(BI.parseInt(value)>0),this.minute.setUpEnable(BI.parseInt(value)<59)},_checkSecond:function(value){this.second.setDownEnable(BI.parseInt(value)>0),this.second.setUpEnable(BI.parseInt(value)<59)},_autoSwitch:function(v,type){var limit=0,value=v+"";switch(type){case BI.DynamicDateTimeSelect.HOUR:limit=2;break;case BI.DynamicDateTimeSelect.MINUTE:limit=5}if(1===value.length&&BI.parseInt(value)>limit&&(value="0"+value),2===value.length)switch(type){case BI.DynamicDateTimeSelect.HOUR:this.hour.isEditing()&&this.minute.focus();break;case BI.DynamicDateTimeSelect.MINUTE:this.minute.isEditing()&&this.second.focus();break;case BI.DynamicDateTimeSelect.SECOND:}return value},_formatValueToDoubleDigit:function(v){(BI.isNull(v)||BI.isEmptyString(v))&&(v=0);var value=BI.parseInt(v);return value<10&&(value="0"+value),value},_assertValue:function(v){return v=v||{},v.hour=this._formatValueToDoubleDigit(v.hour)||"00",v.minute=this._formatValueToDoubleDigit(v.minute)||"00",v.second=this._formatValueToDoubleDigit(v.second)||"00",v},getValue:function(){return{hour:BI.parseInt(this.hour.getValue()),minute:BI.parseInt(this.minute.getValue()),second:BI.parseInt(this.second.getValue())}},setValue:function(v){v=this._assertValue(v),this.hour.setValue(v.hour),this.minute.setValue(v.minute),this.second.setValue(v.second),this._checkBorder(v)}}),BI.DynamicDateTimeSelect.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.dynamic_date_time_select",BI.DynamicDateTimeSelect),BI.extend(BI.DynamicDateTimeSelect,{HOUR:1,MINUTE:2,SECOND:3}),BI.DynamicDateTimeTrigger=BI.inherit(BI.Trigger,{_const:{hgap:4,vgap:2,yearLength:4,yearMonthLength:6,yearFullMonthLength:7,compareFormat:"%Y-%X-%d %H:%M:%S"},props:{extraCls:"bi-date-time-trigger",min:"1900-01-01",max:"2099-12-31",height:24,format:"",allowEdit:!0,watermark:""},_init:function(){BI.DynamicDateTimeTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options,c=this._const;this.storeTriggerValue="",this.editor=BI.createWidget({type:"bi.sign_editor",height:o.height,validationChecker:function(v){var formatStr=self._getStandardDateStr(v),date=formatStr.match(/\d+/g);return!BI.isKey(o.format)&&self._autoAppend(v,date),self._dateCheck(formatStr)&&BI.checkDateLegal(formatStr)&&self._checkVoid({year:0|date[0],month:0|date[1],day:0|date[2]})},quitChecker:function(){return!1},hgap:c.hgap,vgap:c.vgap,allowBlank:!0,watermark:BI.isKey(o.watermark)?o.watermark:BI.i18nText("BI-Basic_Unrestricted"),errorText:function(){var str="";return BI.isKey(o.format)||(str=self.editor.isEditing()?BI.i18nText("BI-Basic_Date_Time_Error_Text"):BI.i18nText("BI-Year_Trigger_Invalid_Text")),str},title:BI.bind(this._getTitle,this)}),this.editor.on(BI.SignEditor.EVENT_KEY_DOWN,function(){self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_KEY_DOWN,arguments)}),this.editor.on(BI.SignEditor.EVENT_FOCUS,function(){self.storeTriggerValue=self.getKey(),self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_FOCUS)}),this.editor.on(BI.SignEditor.EVENT_BLUR,function(){self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_BLUR)}),this.editor.on(BI.SignEditor.EVENT_STOP,function(){self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_STOP)}),this.editor.on(BI.SignEditor.EVENT_VALID,function(){self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_VALID)}),this.editor.on(BI.SignEditor.EVENT_ERROR,function(){self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_ERROR)}),this.editor.on(BI.SignEditor.EVENT_CONFIRM,function(){var value=self.editor.getValue();if(BI.isNotNull(value)&&self.editor.setState(value),BI.isNotEmptyString(value)&&!BI.isEqual(self.storeTriggerValue,self.getKey())){var formatStr=self._getStandardDateStr(value),date=formatStr.match(/\d+/g);self.storeValue={type:BI.DynamicDateCombo.Static,value:{year:0|date[0],month:0|date[1],day:0|date[2],hour:0|date[3],minute:0|date[4],second:0|date[5]}}}self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_CONFIRM)}),this.editor.on(BI.SignEditor.EVENT_START,function(){self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_START)}),this.editor.on(BI.SignEditor.EVENT_CHANGE,function(){self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_CHANGE)}),BI.createWidget({type:"bi.htape",element:this,items:[{el:this.editor},{el:BI.createWidget(),width:24}]}),!o.allowEdit&&BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.text",title:BI.bind(this._getTitle,this)},left:0,right:24,top:0,bottom:0}]}),this.setValue(o.value)},_getTitle:function(){var storeValue=this.storeValue||{},type=storeValue.type||BI.DynamicDateCombo.Static,value=storeValue.value;switch(type){case BI.DynamicDateCombo.Dynamic:var text=this._getText(value),date=BI.DynamicDateHelper.getCalculation(value),dateStr=BI.print(date,this._getFormatString());return BI.isEmptyString(text)?dateStr:text+":"+dateStr;case BI.DynamicDateCombo.Static:default:return BI.isNull(value)||BI.isNull(value.day)?"":BI.print(BI.getDate(value.year,value.month-1,value.day,value.hour||0,value.minute||0,value.second||0),this._getFormatString())}},_getStandardDateStr:function(v){var c=this._const,result=[],hasSecond=!1,formatArray=this._getFormatString().match(/%./g);BI.each(formatArray,function(idx,v){switch(v){case"%Y":case"%y":result[0]=idx;break;case"%X":case"%x":result[1]=idx;break;case"%d":case"%e":result[2]=idx;break;case"%S":hasSecond=!0}});var date=BI.parseDateTime(v,this._getFormatString());BI.print(date,this._getFormatString())===v&&(v=BI.print(date,c.compareFormat),result=[0,1,2]);var dateArray=v.match(/\d+/g)||[],newArray=[];BI.each(dateArray.slice(0,3),function(idx){newArray[idx]=dateArray[result[idx]]});var suffixArray=dateArray.slice(3);BI.each(suffixArray,function(idx,v){BI.isNumeric(v)&&1===v.length&&(suffixArray[idx]="0"+v)}),2!==suffixArray.length||hasSecond||suffixArray.push("00");var suffixString=suffixArray.join(":"),dateString=newArray.slice(0,3).join("-");return BI.isNotEmptyString(suffixString)&&(dateString+=" "+suffixString),dateString},_getFormatString:function(){return this.options.format||this._const.compareFormat},_dateCheck:function(date){return BI.print(BI.parseDateTime(date,"%Y-%x-%d %H:%M:%S"),"%Y-%x-%d %H:%M:%S")===date||BI.print(BI.parseDateTime(date,"%Y-%X-%d %H:%M:%S"),"%Y-%X-%d %H:%M:%S")===date||BI.print(BI.parseDateTime(date,"%Y-%x-%e %H:%M:%S"),"%Y-%x-%e %H:%M:%S")===date||BI.print(BI.parseDateTime(date,"%Y-%X-%e %H:%M:%S"),"%Y-%X-%e %H:%M:%S")===date||BI.print(BI.parseDateTime(date,"%Y-%x-%d"),"%Y-%x-%d")===date||BI.print(BI.parseDateTime(date,"%Y-%X-%d"),"%Y-%X-%d")===date||BI.print(BI.parseDateTime(date,"%Y-%x-%e"),"%Y-%x-%e")===date||BI.print(BI.parseDateTime(date,"%Y-%X-%e"),"%Y-%X-%e")===date},_checkVoid:function(obj){return!BI.checkDateVoid(obj.year,obj.month,obj.day,this.options.min,this.options.max)[0]},_autoAppend:function(v,dateObj){if(BI.isNotNull(dateObj)&&BI.checkDateLegal(v))switch(v.length){case this._const.yearLength:this._yearCheck(v)&&this.editor.setValue(v+"-");break;case this._const.yearMonthLength:case this._const.yearFullMonthLength:var splitMonth=v.split("-")[1];(BI.isNotNull(splitMonth)&&2===splitMonth.length||this._monthCheck(v))&&this.editor.setValue(v+"-")}},_yearCheck:function(v){var date=BI.print(BI.parseDateTime(v,"%Y-%X-%d"),"%Y-%X-%d");return BI.print(BI.parseDateTime(v,"%Y"),"%Y")===v&&date>=this.options.min&&date<=this.options.max},_monthCheck:function(v){var date=BI.parseDateTime(v,"%Y-%X-%d"),dateStr=BI.print(date,"%Y-%X-%d");return date.getMonth()>0&&(BI.print(BI.parseDateTime(v,"%Y-%X"),"%Y-%X")===v||BI.print(BI.parseDateTime(v,"%Y-%x"),"%Y-%x")===v)&&dateStr>=this.options.min&&dateStr<=this.options.max},_setInnerValue:function(date){var dateStr=BI.print(date,this._getFormatString());this.editor.setState(dateStr),this.editor.setValue(dateStr)},_getText:function(obj){function getPositionText(baseText,position){switch(position){case BI.DynamicDateCard.OFFSET.BEGIN:return baseText+BI.i18nText("BI-Basic_Begin_Start");case BI.DynamicDateCard.OFFSET.END:return baseText+BI.i18nText("BI-Basic_End_Stop");case BI.DynamicDateCard.OFFSET.CURRENT:default:return BI.i18nText("BI-Basic_Current_Day")}}var value="",endText="";return BI.isNotNull(obj.year)&&(0!==BI.parseInt(obj.year)&&(value+=Math.abs(obj.year)+BI.i18nText("BI-Basic_Year")+(obj.year<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),endText=getPositionText(BI.i18nText("BI-Basic_Year"),obj.position)),BI.isNotNull(obj.quarter)&&(0!==BI.parseInt(obj.quarter)&&(value+=Math.abs(obj.quarter)+BI.i18nText("BI-Basic_Single_Quarter")+(obj.quarter<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),endText=getPositionText(BI.i18nText("BI-Basic_Single_Quarter"),obj.position)),BI.isNotNull(obj.month)&&(0!==BI.parseInt(obj.month)&&(value+=Math.abs(obj.month)+BI.i18nText("BI-Basic_Month")+(obj.month<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),endText=getPositionText(BI.i18nText("BI-Basic_Month"),obj.position)),BI.isNotNull(obj.week)&&(0!==BI.parseInt(obj.week)&&(value+=Math.abs(obj.week)+BI.i18nText("BI-Basic_Week")+(obj.week<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),endText=getPositionText(BI.i18nText("BI-Basic_Week"),obj.position)),BI.isNotNull(obj.day)&&(0!==BI.parseInt(obj.day)&&(value+=Math.abs(obj.day)+BI.i18nText("BI-Basic_Day")+(obj.day<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),endText=1===BI.size(obj)?getPositionText(BI.i18nText("BI-Basic_Month"),obj.position):""),BI.isNotNull(obj.workDay)&&0!==BI.parseInt(obj.workDay)&&(value+=Math.abs(obj.workDay)+BI.i18nText("BI-Basic_Work_Day")+(obj.workDay<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),value+endText},setValue:function(v){var type,value,self=this,date=BI.getDate();switch(this.storeValue=v,BI.isNotNull(v)&&(type=v.type||BI.DynamicDateCombo.Static,value=v.value||v),type){case BI.DynamicDateCombo.Dynamic:var text=this._getText(value);date=BI.DynamicDateHelper.getCalculation(value),this._setInnerValue(date,text);break;case BI.DynamicDateCombo.Static:default:if(BI.isNull(value)||BI.isNull(value.day))this.editor.setState(""),this.editor.setValue("");else{var dateStr=BI.print(BI.getDate(value.year,value.month-1,value.day,value.hour||0,value.minute||0,value.second||0),this._getFormatString());this.editor.setState(dateStr),this.editor.setValue(dateStr)}}},getKey:function(){return this.editor.getValue()},getValue:function(){return this.storeValue},isValid:function(){return this.editor.isValid()}}),BI.DynamicDateTimeTrigger.EVENT_BLUR="EVENT_BLUR",BI.DynamicDateTimeTrigger.EVENT_FOCUS="EVENT_FOCUS",BI.DynamicDateTimeTrigger.EVENT_START="EVENT_START",BI.DynamicDateTimeTrigger.EVENT_STOP="EVENT_STOP",BI.DynamicDateTimeTrigger.EVENT_CONFIRM="EVENT_CONFIRM",BI.DynamicDateTimeTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.DynamicDateTimeTrigger.EVENT_VALID="EVENT_VALID",BI.DynamicDateTimeTrigger.EVENT_ERROR="EVENT_ERROR",BI.DynamicDateTimeTrigger.EVENT_TRIGGER_CLICK="EVENT_TRIGGER_CLICK",BI.DynamicDateTimeTrigger.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.shortcut("bi.dynamic_date_time_trigger",BI.DynamicDateTimeTrigger),BI.SearchEditor=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.SearchEditor.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-search-editor bi-border bi-focus-shadow",height:24,errorText:"",watermark:BI.i18nText("BI-Basic_Search"),validationChecker:BI.emptyFn,quitChecker:BI.emptyFn})},_init:function(){this.options.height-=2,BI.SearchEditor.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget({type:"bi.editor",height:o.height,watermark:o.watermark,allowBlank:!0,hgap:1,errorText:o.errorText,validationChecker:o.validationChecker,quitChecker:o.quitChecker,value:o.value}),this.clear=BI.createWidget({type:"bi.icon_button",stopEvent:!0,cls:"close-font"}),this.clear.on(BI.IconButton.EVENT_CHANGE,function(){self.setValue(""),self.fireEvent(BI.Controller.EVENT_CHANGE,BI.Events.STOPEDIT),self.fireEvent(BI.SearchEditor.EVENT_CHANGE),self.fireEvent(BI.SearchEditor.EVENT_CLEAR)}),BI.createWidget({element:this,type:"bi.htape",items:[{el:{type:"bi.icon_label",cls:"search-font"},width:24},{el:self.editor},{el:this.clear,width:24}]}),this.editor.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editor.on(BI.Editor.EVENT_FOCUS,function(){self.fireEvent(BI.SearchEditor.EVENT_FOCUS)}),this.editor.on(BI.Editor.EVENT_BLUR,function(){self.fireEvent(BI.SearchEditor.EVENT_BLUR)}),this.editor.on(BI.Editor.EVENT_CLICK,function(){self.fireEvent(BI.SearchEditor.EVENT_CLICK)}),this.editor.on(BI.Editor.EVENT_CHANGE,function(){self._checkClear(),self.fireEvent(BI.SearchEditor.EVENT_CHANGE)}),this.editor.on(BI.Editor.EVENT_KEY_DOWN,function(v){self.fireEvent(BI.SearchEditor.EVENT_KEY_DOWN,v)}),this.editor.on(BI.Editor.EVENT_SPACE,function(){self.fireEvent(BI.SearchEditor.EVENT_SPACE)}),this.editor.on(BI.Editor.EVENT_BACKSPACE,function(){self.fireEvent(BI.SearchEditor.EVENT_BACKSPACE)}),this.editor.on(BI.Editor.EVENT_VALID,function(){self.fireEvent(BI.SearchEditor.EVENT_VALID)}),this.editor.on(BI.Editor.EVENT_ERROR,function(){self.fireEvent(BI.SearchEditor.EVENT_ERROR)}),this.editor.on(BI.Editor.EVENT_ENTER,function(){self.fireEvent(BI.SearchEditor.EVENT_ENTER)}),this.editor.on(BI.Editor.EVENT_RESTRICT,function(){self.fireEvent(BI.SearchEditor.EVENT_RESTRICT)}),this.editor.on(BI.Editor.EVENT_EMPTY,function(){self._checkClear(),self.fireEvent(BI.SearchEditor.EVENT_EMPTY)}),this.editor.on(BI.Editor.EVENT_REMOVE,function(){self.fireEvent(BI.SearchEditor.EVENT_REMOVE)}),this.editor.on(BI.Editor.EVENT_CONFIRM,function(){self.fireEvent(BI.SearchEditor.EVENT_CONFIRM)}),this.editor.on(BI.Editor.EVENT_CHANGE_CONFIRM,function(){self.fireEvent(BI.SearchEditor.EVENT_CHANGE_CONFIRM)}),this.editor.on(BI.Editor.EVENT_START,function(){self.fireEvent(BI.SearchEditor.EVENT_START)}),this.editor.on(BI.Editor.EVENT_PAUSE,function(){self.fireEvent(BI.SearchEditor.EVENT_PAUSE)}),this.editor.on(BI.Editor.EVENT_STOP,function(){self.fireEvent(BI.SearchEditor.EVENT_STOP)}),this.clear.invisible()},_checkClear:function(){this.getValue()?this.clear.visible():this.clear.invisible()},setWaterMark:function(v){this.options.watermark=v,this.editor.setWaterMark(v)},focus:function(){this.editor.focus()},blur:function(){this.editor.blur()},getValue:function(){if(this.isValid()){var res=this.editor.getValue().match(/[\S]+/g);return BI.isNull(res)?"":res[res.length-1]}},getKeywords:function(){var val=this.editor.getLastChangedValue(),keywords=val.match(/[\S]+/g);return BI.isEndWithBlank(val)?keywords.concat([" "]):keywords},getLastValidValue:function(){return this.editor.getLastValidValue()},getLastChangedValue:function(){return this.editor.getLastChangedValue()},setValue:function(v){this.editor.setValue(v),BI.isKey(v)&&this.clear.visible()},isEditing:function(){return this.editor.isEditing()},isValid:function(){return this.editor.isValid()}}),BI.SearchEditor.EVENT_CHANGE="EVENT_CHANGE",BI.SearchEditor.EVENT_FOCUS="EVENT_FOCUS",BI.SearchEditor.EVENT_BLUR="EVENT_BLUR",BI.SearchEditor.EVENT_CLICK="EVENT_CLICK",BI.SearchEditor.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.SearchEditor.EVENT_SPACE="EVENT_SPACE",BI.SearchEditor.EVENT_BACKSPACE="EVENT_BACKSPACE",BI.SearchEditor.EVENT_CLEAR="EVENT_CLEAR",BI.SearchEditor.EVENT_START="EVENT_START",BI.SearchEditor.EVENT_PAUSE="EVENT_PAUSE",BI.SearchEditor.EVENT_STOP="EVENT_STOP",BI.SearchEditor.EVENT_CONFIRM="EVENT_CONFIRM",BI.SearchEditor.EVENT_CHANGE_CONFIRM="EVENT_CHANGE_CONFIRM",BI.SearchEditor.EVENT_VALID="EVENT_VALID",BI.SearchEditor.EVENT_ERROR="EVENT_ERROR",BI.SearchEditor.EVENT_ENTER="EVENT_ENTER",BI.SearchEditor.EVENT_RESTRICT="EVENT_RESTRICT",BI.SearchEditor.EVENT_REMOVE="EVENT_REMOVE",BI.SearchEditor.EVENT_EMPTY="EVENT_EMPTY",BI.shortcut("bi.search_editor",BI.SearchEditor),BI.SmallSearchEditor=BI.inherit(BI.SearchEditor,{_defaultConfig:function(){var conf=BI.SmallSearchEditor.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-small-search-editor",height:20})},_init:function(){BI.SmallSearchEditor.superclass._init.apply(this,arguments)}}),BI.shortcut("bi.small_search_editor",BI.SmallSearchEditor),BI.TextEditor=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.TextEditor.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-text-editor bi-border bi-focus-shadow",hgap:4,vgap:2,lgap:0,rgap:0,tgap:0,bgap:0,validationChecker:BI.emptyFn,quitChecker:BI.emptyFn,allowBlank:!1,watermark:"",errorText:"",height:24})},_init:function(){BI.TextEditor.superclass._init.apply(this,arguments);var self=this,o=this.options;BI.isNumber(o.height)&&this.element.css({height:o.height-2}),BI.isNumber(o.width)&&this.element.css({width:o.width-2}),this.editor=BI.createWidget({type:"bi.editor",height:o.height-2,hgap:o.hgap,vgap:o.vgap,lgap:o.lgap,rgap:o.rgap,tgap:o.tgap,bgap:o.bgap,value:o.value,title:o.title,tipType:o.tipType,validationChecker:o.validationChecker,quitChecker:o.quitChecker,allowBlank:o.allowBlank,watermark:o.watermark,errorText:o.errorText}),this.editor.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editor.on(BI.Editor.EVENT_FOCUS,function(){self.fireEvent(BI.TextEditor.EVENT_FOCUS)}),this.editor.on(BI.Editor.EVENT_BLUR,function(){self.fireEvent(BI.TextEditor.EVENT_BLUR)}),this.editor.on(BI.Editor.EVENT_CLICK,function(){self.fireEvent(BI.TextEditor.EVENT_CLICK)}),this.editor.on(BI.Editor.EVENT_CHANGE,function(){self.fireEvent(BI.TextEditor.EVENT_CHANGE)}),this.editor.on(BI.Editor.EVENT_KEY_DOWN,function(v){self.fireEvent(BI.TextEditor.EVENT_KEY_DOWN)}),this.editor.on(BI.Editor.EVENT_SPACE,function(v){self.fireEvent(BI.TextEditor.EVENT_SPACE)}),this.editor.on(BI.Editor.EVENT_BACKSPACE,function(v){self.fireEvent(BI.TextEditor.EVENT_BACKSPACE)}),this.editor.on(BI.Editor.EVENT_VALID,function(){self.fireEvent(BI.TextEditor.EVENT_VALID)}),this.editor.on(BI.Editor.EVENT_CONFIRM,function(){self.fireEvent(BI.TextEditor.EVENT_CONFIRM)}),this.editor.on(BI.Editor.EVENT_CHANGE_CONFIRM,function(){self.fireEvent(BI.TextEditor.EVENT_CHANGE_CONFIRM)}),this.editor.on(BI.Editor.EVENT_REMOVE,function(v){self.fireEvent(BI.TextEditor.EVENT_REMOVE)}),this.editor.on(BI.Editor.EVENT_START,function(){self.fireEvent(BI.TextEditor.EVENT_START)}),this.editor.on(BI.Editor.EVENT_PAUSE,function(){self.fireEvent(BI.TextEditor.EVENT_PAUSE)}),this.editor.on(BI.Editor.EVENT_STOP,function(){self.fireEvent(BI.TextEditor.EVENT_STOP)}),this.editor.on(BI.Editor.EVENT_ERROR,function(){self.fireEvent(BI.TextEditor.EVENT_ERROR,arguments)}),this.editor.on(BI.Editor.EVENT_ENTER,function(){self.fireEvent(BI.TextEditor.EVENT_ENTER)}),this.editor.on(BI.Editor.EVENT_RESTRICT,function(){self.fireEvent(BI.TextEditor.EVENT_RESTRICT)}),this.editor.on(BI.Editor.EVENT_EMPTY,function(){ +self.fireEvent(BI.TextEditor.EVENT_EMPTY)}),BI.createWidget({type:"bi.vertical",scrolly:!1,element:this,items:[this.editor]})},setWaterMark:function(v){this.options.watermark=v,this.editor.setWaterMark(v)},focus:function(){this.editor.focus()},blur:function(){this.editor.blur()},setErrorText:function(text){this.editor.setErrorText(text)},getErrorText:function(){return this.editor.getErrorText()},isValid:function(){return this.editor.isValid()},setValue:function(v){this.editor.setValue(v)},getValue:function(){return this.editor.getValue()}}),BI.TextEditor.EVENT_CHANGE="EVENT_CHANGE",BI.TextEditor.EVENT_FOCUS="EVENT_FOCUS",BI.TextEditor.EVENT_BLUR="EVENT_BLUR",BI.TextEditor.EVENT_CLICK="EVENT_CLICK",BI.TextEditor.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.TextEditor.EVENT_SPACE="EVENT_SPACE",BI.TextEditor.EVENT_BACKSPACE="EVENT_BACKSPACE",BI.TextEditor.EVENT_START="EVENT_START",BI.TextEditor.EVENT_PAUSE="EVENT_PAUSE",BI.TextEditor.EVENT_STOP="EVENT_STOP",BI.TextEditor.EVENT_CONFIRM="EVENT_CONFIRM",BI.TextEditor.EVENT_CHANGE_CONFIRM="EVENT_CHANGE_CONFIRM",BI.TextEditor.EVENT_VALID="EVENT_VALID",BI.TextEditor.EVENT_ERROR="EVENT_ERROR",BI.TextEditor.EVENT_ENTER="EVENT_ENTER",BI.TextEditor.EVENT_RESTRICT="EVENT_RESTRICT",BI.TextEditor.EVENT_REMOVE="EVENT_REMOVE",BI.TextEditor.EVENT_EMPTY="EVENT_EMPTY",BI.shortcut("bi.text_editor",BI.TextEditor),BI.SmallTextEditor=BI.inherit(BI.TextEditor,{_defaultConfig:function(){var conf=BI.SmallTextEditor.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-small-text-editor",height:20})},_init:function(){BI.SmallTextEditor.superclass._init.apply(this,arguments)}}),BI.shortcut("bi.small_text_editor",BI.SmallTextEditor),BI.IntervalSlider=BI.inherit(BI.Single,{_constant:{EDITOR_WIDTH:58,EDITOR_R_GAP:60,EDITOR_HEIGHT:30,SLIDER_WIDTH_HALF:15,SLIDER_WIDTH:30,SLIDER_HEIGHT:30,TRACK_HEIGHT:24},props:{baseCls:"bi-interval-slider bi-slider-track",digit:!1,unit:""},render:function(){var self=this,c=this._constant;return this.enable=!1,this.valueOne="",this.valueTwo="",this.calculation=new BI.AccurateCalculationModel,this.grayTrack=BI.createWidget({type:"bi.layout",cls:"gray-track",height:6}),this.blueTrack=BI.createWidget({type:"bi.layout",cls:"blue-track bi-high-light-background",height:6}),this.track=this._createTrackWrapper(),this.labelOne=BI.createWidget({type:"bi.sign_text_editor",cls:"slider-editor-button",text:this.options.unit,allowBlank:!1,width:c.EDITOR_WIDTH,validationChecker:function(v){return self._checkValidation(v)}}),this.labelOne.element.hover(function(){self.labelOne.element.removeClass("bi-border").addClass("bi-border")},function(){self.labelOne.element.removeClass("bi-border")}),this.labelOne.on(BI.Editor.EVENT_CONFIRM,function(){var oldValueOne=self.valueOne,v=BI.parseFloat(this.getValue());self.valueOne=v;var percent=self._getPercentByValue(v),significantPercent=BI.parseFloat(percent.toFixed(1));self._setSliderOnePosition(significantPercent),self._setBlueTrack(),self._checkLabelPosition(oldValueOne,self.valueTwo,self.valueOne,self.valueTwo),self.fireEvent(BI.IntervalSlider.EVENT_CHANGE)}),this.labelTwo=BI.createWidget({type:"bi.sign_text_editor",cls:"slider-editor-button",text:this.options.unit,allowBlank:!1,width:c.EDITOR_WIDTH,validationChecker:function(v){return self._checkValidation(v)}}),this.labelTwo.element.hover(function(){self.labelTwo.element.removeClass("bi-border").addClass("bi-border")},function(){self.labelTwo.element.removeClass("bi-border")}),this.labelTwo.on(BI.Editor.EVENT_CONFIRM,function(){var oldValueTwo=self.valueTwo,v=BI.parseFloat(this.getValue());self.valueTwo=v;var percent=self._getPercentByValue(v),significantPercent=BI.parseFloat(percent.toFixed(1));self._setSliderTwoPosition(significantPercent),self._setBlueTrack(),self._checkLabelPosition(self.valueOne,oldValueTwo,self.valueOne,self.valueTwo),self.fireEvent(BI.IntervalSlider.EVENT_CHANGE)}),this.sliderOne=BI.createWidget({type:"bi.single_slider_button"}),this.sliderTwo=BI.createWidget({type:"bi.single_slider_button"}),this._draggable(this.sliderOne,!0),this._draggable(this.sliderTwo,!1),this._setVisible(!1),{type:"bi.absolute",element:this,items:[{el:{type:"bi.vertical",items:[{type:"bi.absolute",items:[{el:this.track,width:"100%",height:c.TRACK_HEIGHT}]}],hgap:7,height:c.TRACK_HEIGHT},top:23,left:0,width:"100%"},this._createLabelWrapper(),this._createSliderWrapper()]}},_rePosBySizeAfterMove:function(size,isLeft){var o=this.options,percent=100*size/this._getGrayTrackLength(),significantPercent=BI.parseFloat(percent.toFixed(1)),v=this._getValueByPercent(significantPercent);v=this._assertValue(v),v=o.digit===!1?v:v.toFixed(o.digit);var oldValueOne=this.valueOne,oldValueTwo=this.valueTwo;isLeft?(this._setSliderOnePosition(significantPercent),this.labelOne.setValue(v),this.valueOne=v,this._checkLabelPosition(oldValueOne,oldValueTwo,v,this.valueTwo)):(this._setSliderTwoPosition(significantPercent),this.labelTwo.setValue(v),this.valueTwo=v,this._checkLabelPosition(oldValueOne,oldValueTwo,this.valueOne,v)),this._setBlueTrack()},_rePosBySizeAfterStop:function(size,isLeft){var percent=100*size/this._getGrayTrackLength(),significantPercent=BI.parseFloat(percent.toFixed(1));isLeft?this._setSliderOnePosition(significantPercent):this._setSliderTwoPosition(significantPercent)},_draggable:function(widget,isLeft){function optimizeSize(s){return BI.clamp(s,0,self._getGrayTrackLength())}var self=this,o=this.options,startDrag=!1,size=0,offset=0,defaultSize=0,mouseMoveTracker=new BI.MouseMoveTracker(function(deltaX){mouseMoveTracker.isDragging()&&(startDrag=!0,offset+=deltaX,size=optimizeSize(defaultSize+offset),widget.element.addClass("dragging"),self._rePosBySizeAfterMove(size,isLeft))},function(){startDrag===!0&&(size=optimizeSize(size),self._rePosBySizeAfterStop(size,isLeft),size=0,offset=0,defaultSize=size,startDrag=!1),widget.element.removeClass("dragging"),mouseMoveTracker.releaseMouseMoves(),self.fireEvent(BI.IntervalSlider.EVENT_CHANGE)},window);widget.element.on("mousedown",function(event){widget.isEnabled()&&(defaultSize=this.offsetLeft,optimizeSize(defaultSize),mouseMoveTracker.captureMouseMoves(event))})},_createLabelWrapper:function(){var c=this._constant;return{el:{type:"bi.vertical",items:[{type:"bi.absolute",items:[{el:this.labelOne,top:0,left:"0%"}]},{type:"bi.absolute",items:[{el:this.labelTwo,top:0,left:"100%"}]}],rgap:c.EDITOR_R_GAP,height:c.SLIDER_HEIGHT},top:0,left:0,width:"100%"}},_createSliderWrapper:function(){var c=this._constant;return{el:{type:"bi.vertical",items:[{type:"bi.absolute",items:[{el:this.sliderOne,top:0,left:"0%"}]},{type:"bi.absolute",items:[{el:this.sliderTwo,top:0,left:"100%"}]}],hgap:c.SLIDER_WIDTH_HALF,height:c.SLIDER_HEIGHT},top:20,left:0,width:"100%"}},_createTrackWrapper:function(){return BI.createWidget({type:"bi.absolute",items:[{el:{type:"bi.vertical",items:[{type:"bi.absolute",items:[{el:this.grayTrack,top:0,left:0,width:"100%"},{el:this.blueTrack,top:0,left:0,width:"0%"}]}],hgap:8,height:8},top:8,left:0,width:"100%"}]})},_checkValidation:function(v){var o=this.options,valid=!1,dotText=(v+"").split(".")[1];return BI.isEmptyString(dotText)||BI.isNumeric(v)&&!(BI.isNull(v)||vthis.max)&&(o.digit===!1?valid=!0:(dotText=dotText||"",valid=dotText.length===o.digit)),valid},_checkOverlap:function(){var labelOneLeft=this.labelOne.element[0].offsetLeft,labelTwoLeft=this.labelTwo.element[0].offsetLeft;labelOneLeft<=labelTwoLeft?labelTwoLeft-labelOneLeft<90?this.labelTwo.element.css({top:40}):this.labelTwo.element.css({top:0}):labelOneLeft-labelTwoLeft<90?this.labelTwo.element.css({top:40}):this.labelTwo.element.css({top:0})},_checkLabelPosition:function(oldValueOne,oldValueTwo,valueOne,valueTwo,isLeft){if(oldValueOne=BI.parseFloat(oldValueOne),oldValueTwo=BI.parseFloat(oldValueTwo),valueOne=BI.parseFloat(valueOne),valueTwo=BI.parseFloat(valueTwo),oldValueOne<=oldValueTwo&&valueOne>valueTwo||oldValueOne>=oldValueTwo&&valueOne-1){arr=pre.split("e");var decimalPartLength=BI.size(arr[0].split(".")[1]),sciencePartLength=BI.parseInt(arr[1].substring(1));return decimalPartLength-sciencePartLength}return arr=pre.split("."),arr.length>1?arr[1].length:0},_assertValue:function(value){return value<=this.min?this.min:value>=this.max?this.max:value},_setEnable:function(b){BI.IntervalSlider.superclass._setEnable.apply(this,[b]),b?this.blueTrack.element.removeClass("disabled-blue-track").addClass("blue-track"):this.blueTrack.element.removeClass("blue-track").addClass("disabled-blue-track")},getValue:function(){return this.valueOne<=this.valueTwo?{min:this.valueOne,max:this.valueTwo}:{min:this.valueTwo,max:this.valueOne}},setMinAndMax:function(v){var minNumber=BI.parseFloat(v.min),maxNumber=BI.parseFloat(v.max);!isNaN(minNumber)&&!isNaN(maxNumber)&&maxNumber>=minNumber&&(this.min=minNumber,this.max=maxNumber,this.valueOne=minNumber,this.valueTwo=maxNumber,this.precision=this._getPrecision(),this._setDraggableEnable(!0)),maxNumber===minNumber&&this._setDraggableEnable(!1)},setValue:function(v){var o=this.options,valueOne=BI.parseFloat(v.min),valueTwo=BI.parseFloat(v.max);valueOne=o.digit===!1?valueOne:valueOne.toFixed(o.digit),valueTwo=o.digit===!1?valueTwo:valueTwo.toFixed(o.digit),isNaN(valueOne)||isNaN(valueTwo)||(this._checkValidation(valueOne)&&(this.valueOne=this.valueOne<=this.valueTwo?valueOne:valueTwo),this._checkValidation(valueTwo)&&(this.valueTwo=this.valueOne<=this.valueTwo?valueTwo:valueOne),valueOnethis.max&&(this.valueTwo=this.max))},reset:function(){this._setVisible(!1),this.enable=!1,this.valueOne="",this.valueTwo="",this.min=NaN,this.max=NaN,this._setBlueTrackWidth(0)},populate:function(){isNaN(this.min)||isNaN(this.max)||(this.enable=!0,this._setVisible(!0),this._setErrorText(),(BI.isNumeric(this.valueOne)||BI.isNotEmptyString(this.valueOne))&&(BI.isNumeric(this.valueTwo)||BI.isNotEmptyString(this.valueTwo))?(this.labelOne.setValue(this.valueOne),this.labelTwo.setValue(this.valueTwo),this._setAllPosition(this._getPercentByValue(this.valueOne),this._getPercentByValue(this.valueTwo))):(this.labelOne.setValue(this.min),this.labelTwo.setValue(this.max),this._setAllPosition(0,100)))}}),BI.IntervalSlider.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.interval_slider",BI.IntervalSlider),BI.AccurateCalculationModel=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.AccurateCalculationModel.superclass._defaultConfig.apply(this,arguments),{baseCls:""})},_init:function(){BI.AccurateCalculationModel.superclass._init.apply(this,arguments)},_getMagnitude:function(n){for(var magnitude="1",i=0;i0)var needAddZero=stringNumber2;else{var needAddZero=stringNumber1;magnitudeDiff=0-magnitudeDiff}for(var i=0;i=num2.numDecimal.length?num1.numDecimal.length:num2.numDecimal.length}function addZero(resultTemp,length){for(var diff=length-resultTemp.length,i=0;i=BI.parseInt(stringNumber2.numDecimal))var decimalResultTemp=(BI.parseInt(stringNumber1.numDecimal)-BI.parseInt(stringNumber2.numDecimal)).toString(),decimalResult=addZero(decimalResultTemp,decimalMaxLength);else{integerResult--;var borrow=this._getMagnitude(decimalMaxLength),decimalResultTemp=(borrow+BI.parseInt(stringNumber1.numDecimal)-BI.parseInt(stringNumber2.numDecimal)).toString(),decimalResult=addZero(decimalResultTemp,decimalMaxLength)}var result=integerResult+"."+decimalResult;return BI.parseFloat(result)},_accurateAddition:function(num1,num2){function addZero(resultTemp,length){for(var diff=length-resultTemp.length,i=0;in)var integerResult=stringNumber.numInteger.slice(0,stringNumber.numInteger.length-n),partDecimalResult=stringNumber.numInteger.slice(-n);else var integerResult="0",partDecimalResult=addZero(stringNumber.numInteger,n);var result=integerResult+"."+partDecimalResult+stringNumber.numDecimal;return BI.parseFloat(result)},accurateSubtraction:function(num1,num2){return num1>=0&&num2>=0?num1>=num2?this._accurateSubtraction(num1,num2):-this._accurateSubtraction(num2,num1):num1>=0&&num2<0?this._accurateAddition(num1,-num2):num1<0&&num2>=0?-this._accurateAddition(-num1,num2):num1<0&&num2<0?num1>=num2?this._accurateSubtraction(-num2,-num1):this._accurateSubtraction(-num1,-num2):void 0},accurateAddition:function(num1,num2){return num1>=0&&num2>=0?this._accurateAddition(num1,num2):num1>=0&&num2<0?this.accurateSubtraction(num1,-num2):num1<0&&num2>=0?this.accurateSubtraction(num2,-num1):num1<0&&num2<0?-this._accurateAddition(-num1,-num2):void 0},accurateMultiplication:function(num1,num2){return num1>=0&&num2>=0?this._accurateMultiplication(num1,num2):num1>=0&&num2<0?-this._accurateMultiplication(num1,-num2):num1<0&&num2>=0?-this._accurateMultiplication(-num1,num2):num1<0&&num2<0?this._accurateMultiplication(-num1,-num2):void 0},accurateDivisionTenExponent:function(num1,n){return num1>=0?this._accurateDivisionTenExponent(num1,n):-this._accurateDivisionTenExponent(-num1,n)}}),BI.DownListCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.DownListCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multilayer-down-list-combo",height:24,items:[],adjustLength:0,direction:"bottom",trigger:"click",container:null,stopPropagation:!1,el:{}})},_init:function(){BI.DownListCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.popupview=BI.createWidget({type:"bi.multi_layer_down_list_popup",items:o.items,chooseType:o.chooseType,value:o.value}),this.popupview.on(BI.DownListPopup.EVENT_CHANGE,function(value){self.fireEvent(BI.DownListCombo.EVENT_CHANGE,value),self.downlistcombo.hideView()}),this.popupview.on(BI.DownListPopup.EVENT_SON_VALUE_CHANGE,function(value,fatherValue){self.fireEvent(BI.DownListCombo.EVENT_SON_VALUE_CHANGE,value,fatherValue),self.downlistcombo.hideView()}),this.downlistcombo=BI.createWidget({element:this,type:"bi.combo",trigger:o.trigger,isNeedAdjustWidth:!1,container:o.container,adjustLength:o.adjustLength,direction:o.direction,stopPropagation:o.stopPropagation,el:BI.createWidget(o.el,{type:"bi.icon_trigger",extraCls:o.iconCls?o.iconCls:"pull-down-font",width:o.width,height:o.height}),popup:{el:this.popupview,stopPropagation:o.stopPropagation,maxHeight:1e3}}),this.downlistcombo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){self.fireEvent(BI.DownListCombo.EVENT_BEFORE_POPUPVIEW)})},hideView:function(){this.downlistcombo.hideView()},showView:function(e){this.downlistcombo.showView(e)},populate:function(items){this.popupview.populate(items)},setValue:function(v){this.popupview.setValue(v)},getValue:function(){return this.popupview.getValue()}}),BI.DownListCombo.EVENT_CHANGE="EVENT_CHANGE",BI.DownListCombo.EVENT_SON_VALUE_CHANGE="EVENT_SON_VALUE_CHANGE",BI.DownListCombo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.multi_layer_down_list_combo",BI.DownListCombo),BI.MultiLayerDownListPopup=BI.inherit(BI.Pane,{constants:{nextIcon:"pull-right-e-font",height:25,iconHeight:12,iconWidth:12,hgap:0,vgap:0,border:1},_defaultConfig:function(){var conf=BI.MultiLayerDownListPopup.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:"bi-down-list-popup",items:[],chooseType:BI.Selection.Multi})},_init:function(){BI.MultiLayerDownListPopup.superclass._init.apply(this,arguments),this.singleValues=[],this.childValueMap={},this.fatherValueMap={};var self=this,o=this.options,children=this._createPopupItems(o.items);this.popup=BI.createWidget({type:"bi.button_tree",items:BI.createItems(children,{},{adjustLength:-2}),layouts:[{type:"bi.vertical",hgap:this.constants.hgap,vgap:this.constants.vgap}],value:this._digest(o.value),chooseType:o.chooseType}),this.popup.on(BI.ButtonTree.EVENT_CHANGE,function(value,object){var changedValue=value;if(BI.isNotNull(self.childValueMap[value])){changedValue=self.childValueMap[value];var fatherValue=self.fatherValueMap[value],fatherArrayValue=(fatherValue+"").split("_");self.fireEvent(BI.MultiLayerDownListPopup.EVENT_SON_VALUE_CHANGE,changedValue,fatherArrayValue.length>1?fatherArrayValue:fatherValue)}else self.fireEvent(BI.MultiLayerDownListPopup.EVENT_CHANGE,changedValue,object);if(!BI.contains(self.singleValues,changedValue)){var item=self.getValue(),result=[];BI.each(item,function(i,valueObject){valueObject.value!=changedValue&&result.push(valueObject)}),self.setValue(result)}}),BI.createWidget({type:"bi.vertical",element:this,items:[this.popup],vgap:5})},_createPopupItems:function(items){var self=this,result=[];return BI.each(items,function(i,it){var item_done={type:"bi.down_list_group",items:[]};if(BI.each(it,function(i,item){BI.isNotEmptyArray(item.children)&&!BI.isEmpty(item.el)?(item.type="bi.combo_group",item.cls="down-list-group",item.trigger="hover",item.isNeedAdjustWidth=!1,item.el.title=item.el.title||item.el.text,item.el.type="bi.down_list_group_item",item.el.logic={dynamic:!0},item.el.height=self.constants.height,item.el.iconCls2=self.constants.nextIcon,item.popup={lgap:1,el:{type:"bi.button_tree",chooseType:0,layouts:[{type:"bi.vertical"}]},innerVGap:5},item.el.childValues=[],BI.each(item.children,function(i,child){child=child.el?BI.extend(child.el,{children:child.children}):child;var fatherValue=BI.deepClone(item.el.value),childValue=BI.deepClone(child.value);self.singleValues.push(child.value),child.type="bi.down_list_item",child.extraCls=" child-down-list-item",child.title=child.title||child.text,child.textRgap=10,child.isNeedAdjustWidth=!1,child.logic={dynamic:!0},child.father=fatherValue,self.fatherValueMap[self._createChildValue(fatherValue,childValue)]=fatherValue,self.childValueMap[self._createChildValue(fatherValue,childValue)]=childValue,child.value=self._createChildValue(fatherValue,childValue),item.el.childValues.push(child.value),BI.isNotEmptyArray(child.children)&&(child.type="bi.down_list_group_item",self._createChildren(child),child.height=self.constants.height,child.iconCls2=self.constants.nextIcon,item.el.childValues=BI.concat(item.el.childValues,child.childValues))})):(item.type="bi.down_list_item",item.title=item.title||item.text,item.textRgap=10,item.isNeedAdjustWidth=!1,item.logic={dynamic:!0});var el_done={};el_done.el=item,item_done.items.push(el_done)}),self._isGroup(item_done.items)&&BI.each(item_done.items,function(i,item){self.singleValues.push(item.el.value)}),result.push(item_done),self._needSpliter(i,items.length)){var spliter_container=BI.createWidget({type:"bi.vertical",items:[{el:{type:"bi.layout",cls:"bi-down-list-spliter bi-border-top cursor-pointer",height:0}}],cls:"bi-down-list-spliter-container cursor-pointer",vgap:5,lgap:10});result.push(spliter_container)}}),result},_createChildren:function(child){var self=this;child.childValues=[],BI.each(child.children,function(i,c){var fatherValue=BI.deepClone(child.value),childValue=BI.deepClone(c.value);c.type="bi.down_list_item",c.title=c.title||c.text,c.textRgap=10,c.isNeedAdjustWidth=!1,c.logic={dynamic:!0},c.father=fatherValue,self.fatherValueMap[self._createChildValue(fatherValue,childValue)]=fatherValue,self.childValueMap[self._createChildValue(fatherValue,childValue)]=childValue,c.value=self._createChildValue(fatherValue,childValue),child.childValues.push(c.value)})},_isGroup:function(i){return i.length>1},_needSpliter:function(i,itemLength){return i1?fatherArrayValue:fartherValue}else valueItem.value=value;result.push(valueItem)}),result}}),BI.MultiLayerDownListPopup.EVENT_CHANGE="EVENT_CHANGE",BI.MultiLayerDownListPopup.EVENT_SON_VALUE_CHANGE="EVENT_SON_VALUE_CHANGE",BI.shortcut("bi.multi_layer_down_list_popup",BI.MultiLayerDownListPopup),BI.MultiLayerSelectTreeCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiLayerSelectTreeCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multilayer-select-tree-combo",isDefaultInit:!1,height:24,text:"",itemsCreator:BI.emptyFn,items:[],value:"",attributes:{tabIndex:0},allowEdit:!1,allowSearchValue:!1,allowInsertValue:!1})},render:function(){var self=this,o=this.options,combo=o.itemsCreator===BI.emptyFn?this._getSyncConfig():this._getAsyncConfig();return o.allowEdit||o.itemsCreator!==BI.emptyFn?{type:"bi.absolute",items:[{el:combo,left:0,right:0,top:0,bottom:0},{el:{type:"bi.trigger_icon_button",cls:"trigger-icon-button",ref:function(_ref){self.triggerBtn=_ref},width:o.height,height:o.height,handler:function(){self.combo.isViewVisible()?self.combo.hideView():self.combo.showView()}},right:0,bottom:0,top:0}]}:combo},_getBaseConfig:function(){var self=this,o=this.options;return{type:"bi.combo",container:o.container,adjustLength:2,ref:function(_ref){self.combo=_ref},popup:{el:{type:"bi.multilayer_select_tree_popup",isDefaultInit:o.isDefaultInit,itemsCreator:o.itemsCreator,items:o.items,ref:function(_ref){self.trigger&&self.trigger.getSearcher().setAdapter(_ref)},listeners:[{eventName:BI.MultiLayerSelectTreePopup.EVENT_CHANGE,action:function(){self.setValue(this.getValue()),self.combo.hideView(),self.fireEvent(BI.MultiLayerSelectTreeCombo.EVENT_CHANGE)}}]},value:o.value,maxHeight:400,minHeight:240}}},_getSearchConfig:function(){var self=this,o=this.options;return{el:{type:"bi.multilayer_select_tree_trigger",allowInsertValue:o.allowInsertValue,allowSearchValue:o.allowSearchValue,allowEdit:o.allowEdit,cls:"multilayer-select-tree-trigger",ref:function(_ref){self.trigger=_ref},items:o.items,itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,watermark:o.watermark,height:o.height-2,text:o.text,value:o.value,tipType:o.tipType,warningTitle:o.warningTitle,title:o.title,listeners:[{eventName:BI.MultiLayerSelectTreeTrigger.EVENT_CHANGE,action:function(){self.setValue(this.getValue()),self.combo.hideView(),self.fireEvent(BI.MultiLayerSelectTreeCombo.EVENT_CHANGE)}},{eventName:BI.MultiLayerSelectTreeTrigger.EVENT_FOCUS,action:function(){self.fireEvent(BI.MultiLayerSelectTreeCombo.EVENT_FOCUS)}},{eventName:BI.MultiLayerSelectTreeTrigger.EVENT_BLUR,action:function(){self.fireEvent(BI.MultiLayerSelectTreeCombo.EVENT_BLUR)}},{eventName:BI.MultiLayerSelectTreeTrigger.EVENT_SEARCHING,action:function(){self.fireEvent(BI.MultiLayerSelectTreeCombo.EVENT_SEARCHING)}},{eventName:BI.MultiLayerSelectTreeTrigger.EVENT_ADD_ITEM,action:function(){var value=self.trigger.getSearcher().getKeyword();self.combo.setValue([value]),self.combo.hideView()}}]},hideChecker:function(e){return 0===self.triggerBtn.element.find(e.target).length},listeners:[{eventName:BI.Combo.EVENT_AFTER_HIDEVIEW,action:function(){self.trigger.stopEditing()}}]}},_getSyncConfig:function(){var o=this.options,baseConfig=this._getBaseConfig();return BI.extend(baseConfig,o.allowEdit?this._getSearchConfig():{el:{type:"bi.single_tree_trigger",text:o.text,height:o.height,items:o.items,value:o.value}})},_getAsyncConfig:function(){var config=this._getBaseConfig();return BI.extend(config,this._getSearchConfig())},setValue:function(v){v=BI.isArray(v)?v:[v],this.combo.setValue(v)},getValue:function(){return this.combo.getValue()},populate:function(items){this.combo.populate(items)}}),BI.MultiLayerSelectTreeCombo.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiLayerSelectTreeCombo.EVENT_BLUR="EVENT_BLUR",BI.MultiLayerSelectTreeCombo.EVENT_FOCUS="EVENT_FOCUS",BI.MultiLayerSelectTreeCombo.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multilayer_select_tree_combo",BI.MultiLayerSelectTreeCombo),BI.MultiLayerSelectTreeInsertSearchPane=BI.inherit(BI.Widget,{props:function(){return{baseCls:"bi-multilayer-select-tree-popup",tipText:BI.i18nText("BI-No_Selected_Item"),isDefaultInit:!1,itemsCreator:BI.emptyFn,items:[],value:""}},render:function(){var self=this,o=this.options;return this.tree=BI.createWidget({type:"bi.multilayer_select_level_tree",isDefaultInit:o.isDefaultInit,items:o.items,itemsCreator:o.itemsCreator===BI.emptyFn?BI.emptyFn:function(op,callback){o.itemsCreator(op,function(res){callback(res),self.setKeyword(o.keywordGetter())})},keywordGetter:o.keywordGetter,value:o.value,scrollable:null,listeners:[{eventName:BI.Controller.EVENT_CHANGE,action:function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}},{eventName:BI.MultiLayerSelectLevelTree.EVENT_CHANGE,action:function(){self.fireEvent(BI.MultiLayerSelectTreeInsertSearchPane.EVENT_CHANGE)}}]}),{type:"bi.vertical",scrolly:!1,scrollable:!0,vgap:5,items:[{type:"bi.text_button",invisible:!0,text:BI.i18nText("BI-Basic_Click_To_Add_Text",""),height:24,cls:"bi-high-light",hgap:5,ref:function(_ref){self.addNotMatchTip=_ref},handler:function(){self.fireEvent(BI.MultiLayerSelectTreeInsertSearchPane.EVENT_ADD_ITEM,o.keywordGetter())}},this.tree]}},setKeyword:function(keyword){var showTip=BI.isEmptyArray(this.tree.getAllLeaves()); +this.addNotMatchTip.setVisible(showTip),showTip&&this.addNotMatchTip.setText(BI.i18nText("BI-Basic_Click_To_Add_Text",keyword))},getValue:function(){return this.tree.getValue()},setValue:function(v){v=BI.isArray(v)?v:[v],this.tree.setValue(v)},populate:function(items){this.tree.populate(items)}}),BI.MultiLayerSelectTreeInsertSearchPane.EVENT_ADD_ITEM="EVENT_ADD_ITEM",BI.MultiLayerSelectTreeInsertSearchPane.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multilayer_select_tree_insert_search_pane",BI.MultiLayerSelectTreeInsertSearchPane),BI.MultiLayerSelectLevelTree=BI.inherit(BI.Pane,{_defaultConfig:function(){return BI.extend(BI.MultiLayerSelectLevelTree.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multilayer-select-level-tree",isDefaultInit:!1,items:[],itemsCreator:BI.emptyFn,keywordGetter:BI.emptyFn,value:"",scrollable:!0})},_init:function(){var o=this.options;BI.MultiLayerSelectLevelTree.superclass._init.apply(this,arguments),this.storeValue=o.value,this.initTree(this.options.items),this.check()},_formatItems:function(nodes,layer,pNode){var self=this,o=this.options,keyword=o.keywordGetter();return BI.each(nodes,function(i,node){var extend={};node.layer=layer,BI.isKey(node.id)||(node.id=BI.UUID()),node.keyword=node.keyword||keyword,extend.pNode=pNode,node.isParent===!0||node.parent===!0||BI.isNotEmptyArray(node.children)?(extend.type="bi.multilayer_select_tree_mid_plus_group_node",i===nodes.length-1&&(extend.type="bi.multilayer_select_tree_last_plus_group_node",extend.isLastNode=!0),0!==i||pNode||(extend.type="bi.multilayer_select_tree_first_plus_group_node"),0!==i||i!==nodes.length-1||pNode||(extend.type="bi.multilayer_select_tree_plus_group_node"),BI.defaults(node,extend),self._formatItems(node.children,layer+1,node)):(extend.type="bi.multilayer_single_tree_mid_tree_leaf_item",0!==i||pNode||(extend.type="bi.multilayer_single_tree_first_tree_leaf_item"),i===nodes.length-1&&(extend.type="bi.multilayer_single_tree_last_tree_leaf_item"),BI.defaults(node,extend))}),nodes},_assertId:function(sNodes){BI.each(sNodes,function(i,node){node.id=node.id||BI.UUID()})},initTree:function(nodes){var self=this,o=this.options,hasNext=!1;this.empty(),this._assertId(nodes),this.tree=BI.createWidget({type:"bi.custom_tree",cls:"tree-view display-table",expander:{type:"bi.select_tree_expander",isDefaultInit:o.isDefaultInit,el:{},popup:{type:"bi.custom_tree"}},items:this._formatItems(BI.Tree.transformToTreeFormat(nodes),0),itemsCreator:function(op,callback){1===op.times&&!op.node&&BI.nextTick(function(){self.loading()}),o.itemsCreator(op,function(ob){hasNext=ob.hasNext,1===op.times&&!op.node&&self._populate(ob.items),callback(self._formatItems(BI.Tree.transformToTreeFormat(ob.items),op.node?op.node.layer+1:0,op.node)),self.setValue(self.storeValue),1===op.times&&!op.node&&BI.nextTick(function(){self.loaded()})})},value:o.value,el:{type:"bi.loader",isDefaultInit:o.itemsCreator!==BI.emptyFn,el:{type:"bi.button_tree",chooseType:o.chooseType,behaviors:o.behaviors,layouts:[{type:"bi.vertical"}]},hasNext:function(){return hasNext}}}),this.tree.on(BI.Controller.EVENT_CHANGE,function(type,value){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&(self.setValue(value),self.fireEvent(BI.MultiLayerSelectLevelTree.EVENT_CHANGE,arguments))}),BI.createWidget({type:"bi.adaptive",element:this,scrollable:o.scrollable,items:[this.tree]})},_populate:function(){BI.MultiLayerSelectLevelTree.superclass.populate.apply(this,arguments)},populate:function(nodes){this._populate(nodes),BI.isNull(nodes)?this.tree.populate():this.tree.populate(this._formatItems(BI.Tree.transformToTreeFormat(nodes),0))},setValue:function(v){this.options.chooseType===BI.Selection.None||(this.storeValue=v,this.tree.setValue(v))},getValue:function(){return BI.isArray(this.storeValue)?this.storeValue:BI.isNull(this.storeValue)?[]:[this.storeValue]},getAllLeaves:function(){return this.tree.getAllLeaves()},getNodeById:function(id){return this.tree.getNodeById(id)},getNodeByValue:function(id){return this.tree.getNodeByValue(id)}}),BI.MultiLayerSelectLevelTree.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multilayer_select_level_tree",BI.MultiLayerSelectLevelTree),BI.MultiLayerSelectTreePopup=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiLayerSelectTreePopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multilayer-select-tree-popup",tipText:BI.i18nText("BI-No_Selected_Item"),isDefaultInit:!1,itemsCreator:BI.emptyFn,items:[],value:""})},_init:function(){BI.MultiLayerSelectTreePopup.superclass._init.apply(this,arguments);var self=this,o=this.options;this.tree=BI.createWidget({type:"bi.multilayer_select_level_tree",isDefaultInit:o.isDefaultInit,items:o.items,itemsCreator:o.itemsCreator,keywordGetter:o.keywordGetter,value:o.value,scrollable:null}),BI.createWidget({type:"bi.vertical",scrolly:!1,scrollable:!0,element:this,vgap:5,items:[this.tree]}),this.tree.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.tree.on(BI.MultiLayerSelectLevelTree.EVENT_CHANGE,function(){self.fireEvent(BI.MultiLayerSelectTreePopup.EVENT_CHANGE)})},getValue:function(){return this.tree.getValue()},setValue:function(v){v=BI.isArray(v)?v:[v],this.tree.setValue(v)},populate:function(items){this.tree.populate(items)}}),BI.MultiLayerSelectTreePopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multilayer_select_tree_popup",BI.MultiLayerSelectTreePopup),BI.MultiLayerSelectTreeTrigger=BI.inherit(BI.Trigger,{props:function(){return{extraCls:"bi-multi-layer-select-tree-trigger bi-border bi-focus-shadow",height:24,valueFormatter:function(v){return v},itemsCreator:BI.emptyFn,watermark:BI.i18nText("BI-Basic_Search"),allowSearchValue:!1}},render:function(){var self=this,o=this.options;o.itemsCreator===BI.emptyFn&&this._initData();var content={type:"bi.htape",items:[{el:{type:"bi.searcher",ref:function(){self.searcher=this},isAutoSearch:!1,el:{type:"bi.state_editor",ref:function(){self.editor=this},defaultText:o.text,text:this._digest(o.value),value:o.value,height:o.height,tipText:"",watermark:o.watermark,listeners:[{eventName:BI.StateEditor.EVENT_FOCUS,action:function(){self.fireEvent(BI.MultiLayerSelectTreeTrigger.EVENT_FOCUS)}},{eventName:BI.StateEditor.EVENT_BLUR,action:function(){self.fireEvent(BI.MultiLayerSelectTreeTrigger.EVENT_BLUR)}},{eventName:BI.StateEditor.EVENT_CHANGE,action:function(){self.fireEvent(BI.MultiLayerSelectTreeTrigger.EVENT_SEARCHING)}}]},popup:{type:o.allowInsertValue?"bi.multilayer_select_tree_insert_search_pane":"bi.multilayer_select_tree_popup",itemsCreator:o.itemsCreator===BI.emptyFn?BI.emptyFn:function(op,callback){op.keyword=self.editor.getValue(),o.itemsCreator(op,callback)},keywordGetter:function(){return self.editor.getValue()},cls:"bi-card",listeners:[{eventName:BI.MultiLayerSelectTreeInsertSearchPane.EVENT_ADD_ITEM,action:function(){self.options.text=self.getSearcher().getKeyword(),self.fireEvent(BI.MultiLayerSelectTreeTrigger.EVENT_ADD_ITEM)}}],ref:function(_ref){self.popup=_ref}},onSearch:function(obj,callback){var keyword=obj.keyword;o.itemsCreator===BI.emptyFn?(callback(self._getSearchItems(keyword)),o.allowInsertValue&&self.popup.setKeyword(keyword)):callback()},listeners:[{eventName:BI.Searcher.EVENT_CHANGE,action:function(){self.fireEvent(BI.MultiLayerSelectTreeTrigger.EVENT_CHANGE)}}]}},{el:{type:"bi.layout",width:24},width:24}]};return o.allowEdit?content:{type:"bi.absolute",items:[{el:content,left:0,right:0,top:0,bottom:0},{el:{type:"bi.layout"},left:0,right:24,top:0,bottom:0}]}},_initData:function(){var o=this.options;this.tree=new BI.Tree,this.nodes=BI.Tree.treeFormat(BI.deepClone(o.items)),this.tree.initTree(this.nodes)},_getSearchItems:function(keyword){var self=this,o=this.options,items=[];return this.tree.traverse(function(node){var find=BI.Func.getSearchResult(self.tree.isRoot(node)?[]:BI.concat([node.text],o.allowSearchValue?[node.value]:[]),keyword);if(find.find.length>0||find.match.length>0)return items.push(node),!0}),this._fillTreeStructure4Search(items,"id")},_createJson:function(node,open){return{id:node.id,pId:node.pId,text:node.text,value:node.value,isParent:BI.isNotEmptyArray(node.children),open:open}},_getChildren:function(node){var self=this;node.children=node.children||[];var nodes=[];return BI.each(node.children,function(idx,child){var children=self._getChildren(child);nodes=nodes.concat(children)}),node.children.concat(nodes)},_fillTreeStructure4Search:function(leaves){var self=this,result=[],queue=[];for(BI.each(leaves,function(idx,node){queue.push({pId:node.pId}),result.push(node),result=result.concat(self._getChildren(node))});BI.isNotEmptyArray(queue);){var node=queue.pop(),pNode=this.tree.search(this.tree.getRoot(),node.pId,"id");null!=pNode&&(pNode.open=!0,queue.push({pId:pNode.pId}),result.push(pNode))}return BI.uniqBy(BI.map(result,function(idx,node){return self._createJson(node,node.open)}),"id")},_digest:function(v){var o=this.options;if(o.itemsCreator===BI.emptyFn){var result=BI.find(o.items,function(i,item){return item.value===v});return BI.isNotNull(result)?result.text:o.text}return o.valueFormatter(v)},stopEditing:function(){this.searcher.stopSearch()},getSearcher:function(){return this.searcher},populate:function(items){this.options.items=items,this._initData(items)},setValue:function(v){this.editor.setState(this._digest(v[0]))},getValue:function(){return this.searcher.getValue()}}),BI.MultiLayerSelectTreeTrigger.EVENT_FOCUS="EVENT_FOCUS",BI.MultiLayerSelectTreeTrigger.EVENT_BLUR="EVENT_BLUR",BI.MultiLayerSelectTreeTrigger.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiLayerSelectTreeTrigger.EVENT_STOP="EVENT_STOP",BI.MultiLayerSelectTreeTrigger.EVENT_START="EVENT_START",BI.MultiLayerSelectTreeTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.MultiLayerSelectTreeTrigger.EVENT_ADD_ITEM="EVENT_ADD_ITEM",BI.shortcut("bi.multilayer_select_tree_trigger",BI.MultiLayerSelectTreeTrigger),BI.MultiLayerSelectTreeFirstPlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.MultiLayerSelectTreeFirstPlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-multilayer-select-tree-first-plus-group-node bi-list-item-active",layer:0,id:"",pId:"",readonly:!0,open:!1,height:24})},_init:function(){BI.MultiLayerSelectTreeFirstPlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.node=BI.createWidget({type:"bi.select_tree_first_plus_group_node",cls:"bi-list-item-none",stopPropagation:!0,logic:{dynamic:!0},id:o.id,pId:o.pId,keyword:o.keyword,open:o.open,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py}),this.node.on(BI.Controller.EVENT_CHANGE,function(type){self.setSelected(self.isSelected()),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});for(var needBlankLayers=[],pNode=o.pNode;pNode;)pNode.isLastNode&&needBlankLayers.push(pNode.layer),pNode=pNode.pNode;var items=[];BI.count(0,o.layer,function(index){items.push({type:"bi.layout",cls:BI.contains(needBlankLayers,index)?"":"base-line-conn-background",width:12,height:o.height})}),items.push(this.node),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,12),items:[items]})},isOnce:function(){return!0},doRedMark:function(){this.node.doRedMark.apply(this.node,arguments)},unRedMark:function(){this.node.unRedMark.apply(this.node,arguments)},isSelected:function(){return this.node.isSelected()},setSelected:function(b){BI.MultiLayerSelectTreeFirstPlusGroupNode.superclass.setSelected.apply(this,arguments),this.node.setSelected(b)},doClick:function(){BI.NodeButton.superclass.doClick.apply(this,arguments),this.node.setSelected(this.isSelected())},setOpened:function(v){BI.MultiLayerSelectTreeFirstPlusGroupNode.superclass.setOpened.apply(this,arguments),this.node.setOpened(v)}}),BI.shortcut("bi.multilayer_select_tree_first_plus_group_node",BI.MultiLayerSelectTreeFirstPlusGroupNode),BI.MultiLayerSelectTreeLastPlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.MultiLayerSelectTreeLastPlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-multilayer-select-tree-last-plus-group-node bi-list-item-active",layer:0,id:"",pId:"",readonly:!0,open:!1,height:24})},_init:function(){BI.MultiLayerSelectTreeLastPlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.node=BI.createWidget({type:"bi.select_tree_last_plus_group_node",cls:"bi-list-item-none",stopPropagation:!0,logic:{dynamic:!0},id:o.id,pId:o.pId,keyword:o.keyword,open:o.open,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py}),this.node.on(BI.Controller.EVENT_CHANGE,function(type){self.setSelected(self.isSelected()),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});for(var needBlankLayers=[],pNode=o.pNode;pNode;)pNode.isLastNode&&needBlankLayers.push(pNode.layer),pNode=pNode.pNode;var items=[];BI.count(0,o.layer,function(index){items.push({type:"bi.layout",cls:BI.contains(needBlankLayers,index)?"":"base-line-conn-background",width:12,height:o.height})}),items.push(this.node),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,12),items:[items]})},doRedMark:function(){this.node.doRedMark.apply(this.node,arguments)},unRedMark:function(){this.node.unRedMark.apply(this.node,arguments)},isSelected:function(){return this.node.isSelected()},setSelected:function(b){BI.MultiLayerSelectTreeLastPlusGroupNode.superclass.setSelected.apply(this,arguments),this.node.setSelected(b)},doClick:function(){BI.MultiLayerSelectTreeLastPlusGroupNode.superclass.doClick.apply(this,arguments),this.node.setSelected(this.isSelected())},setOpened:function(v){BI.MultiLayerSelectTreeLastPlusGroupNode.superclass.setOpened.apply(this,arguments),this.node.setOpened(v)}}),BI.shortcut("bi.multilayer_select_tree_last_plus_group_node",BI.MultiLayerSelectTreeLastPlusGroupNode),BI.MultiLayerSelectTreeMidPlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.MultiLayerSelectTreeMidPlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-multilayer-select-tree-mid-plus-group-node bi-list-item-active",layer:0,id:"",pId:"",readonly:!0,open:!1,height:24})},_init:function(){BI.MultiLayerSelectTreeMidPlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.node=BI.createWidget({type:"bi.select_tree_mid_plus_group_node",cls:"bi-list-item-none",stopPropagation:!0,logic:{dynamic:!0},id:o.id,pId:o.pId,keyword:o.keyword,open:o.open,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py}),this.node.on(BI.Controller.EVENT_CHANGE,function(type){self.setSelected(self.isSelected()),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});for(var needBlankLayers=[],pNode=o.pNode;pNode;)pNode.isLastNode&&needBlankLayers.push(pNode.layer),pNode=pNode.pNode;var items=[];BI.count(0,o.layer,function(index){items.push({type:"bi.layout",cls:BI.contains(needBlankLayers,index)?"":"base-line-conn-background",width:12,height:o.height})}),items.push(this.node),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,12),items:[items]})},doRedMark:function(){this.node.doRedMark.apply(this.node,arguments)},unRedMark:function(){this.node.unRedMark.apply(this.node,arguments)},isSelected:function(){return this.node.isSelected()},setSelected:function(b){BI.MultiLayerSelectTreeMidPlusGroupNode.superclass.setSelected.apply(this,arguments),this.node.setSelected(b)},doClick:function(){BI.MultiLayerSelectTreeMidPlusGroupNode.superclass.doClick.apply(this,arguments),this.node.setSelected(this.isSelected())},setOpened:function(v){BI.MultiLayerSelectTreeMidPlusGroupNode.superclass.setOpened.apply(this,arguments),this.node.setOpened(v)}}),BI.shortcut("bi.multilayer_select_tree_mid_plus_group_node",BI.MultiLayerSelectTreeMidPlusGroupNode),BI.MultiLayerSelectTreePlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.MultiLayerSelectTreePlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-multilayer-select-tree-first-plus-group-node bi-list-item-active",layer:0,id:"",pId:"",readonly:!0,open:!1,height:24})},_init:function(){BI.MultiLayerSelectTreePlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.node=BI.createWidget({type:"bi.select_tree_plus_group_node",cls:"bi-list-item-none",stopPropagation:!0,logic:{dynamic:!0},id:o.id,pId:o.pId,keyword:o.keyword,open:o.open,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py}),this.node.on(BI.Controller.EVENT_CHANGE,function(type){self.setSelected(self.isSelected()),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});for(var needBlankLayers=[],pNode=o.pNode;pNode;)pNode.isLastNode&&needBlankLayers.push(pNode.layer),pNode=pNode.pNode;var items=[];BI.count(0,o.layer,function(index){items.push({type:"bi.layout",cls:BI.contains(needBlankLayers,index)?"":"base-line-conn-background",width:12,height:o.height})}),items.push(this.node),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,12),items:[items]})},isOnce:function(){return!0},doRedMark:function(){this.node.doRedMark.apply(this.node,arguments)},unRedMark:function(){this.node.unRedMark.apply(this.node,arguments)},isSelected:function(){return this.node.isSelected()},setSelected:function(b){BI.MultiLayerSelectTreePlusGroupNode.superclass.setSelected.apply(this,arguments),this.node.setSelected(b)},doClick:function(){BI.NodeButton.superclass.doClick.apply(this,arguments),this.node.setSelected(this.isSelected())},setOpened:function(v){BI.MultiLayerSelectTreePlusGroupNode.superclass.setOpened.apply(this,arguments),this.node.setOpened(v)}}),BI.shortcut("bi.multilayer_select_tree_plus_group_node",BI.MultiLayerSelectTreePlusGroupNode),BI.MultiLayerSingleTreeCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiLayerSingleTreeCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multilayer-single-tree-combo",isDefaultInit:!1,height:24,text:"",itemsCreator:BI.emptyFn,items:[],value:"",attributes:{tabIndex:0},allowEdit:!1,allowSearchValue:!1,allowInsertValue:!1})},render:function(){var self=this,o=this.options,combo=o.itemsCreator===BI.emptyFn?this._getSyncConfig():this._getAsyncConfig();return o.allowEdit||o.itemsCreator!==BI.emptyFn?{type:"bi.absolute",items:[{el:combo,left:0,right:0,top:0,bottom:0},{el:{type:"bi.trigger_icon_button",cls:"trigger-icon-button",ref:function(_ref){self.triggerBtn=_ref},width:o.height,height:o.height,handler:function(){self.combo.isViewVisible()?self.combo.hideView():self.combo.showView()}},right:0,bottom:0,top:0}]}:combo},_getBaseConfig:function(){var self=this,o=this.options;return{type:"bi.combo",container:o.container,adjustLength:2,ref:function(_ref){self.combo=_ref},popup:{el:{type:"bi.multilayer_single_tree_popup",isDefaultInit:o.isDefaultInit,itemsCreator:o.itemsCreator,items:o.items,ref:function(_ref){self.trigger&&self.trigger.getSearcher().setAdapter(_ref)},listeners:[{eventName:BI.MultiLayerSingleTreePopup.EVENT_CHANGE,action:function(){self.setValue(this.getValue()),self.combo.hideView(),self.fireEvent(BI.MultiLayerSingleTreeCombo.EVENT_CHANGE)}}]},value:o.value,maxHeight:400,minHeight:240}}},_getSearchConfig:function(){var self=this,o=this.options;return{el:{type:"bi.multilayer_single_tree_trigger",allowInsertValue:o.allowInsertValue,allowSearchValue:o.allowSearchValue,allowEdit:o.allowEdit,cls:"multilayer-single-tree-trigger",ref:function(_ref){self.trigger=_ref},watermark:o.watermark,items:o.items,itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,height:o.height-2,text:o.text,value:o.value,tipType:o.tipType,warningTitle:o.warningTitle,title:o.title,listeners:[{eventName:BI.MultiLayerSingleTreeTrigger.EVENT_CHANGE,action:function(){self.setValue(this.getValue()),self.combo.hideView(),self.fireEvent(BI.MultiLayerSingleTreeCombo.EVENT_CHANGE)}},{eventName:BI.MultiLayerSingleTreeTrigger.EVENT_FOCUS,action:function(){self.fireEvent(BI.MultiLayerSingleTreeCombo.EVENT_FOCUS)}},{eventName:BI.MultiLayerSingleTreeTrigger.EVENT_BLUR,action:function(){self.fireEvent(BI.MultiLayerSingleTreeCombo.EVENT_BLUR)}},{eventName:BI.MultiLayerSingleTreeTrigger.EVENT_SEARCHING,action:function(){self.fireEvent(BI.MultiLayerSingleTreeCombo.EVENT_SEARCHING)}},{eventName:BI.MultiLayerSingleTreeTrigger.EVENT_ADD_ITEM,action:function(){var value=self.trigger.getSearcher().getKeyword();self.combo.setValue([value]),self.combo.hideView()}}]},hideChecker:function(e){return 0===self.triggerBtn.element.find(e.target).length},listeners:[{eventName:BI.Combo.EVENT_AFTER_HIDEVIEW,action:function(){self.trigger.stopEditing()}}]}},_getSyncConfig:function(){var o=this.options,baseConfig=this._getBaseConfig();return BI.extend(baseConfig,o.allowEdit?this._getSearchConfig():{el:{type:"bi.single_tree_trigger",text:o.text,height:o.height,items:o.items,value:o.value}})},_getAsyncConfig:function(){var config=this._getBaseConfig();return BI.extend(config,this._getSearchConfig())},setValue:function(v){v=BI.isArray(v)?v:[v],this.combo.setValue(v)},getValue:function(){return this.combo.getValue()},populate:function(items){this.combo.populate(items)}}),BI.MultiLayerSingleTreeCombo.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiLayerSingleTreeCombo.EVENT_BLUR="EVENT_BLUR",BI.MultiLayerSingleTreeCombo.EVENT_FOCUS="EVENT_FOCUS",BI.MultiLayerSingleTreeCombo.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multilayer_single_tree_combo",BI.MultiLayerSingleTreeCombo),BI.MultiLayerSingleTreeInsertSearchPane=BI.inherit(BI.Widget,{props:function(){return{baseCls:"bi-multilayer-single-tree-popup",tipText:BI.i18nText("BI-No_Selected_Item"),isDefaultInit:!1,itemsCreator:BI.emptyFn,items:[],value:""}},render:function(){var self=this,o=this.options;return this.tree=BI.createWidget({type:"bi.multilayer_select_level_tree",isDefaultInit:o.isDefaultInit,items:o.items,itemsCreator:o.itemsCreator===BI.emptyFn?BI.emptyFn:function(op,callback){o.itemsCreator(op,function(res){callback(res),self.setKeyword(o.keywordGetter())})},keywordGetter:o.keywordGetter,value:o.value,scrollable:null,listeners:[{eventName:BI.Controller.EVENT_CHANGE,action:function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}},{eventName:BI.MultiLayerSelectLevelTree.EVENT_CHANGE,action:function(){self.fireEvent(BI.MultiLayerSingleTreeInsertSearchPane.EVENT_CHANGE)}}]}),{type:"bi.vertical",scrolly:!1,scrollable:!0,vgap:5,items:[{type:"bi.text_button",invisible:!0,text:BI.i18nText("BI-Basic_Click_To_Add_Text",""),height:24,cls:"bi-high-light",hgap:5,ref:function(_ref){self.addNotMatchTip=_ref},handler:function(){self.fireEvent(BI.MultiLayerSingleTreeInsertSearchPane.EVENT_ADD_ITEM,o.keywordGetter())}},this.tree]}},setKeyword:function(keyword){var showTip=BI.isEmptyArray(this.tree.getAllLeaves());this.addNotMatchTip.setVisible(showTip),showTip&&this.addNotMatchTip.setText(BI.i18nText("BI-Basic_Click_To_Add_Text",keyword))},getValue:function(){return this.tree.getValue()},setValue:function(v){v=BI.isArray(v)?v:[v],this.tree.setValue(v)},populate:function(items){this.tree.populate(items)}}),BI.MultiLayerSingleTreeInsertSearchPane.EVENT_ADD_ITEM="EVENT_ADD_ITEM",BI.MultiLayerSingleTreeInsertSearchPane.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multilayer_single_tree_insert_search_pane",BI.MultiLayerSingleTreeInsertSearchPane),BI.MultiLayerSingleLevelTree=BI.inherit(BI.Pane,{_defaultConfig:function(){return BI.extend(BI.MultiLayerSingleLevelTree.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multilayer-single-level-tree",isDefaultInit:!1,items:[],itemsCreator:BI.emptyFn,keywordGetter:BI.emptyFn,chooseType:BI.Selection.Single,scrollable:!0})},_init:function(){var o=this.options;BI.MultiLayerSingleLevelTree.superclass._init.apply(this,arguments),this.storeValue=o.value,this.initTree(this.options.items),this.check()},_formatItems:function(nodes,layer,pNode){var self=this,o=this.options,keyword=o.keywordGetter();return BI.each(nodes,function(i,node){var extend={};node.layer=layer,BI.isKey(node.id)||(node.id=BI.UUID()),node.keyword=node.keyword||keyword,extend.pNode=pNode,node.isParent===!0||node.parent===!0||BI.isNotEmptyArray(node.children)?(extend.type="bi.multilayer_single_tree_mid_plus_group_node",i===nodes.length-1&&(extend.type="bi.multilayer_single_tree_last_plus_group_node",extend.isLastNode=!0),0!==i||pNode||(extend.type="bi.multilayer_single_tree_first_plus_group_node"),0!==i||i!==nodes.length-1||pNode||(extend.type="bi.multilayer_single_tree_plus_group_node"),BI.defaults(node,extend),self._formatItems(node.children,layer+1,node)):(extend.type="bi.multilayer_single_tree_mid_tree_leaf_item",0!==i||pNode||(extend.type="bi.multilayer_single_tree_first_tree_leaf_item"),i===nodes.length-1&&(extend.type="bi.multilayer_single_tree_last_tree_leaf_item"),BI.defaults(node,extend))}),nodes},_assertId:function(sNodes){BI.each(sNodes,function(i,node){node.id=node.id||BI.UUID()})},initTree:function(nodes){var self=this,o=this.options,hasNext=!1;this.empty(),this._assertId(nodes),this.tree=BI.createWidget({type:"bi.custom_tree",cls:"tree-view display-table",expander:{isDefaultInit:o.isDefaultInit,el:{},popup:{type:"bi.custom_tree"}},items:this._formatItems(BI.Tree.transformToTreeFormat(nodes),0),value:o.value,itemsCreator:function(op,callback){1===op.times&&!op.node&&BI.nextTick(function(){self.loading()}),o.itemsCreator(op,function(ob){hasNext=ob.hasNext,1===op.times&&!op.node&&self._populate(ob.items),callback(self._formatItems(BI.Tree.transformToTreeFormat(ob.items),op.node?op.node.layer+1:0,op.node)),self.setValue(self.storeValue),1===op.times&&!op.node&&BI.nextTick(function(){self.loaded()})})},el:{type:"bi.loader",isDefaultInit:o.itemsCreator!==BI.emptyFn,el:{type:"bi.button_tree",chooseType:o.chooseType,behaviors:o.behaviors,layouts:[{type:"bi.vertical"}]},hasNext:function(){return hasNext}}}),this.tree.on(BI.Controller.EVENT_CHANGE,function(type,v){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),type===BI.Events.CLICK&&(self.setValue(v),self.fireEvent(BI.MultiLayerSingleLevelTree.EVENT_CHANGE,v))}),BI.createWidget({type:"bi.adaptive",element:this,scrollable:o.scrollable,items:[this.tree]})},_populate:function(){BI.MultiLayerSelectLevelTree.superclass.populate.apply(this,arguments)},populate:function(nodes){this._populate(nodes),BI.isNull(nodes)?this.tree.populate():this.tree.populate(this._formatItems(BI.Tree.transformToTreeFormat(nodes),0))},setValue:function(v){this.options.chooseType===BI.Selection.None||(this.storeValue=v,this.tree.setValue(v))},getValue:function(){return BI.isArray(this.storeValue)?this.storeValue:BI.isNull(this.storeValue)?[]:[this.storeValue]},getAllLeaves:function(){return this.tree.getAllLeaves()},getNodeById:function(id){return this.tree.getNodeById(id)},getNodeByValue:function(id){return this.tree.getNodeByValue(id)}}),BI.MultiLayerSingleLevelTree.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multilayer_single_level_tree",BI.MultiLayerSingleLevelTree),BI.MultiLayerSingleTreePopup=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiLayerSingleTreePopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multilayer-singletree-popup",tipText:BI.i18nText("BI-No_Selected_Item"),isDefaultInit:!1,itemsCreator:BI.emptyFn,items:[]})},_init:function(){BI.MultiLayerSingleTreePopup.superclass._init.apply(this,arguments);var self=this,o=this.options;this.tree=BI.createWidget({type:"bi.multilayer_single_level_tree",isDefaultInit:o.isDefaultInit,items:o.items,itemsCreator:o.itemsCreator,keywordGetter:o.keywordGetter,value:o.value,scrollable:null}),BI.createWidget({type:"bi.vertical",scrolly:!1,scrollable:!0,element:this,vgap:5,items:[this.tree]}),this.tree.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.tree.on(BI.MultiLayerSingleLevelTree.EVENT_CHANGE,function(){self.fireEvent(BI.MultiLayerSingleTreePopup.EVENT_CHANGE)})},getValue:function(){return this.tree.getValue()},setValue:function(v){v=BI.isArray(v)?v:[v],this.tree.setValue(v)},populate:function(items){this.tree.populate(items)}}),BI.MultiLayerSingleTreePopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multilayer_single_tree_popup",BI.MultiLayerSingleTreePopup),BI.MultiLayerSingleTreeTrigger=BI.inherit(BI.Trigger,{props:function(){return{extraCls:"bi-multi-layer-single-tree-trigger bi-border bi-focus-shadow",height:24,valueFormatter:function(v){return v},itemsCreator:BI.emptyFn,watermark:BI.i18nText("BI-Basic_Search"),allowSearchValue:!1}},render:function(){var self=this,o=this.options;o.itemsCreator===BI.emptyFn&&this._initData();var content={type:"bi.htape",items:[{el:{type:"bi.searcher",ref:function(){self.searcher=this},isAutoSearch:!1,el:{type:"bi.state_editor",ref:function(){self.editor=this},defaultText:o.text,text:this._digest(o.value),value:o.value,height:o.height,tipText:"",watermark:o.watermark,listeners:[{eventName:BI.StateEditor.EVENT_FOCUS,action:function(){self.fireEvent(BI.MultiLayerSingleTreeTrigger.EVENT_FOCUS)}},{eventName:BI.StateEditor.EVENT_BLUR,action:function(){self.fireEvent(BI.MultiLayerSingleTreeTrigger.EVENT_BLUR)}},{eventName:BI.StateEditor.EVENT_CHANGE,action:function(){self.fireEvent(BI.MultiLayerSingleTreeTrigger.EVENT_SEARCHING)}}]},popup:{type:o.allowInsertValue?"bi.multilayer_single_tree_insert_search_pane":"bi.multilayer_single_tree_popup",itemsCreator:o.itemsCreator===BI.emptyFn?BI.emptyFn:function(op,callback){op.keyword=self.editor.getValue(),o.itemsCreator(op,callback)},keywordGetter:function(){return self.editor.getValue()},cls:"bi-card",listeners:[{eventName:BI.MultiLayerSingleTreeInsertSearchPane.EVENT_ADD_ITEM,action:function(){self.options.text=self.getSearcher().getKeyword(),self.fireEvent(BI.MultiLayerSingleTreeTrigger.EVENT_ADD_ITEM)}}],ref:function(_ref){self.popup=_ref}},onSearch:function(obj,callback){var keyword=obj.keyword;o.itemsCreator===BI.emptyFn?(callback(self._getSearchItems(keyword)),o.allowInsertValue&&self.popup.setKeyword(keyword)):callback()},listeners:[{eventName:BI.Searcher.EVENT_CHANGE,action:function(){self.fireEvent(BI.MultiLayerSingleTreeTrigger.EVENT_CHANGE)}}]}},{el:{type:"bi.layout",width:24},width:24}]};return o.allowEdit?content:{type:"bi.absolute",items:[{el:content,left:0,right:0,top:0,bottom:0},{el:{type:"bi.layout"},left:0,right:24,top:0,bottom:0}]}},_initData:function(){var o=this.options;this.tree=new BI.Tree,this.nodes=BI.Tree.treeFormat(BI.deepClone(o.items)),this.tree.initTree(this.nodes)},_getSearchItems:function(keyword){var self=this,o=this.options,items=[];return this.tree.traverse(function(node){var find=BI.Func.getSearchResult(self.tree.isRoot(node)?[]:BI.concat([node.text],o.allowSearchValue?[node.value]:[]),keyword);if(find.find.length>0||find.match.length>0)return items.push(node),!0}),this._fillTreeStructure4Search(items,"id")},_createJson:function(node,open){return{id:node.id,pId:node.pId,text:node.text,value:node.value,isParent:BI.isNotEmptyArray(node.children),open:open}},_getChildren:function(node){var self=this;node.children=node.children||[];var nodes=[];return BI.each(node.children,function(idx,child){var children=self._getChildren(child);nodes=nodes.concat(children)}),node.children.concat(nodes)},_fillTreeStructure4Search:function(leaves){var self=this,result=[],queue=[];for(BI.each(leaves,function(idx,node){queue.push({pId:node.pId}),result.push(node),result=result.concat(self._getChildren(node))});BI.isNotEmptyArray(queue);){var node=queue.pop(),pNode=this.tree.search(this.tree.getRoot(),node.pId,"id");null!=pNode&&(pNode.open=!0,queue.push({pId:pNode.pId}),result.push(pNode))}return BI.uniqBy(BI.map(result,function(idx,node){return self._createJson(node,node.open)}),"id")},_digest:function(v){var o=this.options;if(o.itemsCreator===BI.emptyFn){var result=BI.find(o.items,function(i,item){return item.value===v});return BI.isNotNull(result)?result.text:o.text}return o.valueFormatter(v)}, +stopEditing:function(){this.searcher.stopSearch()},getSearcher:function(){return this.searcher},populate:function(items){this.options.items=items,this._initData()},setValue:function(v){this.editor.setState(this._digest(v[0]))},getValue:function(){return this.searcher.getValue()}}),BI.MultiLayerSingleTreeTrigger.EVENT_FOCUS="EVENT_FOCUS",BI.MultiLayerSingleTreeTrigger.EVENT_BLUR="EVENT_BLUR",BI.MultiLayerSingleTreeTrigger.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiLayerSingleTreeTrigger.EVENT_STOP="EVENT_STOP",BI.MultiLayerSingleTreeTrigger.EVENT_START="EVENT_START",BI.MultiLayerSingleTreeTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.MultiLayerSingleTreeTrigger.EVENT_ADD_ITEM="EVENT_ADD_ITEM",BI.shortcut("bi.multilayer_single_tree_trigger",BI.MultiLayerSingleTreeTrigger),BI.MultiLayerSingleTreeFirstPlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.MultiLayerSingleTreeFirstPlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-multilayer-single-tree-first-plus-group-node bi-list-item",layer:0,id:"",pId:"",open:!1,height:24})},_init:function(){BI.MultiLayerSingleTreeFirstPlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.node=this._createNode();for(var needBlankLayers=[],pNode=o.pNode;pNode;)pNode.isLastNode&&needBlankLayers.push(pNode.layer),pNode=pNode.pNode;var items=[];BI.count(0,o.layer,function(index){items.push({type:"bi.layout",cls:BI.contains(needBlankLayers,index)?"":"base-line-conn-background",width:12,height:o.height})}),items.push(this.node),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,12),items:[items]})},doRedMark:function(){this.node.doRedMark.apply(this.node,arguments)},unRedMark:function(){this.node.unRedMark.apply(this.node,arguments)},doClick:function(){BI.MultiLayerSingleTreeFirstPlusGroupNode.superclass.doClick.apply(this,arguments),this.node.setSelected(this.isSelected())},setOpened:function(v){BI.MultiLayerSingleTreeFirstPlusGroupNode.superclass.setOpened.apply(this,arguments),BI.isNotNull(this.node)&&this.node.setOpened(v)},_createNode:function(){var self=this,o=this.options;return BI.createWidget({type:"bi.first_plus_group_node",cls:"bi-list-item-none",logic:{dynamic:!0},id:o.id,pId:o.pId,open:o.open,isLastNode:o.isLastNode,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword,listeners:[{eventName:BI.Controller.EVENT_CHANGE,action:function(type){type!==BI.Events.CLICK&&self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}}]})}}),BI.shortcut("bi.multilayer_single_tree_first_plus_group_node",BI.MultiLayerSingleTreeFirstPlusGroupNode),BI.MultiLayerSingleTreeLastPlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.MultiLayerSingleTreeLastPlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-multilayer-single-tree-last-plus-group-node bi-list-item",layer:0,id:"",pId:"",open:!1,height:24})},_init:function(){BI.MultiLayerSingleTreeLastPlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.node=this._createNode();for(var needBlankLayers=[],pNode=o.pNode;pNode;)pNode.isLastNode&&needBlankLayers.push(pNode.layer),pNode=pNode.pNode;var items=[];BI.count(0,o.layer,function(index){items.push({type:"bi.layout",cls:BI.contains(needBlankLayers,index)?"":"base-line-conn-background",width:12,height:o.height})}),items.push(this.node),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,12),items:[items]})},doRedMark:function(){this.node.doRedMark.apply(this.node,arguments)},unRedMark:function(){this.node.unRedMark.apply(this.node,arguments)},doClick:function(){BI.MultiLayerSingleTreeLastPlusGroupNode.superclass.doClick.apply(this,arguments),this.node.setSelected(this.isSelected())},setOpened:function(v){BI.MultiLayerSingleTreeLastPlusGroupNode.superclass.setOpened.apply(this,arguments),BI.isNotNull(this.node)&&this.node.setOpened(v)},_createNode:function(){var self=this,o=this.options;return BI.createWidget({type:"bi.last_plus_group_node",cls:"bi-list-item-none",logic:{dynamic:!0},id:o.id,pId:o.pId,open:o.open,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword,listeners:[{eventName:BI.Controller.EVENT_CHANGE,action:function(type){type!==BI.Events.CLICK&&self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}}]})}}),BI.shortcut("bi.multilayer_single_tree_last_plus_group_node",BI.MultiLayerSingleTreeLastPlusGroupNode),BI.MultiLayerSingleTreeMidPlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.MultiLayerSingleTreeMidPlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-multilayer-single-tree-mid-plus-group-node bi-list-item",layer:0,id:"",pId:"",open:!1,height:24})},_init:function(){BI.MultiLayerSingleTreeMidPlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.node=this._createNode();for(var needBlankLayers=[],pNode=o.pNode;pNode;)pNode.isLastNode&&needBlankLayers.push(pNode.layer),pNode=pNode.pNode;var items=[];BI.count(0,o.layer,function(index){items.push({type:"bi.layout",cls:BI.contains(needBlankLayers,index)?"":"base-line-conn-background",width:12,height:o.height})}),items.push(this.node),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,12),items:[items]})},doRedMark:function(){this.node.doRedMark.apply(this.node,arguments)},unRedMark:function(){this.node.unRedMark.apply(this.node,arguments)},doClick:function(){BI.MultiLayerSingleTreeMidPlusGroupNode.superclass.doClick.apply(this,arguments),this.node.setSelected(this.isSelected())},setOpened:function(v){BI.MultiLayerSingleTreeMidPlusGroupNode.superclass.setOpened.apply(this,arguments),BI.isNotNull(this.node)&&this.node.setOpened(v)},_createNode:function(){var self=this,o=this.options;return BI.createWidget({type:"bi.mid_plus_group_node",cls:"bi-list-item-none",logic:{dynamic:!0},id:o.id,pId:o.pId,open:o.open,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword,listeners:[{eventName:BI.Controller.EVENT_CHANGE,action:function(type){type!==BI.Events.CLICK&&self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}}]})}}),BI.shortcut("bi.multilayer_single_tree_mid_plus_group_node",BI.MultiLayerSingleTreeMidPlusGroupNode),BI.MultiLayerSingleTreePlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.MultiLayerSingleTreePlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-multilayer-single-tree-plus-group-node bi-list-item",layer:0,id:"",pId:"",open:!1,height:24})},_init:function(){BI.MultiLayerSingleTreePlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.node=this._createNode();for(var needBlankLayers=[],pNode=o.pNode;pNode;)pNode.isLastNode&&needBlankLayers.push(pNode.layer),pNode=pNode.pNode;var items=[];BI.count(0,o.layer,function(index){items.push({type:"bi.layout",cls:BI.contains(needBlankLayers,index)?"":"base-line-conn-background",width:12,height:o.height})}),items.push(this.node),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,12),items:[items]})},doRedMark:function(){this.node.doRedMark.apply(this.node,arguments)},unRedMark:function(){this.node.unRedMark.apply(this.node,arguments)},doClick:function(){BI.MultiLayerSingleTreePlusGroupNode.superclass.doClick.apply(this,arguments),this.node.setSelected(this.isSelected())},setOpened:function(v){BI.MultiLayerSingleTreePlusGroupNode.superclass.setOpened.apply(this,arguments),BI.isNotNull(this.node)&&this.node.setOpened(v)},_createNode:function(){var self=this,o=this.options;return BI.createWidget({type:"bi.plus_group_node",cls:"bi-list-item-none",logic:{dynamic:!0},id:o.id,pId:o.pId,open:o.open,isLastNode:o.isLastNode,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword,listeners:[{eventName:BI.Controller.EVENT_CHANGE,action:function(type){type!==BI.Events.CLICK&&self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}}]})}}),BI.shortcut("bi.multilayer_single_tree_plus_group_node",BI.MultiLayerSingleTreePlusGroupNode),BI.MultiLayerSingleTreeFirstTreeLeafItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.MultiLayerSingleTreeFirstTreeLeafItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-multilayer-single-tree-first-tree-leaf-item bi-list-item-active",logic:{dynamic:!1},layer:0,id:"",pId:"",height:24})},_init:function(){BI.MultiLayerSingleTreeFirstTreeLeafItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.item=BI.createWidget({type:"bi.first_tree_leaf_item",cls:"bi-list-item-none",logic:{dynamic:!0},id:o.id,pId:o.pId,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword}),this.item.on(BI.Controller.EVENT_CHANGE,function(type){type!==BI.Events.CLICK&&self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});for(var needBlankLayers=[],pNode=o.pNode;pNode;)pNode.isLastNode&&needBlankLayers.push(pNode.layer),pNode=pNode.pNode;var items=[];BI.count(0,o.layer,function(index){items.push({type:"bi.layout",cls:BI.contains(needBlankLayers,index)?"":"base-line-conn-background",width:12,height:o.height})}),items.push(this.item),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,12),items:[items]})},doHighLight:function(){this.item.doHighLight.apply(this.item,arguments)},unHighLight:function(){this.item.unHighLight.apply(this.item,arguments)},getId:function(){return this.options.id},getPId:function(){return this.options.pId},doClick:function(){BI.MultiLayerSingleTreeFirstTreeLeafItem.superclass.doClick.apply(this,arguments),this.item.setSelected(this.isSelected())},setSelected:function(v){BI.MultiLayerSingleTreeFirstTreeLeafItem.superclass.setSelected.apply(this,arguments),this.item.setSelected(v)}}),BI.shortcut("bi.multilayer_single_tree_first_tree_leaf_item",BI.MultiLayerSingleTreeFirstTreeLeafItem),BI.MultiLayerSingleTreeLastTreeLeafItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.MultiLayerSingleTreeLastTreeLeafItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-multilayer-single-tree-last-tree-leaf-item bi-list-item-active",logic:{dynamic:!1},layer:0,id:"",pId:"",height:24})},_init:function(){BI.MultiLayerSingleTreeLastTreeLeafItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.item=BI.createWidget({type:"bi.last_tree_leaf_item",cls:"bi-list-item-none",logic:{dynamic:!0},id:o.id,pId:o.pId,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword}),this.item.on(BI.Controller.EVENT_CHANGE,function(type){type!==BI.Events.CLICK&&self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});for(var needBlankLayers=[],pNode=o.pNode;pNode;)pNode.isLastNode&&needBlankLayers.push(pNode.layer),pNode=pNode.pNode;var items=[];BI.count(0,o.layer,function(index){items.push({type:"bi.layout",cls:BI.contains(needBlankLayers,index)?"":"base-line-conn-background",width:12,height:o.height})}),items.push(this.item),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,12),items:[items]})},doHighLight:function(){this.item.doHighLight.apply(this.item,arguments)},unHighLight:function(){this.item.unHighLight.apply(this.item,arguments)},getId:function(){return this.options.id},getPId:function(){return this.options.pId},doClick:function(){BI.MultiLayerSingleTreeLastTreeLeafItem.superclass.doClick.apply(this,arguments),this.item.setSelected(this.isSelected())},setSelected:function(v){BI.MultiLayerSingleTreeLastTreeLeafItem.superclass.setSelected.apply(this,arguments),this.item.setSelected(v)}}),BI.shortcut("bi.multilayer_single_tree_last_tree_leaf_item",BI.MultiLayerSingleTreeLastTreeLeafItem),BI.MultiLayerSingleTreeMidTreeLeafItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.MultiLayerSingleTreeMidTreeLeafItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-multilayer-single-tree-mid-tree-leaf-item bi-list-item-active",logic:{dynamic:!1},layer:0,id:"",pId:"",height:24})},_init:function(){BI.MultiLayerSingleTreeMidTreeLeafItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.item=BI.createWidget({type:"bi.mid_tree_leaf_item",cls:"bi-list-item-none",logic:{dynamic:!0},id:o.id,pId:o.pId,height:o.height,hgap:o.hgap,text:o.text,value:o.value,py:o.py,keyword:o.keyword}),this.item.on(BI.Controller.EVENT_CHANGE,function(type){type!==BI.Events.CLICK&&self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)});for(var needBlankLayers=[],pNode=o.pNode;pNode;)pNode.isLastNode&&needBlankLayers.push(pNode.layer),pNode=pNode.pNode;var items=[];BI.count(0,o.layer,function(index){items.push({type:"bi.layout",cls:BI.contains(needBlankLayers,index)?"":"base-line-conn-background",width:12,height:o.height})}),items.push(this.item),BI.createWidget({type:"bi.td",element:this,columnSize:BI.makeArray(o.layer,12),items:[items]})},doHighLight:function(){this.item.doHighLight.apply(this.item,arguments)},unHighLight:function(){this.item.unHighLight.apply(this.item,arguments)},getId:function(){return this.options.id},getPId:function(){return this.options.pId},doClick:function(){BI.MultiLayerSingleTreeMidTreeLeafItem.superclass.doClick.apply(this,arguments),this.item.setSelected(this.isSelected())},setSelected:function(v){BI.MultiLayerSingleTreeMidTreeLeafItem.superclass.setSelected.apply(this,arguments),this.item.setSelected(v)}}),BI.shortcut("bi.multilayer_single_tree_mid_tree_leaf_item",BI.MultiLayerSingleTreeMidTreeLeafItem),BI.MultiSelectCheckPane=BI.inherit(BI.Widget,{constants:{height:12,lgap:10,tgap:10,bgap:5},_defaultConfig:function(){return BI.extend(BI.MultiSelectCheckPane.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-check-pane bi-background",items:[],itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,onClickContinueSelect:BI.emptyFn})},_init:function(){BI.MultiSelectCheckPane.superclass._init.apply(this,arguments);var self=this,opts=this.options;this.storeValue=opts.value||{},this.display=BI.createWidget({type:"bi.display_selected_list",items:opts.items,itemsCreator:function(op,callback){return op=BI.extend(op||{},{selectedValues:self.storeValue.value}),self.storeValue.type===BI.Selection.Multi?void callback({items:BI.map(self.storeValue.value,function(i,v){var txt=opts.valueFormatter(v)||v;return{text:txt,value:v,title:txt}})}):void opts.itemsCreator(op,callback)}}),this.continueSelect=BI.createWidget({type:"bi.text_button",text:BI.i18nText("BI-Continue_Select"),cls:"multi-select-check-selected bi-high-light"}),this.continueSelect.on(BI.TextButton.EVENT_CHANGE,function(){opts.onClickContinueSelect()}),BI.createWidget({type:"bi.vtape",element:this,items:[{height:this.constants.height,el:{type:"bi.vertical_adapt",cls:"multi-select-continue-select",items:[{el:{type:"bi.label",text:BI.i18nText("BI-Selected_Data")},lgap:this.constants.lgap},{el:this.continueSelect,lgap:this.constants.lgap}]},tgap:this.constants.tgap},{height:"fill",el:this.display,tgap:this.constants.bgap}]})},setValue:function(v){this.storeValue=v||{}},empty:function(){this.display.empty()},populate:function(){this.display.populate.apply(this.display,arguments)}}),BI.shortcut("bi.multi_select_check_pane",BI.MultiSelectCheckPane),BI.DisplaySelectedList=BI.inherit(BI.Pane,{constants:{height:24,lgap:10},_defaultConfig:function(){return BI.extend(BI.DisplaySelectedList.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-display-list",itemsCreator:BI.emptyFn,items:[]})},_init:function(){BI.DisplaySelectedList.superclass._init.apply(this,arguments);var self=this,opts=this.options;this.hasNext=!1,this.button_group=BI.createWidget({type:"bi.list_pane",element:this,el:{type:"bi.loader",isDefaultInit:!1,logic:{dynamic:!0,scrolly:!0},items:this._createItems(opts.items),chooseType:BI.ButtonGroup.CHOOSE_TYPE_MULTI,layouts:[{type:"bi.vertical",lgap:10}]},itemsCreator:function(options,callback){opts.itemsCreator(options,function(ob){self.hasNext=!!ob.hasNext,callback(self._createItems(ob.items))})},hasNext:function(){return self.hasNext}})},_createItems:function(items){return BI.createItems(items,{type:"bi.icon_text_item",cls:"cursor-default check-font icon-size-12 display-list-item bi-tips",once:!0,invalid:!0,selected:!0,height:this.constants.height,logic:{dynamic:!0}})},empty:function(){this.button_group.empty()},populate:function(items){0===arguments.length?this.button_group.populate():this.button_group.populate(this._createItems(items))}}),BI.shortcut("bi.display_selected_list",BI.DisplaySelectedList),BI.MultiSelectCombo=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.MultiSelectCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-combo",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,height:24,attributes:{tabIndex:0},allowEdit:!0})},_init:function(){BI.MultiSelectCombo.superclass._init.apply(this,arguments);var self=this,o=this.options,assertShowValue=function(){BI.isKey(self._startValue)&&(self.storeValue.type===BI.Selection.All?BI.remove(self.storeValue.value,self._startValue):BI.pushDistinct(self.storeValue.value,self._startValue)),self.trigger.getSearcher().setState(self.storeValue),self.numberCounter.setButtonChecked(self.storeValue)};this.storeValue=o.value||{},this._assertValue(this.storeValue),this.requesting=!1,this.trigger=BI.createWidget({type:"bi.multi_select_trigger",allowEdit:o.allowEdit,height:o.height,text:o.text,masker:{offset:{left:0,top:0,right:0,bottom:25}},valueFormatter:o.valueFormatter,itemsCreator:BI.bind(this._itemsCreator4Trigger,this),value:this.storeValue}),this.trigger.on(BI.MultiSelectTrigger.EVENT_FOCUS,function(){self.fireEvent(BI.MultiSelectCombo.EVENT_FOCUS)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_BLUR,function(){self.fireEvent(BI.MultiSelectCombo.EVENT_BLUR)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_START,function(){self._setStartValue(""),this.getSearcher().setValue(self.storeValue)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP,function(){self._setStartValue(""),self.fireEvent(BI.MultiSelectCombo.EVENT_STOP)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_PAUSE,function(){if(this.getSearcher().hasMatched()){var keyword=this.getSearcher().getKeyword();self._join({type:BI.Selection.Multi,value:[keyword]},function(){self.combo.setValue(self.storeValue),self._setStartValue(keyword),assertShowValue(),self.populate(),self._setStartValue("")})}}),this.trigger.on(BI.MultiSelectTrigger.EVENT_SEARCHING,function(keywords){var last=BI.last(keywords);keywords=BI.initial(keywords||[]),keywords.length>0&&self._joinKeywords(keywords,function(){BI.isEndWithBlank(last)?(self.combo.setValue(self.storeValue),assertShowValue(),self.combo.populate(),self._setStartValue("")):(self.combo.setValue(self.storeValue),assertShowValue())}),self.fireEvent(BI.MultiSelectCombo.EVENT_SEARCHING)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_CHANGE,function(value,obj){obj instanceof BI.MultiSelectBar?self._joinAll(this.getValue(),function(){assertShowValue()}):self._join(this.getValue(),function(){assertShowValue()}),self.fireEvent(BI.MultiSelectCombo.EVENT_CLICK_ITEM)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW,function(){self.numberCounter.updateSelectedValue(self.storeValue)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_COUNTER_CLICK,function(){self.combo.isViewVisible()||self.combo.showView()}),this.combo=BI.createWidget({type:"bi.combo",toggle:!1,container:o.container,el:this.trigger,adjustLength:1,popup:{type:"bi.multi_select_popup_view",ref:function(){self.popup=this,self.trigger.setAdapter(this),self.numberCounter.setAdapter(this)},listeners:[{eventName:BI.MultiSelectPopupView.EVENT_CHANGE,action:function(){self.storeValue=this.getValue(),self._adjust(function(){assertShowValue()}),self.fireEvent(BI.MultiSelectCombo.EVENT_CLICK_ITEM)}},{eventName:BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM,action:function(){self._defaultState()}},{eventName:BI.MultiSelectPopupView.EVENT_CLICK_CLEAR,action:function(){self.setValue(),self._defaultState()}}],itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,onLoaded:function(){BI.nextTick(function(){self.combo.adjustWidth(),self.combo.adjustHeight(),self.numberCounter.adjustView(),self.trigger.getSearcher().adjustView()})}},value:o.value,hideChecker:function(e){return 0===triggerBtn.element.find(e.target).length&&0===self.numberCounter.element.find(e.target).length}}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){this.setValue(self.storeValue),BI.nextTick(function(){self.populate()})}),this.wants2Quit=!1,this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW,function(){self._stopEditing(),self.requesting===!0?self.wants2Quit=!0:self.fireEvent(BI.MultiSelectCombo.EVENT_CONFIRM)});var triggerBtn=BI.createWidget({type:"bi.trigger_icon_button",width:o.height,height:o.height,cls:"multi-select-trigger-icon-button"});triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE,function(){self.numberCounter.hideView(),self.combo.isViewVisible()?self.combo.hideView():self.combo.showView()}),this.numberCounter=BI.createWidget({type:"bi.multi_select_check_selected_switcher",masker:{offset:{left:0,top:0,right:0,bottom:25}},valueFormatter:o.valueFormatter,itemsCreator:BI.bind(this._itemsCreator4Trigger,this),value:this.storeValue}),this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE,function(){self.combo.isViewVisible()||self.combo.showView()}),this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW,function(){this.updateSelectedValue(self.storeValue)}),this.numberCounter.on(BI.Events.VIEW,function(b){BI.nextTick(function(){self.trigger.refreshPlaceHolderWidth(b===!0?self.numberCounter.element.outerWidth()+8:0)})}),this.trigger.element.click(function(e){self.trigger.element.find(e.target).length>0&&self.numberCounter.hideView()}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.combo,left:0,right:0,top:0,bottom:0},{el:triggerBtn,right:0,top:0,bottom:0},{el:{type:"bi.vertical_adapt",items:[this.numberCounter]},right:o.height,top:0,height:o.height}]})},_itemsCreator4Trigger:function(op,callback){var self=this,o=this.options;o.itemsCreator(op,function(res){1===op.times&&BI.isNotNull(op.keywords)&&self.trigger.setValue(BI.deepClone(self.getValue())),callback.apply(self,arguments)})},_stopEditing:function(){this.trigger.stopEditing(),this.numberCounter.hideView()},_defaultState:function(){this._stopEditing(),this.combo.hideView()},_assertValue:function(val){val||(val={}),val.type||(val.type=BI.Selection.Multi),val.value||(val.value=[])},_makeMap:function(values){return BI.makeObject(values||[])},_joinKeywords:function(keywords,callback){function digest(items){var selectedMap=self._makeMap(items);BI.each(keywords,function(i,val){BI.isNotNull(selectedMap[val])&&(self.storeValue.type===BI.Selection.Multi?BI.pushDistinct(self.storeValue.value,val):BI.remove(self.storeValue.value,val))}),self._adjust(callback)}var self=this,o=this.options;this._assertValue(this.storeValue),this.requesting=!0,o.itemsCreator({type:BI.MultiSelectCombo.REQ_GET_ALL_DATA,keywords:keywords},function(ob){var values=BI.map(ob.items,"value");digest(values)})},_joinAll:function(res,callback){var self=this,o=this.options;this._assertValue(res),this.requesting=!0,o.itemsCreator({type:BI.MultiSelectCombo.REQ_GET_ALL_DATA,keywords:[this.trigger.getKey()]},function(ob){var items=BI.map(ob.items,"value");if(self.storeValue.type===res.type){var change=!1,map=self._makeMap(self.storeValue.value);return BI.each(items,function(i,v){BI.isNotNull(map[v])&&(change=!0,self.storeValue.assist&&self.storeValue.assist.push(map[v]),delete map[v])}),change&&(self.storeValue.value=BI.values(map)),void self._adjust(callback)}var selectedMap=self._makeMap(self.storeValue.value),notSelectedMap=self._makeMap(res.value),newItems=[];BI.each(items,function(i,item){BI.isNotNull(selectedMap[items[i]])&&(self.storeValue.assist&&self.storeValue.assist.push(selectedMap[items[i]]),delete selectedMap[items[i]]),BI.isNull(notSelectedMap[items[i]])&&(BI.remove(self.storeValue.assist,item),newItems.push(item))}),self.storeValue.value=newItems.concat(BI.values(selectedMap)),self._adjust(callback)})},_adjust:function(callback){function adjust(){self.wants2Quit===!0&&(self.fireEvent(BI.MultiSelectCombo.EVENT_CONFIRM),self.wants2Quit=!1),self.requesting=!1}var self=this,o=this.options;adjust(),callback()},_join:function(res,callback){var self=this,o=this.options;if(this._assertValue(res),this._assertValue(this.storeValue),this.storeValue.type===res.type){var map=this._makeMap(this.storeValue.value);BI.each(res.value,function(i,v){map[v]||(self.storeValue.value.push(v),BI.remove(self.storeValue.assist,v),map[v]=v)});var change=!1;return BI.each(res.assist,function(i,v){BI.isNotNull(map[v])&&(change=!0,self.storeValue.assist&&self.storeValue.assist.push(map[v]),delete map[v])}),change&&(this.storeValue.value=BI.values(map)),void self._adjust(callback)}this._joinAll(res,callback)},_setStartValue:function(value){this._startValue=value,this.popup.setStartValue(value)},setValue:function(v){this.storeValue=v||{},this._assertValue(this.storeValue),this.combo.setValue(this.storeValue),this.numberCounter.setValue(this.storeValue)},getValue:function(){return BI.deepClone(this.storeValue)},populate:function(){this.combo.populate.apply(this.combo,arguments)}}),BI.extend(BI.MultiSelectCombo,{REQ_GET_DATA_LENGTH:1,REQ_GET_ALL_DATA:-1}),BI.MultiSelectCombo.EVENT_BLUR="EVENT_BLUR",BI.MultiSelectCombo.EVENT_FOCUS="EVENT_FOCUS",BI.MultiSelectCombo.EVENT_STOP="EVENT_STOP",BI.MultiSelectCombo.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiSelectCombo.EVENT_CLICK_ITEM="EVENT_CLICK_ITEM",BI.MultiSelectCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.multi_select_combo",BI.MultiSelectCombo),BI.MultiSelectInsertCombo=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.MultiSelectInsertCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-insert-combo",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,height:24,attributes:{tabIndex:0},allowEdit:!0})},_init:function(){BI.MultiSelectInsertCombo.superclass._init.apply(this,arguments);var self=this,o=this.options,assertShowValue=function(){BI.isKey(self._startValue)&&(self.storeValue.type===BI.Selection.All?BI.remove(self.storeValue.value,self._startValue):BI.pushDistinct(self.storeValue.value,self._startValue)),self.trigger.getSearcher().setState(self.storeValue),self.numberCounter.setButtonChecked(self.storeValue)};this.storeValue=o.value||{},this.requesting=!1,this.trigger=BI.createWidget({type:"bi.multi_select_insert_trigger",allowEdit:o.allowEdit,height:o.height,text:o.text,watermark:o.watermark,masker:{offset:{left:0,top:0,right:0,bottom:25}},valueFormatter:o.valueFormatter,itemsCreator:BI.bind(this._itemsCreator4Trigger,this),value:o.value}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_FOCUS,function(){self.fireEvent(BI.MultiSelectInsertCombo.EVENT_FOCUS)}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_BLUR,function(){self.fireEvent(BI.MultiSelectInsertCombo.EVENT_BLUR)}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_START,function(){self._setStartValue(""),this.getSearcher().setValue(self.storeValue)}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_STOP,function(){self._setStartValue(""),self.fireEvent(BI.MultiSelectInsertCombo.EVENT_STOP)}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_PAUSE,function(){this.getSearcher().hasMatched()&&self._addItem(assertShowValue)}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_ADD_ITEM,function(){this.getSearcher().hasMatched()||(self._addItem(assertShowValue),self._stopEditing())}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_SEARCHING,function(keywords){var last=BI.last(keywords);keywords=BI.initial(keywords||[]),keywords.length>0&&self._joinKeywords(keywords,function(){BI.isEndWithBlank(last)?(self.combo.setValue(self.storeValue),assertShowValue(),self.combo.populate(),self._setStartValue("")):(self.combo.setValue(self.storeValue),assertShowValue())}),self.fireEvent(BI.MultiSelectInsertCombo.EVENT_SEARCHING)}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_CHANGE,function(value,obj){obj instanceof BI.MultiSelectBar?self._joinAll(this.getValue(),function(){assertShowValue()}):self._join(this.getValue(),function(){assertShowValue()}),self.fireEvent(BI.MultiSelectInsertCombo.EVENT_CLICK_ITEM)}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW,function(){self.numberCounter.updateSelectedValue(self.storeValue)}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_COUNTER_CLICK,function(){self.combo.isViewVisible()||self.combo.showView()}),this.combo=BI.createWidget({type:"bi.combo",toggle:!1,el:this.trigger,adjustLength:1,container:o.container,popup:{type:"bi.multi_select_popup_view",ref:function(){self.popup=this,self.trigger.setAdapter(this),self.numberCounter.setAdapter(this)},listeners:[{eventName:BI.MultiSelectPopupView.EVENT_CHANGE,action:function(){self.storeValue=this.getValue(),self._adjust(function(){assertShowValue()}),self.fireEvent(BI.MultiSelectInsertCombo.EVENT_CLICK_ITEM)}},{eventName:BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM,action:function(){self._defaultState()}},{eventName:BI.MultiSelectPopupView.EVENT_CLICK_CLEAR,action:function(){self.setValue(),self._defaultState()}}],itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,onLoaded:function(){BI.nextTick(function(){self.combo.adjustWidth(),self.combo.adjustHeight(),self.numberCounter.adjustView(),self.trigger.getSearcher().adjustView()})}},value:o.value,hideChecker:function(e){return 0===triggerBtn.element.find(e.target).length&&0===self.numberCounter.element.find(e.target).length}}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){this.setValue(self.storeValue),BI.nextTick(function(){self.populate()})}),this.wants2Quit=!1,this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW,function(){self._stopEditing(),self.requesting===!0?self.wants2Quit=!0:self.fireEvent(BI.MultiSelectInsertCombo.EVENT_CONFIRM)});var triggerBtn=BI.createWidget({type:"bi.trigger_icon_button",width:o.height,height:o.height,cls:"multi-select-trigger-icon-button"});triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE,function(){self.numberCounter.hideView(),self.combo.isViewVisible()?self.combo.hideView():self.combo.showView()}),this.numberCounter=BI.createWidget({type:"bi.multi_select_check_selected_switcher",masker:{offset:{left:0,top:0,right:0,bottom:25}},valueFormatter:o.valueFormatter,itemsCreator:BI.bind(this._itemsCreator4Trigger,this),value:o.value}),this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE,function(){self.combo.isViewVisible()||self.combo.showView()}),this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW,function(){this.updateSelectedValue(self.storeValue)}),this.numberCounter.on(BI.Events.VIEW,function(b){BI.nextTick(function(){self.trigger.refreshPlaceHolderWidth(b===!0?self.numberCounter.element.outerWidth()+8:0)})}),this.trigger.element.click(function(e){self.trigger.element.find(e.target).length>0&&self.numberCounter.hideView()}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.combo,left:0,right:0,top:0,bottom:0},{el:triggerBtn,right:0,top:0,bottom:0},{el:{type:"bi.vertical_adapt",items:[this.numberCounter]},right:o.height,top:0,height:o.height}]})},_itemsCreator4Trigger:function(op,callback){var self=this,o=this.options;o.itemsCreator(op,function(res){1===op.times&&BI.isNotNull(op.keywords)&&self.trigger.setValue(BI.deepClone(self.getValue())),callback.apply(self,arguments)})},_addItem:function(assertShowValue){var self=this,keyword=this.trigger.getSearcher().getKeyword();this._join({type:BI.Selection.Multi,value:[keyword]},function(){self.storeValue.type===BI.Selection.Multi&&BI.pushDistinct(self.storeValue.value,keyword),self.combo.setValue(self.storeValue),self._setStartValue(keyword), +assertShowValue(),self.populate(),self._setStartValue("")})},_stopEditing:function(){this.trigger.stopEditing(),this.numberCounter.hideView()},_defaultState:function(){this._stopEditing(),this.combo.hideView()},_assertValue:function(val){val||(val={}),val.type||(val.type=BI.Selection.Multi),val.value||(val.value=[])},_makeMap:function(values){return BI.makeObject(values||[])},_joinKeywords:function(keywords,callback){function digest(items){var selectedMap=self._makeMap(items);BI.each(keywords,function(i,val){BI.isNotNull(selectedMap[val])&&(self.storeValue.type===BI.Selection.Multi?BI.pushDistinct(self.storeValue.value,val):BI.remove(self.storeValue.value,val))}),self._adjust(callback)}var self=this,o=this.options;this._assertValue(this.storeValue),this.requesting=!0,o.itemsCreator({type:BI.MultiSelectInsertCombo.REQ_GET_ALL_DATA,keywords:keywords},function(ob){var values=BI.map(ob.items,"value");digest(values)})},_joinAll:function(res,callback){var self=this,o=this.options;this._assertValue(res),this.requesting=!0,o.itemsCreator({type:BI.MultiSelectInsertCombo.REQ_GET_ALL_DATA,keywords:[this.trigger.getKey()]},function(ob){var items=BI.map(ob.items,"value");if(self.storeValue.type===res.type){var change=!1,map=self._makeMap(self.storeValue.value);return BI.each(items,function(i,v){BI.isNotNull(map[v])&&(change=!0,self.storeValue.assist&&self.storeValue.assist.push(map[v]),delete map[v])}),change&&(self.storeValue.value=BI.values(map)),void self._adjust(callback)}var selectedMap=self._makeMap(self.storeValue.value),notSelectedMap=self._makeMap(res.value),newItems=[];BI.each(items,function(i,item){BI.isNotNull(selectedMap[items[i]])&&(self.storeValue.assist&&self.storeValue.assist.push(selectedMap[items[i]]),delete selectedMap[items[i]]),BI.isNull(notSelectedMap[items[i]])&&(BI.remove(self.storeValue.assist,item),newItems.push(item))}),self.storeValue.value=newItems.concat(BI.values(selectedMap)),self._adjust(callback)})},_adjust:function(callback){function adjust(){self.wants2Quit===!0&&(self.fireEvent(BI.MultiSelectInsertCombo.EVENT_CONFIRM),self.wants2Quit=!1),self.requesting=!1}var self=this,o=this.options;adjust(),callback()},_join:function(res,callback){var self=this,o=this.options;if(this._assertValue(res),this._assertValue(this.storeValue),this.storeValue.type===res.type){var map=this._makeMap(this.storeValue.value);BI.each(res.value,function(i,v){map[v]||(self.storeValue.value.push(v),BI.remove(self.storeValue.assist,v),map[v]=v)});var change=!1;return BI.each(res.assist,function(i,v){BI.isNotNull(map[v])&&(change=!0,self.storeValue.assist&&self.storeValue.assist.push(map[v]),delete map[v])}),change&&(this.storeValue.value=BI.values(map)),void self._adjust(callback)}this._joinAll(res,callback)},_setStartValue:function(value){this._startValue=value,this.popup.setStartValue(value)},setValue:function(v){this.storeValue=v||{},this._assertValue(this.storeValue),this.combo.setValue(this.storeValue),this.numberCounter.setValue(this.storeValue)},getValue:function(){return BI.deepClone(this.storeValue)},populate:function(){this.combo.populate.apply(this.combo,arguments)}}),BI.extend(BI.MultiSelectInsertCombo,{REQ_GET_DATA_LENGTH:1,REQ_GET_ALL_DATA:-1}),BI.MultiSelectInsertCombo.EVENT_FOCUS="EVENT_FOCUS",BI.MultiSelectInsertCombo.EVENT_BLUR="EVENT_BLUR",BI.MultiSelectInsertCombo.EVENT_STOP="EVENT_STOP",BI.MultiSelectInsertCombo.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiSelectInsertCombo.EVENT_CLICK_ITEM="EVENT_CLICK_ITEM",BI.MultiSelectInsertCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.multi_select_insert_combo",BI.MultiSelectInsertCombo),BI.MultiSelectInsertNoBarCombo=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.MultiSelectInsertNoBarCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-insert-combo",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,height:24,attributes:{tabIndex:0}})},_init:function(){BI.MultiSelectInsertNoBarCombo.superclass._init.apply(this,arguments);var self=this,o=this.options,assertShowValue=function(){BI.isKey(self._startValue)&&(self.storeValue.type===BI.Selection.All?BI.remove(self.storeValue.value,self._startValue):BI.pushDistinct(self.storeValue.value,self._startValue)),self.trigger.getSearcher().setState(self.storeValue),self.numberCounter.setButtonChecked(self.storeValue)};this.storeValue={type:BI.Selection.Multi,value:o.value||[]},this.requesting=!1,this.trigger=BI.createWidget({type:"bi.multi_select_insert_trigger",height:o.height,text:o.text,masker:{offset:{left:0,top:0,right:0,bottom:25}},valueFormatter:o.valueFormatter,itemsCreator:BI.bind(this._itemsCreator4Trigger,this),value:{type:BI.Selection.Multi,value:o.value}}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_START,function(){self._setStartValue(""),this.getSearcher().setValue(self.storeValue)}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_STOP,function(){self._setStartValue("")}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_PAUSE,function(){this.getSearcher().hasMatched()&&self._addItem(assertShowValue)}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_ADD_ITEM,function(){this.getSearcher().hasMatched()||(self._addItem(assertShowValue),self._stopEditing())}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_SEARCHING,function(keywords){var last=BI.last(keywords);keywords=BI.initial(keywords||[]),keywords.length>0&&self._joinKeywords(keywords,function(){BI.isEndWithBlank(last)?(self.combo.setValue(self.storeValue),assertShowValue(),self.combo.populate(),self._setStartValue("")):(self.combo.setValue(self.storeValue),assertShowValue())})}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_CHANGE,function(value,obj){obj instanceof BI.MultiSelectBar?self._joinAll(this.getValue(),function(){assertShowValue()}):self._join(this.getValue(),function(){assertShowValue()})}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW,function(){self.numberCounter.updateSelectedValue(self.storeValue)}),this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_COUNTER_CLICK,function(){self.combo.isViewVisible()||self.combo.showView()}),this.combo=BI.createWidget({type:"bi.combo",toggle:!1,container:o.container,el:this.trigger,adjustLength:1,popup:{type:"bi.multi_select_no_bar_popup_view",ref:function(){self.popup=this,self.trigger.setAdapter(this),self.numberCounter.setAdapter(this)},listeners:[{eventName:BI.MultiSelectPopupView.EVENT_CHANGE,action:function(){self.storeValue=this.getValue(),self._adjust(function(){assertShowValue()})}},{eventName:BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM,action:function(){self._defaultState()}},{eventName:BI.MultiSelectPopupView.EVENT_CLICK_CLEAR,action:function(){self.setValue(),self._defaultState()}}],itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,onLoaded:function(){BI.nextTick(function(){self.combo.adjustWidth(),self.combo.adjustHeight(),self.numberCounter.adjustView(),self.trigger.getSearcher().adjustView()})}},value:{type:BI.Selection.Multi,value:o.value},hideChecker:function(e){return 0===triggerBtn.element.find(e.target).length&&0===self.numberCounter.element.find(e.target).length}}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){this.setValue(self.storeValue),BI.nextTick(function(){self.populate()})}),this.wants2Quit=!1,this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW,function(){self._stopEditing(),self.requesting===!0?self.wants2Quit=!0:self.fireEvent(BI.MultiSelectInsertNoBarCombo.EVENT_CONFIRM)});var triggerBtn=BI.createWidget({type:"bi.trigger_icon_button",width:o.height,height:o.height,cls:"multi-select-trigger-icon-button"});triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE,function(){self.numberCounter.hideView(),self.combo.isViewVisible()?self.combo.hideView():self.combo.showView()}),this.numberCounter=BI.createWidget({type:"bi.multi_select_check_selected_switcher",masker:{offset:{left:0,top:0,right:0,bottom:25}},valueFormatter:o.valueFormatter,itemsCreator:BI.bind(this._itemsCreator4Trigger,this),value:{type:BI.Selection.Multi,value:o.value}}),this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE,function(){self.combo.isViewVisible()||self.combo.showView()}),this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW,function(){this.updateSelectedValue(self.storeValue)}),this.numberCounter.on(BI.Events.VIEW,function(b){BI.nextTick(function(){self.trigger.refreshPlaceHolderWidth(b===!0?self.numberCounter.element.outerWidth()+8:0)})}),this.trigger.element.click(function(e){self.trigger.element.find(e.target).length>0&&self.numberCounter.hideView()}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.combo,left:0,right:0,top:0,bottom:0},{el:triggerBtn,right:0,top:0,bottom:0},{el:{type:"bi.vertical_adapt",items:[this.numberCounter]},right:o.height,top:0,height:o.height}]})},_itemsCreator4Trigger:function(op,callback){var self=this,o=this.options;o.itemsCreator(op,function(res){1===op.times&&BI.isNotNull(op.keywords)&&self.trigger.setValue(BI.deepClone(self.getValue())),callback.apply(self,arguments)})},_addItem:function(assertShowValue){var self=this,keyword=this.trigger.getSearcher().getKeyword();this._join({type:BI.Selection.Multi,value:[keyword]},function(){self.storeValue.type===BI.Selection.Multi&&BI.pushDistinct(self.storeValue.value,keyword),self.combo.setValue(self.storeValue),self._setStartValue(keyword),assertShowValue(),self.populate(),self._setStartValue("")})},_stopEditing:function(){this.trigger.stopEditing(),this.numberCounter.hideView()},_defaultState:function(){this._stopEditing(),this.combo.hideView()},_assertValue:function(val){val||(val={}),val.type||(val.type=BI.Selection.Multi),val.value||(val.value=[])},_makeMap:function(values){return BI.makeObject(values||[])},_joinKeywords:function(keywords,callback){function digest(items){var selectedMap=self._makeMap(items);BI.each(keywords,function(i,val){BI.isNotNull(selectedMap[val])&&(self.storeValue.type===BI.Selection.Multi?BI.pushDistinct(self.storeValue.value,val):BI.remove(self.storeValue.value,val))}),self._adjust(callback)}var self=this,o=this.options;this._assertValue(this.storeValue),this.requesting=!0,o.itemsCreator({type:BI.MultiSelectInsertNoBarCombo.REQ_GET_ALL_DATA,keywords:keywords},function(ob){var values=BI.map(ob.items,"value");digest(values)})},_joinAll:function(res,callback){var self=this,o=this.options;this._assertValue(res),this.requesting=!0,o.itemsCreator({type:BI.MultiSelectInsertNoBarCombo.REQ_GET_ALL_DATA,keywords:[this.trigger.getKey()]},function(ob){var items=BI.map(ob.items,"value");if(self.storeValue.type===res.type){var change=!1,map=self._makeMap(self.storeValue.value);return BI.each(items,function(i,v){BI.isNotNull(map[v])&&(change=!0,self.storeValue.assist&&self.storeValue.assist.push(map[v]),delete map[v])}),change&&(self.storeValue.value=BI.values(map)),void self._adjust(callback)}var selectedMap=self._makeMap(self.storeValue.value),notSelectedMap=self._makeMap(res.value),newItems=[];BI.each(items,function(i,item){BI.isNotNull(selectedMap[items[i]])&&(self.storeValue.assist&&self.storeValue.assist.push(selectedMap[items[i]]),delete selectedMap[items[i]]),BI.isNull(notSelectedMap[items[i]])&&(BI.remove(self.storeValue.assist,item),newItems.push(item))}),self.storeValue.value=newItems.concat(BI.values(selectedMap)),self._adjust(callback)})},_adjust:function(callback){function adjust(){self.wants2Quit===!0&&(self.fireEvent(BI.MultiSelectInsertNoBarCombo.EVENT_CONFIRM),self.wants2Quit=!1),self.requesting=!1}var self=this,o=this.options;adjust(),callback()},_join:function(res,callback){var self=this,o=this.options;if(this._assertValue(res),this._assertValue(this.storeValue),this.storeValue.type===res.type){var map=this._makeMap(this.storeValue.value);BI.each(res.value,function(i,v){map[v]||(self.storeValue.value.push(v),BI.remove(self.storeValue.assist,v),map[v]=v)});var change=!1;return BI.each(res.assist,function(i,v){BI.isNotNull(map[v])&&(change=!0,self.storeValue.assist&&self.storeValue.assist.push(map[v]),delete map[v])}),change&&(this.storeValue.value=BI.values(map)),void self._adjust(callback)}this._joinAll(res,callback)},_setStartValue:function(value){this._startValue=value,this.popup.setStartValue(value)},setValue:function(v){this.storeValue={type:BI.Selection.Multi,value:v||[]},this.combo.setValue(this.storeValue),this.numberCounter.setValue(this.storeValue)},getValue:function(){return BI.deepClone(this.storeValue.value)},populate:function(){this.combo.populate.apply(this.combo,arguments)}}),BI.extend(BI.MultiSelectInsertNoBarCombo,{REQ_GET_DATA_LENGTH:1,REQ_GET_ALL_DATA:-1}),BI.MultiSelectInsertNoBarCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.multi_select_insert_no_bar_combo",BI.MultiSelectInsertNoBarCombo),BI.MultiSelectInsertTrigger=BI.inherit(BI.Trigger,{constants:{height:14,rgap:4,lgap:4},_defaultConfig:function(){return BI.extend(BI.MultiSelectInsertTrigger.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-trigger bi-border bi-border-radius",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,searcher:{},switcher:{},adapter:null,masker:{},allowEdit:!0})},_init:function(){BI.MultiSelectInsertTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options;o.height&&this.setHeight(o.height-2),this.searcher=BI.createWidget(o.searcher,{type:"bi.multi_select_insert_searcher",height:o.height,text:o.text,itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,watermark:o.watermark,popup:{},adapter:o.adapter,masker:o.masker,value:o.value}),this.searcher.on(BI.MultiSelectInsertSearcher.EVENT_START,function(){self.fireEvent(BI.MultiSelectInsertTrigger.EVENT_START)}),this.searcher.on(BI.MultiSelectInsertSearcher.EVENT_ADD_ITEM,function(){self.fireEvent(BI.MultiSelectInsertTrigger.EVENT_ADD_ITEM)}),this.searcher.on(BI.MultiSelectInsertSearcher.EVENT_PAUSE,function(){self.fireEvent(BI.MultiSelectInsertTrigger.EVENT_PAUSE)}),this.searcher.on(BI.MultiSelectInsertSearcher.EVENT_SEARCHING,function(){self.fireEvent(BI.MultiSelectInsertTrigger.EVENT_SEARCHING,arguments)}),this.searcher.on(BI.MultiSelectInsertSearcher.EVENT_STOP,function(){self.fireEvent(BI.MultiSelectInsertTrigger.EVENT_STOP)}),this.searcher.on(BI.MultiSelectInsertSearcher.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectInsertTrigger.EVENT_CHANGE,arguments)}),this.searcher.on(BI.MultiSelectInsertSearcher.EVENT_BLUR,function(){self.fireEvent(BI.MultiSelectInsertTrigger.EVENT_BLUR)}),this.searcher.on(BI.MultiSelectInsertSearcher.EVENT_FOCUS,function(){self.fireEvent(BI.MultiSelectInsertTrigger.EVENT_FOCUS)}),this.wrapNumberCounter=BI.createWidget({type:"bi.layout"}),this.wrapper=BI.createWidget({type:"bi.htape",element:this,items:[{el:this.searcher,width:"fill"},{el:this.wrapNumberCounter,width:0},{el:BI.createWidget(),width:24}]}),!o.allowEdit&&BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.layout"},left:0,right:24,top:0,bottom:0}]})},refreshPlaceHolderWidth:function(width){this.wrapper.attr("items")[1].width=width,this.wrapper.resize()},getSearcher:function(){return this.searcher},stopEditing:function(){this.searcher.stopSearch()},setAdapter:function(adapter){this.searcher.setAdapter(adapter)},setValue:function(ob){this.searcher.setValue(ob)},getKey:function(){return this.searcher.getKey()},getValue:function(){return this.searcher.getValue()}}),BI.MultiSelectInsertTrigger.EVENT_TRIGGER_CLICK="EVENT_TRIGGER_CLICK",BI.MultiSelectInsertTrigger.EVENT_COUNTER_CLICK="EVENT_COUNTER_CLICK",BI.MultiSelectInsertTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.MultiSelectInsertTrigger.EVENT_START="EVENT_START",BI.MultiSelectInsertTrigger.EVENT_STOP="EVENT_STOP",BI.MultiSelectInsertTrigger.EVENT_PAUSE="EVENT_PAUSE",BI.MultiSelectInsertTrigger.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiSelectInsertTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW="EVENT_BEFORE_COUNTER_POPUPVIEW",BI.MultiSelectInsertTrigger.EVENT_ADD_ITEM="EVENT_ADD_ITEM",BI.MultiSelectInsertTrigger.EVENT_FOCUS="EVENT_FOCUS",BI.MultiSelectInsertTrigger.EVENT_BLUR="EVENT_BLUR",BI.shortcut("bi.multi_select_insert_trigger",BI.MultiSelectInsertTrigger),BI.MultiSelectLoader=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiSelectLoader.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-loader",logic:{dynamic:!0},el:{height:400},valueFormatter:BI.emptyFn,itemsCreator:BI.emptyFn,onLoaded:BI.emptyFn})},_init:function(){BI.MultiSelectLoader.superclass._init.apply(this,arguments);var self=this,opts=this.options,hasNext=!1;this.storeValue=opts.value||{},this._assertValue(this.storeValue),this.button_group=BI.createWidget({type:"bi.select_list",logic:opts.logic,toolbar:{type:"bi.multi_select_bar",cls:"bi-list-item-active",iconWrapperWidth:36},el:BI.extend({onLoaded:opts.onLoaded,el:{type:"bi.loader",isDefaultInit:!1,logic:{dynamic:!0,scrolly:!0},el:{chooseType:BI.ButtonGroup.CHOOSE_TYPE_MULTI,behaviors:{redmark:function(){return!0}},layouts:[{type:"bi.vertical"}]}}},opts.el),itemsCreator:function(op,callback){var startValue=self._startValue;self.storeValue&&(op=BI.extend(op||{},{selectedValues:BI.isKey(startValue)&&self.storeValue.type===BI.Selection.Multi?self.storeValue.value.concat(startValue):self.storeValue.value})),opts.itemsCreator(op,function(ob){hasNext=ob.hasNext;var firstItems=[];if(1===op.times&&self.storeValue){var json=BI.map(self.storeValue.value,function(i,v){var txt=opts.valueFormatter(v)||v;return{text:txt,value:v,title:txt,selected:self.storeValue.type===BI.Selection.Multi}});if(BI.isKey(self._startValue)&&!BI.contains(self.storeValue.value,self._startValue)){var txt=opts.valueFormatter(startValue)||startValue;json.unshift({text:txt,value:startValue,title:txt,selected:!0})}firstItems=self._createItems(json)}callback(firstItems.concat(self._createItems(ob.items)),ob.keyword||""),1===op.times&&self.storeValue&&(BI.isKey(startValue)&&(self.storeValue.type===BI.Selection.All?BI.remove(self.storeValue.value,startValue):BI.pushDistinct(self.storeValue.value,startValue)),self.setValue(self.storeValue)),1===op.times&&self._scrollToTop()})},hasNext:function(){return hasNext},value:this.storeValue}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Top),BI.extend({scrolly:!0,vgap:5},opts.logic,{items:BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Top,this.button_group)})))),this.button_group.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.button_group.on(BI.SelectList.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectLoader.EVENT_CHANGE,arguments)})},_createItems:function(items){return BI.createItems(items,{type:"bi.multi_select_item",logic:this.options.logic,cls:"bi-list-item-active",height:24,selected:this.isAllSelected(),iconWrapperWidth:36})},_scrollToTop:function(){var self=this;BI.delay(function(){self.button_group.element.scrollTop(0)},30)},isAllSelected:function(){return this.button_group.isAllSelected()},_assertValue:function(val){val||(val={}),val.type||(val.type=BI.Selection.Multi),val.value||(val.value=[])},setStartValue:function(v){this._startValue=v},setValue:function(v){this.storeValue=v||{},this._assertValue(this.storeValue),this.button_group.setValue(this.storeValue)},getValue:function(){return this.button_group.getValue()},getAllButtons:function(){return this.button_group.getAllButtons()},empty:function(){this.button_group.empty()},populate:function(items){arguments[0]=this._createItems(items),this.button_group.populate.apply(this.button_group,arguments)},resetHeight:function(h){this.button_group.resetHeight(h-10)},resetWidth:function(w){this.button_group.resetWidth(w)}}),BI.MultiSelectLoader.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_select_loader",BI.MultiSelectLoader),BI.MultiSelectNoBarLoader=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiSelectNoBarLoader.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-loader",logic:{dynamic:!0},el:{height:400},valueFormatter:BI.emptyFn,itemsCreator:BI.emptyFn,onLoaded:BI.emptyFn})},_init:function(){BI.MultiSelectNoBarLoader.superclass._init.apply(this,arguments);var self=this,opts=this.options,hasNext=!1;this.storeValue=opts.value||{},this._assertValue(this.storeValue),this.button_group=BI.createWidget(BI.extend({type:"bi.list_pane",onLoaded:opts.onLoaded,el:{type:"bi.loader",isDefaultInit:!1,logic:{dynamic:!0,scrolly:!0},el:{chooseType:BI.ButtonGroup.CHOOSE_TYPE_MULTI,behaviors:{redmark:function(){return!0}},layouts:[{type:"bi.vertical"}]}},itemsCreator:function(op,callback){var startValue=self._startValue;self.storeValue&&(op=BI.extend(op||{},{selectedValues:BI.isKey(startValue)&&self.storeValue.type===BI.Selection.Multi?self.storeValue.value.concat(startValue):self.storeValue.value})),opts.itemsCreator(op,function(ob){hasNext=ob.hasNext;var firstItems=[];if(1===op.times&&self.storeValue){var json=BI.map(self.storeValue.value,function(i,v){var txt=opts.valueFormatter(v)||v;return{text:txt,value:v,title:txt,selected:self.storeValue.type===BI.Selection.Multi}});if(BI.isKey(self._startValue)&&!BI.contains(self.storeValue.value,self._startValue)){var txt=opts.valueFormatter(startValue)||startValue;json.unshift({text:txt,value:startValue,title:txt,selected:!0})}firstItems=self._createItems(json)}callback(firstItems.concat(self._createItems(ob.items)),ob.keyword||""),1===op.times&&self.storeValue&&(BI.isKey(startValue)&&(self.storeValue.type===BI.Selection.All?BI.remove(self.storeValue.value,startValue):BI.pushDistinct(self.storeValue.value,startValue)),self.setValue(self.storeValue)),1===op.times&&self._scrollToTop()})},hasNext:function(){return hasNext},value:this.storeValue},opts.el)),BI.createWidget({type:"bi.vertical",element:this,items:[this.button_group],vgap:5}),this.button_group.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.button_group.on(BI.SelectList.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectNoBarLoader.EVENT_CHANGE,arguments)})},_createItems:function(items){return BI.createItems(items,{type:"bi.multi_select_item",cls:"bi-list-item-active",logic:this.options.logic,height:24,iconWrapperWidth:36})},_scrollToTop:function(){var self=this;BI.delay(function(){self.button_group.element.scrollTop(0)},30)},_assertValue:function(val){val||(val={}),val.type||(val.type=BI.Selection.Multi),val.value||(val.value=[])},setStartValue:function(v){this._startValue=v},setValue:function(v){this.storeValue=v||{},this._assertValue(this.storeValue),this.button_group.setValue(this.storeValue.value)},getValue:function(){return{type:BI.Selection.Multi,value:this.button_group.getValue()}},getAllButtons:function(){return this.button_group.getAllButtons()},empty:function(){this.button_group.empty()},populate:function(items){arguments[0]=this._createItems(items),this.button_group.populate.apply(this.button_group,arguments)},resetHeight:function(h){this.button_group.element.css({"max-height":h+"px"})},resetWidth:function(){}}),BI.MultiSelectNoBarLoader.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_select_no_bar_loader",BI.MultiSelectNoBarLoader),BI.MultiSelectPopupView=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiSelectPopupView.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-popup-view",maxWidth:"auto",minWidth:135,maxHeight:400,valueFormatter:BI.emptyFn,itemsCreator:BI.emptyFn,onLoaded:BI.emptyFn})},_init:function(){BI.MultiSelectPopupView.superclass._init.apply(this,arguments);var self=this,opts=this.options;this.loader=BI.createWidget({type:"bi.multi_select_loader",itemsCreator:opts.itemsCreator,valueFormatter:opts.valueFormatter,onLoaded:opts.onLoaded,value:opts.value}),this.popupView=BI.createWidget({type:"bi.multi_popup_view",stopPropagation:!1,maxWidth:opts.maxWidth,minWidth:opts.minWidth,maxHeight:opts.maxHeight,element:this,buttons:[BI.i18nText("BI-Basic_Clears"),BI.i18nText("BI-Basic_Sure")],el:this.loader,value:opts.value}),this.popupView.on(BI.MultiPopupView.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectPopupView.EVENT_CHANGE)}),this.popupView.on(BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON,function(index){switch(index){case 0:self.fireEvent(BI.MultiSelectPopupView.EVENT_CLICK_CLEAR);break;case 1:self.fireEvent(BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM)}})},isAllSelected:function(){return this.loader.isAllSelected()},setStartValue:function(v){this.loader.setStartValue(v)},setValue:function(v){this.popupView.setValue(v)},getValue:function(){return this.popupView.getValue()},populate:function(items){this.popupView.populate.apply(this.popupView,arguments)},resetHeight:function(h){this.popupView.resetHeight(h)},resetWidth:function(w){this.popupView.resetWidth(w)}}),BI.MultiSelectPopupView.EVENT_CHANGE="EVENT_CHANGE",BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM="EVENT_CLICK_CONFIRM",BI.MultiSelectPopupView.EVENT_CLICK_CLEAR="EVENT_CLICK_CLEAR",BI.shortcut("bi.multi_select_popup_view",BI.MultiSelectPopupView),BI.MultiSelectNoBarPopupView=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiSelectNoBarPopupView.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-popup-view",maxWidth:"auto",minWidth:135,maxHeight:400,valueFormatter:BI.emptyFn,itemsCreator:BI.emptyFn,onLoaded:BI.emptyFn})},_init:function(){BI.MultiSelectNoBarPopupView.superclass._init.apply(this,arguments);var self=this,opts=this.options;this.loader=BI.createWidget({type:"bi.multi_select_no_bar_loader",itemsCreator:opts.itemsCreator,valueFormatter:opts.valueFormatter,onLoaded:opts.onLoaded,value:opts.value}),this.popupView=BI.createWidget({type:"bi.multi_popup_view",stopPropagation:!1,maxWidth:opts.maxWidth,minWidth:opts.minWidth,maxHeight:opts.maxHeight,element:this,buttons:[BI.i18nText("BI-Basic_Clears"),BI.i18nText("BI-Basic_Sure")],el:this.loader,value:opts.value}),this.popupView.on(BI.MultiPopupView.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectNoBarPopupView.EVENT_CHANGE)}),this.popupView.on(BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON,function(index){switch(index){case 0:self.fireEvent(BI.MultiSelectNoBarPopupView.EVENT_CLICK_CLEAR);break;case 1:self.fireEvent(BI.MultiSelectNoBarPopupView.EVENT_CLICK_CONFIRM)}})},setStartValue:function(v){this.loader.setStartValue(v)},setValue:function(v){this.popupView.setValue(v)},getValue:function(){return this.popupView.getValue()},populate:function(items){this.popupView.populate.apply(this.popupView,arguments)},resetHeight:function(h){this.popupView.resetHeight(h)},resetWidth:function(w){this.popupView.resetWidth(w)}}),BI.MultiSelectNoBarPopupView.EVENT_CHANGE="EVENT_CHANGE",BI.MultiSelectNoBarPopupView.EVENT_CLICK_CONFIRM="EVENT_CLICK_CONFIRM",BI.MultiSelectNoBarPopupView.EVENT_CLICK_CLEAR="EVENT_CLICK_CLEAR",BI.shortcut("bi.multi_select_no_bar_popup_view",BI.MultiSelectNoBarPopupView),BI.MultiSelectTrigger=BI.inherit(BI.Trigger,{constants:{height:14,rgap:4,lgap:4},_defaultConfig:function(){return BI.extend(BI.MultiSelectTrigger.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-trigger bi-border bi-border-radius",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,searcher:{},switcher:{},adapter:null,masker:{},allowEdit:!0})},_init:function(){BI.MultiSelectTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options;o.height&&this.setHeight(o.height-2),this.searcher=BI.createWidget(o.searcher,{type:"bi.multi_select_searcher",height:o.height,text:o.text,itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,watermark:o.watermark,popup:{},adapter:o.adapter,masker:o.masker,value:o.value}),this.searcher.on(BI.MultiSelectSearcher.EVENT_START,function(){self.fireEvent(BI.MultiSelectTrigger.EVENT_START)}),this.searcher.on(BI.MultiSelectSearcher.EVENT_PAUSE,function(){self.fireEvent(BI.MultiSelectTrigger.EVENT_PAUSE)}),this.searcher.on(BI.MultiSelectSearcher.EVENT_SEARCHING,function(){self.fireEvent(BI.MultiSelectTrigger.EVENT_SEARCHING,arguments)}),this.searcher.on(BI.MultiSelectSearcher.EVENT_STOP,function(){self.fireEvent(BI.MultiSelectTrigger.EVENT_STOP)}),this.searcher.on(BI.MultiSelectSearcher.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectTrigger.EVENT_CHANGE,arguments)}),this.searcher.on(BI.MultiSelectSearcher.EVENT_BLUR,function(){self.fireEvent(BI.MultiSelectTrigger.EVENT_BLUR)}),this.searcher.on(BI.MultiSelectSearcher.EVENT_FOCUS,function(){self.fireEvent(BI.MultiSelectTrigger.EVENT_FOCUS)}),this.wrapNumberCounter=BI.createWidget({type:"bi.layout"}),this.wrapper=BI.createWidget({type:"bi.htape",element:this,items:[{el:this.searcher,width:"fill"},{el:this.wrapNumberCounter,width:0},{el:BI.createWidget(),width:24}]}),!o.allowEdit&&BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.layout"},left:0,right:24,top:0,bottom:0}]})},refreshPlaceHolderWidth:function(width){this.wrapper.attr("items")[1].width=width,this.wrapper.resize()},getSearcher:function(){return this.searcher},stopEditing:function(){this.searcher.stopSearch()},setAdapter:function(adapter){this.searcher.setAdapter(adapter)},setValue:function(ob){this.searcher.setValue(ob)},getKey:function(){return this.searcher.getKey()},getValue:function(){return this.searcher.getValue()}}),BI.MultiSelectTrigger.EVENT_TRIGGER_CLICK="EVENT_TRIGGER_CLICK",BI.MultiSelectTrigger.EVENT_COUNTER_CLICK="EVENT_COUNTER_CLICK",BI.MultiSelectTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.MultiSelectTrigger.EVENT_START="EVENT_START",BI.MultiSelectTrigger.EVENT_STOP="EVENT_STOP",BI.MultiSelectTrigger.EVENT_PAUSE="EVENT_PAUSE",BI.MultiSelectTrigger.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW="EVENT_BEFORE_COUNTER_POPUPVIEW",BI.MultiSelectTrigger.EVENT_BLUR="EVENT_BLUR",BI.MultiSelectTrigger.EVENT_FOCUS="EVENT_FOCUS",BI.shortcut("bi.multi_select_trigger",BI.MultiSelectTrigger),BI.MultiSelectSearchInsertPane=BI.inherit(BI.Widget,{constants:{height:24,lgap:10,tgap:5},_defaultConfig:function(){return BI.extend(BI.MultiSelectSearchInsertPane.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-search-pane bi-card",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,keywordGetter:BI.emptyFn})},_init:function(){BI.MultiSelectSearchInsertPane.superclass._init.apply(this,arguments);var self=this,o=this.options;this.tooltipClick=BI.createWidget({type:"bi.label",invisible:!0,text:BI.i18nText("BI-Click_Blank_To_Select"),cls:"multi-select-toolbar",height:this.constants.height}),this.addNotMatchTip=BI.createWidget({type:"bi.text_button",invisible:!0,text:BI.i18nText("BI-Basic_Click_To_Add_Text",""),height:this.constants.height,cls:"bi-high-light",hgap:5,handler:function(){self.fireEvent(BI.MultiSelectSearchInsertPane.EVENT_ADD_ITEM,o.keywordGetter())}}),this.loader=BI.createWidget({type:"bi.multi_select_search_loader",keywordGetter:o.keywordGetter,valueFormatter:o.valueFormatter,itemsCreator:function(op,callback){o.itemsCreator.apply(self,[op,function(res){callback(res),self.setKeyword(o.keywordGetter())}])},value:o.value}),this.loader.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.resizer=BI.createWidget({type:"bi.vtape",element:this,items:[{type:"bi.vertical",items:[this.tooltipClick,this.addNotMatchTip],height:this.constants.height},{el:this.loader}]})},setKeyword:function(keyword){var btn,isMatchTipVisible=this.loader.getAllButtons().length>0&&(btn=this.loader.getAllButtons()[0])&&keyword===btn.getValue();this.tooltipClick.setVisible(isMatchTipVisible),this.addNotMatchTip.setVisible(!isMatchTipVisible),!isMatchTipVisible&&this.addNotMatchTip.setText(BI.i18nText("BI-Basic_Click_To_Add_Text",keyword))},isAllSelected:function(){return this.loader.isAllSelected()},hasMatched:function(){return this.tooltipClick.isVisible()},setValue:function(v){this.loader.setValue(v)},getValue:function(){return this.loader.getValue()},empty:function(){this.loader.empty()},populate:function(items){this.loader.populate.apply(this.loader,arguments); +}}),BI.MultiSelectSearchInsertPane.EVENT_CHANGE="EVENT_CHANGE",BI.MultiSelectSearchInsertPane.EVENT_ADD_ITEM="EVENT_ADD_ITEM",BI.shortcut("bi.multi_select_search_insert_pane",BI.MultiSelectSearchInsertPane),BI.MultiSelectSearchLoader=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiSelectSearchLoader.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-search-loader",itemsCreator:BI.emptyFn,keywordGetter:BI.emptyFn,valueFormatter:BI.emptyFn})},_init:function(){BI.MultiSelectSearchLoader.superclass._init.apply(this,arguments);var self=this,opts=this.options,hasNext=!1;this.storeValue=BI.deepClone(opts.value),this.button_group=BI.createWidget({type:"bi.select_list",toolbar:{type:"bi.multi_select_bar",cls:"bi-list-item-active",iconWrapperWidth:36},element:this,logic:{dynamic:!1},value:opts.value,el:{tipText:BI.i18nText("BI-No_Select"),el:{type:"bi.loader",isDefaultInit:!1,logic:{dynamic:!0,scrolly:!0},el:{chooseType:BI.ButtonGroup.CHOOSE_TYPE_MULTI,behaviors:{redmark:function(){return!0}},layouts:[{type:"bi.vertical"}]}}},itemsCreator:function(op,callback){self.storeValue&&(op=BI.extend(op||{},{selectedValues:self.storeValue.value})),opts.itemsCreator(op,function(ob){var keyword=ob.keyword=opts.keywordGetter();hasNext=ob.hasNext;var firstItems=[];if(1===op.times&&self.storeValue){var json=self._filterValues(self.storeValue);firstItems=self._createItems(json)}callback(firstItems.concat(self._createItems(ob.items)),keyword),1===op.times&&self.storeValue&&self.setValue(self.storeValue)})},hasNext:function(){return hasNext}}),this.button_group.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.button_group.on(BI.SelectList.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectSearchLoader.EVENT_CHANGE,arguments)})},_createItems:function(items){return BI.createItems(items,{type:"bi.multi_select_item",logic:{dynamic:!1},height:24,selected:this.isAllSelected(),cls:"bi-list-item-active",iconWrapperWidth:36})},isAllSelected:function(){return this.button_group.isAllSelected()},_filterValues:function(src){var o=this.options,keyword=o.keywordGetter(),values=BI.deepClone(src.value)||[],newValues=BI.map(values,function(i,v){return{text:o.valueFormatter(v)||v,value:v}});if(BI.isKey(keyword)){var search=BI.Func.getSearchResult(newValues,keyword);values=search.match.concat(search.find)}return BI.map(values,function(i,v){return{text:v.text,title:v.text,value:v.value,selected:src.type===BI.Selection.All}})},setValue:function(v){this.storeValue=BI.deepClone(v),this.button_group.setValue(v)},getValue:function(){return this.button_group.getValue()},getAllButtons:function(){return this.button_group.getAllButtons()},empty:function(){this.button_group.empty()},populate:function(items){this.button_group.populate.apply(this.button_group,arguments)},resetHeight:function(h){this.button_group.resetHeight(h)},resetWidth:function(w){this.button_group.resetWidth(w)}}),BI.MultiSelectSearchLoader.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_select_search_loader",BI.MultiSelectSearchLoader),BI.MultiSelectSearchPane=BI.inherit(BI.Widget,{constants:{height:24,lgap:10,tgap:5},_defaultConfig:function(){return BI.extend(BI.MultiSelectSearchPane.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-search-pane bi-card",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,keywordGetter:BI.emptyFn})},_init:function(){BI.MultiSelectSearchPane.superclass._init.apply(this,arguments);var self=this,o=this.options;this.tooltipClick=BI.createWidget({type:"bi.label",invisible:!0,text:BI.i18nText("BI-Click_Blank_To_Select"),cls:"multi-select-toolbar",height:this.constants.height}),this.loader=BI.createWidget({type:"bi.multi_select_search_loader",keywordGetter:o.keywordGetter,valueFormatter:o.valueFormatter,itemsCreator:function(op,callback){o.itemsCreator.apply(self,[op,function(res){callback(res),self.setKeyword(o.keywordGetter())}])},value:o.value}),this.loader.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.resizer=BI.createWidget({type:"bi.vtape",element:this,items:[{el:this.tooltipClick,height:0},{el:this.loader}]}),this.tooltipClick.setVisible(!1)},setKeyword:function(keyword){var btn,isVisible=this.loader.getAllButtons().length>0&&(btn=this.loader.getAllButtons()[0])&&keyword===btn.getValue();isVisible!==this.tooltipClick.isVisible()&&(this.tooltipClick.setVisible(isVisible),this.resizer.attr("items")[0].height=isVisible?this.constants.height:0,this.resizer.resize())},isAllSelected:function(){return this.loader.isAllSelected()},hasMatched:function(){return this.tooltipClick.isVisible()},setValue:function(v){this.loader.setValue(v)},getValue:function(){return this.loader.getValue()},empty:function(){this.loader.empty()},populate:function(items){this.loader.populate.apply(this.loader,arguments)}}),BI.MultiSelectSearchPane.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_select_search_pane",BI.MultiSelectSearchPane),BI.MultiSelectCheckSelectedButton=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.MultiSelectCheckSelectedButton.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-check-selected-button",itemsCreator:BI.emptyFn})},_init:function(){BI.MultiSelectCheckSelectedButton.superclass._init.apply(this,arguments);var self=this,o=this.options;this.numberCounter=BI.createWidget({type:"bi.text_button",element:this,hgap:4,text:"0",textAlign:"center",textHeight:16,cls:"bi-high-light-background count-tip"}),this.numberCounter.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.numberCounter.on(BI.TextButton.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectCheckSelectedButton.EVENT_CHANGE,arguments)}),this.numberCounter.element.hover(function(){self.numberCounter.setTag(self.numberCounter.getText()),self.numberCounter.setText(BI.i18nText("BI-Check_Selected"))},function(){self.numberCounter.setText(self.numberCounter.getTag())}),this.setVisible(!1),BI.isNotNull(o.value)&&this.setValue(o.value)},setValue:function(ob){var self=this,o=this.options;return ob||(ob={}),ob.type||(ob.type=BI.Selection.Multi),ob.value||(ob.value=[]),ob.type===BI.Selection.All?void o.itemsCreator({type:BI.MultiSelectCombo.REQ_GET_DATA_LENGTH},function(res){var length=res.count-ob.value.length;BI.nextTick(function(){self.numberCounter.setText(length),self.setVisible(length>0)})}):void BI.nextTick(function(){self.numberCounter.setText(ob.value.length),self.setVisible(ob.value.length>0)})},getValue:function(){}}),BI.MultiSelectCheckSelectedButton.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_select_check_selected_button",BI.MultiSelectCheckSelectedButton),BI.MultiSelectEditor=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiSelectEditor.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-editor",el:{},watermark:BI.i18nText("BI-Basic_Search")})},_init:function(){BI.MultiSelectEditor.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget(o.el,{type:"bi.state_editor",element:this,height:o.height,watermark:o.watermark,allowBlank:!0,value:o.value,defaultText:o.text,text:o.text,tipType:o.tipType,warningTitle:o.warningTitle}),this.editor.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editor.on(BI.StateEditor.EVENT_PAUSE,function(){self.fireEvent(BI.MultiSelectEditor.EVENT_PAUSE)}),this.editor.on(BI.StateEditor.EVENT_FOCUS,function(){self.fireEvent(BI.MultiSelectEditor.EVENT_FOCUS)}),this.editor.on(BI.StateEditor.EVENT_BLUR,function(){self.fireEvent(BI.MultiSelectEditor.EVENT_BLUR)})},focus:function(){this.editor.focus()},blur:function(){this.editor.blur()},setState:function(state){this.editor.setState(state)},setValue:function(v){this.editor.setValue(v)},setTipType:function(v){this.editor.setTipType(v)},getValue:function(){var v=this.editor.getState();return BI.isArray(v)&&v.length>0?v[v.length-1]:""},getKeywords:function(){var val=this.editor.getLastChangedValue(),keywords=val.match(/[\S]+/g);return BI.isEndWithBlank(val)?keywords.concat([" "]):keywords},populate:function(items){}}),BI.MultiSelectEditor.EVENT_FOCUS="EVENT_FOCUS",BI.MultiSelectEditor.EVENT_BLUR="EVENT_BLUR",BI.MultiSelectEditor.EVENT_PAUSE="EVENT_PAUSE",BI.shortcut("bi.multi_select_editor",BI.MultiSelectEditor),BI.MultiSelectInsertSearcher=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiSelectInsertSearcher.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-searcher",itemsCreator:BI.emptyFn,el:{},popup:{},valueFormatter:BI.emptyFn,adapter:null,masker:{},text:BI.i18nText("BI-Basic_Please_Select")})},_init:function(){BI.MultiSelectInsertSearcher.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget(o.el,{type:"bi.multi_select_editor",watermark:o.watermark,height:o.height,text:o.text,listeners:[{eventName:BI.MultiSelectEditor.EVENT_FOCUS,action:function(){self.fireEvent(BI.MultiSelectInsertSearcher.EVENT_FOCUS)}},{eventName:BI.MultiSelectEditor.EVENT_BLUR,action:function(){self.fireEvent(BI.MultiSelectInsertSearcher.EVENT_BLUR)}}]}),this.searcher=BI.createWidget({type:"bi.searcher",element:this,height:o.height,isAutoSearch:!1,isAutoSync:!1,onSearch:function(op,callback){callback()},el:this.editor,popup:BI.extend({type:"bi.multi_select_search_insert_pane",valueFormatter:o.valueFormatter,keywordGetter:function(){return self.editor.getValue()},itemsCreator:function(op,callback){var keyword=self.editor.getValue();op.keywords=[keyword],this.setKeyword(keyword),o.itemsCreator(op,callback)},value:o.value,listeners:[{eventName:BI.MultiSelectSearchInsertPane.EVENT_ADD_ITEM,action:function(){self.fireEvent(BI.MultiSelectInsertSearcher.EVENT_ADD_ITEM)}}]},o.popup),adapter:o.adapter,masker:o.masker}),this.searcher.on(BI.Searcher.EVENT_START,function(){self.fireEvent(BI.MultiSelectInsertSearcher.EVENT_START)}),this.searcher.on(BI.Searcher.EVENT_PAUSE,function(){this.hasMatched(),self.fireEvent(BI.MultiSelectInsertSearcher.EVENT_PAUSE)}),this.searcher.on(BI.Searcher.EVENT_STOP,function(){self.fireEvent(BI.MultiSelectInsertSearcher.EVENT_STOP)}),this.searcher.on(BI.Searcher.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectInsertSearcher.EVENT_CHANGE,arguments)}),this.searcher.on(BI.Searcher.EVENT_SEARCHING,function(){var keywords=this.getKeywords();self.fireEvent(BI.MultiSelectInsertSearcher.EVENT_SEARCHING,keywords)}),BI.isNotNull(o.value)&&this.setState(o.value)},adjustView:function(){this.searcher.adjustView()},isSearching:function(){return this.searcher.isSearching()},stopSearch:function(){this.searcher.stopSearch()},getKeyword:function(){return this.editor.getValue()},hasMatched:function(){return this.searcher.hasMatched()},hasChecked:function(){return this.searcher.getView()&&this.searcher.getView().hasChecked()},setAdapter:function(adapter){this.searcher.setAdapter(adapter)},setState:function(ob){var o=this.options;if(ob||(ob={}),ob.value||(ob.value=[]),ob.type===BI.Selection.All)if(0===ob.value.length)this.editor.setState(BI.Selection.All);else if(BI.size(ob.assist)<=20){var state="";BI.each(ob.assist,function(i,v){state+=0===i?""+(o.valueFormatter(v+"")||v):","+(o.valueFormatter(v+"")||v)}),this.editor.setState(state)}else this.editor.setState(BI.Selection.Multi);else if(0===ob.value.length)this.editor.setState(BI.Selection.None);else if(BI.size(ob.value)<=20){var state="";BI.each(ob.value,function(i,v){state+=0===i?""+(o.valueFormatter(v+"")||v):","+(o.valueFormatter(v+"")||v)}),this.editor.setState(state)}else this.editor.setState(BI.Selection.Multi)},setValue:function(ob){this.setState(ob),this.searcher.setValue(ob)},getKey:function(){return this.editor.getValue()},getValue:function(){return this.searcher.getValue()},populate:function(items){this.searcher.populate.apply(this.searcher,arguments)}}),BI.MultiSelectInsertSearcher.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.MultiSelectInsertSearcher.EVENT_CHANGE="EVENT_CHANGE",BI.MultiSelectInsertSearcher.EVENT_START="EVENT_START",BI.MultiSelectInsertSearcher.EVENT_STOP="EVENT_STOP",BI.MultiSelectInsertSearcher.EVENT_PAUSE="EVENT_PAUSE",BI.MultiSelectInsertSearcher.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiSelectInsertSearcher.EVENT_ADD_ITEM="EVENT_ADD_ITEM",BI.MultiSelectInsertSearcher.EVENT_FOCUS="EVENT_FOCUS",BI.MultiSelectInsertSearcher.EVENT_BLUR="EVENT_BLUR",BI.shortcut("bi.multi_select_insert_searcher",BI.MultiSelectInsertSearcher),BI.MultiSelectSearcher=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiSelectSearcher.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-searcher",itemsCreator:BI.emptyFn,el:{},popup:{},valueFormatter:BI.emptyFn,adapter:null,masker:{},text:BI.i18nText("BI-Basic_Please_Select")})},_init:function(){BI.MultiSelectSearcher.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget(o.el,{type:"bi.multi_select_editor",height:o.height,text:o.text,listeners:[{eventName:BI.MultiSelectEditor.EVENT_FOCUS,action:function(){self.fireEvent(BI.MultiSelectSearcher.EVENT_FOCUS)}},{eventName:BI.MultiSelectEditor.EVENT_BLUR,action:function(){self.fireEvent(BI.MultiSelectSearcher.EVENT_BLUR)}}]}),this.searcher=BI.createWidget({type:"bi.searcher",element:this,height:o.height,isAutoSearch:!1,isAutoSync:!1,onSearch:function(op,callback){callback()},el:this.editor,popup:BI.extend({type:"bi.multi_select_search_pane",valueFormatter:o.valueFormatter,keywordGetter:function(){return self.editor.getValue()},itemsCreator:function(op,callback){var keyword=self.editor.getValue();op.keywords=[keyword],this.setKeyword(keyword),o.itemsCreator(op,callback)},value:o.value},o.popup),adapter:o.adapter,masker:o.masker}),this.searcher.on(BI.Searcher.EVENT_START,function(){self.fireEvent(BI.MultiSelectSearcher.EVENT_START)}),this.searcher.on(BI.Searcher.EVENT_PAUSE,function(){this.hasMatched(),self.fireEvent(BI.MultiSelectSearcher.EVENT_PAUSE)}),this.searcher.on(BI.Searcher.EVENT_STOP,function(){self.fireEvent(BI.MultiSelectSearcher.EVENT_STOP)}),this.searcher.on(BI.Searcher.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectSearcher.EVENT_CHANGE,arguments)}),this.searcher.on(BI.Searcher.EVENT_SEARCHING,function(){var keywords=this.getKeywords();self.fireEvent(BI.MultiSelectSearcher.EVENT_SEARCHING,keywords)}),BI.isNotNull(o.value)&&this.setState(o.value)},adjustView:function(){this.searcher.adjustView()},isSearching:function(){return this.searcher.isSearching()},stopSearch:function(){this.searcher.stopSearch()},getKeyword:function(){return this.editor.getValue()},hasMatched:function(){return this.searcher.hasMatched()},hasChecked:function(){return this.searcher.getView()&&this.searcher.getView().hasChecked()},setAdapter:function(adapter){this.searcher.setAdapter(adapter)},setState:function(ob){var o=this.options;if(ob||(ob={}),ob.value||(ob.value=[]),ob.type===BI.Selection.All)if(0===ob.value.length)this.editor.setState(BI.Selection.All);else if(BI.size(ob.assist)<=20){var state="";BI.each(ob.assist,function(i,v){state+=0===i?""+(o.valueFormatter(v+"")||v):","+(o.valueFormatter(v+"")||v)}),this.editor.setState(state)}else this.editor.setState(BI.Selection.Multi);else if(0===ob.value.length)this.editor.setState(BI.Selection.None);else if(BI.size(ob.value)<=20){var state="";BI.each(ob.value,function(i,v){state+=0===i?""+(o.valueFormatter(v+"")||v):","+(o.valueFormatter(v+"")||v)}),this.editor.setState(state)}else this.editor.setState(BI.Selection.Multi)},setValue:function(ob){this.setState(ob),this.searcher.setValue(ob)},getKey:function(){return this.editor.getValue()},getValue:function(){return this.searcher.getValue()},populate:function(items){this.searcher.populate.apply(this.searcher,arguments)}}),BI.MultiSelectSearcher.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.MultiSelectSearcher.EVENT_CHANGE="EVENT_CHANGE",BI.MultiSelectSearcher.EVENT_START="EVENT_START",BI.MultiSelectSearcher.EVENT_STOP="EVENT_STOP",BI.MultiSelectSearcher.EVENT_PAUSE="EVENT_PAUSE",BI.MultiSelectSearcher.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiSelectSearcher.EVENT_FOCUS="EVENT_FOCUS",BI.MultiSelectSearcher.EVENT_BLUR="EVENT_BLUR",BI.shortcut("bi.multi_select_searcher",BI.MultiSelectSearcher),BI.MultiSelectCheckSelectedSwitcher=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiSelectCheckSelectedSwitcher.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-check-selected-switcher",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,el:{},popup:{},adapter:null,masker:{}})},_init:function(){BI.MultiSelectCheckSelectedSwitcher.superclass._init.apply(this,arguments);var self=this,o=this.options;this.button=BI.createWidget(o.el,{type:"bi.multi_select_check_selected_button",itemsCreator:o.itemsCreator,value:o.value}),this.button.on(BI.Events.VIEW,function(){self.fireEvent(BI.Events.VIEW,arguments)}),this.switcher=BI.createWidget({type:"bi.switcher",toggle:!1,element:this,el:this.button,popup:BI.extend({type:"bi.multi_select_check_pane",valueFormatter:o.valueFormatter,itemsCreator:o.itemsCreator,onClickContinueSelect:function(){self.switcher.hideView()},ref:function(_ref){self.checkPane=_ref},value:o.value},o.popup),adapter:o.adapter,masker:o.masker}),this.switcher.on(BI.Switcher.EVENT_TRIGGER_CHANGE,function(){self.fireEvent(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE)}),this.switcher.on(BI.Switcher.EVENT_BEFORE_POPUPVIEW,function(){self.fireEvent(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW)}),this.switcher.on(BI.Switcher.EVENT_AFTER_POPUPVIEW,function(){var me=this;BI.nextTick(function(){me.populate()})})},adjustView:function(){this.switcher.adjustView()},hideView:function(){this.switcher.empty(),this.switcher.hideView()},setAdapter:function(adapter){this.switcher.setAdapter(adapter)},setValue:function(v){this.switcher.setValue(v)},updateSelectedValue:function(v){this.checkPane.setValue(v)},setButtonChecked:function(v){this.button.setValue(v)},getValue:function(){},populate:function(items){this.switcher.populate.apply(this.switcher,arguments)}}),BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE="EVENT_TRIGGER_CHANGE",BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.multi_select_check_selected_switcher",BI.MultiSelectCheckSelectedSwitcher),BI.MultiSelectInsertList=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.MultiSelectInsertList.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-insert-list",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn})},_init:function(){BI.MultiSelectInsertList.superclass._init.apply(this,arguments);var self=this,o=this.options;this.storeValue=o.value||{};var assertShowValue=function(){BI.isKey(self._startValue)&&(self.storeValue.type===BI.Selection.All?BI.remove(self.storeValue.value,self._startValue):BI.pushDistinct(self.storeValue.value,self._startValue))};this.adapter=BI.createWidget({type:"bi.multi_select_loader",cls:"popup-multi-select-list bi-border-left bi-border-right bi-border-bottom",itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,logic:{dynamic:!0},el:{},value:o.value}),this.adapter.on(BI.MultiSelectLoader.EVENT_CHANGE,function(){self.storeValue=this.getValue(),assertShowValue(),self.fireEvent(BI.MultiSelectInsertList.EVENT_CHANGE)}),this.searcherPane=BI.createWidget({type:"bi.multi_select_search_insert_pane",cls:"bi-border-left bi-border-right bi-border-bottom",valueFormatter:o.valueFormatter,keywordGetter:function(){return self.trigger.getKeyword()},itemsCreator:function(op,callback){op.keywords=[self.trigger.getKeyword()],this.setKeyword(op.keywords[0]),o.itemsCreator(op,callback)},listeners:[{eventName:BI.MultiSelectSearchInsertPane.EVENT_ADD_ITEM,action:function(){var keyword=self.trigger.getKeyword();self.trigger.hasMatched()||(self.storeValue.type===BI.Selection.Multi&&BI.pushDistinct(self.storeValue.value,keyword),self._showAdapter(),self.adapter.setValue(self.storeValue),self.adapter.populate(),self.storeValue.type===BI.Selection.Multi&&self.fireEvent(BI.MultiSelectInsertList.EVENT_CHANGE))}}]}),this.searcherPane.setVisible(!1),this.trigger=BI.createWidget({type:"bi.searcher",isAutoSearch:!1,isAutoSync:!1,onSearch:function(op,callback){callback()},adapter:this.adapter,popup:this.searcherPane,height:200,masker:!1,listeners:[{eventName:BI.Searcher.EVENT_START,action:function(){self._showSearcherPane(),self._setStartValue(""),this.setValue(BI.deepClone(self.storeValue))}},{eventName:BI.Searcher.EVENT_STOP,action:function(){self._showAdapter(),self._setStartValue(""),self.adapter.setValue(self.storeValue),self.adapter.populate()}},{eventName:BI.Searcher.EVENT_PAUSE,action:function(){var keyword=this.getKeyword();this.hasMatched()&&self._join({type:BI.Selection.Multi,value:[keyword]},function(){self.storeValue.type===BI.Selection.Multi&&BI.pushDistinct(self.storeValue.value,keyword),self._showAdapter(),self.adapter.setValue(self.storeValue),self._setStartValue(keyword),assertShowValue(),self.adapter.populate(),self._setStartValue(""),self.fireEvent(BI.MultiSelectInsertList.EVENT_CHANGE)}),self._showAdapter()}},{eventName:BI.Searcher.EVENT_SEARCHING,action:function(){var keywords=this.getKeywords(),last=BI.last(keywords);keywords=BI.initial(keywords||[]),keywords.length>0&&self._joinKeywords(keywords,function(){BI.isEndWithBlank(last)?(self.adapter.setValue(self.storeValue),assertShowValue(),self.adapter.populate(),self._setStartValue("")):(self.adapter.setValue(self.storeValue),assertShowValue()),self.fireEvent(BI.MultiSelectInsertList.EVENT_CHANGE)})}},{eventName:BI.Searcher.EVENT_CHANGE,action:function(value,obj){obj instanceof BI.MultiSelectBar?self._joinAll(this.getValue(),function(){assertShowValue(),self.fireEvent(BI.MultiSelectInsertList.EVENT_CHANGE)}):self._join(this.getValue(),function(){assertShowValue(),self.fireEvent(BI.MultiSelectInsertList.EVENT_CHANGE)})}}],value:o.value}),BI.createWidget({type:"bi.vtape",element:this,items:[{el:this.trigger,height:24},{el:this.adapter,height:"fill"}]}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.searcherPane,top:30,bottom:0,left:0,right:0}]})},_showAdapter:function(){this.adapter.setVisible(!0),this.searcherPane.setVisible(!1)},_showSearcherPane:function(){this.searcherPane.setVisible(!0),this.adapter.setVisible(!1)},_defaultState:function(){this.trigger.stopEditing()},_assertValue:function(val){val||(val={}),val.type||(val.type=BI.Selection.Multi),val.value||(val.value=[])},_makeMap:function(values){return BI.makeObject(values||[])},_joinKeywords:function(keywords,callback){function digest(items){var selectedMap=self._makeMap(items);BI.each(keywords,function(i,val){BI.isNotNull(selectedMap[val])&&(self.storeValue.type===BI.Selection.Multi?BI.pushDistinct(self.storeValue.value,val):BI.remove(self.storeValue.value,val))}),callback()}var self=this,o=this.options;this._assertValue(this.storeValue),o.itemsCreator({type:BI.MultiSelectInsertList.REQ_GET_ALL_DATA,keywords:keywords},function(ob){var values=BI.map(ob.items,"value");digest(values)})},_joinAll:function(res,callback){var self=this,o=this.options;this._assertValue(res),o.itemsCreator({type:BI.MultiSelectInsertList.REQ_GET_ALL_DATA,keywords:[self.trigger.getKeyword()]},function(ob){var items=BI.map(ob.items,"value");if(self.storeValue.type===res.type){var change=!1,map=self._makeMap(self.storeValue.value);return BI.each(items,function(i,v){BI.isNotNull(map[v])&&(change=!0,delete map[v])}),change&&(self.storeValue.value=BI.values(map)),void callback()}var selectedMap=self._makeMap(self.storeValue.value),notSelectedMap=self._makeMap(res.value),newItems=[];BI.each(items,function(i,item){BI.isNotNull(selectedMap[items[i]])&&delete selectedMap[items[i]],BI.isNull(notSelectedMap[items[i]])&&newItems.push(item)}),self.storeValue.value=newItems.concat(BI.values(selectedMap)),callback()})},_join:function(res,callback){var self=this,o=this.options;if(this._assertValue(res),this._assertValue(this.storeValue),this.storeValue.type===res.type){var map=this._makeMap(this.storeValue.value);BI.each(res.value,function(i,v){map[v]||(self.storeValue.value.push(v),map[v]=v)});var change=!1;return BI.each(res.assist,function(i,v){BI.isNotNull(map[v])&&(change=!0,delete map[v])}),change&&(this.storeValue.value=BI.values(map)),void callback()}this._joinAll(res,callback)},_setStartValue:function(value){this._startValue=value,this.adapter.setStartValue(value)},isAllSelected:function(){return this.adapter.isAllSelected()},resize:function(){},setValue:function(v){this.storeValue=v||{},this._assertValue(this.storeValue),this.adapter.setValue(this.storeValue),this.trigger.setValue(this.storeValue)},getValue:function(){return BI.deepClone(this.storeValue)},populate:function(){this.adapter.populate.apply(this.adapter,arguments),this.trigger.populate.apply(this.trigger,arguments)}}),BI.extend(BI.MultiSelectInsertList,{REQ_GET_DATA_LENGTH:1,REQ_GET_ALL_DATA:-1}),BI.MultiSelectInsertList.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_select_insert_list",BI.MultiSelectInsertList),BI.MultiSelectInsertNoBarList=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.MultiSelectInsertNoBarList.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-insert-list",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn})},_init:function(){BI.MultiSelectInsertNoBarList.superclass._init.apply(this,arguments);var self=this,o=this.options;this.storeValue={type:BI.Selection.Multi,value:o.value||[]};var assertShowValue=function(){BI.isKey(self._startValue)&&(self.storeValue.type===BI.Selection.All?BI.remove(self.storeValue.value,self._startValue):BI.pushDistinct(self.storeValue.value,self._startValue))};this.adapter=BI.createWidget({type:"bi.multi_select_no_bar_loader",cls:"popup-multi-select-list bi-border-left bi-border-right bi-border-bottom",itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,logic:{dynamic:!1},el:{},value:{type:BI.Selection.Multi,value:o.value||[]}}),this.adapter.on(BI.MultiSelectLoader.EVENT_CHANGE,function(){self.storeValue=this.getValue(),assertShowValue(),self.fireEvent(BI.MultiSelectInsertNoBarList.EVENT_CHANGE)}),this.searcherPane=BI.createWidget({type:"bi.multi_select_search_insert_pane",cls:"bi-border-left bi-border-right bi-border-bottom",valueFormatter:o.valueFormatter,keywordGetter:function(){return self.trigger.getKeyword()},itemsCreator:function(op,callback){op.keywords=[self.trigger.getKeyword()],this.setKeyword(op.keywords[0]),o.itemsCreator(op,callback)},listeners:[{eventName:BI.MultiSelectSearchInsertPane.EVENT_ADD_ITEM,action:function(){var keyword=self.trigger.getKeyword();self.trigger.hasMatched()||(self.storeValue.type===BI.Selection.Multi&&BI.pushDistinct(self.storeValue.value,keyword),self._showAdapter(),self.adapter.setValue(self.storeValue),self.adapter.populate(),self.storeValue.type===BI.Selection.Multi&&self.fireEvent(BI.MultiSelectInsertNoBarList.EVENT_CHANGE))}}]}),this.searcherPane.setVisible(!1),this.trigger=BI.createWidget({type:"bi.searcher",isAutoSearch:!1,isAutoSync:!1,onSearch:function(op,callback){callback()},adapter:this.adapter,popup:this.searcherPane,height:200,masker:!1,listeners:[{eventName:BI.Searcher.EVENT_START,action:function(){self._showSearcherPane(),self._setStartValue(""),this.setValue(BI.deepClone(self.storeValue))}},{eventName:BI.Searcher.EVENT_STOP,action:function(){self._showAdapter(),self._setStartValue(""),self.adapter.setValue(self.storeValue),self.adapter.populate()}},{eventName:BI.Searcher.EVENT_PAUSE,action:function(){var keyword=this.getKeyword();this.hasMatched()&&self._join({type:BI.Selection.Multi,value:[keyword]},function(){self.storeValue.type===BI.Selection.Multi&&BI.pushDistinct(self.storeValue.value,keyword),self._showAdapter(),self.adapter.setValue(self.storeValue),self._setStartValue(keyword),assertShowValue(),self.adapter.populate(),self._setStartValue(""),self.fireEvent(BI.MultiSelectInsertNoBarList.EVENT_CHANGE)})}},{eventName:BI.Searcher.EVENT_SEARCHING,action:function(){var keywords=this.getKeywords(),last=BI.last(keywords);keywords=BI.initial(keywords||[]),keywords.length>0&&self._joinKeywords(keywords,function(){BI.isEndWithBlank(last)?(self.adapter.setValue(self.storeValue),assertShowValue(),self.adapter.populate(),self._setStartValue("")):(self.adapter.setValue(self.storeValue),assertShowValue()),self.fireEvent(BI.MultiSelectInsertNoBarList.EVENT_CHANGE)})}},{eventName:BI.Searcher.EVENT_CHANGE,action:function(value,obj){obj instanceof BI.MultiSelectBar?self._joinAll(this.getValue(),function(){assertShowValue(),self.fireEvent(BI.MultiSelectInsertNoBarList.EVENT_CHANGE)}):self._join(this.getValue(),function(){assertShowValue(),self.fireEvent(BI.MultiSelectInsertNoBarList.EVENT_CHANGE)})}}],value:{type:BI.Selection.Multi,value:o.value||[]}}),BI.createWidget({type:"bi.vtape",element:this,items:[{el:this.trigger,height:24},{el:this.adapter,height:"fill"}]}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.searcherPane,top:30,bottom:0,left:0,right:0}]})},_showAdapter:function(){this.adapter.setVisible(!0),this.searcherPane.setVisible(!1)},_showSearcherPane:function(){this.searcherPane.setVisible(!0),this.adapter.setVisible(!1)},_defaultState:function(){this.trigger.stopEditing()},_assertValue:function(val){val||(val={}),val.type||(val.type=BI.Selection.Multi),val.value||(val.value=[])},_makeMap:function(values){return BI.makeObject(values||[])},_joinKeywords:function(keywords,callback){function digest(items){var selectedMap=self._makeMap(items);BI.each(keywords,function(i,val){BI.isNotNull(selectedMap[val])&&(self.storeValue.type===BI.Selection.Multi?BI.pushDistinct(self.storeValue.value,val):BI.remove(self.storeValue.value,val))}),callback()}var self=this,o=this.options;this._assertValue(this.storeValue),o.itemsCreator({type:BI.MultiSelectInsertNoBarList.REQ_GET_ALL_DATA,keywords:keywords},function(ob){var values=BI.map(ob.items,"value");digest(values)})},_joinAll:function(res,callback){var self=this,o=this.options;this._assertValue(res),o.itemsCreator({type:BI.MultiSelectInsertNoBarList.REQ_GET_ALL_DATA,keywords:[self.trigger.getKeyword()]},function(ob){var items=BI.map(ob.items,"value");if(self.storeValue.type===res.type){var change=!1,map=self._makeMap(self.storeValue.value);return BI.each(items,function(i,v){BI.isNotNull(map[v])&&(change=!0,delete map[v])}),change&&(self.storeValue.value=BI.values(map)),void callback()}var selectedMap=self._makeMap(self.storeValue.value),notSelectedMap=self._makeMap(res.value),newItems=[];BI.each(items,function(i,item){BI.isNotNull(selectedMap[items[i]])&&delete selectedMap[items[i]],BI.isNull(notSelectedMap[items[i]])&&newItems.push(item)}),self.storeValue.value=newItems.concat(BI.values(selectedMap)),callback()})},_join:function(res,callback){var self=this,o=this.options;if(this._assertValue(res),this._assertValue(this.storeValue),this.storeValue.type===res.type){var map=this._makeMap(this.storeValue.value);BI.each(res.value,function(i,v){map[v]||(self.storeValue.value.push(v),map[v]=v)});var change=!1;return BI.each(res.assist,function(i,v){BI.isNotNull(map[v])&&(change=!0,delete map[v])}),change&&(this.storeValue.value=BI.values(map)),void callback()}this._joinAll(res,callback)},_setStartValue:function(value){this._startValue=value,this.adapter.setStartValue(value)},isAllSelected:function(){return this.adapter.isAllSelected()},resize:function(){},setValue:function(v){this.storeValue={type:BI.Selection.Multi,value:v||[]},this.adapter.setValue(this.storeValue),this.trigger.setValue(this.storeValue)},getValue:function(){return BI.deepClone(this.storeValue.value)},populate:function(){this.adapter.populate.apply(this.adapter,arguments),this.trigger.populate.apply(this.trigger,arguments)}}),BI.extend(BI.MultiSelectInsertNoBarList,{ +REQ_GET_DATA_LENGTH:1,REQ_GET_ALL_DATA:-1}),BI.MultiSelectInsertNoBarList.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_select_insert_no_bar_list",BI.MultiSelectInsertNoBarList),BI.MultiSelectList=BI.inherit(BI.Widget,{_constant:{EDITOR_HEIGHT:24},_defaultConfig:function(){return BI.extend(BI.MultiSelectList.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-list",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn})},_init:function(){BI.MultiSelectList.superclass._init.apply(this,arguments);var self=this,o=this.options;this.storeValue={};var assertShowValue=function(){BI.isKey(self._startValue)&&(self.storeValue.type===BI.Selection.All?BI.remove(self.storeValue.value,self._startValue):BI.pushDistinct(self.storeValue.value,self._startValue))};this.adapter=BI.createWidget({type:"bi.multi_select_loader",cls:"popup-multi-select-list bi-border-left bi-border-right bi-border-bottom",itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,logic:{dynamic:!1},el:{}}),this.adapter.on(BI.MultiSelectLoader.EVENT_CHANGE,function(){self.storeValue=this.getValue(),self._adjust(function(){assertShowValue(),self.fireEvent(BI.MultiSelectList.EVENT_CHANGE)})}),this.searcherPane=BI.createWidget({type:"bi.multi_select_search_pane",cls:"bi-border-left bi-border-right bi-border-bottom",valueFormatter:o.valueFormatter,keywordGetter:function(){return self.trigger.getKeyword()},itemsCreator:function(op,callback){op.keywords=[self.trigger.getKeyword()],this.setKeyword(op.keywords[0]),o.itemsCreator(op,callback)}}),this.searcherPane.setVisible(!1),this.trigger=BI.createWidget({type:"bi.searcher",isAutoSearch:!1,isAutoSync:!1,onSearch:function(op,callback){callback()},adapter:this.adapter,popup:this.searcherPane,height:200,masker:!1,listeners:[{eventName:BI.Searcher.EVENT_START,action:function(){self._showSearcherPane(),self._setStartValue(""),this.setValue(BI.deepClone(self.storeValue))}},{eventName:BI.Searcher.EVENT_STOP,action:function(){self._showAdapter(),self._setStartValue(""),self.adapter.setValue(self.storeValue),self.adapter.populate()}},{eventName:BI.Searcher.EVENT_PAUSE,action:function(){var keyword=this.getKeyword();this.hasMatched()&&self._join({type:BI.Selection.Multi,value:[keyword]},function(){self._showAdapter(),self.adapter.setValue(self.storeValue),self._setStartValue(keyword),assertShowValue(),self.adapter.populate(),self._setStartValue(""),self.fireEvent(BI.MultiSelectList.EVENT_CHANGE)})}},{eventName:BI.Searcher.EVENT_SEARCHING,action:function(){var keywords=this.getKeyword(),last=BI.last(keywords);keywords=BI.initial(keywords||[]),keywords.length>0&&self._joinKeywords(keywords,function(){BI.isEndWithBlank(last)?(self.adapter.setValue(self.storeValue),assertShowValue(),self.adapter.populate(),self._setStartValue("")):(self.adapter.setValue(self.storeValue),assertShowValue()),self.fireEvent(BI.MultiSelectList.EVENT_CHANGE)})}},{eventName:BI.Searcher.EVENT_CHANGE,action:function(value,obj){obj instanceof BI.MultiSelectBar?self._joinAll(this.getValue(),function(){assertShowValue(),self.fireEvent(BI.MultiSelectList.EVENT_CHANGE)}):self._join(this.getValue(),function(){assertShowValue(),self.fireEvent(BI.MultiSelectList.EVENT_CHANGE)})}}]}),BI.createWidget({type:"bi.vtape",element:this,items:[{el:this.trigger,height:this._constant.EDITOR_HEIGHT},{el:this.adapter,height:"fill"}]}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.searcherPane,top:this._constant.EDITOR_HEIGHT,bottom:0,left:0,right:0}]})},_showAdapter:function(){this.adapter.setVisible(!0),this.searcherPane.setVisible(!1)},_showSearcherPane:function(){this.searcherPane.setVisible(!0),this.adapter.setVisible(!1)},_defaultState:function(){this.trigger.stopEditing()},_assertValue:function(val){val||(val={}),val.type||(val.type=BI.Selection.Multi),val.value||(val.value=[])},_makeMap:function(values){return BI.makeObject(values||[])},_joinKeywords:function(keywords,callback){function digest(items){var selectedMap=self._makeMap(items);BI.each(keywords,function(i,val){BI.isNotNull(selectedMap[val])&&(self.storeValue.type===BI.Selection.Multi?BI.pushDistinct(self.storeValue.value,val):BI.remove(self.storeValue.value,val))}),self._adjust(callback)}var self=this,o=this.options;this._assertValue(this.storeValue),o.itemsCreator({type:BI.MultiSelectList.REQ_GET_ALL_DATA,keywords:keywords},function(ob){var values=BI.map(ob.items,"value");digest(values)})},_joinAll:function(res,callback){var self=this,o=this.options;this._assertValue(res),o.itemsCreator({type:BI.MultiSelectList.REQ_GET_ALL_DATA,keywords:[this.trigger.getKey()]},function(ob){var items=BI.map(ob.items,"value");if(self.storeValue.type===res.type){var change=!1,map=self._makeMap(self.storeValue.value);return BI.each(items,function(i,v){BI.isNotNull(map[v])&&(change=!0,delete map[v])}),change&&(self.storeValue.value=BI.values(map)),void self._adjust(callback)}var selectedMap=self._makeMap(self.storeValue.value),notSelectedMap=self._makeMap(res.value),newItems=[];BI.each(items,function(i,item){BI.isNotNull(selectedMap[items[i]])&&delete selectedMap[items[i]],BI.isNull(notSelectedMap[items[i]])&&newItems.push(item)}),self.storeValue.value=newItems.concat(BI.values(selectedMap)),self._adjust(callback)})},_adjust:function(callback){function adjust(){self.storeValue.type===BI.Selection.All&&self.storeValue.value.length>=self._count?self.storeValue={type:BI.Selection.Multi,value:[]}:self.storeValue.type===BI.Selection.Multi&&self.storeValue.value.length>=self._count&&(self.storeValue={type:BI.Selection.All,value:[]})}var self=this,o=this.options;this._count?(adjust(),callback()):o.itemsCreator({type:BI.MultiSelectList.REQ_GET_DATA_LENGTH},function(res){self._count=res.count,adjust(),callback()})},_join:function(res,callback){var self=this,o=this.options;if(this._assertValue(res),this._assertValue(this.storeValue),this.storeValue.type===res.type){var map=this._makeMap(this.storeValue.value);BI.each(res.value,function(i,v){map[v]||(self.storeValue.value.push(v),map[v]=v)});var change=!1;return BI.each(res.assist,function(i,v){BI.isNotNull(map[v])&&(change=!0,delete map[v])}),change&&(this.storeValue.value=BI.values(map)),void self._adjust(callback)}this._joinAll(res,callback)},_setStartValue:function(value){this._startValue=value,this.adapter.setStartValue(value)},isAllSelected:function(){return this.adapter.isAllSelected()},resize:function(){},setValue:function(v){this.storeValue=v||{},this._assertValue(this.storeValue),this.adapter.setValue(this.storeValue),this.trigger.setValue(this.storeValue)},getValue:function(){return BI.deepClone(this.storeValue)},populate:function(){this.adapter.populate.apply(this.adapter,arguments),this.trigger.populate.apply(this.trigger,arguments)}}),BI.extend(BI.MultiSelectList,{REQ_GET_DATA_LENGTH:1,REQ_GET_ALL_DATA:-1}),BI.MultiSelectList.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_select_list",BI.MultiSelectList),BI.MultiSelectTree=BI.inherit(BI.Single,{_constant:{EDITOR_HEIGHT:24},_defaultConfig:function(){return BI.extend(BI.MultiSelectTree.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-tree",itemsCreator:BI.emptyFn})},_init:function(){BI.MultiSelectTree.superclass._init.apply(this,arguments);var self=this,o=this.options;this.storeValue={value:{}},this.adapter=BI.createWidget({type:"bi.multi_select_tree_popup",itemsCreator:o.itemsCreator}),this.adapter.on(BI.MultiSelectTreePopup.EVENT_CHANGE,function(){self.searcher.isSearching()?self.storeValue={value:self.searcherPane.getValue()}:self.storeValue={value:self.adapter.getValue()},self.setSelectedValue(self.storeValue.value),self.fireEvent(BI.MultiSelectTree.EVENT_CHANGE)}),this.searcherPane=BI.createWidget({type:"bi.multi_tree_search_pane",cls:"bi-border-left bi-border-right bi-border-bottom",keywordGetter:function(){return self.searcher.getKeyword()},itemsCreator:function(op,callback){op.keyword=self.searcher.getKeyword(),o.itemsCreator(op,callback)}}),this.searcherPane.setVisible(!1),this.searcher=BI.createWidget({type:"bi.searcher",isAutoSearch:!1,isAutoSync:!1,onSearch:function(op,callback){callback({keyword:self.searcher.getKeyword()})},adapter:this.adapter,popup:this.searcherPane,masker:!1,listeners:[{eventName:BI.Searcher.EVENT_START,action:function(){self._showSearcherPane()}},{eventName:BI.Searcher.EVENT_STOP,action:function(){self._showAdapter(),BI.nextTick(function(){self.adapter.populate()})}},{eventName:BI.Searcher.EVENT_CHANGE,action:function(){self.searcher.isSearching()?self.storeValue={value:self.searcherPane.getValue()}:self.storeValue={value:self.adapter.getValue()},self.setSelectedValue(self.storeValue.value),self.fireEvent(BI.MultiSelectTree.EVENT_CHANGE)}},{eventName:BI.Searcher.EVENT_PAUSE,action:function(){self._showAdapter()}}]}),BI.createWidget({type:"bi.vtape",element:this,items:[{el:this.searcher,height:this._constant.EDITOR_HEIGHT},{el:this.adapter,height:"fill"}]}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.searcherPane,top:this._constant.EDITOR_HEIGHT,bottom:0,left:0,right:0}]})},_showAdapter:function(){this.adapter.setVisible(!0),this.searcherPane.setVisible(!1)},_showSearcherPane:function(){this.searcherPane.setVisible(!0),this.adapter.setVisible(!1)},resize:function(){},setSelectedValue:function(v){this.storeValue.value=v||{},this.adapter.setSelectedValue(v),this.searcherPane.setSelectedValue(v),this.searcher.setValue({value:v||{}})},setValue:function(v){this.adapter.setValue(v)},stopSearch:function(){this.searcher.stopSearch()},updateValue:function(v){this.adapter.updateValue(v)},getValue:function(){return this.storeValue.value},populate:function(){this.searcher.populate.apply(this.searcher,arguments),this.adapter.populate.apply(this.adapter,arguments)}}),BI.MultiSelectTree.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_select_tree",BI.MultiSelectTree),BI.MultiSelectTreePopup=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiSelectTreePopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-tree-popup bi-border-left bi-border-right bi-border-bottom",itemsCreator:BI.emptyFn})},_init:function(){BI.MultiSelectTreePopup.superclass._init.apply(this,arguments);var self=this,o=this.options;this.popup=BI.createWidget({type:"bi.async_tree",element:this,itemsCreator:o.itemsCreator}),this.popup.on(BI.TreeView.EVENT_AFTERINIT,function(){self.fireEvent(BI.MultiSelectTreePopup.EVENT_AFTER_INIT)}),this.popup.on(BI.TreeView.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectTreePopup.EVENT_CHANGE)})},hasChecked:function(){return this.popup.hasChecked()},getValue:function(){return this.popup.getValue()},setValue:function(v){v||(v={}),this.popup.setValue(v)},setSelectedValue:function(v){v||(v={}),this.popup.setSelectedValue(v)},updateValue:function(v){this.popup.updateValue(v),this.popup.refresh()},populate:function(config){this.popup.stroke(config)}}),BI.MultiSelectTreePopup.EVENT_AFTER_INIT="EVENT_AFTER_INIT",BI.MultiSelectTreePopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_select_tree_popup",BI.MultiSelectTreePopup),BI.MultiTreeCheckPane=BI.inherit(BI.Pane,{constants:{height:25,lgap:10,tgap:5},_defaultConfig:function(){return BI.extend(BI.MultiTreeCheckPane.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-tree-check-pane bi-background",onClickContinueSelect:BI.emptyFn,el:{type:"bi.display_tree"}})},_init:function(){BI.MultiTreeCheckPane.superclass._init.apply(this,arguments);var self=this,opts=this.options;this.selectedValues={};var continueSelect=BI.createWidget({type:"bi.text_button",text:BI.i18nText("BI-Continue_Select"),cls:"multi-tree-check-selected"});continueSelect.on(BI.TextButton.EVENT_CHANGE,function(){opts.onClickContinueSelect(),BI.nextTick(function(){self.empty()})});var backToPopup=BI.createWidget({type:"bi.left",cls:"multi-tree-continue-select",items:[{el:{type:"bi.label",text:BI.i18nText("BI-Selected_Data")},lgap:this.constants.lgap,tgap:this.constants.tgap},{el:continueSelect,lgap:this.constants.lgap,tgap:this.constants.tgap}]});this.display=BI.createWidget(opts.el,{type:"bi.display_tree",cls:"bi-multi-tree-display",itemsCreator:function(op,callback){op.type=BI.TreeView.REQ_TYPE_GET_SELECTED_DATA,opts.itemsCreator(op,callback)},value:(opts.value||{}).value}),this.display.on(BI.Events.AFTERINIT,function(){self.fireEvent(BI.Events.AFTERINIT)}),this.display.on(BI.TreeView.EVENT_INIT,function(){backToPopup.setVisible(!1)}),this.display.on(BI.TreeView.EVENT_AFTERINIT,function(){backToPopup.setVisible(!0)}),BI.createWidget({type:"bi.vtape",element:this,items:[{height:this.constants.height,el:backToPopup},{height:"fill",el:this.display}]})},empty:function(){this.display.empty()},populate:function(configs){this.display.stroke(configs)},setValue:function(v){v||(v={}),this.display.setSelectedValue(v.value)},getValue:function(){}}),BI.MultiTreeCheckPane.EVENT_CONTINUE_CLICK="EVENT_CONTINUE_CLICK",BI.shortcut("bi.multi_tree_check_pane",BI.MultiTreeCheckPane),BI.MultiTreeCombo=BI.inherit(BI.Single,{constants:{offset:{top:0,left:0,right:0,bottom:25}},_defaultConfig:function(){return BI.extend(BI.MultiTreeCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-tree-combo",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,height:24})},_init:function(){function showCounter(){isSearching()?self.storeValue={value:self.trigger.getValue()}:isPopupView()&&(self.storeValue={value:self.combo.getValue()}),self.trigger.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue)}BI.MultiTreeCombo.superclass._init.apply(this,arguments);var self=this,o=this.options,isInit=!1,want2showCounter=!1;this.storeValue={value:o.value||{}},this.trigger=BI.createWidget({type:"bi.multi_select_trigger",height:o.height,valueFormatter:o.valueFormatter,text:o.text,watermark:o.watermark,masker:{offset:this.constants.offset},searcher:{type:"bi.multi_tree_searcher",itemsCreator:o.itemsCreator},value:{value:o.value||{}}}),this.combo=BI.createWidget({type:"bi.combo",toggle:!1,container:o.container,el:this.trigger,adjustLength:1,popup:{type:"bi.multi_tree_popup_view",ref:function(){self.popup=this,self.trigger.setAdapter(this),self.numberCounter.setAdapter(this)},listeners:[{eventName:BI.MultiTreePopup.EVENT_AFTERINIT,action:function(){self.numberCounter.adjustView(),isInit=!0,want2showCounter===!0&&showCounter()}},{eventName:BI.MultiTreePopup.EVENT_CHANGE,action:function(){change=!0;var val={type:BI.Selection.Multi,value:this.hasChecked()?this.getValue():{}};self.trigger.getSearcher().setState(val),self.numberCounter.setButtonChecked(val),self.fireEvent(BI.MultiTreeCombo.EVENT_CLICK_ITEM)}},{eventName:BI.MultiTreePopup.EVENT_CLICK_CONFIRM,action:function(){self.combo.hideView()}},{eventName:BI.MultiTreePopup.EVENT_CLICK_CLEAR,action:function(){clear=!0,self.setValue(),self._defaultState()}}],itemsCreator:o.itemsCreator,onLoaded:function(){BI.nextTick(function(){self.numberCounter.adjustView(),self.trigger.getSearcher().adjustView()})}},value:{value:o.value||{}},hideChecker:function(e){return 0===triggerBtn.element.find(e.target).length&&0===self.numberCounter.element.find(e.target).length}});var change=!1,clear=!1,isSearching=function(){return self.trigger.getSearcher().isSearching()},isPopupView=function(){return self.combo.isViewVisible()};this.trigger.on(BI.MultiSelectTrigger.EVENT_FOCUS,function(){self.fireEvent(BI.MultiTreeCombo.EVENT_FOCUS)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_BLUR,function(){self.fireEvent(BI.MultiTreeCombo.EVENT_BLUR)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_START,function(){self.storeValue={value:self.combo.getValue()},this.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP,function(){self.storeValue={value:this.getValue()},self.combo.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue),BI.nextTick(function(){isPopupView()&&self.combo.populate()}),self.fireEvent(BI.MultiTreeCombo.EVENT_STOP)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_SEARCHING,function(){self.fireEvent(BI.MultiTreeCombo.EVENT_SEARCHING)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_TRIGGER_CLICK,function(){self.combo.toggle()}),this.trigger.on(BI.MultiSelectTrigger.EVENT_COUNTER_CLICK,function(){self.combo.isViewVisible()||self.combo.showView()}),this.trigger.on(BI.MultiSelectTrigger.EVENT_CHANGE,function(){var checked=this.getSearcher().hasChecked(),val={type:BI.Selection.Multi,value:checked?{1:1}:{}};this.getSearcher().setState(checked?BI.Selection.Multi:BI.Selection.None),self.numberCounter.setButtonChecked(val),self.fireEvent(BI.MultiTreeCombo.EVENT_CLICK_ITEM)}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){isSearching()||(change===!0&&(self.storeValue={value:self.combo.getValue()},change=!1),self.combo.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue),self.populate())}),this.combo.on(BI.Combo.EVENT_BEFORE_HIDEVIEW,function(){isSearching()?(self._stopEditing(),self.fireEvent(BI.MultiTreeCombo.EVENT_CONFIRM)):isPopupView()&&(self._stopEditing(),self.storeValue={value:self.combo.getValue()},clear===!0&&(self.storeValue={value:{}}),self.fireEvent(BI.MultiTreeCombo.EVENT_CONFIRM)),clear=!1,change=!1});var triggerBtn=BI.createWidget({type:"bi.trigger_icon_button",width:o.height,height:o.height,cls:"multi-select-trigger-icon-button"});triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE,function(){self.numberCounter.hideView(),self.combo.isViewVisible()?self.combo.hideView():self.combo.showView()}),this.numberCounter=BI.createWidget({type:"bi.multi_select_check_selected_switcher",el:{type:"bi.multi_tree_check_selected_button"},popup:{type:"bi.multi_tree_check_pane"},masker:{offset:this.constants.offset},itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,value:{value:o.value||{}}}),this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE,function(){self.combo.isViewVisible()||self.combo.showView()}),this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW,function(){want2showCounter===!1&&(want2showCounter=!0),isInit===!0&&(want2showCounter=null,showCounter())}),this.numberCounter.on(BI.Events.VIEW,function(b){BI.nextTick(function(){self.trigger.refreshPlaceHolderWidth(b===!0?self.numberCounter.element.outerWidth()+8:0)})}),this.trigger.element.click(function(e){self.trigger.element.find(e.target).length>0&&self.numberCounter.hideView()}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.combo,left:0,right:0,top:0,bottom:0},{el:triggerBtn,right:0,top:0,bottom:0},{el:{type:"bi.vertical_adapt",items:[this.numberCounter]},right:o.height,top:0,height:o.height}]})},_stopEditing:function(){this.trigger.stopEditing(),this.numberCounter.hideView()},_defaultState:function(){this._stopEditing(),this.combo.hideView()},setValue:function(v){this.storeValue.value=v||{},this.combo.setValue({value:v||{}}),this.numberCounter.setValue({value:v||{}})},getValue:function(){return BI.deepClone(this.storeValue.value)},populate:function(){this.combo.populate.apply(this.combo,arguments)}}),BI.MultiTreeCombo.EVENT_FOCUS="EVENT_FOCUS",BI.MultiTreeCombo.EVENT_BLUR="EVENT_BLUR",BI.MultiTreeCombo.EVENT_STOP="EVENT_STOP",BI.MultiTreeCombo.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiTreeCombo.EVENT_CLICK_ITEM="EVENT_CLICK_ITEM",BI.MultiTreeCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.multi_tree_combo",BI.MultiTreeCombo),BI.MultiTreeInsertCombo=BI.inherit(BI.Single,{constants:{offset:{top:0,left:0,right:0,bottom:25}},_defaultConfig:function(){return BI.extend(BI.MultiTreeInsertCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-tree-insert-combo",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,height:24,allowEdit:!0})},_init:function(){function showCounter(){isSearching()?self.storeValue={value:self.trigger.getValue()}:isPopupView()&&(self.storeValue={value:self.combo.getValue()}),self.trigger.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue)}BI.MultiTreeInsertCombo.superclass._init.apply(this,arguments);var self=this,o=this.options,isInit=!1,want2showCounter=!1;this.storeValue={value:o.value||{}},this.trigger=BI.createWidget({type:"bi.multi_select_trigger",allowEdit:o.allowEdit,height:o.height,valueFormatter:o.valueFormatter,masker:{offset:this.constants.offset},searcher:{type:"bi.multi_tree_searcher",text:o.text,watermark:o.watermark,itemsCreator:o.itemsCreator,popup:{type:"bi.multi_tree_search_insert_pane",listeners:[{eventName:BI.MultiTreeSearchInsertPane.EVENT_ADD_ITEM,action:function(){self.storeValue.value[self.trigger.getSearcher().getKeyword()]={},self._assertShowValue(),self.combo.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue),self._stopEditing()}}]}},value:{value:o.value||{}}}),this.combo=BI.createWidget({type:"bi.combo",toggle:!1,container:o.container,el:this.trigger,adjustLength:1,popup:{type:"bi.multi_tree_popup_view",ref:function(){self.popup=this,self.trigger.setAdapter(this),self.numberCounter.setAdapter(this)},listeners:[{eventName:BI.MultiTreePopup.EVENT_AFTERINIT,action:function(){self.numberCounter.adjustView(),isInit=!0,want2showCounter===!0&&showCounter()}},{eventName:BI.MultiTreePopup.EVENT_CHANGE,action:function(){change=!0;var val={type:BI.Selection.Multi,value:this.hasChecked()?this.getValue():{}};self.trigger.getSearcher().setState(val),self.numberCounter.setButtonChecked(val),self.fireEvent(BI.MultiTreeInsertCombo.EVENT_CLICK_ITEM,self.combo.getValue())}},{eventName:BI.MultiTreePopup.EVENT_CLICK_CONFIRM,action:function(){self.combo.hideView()}},{eventName:BI.MultiTreePopup.EVENT_CLICK_CLEAR,action:function(){clear=!0,self.setValue(),self._defaultState()}}],itemsCreator:o.itemsCreator,onLoaded:function(){BI.nextTick(function(){self.numberCounter.adjustView(),self.trigger.getSearcher().adjustView()})}},value:{value:o.value||{}},hideChecker:function(e){return 0===triggerBtn.element.find(e.target).length&&0===self.numberCounter.element.find(e.target).length}});var change=!1,clear=!1,isSearching=function(){return self.trigger.getSearcher().isSearching()},isPopupView=function(){return self.combo.isViewVisible()};this.trigger.on(BI.MultiSelectTrigger.EVENT_FOCUS,function(){self.fireEvent(BI.MultiTreeInsertCombo.EVENT_FOCUS)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_BLUR,function(){self.fireEvent(BI.MultiTreeInsertCombo.EVENT_BLUR)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_START,function(){self.storeValue={value:self.combo.getValue()},this.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP,function(){self.storeValue={value:this.getValue()},self.combo.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue),BI.nextTick(function(){isPopupView()&&self.combo.populate()}),self.fireEvent(BI.MultiTreeInsertCombo.EVENT_STOP)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_SEARCHING,function(){self.fireEvent(BI.MultiTreeInsertCombo.EVENT_SEARCHING)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_TRIGGER_CLICK,function(){self.combo.toggle()}),this.trigger.on(BI.MultiSelectTrigger.EVENT_CHANGE,function(){var checked=this.getSearcher().hasChecked(),val={type:BI.Selection.Multi,value:checked?{1:1}:{}};this.getSearcher().setState(checked?BI.Selection.Multi:BI.Selection.None),self.numberCounter.setButtonChecked(val),self.fireEvent(BI.MultiTreeInsertCombo.EVENT_CLICK_ITEM,self.combo.getValue())}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){isSearching()||(change===!0&&(self.storeValue={value:self.combo.getValue()},change=!1),self.combo.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue),self.populate())}),this.combo.on(BI.Combo.EVENT_BEFORE_HIDEVIEW,function(){isSearching()?(self._stopEditing(),self.fireEvent(BI.MultiTreeInsertCombo.EVENT_CONFIRM)):isPopupView()&&(self._stopEditing(),self.storeValue={value:self.combo.getValue()},clear===!0&&(self.storeValue={value:{}}),self.fireEvent(BI.MultiTreeInsertCombo.EVENT_CONFIRM)),clear=!1,change=!1});var triggerBtn=BI.createWidget({type:"bi.trigger_icon_button",width:o.height,height:o.height,cls:"multi-select-trigger-icon-button"});triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE,function(){self.numberCounter.hideView(),self.combo.isViewVisible()?self.combo.hideView():self.combo.showView()}),this.numberCounter=BI.createWidget({type:"bi.multi_select_check_selected_switcher",el:{type:"bi.multi_tree_check_selected_button"},popup:{type:"bi.multi_tree_check_pane"},itemsCreator:o.itemsCreator,masker:{offset:this.constants.offset},valueFormatter:o.valueFormatter,value:o.value}),this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE,function(){self.combo.isViewVisible()||self.combo.showView()}),this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW,function(){want2showCounter===!1&&(want2showCounter=!0),isInit===!0&&(want2showCounter=null,showCounter())}),this.numberCounter.on(BI.Events.VIEW,function(b){BI.nextTick(function(){self.trigger.refreshPlaceHolderWidth(b===!0?self.numberCounter.element.outerWidth()+8:0)})}),this.trigger.element.click(function(e){self.trigger.element.find(e.target).length>0&&self.numberCounter.hideView()}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.combo,left:0,right:0,top:0,bottom:0},{el:triggerBtn,right:0,top:0,bottom:0},{el:{type:"bi.vertical_adapt",items:[this.numberCounter]},right:o.height,top:0,height:o.height}]})},_assertShowValue:function(){this.trigger.getSearcher().setState(this.storeValue),this.numberCounter.setButtonChecked(this.storeValue)},_stopEditing:function(){this.trigger.stopEditing(),this.numberCounter.hideView()},_defaultState:function(){this._stopEditing(),this.combo.hideView()},setValue:function(v){this.storeValue.value=v||{},this.combo.setValue({value:v||{}}),this.numberCounter.setValue({value:v||{}})},getValue:function(){return BI.deepClone(this.storeValue.value)},populate:function(){this.combo.populate.apply(this.combo,arguments)}}),BI.MultiTreeInsertCombo.EVENT_FOCUS="EVENT_FOCUS",BI.MultiTreeInsertCombo.EVENT_BLUR="EVENT_BLUR",BI.MultiTreeInsertCombo.EVENT_STOP="EVENT_STOP",BI.MultiTreeInsertCombo.EVENT_CLICK_ITEM="EVENT_CLICK_ITEM",BI.MultiTreeInsertCombo.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiTreeInsertCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.multi_tree_insert_combo",BI.MultiTreeInsertCombo),BI.MultiTreeListCombo=BI.inherit(BI.Single,{constants:{offset:{top:0,left:0,right:0,bottom:25}},_defaultConfig:function(){return BI.extend(BI.MultiTreeListCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-tree-list-combo",itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,height:24,allowEdit:!0,allowInsertValue:!0})},_init:function(){function showCounter(){isSearching()?self.storeValue={value:self.trigger.getValue()}:isPopupView()&&(self.storeValue={value:self.combo.getValue()}),self.trigger.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue)}BI.MultiTreeListCombo.superclass._init.apply(this,arguments);var self=this,o=this.options,isInit=!1,want2showCounter=!1;this.storeValue={value:o.value||[]},this.trigger=BI.createWidget({type:"bi.multi_select_trigger",allowEdit:o.allowEdit,text:o.text,watermark:o.watermark,height:o.height,valueFormatter:o.valueFormatter,masker:{offset:this.constants.offset},searcher:{type:"bi.multi_list_tree_searcher",itemsCreator:o.itemsCreator,popup:{type:o.allowInsertValue?"bi.multi_tree_search_insert_pane":"bi.multi_tree_search_pane",el:{type:"bi.list_part_tree"},listeners:[{eventName:BI.MultiTreeSearchInsertPane.EVENT_ADD_ITEM,action:function(){self.storeValue.value.unshift([self.trigger.getSearcher().getKeyword()]),self._assertShowValue(),self.combo.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue),self._stopEditing()}}]}},switcher:{el:{type:"bi.multi_tree_check_selected_button"},popup:{type:"bi.multi_tree_check_pane",el:{type:"bi.list_display_tree"},itemsCreator:o.itemsCreator}},value:{value:o.value||{}}}),this.combo=BI.createWidget({type:"bi.combo",toggle:!1,container:o.container,el:this.trigger,adjustLength:1,popup:{type:"bi.multi_tree_popup_view",ref:function(){self.popup=this,self.trigger.setAdapter(this),self.numberCounter.setAdapter(this)},el:{type:"bi.list_async_tree"},listeners:[{eventName:BI.MultiTreePopup.EVENT_AFTERINIT,action:function(){self.numberCounter.adjustView(),isInit=!0,want2showCounter===!0&&showCounter()}},{eventName:BI.MultiTreePopup.EVENT_CHANGE,action:function(){change=!0;var val={type:BI.Selection.Multi,value:this.hasChecked()?this.getValue():[]};self.trigger.getSearcher().setState(val),self.numberCounter.setButtonChecked(val),self.fireEvent(BI.MultiTreeListCombo.EVENT_CLICK_ITEM,self.combo.getValue())}},{eventName:BI.MultiTreePopup.EVENT_CLICK_CONFIRM,action:function(){self.combo.hideView()}},{eventName:BI.MultiTreePopup.EVENT_CLICK_CLEAR,action:function(){clear=!0,self.setValue(),self._defaultState()}}],itemsCreator:o.itemsCreator,onLoaded:function(){BI.nextTick(function(){self.numberCounter.adjustView(),self.trigger.getSearcher().adjustView()})}},value:{value:o.value||{}},hideChecker:function(e){return 0===triggerBtn.element.find(e.target).length&&0===self.numberCounter.element.find(e.target).length}});var change=!1,clear=!1,isSearching=function(){return self.trigger.getSearcher().isSearching()},isPopupView=function(){return self.combo.isViewVisible()};this.trigger.on(BI.MultiSelectTrigger.EVENT_FOCUS,function(){self.fireEvent(BI.MultiTreeListCombo.EVENT_FOCUS)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_BLUR,function(){self.fireEvent(BI.MultiTreeListCombo.EVENT_BLUR)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_START,function(){self.storeValue={value:self.combo.getValue()},this.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP,function(){self.storeValue={value:this.getValue()},self.combo.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue),BI.nextTick(function(){isPopupView()&&self.combo.populate()}),self.fireEvent(BI.MultiTreeListCombo.EVENT_STOP)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_SEARCHING,function(){self.fireEvent(BI.MultiTreeListCombo.EVENT_SEARCHING)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_TRIGGER_CLICK,function(){self.combo.toggle()}),this.trigger.on(BI.MultiSelectTrigger.EVENT_CHANGE,function(){var checked=this.getSearcher().hasChecked(),val={type:BI.Selection.Multi,value:checked?{1:1}:{}};this.getSearcher().setState(checked?BI.Selection.Multi:BI.Selection.None),self.numberCounter.setButtonChecked(val),self.fireEvent(BI.MultiTreeListCombo.EVENT_CLICK_ITEM,self.combo.getValue())}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){isSearching()||(change===!0&&(self.storeValue={value:self.combo.getValue()},change=!1),self.combo.setValue(self.storeValue),self.numberCounter.setValue(self.storeValue),self.populate())}),this.combo.on(BI.Combo.EVENT_BEFORE_HIDEVIEW,function(){isSearching()?(self.trigger.stopEditing(),self.fireEvent(BI.MultiTreeListCombo.EVENT_CONFIRM)):isPopupView()&&(self._stopEditing(),self.storeValue={value:self.combo.getValue()},clear===!0&&(self.storeValue={value:[]}),self.fireEvent(BI.MultiTreeListCombo.EVENT_CONFIRM)),clear=!1,change=!1});var triggerBtn=BI.createWidget({type:"bi.trigger_icon_button",width:o.height,height:o.height,cls:"multi-select-trigger-icon-button"});triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE,function(){self.numberCounter.hideView(),self.combo.isViewVisible()?self.combo.hideView():self.combo.showView()}),this.numberCounter=BI.createWidget({type:"bi.multi_select_check_selected_switcher",el:{type:"bi.multi_tree_check_selected_button"},popup:{type:"bi.multi_tree_check_pane"},itemsCreator:o.itemsCreator,masker:{offset:{left:0,top:0,right:0,bottom:25}},valueFormatter:o.valueFormatter,value:o.value}),this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE,function(){self.combo.isViewVisible()||self.combo.showView(); +}),this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW,function(){want2showCounter===!1&&(want2showCounter=!0),isInit===!0&&(want2showCounter=null,showCounter())}),this.numberCounter.on(BI.Events.VIEW,function(b){BI.nextTick(function(){self.trigger.refreshPlaceHolderWidth(b===!0?self.numberCounter.element.outerWidth()+8:0)})}),this.trigger.element.click(function(e){self.trigger.element.find(e.target).length>0&&self.numberCounter.hideView()}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.combo,left:0,right:0,top:0,bottom:0},{el:triggerBtn,right:0,top:0,bottom:0},{el:{type:"bi.vertical_adapt",items:[this.numberCounter]},right:o.height,top:0,height:o.height}]})},_assertShowValue:function(){this.trigger.getSearcher().setState(this.storeValue),this.numberCounter.setButtonChecked(this.storeValue)},_stopEditing:function(){this.trigger.stopEditing(),this.numberCounter.hideView()},_defaultState:function(){this._stopEditing(),this.combo.hideView()},setValue:function(v){this.storeValue.value=v||[],this.combo.setValue({value:v||[]}),this.numberCounter.setValue({value:v||[]})},getValue:function(){return BI.deepClone(this.storeValue.value)},populate:function(){this.combo.populate.apply(this.combo,arguments)}}),BI.MultiTreeListCombo.EVENT_FOCUS="EVENT_FOCUS",BI.MultiTreeListCombo.EVENT_BLUR="EVENT_BLUR",BI.MultiTreeListCombo.EVENT_STOP="EVENT_STOP",BI.MultiTreeListCombo.EVENT_CLICK_ITEM="EVENT_CLICK_ITEM",BI.MultiTreeListCombo.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiTreeListCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.multi_tree_list_combo",BI.MultiTreeListCombo),BI.MultiTreePopup=BI.inherit(BI.Pane,{_defaultConfig:function(){return BI.extend(BI.MultiTreePopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-tree-popup",maxWidth:"auto",minWidth:140,maxHeight:400,onLoaded:BI.emptyFn,el:{type:"bi.async_tree"}})},_init:function(){BI.MultiTreePopup.superclass._init.apply(this,arguments);var self=this,opts=this.options,v=opts.value;this.selectedValues={},this.tree=BI.createWidget(opts.el,{type:"bi.async_tree",height:400,cls:"popup-view-tree",itemsCreator:opts.itemsCreator,onLoaded:opts.onLoaded,value:v.value||{}}),this.popupView=BI.createWidget({type:"bi.multi_popup_view",element:this,stopPropagation:!1,maxWidth:opts.maxWidth,minWidth:opts.minWidth,maxHeight:opts.maxHeight,buttons:[BI.i18nText("BI-Basic_Clears"),BI.i18nText("BI-Basic_Sure")],el:this.tree}),this.popupView.on(BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON,function(index){switch(index){case 0:self.fireEvent(BI.MultiTreePopup.EVENT_CLICK_CLEAR);break;case 1:self.fireEvent(BI.MultiTreePopup.EVENT_CLICK_CONFIRM)}}),this.tree.on(BI.TreeView.EVENT_CHANGE,function(){self.fireEvent(BI.MultiTreePopup.EVENT_CHANGE)}),this.tree.on(BI.TreeView.EVENT_AFTERINIT,function(){self.fireEvent(BI.MultiTreePopup.EVENT_AFTERINIT)})},getValue:function(){return this.tree.getValue()},setValue:function(v){v||(v={}),this.tree.setSelectedValue(v.value)},populate:function(config){this.tree.stroke(config)},hasChecked:function(){return this.tree.hasChecked()},resetHeight:function(h){this.popupView.resetHeight(h)},resetWidth:function(w){this.popupView.resetWidth(w)}}),BI.MultiTreePopup.EVENT_CHANGE="EVENT_CHANGE",BI.MultiTreePopup.EVENT_CLICK_CONFIRM="EVENT_CLICK_CONFIRM",BI.MultiTreePopup.EVENT_CLICK_CLEAR="EVENT_CLICK_CLEAR",BI.MultiTreePopup.EVENT_AFTERINIT="EVENT_AFTERINIT",BI.shortcut("bi.multi_tree_popup_view",BI.MultiTreePopup),BI.MultiTreeCheckSelectedButton=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.MultiTreeCheckSelectedButton.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-tree-check-selected-button",itemsCreator:BI.emptyFn})},_init:function(){BI.MultiTreeCheckSelectedButton.superclass._init.apply(this,arguments);var self=this;this.indicator=BI.createWidget({type:"bi.icon_button",cls:"check-font trigger-check-selected icon-size-12",width:15,height:15,stopPropagation:!0}),this.checkSelected=BI.createWidget({type:"bi.text_button",cls:"trigger-check-selected",invisible:!0,hgap:4,text:BI.i18nText("BI-Check_Selected"),textAlign:"center",textHeight:15}),this.checkSelected.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.checkSelected.on(BI.TextButton.EVENT_CHANGE,function(){self.fireEvent(BI.MultiSelectCheckSelectedButton.EVENT_CHANGE,arguments)}),BI.createWidget({type:"bi.horizontal",element:this,items:[this.indicator,this.checkSelected]}),this.element.hover(function(){self.indicator.setVisible(!1),self.checkSelected.setVisible(!0)},function(){self.indicator.setVisible(!0),self.checkSelected.setVisible(!1)}),this.setVisible(!1)},setValue:function(v){v||(v={});var show=BI.size(v.value)>0;this.setVisible(show),show&&(this.indicator.setVisible(!0),this.checkSelected.setVisible(!1))}}),BI.MultiTreeCheckSelectedButton.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.multi_tree_check_selected_button",BI.MultiTreeCheckSelectedButton),BI.MultiTreeSearchInsertPane=BI.inherit(BI.Widget,{constants:{height:24},props:{baseCls:"bi-multi-tree-search-insert-pane bi-card",itemsCreator:BI.emptyFn,keywordGetter:BI.emptyFn,el:{type:"bi.part_tree"}},render:function(){var self=this,opts=this.options;return{type:"bi.absolute",items:[{el:{type:"bi.text_button",invisible:!0,ref:function(_ref){self.addTip=_ref},text:BI.i18nText("BI-Basic_Click_To_Add_Text",""),height:this.constants.height,cls:"bi-high-light",handler:function(){self.fireEvent(BI.MultiTreeSearchInsertPane.EVENT_ADD_ITEM,opts.keywordGetter())}},top:5,left:0,right:0},{el:BI.extend({type:"bi.part_tree",tipText:BI.i18nText("BI-No_Select"),itemsCreator:function(op,callback){op.keyword=opts.keywordGetter(),opts.itemsCreator(op,function(res){callback(res),self.setKeyword(opts.keywordGetter(),res.items)})},ref:function(_ref){self.partTree=_ref},value:opts.value,listeners:[{eventName:BI.Controller.EVENT_CHANGE,action:function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}},{eventName:BI.TreeView.EVENT_CHANGE,action:function(){self.fireEvent(BI.MultiTreeSearchInsertPane.EVENT_CHANGE)}}]},opts.el),left:0,top:0,bottom:0,right:0}]}},setKeyword:function(keyword,nodes){var isAddTipVisible=BI.isEmptyArray(nodes);this.addTip.setVisible(isAddTipVisible),this.partTree.setVisible(!isAddTipVisible),isAddTipVisible&&this.addTip.setText(BI.i18nText("BI-Basic_Click_To_Add_Text",keyword))},hasChecked:function(){return this.partTree.hasChecked()},setValue:function(v){this.setSelectedValue(v.value)},setSelectedValue:function(v){v||(v={}),this.partTree.setSelectedValue(v)},getValue:function(){return this.partTree.getValue()},empty:function(){this.partTree.empty()},populate:function(op){this.partTree.stroke.apply(this.partTree,arguments)}}),BI.MultiTreeSearchInsertPane.EVENT_CHANGE="EVENT_CHANGE",BI.MultiTreeSearchInsertPane.EVENT_CLICK_CONFIRM="EVENT_CLICK_CONFIRM",BI.MultiTreeSearchInsertPane.EVENT_CLICK_CLEAR="EVENT_CLICK_CLEAR",BI.MultiTreeSearchInsertPane.EVENT_ADD_ITEM="EVENT_ADD_ITEM",BI.shortcut("bi.multi_tree_search_insert_pane",BI.MultiTreeSearchInsertPane),BI.MultiTreeSearchPane=BI.inherit(BI.Pane,{_defaultConfig:function(){return BI.extend(BI.MultiTreeSearchPane.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-tree-search-pane bi-card",itemsCreator:BI.emptyFn,keywordGetter:BI.emptyFn})},_init:function(){BI.MultiTreeSearchPane.superclass._init.apply(this,arguments);var self=this,opts=this.options;this.partTree=BI.createWidget({type:"bi.part_tree",element:this,tipText:BI.i18nText("BI-No_Select"),itemsCreator:function(op,callback){op.keyword=opts.keywordGetter(),opts.itemsCreator(op,callback)},value:opts.value}),this.partTree.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.partTree.on(BI.TreeView.EVENT_CHANGE,function(){self.fireEvent(BI.MultiTreeSearchPane.EVENT_CHANGE)})},hasChecked:function(){return this.partTree.hasChecked()},setValue:function(v){this.setSelectedValue(v.value)},setSelectedValue:function(v){v||(v={}),this.partTree.setSelectedValue(v)},getValue:function(){return this.partTree.getValue()},empty:function(){this.partTree.empty()},populate:function(op){this.partTree.stroke.apply(this.partTree,arguments)}}),BI.MultiTreeSearchPane.EVENT_CHANGE="EVENT_CHANGE",BI.MultiTreeSearchPane.EVENT_CLICK_CONFIRM="EVENT_CLICK_CONFIRM",BI.MultiTreeSearchPane.EVENT_CLICK_CLEAR="EVENT_CLICK_CLEAR",BI.shortcut("bi.multi_tree_search_pane",BI.MultiTreeSearchPane),BI.MultiListTreeSearcher=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiListTreeSearcher.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-tree-searcher",itemsCreator:BI.emptyFn,valueFormatter:function(v){return v},popup:{},adapter:null,masker:{}})},_init:function(){BI.MultiListTreeSearcher.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget({type:"bi.multi_select_editor",height:o.height,el:{type:"bi.simple_state_editor",height:o.height}}),this.searcher=BI.createWidget({type:"bi.searcher",element:this,isAutoSearch:!1,isAutoSync:!1,onSearch:function(op,callback){callback({keyword:self.editor.getValue()})},el:this.editor,popup:BI.extend({type:"bi.multi_tree_search_pane",keywordGetter:function(){return self.editor.getValue()},itemsCreator:function(op,callback){op.keyword=self.editor.getValue(),o.itemsCreator(op,callback)},value:o.value},o.popup),adapter:o.adapter,masker:o.masker}),this.searcher.on(BI.Searcher.EVENT_START,function(){self.fireEvent(BI.MultiListTreeSearcher.EVENT_START)}),this.searcher.on(BI.Searcher.EVENT_PAUSE,function(){this.hasMatched(),self.fireEvent(BI.MultiListTreeSearcher.EVENT_PAUSE)}),this.searcher.on(BI.Searcher.EVENT_STOP,function(){self.fireEvent(BI.MultiListTreeSearcher.EVENT_STOP)}),this.searcher.on(BI.Searcher.EVENT_CHANGE,function(){self.fireEvent(BI.MultiListTreeSearcher.EVENT_CHANGE,arguments)}),BI.isNotNull(o.value)&&this.setState(o.value)},adjustView:function(){this.searcher.adjustView()},setAdapter:function(adapter){this.searcher.setAdapter(adapter)},isSearching:function(){return this.searcher.isSearching()},stopSearch:function(){this.searcher.stopSearch()},getKeyword:function(){return this.editor.getValue()},hasMatched:function(){return this.searcher.hasMatched()},hasChecked:function(){return this.searcher.getView()&&this.searcher.getView().hasChecked()},setState:function(ob){var o=this.options;ob||(ob={}),ob.value||(ob.value=[]);var count=0;if(BI.isNumber(ob))this.editor.setState(ob);else if(0===BI.size(ob.value))this.editor.setState(BI.Selection.None);else{var text="";BI.each(ob.value,function(idx,path){var childValue=BI.last(path);text+=(o.valueFormatter(childValue+"")||childValue)+"; ",count++}),count>20?this.editor.setState(BI.Selection.Multi):this.editor.setState(text)}},setValue:function(ob){this.setState(ob),this.searcher.setValue(ob)},getKey:function(){return this.editor.getValue()},getValue:function(){return this.searcher.getValue()},populate:function(items){this.searcher.populate.apply(this.searcher,arguments)}}),BI.MultiListTreeSearcher.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.MultiListTreeSearcher.EVENT_CHANGE="EVENT_CHANGE",BI.MultiListTreeSearcher.EVENT_START="EVENT_START",BI.MultiListTreeSearcher.EVENT_STOP="EVENT_STOP",BI.MultiListTreeSearcher.EVENT_PAUSE="EVENT_PAUSE",BI.shortcut("bi.multi_list_tree_searcher",BI.MultiListTreeSearcher),BI.MultiTreeSearcher=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.MultiTreeSearcher.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-tree-searcher",itemsCreator:BI.emptyFn,valueFormatter:function(v){return v},popup:{},adapter:null,masker:{}})},_init:function(){BI.MultiTreeSearcher.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget({type:"bi.multi_select_editor",watermark:o.watermark,height:o.height,el:{type:"bi.simple_state_editor",text:o.text,height:o.height},listeners:[{eventName:BI.MultiSelectEditor.EVENT_FOCUS,action:function(){self.fireEvent(BI.MultiSelectSearcher.EVENT_FOCUS)}},{eventName:BI.MultiSelectEditor.EVENT_BLUR,action:function(){self.fireEvent(BI.MultiSelectSearcher.EVENT_BLUR)}}]}),this.searcher=BI.createWidget({type:"bi.searcher",element:this,isAutoSearch:!1,isAutoSync:!1,onSearch:function(op,callback){callback({keyword:self.editor.getValue()})},el:this.editor,popup:BI.extend({type:"bi.multi_tree_search_pane",keywordGetter:function(){return self.editor.getValue()},itemsCreator:function(op,callback){op.keyword=self.editor.getValue(),o.itemsCreator(op,callback)},value:o.value},o.popup),adapter:o.adapter,masker:o.masker}),this.searcher.on(BI.Searcher.EVENT_START,function(){self.fireEvent(BI.MultiTreeSearcher.EVENT_START)}),this.searcher.on(BI.Searcher.EVENT_PAUSE,function(){this.hasMatched(),self.fireEvent(BI.MultiTreeSearcher.EVENT_PAUSE)}),this.searcher.on(BI.Searcher.EVENT_STOP,function(){self.fireEvent(BI.MultiTreeSearcher.EVENT_STOP)}),this.searcher.on(BI.Searcher.EVENT_CHANGE,function(){self.fireEvent(BI.MultiTreeSearcher.EVENT_CHANGE,arguments)}),this.searcher.on(BI.Searcher.EVENT_SEARCHING,function(){var keywords=this.getKeywords();self.fireEvent(BI.MultiTreeSearcher.EVENT_SEARCHING,keywords)}),BI.isNotNull(o.value)&&this.setState(o.value)},adjustView:function(){this.searcher.adjustView()},setAdapter:function(adapter){this.searcher.setAdapter(adapter)},isSearching:function(){return this.searcher.isSearching()},stopSearch:function(){this.searcher.stopSearch()},getKeyword:function(){return this.editor.getValue()},hasMatched:function(){return this.searcher.hasMatched()},hasChecked:function(){return this.searcher.getView()&&this.searcher.getView().hasChecked()},setState:function(ob){function getChildrenNode(ob){var text="",index=0,size=BI.size(ob);return BI.each(ob,function(name,children){index++;var childNodes=getChildrenNode(children);text+=(o.valueFormatter(name+"")||name)+(""===childNodes?"":":"+childNodes)+(index===size?"":","),""===childNodes&&count++}),text}var o=this.options;ob||(ob={}),ob.value||(ob.value={});var count=0;if(BI.isNumber(ob))this.editor.setState(ob);else if(0===BI.size(ob.value))this.editor.setState(BI.Selection.None);else{var text="";BI.each(ob.value,function(name,children){var childNodes=getChildrenNode(children);text+=(o.valueFormatter(name+"")||name)+(""===childNodes?"":":"+childNodes)+"; ",""===childNodes&&count++}),count>20?this.editor.setState(BI.Selection.Multi):this.editor.setState(text)}},setValue:function(ob){this.setState(ob),this.searcher.setValue(ob)},getKey:function(){return this.editor.getValue()},getValue:function(){return this.searcher.getValue()},populate:function(items){this.searcher.populate.apply(this.searcher,arguments)}}),BI.MultiTreeSearcher.EVENT_SEARCHING="EVENT_SEARCHING",BI.MultiTreeSearcher.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.MultiTreeSearcher.EVENT_CHANGE="EVENT_CHANGE",BI.MultiTreeSearcher.EVENT_START="EVENT_START",BI.MultiTreeSearcher.EVENT_STOP="EVENT_STOP",BI.MultiTreeSearcher.EVENT_PAUSE="EVENT_PAUSE",BI.shortcut("bi.multi_tree_searcher",BI.MultiTreeSearcher),BI.NumberEditor=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.NumberEditor.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-number-editor bi-border bi-focus-shadow",validationChecker:function(){return!0},valueFormatter:function(v){return v},value:0,allowBlank:!1,errorText:"",step:1})},_init:function(){BI.NumberEditor.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget({type:"bi.sign_editor",height:o.height-2,allowBlank:o.allowBlank,value:o.valueFormatter(o.value),validationChecker:o.validationChecker,errorText:o.errorText}),this.editor.on(BI.TextEditor.EVENT_CHANGE,function(){self.fireEvent(BI.NumberEditor.EVENT_CHANGE)}),this.editor.on(BI.TextEditor.EVENT_ERROR,function(){o.value=BI.parseFloat(this.getLastValidValue())}),this.editor.on(BI.TextEditor.EVENT_VALID,function(){o.value=BI.parseFloat(this.getValue())}),this.editor.on(BI.TextEditor.EVENT_CONFIRM,function(){self.fireEvent(BI.NumberEditor.EVENT_CONFIRM)}),this.topBtn=BI.createWidget({type:"bi.icon_button",forceNotSelected:!0,trigger:"lclick,",cls:"add-up-font top-button bi-border-left bi-list-item-active2 icon-size-12"}),this.topBtn.on(BI.IconButton.EVENT_CHANGE,function(){self._finetuning(o.step),self.fireEvent(BI.NumberEditor.EVENT_CHANGE),self.fireEvent(BI.NumberEditor.EVENT_CONFIRM)}),this.bottomBtn=BI.createWidget({type:"bi.icon_button",trigger:"lclick,",forceNotSelected:!0,cls:"minus-down-font bottom-button bi-border-left bi-list-item-active2 icon-size-12"}),this.bottomBtn.on(BI.IconButton.EVENT_CHANGE,function(){self._finetuning(-o.step),self.fireEvent(BI.NumberEditor.EVENT_CHANGE),self.fireEvent(BI.NumberEditor.EVENT_CONFIRM)}),BI.createWidget({type:"bi.htape",height:o.height-2,element:this,items:[this.editor,{el:{type:"bi.grid",columns:1,rows:2,items:[{column:0,row:0,el:this.topBtn},{column:0,row:1,el:this.bottomBtn}]},width:23}]})},focus:function(){this.editor.focus()},isEditing:function(){return this.editor.isEditing()},_finetuning:function(add){var v=BI.parseFloat(this.getValue());this.setValue(BI.add(v,add))},setUpEnable:function(v){this.topBtn.setEnable(!!v)},setDownEnable:function(v){this.bottomBtn.setEnable(!!v)},getLastValidValue:function(){return this.editor.getLastValidValue()},getLastChangedValue:function(){return this.editor.getLastChangedValue()},getValue:function(){return this.options.value},setValue:function(v){var o=this.options;o.value=v,this.editor.setValue(o.valueFormatter(v))}}),BI.NumberEditor.EVENT_CONFIRM="EVENT_CONFIRM",BI.NumberEditor.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.number_editor",BI.NumberEditor),BI.NumberInterval=BI.inherit(BI.Single,{constants:{typeError:"typeBubble",numberError:"numberBubble",signalError:"signalBubble",editorWidth:114,columns:5,width:24,rows:1,numberErrorCls:"number-error",border:1,less:0,less_equal:1,numTip:"",adjustYOffset:2},_defaultConfig:function(){var conf=BI.NumberInterval.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-number-interval"+(BI.isIE()&&BI.getIEVersion()<10?" hack":""),height:24,validation:"valid",closeMin:!0,allowBlank:!0,watermark:BI.i18nText("BI-Basic_Unrestricted")})},_init:function(){var self=this,c=this.constants,o=this.options;BI.NumberInterval.superclass._init.apply(this,arguments),this.smallEditor=BI.createWidget({type:"bi.number_interval_single_editor",height:o.height-2,watermark:o.watermark,allowBlank:o.allowBlank,value:o.min,level:"warning",tipType:"success",title:function(){return self.smallEditor&&self.smallEditor.getValue()},quitChecker:function(){return!1},validationChecker:function(v){return!!BI.isNumeric(v)||(self.smallEditorBubbleType=c.typeError,!1)},cls:"number-interval-small-editor bi-border"}),this.smallTip=BI.createWidget({type:"bi.label",text:o.numTip,height:o.height-2,invisible:!0}),BI.createWidget({type:"bi.absolute",element:this.smallEditor.element,items:[{el:this.smallTip,top:0,right:5}]}),this.bigEditor=BI.createWidget({type:"bi.number_interval_single_editor",height:o.height-2,watermark:o.watermark,allowBlank:o.allowBlank,value:o.max,level:"warning",tipType:"success",title:function(){return self.bigEditor&&self.bigEditor.getValue()},quitChecker:function(){return!1},validationChecker:function(v){return!!BI.isNumeric(v)||(self.bigEditorBubbleType=c.typeError,!1)},cls:"number-interval-big-editor bi-border"}),this.bigTip=BI.createWidget({type:"bi.label",text:o.numTip,height:o.height-2,invisible:!0}),BI.createWidget({type:"bi.absolute",element:this.bigEditor.element,items:[{el:this.bigTip,top:0,right:5}]}),this.smallCombo=BI.createWidget({type:"bi.icon_combo",cls:"number-interval-small-combo bi-border-top bi-border-bottom bi-border-right",height:o.height-2,items:[{text:"("+BI.i18nText("BI-Less_Than")+")",iconCls:"less-font",value:0},{text:"("+BI.i18nText("BI-Less_And_Equal")+")",value:1,iconCls:"less-equal-font"}]}),o.closeMin===!0?this.smallCombo.setValue(1):this.smallCombo.setValue(0),this.bigCombo=BI.createWidget({type:"bi.icon_combo",cls:"number-interval-big-combo bi-border-top bi-border-bottom bi-border-left",height:o.height-2,items:[{text:"("+BI.i18nText("BI-Less_Than")+")",iconCls:"less-font",value:0},{text:"("+BI.i18nText("BI-Less_And_Equal")+")",value:1,iconCls:"less-equal-font"}]}),o.closeMax===!0?this.bigCombo.setValue(1):this.bigCombo.setValue(0),this.label=BI.createWidget({type:"bi.label",text:BI.i18nText("BI-Basic_Value"),textHeight:o.height-2*c.border,width:c.width-2*c.border,height:o.height-2*c.border,level:"warning",tipType:"warning"}),this.left=BI.createWidget({type:"bi.htape",items:[{el:self.smallEditor},{el:self.smallCombo,width:c.width-c.border}]}),this.right=BI.createWidget({type:"bi.htape",items:[{el:self.bigCombo,width:c.width-c.border},{el:self.bigEditor,lgap:1}]}),BI.createWidget({element:self,type:"bi.center",hgap:15,height:o.height,items:[{type:"bi.absolute",items:[{el:self.left,left:-15,right:0,top:0,bottom:0}]},{type:"bi.absolute",items:[{el:self.right,left:0,right:-15,top:0,bottom:0}]}]}),BI.createWidget({element:self,type:"bi.horizontal_auto",items:[self.label]}),self._setValidEvent(self.bigEditor,c.bigEditor),self._setValidEvent(self.smallEditor,c.smallEditor),self._setErrorEvent(self.bigEditor,c.bigEditor),self._setErrorEvent(self.smallEditor,c.smallEditor),self._setBlurEvent(self.bigEditor),self._setBlurEvent(self.smallEditor),self._setFocusEvent(self.bigEditor),self._setFocusEvent(self.smallEditor),self._setComboValueChangedEvent(self.bigCombo),self._setComboValueChangedEvent(self.smallCombo),self._setEditorValueChangedEvent(self.bigEditor),self._setEditorValueChangedEvent(self.smallEditor),self._checkValidation()},_checkValidation:function(){var self=this,c=this.constants,o=this.options;if(self._setTitle(""),BI.Bubbles.hide(c.typeError),BI.Bubbles.hide(c.numberError),BI.Bubbles.hide(c.signalError),!self.smallEditor.isValid()||!self.bigEditor.isValid())return self.element.removeClass("number-error"),o.validation="invalid",c.typeError;if(BI.isEmptyString(self.smallEditor.getValue())||BI.isEmptyString(self.bigEditor.getValue()))return self.element.removeClass("number-error"),o.validation="valid","";var smallValue=parseFloat(self.smallEditor.getValue()),bigValue=parseFloat(self.bigEditor.getValue()),bigComboValue=self.bigCombo.getValue(),smallComboValue=self.smallCombo.getValue();return bigComboValue[0]===c.less_equal&&smallComboValue[0]===c.less_equal?smallValue>bigValue?(self.element.addClass("number-error"),o.validation="invalid",c.numberError):(self.element.removeClass("number-error"),o.validation="valid",""):smallValue>bigValue?(self.element.addClass("number-error"),o.validation="invalid",c.numberError):smallValue===bigValue?(self.element.addClass("number-error"),o.validation="invalid",c.signalError):(self.element.removeClass("number-error"),o.validation="valid","")},_setTitle:function(v){var self=this;self.bigEditor.setTitle(v),self.smallEditor.setTitle(v),self.label.setTitle(v)},_setFocusEvent:function(w){var self=this,c=this.constants;w.on(BI.NumberIntervalSingleEidtor.EVENT_FOCUS,function(){switch(self._setTitle(""),self._checkValidation()){case c.typeError:BI.Bubbles.show(c.typeError,BI.i18nText("BI-Numerical_Interval_Input_Data"),self,{offsetStyle:"left",adjustYOffset:c.adjustYOffset});break;case c.numberError:BI.Bubbles.show(c.numberError,BI.i18nText("BI-Numerical_Interval_Number_Value"),self,{offsetStyle:"left",adjustYOffset:c.adjustYOffset});break;case c.signalError:BI.Bubbles.show(c.signalError,BI.i18nText("BI-Numerical_Interval_Signal_Value"),self,{offsetStyle:"left",adjustYOffset:c.adjustYOffset});break;default:return}})},_setBlurEvent:function(w){var c=this.constants,self=this;w.on(BI.NumberIntervalSingleEidtor.EVENT_BLUR,function(){switch(BI.Bubbles.hide(c.typeError),BI.Bubbles.hide(c.numberError),BI.Bubbles.hide(c.signalError),self._checkValidation()){case c.typeError:self._setTitle(BI.i18nText("BI-Numerical_Interval_Input_Data"));break;case c.numberError:self._setTitle(BI.i18nText("BI-Numerical_Interval_Number_Value"));break;case c.signalError:self._setTitle(BI.i18nText("BI-Numerical_Interval_Signal_Value"));break;default:self._setTitle("")}})},_setErrorEvent:function(w){var c=this.constants,self=this;w.on(BI.NumberIntervalSingleEidtor.EVENT_ERROR,function(){self._checkValidation(),BI.Bubbles.show(c.typeError,BI.i18nText("BI-Numerical_Interval_Input_Data"),self,{offsetStyle:"left",adjustYOffset:c.adjustYOffset}),self.fireEvent(BI.NumberInterval.EVENT_ERROR)})},_setValidEvent:function(w){var self=this,c=this.constants;w.on(BI.NumberIntervalSingleEidtor.EVENT_VALID,function(){switch(self._checkValidation()){case c.numberError:BI.Bubbles.show(c.numberError,BI.i18nText("BI-Numerical_Interval_Number_Value"),self,{offsetStyle:"left",adjustYOffset:c.adjustYOffset}),self.fireEvent(BI.NumberInterval.EVENT_ERROR);break;case c.signalError:BI.Bubbles.show(c.signalError,BI.i18nText("BI-Numerical_Interval_Signal_Value"),self,{offsetStyle:"left",adjustYOffset:c.adjustYOffset}),self.fireEvent(BI.NumberInterval.EVENT_ERROR);break;default:self.fireEvent(BI.NumberInterval.EVENT_VALID)}})},_setEditorValueChangedEvent:function(w){var self=this,c=this.constants;w.on(BI.NumberIntervalSingleEidtor.EVENT_CHANGE,function(){switch(self._checkValidation()){case c.typeError:BI.Bubbles.show(c.typeError,BI.i18nText("BI-Numerical_Interval_Input_Data"),self,{offsetStyle:"left",adjustYOffset:c.adjustYOffset});break;case c.numberError:BI.Bubbles.show(c.numberError,BI.i18nText("BI-Numerical_Interval_Number_Value"),self,{offsetStyle:"left",adjustYOffset:c.adjustYOffset});break;case c.signalError:BI.Bubbles.show(c.signalError,BI.i18nText("BI-Numerical_Interval_Signal_Value"),self,{offsetStyle:"left",adjustYOffset:c.adjustYOffset})}self.fireEvent(BI.NumberInterval.EVENT_CHANGE)}),w.on(BI.NumberIntervalSingleEidtor.EVENT_CONFIRM,function(){self.fireEvent(BI.NumberInterval.EVENT_CONFIRM)})},_setComboValueChangedEvent:function(w){var self=this,c=this.constants;w.on(BI.IconCombo.EVENT_CHANGE,function(){switch(self._checkValidation()){case c.typeError:self._setTitle(BI.i18nText("BI-Numerical_Interval_Input_Data")),self.fireEvent(BI.NumberInterval.EVENT_ERROR);break;case c.numberError:self._setTitle(BI.i18nText("BI-Numerical_Interval_Number_Value")),self.fireEvent(BI.NumberInterval.EVENT_ERROR);break;case c.signalError:self._setTitle(BI.i18nText("BI-Numerical_Interval_Signal_Value")),self.fireEvent(BI.NumberInterval.EVENT_ERROR);break;default:self.fireEvent(BI.NumberInterval.EVENT_CHANGE),self.fireEvent(BI.NumberInterval.EVENT_CONFIRM),self.fireEvent(BI.NumberInterval.EVENT_VALID)}})},isStateValid:function(){return"valid"===this.options.validation},setMinEnable:function(b){this.smallEditor.setEnable(b)},setCloseMinEnable:function(b){this.smallCombo.setEnable(b)},setMaxEnable:function(b){this.bigEditor.setEnable(b)},setCloseMaxEnable:function(b){this.bigCombo.setEnable(b)},showNumTip:function(){this.smallTip.setVisible(!0),this.bigTip.setVisible(!0)},hideNumTip:function(){this.smallTip.setVisible(!1),this.bigTip.setVisible(!1)},setNumTip:function(numTip){this.smallTip.setText(numTip),this.bigTip.setText(numTip)},getNumTip:function(){return this.smallTip.getText()},setValue:function(data){data=data||{};var self=this,combo_value;(BI.isNumeric(data.min)||BI.isEmptyString(data.min))&&self.smallEditor.setValue(data.min),BI.isNotNull(data.min)||self.smallEditor.setValue(""),(BI.isNumeric(data.max)||BI.isEmptyString(data.max))&&self.bigEditor.setValue(data.max),BI.isNotNull(data.max)||self.bigEditor.setValue(""),BI.isNull(data.closeMin)||(combo_value=data.closeMin===!0?1:0,self.smallCombo.setValue(combo_value)),BI.isNull(data.closeMax)||(combo_value=data.closeMax===!0?1:0,self.bigCombo.setValue(combo_value)),this._checkValidation()},getValue:function(){var self=this,value={},minComboValue=self.smallCombo.getValue(),maxComboValue=self.bigCombo.getValue();return value.min=self.smallEditor.getValue(),value.max=self.bigEditor.getValue(),0===minComboValue[0]?value.closeMin=!1:value.closeMin=!0,0===maxComboValue[0]?value.closeMax=!1:value.closeMax=!0,value},destroyed:function(){var c=this.constants;BI.Bubbles.remove(c.typeError),BI.Bubbles.remove(c.numberError),BI.Bubbles.remove(c.signalError)}}),BI.NumberInterval.EVENT_CHANGE="EVENT_CHANGE",BI.NumberInterval.EVENT_CONFIRM="EVENT_CONFIRM",BI.NumberInterval.EVENT_VALID="EVENT_VALID",BI.NumberInterval.EVENT_ERROR="EVENT_ERROR",BI.shortcut("bi.number_interval",BI.NumberInterval),BI.NumberIntervalSingleEidtor=BI.inherit(BI.Single,{props:{baseCls:"bi-number-interval-single-editor",tipType:"success",title:""},render:function(){var self=this,o=this.options;return{type:"bi.vertical",items:[{type:"bi.editor",ref:function(_ref){self.editor=_ref},height:o.height-2,watermark:o.watermark,allowBlank:o.allowBlank,value:o.value,level:o.level,quitChecker:o.quitChecker,validationChecker:o.validationChecker,listeners:[{eventName:BI.Editor.EVENT_ERROR,action:function(){self.fireEvent(BI.NumberIntervalSingleEidtor.EVENT_ERROR,arguments)}},{eventName:BI.Editor.EVENT_FOCUS,action:function(){self.fireEvent(BI.NumberIntervalSingleEidtor.EVENT_FOCUS,arguments)}},{eventName:BI.Editor.EVENT_BLUR,action:function(){self.fireEvent(BI.NumberIntervalSingleEidtor.EVENT_BLUR,arguments)}},{eventName:BI.Editor.EVENT_VALID,action:function(){self.fireEvent(BI.NumberIntervalSingleEidtor.EVENT_VALID,arguments)}},{eventName:BI.Editor.EVENT_CHANGE,action:function(){self.fireEvent(BI.NumberIntervalSingleEidtor.EVENT_CHANGE,arguments)}},{eventName:BI.Editor.EVENT_CONFIRM,action:function(){self.fireEvent(BI.NumberIntervalSingleEidtor.EVENT_CONFIRM,arguments)}},{eventName:BI.Editor.EVENT_CHANGE_CONFIRM,action:function(){self.fireEvent(BI.NumberIntervalSingleEidtor.EVENT_CHANGE_CONFIRM,arguments)}}]}]}},isValid:function(){return this.editor.isValid()},getValue:function(){return this.editor.getValue()},setTitle:function(v){return this.editor.setTitle(v)},setValue:function(v){return this.editor.setValue(v)}}),BI.NumberIntervalSingleEidtor.EVENT_FOCUS="EVENT_FOCUS",BI.NumberIntervalSingleEidtor.EVENT_BLUR="EVENT_BLUR",BI.NumberIntervalSingleEidtor.EVENT_ERROR="EVENT_ERROR",BI.NumberIntervalSingleEidtor.EVENT_VALID="EVENT_VALID",BI.NumberIntervalSingleEidtor.EVENT_CHANGE="EVENT_CHANGE",BI.NumberIntervalSingleEidtor.EVENT_CHANGE_CONFIRM="EVENT_CHANGE_CONFIRM",BI.NumberIntervalSingleEidtor.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.number_interval_single_editor",BI.NumberIntervalSingleEidtor),BI.SearchMultiTextValueCombo=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.SearchMultiTextValueCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-combo bi-search-multi-text-value-combo",height:24,items:[]})},_init:function(){BI.SearchMultiTextValueCombo.superclass._init.apply(this,arguments);var self=this,o=this.options,assertShowValue=function(){BI.isKey(self._startValue)&&(self.storeValue.type===BI.Selection.All?BI.remove(self.storeValue.value,self._startValue):BI.pushDistinct(self.storeValue.value,self._startValue)),self._updateAllValue(),self._checkError(),self.trigger.getSearcher().setState(self.storeValue),self.trigger.getCounter().setButtonChecked(self.storeValue)};this.storeValue=BI.deepClone(o.value||{}),this._updateAllValue(),this._assertValue(this.storeValue),this._checkError(),this.requesting=!1,this.trigger=BI.createWidget({type:"bi.search_multi_select_trigger",text:o.text,height:o.height,masker:{offset:{left:0,top:0,right:0,bottom:25}},allValueGetter:function(){return self.allValue},valueFormatter:o.valueFormatter,itemsCreator:function(op,callback){self._itemsCreator(op,function(res){1===op.times&&BI.isNotNull(op.keywords)&&self.trigger.setValue(BI.deepClone(self.getValue())),callback.apply(self,arguments)})},value:this.storeValue,warningTitle:o.warningTitle}),this.trigger.on(BI.MultiSelectTrigger.EVENT_START,function(){ +self._setStartValue(""),this.getSearcher().setValue(self.storeValue)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP,function(){self._setStartValue("")}),this.trigger.on(BI.MultiSelectTrigger.EVENT_PAUSE,function(){if(this.getSearcher().hasMatched()){var keyword=this.getSearcher().getKeyword();self._join({type:BI.Selection.Multi,value:[keyword]},function(){self.combo.setValue(self.storeValue),self._setStartValue(keyword),assertShowValue(),self._populate(),self._setStartValue("")})}}),this.trigger.on(BI.MultiSelectTrigger.EVENT_SEARCHING,function(keywords){var last=BI.last(keywords);keywords=BI.initial(keywords||[]),keywords.length>0&&self._joinKeywords(keywords,function(){BI.isEndWithBlank(last)?(self.combo.setValue(self.storeValue),assertShowValue(),self.combo.populate(),self._setStartValue("")):(self.combo.setValue(self.storeValue),assertShowValue())})}),this.trigger.on(BI.MultiSelectTrigger.EVENT_CHANGE,function(value,obj){obj instanceof BI.MultiSelectBar?self._joinAll(this.getValue(),function(){assertShowValue()}):self._join(this.getValue(),function(){assertShowValue()})}),this.trigger.on(BI.MultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW,function(){this.getCounter().setValue(self.storeValue)}),this.trigger.on(BI.MultiSelectTrigger.EVENT_COUNTER_CLICK,function(){self.combo.isViewVisible()||self.combo.showView()}),this.combo=BI.createWidget({type:"bi.combo",toggle:!1,container:o.container,el:this.trigger,adjustLength:1,popup:{type:"bi.search_multi_select_popup_view",ref:function(){self.popup=this,self.trigger.setAdapter(this)},listeners:[{eventName:BI.MultiSelectPopupView.EVENT_CHANGE,action:function(){self.storeValue=this.getValue(),self._adjust(function(){assertShowValue()})}},{eventName:BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM,action:function(){self._defaultState()}},{eventName:BI.MultiSelectPopupView.EVENT_CLICK_CLEAR,action:function(){self.setValue(),self._defaultState()}}],itemsCreator:BI.bind(self._itemsCreator,this),valueFormatter:o.valueFormatter,onLoaded:function(){BI.nextTick(function(){self.combo.adjustWidth(),self.combo.adjustHeight(),self.trigger.getCounter().adjustView(),self.trigger.getSearcher().adjustView()})}},value:o.value,hideChecker:function(e){return 0===triggerBtn.element.find(e.target).length}}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){this.setValue(self.storeValue),BI.nextTick(function(){self._populate()})}),this.wants2Quit=!1,this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW,function(){self.trigger.stopEditing(),self.requesting===!0?self.wants2Quit=!0:(assertShowValue(),self.fireEvent(BI.SearchMultiTextValueCombo.EVENT_CONFIRM))});var triggerBtn=BI.createWidget({type:"bi.trigger_icon_button",width:o.height,height:o.height,cls:"multi-select-trigger-icon-button"});triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE,function(){self.trigger.getCounter().hideView(),self.combo.isViewVisible()?self.combo.hideView():self.combo.showView()}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.combo,left:0,right:0,top:0,bottom:0},{el:triggerBtn,right:0,top:0,bottom:0}]}),this._checkError()},_defaultState:function(){this.trigger.stopEditing(),this.combo.hideView()},_assertValue:function(val){var o=this.options;val||(val={}),val.type||(val.type=BI.Selection.Multi),val.value||(val.value=[]),BI.remove(val.value,function(idx,value){return!BI.contains(BI.map(o.items,"value"),value)})},_makeMap:function(values){return BI.makeObject(values||[])},_joinKeywords:function(keywords,callback){function digest(items){var selectedMap=self._makeMap(items);BI.each(keywords,function(i,val){BI.isNotNull(selectedMap[val])&&(self.storeValue.type===BI.Selection.Multi?BI.pushDistinct(self.storeValue.value,val):BI.remove(self.storeValue.value,val))}),self._adjust(callback)}var self=this,o=this.options;this._assertValue(this.storeValue),this.requesting=!0,this._itemsCreator({type:BI.SearchMultiTextValueCombo.REQ_GET_ALL_DATA,keywords:keywords},function(ob){var values=BI.map(ob.items,"value");digest(values)})},_joinAll:function(res,callback){var self=this,o=this.options;this._assertValue(res),this.requesting=!0,this._itemsCreator({type:BI.SearchMultiTextValueCombo.REQ_GET_ALL_DATA,keywords:[this.trigger.getKey()]},function(ob){var items=BI.map(ob.items,"value");if(self.storeValue.type===res.type){var change=!1,map=self._makeMap(self.storeValue.value);return BI.each(items,function(i,v){BI.isNotNull(map[v])&&(change=!0,self.storeValue.assist&&self.storeValue.assist.push(map[v]),delete map[v])}),change&&(self.storeValue.value=BI.values(map)),void self._adjust(callback)}var selectedMap=self._makeMap(self.storeValue.value),notSelectedMap=self._makeMap(res.value),newItems=[];BI.each(items,function(i,item){BI.isNotNull(selectedMap[items[i]])&&(self.storeValue.assist&&self.storeValue.assist.push(selectedMap[items[i]]),delete selectedMap[items[i]]),BI.isNull(notSelectedMap[items[i]])&&(BI.remove(self.storeValue.assist,item),newItems.push(item))}),self.storeValue.value=newItems.concat(BI.values(selectedMap)),self._adjust(callback)})},_adjust:function(callback){function adjust(){self.storeValue.type===BI.Selection.All&&self.storeValue.value.length>=self._count?self.storeValue={type:BI.Selection.Multi,value:[]}:self.storeValue.type===BI.Selection.Multi&&self.storeValue.value.length>=self._count&&(self.storeValue={type:BI.Selection.All,value:[]}),self._updateAllValue(),self._checkError(),self.wants2Quit===!0&&(self.fireEvent(BI.SearchMultiTextValueCombo.EVENT_CONFIRM),self.wants2Quit=!1),self.requesting=!1}var self=this,o=this.options;this._count?(adjust(),callback()):this._itemsCreator({type:BI.SearchMultiTextValueCombo.REQ_GET_DATA_LENGTH},function(res){self._count=res.count,adjust(),callback()})},_join:function(res,callback){var self=this,o=this.options;if(this._assertValue(res),this._assertValue(this.storeValue),this.storeValue.type===res.type){var map=this._makeMap(this.storeValue.value);BI.each(res.value,function(i,v){map[v]||(self.storeValue.value.push(v),BI.remove(self.storeValue.assist,v),map[v]=v)});var change=!1;return BI.each(res.assist,function(i,v){BI.isNotNull(map[v])&&(change=!0,self.storeValue.assist&&self.storeValue.assist.push(map[v]),delete map[v])}),change&&(this.storeValue.value=BI.values(map)),void self._adjust(callback)}this._joinAll(res,callback)},_setStartValue:function(value){this._startValue=value,this.popup.setStartValue(value)},_getItemsByTimes:function(items,times){for(var res=[],i=100*(times-1);items[i]&&i<100*times;i++)res.push(items[i]);return res},_hasNextByTimes:function(items,times){return 100*times0&&self.numberCounter.hideView()})},getCounter:function(){return this.numberCounter},getSearcher:function(){return this.searcher},stopEditing:function(){this.searcher.stopSearch(),this.numberCounter.hideView()},setAdapter:function(adapter){this.searcher.setAdapter(adapter),this.numberCounter.setAdapter(adapter)},setValue:function(ob){this.searcher.setValue(ob),this.numberCounter.setValue(ob)},setTipType:function(v){this.searcher.setTipType(v)},getKey:function(){return this.searcher.getKey()},getValue:function(){return this.searcher.getValue()}}),BI.SearchMultiSelectTrigger.EVENT_TRIGGER_CLICK="EVENT_TRIGGER_CLICK",BI.SearchMultiSelectTrigger.EVENT_COUNTER_CLICK="EVENT_COUNTER_CLICK",BI.SearchMultiSelectTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.SearchMultiSelectTrigger.EVENT_START="EVENT_START",BI.SearchMultiSelectTrigger.EVENT_STOP="EVENT_STOP",BI.SearchMultiSelectTrigger.EVENT_PAUSE="EVENT_PAUSE",BI.SearchMultiSelectTrigger.EVENT_SEARCHING="EVENT_SEARCHING",BI.SearchMultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW="EVENT_BEFORE_COUNTER_POPUPVIEW",BI.shortcut("bi.search_multi_select_trigger",BI.SearchMultiSelectTrigger),BI.SearchMultiSelectLoader=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SearchMultiSelectLoader.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-loader",logic:{dynamic:!0},el:{height:400},valueFormatter:BI.emptyFn,itemsCreator:BI.emptyFn,onLoaded:BI.emptyFn})},_init:function(){BI.SearchMultiSelectLoader.superclass._init.apply(this,arguments);var self=this,opts=this.options,hasNext=!1;this.storeValue=opts.value||{},this._assertValue(this.storeValue),this.button_group=BI.createWidget({type:"bi.select_list",element:this,logic:opts.logic,el:BI.extend({onLoaded:opts.onLoaded,el:{type:"bi.loader",isDefaultInit:!1,logic:{dynamic:!0,scrolly:!0},el:{chooseType:BI.ButtonGroup.CHOOSE_TYPE_MULTI,behaviors:{redmark:function(){return!0}},layouts:[{type:"bi.vertical"}]}}},opts.el),itemsCreator:function(op,callback){var startValue=self._startValue;self.storeValue&&(op=BI.extend(op||{},{selectedValues:BI.isKey(startValue)&&self.storeValue.type===BI.Selection.Multi?self.storeValue.value.concat(startValue):self.storeValue.value})),opts.itemsCreator(op,function(ob){hasNext=ob.hasNext;var firstItems=[];if(1===op.times&&self.storeValue){var json=BI.map(self.storeValue.value,function(i,v){var txt=opts.valueFormatter(v)||v;return{text:txt,value:v,title:txt,selected:self.storeValue.type===BI.Selection.Multi}});if(BI.isKey(self._startValue)&&!BI.contains(self.storeValue.value,self._startValue)){var txt=opts.valueFormatter(startValue)||startValue;json.unshift({text:txt,value:startValue,title:txt,selected:!0})}firstItems=self._createItems(json)}callback(firstItems.concat(self._createItems(ob.items)),ob.keyword||""),1===op.times&&self.storeValue&&(BI.isKey(startValue)&&(self.storeValue.type===BI.Selection.All?BI.remove(self.storeValue.value,startValue):BI.pushDistinct(self.storeValue.value,startValue)),self.setValue(self.storeValue)),1===op.times&&self._scrollToTop()})},hasNext:function(){return hasNext},value:this.storeValue}),this.button_group.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.button_group.on(BI.SelectList.EVENT_CHANGE,function(){self.fireEvent(BI.SearchMultiSelectLoader.EVENT_CHANGE,arguments)})},_createItems:function(items){return BI.createItems(items,{type:"bi.multi_select_item",logic:this.options.logic,cls:"bi-list-item-active",height:24,selected:this.isAllSelected(),iconWrapperWidth:36})},_scrollToTop:function(){var self=this;BI.delay(function(){self.button_group.element.scrollTop(0)},30)},isAllSelected:function(){return this.button_group.isAllSelected()},_assertValue:function(val){val||(val={}),val.type||(val.type=BI.Selection.Multi),val.value||(val.value=[])},setStartValue:function(v){this._startValue=v},setValue:function(v){this.storeValue=v||{},this._assertValue(this.storeValue),this.button_group.setValue(this.storeValue)},getValue:function(){return this.button_group.getValue()},getAllButtons:function(){return this.button_group.getAllButtons()},empty:function(){this.button_group.empty()},populate:function(items){arguments[0]=this._createItems(items),this.button_group.populate.apply(this.button_group,arguments)},resetHeight:function(h){this.button_group.resetHeight(h)},resetWidth:function(w){this.button_group.resetWidth(w)}}),BI.SearchMultiSelectLoader.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.search_multi_select_loader",BI.SearchMultiSelectLoader),BI.SearchMultiSelectPopupView=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SearchMultiSelectPopupView.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-popup-view",maxWidth:"auto",minWidth:135,maxHeight:400,valueFormatter:BI.emptyFn,itemsCreator:BI.emptyFn,onLoaded:BI.emptyFn})},_init:function(){BI.SearchMultiSelectPopupView.superclass._init.apply(this,arguments);var self=this,opts=this.options;this.loader=BI.createWidget({type:"bi.search_multi_select_loader",itemsCreator:opts.itemsCreator,valueFormatter:opts.valueFormatter,onLoaded:opts.onLoaded,value:opts.value}),this.popupView=BI.createWidget({type:"bi.multi_popup_view",stopPropagation:!1,maxWidth:opts.maxWidth,minWidth:opts.minWidth,maxHeight:opts.maxHeight,element:this,buttons:[BI.i18nText("BI-Basic_Clears"),BI.i18nText("BI-Basic_Sure")],el:this.loader,value:opts.value}),this.popupView.on(BI.MultiPopupView.EVENT_CHANGE,function(){self.fireEvent(BI.SearchMultiSelectPopupView.EVENT_CHANGE)}),this.popupView.on(BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON,function(index){switch(index){case 0:self.fireEvent(BI.SearchMultiSelectPopupView.EVENT_CLICK_CLEAR);break;case 1:self.fireEvent(BI.SearchMultiSelectPopupView.EVENT_CLICK_CONFIRM)}})},isAllSelected:function(){return this.loader.isAllSelected()},setStartValue:function(v){this.loader.setStartValue(v)},setValue:function(v){this.popupView.setValue(v)},getValue:function(){return this.popupView.getValue()},populate:function(items){this.popupView.populate.apply(this.popupView,arguments)},resetHeight:function(h){this.popupView.resetHeight(h)},resetWidth:function(w){this.popupView.resetWidth(w)}}),BI.SearchMultiSelectPopupView.EVENT_CHANGE="EVENT_CHANGE",BI.SearchMultiSelectPopupView.EVENT_CLICK_CONFIRM="EVENT_CLICK_CONFIRM",BI.SearchMultiSelectPopupView.EVENT_CLICK_CLEAR="EVENT_CLICK_CLEAR",BI.shortcut("bi.search_multi_select_popup_view",BI.SearchMultiSelectPopupView),BI.SearchMultiSelectSearcher=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SearchMultiSelectSearcher.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-searcher",itemsCreator:BI.emptyFn,el:{},popup:{},valueFormatter:BI.emptyFn,adapter:null,masker:{}})},_init:function(){BI.SearchMultiSelectSearcher.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget(o.el,{type:"bi.multi_select_editor",height:o.height,text:o.text,tipType:o.tipType,warningTitle:o.warningTitle}),this.searcher=BI.createWidget({type:"bi.searcher",element:this,height:o.height,isAutoSearch:!1,isAutoSync:!1,onSearch:function(op,callback){callback()},el:this.editor,popup:BI.extend({type:"bi.multi_select_search_pane",valueFormatter:o.valueFormatter,keywordGetter:function(){return self.editor.getValue()},itemsCreator:function(op,callback){var keyword=self.editor.getValue();op.keywords=[keyword],this.setKeyword(keyword),o.itemsCreator(op,callback)},value:o.value},o.popup),adapter:o.adapter,masker:o.masker}),this.searcher.on(BI.Searcher.EVENT_START,function(){self.fireEvent(BI.SearchMultiSelectSearcher.EVENT_START)}),this.searcher.on(BI.Searcher.EVENT_PAUSE,function(){this.hasMatched(),self.fireEvent(BI.SearchMultiSelectSearcher.EVENT_PAUSE)}),this.searcher.on(BI.Searcher.EVENT_STOP,function(){self.fireEvent(BI.SearchMultiSelectSearcher.EVENT_STOP)}),this.searcher.on(BI.Searcher.EVENT_CHANGE,function(){self.fireEvent(BI.SearchMultiSelectSearcher.EVENT_CHANGE,arguments)}),this.searcher.on(BI.Searcher.EVENT_SEARCHING,function(){var keywords=this.getKeywords();self.fireEvent(BI.SearchMultiSelectSearcher.EVENT_SEARCHING,keywords)}),BI.isNotNull(o.value)&&this.setState(o.value)},adjustView:function(){this.searcher.adjustView()},isSearching:function(){return this.searcher.isSearching()},stopSearch:function(){this.searcher.stopSearch()},getKeyword:function(){return this.editor.getValue()},hasMatched:function(){return this.searcher.hasMatched()},hasChecked:function(){return this.searcher.getView()&&this.searcher.getView().hasChecked()},setAdapter:function(adapter){this.searcher.setAdapter(adapter)},setState:function(obj){var o=this.options,ob={};if(ob.type=obj.type,ob.value=o.allValueGetter()||[],ob.assist=obj.assist,ob.type===BI.Selection.All)if(0===ob.value.length)this.editor.setState(BI.Selection.All);else if(BI.size(ob.assist)<=20){var state="";BI.each(ob.assist,function(i,v){state+=0===i?""+(o.valueFormatter(v+"")||v):","+(o.valueFormatter(v+"")||v)}),this.editor.setState(state)}else this.editor.setState(BI.Selection.Multi);else if(0===ob.value.length)this.editor.setState(BI.Selection.None);else if(BI.size(ob.value)<=20){var state="";BI.each(ob.value,function(i,v){state+=0===i?""+(o.valueFormatter(v+"")||v):","+(o.valueFormatter(v+"")||v)}),this.editor.setState(state)}else this.editor.setState(BI.Selection.Multi)},setTipType:function(v){this.editor.setTipType(v)},setValue:function(ob){this.setState(ob),this.searcher.setValue(ob)},getKey:function(){return this.editor.getValue()},getValue:function(){return this.searcher.getValue()},populate:function(items){this.searcher.populate.apply(this.searcher,arguments)}}),BI.SearchMultiSelectSearcher.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.SearchMultiSelectSearcher.EVENT_CHANGE="EVENT_CHANGE",BI.SearchMultiSelectSearcher.EVENT_START="EVENT_START",BI.SearchMultiSelectSearcher.EVENT_STOP="EVENT_STOP",BI.SearchMultiSelectSearcher.EVENT_PAUSE="EVENT_PAUSE",BI.SearchMultiSelectSearcher.EVENT_SEARCHING="EVENT_SEARCHING",BI.shortcut("bi.search_multi_select_searcher",BI.SearchMultiSelectSearcher),BI.SelectTreeFirstPlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.SelectTreeFirstPlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-select-tree-first-plus-group-node bi-list-item-active",logic:{dynamic:!1},id:"",pId:"",readonly:!0,open:!1,height:24})},_init:function(){BI.SelectTreeFirstPlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.first_tree_node_checkbox",stopPropagation:!0}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,keyword:o.keyword,py:o.py}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&(this.isSelected()?self.triggerExpand():self.triggerCollapse())});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,{width:24,el:this.checkbox},this.text);BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items}))))},isOnce:function(){return!0},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.NodeButton.superclass.doClick.apply(this,arguments)},setOpened:function(v){BI.SelectTreeFirstPlusGroupNode.superclass.setOpened.apply(this,arguments),BI.isNotNull(this.checkbox)&&this.checkbox.setSelected(v)}}),BI.shortcut("bi.select_tree_first_plus_group_node",BI.SelectTreeFirstPlusGroupNode),BI.SelectTreeLastPlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.SelectTreeLastPlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-select-tree-last-plus-group-node bi-list-item-active",logic:{dynamic:!1},id:"",pId:"",readonly:!0,open:!1,height:24})},_init:function(){BI.SelectTreeLastPlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.last_tree_node_checkbox",stopPropagation:!0}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,keyword:o.keyword,py:o.py}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&(this.isSelected()?self.triggerExpand():self.triggerCollapse())});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,{width:24,el:this.checkbox},this.text);BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items}))))},isOnce:function(){return!0},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.NodeButton.superclass.doClick.apply(this,arguments)},setOpened:function(v){BI.SelectTreeLastPlusGroupNode.superclass.setOpened.apply(this,arguments),BI.isNotNull(this.checkbox)&&this.checkbox.setSelected(v)}}),BI.shortcut("bi.select_tree_last_plus_group_node",BI.SelectTreeLastPlusGroupNode),BI.SelectTreeMidPlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.SelectTreeMidPlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-select-tree-mid-plus-group-node bi-list-item-active",logic:{dynamic:!1},id:"",pId:"",readonly:!0,open:!1,height:24})},_init:function(){BI.SelectTreeMidPlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.mid_tree_node_checkbox",stopPropagation:!0}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,keyword:o.keyword,py:o.py}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&(this.isSelected()?self.triggerExpand():self.triggerCollapse())});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,{width:24,el:this.checkbox},this.text);BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items}))))},isOnce:function(){return!0},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.NodeButton.superclass.doClick.apply(this,arguments)},setOpened:function(v){BI.SelectTreeMidPlusGroupNode.superclass.setOpened.apply(this,arguments),BI.isNotNull(this.checkbox)&&this.checkbox.setSelected(v)}}),BI.shortcut("bi.select_tree_mid_plus_group_node",BI.SelectTreeMidPlusGroupNode),BI.SelectTreePlusGroupNode=BI.inherit(BI.NodeButton,{_defaultConfig:function(){var conf=BI.SelectTreePlusGroupNode.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-select-tree-plus-group-node bi-list-item-active",logic:{dynamic:!1},id:"",pId:"",readonly:!0,open:!1,height:24})},_init:function(){BI.SelectTreePlusGroupNode.superclass._init.apply(this,arguments);var self=this,o=this.options;this.checkbox=BI.createWidget({type:"bi.tree_node_checkbox",stopPropagation:!0}),this.text=BI.createWidget({type:"bi.label",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,value:o.value,keyword:o.keyword,py:o.py}),this.checkbox.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&(this.isSelected()?self.triggerExpand():self.triggerCollapse())});var type=BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left),items=BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left,{width:24,el:this.checkbox},this.text);BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(type,BI.extend(o.logic,{items:items}))))},isOnce:function(){return!0},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.NodeButton.superclass.doClick.apply(this,arguments)},setOpened:function(v){BI.SelectTreePlusGroupNode.superclass.setOpened.apply(this,arguments),BI.isNotNull(this.checkbox)&&this.checkbox.setSelected(v)}}),BI.shortcut("bi.select_tree_plus_group_node",BI.SelectTreePlusGroupNode),BI.SelectTreeCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SelectTreeCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-select-tree-combo",height:24,text:"",items:[],value:"",attributes:{tabIndex:0}})},_init:function(){BI.SelectTreeCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.trigger=BI.createWidget({type:"bi.single_tree_trigger",text:o.text,height:o.height,items:o.items,value:o.value}),this.popup=BI.createWidget({type:"bi.select_level_tree",items:o.items,value:o.value}),this.combo=BI.createWidget({type:"bi.combo",container:o.container,element:this,adjustLength:2,el:this.trigger,popup:{el:this.popup}}),this.combo.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.popup.on(BI.SingleTreePopup.EVENT_CHANGE,function(){self.setValue(self.popup.getValue()),self.combo.hideView()})},setValue:function(v){v=BI.isArray(v)?v:[v],this.trigger.setValue(v),this.popup.setValue(v)},getValue:function(){return this.popup.getValue()},populate:function(items){this.combo.populate(items)}}),BI.shortcut("bi.select_tree_combo",BI.SelectTreeCombo),BI.SelectTreeExpander=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SelectTreeExpander.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-select-tree-expander",trigger:"",toggle:!0,direction:"bottom",isDefaultInit:!0,el:{},popup:{}})},_init:function(){BI.SelectTreeExpander.superclass._init.apply(this,arguments);var self=this,o=this.options;this.trigger=BI.createWidget(o.el),this.trigger.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&this.isSelected()&&self.expander.setValue([]),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.expander=BI.createWidget({type:"bi.expander",element:this,trigger:o.trigger,toggle:o.toggle,direction:o.direction,isDefaultInit:o.isDefaultInit,el:this.trigger,popup:o.popup}),this.expander.on(BI.Controller.EVENT_CHANGE,function(type){type===BI.Events.CLICK&&self.trigger.setSelected(!1),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)})},getAllLeaves:function(){return this.expander.getAllLeaves()},setValue:function(v){BI.contains(v,this.trigger.getValue())?(this.trigger.setSelected(!0),this.expander.setValue([])):(this.trigger.setSelected(!1),this.expander.setValue(v))},getValue:function(){return this.trigger.isSelected()?[this.trigger.getValue()]:this.expander.getValue()},populate:function(items){this.expander.populate(items)}}),BI.shortcut("bi.select_tree_expander",BI.SelectTreeExpander),BI.SelectTreePopup=BI.inherit(BI.Pane,{_defaultConfig:function(){return BI.extend(BI.SelectTreePopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-select-level-tree",tipText:BI.i18nText("BI-No_Selected_Item"),items:[],value:""})},_formatItems:function(nodes,layer,pNode){var self=this;return BI.each(nodes,function(i,node){var extend={layer:layer};node.id=node.id||BI.UUID(),extend.pNode=pNode,node.isParent===!0||node.parent===!0||BI.isNotEmptyArray(node.children)?(extend.type="bi.select_tree_mid_plus_group_node",i===nodes.length-1&&(extend.type="bi.select_tree_last_plus_group_node",extend.isLastNode=!0),0!==i||pNode||(extend.type="bi.select_tree_first_plus_group_node"),0===i&&i===nodes.length-1&&(extend.type="bi.select_tree_plus_group_node"),BI.defaults(node,extend),self._formatItems(node.children,layer+1,node)):(extend.type="bi.mid_tree_leaf_item",0!==i||pNode||(extend.type="bi.first_tree_leaf_item"),i===nodes.length-1&&(extend.type="bi.last_tree_leaf_item"),BI.defaults(node,extend))}),nodes},_init:function(){BI.SelectTreePopup.superclass._init.apply(this,arguments);var self=this,o=this.options;this.tree=BI.createWidget({type:"bi.level_tree",expander:{type:"bi.select_tree_expander",isDefaultInit:!0},items:this._formatItems(BI.Tree.transformToTreeFormat(o.items),0),value:o.value,chooseType:BI.Selection.Single}),BI.createWidget({type:"bi.vertical",element:this,vgap:5,items:[this.tree]}),this.tree.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.tree.on(BI.LevelTree.EVENT_CHANGE,function(){self.fireEvent(BI.SelectTreePopup.EVENT_CHANGE); +}),this.check()},getValue:function(){return this.tree.getValue()},setValue:function(v){v=BI.isArray(v)?v:[v],this.tree.setValue(v)},populate:function(items){BI.SelectTreePopup.superclass.populate.apply(this,arguments),this.tree.populate(this._formatItems(BI.Tree.transformToTreeFormat(items)))}}),BI.SelectTreePopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.select_level_tree",BI.SelectTreePopup),BI.SingleSelectSearchLoader=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SingleSelectSearchLoader.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-select-search-loader",allowNoSelect:!1,itemsCreator:BI.emptyFn,keywordGetter:BI.emptyFn,valueFormatter:BI.emptyFn})},_init:function(){BI.SingleSelectSearchLoader.superclass._init.apply(this,arguments);var self=this,opts=this.options,hasNext=!1;this.button_group=BI.createWidget({type:"bi.single_select_list",allowNoSelect:opts.allowNoSelect,element:this,logic:{dynamic:!1},value:opts.value,el:{tipText:BI.i18nText("BI-No_Select"),el:{type:"bi.loader",isDefaultInit:!1,logic:{dynamic:!0,scrolly:!0},el:{chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,behaviors:{redmark:function(){return!0}},layouts:[{type:"bi.vertical"}]}}},itemsCreator:function(op,callback){self.storeValue&&(op=BI.extend(op||{},{selectedValues:[self.storeValue]})),opts.itemsCreator(op,function(ob){var keyword=ob.keyword=opts.keywordGetter();hasNext=ob.hasNext;var firstItems=[];if(1===op.times&&BI.isNotNull(self.storeValue)){var json=self._filterValues(self.storeValue);firstItems=self._createItems(json)}callback(firstItems.concat(self._createItems(ob.items)),keyword||""),1===op.times&&self.storeValue&&self.setValue(self.storeValue)})},hasNext:function(){return hasNext}}),this.button_group.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.button_group.on(BI.SingleSelectList.EVENT_CHANGE,function(){self.fireEvent(BI.SingleSelectSearchLoader.EVENT_CHANGE,arguments)})},_createItems:function(items){return BI.createItems(items,{type:this.options.allowNoSelect?"bi.single_select_item":"bi.single_select_combo_item",cls:"bi-list-item-active",logic:{dynamic:!1},height:25,selected:!1})},_filterValues:function(src){var o=this.options,keyword=o.keywordGetter(),values=src||[],newValues=BI.map(BI.isArray(values)?values:[values],function(i,v){return{text:o.valueFormatter(v)||v,value:v}});if(BI.isKey(keyword)){var search=BI.Func.getSearchResult(newValues,keyword);values=search.match.concat(search.find)}return BI.map(values,function(i,v){return{text:v.text,title:v.text,value:v.value,selected:!1}})},setValue:function(v){this.storeValue=v,this.button_group.setValue(v)},getValue:function(){return this.button_group.getValue()},getAllButtons:function(){return this.button_group.getAllButtons()},empty:function(){this.button_group.empty()},populate:function(items){this.button_group.populate.apply(this.button_group,arguments)},resetHeight:function(h){this.button_group.resetHeight(h)},resetWidth:function(w){this.button_group.resetWidth(w)}}),BI.SingleSelectSearchLoader.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.single_select_search_loader",BI.SingleSelectSearchLoader),BI.SingleSelectSearchInsertPane=BI.inherit(BI.Widget,{constants:{height:25,lgap:10,tgap:5},_defaultConfig:function(){return BI.extend(BI.SingleSelectSearchInsertPane.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-select-search-pane bi-card",allowNoSelect:!1,itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,keywordGetter:BI.emptyFn})},_init:function(){BI.SingleSelectSearchInsertPane.superclass._init.apply(this,arguments);var self=this,o=this.options;this.tooltipClick=BI.createWidget({type:"bi.label",invisible:!0,text:BI.i18nText("BI-Click_Blank_To_Select"),cls:"multi-select-toolbar",height:this.constants.height}),this.addNotMatchTip=BI.createWidget({type:"bi.text_button",invisible:!0,text:BI.i18nText("BI-Basic_Click_To_Add_Text",""),height:this.constants.height,cls:"bi-high-light",hgap:5,handler:function(){self.fireEvent(BI.SingleSelectSearchInsertPane.EVENT_ADD_ITEM,o.keywordGetter())}}),this.loader=BI.createWidget({type:"bi.single_select_search_loader",allowNoSelect:o.allowNoSelect,keywordGetter:o.keywordGetter,valueFormatter:o.valueFormatter,itemsCreator:function(op,callback){o.itemsCreator.apply(self,[op,function(res){callback(res),self.setKeyword(o.keywordGetter())}])},value:o.value}),this.loader.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.resizer=BI.createWidget({type:"bi.vtape",element:this,items:[{type:"bi.vertical",items:[this.tooltipClick,this.addNotMatchTip],height:this.constants.height},{el:this.loader}]})},setKeyword:function(keyword){var btn,isMatchTipVisible=this.loader.getAllButtons().length>0&&(btn=this.loader.getAllButtons()[0])&&keyword===btn.getValue();this.tooltipClick.setVisible(isMatchTipVisible),this.addNotMatchTip.setVisible(!isMatchTipVisible),!isMatchTipVisible&&this.addNotMatchTip.setText(BI.i18nText("BI-Basic_Click_To_Add_Text",keyword))},hasMatched:function(){return this.tooltipClick.isVisible()},setValue:function(v){this.loader.setValue(v)},getValue:function(){return this.loader.getValue()},empty:function(){this.loader.empty()},populate:function(items){this.loader.populate.apply(this.loader,arguments)}}),BI.SingleSelectSearchInsertPane.EVENT_CHANGE="EVENT_CHANGE",BI.SingleSelectSearchInsertPane.EVENT_ADD_ITEM="EVENT_ADD_ITEM",BI.shortcut("bi.single_select_search_insert_pane",BI.SingleSelectSearchInsertPane),BI.SingleSelectSearchPane=BI.inherit(BI.Widget,{constants:{height:25,lgap:10,tgap:5},_defaultConfig:function(){return BI.extend(BI.SingleSelectSearchPane.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-select-search-pane bi-card",allowNoSelect:!1,itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,keywordGetter:BI.emptyFn})},_init:function(){BI.SingleSelectSearchPane.superclass._init.apply(this,arguments);var self=this,o=this.options;this.tooltipClick=BI.createWidget({type:"bi.label",invisible:!0,text:BI.i18nText("BI-Click_Blank_To_Select"),cls:"multi-select-toolbar",height:this.constants.height}),this.loader=BI.createWidget({type:"bi.single_select_search_loader",allowNoSelect:o.allowNoSelect,keywordGetter:o.keywordGetter,valueFormatter:o.valueFormatter,itemsCreator:function(op,callback){o.itemsCreator.apply(self,[op,function(res){callback(res),self.setKeyword(o.keywordGetter())}])},value:o.value}),this.loader.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.resizer=BI.createWidget({type:"bi.vtape",element:this,items:[{el:this.tooltipClick,height:0},{el:this.loader}]}),this.tooltipClick.setVisible(!1)},setKeyword:function(keyword){var btn,isVisible=this.loader.getAllButtons().length>0&&(btn=this.loader.getAllButtons()[0])&&keyword===btn.getValue();isVisible!==this.tooltipClick.isVisible()&&(this.tooltipClick.setVisible(isVisible),this.resizer.attr("items")[0].height=isVisible?this.constants.height:0,this.resizer.resize())},hasMatched:function(){return this.tooltipClick.isVisible()},setValue:function(v){this.loader.setValue(v)},getValue:function(){return this.loader.getValue()},empty:function(){this.loader.empty()},populate:function(items){this.loader.populate.apply(this.loader,arguments)}}),BI.SingleSelectSearchPane.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.single_select_search_pane",BI.SingleSelectSearchPane),BI.SingleSelectCombo=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.SingleSelectCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-select-combo",allowNoSelect:!1,itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,height:24,attributes:{tabIndex:0},allowEdit:!0})},_init:function(){BI.SingleSelectCombo.superclass._init.apply(this,arguments);var self=this,o=this.options,assertShowValue=function(){BI.isKey(self._startValue)&&(self.storeValue=self._startValue),self.trigger.getSearcher().setState(self.storeValue)};this.storeValue=o.value,this.requesting=!1,this.trigger=BI.createWidget({type:"bi.single_select_trigger",height:o.height,allowNoSelect:o.allowNoSelect,allowEdit:o.allowEdit,valueFormatter:o.valueFormatter,itemsCreator:function(op,callback){o.itemsCreator(op,function(res){1===op.times&&BI.isNotNull(op.keywords)&&self.trigger.setValue(self.getValue()),callback.apply(self,arguments)})},text:o.text,value:this.storeValue}),this.trigger.on(BI.SingleSelectTrigger.EVENT_FOCUS,function(){self.fireEvent(BI.SingleSelectCombo.EVENT_FOCUS)}),this.trigger.on(BI.SingleSelectTrigger.EVENT_BLUR,function(){self.fireEvent(BI.SingleSelectCombo.EVENT_BLUR)}),this.trigger.on(BI.SingleSelectTrigger.EVENT_START,function(){self._setStartValue(),this.getSearcher().setValue(self.storeValue)}),this.trigger.on(BI.SingleSelectTrigger.EVENT_STOP,function(){self._setStartValue(),self.fireEvent(BI.SingleSelectCombo.EVENT_STOP)}),this.trigger.on(BI.SingleSelectTrigger.EVENT_PAUSE,function(){if(this.getSearcher().hasMatched()){var keyword=this.getSearcher().getKeyword();self.combo.setValue(self.storeValue),self._setStartValue(keyword),assertShowValue(),self.populate(),self._setStartValue()}}),this.trigger.on(BI.SingleSelectTrigger.EVENT_SEARCHING,function(keywords){var last=BI.last(keywords);keywords=BI.initial(keywords||[]),keywords.length>0&&self._joinKeywords(keywords,function(){BI.isEndWithBlank(last)?(self.combo.setValue(self.storeValue),assertShowValue(),self.combo.populate(),self._setStartValue()):(self.combo.setValue(self.storeValue),assertShowValue())}),self.fireEvent(BI.SingleSelectCombo.EVENT_SEARCHING)}),this.trigger.on(BI.SingleSelectTrigger.EVENT_CHANGE,function(value,obj){self.storeValue=this.getValue(),assertShowValue(),self._defaultState()}),this.trigger.on(BI.SingleSelectTrigger.EVENT_COUNTER_CLICK,function(){self.combo.isViewVisible()||self.combo.showView()}),this.combo=BI.createWidget({type:"bi.combo",container:o.container,toggle:!1,el:this.trigger,adjustLength:1,popup:{type:"bi.single_select_popup_view",allowNoSelect:o.allowNoSelect,ref:function(){self.popup=this,self.trigger.setAdapter(this)},listeners:[{eventName:BI.SingleSelectPopupView.EVENT_CHANGE,action:function(){self.storeValue=this.getValue(),self._adjust(function(){assertShowValue(),self._defaultState()}),self.fireEvent(BI.SingleSelectCombo.EVENT_CLICK_ITEM)}}],itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,onLoaded:function(){BI.nextTick(function(){self.combo.adjustWidth(),self.combo.adjustHeight(),self.trigger.getSearcher().adjustView()})}},hideChecker:function(e){return 0===triggerBtn.element.find(e.target).length},value:o.value}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){this.setValue(self.storeValue),BI.nextTick(function(){self.populate()})}),this.wants2Quit=!1,this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW,function(){self.trigger.stopEditing(),self.requesting===!0?self.wants2Quit=!0:self.fireEvent(BI.SingleSelectCombo.EVENT_CONFIRM)});var triggerBtn=BI.createWidget({type:"bi.trigger_icon_button",width:o.height,height:o.height,cls:"single-select-trigger-icon-button"});triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE,function(){self.combo.isViewVisible()?self.combo.hideView():self.combo.showView()}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.combo,left:0,right:0,top:0,bottom:0},{el:triggerBtn,right:0,top:0,bottom:0}]})},_defaultState:function(){this.trigger.stopEditing(),this.combo.hideView()},_assertValue:function(val){},_makeMap:function(values){return BI.makeObject(values||[])},_joinKeywords:function(keywords,callback){function digest(items){var selectedMap=self._makeMap(items);BI.each(keywords,function(i,val){BI.isNotNull(selectedMap[val])&&BI.remove(self.storeValue.value,val)}),self._adjust(callback)}var self=this,o=this.options;this._assertValue(this.storeValue),this.requesting=!0,o.itemsCreator({type:BI.SingleSelectCombo.REQ_GET_ALL_DATA,keywords:keywords},function(ob){var values=BI.map(ob.items,"value");digest(values)})},_adjust:function(callback){function adjust(){self.wants2Quit===!0&&(self.fireEvent(BI.SingleSelectCombo.EVENT_CONFIRM),self.wants2Quit=!1),self.requesting=!1}var self=this,o=this.options;this._count?(adjust(),callback()):o.itemsCreator({type:BI.SingleSelectCombo.REQ_GET_DATA_LENGTH},function(res){self._count=res.count,adjust(),callback()})},_setStartValue:function(value){this._startValue=value,this.popup.setStartValue(value)},setValue:function(v){this.storeValue=v,this._assertValue(this.storeValue),this.combo.setValue(this.storeValue)},getValue:function(){return this.storeValue},populate:function(){this._count=null,this.combo.populate.apply(this.combo,arguments)}}),BI.extend(BI.SingleSelectCombo,{REQ_GET_DATA_LENGTH:0,REQ_GET_ALL_DATA:-1}),BI.SingleSelectCombo.EVENT_BLUR="EVENT_BLUR",BI.SingleSelectCombo.EVENT_FOCUS="EVENT_FOCUS",BI.SingleSelectCombo.EVENT_STOP="EVENT_STOP",BI.SingleSelectCombo.EVENT_SEARCHING="EVENT_SEARCHING",BI.SingleSelectCombo.EVENT_CLICK_ITEM="EVENT_CLICK_ITEM",BI.SingleSelectCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.single_select_combo",BI.SingleSelectCombo),BI.SingleSelectInsertCombo=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.SingleSelectInsertCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-select-combo",allowNoSelect:!1,itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,height:24,attributes:{tabIndex:0},allowEdit:!0})},_init:function(){BI.SingleSelectInsertCombo.superclass._init.apply(this,arguments);var self=this,o=this.options,assertShowValue=function(){BI.isKey(self._startValue)&&(self.storeValue=self._startValue),self.trigger.getSearcher().setState(self.storeValue)};this.storeValue=o.value,this.requesting=!1,this.trigger=BI.createWidget({type:"bi.single_select_trigger",height:o.height,allowNoSelect:o.allowNoSelect,allowEdit:o.allowEdit,valueFormatter:o.valueFormatter,itemsCreator:function(op,callback){o.itemsCreator(op,function(res){1===op.times&&BI.isNotNull(op.keywords)&&self.trigger.setValue(self.getValue()),callback.apply(self,arguments)})},text:o.text,value:this.storeValue,searcher:{popup:{type:"bi.single_select_search_insert_pane",listeners:[{eventName:BI.SingleSelectSearchInsertPane.EVENT_ADD_ITEM,action:function(){self.trigger.getSearcher().hasMatched()||(self.storeValue=self.trigger.getSearcher().getKeyword(),assertShowValue(),self._defaultState())}}]}}}),this.trigger.on(BI.SingleSelectTrigger.EVENT_FOCUS,function(){self.fireEvent(BI.SingleSelectInsertCombo.EVENT_FOCUS)}),this.trigger.on(BI.SingleSelectTrigger.EVENT_BLUR,function(){self.fireEvent(BI.SingleSelectInsertCombo.EVENT_BLUR)}),this.trigger.on(BI.SingleSelectTrigger.EVENT_START,function(){self._setStartValue(),this.getSearcher().setValue(self.storeValue)}),this.trigger.on(BI.SingleSelectTrigger.EVENT_STOP,function(){self._setStartValue(),self.fireEvent(BI.SingleSelectInsertCombo.EVENT_STOP)}),this.trigger.on(BI.SingleSelectTrigger.EVENT_PAUSE,function(){if(this.getSearcher().hasMatched()){var keyword=this.getSearcher().getKeyword();self.storeValue=keyword,self.combo.setValue(self.storeValue),self._setStartValue(keyword),assertShowValue(),self.populate(),self._setStartValue()}}),this.trigger.on(BI.SingleSelectTrigger.EVENT_SEARCHING,function(keywords){var last=BI.last(keywords);keywords=BI.initial(keywords||[]),keywords.length>0&&self._joinKeywords(keywords,function(){BI.isEndWithBlank(last)?(self.combo.setValue(self.storeValue),assertShowValue(),self.combo.populate(),self._setStartValue()):(self.combo.setValue(self.storeValue),assertShowValue())}),self.fireEvent(BI.SingleSelectInsertCombo.EVENT_SEARCHING)}),this.trigger.on(BI.SingleSelectTrigger.EVENT_CHANGE,function(value,obj){self.storeValue=this.getValue(),assertShowValue(),self._defaultState()}),this.trigger.on(BI.SingleSelectTrigger.EVENT_COUNTER_CLICK,function(){self.combo.isViewVisible()||self.combo.showView()}),this.combo=BI.createWidget({type:"bi.combo",container:o.container,toggle:!1,el:this.trigger,adjustLength:1,popup:{type:"bi.single_select_popup_view",allowNoSelect:o.allowNoSelect,ref:function(){self.popup=this,self.trigger.setAdapter(this)},listeners:[{eventName:BI.SingleSelectPopupView.EVENT_CHANGE,action:function(){self.storeValue=this.getValue(),self._adjust(function(){assertShowValue(),self._defaultState()}),self.fireEvent(BI.SingleSelectInsertCombo.EVENT_CLICK_ITEM)}}],itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,onLoaded:function(){BI.nextTick(function(){self.combo.adjustWidth(),self.combo.adjustHeight(),self.trigger.getSearcher().adjustView()})}},hideChecker:function(e){return 0===triggerBtn.element.find(e.target).length},value:o.value}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){this.setValue(self.storeValue),BI.nextTick(function(){self.populate()})}),this.wants2Quit=!1,this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW,function(){self.trigger.stopEditing(),self.requesting===!0?self.wants2Quit=!0:self.fireEvent(BI.SingleSelectInsertCombo.EVENT_CONFIRM)});var triggerBtn=BI.createWidget({type:"bi.trigger_icon_button",width:o.height,height:o.height,cls:"single-select-trigger-icon-button"});triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE,function(){self.combo.isViewVisible()?self.combo.hideView():self.combo.showView()}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.combo,left:0,right:0,top:0,bottom:0},{el:triggerBtn,right:0,top:0,bottom:0}]})},_defaultState:function(){this.trigger.stopEditing(),this.combo.hideView()},_assertValue:function(val){},_makeMap:function(values){return BI.makeObject(values||[])},_joinKeywords:function(keywords,callback){function digest(items){var selectedMap=self._makeMap(items);BI.each(keywords,function(i,val){BI.isNotNull(selectedMap[val])&&BI.remove(self.storeValue.value,val)}),self._adjust(callback)}var self=this,o=this.options;this._assertValue(this.storeValue),this.requesting=!0,o.itemsCreator({type:BI.SingleSelectInsertCombo.REQ_GET_ALL_DATA,keywords:keywords},function(ob){var values=BI.map(ob.items,"value");digest(values)})},_adjust:function(callback){function adjust(){self.wants2Quit===!0&&(self.fireEvent(BI.SingleSelectInsertCombo.EVENT_CONFIRM),self.wants2Quit=!1),self.requesting=!1}var self=this,o=this.options;adjust(),callback()},_setStartValue:function(value){this._startValue=value,this.popup.setStartValue(value)},setValue:function(v){this.storeValue=v,this._assertValue(this.storeValue),this.combo.setValue(this.storeValue)},getValue:function(){return this.storeValue},populate:function(){this.combo.populate.apply(this.combo,arguments)}}),BI.extend(BI.SingleSelectInsertCombo,{REQ_GET_DATA_LENGTH:0,REQ_GET_ALL_DATA:-1}),BI.SingleSelectInsertCombo.EVENT_FOCUS="EVENT_FOCUS",BI.SingleSelectInsertCombo.EVENT_BLUR="EVENT_BLUR",BI.SingleSelectInsertCombo.EVENT_STOP="EVENT_STOP",BI.SingleSelectInsertCombo.EVENT_SEARCHING="EVENT_SEARCHING",BI.SingleSelectInsertCombo.EVENT_CLICK_ITEM="EVENT_CLICK_ITEM",BI.SingleSelectInsertCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.single_select_insert_combo",BI.SingleSelectInsertCombo),BI.SingleSelectComboItem=BI.inherit(BI.BasicButton,{_defaultConfig:function(){return BI.extend(BI.SingleSelectComboItem.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-single-select-radio-item",logic:{dynamic:!1},height:24})},_init:function(){BI.SingleSelectComboItem.superclass._init.apply(this,arguments);var self=this,o=this.options;this.radio=BI.createWidget({type:"bi.radio"}),this.text=BI.createWidget({type:"bi.label",cls:"list-item-text",textAlign:"left",whiteSpace:"nowrap",textHeight:o.height,height:o.height,hgap:o.hgap,text:o.text,keyword:o.keyword,value:o.value,py:o.py}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic("horizontal",BI.extend(o.logic,{items:BI.LogicFactory.createLogicItemsByDirection("left",{type:"bi.center_adapt",items:[this.radio],width:26},this.text)}))))},doRedMark:function(){this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doClick:function(){BI.SingleSelectComboItem.superclass.doClick.apply(this,arguments),this.radio.setSelected(this.isSelected()),this.isValid()&&this.fireEvent(BI.SingleSelectComboItem.EVENT_CHANGE,this.isSelected(),this)},setSelected:function(v){BI.SingleSelectComboItem.superclass.setSelected.apply(this,arguments),this.radio.setSelected(v)}}),BI.SingleSelectComboItem.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.single_select_combo_item",BI.SingleSelectComboItem),BI.SingleSelectList=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SingleSelectList.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-select-list",direction:BI.Direction.Top,logic:{dynamic:!0},items:[],itemsCreator:BI.emptyFn,hasNext:BI.emptyFn,onLoaded:BI.emptyFn,el:{type:"bi.list_pane"},allowNoSelect:!1})},_init:function(){BI.SingleSelectList.superclass._init.apply(this,arguments);var self=this,o=this.options;this.list=BI.createWidget(o.el,{type:"bi.list_pane",items:o.items,itemsCreator:function(op,callback){1===op.times&&self.toolbar&&self.toolbar.setVisible(!1),o.itemsCreator(op,function(items){callback.apply(self,arguments),1===op.times&&(self.toolbar&&self.toolbar.setVisible(items&&items.length>0),self.toolbar&&self.toolbar.setEnable(items&&items.length>0))})},onLoaded:o.onLoaded,hasNext:o.hasNext,value:o.value}),this.list.on(BI.Controller.EVENT_CHANGE,function(type,value,obj){type===BI.Events.CLICK&&self.fireEvent(BI.SingleSelectList.EVENT_CHANGE,value,obj),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),BI.createWidget(BI.extend({element:this},BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction),BI.extend({scrolly:!0},o.logic,{items:o.allowNoSelect?BI.LogicFactory.createLogicItemsByDirection(o.direction,{type:"bi.single_select_item",cls:"bi-list-item-active",height:24,forceNotSelected:!0,text:BI.i18nText("BI-Basic_No_Select"),ref:function(_ref){self.toolbar=_ref},listeners:[{eventName:BI.Controller.EVENT_CHANGE,action:function(type){type===BI.Events.CLICK&&(self.list.setValue(),self.fireEvent(BI.SingleSelectList.EVENT_CHANGE)),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}}]},this.list):BI.LogicFactory.createLogicItemsByDirection(o.direction,this.list)}))))},hasPrev:function(){return this.list.hasPrev()},hasNext:function(){return this.list.hasNext()},prependItems:function(items){this.list.prependItems.apply(this.list,arguments)},addItems:function(items){this.list.addItems.apply(this.list,arguments)},setValue:function(v){this.list.setValue([v])},getValue:function(){return this.list.getValue()[0]},empty:function(){this.list.empty()},populate:function(items){this.list.populate.apply(this.list,arguments)},resetHeight:function(h){this.list.resetHeight?this.list.resetHeight(h):this.list.element.css({"max-height":h+"px"})},setNotSelectedValue:function(){this.list.setNotSelectedValue.apply(this.list,arguments)},getNotSelectedValue:function(){return this.list.getNotSelectedValue()},getAllButtons:function(){return this.list.getAllButtons()},getAllLeaves:function(){return this.list.getAllLeaves()},getSelectedButtons:function(){return this.list.getSelectedButtons()},getNotSelectedButtons:function(){return this.list.getNotSelectedButtons()},getIndexByValue:function(value){return this.list.getIndexByValue(value)},getNodeById:function(id){return this.list.getNodeById(id)},getNodeByValue:function(value){return this.list.getNodeByValue(value)}}),BI.SingleSelectList.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.single_select_list",BI.SingleSelectList),BI.SingleSelectLoader=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SingleSelectLoader.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-select-loader",logic:{dynamic:!0},el:{height:400},allowNoSelect:!1,valueFormatter:BI.emptyFn,itemsCreator:BI.emptyFn,onLoaded:BI.emptyFn})},_init:function(){BI.SingleSelectLoader.superclass._init.apply(this,arguments);var self=this,opts=this.options,hasNext=!1;this.storeValue=opts.value,this.button_group=BI.createWidget({type:"bi.single_select_list",allowNoSelect:opts.allowNoSelect,logic:opts.logic,el:BI.extend({onLoaded:opts.onLoaded,el:{type:"bi.loader",isDefaultInit:!1,logic:{dynamic:!0,scrolly:!0},el:{chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,behaviors:{redmark:function(){return!0}},layouts:[{type:"bi.vertical"}]}}},opts.el),itemsCreator:function(op,callback){var startValue=self._startValue;BI.isNotNull(self.storeValue)&&(op=BI.extend(op||{},{selectedValues:[self.storeValue]})),opts.itemsCreator(op,function(ob){hasNext=ob.hasNext;var firstItems=[];if(1===op.times&&BI.isNotNull(self.storeValue)){var json=BI.map([self.storeValue],function(i,v){var txt=opts.valueFormatter(v)||v;return{text:txt,value:v,title:txt,selected:!0}});firstItems=self._createItems(json)}callback(firstItems.concat(self._createItems(ob.items)),ob.keyword||""),1===op.times&&self.storeValue&&(BI.isKey(startValue)&&(self.storeValue=startValue),self.setValue(self.storeValue)),1===op.times&&self._scrollToTop()})},hasNext:function(){return hasNext},value:this.storeValue}),BI.createWidget({type:"bi.vertical",element:this,items:[this.button_group],vgap:5}),this.button_group.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.button_group.on(BI.SingleSelectList.EVENT_CHANGE,function(){self.fireEvent(BI.SingleSelectLoader.EVENT_CHANGE,arguments)})},_createItems:function(items){return BI.createItems(items,{type:this.options.allowNoSelect?"bi.single_select_item":"bi.single_select_combo_item",logic:this.options.logic,cls:"bi-list-item-active",height:24,selected:!1})},_scrollToTop:function(){var self=this;BI.delay(function(){self.button_group.element.scrollTop(0)},30)},_assertValue:function(val){},setStartValue:function(v){this._startValue=v},setValue:function(v){this.storeValue=v,this._assertValue(this.storeValue),this.button_group.setValue(this.storeValue)},getValue:function(){return this.button_group.getValue()},getAllButtons:function(){return this.button_group.getAllButtons()},empty:function(){this.button_group.empty()},populate:function(items){this.button_group.populate.apply(this.button_group,arguments)},resetHeight:function(h){this.button_group.resetHeight(h)},resetWidth:function(w){this.button_group.resetWidth(w)}}),BI.SingleSelectLoader.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.single_select_loader",BI.SingleSelectLoader),BI.SingleSelectPopupView=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SingleSelectPopupView.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-select-popup-view",allowNoSelect:!1,maxWidth:"auto",minWidth:135,maxHeight:400,valueFormatter:BI.emptyFn,itemsCreator:BI.emptyFn,onLoaded:BI.emptyFn})},_init:function(){BI.SingleSelectPopupView.superclass._init.apply(this,arguments);var self=this,opts=this.options;this.loader=BI.createWidget({type:"bi.single_select_loader",allowNoSelect:opts.allowNoSelect,itemsCreator:opts.itemsCreator,valueFormatter:opts.valueFormatter,onLoaded:opts.onLoaded,value:opts.value}),this.popupView=BI.createWidget({type:"bi.popup_view",stopPropagation:!1,maxWidth:opts.maxWidth,minWidth:opts.minWidth,maxHeight:opts.maxHeight,element:this,el:this.loader,value:opts.value}),this.popupView.on(BI.MultiPopupView.EVENT_CHANGE,function(){self.fireEvent(BI.SingleSelectPopupView.EVENT_CHANGE)})},setStartValue:function(v){this.loader.setStartValue(v)},setValue:function(v){this.popupView.setValue(v)},getValue:function(){return this.popupView.getValue()},populate:function(items){this.popupView.populate.apply(this.popupView,arguments)},resetHeight:function(h){this.popupView.resetHeight(h)},resetWidth:function(w){this.popupView.resetWidth(w)}}),BI.SingleSelectPopupView.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.single_select_popup_view",BI.SingleSelectPopupView),BI.SingleSelectTrigger=BI.inherit(BI.Trigger,{constants:{height:14,rgap:4,lgap:4},_defaultConfig:function(){return BI.extend(BI.SingleSelectTrigger.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-select-trigger bi-border bi-border-radius",allowNoSelect:!1,itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn,searcher:{},switcher:{},adapter:null,masker:{},allowEdit:!0})},_init:function(){BI.SingleSelectTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options;o.height&&this.setHeight(o.height-2),this.searcher=BI.createWidget(o.searcher,{type:"bi.single_select_searcher",allowNoSelect:o.allowNoSelect,text:o.text,height:o.height,itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,popup:{},adapter:o.adapter,masker:o.masker,value:o.value}),this.searcher.on(BI.SingleSelectSearcher.EVENT_START,function(){self.fireEvent(BI.SingleSelectTrigger.EVENT_START)}),this.searcher.on(BI.SingleSelectSearcher.EVENT_PAUSE,function(){self.fireEvent(BI.SingleSelectTrigger.EVENT_PAUSE)}),this.searcher.on(BI.SingleSelectSearcher.EVENT_SEARCHING,function(){self.fireEvent(BI.SingleSelectTrigger.EVENT_SEARCHING,arguments)}),this.searcher.on(BI.SingleSelectSearcher.EVENT_STOP,function(){self.fireEvent(BI.SingleSelectTrigger.EVENT_STOP)}),this.searcher.on(BI.SingleSelectSearcher.EVENT_CHANGE,function(){self.fireEvent(BI.SingleSelectTrigger.EVENT_CHANGE,arguments)}),this.searcher.on(BI.SingleSelectSearcher.EVENT_FOCUS,function(){self.fireEvent(BI.SingleSelectTrigger.EVENT_FOCUS)}),this.searcher.on(BI.SingleSelectSearcher.EVENT_BLUR,function(){self.fireEvent(BI.SingleSelectTrigger.EVENT_BLUR,arguments)});var wrapper=BI.createWidget({type:"bi.htape",element:this,items:[{el:this.searcher,width:"fill"},{el:BI.createWidget(),width:24}]});!o.allowEdit&&BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.layout"},left:0,right:24,top:0,bottom:0}]})},getSearcher:function(){return this.searcher},stopEditing:function(){this.searcher.stopSearch()},setAdapter:function(adapter){this.searcher.setAdapter(adapter)},setValue:function(v){this.searcher.setValue(v)},getKey:function(){return this.searcher.getKey()},getValue:function(){return this.searcher.getValue()}}),BI.SingleSelectTrigger.EVENT_TRIGGER_CLICK="EVENT_TRIGGER_CLICK",BI.SingleSelectTrigger.EVENT_COUNTER_CLICK="EVENT_COUNTER_CLICK",BI.SingleSelectTrigger.EVENT_CHANGE="EVENT_CHANGE",BI.SingleSelectTrigger.EVENT_START="EVENT_START",BI.SingleSelectTrigger.EVENT_STOP="EVENT_STOP",BI.SingleSelectTrigger.EVENT_PAUSE="EVENT_PAUSE",BI.SingleSelectTrigger.EVENT_SEARCHING="EVENT_SEARCHING",BI.SingleSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW="EVENT_BEFORE_COUNTER_POPUPVIEW",BI.SingleSelectTrigger.EVENT_FOCUS="EVENT_FOCUS",BI.SingleSelectTrigger.EVENT_BLUR="EVENT_BLUR",BI.shortcut("bi.single_select_trigger",BI.SingleSelectTrigger),BI.SingleSelectInsertList=BI.inherit(BI.Single,{_defaultConfig:function(){return BI.extend(BI.SingleSelectInsertList.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-multi-select-insert-list",allowNoSelect:!1,itemsCreator:BI.emptyFn,valueFormatter:BI.emptyFn})},_init:function(){BI.SingleSelectInsertList.superclass._init.apply(this,arguments);var self=this,o=this.options;this.storeValue=o.value;var assertShowValue=function(){BI.isKey(self._startValue)&&(self.storeValue=self._startValue)};this.adapter=BI.createWidget({type:"bi.single_select_loader",allowNoSelect:o.allowNoSelect,cls:"popup-single-select-list bi-border-left bi-border-right bi-border-bottom",itemsCreator:o.itemsCreator,valueFormatter:o.valueFormatter,logic:{dynamic:!0},el:{},value:o.value}),this.adapter.on(BI.SingleSelectLoader.EVENT_CHANGE,function(){self.storeValue=this.getValue(),assertShowValue(),self.fireEvent(BI.SingleSelectInsertList.EVENT_CHANGE)}),this.searcherPane=BI.createWidget({type:"bi.single_select_search_pane",allowNoSelect:o.allowNoSelect,cls:"bi-border-left bi-border-right bi-border-bottom",valueFormatter:o.valueFormatter,keywordGetter:function(){return self.trigger.getKeyword()},itemsCreator:function(op,callback){op.keywords=[self.trigger.getKeyword()],this.setKeyword(op.keywords[0]),o.itemsCreator(op,callback); +}}),this.searcherPane.setVisible(!1),this.trigger=BI.createWidget({type:"bi.searcher",isAutoSearch:!1,isAutoSync:!1,onSearch:function(op,callback){callback()},adapter:this.adapter,popup:this.searcherPane,height:200,masker:!1,value:o.value,listeners:[{eventName:BI.Searcher.EVENT_START,action:function(){self._showSearcherPane(),self._setStartValue(),this.setValue(BI.deepClone(self.storeValue))}},{eventName:BI.Searcher.EVENT_STOP,action:function(){self._showAdapter(),self._setStartValue(),self.adapter.setValue(self.storeValue),self.adapter.populate()}},{eventName:BI.Searcher.EVENT_PAUSE,action:function(){var keyword=this.getKeyword();self.storeValue=keyword,self._showAdapter(),self.adapter.setValue(self.storeValue),self._setStartValue(keyword),assertShowValue(),self.adapter.populate(),self._setStartValue(),self.fireEvent(BI.SingleSelectInsertList.EVENT_CHANGE)}},{eventName:BI.Searcher.EVENT_SEARCHING,action:function(){var keywords=this.getKeyword(),last=BI.last(keywords);keywords=BI.initial(keywords||[]),keywords.length>0&&self._joinKeywords(keywords,function(){BI.isEndWithBlank(last)?(self.adapter.setValue(self.storeValue),assertShowValue(),self.adapter.populate(),self._setStartValue()):(self.adapter.setValue(self.storeValue),assertShowValue())})}},{eventName:BI.Searcher.EVENT_CHANGE,action:function(){self.storeValue=this.getValue(),self.fireEvent(BI.SingleSelectInsertList.EVENT_CHANGE)}}]}),BI.createWidget({type:"bi.vtape",element:this,items:[{el:this.trigger,height:24},{el:this.adapter,height:"fill"}]}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.searcherPane,top:24,bottom:0,left:0,right:0}]})},_showAdapter:function(){this.adapter.setVisible(!0),this.searcherPane.setVisible(!1)},_showSearcherPane:function(){this.searcherPane.setVisible(!0),this.adapter.setVisible(!1)},_defaultState:function(){this.trigger.stopEditing()},_assertValue:function(){},_makeMap:function(values){return BI.makeObject(values||[])},_joinKeywords:function(keywords,callback){function digest(items){var selectedMap=self._makeMap(items);BI.each(keywords,function(i,val){BI.isNotNull(selectedMap[val])&&(self.storeValue.type===BI.Selection.Single?BI.pushDistinct(self.storeValue.value,val):BI.remove(self.storeValue.value,val))}),callback()}var self=this,o=this.options;this._assertValue(this.storeValue),this._allData?digest(this._allData):o.itemsCreator({type:BI.SingleSelectInsertList.REQ_GET_ALL_DATA},function(ob){self._allData=BI.map(ob.items,"value"),digest(self._allData)})},_setStartValue:function(value){this._startValue=value,this.adapter.setStartValue(value)},isAllSelected:function(){return this.adapter.isAllSelected()},resize:function(){},setValue:function(v){this.storeValue=v,this.adapter.setValue(this.storeValue),this.trigger.setValue(this.storeValue)},getValue:function(){return BI.deepClone(this.storeValue)},populate:function(){this._count=null,this._allData=null,this.adapter.populate.apply(this.adapter,arguments),this.trigger.populate.apply(this.trigger,arguments)}}),BI.extend(BI.SingleSelectInsertList,{REQ_GET_DATA_LENGTH:0,REQ_GET_ALL_DATA:-1}),BI.SingleSelectInsertList.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.single_select_insert_list",BI.SingleSelectInsertList),BI.SingleSelectEditor=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SingleSelectEditor.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-select-editor",el:{},text:BI.i18nText("BI-Basic_Please_Select")})},_init:function(){BI.SingleSelectEditor.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget(o.el,{type:"bi.state_editor",element:this,height:o.height,watermark:BI.i18nText("BI-Basic_Search"),allowBlank:!0,value:o.value,defaultText:o.text,text:o.text}),this.editor.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editor.on(BI.StateEditor.EVENT_PAUSE,function(){self.fireEvent(BI.SingleSelectEditor.EVENT_PAUSE)}),this.editor.on(BI.StateEditor.EVENT_FOCUS,function(){self.fireEvent(BI.SingleSelectEditor.EVENT_FOCUS)}),this.editor.on(BI.StateEditor.EVENT_BLUR,function(){self.fireEvent(BI.SingleSelectEditor.EVENT_BLUR)})},focus:function(){this.editor.focus()},blur:function(){this.editor.blur()},setState:function(state){this.editor.setState(state)},setValue:function(v){this.editor.setValue(v)},getValue:function(){var v=this.editor.getState();return BI.isArray(v)&&v.length>0?v[v.length-1]:""},getKeywords:function(){var val=this.editor.getLastChangedValue(),keywords=val.match(/[\S]+/g);return BI.isEndWithBlank(val)?keywords.concat([" "]):keywords},populate:function(items){}}),BI.SingleSelectEditor.EVENT_FOCUS="EVENT_FOCUS",BI.SingleSelectEditor.EVENT_BLUR="EVENT_BLUR",BI.SingleSelectEditor.EVENT_PAUSE="EVENT_PAUSE",BI.shortcut("bi.single_select_editor",BI.SingleSelectEditor),BI.SingleSelectSearcher=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SingleSelectSearcher.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-select-searcher",itemsCreator:BI.emptyFn,el:{},popup:{},valueFormatter:BI.emptyFn,adapter:null,masker:{},allowNoSelect:!1})},_init:function(){BI.SingleSelectSearcher.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget(o.el,{type:"bi.single_select_editor",height:o.height,text:o.text,listeners:[{eventName:BI.SingleSelectEditor.EVENT_FOCUS,action:function(){self.fireEvent(BI.SingleSelectSearcher.EVENT_FOCUS)}},{eventName:BI.SingleSelectEditor.EVENT_BLUR,action:function(){self.fireEvent(BI.SingleSelectSearcher.EVENT_BLUR)}}]}),this.searcher=BI.createWidget({type:"bi.searcher",element:this,height:o.height,isAutoSearch:!1,isAutoSync:!1,onSearch:function(op,callback){callback()},el:this.editor,popup:BI.extend({type:"bi.single_select_search_pane",allowNoSelect:o.allowNoSelect,valueFormatter:o.valueFormatter,keywordGetter:function(){return self.editor.getValue()},itemsCreator:function(op,callback){var keyword=self.editor.getValue();op.keywords=[keyword],this.setKeyword(keyword),o.itemsCreator(op,callback)},value:o.value},o.popup),adapter:o.adapter,masker:o.masker}),this.searcher.on(BI.Searcher.EVENT_START,function(){self.fireEvent(BI.SingleSelectSearcher.EVENT_START)}),this.searcher.on(BI.Searcher.EVENT_PAUSE,function(){this.hasMatched(),self.fireEvent(BI.SingleSelectSearcher.EVENT_PAUSE)}),this.searcher.on(BI.Searcher.EVENT_STOP,function(){self.fireEvent(BI.SingleSelectSearcher.EVENT_STOP)}),this.searcher.on(BI.Searcher.EVENT_CHANGE,function(){self.fireEvent(BI.SingleSelectSearcher.EVENT_CHANGE,arguments)}),this.searcher.on(BI.Searcher.EVENT_SEARCHING,function(){var keywords=this.getKeywords();self.fireEvent(BI.SingleSelectSearcher.EVENT_SEARCHING,keywords)}),BI.isNotNull(o.value)&&this.setState(o.value)},adjustView:function(){this.searcher.adjustView()},isSearching:function(){return this.searcher.isSearching()},stopSearch:function(){this.searcher.stopSearch()},getKeyword:function(){return this.editor.getValue()},hasMatched:function(){return this.searcher.hasMatched()},hasChecked:function(){return this.searcher.getView()&&this.searcher.getView().hasChecked()},setAdapter:function(adapter){this.searcher.setAdapter(adapter)},setState:function(v){var o=this.options;BI.isNull(v)?this.editor.setState(BI.Selection.None):this.editor.setState(o.valueFormatter(v+"")||v+"")},setValue:function(ob){this.setState(ob),this.searcher.setValue(ob)},getKey:function(){return this.editor.getValue()},getValue:function(){return this.searcher.getValue()},populate:function(items){this.searcher.populate.apply(this.searcher,arguments)}}),BI.SingleSelectSearcher.EVENT_FOCUS="EVENT_FOCUS",BI.SingleSelectSearcher.EVENT_BLUR="EVENT_BLUR",BI.SingleSelectSearcher.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.SingleSelectSearcher.EVENT_CHANGE="EVENT_CHANGE",BI.SingleSelectSearcher.EVENT_START="EVENT_START",BI.SingleSelectSearcher.EVENT_STOP="EVENT_STOP",BI.SingleSelectSearcher.EVENT_PAUSE="EVENT_PAUSE",BI.SingleSelectSearcher.EVENT_SEARCHING="EVENT_SEARCHING",BI.shortcut("bi.single_select_searcher",BI.SingleSelectSearcher),BI.SignTextEditor=BI.inherit(BI.Widget,{_defaultConfig:function(){var conf=BI.SignTextEditor.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{baseCls:(conf.baseCls||"")+" bi-sign-initial-editor",validationChecker:BI.emptyFn,text:"",height:24})},_init:function(){BI.SignTextEditor.superclass._init.apply(this,arguments);var self=this,o=this.options;this.editor=BI.createWidget({type:"bi.editor",height:o.height,hgap:4,vgap:2,value:o.value,validationChecker:o.validationChecker,allowBlank:!1}),this.text=BI.createWidget({type:"bi.text_button",cls:"sign-editor-text",title:function(){return self.getValue()},textAlign:o.textAlign,height:o.height,hgap:4,handler:function(){self._showInput(),self.editor.focus(),self.editor.selectAll()}}),this.text.on(BI.TextButton.EVENT_CHANGE,function(){BI.nextTick(function(){self.fireEvent(BI.SignTextEditor.EVENT_CLICK_LABEL)})}),BI.createWidget({type:"bi.absolute",element:this,items:[{el:this.text,left:0,right:0,top:0,bottom:0}]}),this.editor.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.editor.on(BI.Editor.EVENT_CONFIRM,function(){self._showHint(),self._checkText(),self.fireEvent(BI.SignTextEditor.EVENT_CONFIRM,arguments)}),this.editor.on(BI.Editor.EVENT_CHANGE_CONFIRM,function(){self._showHint(),self._checkText(),self.fireEvent(BI.SignTextEditor.EVENT_CHANGE_CONFIRM,arguments)}),this.editor.on(BI.Editor.EVENT_ERROR,function(){self._checkText()}),BI.createWidget({type:"bi.vertical",scrolly:!1,element:this,items:[this.editor]}),this._showHint(),self._checkText()},_checkText:function(){var o=this.options;BI.nextTick(BI.bind(function(){if(""===this.editor.getValue())this.text.setValue(o.watermark||""),this.text.element.addClass("bi-water-mark");else{var v=this.editor.getValue();v=BI.isEmpty(v)||v==o.text?o.text:v+o.text,this.text.setValue(v),this.text.element.removeClass("bi-water-mark")}},this))},_showInput:function(){this.editor.visible(),this.text.invisible()},_showHint:function(){this.editor.invisible(),this.text.visible()},setTitle:function(title){this.text.setTitle(title)},setWarningTitle:function(title){this.text.setWarningTitle(title)},focus:function(){this._showInput(),this.editor.focus()},blur:function(){this.editor.blur(),this._showHint(),this._checkText()},doRedMark:function(){""===this.editor.getValue()&&BI.isKey(this.options.watermark)||this.text.doRedMark.apply(this.text,arguments)},unRedMark:function(){this.text.unRedMark.apply(this.text,arguments)},doHighLight:function(){""===this.editor.getValue()&&BI.isKey(this.options.watermark)||this.text.doHighLight.apply(this.text,arguments)},unHighLight:function(){this.text.unHighLight.apply(this.text,arguments)},isValid:function(){return this.editor.isValid()},setErrorText:function(text){this.editor.setErrorText(text)},getErrorText:function(){return this.editor.getErrorText()},isEditing:function(){return this.editor.isEditing()},getLastValidValue:function(){return this.editor.getLastValidValue()},getLastChangedValue:function(){return this.editor.getLastChangedValue()},setValue:function(v){this.editor.setValue(v),this._checkText()},getValue:function(){return this.editor.getValue()},getState:function(){return this.text.getValue()},setState:function(v){var o=this.options;this._showHint(),v=BI.isEmpty(v)||v==o.text?o.text:v+o.text,this.text.setValue(v)}}),BI.SignTextEditor.EVENT_CONFIRM="EVENT_CONFIRM",BI.SignTextEditor.EVENT_CHANGE_CONFIRM="EVENT_CHANGE_CONFIRM",BI.SignTextEditor.EVENT_CLICK_LABEL="EVENT_CLICK_LABEL",BI.shortcut("bi.sign_text_editor",BI.SignTextEditor),BI.SliderIconButton=BI.inherit(BI.Widget,{props:{baseCls:"bi-single-slider-button"},constants:{LARGE_SIZE:16,NORMAL_SIZE:12,LARGE_OFFSET:4,NORMAL_OFFSET:6},render:function(){var self=this;return{type:"bi.absolute",ref:function(){self.wrapper=this},items:[{el:{type:"bi.text_button",cls:"slider-button bi-high-light-border",ref:function(){self.slider=this}}}]}}}),BI.shortcut("bi.single_slider_button",BI.SliderIconButton),BI.SingleSlider=BI.inherit(BI.Single,{_constant:{EDITOR_WIDTH:90,EDITOR_HEIGHT:30,SLIDER_WIDTH_HALF:15,SLIDER_WIDTH:30,SLIDER_HEIGHT:30,TRACK_HEIGHT:24},props:{baseCls:"bi-single-slider bi-slider-track",digit:!1,unit:""},render:function(){var self=this,o=this.options,c=this._constant;this.enable=!1,this.value="",this.grayTrack=BI.createWidget({type:"bi.layout",cls:"gray-track",height:6}),this.blueTrack=BI.createWidget({type:"bi.layout",cls:"blue-track bi-high-light-background",height:6}),this.track=this._createTrackWrapper(),this.slider=BI.createWidget({type:"bi.single_slider_button"}),this._draggable(this.slider);var sliderVertical=BI.createWidget({type:"bi.vertical",items:[{type:"bi.absolute",items:[this.slider]}],hgap:c.SLIDER_WIDTH_HALF,height:c.SLIDER_HEIGHT});return sliderVertical.element.click(function(e){if(self.enable&&self.isEnabled()){var offset=e.clientX-self.element.offset().left-c.SLIDER_WIDTH_HALF,trackLength=self.track.element[0].scrollWidth,percent=0;offset<0&&(percent=0),offset>0&&offsettrackLength-c.SLIDER_WIDTH&&(percent=100);var significantPercent=BI.parseFloat(percent.toFixed(1));self._setAllPosition(significantPercent);var v=self._getValueByPercent(significantPercent);v=o.digit===!1?v:v.toFixed(o.digit),self.label.setValue(v),self.value=v,self.fireEvent(BI.SingleSlider.EVENT_CHANGE)}}),this.label=BI.createWidget({type:"bi.sign_text_editor",cls:"slider-editor-button",text:o.unit,width:c.EDITOR_WIDTH-2,allowBlank:!1,textAlign:"center",validationChecker:function(v){return self._checkValidation(v)}}),this.label.element.hover(function(){self.label.element.removeClass("bi-border").addClass("bi-border")},function(){self.label.element.removeClass("bi-border")}),this.label.on(BI.SignEditor.EVENT_CONFIRM,function(){var v=BI.parseFloat(this.getValue()),percent=self._getPercentByValue(v),significantPercent=BI.parseFloat(percent.toFixed(1));self._setAllPosition(significantPercent),this.setValue(v),self.value=v,self.fireEvent(BI.SingleSlider.EVENT_CHANGE)}),this._setVisible(!1),{type:"bi.absolute",items:[{el:{type:"bi.vertical",items:[{type:"bi.absolute",items:[{el:this.track,width:"100%",height:c.TRACK_HEIGHT}]}],hgap:7,height:c.TRACK_HEIGHT},top:23,left:0,width:"100%"},{el:sliderVertical,top:20,left:0,width:"100%"},{el:{type:"bi.vertical",items:[{type:"bi.horizontal_auto",items:[this.label]}],height:c.EDITOR_HEIGHT},top:0,left:0,width:"100%"}]}},_draggable:function(widget){function optimizeSize(s){return BI.clamp(s,0,self._getGrayTrackLength())}var self=this,o=this.options,startDrag=!1,size=0,offset=0,defaultSize=0,mouseMoveTracker=new BI.MouseMoveTracker(function(deltaX){if(mouseMoveTracker.isDragging()){startDrag=!0,offset+=deltaX,size=optimizeSize(defaultSize+offset),widget.element.addClass("dragging");var percent=100*size/self._getGrayTrackLength(),significantPercent=BI.parseFloat(percent.toFixed(1));self._setBlueTrack(significantPercent),self._setLabelPosition(significantPercent),self._setSliderPosition(significantPercent);var v=self._getValueByPercent(significantPercent);v=o.digit===!1?v:v.toFixed(o.digit),self.label.setValue(v),self.value=v}},function(){if(startDrag===!0){size=optimizeSize(size);var percent=100*size/self._getGrayTrackLength(),significantPercent=BI.parseFloat(percent.toFixed(1));self._setSliderPosition(significantPercent),size=0,offset=0,defaultSize=size,startDrag=!1}widget.element.removeClass("dragging"),mouseMoveTracker.releaseMouseMoves(),self.fireEvent(BI.SingleSlider.EVENT_CHANGE)},window);widget.element.on("mousedown",function(event){widget.isEnabled()&&(defaultSize=this.offsetLeft,optimizeSize(defaultSize),mouseMoveTracker.captureMouseMoves(event))})},_createTrackWrapper:function(){return BI.createWidget({type:"bi.absolute",items:[{el:{type:"bi.vertical",items:[{type:"bi.absolute",items:[{el:this.grayTrack,top:0,left:0,width:"100%"},{el:this.blueTrack,top:0,left:0,width:"0%"}]}],hgap:8,height:8},top:8,left:0,width:"100%"}]})},_checkValidation:function(v){var o=this.options,valid=!1;if(BI.isNumeric(v)&&!(BI.isNull(v)||vthis.max))if(o.digit===!1)valid=!0;else{var dotText=(v+"").split(".")[1]||"";valid=dotText.length===o.digit}return valid},_setBlueTrack:function(percent){this.blueTrack.element.css({width:percent+"%"})},_setLabelPosition:function(percent){},_setSliderPosition:function(percent){this.slider.element.css({left:percent+"%"})},_setAllPosition:function(percent){this._setSliderPosition(percent),this._setLabelPosition(percent),this._setBlueTrack(percent)},_setVisible:function(visible){this.slider.setVisible(visible),this.label.setVisible(visible)},_getGrayTrackLength:function(){return this.grayTrack.element[0].scrollWidth},_getValueByPercent:function(percent){var thousandth=BI.parseInt(10*percent);return(this.max-this.min)*thousandth/1e3+this.min},_getPercentByValue:function(v){return 100*(v-this.min)/(this.max-this.min)},getValue:function(){return this.value},setValue:function(v){var o=this.options;v=BI.parseFloat(v),v=o.digit===!1?v:v.toFixed(o.digit),isNaN(v)||(this._checkValidation(v)&&(this.value=v),v>this.max&&(this.value=this.max),vminNumber&&(this.min=minNumber,this.max=maxNumber)},reset:function(){this._setVisible(!1),this.enable=!1,this.value="",this.min=0,this.max=0,this._setBlueTrack(0)},populate:function(){isNaN(this.min)||isNaN(this.max)||(this._setVisible(!0),this.enable=!0,this.label.setErrorText(BI.i18nText("BI-Basic_Please_Enter_Number_Between",this.min,this.max)),BI.isNumeric(this.value)||BI.isNotEmptyString(this.value)?(this.label.setValue(this.value),this._setAllPosition(this._getPercentByValue(this.value))):(this.label.setValue(this.max),this._setAllPosition(100)))}}),BI.SingleSlider.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.single_slider",BI.SingleSlider),BI.SingleSliderLabel=BI.inherit(BI.Single,{_constant:{EDITOR_WIDTH:90,EDITOR_HEIGHT:20,HEIGHT:20,SLIDER_WIDTH_HALF:15,SLIDER_WIDTH:30,SLIDER_HEIGHT:30,TRACK_HEIGHT:24},_defaultConfig:function(){return BI.extend(BI.SingleSliderLabel.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-slider-label bi-slider-track",digit:!1,unit:""})},_init:function(){BI.SingleSliderLabel.superclass._init.apply(this,arguments);var self=this,o=this.options,c=this._constant;this.enable=!1,this.value="",this.grayTrack=BI.createWidget({type:"bi.layout",cls:"gray-track",height:6}),this.blueTrack=BI.createWidget({type:"bi.layout",cls:"blue-track bi-high-light-background",height:6}),this.track=this._createTrackWrapper(),this.slider=BI.createWidget({type:"bi.single_slider_button"}),this._draggable(this.slider);var sliderVertical=BI.createWidget({type:"bi.vertical",items:[{type:"bi.absolute",items:[this.slider]}],hgap:c.SLIDER_WIDTH_HALF,height:c.SLIDER_HEIGHT});sliderVertical.element.click(function(e){if(self.enable&&self.isEnabled()){var offset=e.clientX-self.element.offset().left-c.SLIDER_WIDTH_HALF,trackLength=self.track.element[0].scrollWidth,percent=0;offset<0&&(percent=0),offset>0&&offsettrackLength-c.SLIDER_WIDTH&&(percent=100);var significantPercent=BI.parseFloat(percent.toFixed(1));self._setAllPosition(significantPercent);var v=self._getValueByPercent(significantPercent);v=o.digit===!1?v:v.toFixed(o.digit),self.label.setText(v+o.unit),self.value=v,self.fireEvent(BI.SingleSliderLabel.EVENT_CHANGE)}}),this.label=BI.createWidget({type:"bi.label",height:c.HEIGHT,width:c.EDITOR_WIDTH-2}),this._setVisible(!1),BI.createWidget({type:"bi.absolute",element:this,items:[{el:{type:"bi.vertical",items:[{type:"bi.absolute",items:[{el:this.track,width:"100%",height:c.TRACK_HEIGHT}]}],hgap:7,height:c.TRACK_HEIGHT},top:13,left:0,width:"100%"},{el:sliderVertical,top:10,left:0,width:"100%"},{el:{type:"bi.vertical",items:[{type:"bi.horizontal_auto",items:[this.label]}],height:c.EDITOR_HEIGHT},top:0,left:0,width:"100%"}]})},_draggable:function(widget){function optimizeSize(s){return BI.clamp(s,0,self._getGrayTrackLength())}var self=this,o=this.options,startDrag=!1,size=0,offset=0,defaultSize=0,mouseMoveTracker=new BI.MouseMoveTracker(function(deltaX){if(mouseMoveTracker.isDragging()){startDrag=!0,offset+=deltaX,size=optimizeSize(defaultSize+offset),widget.element.addClass("dragging");var percent=100*size/self._getGrayTrackLength(),significantPercent=BI.parseFloat(percent.toFixed(1));self._setBlueTrack(significantPercent),self._setLabelPosition(significantPercent),self._setSliderPosition(significantPercent);var v=self._getValueByPercent(significantPercent);v=o.digit===!1?v:v.toFixed(o.digit),self.label.setValue(v+o.unit),self.value=v,self.fireEvent(BI.SingleSliderLabel.EVENT_CHANGE)}},function(){if(startDrag===!0){size=optimizeSize(size);var percent=100*size/self._getGrayTrackLength(),significantPercent=BI.parseFloat(percent.toFixed(1));self._setSliderPosition(significantPercent),size=0,offset=0,defaultSize=size,startDrag=!1}widget.element.removeClass("dragging"),mouseMoveTracker.releaseMouseMoves(),self.fireEvent(BI.SingleSliderLabel.EVENT_CHANGE)},window);widget.element.on("mousedown",function(event){widget.isEnabled()&&(defaultSize=this.offsetLeft,optimizeSize(defaultSize),mouseMoveTracker.captureMouseMoves(event))})},_createTrackWrapper:function(){return BI.createWidget({type:"bi.absolute",items:[{el:{type:"bi.vertical",items:[{type:"bi.absolute",items:[{el:this.grayTrack,top:0,left:0,width:"100%"},{el:this.blueTrack,top:0,left:0,width:"0%"}]}],hgap:8,height:8},top:8,left:0,width:"100%"}]})},_checkValidation:function(v){return BI.isNumeric(v)&&!(BI.isNull(v)||vthis.max)},_setBlueTrack:function(percent){this.blueTrack.element.css({width:percent+"%"})},_setLabelPosition:function(percent){},_setSliderPosition:function(percent){this.slider.element.css({left:percent+"%"})},_setAllPosition:function(percent){this._setSliderPosition(percent),this._setLabelPosition(percent),this._setBlueTrack(percent)},_setVisible:function(visible){this.slider.setVisible(visible),this.label.setVisible(visible)},_getGrayTrackLength:function(){return this.grayTrack.element[0].scrollWidth},_getValueByPercent:function(percent){var thousandth=BI.parseInt(10*percent);return(this.max-this.min)*thousandth/1e3+this.min},_getPercentByValue:function(v){return 100*(v-this.min)/(this.max-this.min)},_setEnable:function(b){BI.SingleSliderLabel.superclass._setEnable.apply(this,[b]),b?this.blueTrack.element.removeClass("disabled-blue-track").addClass("blue-track"):this.blueTrack.element.removeClass("blue-track").addClass("disabled-blue-track")},getValue:function(){return this.value},setValue:function(v){var o=this.options;v=BI.parseFloat(v),v=o.digit===!1?v:v.toFixed(o.digit),isNaN(v)||(this._checkValidation(v)&&(this.value=v),v>this.max&&(this.value=this.max),vminNumber&&(this.min=minNumber,this.max=maxNumber)},reset:function(){this._setVisible(!1),this.enable=!1,this.value="",this.min=0,this.max=0,this._setBlueTrack(0)},populate:function(){var o=this.options;isNaN(this.min)||isNaN(this.max)||(this._setVisible(!0),this.enable=!0,BI.isNumeric(this.value)||BI.isNotEmptyString(this.value)?(this.label.setValue(this.value+o.unit),this._setAllPosition(this._getPercentByValue(this.value))):(this.label.setValue(this.max+o.unit),this._setAllPosition(100)))}}),BI.SingleSliderLabel.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.single_slider_label",BI.SingleSliderLabel),BI.SingleSliderNormal=BI.inherit(BI.Single,{_constant:{HEIGHT:28,SLIDER_WIDTH_HALF:15,SLIDER_WIDTH:30,SLIDER_HEIGHT:30,TRACK_HEIGHT:24},props:{baseCls:"bi-single-slider-normal bi-slider-track",minMax:{min:0,max:100}},render:function(){var self=this,c=this._constant,track=this._createTrack();this.slider=BI.createWidget({type:"bi.single_slider_button"}),this._draggable(this.slider);var sliderVertical=BI.createWidget({type:"bi.vertical",items:[{type:"bi.absolute",items:[this.slider]}],hgap:c.SLIDER_WIDTH_HALF,height:c.SLIDER_HEIGHT});return sliderVertical.element.click(function(e){if(self.enable&&self.isEnabled()){var offset=e.clientX-self.element.offset().left-c.SLIDER_WIDTH_HALF,trackLength=self.track.element[0].scrollWidth,percent=0;offset<0&&(percent=0),offset>0&&offsettrackLength-c.SLIDER_WIDTH&&(percent=100);var significantPercent=BI.parseFloat(percent.toFixed(1));self._setAllPosition(significantPercent);var v=self._getValueByPercent(significantPercent);self.value=v,self.fireEvent(BI.SingleSlider.EVENT_CHANGE)}}),{type:"bi.absolute",element:this,items:[{el:{type:"bi.vertical",items:[{type:"bi.absolute",items:[{el:track,width:"100%",height:c.TRACK_HEIGHT}]}],hgap:7,height:c.TRACK_HEIGHT},top:3,left:0,width:"100%"},{el:sliderVertical,top:0,left:0,width:"100%"}]}},_draggable:function(widget){function optimizeSize(s){return BI.clamp(s,0,self._getGrayTrackLength())}var self=this,o=this.options,startDrag=!1,size=0,offset=0,defaultSize=0,mouseMoveTracker=new BI.MouseMoveTracker(function(deltaX){if(mouseMoveTracker.isDragging()){startDrag=!0,offset+=deltaX,size=optimizeSize(defaultSize+offset),widget.element.addClass("dragging");var percent=100*size/self._getGrayTrackLength(),significantPercent=BI.parseFloat(percent.toFixed(1));self._setBlueTrack(significantPercent),self._setSliderPosition(significantPercent);var v=self._getValueByPercent(significantPercent);v=o.digit===!1?v:v.toFixed(o.digit),self.value=v,self.fireEvent(BI.SingleSliderNormal.EVENT_DRAG,v)}},function(){if(startDrag===!0){size=optimizeSize(size);var percent=100*size/self._getGrayTrackLength(),significantPercent=BI.parseFloat(percent.toFixed(1));self._setSliderPosition(significantPercent),size=0,offset=0,defaultSize=size,startDrag=!1}widget.element.removeClass("dragging"),mouseMoveTracker.releaseMouseMoves(),self.fireEvent(BI.SingleSlider.EVENT_CHANGE)},window);widget.element.on("mousedown",function(event){widget.isEnabled()&&(defaultSize=this.offsetLeft,optimizeSize(defaultSize),mouseMoveTracker.captureMouseMoves(event))})},_createTrack:function(){var self=this,c=this._constant;return this.grayTrack=BI.createWidget({type:"bi.layout",cls:"gray-track",height:6}),this.blueTrack=BI.createWidget({type:"bi.layout",cls:"blue-track bi-high-light-background",height:6}),this.options.color&&this.blueTrack.element.css({"background-color":this.options.color}),{type:"bi.absolute",items:[{el:{type:"bi.vertical",items:[{type:"bi.absolute",items:[{el:this.grayTrack,top:0,left:0,width:"100%"},{el:this.blueTrack,top:0,left:0,width:"0%"}]}],hgap:8,height:8},top:8,left:0,width:"100%"}],ref:function(ref){self.track=ref}}},_checkValidation:function(v){return!(BI.isNull(v)||vthis.max)},_setBlueTrack:function(percent){this.blueTrack.element.css({width:percent+"%"})},_setSliderPosition:function(percent){this.slider.element.css({left:percent+"%"})},_setAllPosition:function(percent){this._setSliderPosition(percent),this._setBlueTrack(percent)},_setVisible:function(visible){this.slider.setVisible(visible)},_getGrayTrackLength:function(){return this.grayTrack.element[0].scrollWidth},_getValueByPercent:function(percent){var thousandth=BI.parseInt(10*percent);return(this.max-this.min)*thousandth/1e3+this.min},_getPercentByValue:function(v){return 100*(v-this.min)/(this.max-this.min)},_setEnable:function(b){BI.SingleSliderNormal.superclass._setEnable.apply(this,[b]),b?this.blueTrack.element.removeClass("disabled-blue-track").addClass("blue-track"):this.blueTrack.element.removeClass("blue-track").addClass("disabled-blue-track")},getValue:function(){return this.value},setValue:function(v){var value=BI.parseFloat(v);isNaN(value)||(this._checkValidation(value)&&(this.value=value),value>this.max&&(this.value=this.max),valueminNumber&&(this.min=minNumber,this.max=maxNumber)},reset:function(){this._setVisible(!1),this.enable=!1,this.value="",this.min=0,this.max=0,this._setBlueTrack(0)},populate:function(){isNaN(this.min)||isNaN(this.max)||(this._setVisible(!0),this.enable=!0,BI.isNumeric(this.value)||BI.isNotEmptyString(this.value)?this._setAllPosition(this._getPercentByValue(this.value)):this._setAllPosition(100))}}),BI.SingleSliderNormal.EVENT_DRAG="EVENT_DRAG",BI.shortcut("bi.single_slider_normal",BI.SingleSliderNormal),BI.SingleTreeCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.SingleTreeCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-tree-combo",trigger:{},height:24,text:"",items:[],value:"",attributes:{tabIndex:0}})},_init:function(){BI.SingleTreeCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.trigger=BI.createWidget(BI.extend({type:"bi.single_tree_trigger",text:o.text,height:o.height,items:o.items,value:o.value},o.trigger)),this.popup=BI.createWidget({type:"bi.single_level_tree",items:o.items,value:o.value}),this.combo=BI.createWidget({type:"bi.combo",container:o.container,element:this,adjustLength:2,el:this.trigger,popup:{el:this.popup}}),this.combo.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){self.fireEvent(BI.SingleTreeCombo.EVENT_BEFORE_POPUPVIEW,arguments)}),this.popup.on(BI.SingleTreePopup.EVENT_CHANGE,function(){self.setValue(self.popup.getValue()),self.combo.hideView(),self.fireEvent(BI.SingleTreeCombo.EVENT_CHANGE)})},populate:function(items){this.combo.populate(items)},setValue:function(v){v=BI.isArray(v)?v:[v],this.trigger.setValue(v),this.popup.setValue(v)},getValue:function(){return this.popup.getValue()}}),BI.SingleTreeCombo.EVENT_CHANGE="EVENT_CHANGE",BI.SingleTreeCombo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.single_tree_combo",BI.SingleTreeCombo),BI.SingleTreePopup=BI.inherit(BI.Pane,{_defaultConfig:function(){return BI.extend(BI.SingleTreePopup.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-level-tree",tipText:BI.i18nText("BI-No_Selected_Item"),items:[],value:""})},_init:function(){BI.SingleTreePopup.superclass._init.apply(this,arguments);var self=this,o=this.options;this.tree=BI.createWidget({type:"bi.level_tree",expander:{isDefaultInit:!0},items:o.items,value:o.value,chooseType:BI.Selection.Single}),BI.createWidget({type:"bi.vertical",element:this,vgap:5,items:[this.tree]}),this.tree.on(BI.Controller.EVENT_CHANGE,function(){self.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}),this.tree.on(BI.LevelTree.EVENT_CHANGE,function(){self.fireEvent(BI.SingleTreePopup.EVENT_CHANGE)}),this.check()},getValue:function(){return this.tree.getValue()},setValue:function(v){v=BI.isArray(v)?v:[v],this.tree.setValue(v)},populate:function(items){BI.SingleTreePopup.superclass.populate.apply(this,arguments),this.tree.populate(items)}}),BI.SingleTreePopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.single_level_tree",BI.SingleTreePopup),BI.SingleTreeTrigger=BI.inherit(BI.Trigger,{_defaultConfig:function(){return BI.extend(BI.SingleTreeTrigger.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-single-tree-trigger",height:24,text:"",items:[],value:""})},_init:function(){BI.SingleTreeTrigger.superclass._init.apply(this,arguments); +var self=this,o=this.options;this.trigger=BI.createWidget({type:"bi.select_text_trigger",element:this,text:o.text,items:o.items,height:o.height,value:o.value})},_checkTitle:function(){var self=this,val=this.getValue();BI.any(this.options.items,function(i,item){if(BI.contains(val,item.value))return self.trigger.setTitle(item.text||item.value),!0})},setValue:function(v){v=BI.isArray(v)?v:[v],this.options.value=v,this.trigger.setValue(v),this._checkTitle()},getValue:function(){return this.options.value||[]},populate:function(items){BI.SingleTreeTrigger.superclass.populate.apply(this,arguments),this.trigger.populate(items)}}),BI.shortcut("bi.single_tree_trigger",BI.SingleTreeTrigger),BI.TextValueDownListCombo=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.TextValueDownListCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-text-value-down-list-combo",height:24,attributes:{tabIndex:0}})},_init:function(){BI.TextValueDownListCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this._createValueMap();var value;BI.isNotNull(o.value)&&(value=this._digest(o.value)),this.trigger=BI.createWidget({type:"bi.down_list_select_text_trigger",cls:"text-value-down-list-trigger",height:o.height,items:o.items,text:o.text,value:value}),this.combo=BI.createWidget({type:"bi.down_list_combo",element:this,chooseType:BI.Selection.Single,adjustLength:2,height:o.height,el:this.trigger,value:BI.isNull(value)?[]:[value],items:BI.deepClone(o.items)}),this.combo.on(BI.DownListCombo.EVENT_CHANGE,function(){var currentVal=self.combo.getValue()[0].value;currentVal!==self.value&&(self.setValue(currentVal),self.fireEvent(BI.TextValueDownListCombo.EVENT_CHANGE))}),this.combo.on(BI.DownListCombo.EVENT_SON_VALUE_CHANGE,function(){var currentVal=self.combo.getValue()[0].childValue;currentVal!==self.value&&(self.setValue(currentVal),self.fireEvent(BI.TextValueDownListCombo.EVENT_CHANGE))})},_createValueMap:function(){var self=this;this.valueMap={},BI.each(BI.flatten(this.options.items),function(idx,item){BI.has(item,"el")?BI.each(item.children,function(id,it){self.valueMap[it.value]={value:item.el.value,childValue:it.value}}):self.valueMap[item.value]={value:item.value}})},_digest:function(v){return this.value=v,this.valueMap[v]},setValue:function(v){v=this._digest(v),this.combo.setValue([v]),this.trigger.setValue(v)},getValue:function(){var v=this.combo.getValue()[0];return[v.childValue||v.value]},populate:function(items){this.options.items=BI.flatten(items),this.combo.populate(items),this._createValueMap()}}),BI.TextValueDownListCombo.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.text_value_down_list_combo",BI.TextValueDownListCombo),BI.DownListSelectTextTrigger=BI.inherit(BI.Trigger,{_defaultConfig:function(){return BI.extend(BI.DownListSelectTextTrigger.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-down-list-select-text-trigger",height:24,text:""})},_init:function(){BI.DownListSelectTextTrigger.superclass._init.apply(this,arguments);var o=this.options;this.trigger=BI.createWidget({type:"bi.select_text_trigger",element:this,height:o.height,items:this._formatItemArray(o.items),text:o.text,value:BI.isNull(o.value)?"":o.value.childValue||o.value.value})},_formatItemArray:function(){var sourceArray=BI.flatten(BI.deepClone(this.options.items)),targetArray=[];return BI.each(sourceArray,function(idx,item){BI.has(item,"el")?(BI.each(item.children,function(id,it){it.text=item.el.text+"("+it.text+")"}),targetArray=BI.concat(targetArray,item.children)):targetArray.push(item)}),targetArray},setValue:function(vals){this.trigger.setValue(vals.childValue||vals.value)},populate:function(items){this.trigger.populate(this._formatItemArray(items))}}),BI.shortcut("bi.down_list_select_text_trigger",BI.DownListSelectTextTrigger),!function(){BI.TimePopup=BI.inherit(BI.Widget,{props:{baseCls:"bi-date-time-popup",height:68},render:function(){var self=this,o=this.options;return{type:"bi.vtape",items:[{el:{type:"bi.center_adapt",cls:"bi-split-top",items:[{type:"bi.dynamic_date_time_select",value:o.value,ref:function(_ref){self.timeSelect=_ref}}]},hgap:10,height:44},{el:{type:"bi.grid",items:[[{type:"bi.text_button",cls:"bi-high-light bi-split-top",shadow:!0,text:BI.i18nText("BI-Basic_Clears"),listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.TimePopup.BUTTON_CLEAR_EVENT_CHANGE)}}]},{type:"bi.text_button",cls:"bi-split-left bi-split-right bi-high-light bi-split-top",shadow:!0,text:BI.i18nText("BI-Basic_Now"),listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.TimePopup.BUTTON_NOW_EVENT_CHANGE)}}]},{type:"bi.text_button",cls:"bi-high-light bi-split-top",shadow:!0,text:BI.i18nText("BI-Basic_OK"),listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.TimePopup.BUTTON_OK_EVENT_CHANGE)}}]}]]},height:24}]}},setValue:function(value){this._checkValueValid(value)?this.timeSelect.setValue():this.timeSelect.setValue({hour:value.hour,minute:value.minute,second:value.second})},getValue:function(){return this.timeSelect.getValue()},_checkValueValid:function(value){return BI.isNull(value)||BI.isEmptyObject(value)||BI.isEmptyString(value)}}),BI.TimePopup.BUTTON_OK_EVENT_CHANGE="BUTTON_OK_EVENT_CHANGE",BI.TimePopup.BUTTON_CLEAR_EVENT_CHANGE="BUTTON_CLEAR_EVENT_CHANGE",BI.TimePopup.BUTTON_NOW_EVENT_CHANGE="BUTTON_NOW_EVENT_CHANGE",BI.TimePopup.CALENDAR_EVENT_CHANGE="CALENDAR_EVENT_CHANGE",BI.shortcut("bi.time_popup",BI.TimePopup)}(),!function(){BI.TimeCombo=BI.inherit(BI.Single,{constants:{popupHeight:80,popupWidth:240,comboAdjustHeight:1,border:1},props:{baseCls:"bi-time-combo bi-border bi-border-radius bi-focus-shadow",width:78,height:22,format:"",allowEdit:!1},render:function(){var self=this,opts=this.options;this.storeTriggerValue="",this.storeValue=opts.value;var popup={type:"bi.time_popup",value:opts.value,listeners:[{eventName:BI.TimePopup.BUTTON_CLEAR_EVENT_CHANGE,action:function(){self.setValue(),self.hidePopupView(),self.fireEvent(BI.TimeCombo.EVENT_CONFIRM)}},{eventName:BI.TimePopup.BUTTON_OK_EVENT_CHANGE,action:function(){self.setValue(self.popup.getValue()),self.hidePopupView(),self.fireEvent(BI.TimeCombo.EVENT_CONFIRM)}},{eventName:BI.TimePopup.BUTTON_NOW_EVENT_CHANGE,action:function(){self._setNowTime()}}],ref:function(_ref){self.popup=_ref}};return{type:"bi.htape",items:[{type:"bi.absolute",items:[{el:{type:"bi.combo",container:opts.container,toggle:!1,isNeedAdjustHeight:!1,isNeedAdjustWidth:!1,el:{type:"bi.time_trigger",height:opts.height,allowEdit:opts.allowEdit,watermark:opts.watermark,format:opts.format,value:opts.value,ref:function(_ref){self.trigger=_ref},listeners:[{eventName:"EVENT_KEY_DOWN",action:function(){self.combo.isViewVisible()&&self.combo.hideView(),self.fireEvent(BI.TimeCombo.EVENT_KEY_DOWN,arguments)}},{eventName:"EVENT_STOP",action:function(){self.combo.isViewVisible()||self.combo.showView()}},{eventName:"EVENT_FOCUS",action:function(){self.storeTriggerValue=self.trigger.getKey(),self.combo.isViewVisible()||self.combo.showView(),self.fireEvent("EVENT_FOCUS")}},{eventName:"EVENT_BLUR",action:function(){self.fireEvent("EVENT_BLUR")}},{eventName:"EVENT_ERROR",action:function(){var date=BI.getDate();self.storeValue={hour:date.getHours(),minute:date.getMinutes(),second:date.getSeconds()},self.fireEvent("EVENT_ERROR")}},{eventName:"EVENT_VALID",action:function(){self.fireEvent("EVENT_VALID")}},{eventName:"EVENT_CHANGE",action:function(){self.fireEvent("EVENT_CHANGE")}},{eventName:"EVENT_CONFIRM",action:function(){if(!self.combo.isViewVisible()){var dateStore=self.storeTriggerValue,dateObj=self.trigger.getKey();BI.isNotEmptyString(dateObj)&&!BI.isEqual(dateObj,dateStore)?(self.storeValue=self.trigger.getValue(),self.setValue(self.trigger.getValue())):BI.isEmptyString(dateObj)&&(self.storeValue=null,self.trigger.setValue()),self.fireEvent("EVENT_CONFIRM")}}}]},adjustLength:this.constants.comboAdjustHeight,popup:{el:popup,width:this.constants.popupWidth,stopPropagation:!1},hideChecker:function(e){return 0===self.triggerBtn.element.find(e.target).length},listeners:[{eventName:BI.Combo.EVENT_BEFORE_POPUPVIEW,action:function(){self.popup.setValue(self.storeValue),self.fireEvent(BI.TimeCombo.EVENT_BEFORE_POPUPVIEW)}}],ref:function(_ref){self.combo=_ref}},top:0,left:0,right:22,bottom:0},{el:{type:"bi.icon_button",cls:"bi-trigger-icon-button time-font icon-size-16",width:22,height:22,listeners:[{eventName:BI.IconButton.EVENT_CHANGE,action:function(){self.combo.isViewVisible()||self.combo.showView()}}],ref:function(_ref){self.triggerBtn=_ref}},top:0,right:0}]}]}},setValue:function(v){this.storeValue=v,this.trigger.setValue(v)},getValue:function(){return this.storeValue},hidePopupView:function(){this.combo.hideView()},_setNowTime:function(){var date=BI.getDate(),nowTome={hour:date.getHours(),minute:date.getMinutes(),second:date.getSeconds()};this.setValue(nowTome),this.hidePopupView(),this.fireEvent(BI.TimeCombo.EVENT_CONFIRM)}}),BI.TimeCombo.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.TimeCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.TimeCombo.EVENT_CHANGE="EVENT_CHANGE",BI.TimeCombo.EVENT_VALID="EVENT_VALID",BI.TimeCombo.EVENT_ERROR="EVENT_ERROR",BI.TimeCombo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.time_combo",BI.TimeCombo)}(),!function(){BI.TimeTrigger=BI.inherit(BI.Trigger,{_const:{COMPARE_FORMAT:"%H:%M:%S",COMPLETE_COMPARE_FORMAT:"%Y-%M-%d %H:%M:%S %P",FORMAT_ARRAY:["%H:%M:%S","%I:%M:%S","%l:%M:%S","%k:%M:%S","%l:%M:%S %p","%l:%M:%S %P","%H:%M:%S %p","%H:%M:%S %P","%l:%M","%k:%M","%I:%M","%H:%M","%M:%S"],DEFAULT_DATE_STRING:"2000-01-01"},props:{extraCls:"bi-time-trigger",value:{},format:"",allowEdit:!1},render:function(){var self=this,o=this.options;return this.storeTriggerValue="",this.storeValue=o.value,{type:"bi.absolute",items:[{el:{type:"bi.sign_editor",height:o.height,validationChecker:function(v){return self._dateCheck(v)},quitChecker:function(){return!1},ref:function(_ref){self.editor=_ref},value:this._formatValue(o.value),hgap:4,allowBlank:!0,watermark:BI.isKey(o.watermark)?o.watermark:BI.i18nText("BI-Basic_Unrestricted"),title:BI.bind(this._getTitle,this),listeners:[{eventName:"EVENT_KEY_DOWN",action:function(){self.fireEvent("EVENT_KEY_DOWN",arguments)}},{eventName:"EVENT_FOCUS",action:function(){self.storeTriggerValue=self.getKey(),self.fireEvent("EVENT_FOCUS")}},{eventName:"EVENT_BLUR",action:function(){self.fireEvent("EVENT_BLUR")}},{eventName:"EVENT_STOP",action:function(){self.fireEvent("EVENT_STOP")}},{eventName:"EVENT_VALID",action:function(){self.fireEvent("EVENT_VALID")}},{eventName:"EVENT_ERROR",action:function(){self.fireEvent("EVENT_ERROR")}},{eventName:"EVENT_CONFIRM",action:function(){var value=self.editor.getValue();if(BI.isNotNull(value)&&self.editor.setState(value),BI.isNotEmptyString(value)&&!BI.isEqual(self.storeTriggerValue,self.getKey())){var date=value.match(/\d+/g);self.storeValue={hour:0|date[0],minute:0|date[1],second:0|date[2]}}self.fireEvent("EVENT_CONFIRM")}},{eventName:"EVENT_START",action:function(){self.fireEvent("EVENT_START")}},{eventName:"EVENT_CHANGE",action:function(){self.fireEvent("EVENT_CHANGE")}}]},left:0,right:0,top:0,bottom:0},{el:{type:"bi.text",invisible:o.allowEdit,cls:"show-text",title:BI.bind(this._getTitle,this),hgap:4},left:0,right:0,top:0,bottom:0}]}},_dateCheck:function(date){var c=this._const;return BI.any(c.FORMAT_ARRAY,function(idx,format){return BI.print(BI.parseDateTime(c.DEFAULT_DATE_STRING+" "+date,c.COMPLETE_COMPARE_FORMAT),format)===date})},_getTitle:function(){var storeValue=this.storeValue||{},date=BI.getDate();return BI.print(BI.getDate(date.getFullYear(),0,1,storeValue.hour,storeValue.minute,storeValue.second),this._getFormatString())},_getFormatString:function(){return this.options.format||this._const.COMPARE_FORMAT},_formatValue:function(v){var now=BI.getDate();return BI.isNotEmptyObject(v)?BI.print(BI.getDate(now.getFullYear(),now.getMonth(),now.getDay(),v.hour,v.minute,v.second),this._getFormatString()):""},getKey:function(){return this.editor.getValue()},setValue:function(v){this.storeValue=v,this.editor.setValue(this._formatValue(v))},getValue:function(){return this.storeValue}}),BI.shortcut("bi.time_trigger",BI.TimeTrigger)}(),BI.DateInterval=BI.inherit(BI.Single,{constants:{height:24,width:24,lgap:15,offset:0,timeErrorCls:"time-error"},_defaultConfig:function(){var conf=BI.DateInterval.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-date-interval",minDate:"1900-01-01",maxDate:"2099-12-31"})},_init:function(){var self=this,o=this.options;BI.DateInterval.superclass._init.apply(this,arguments),o.value=o.value||{},this.left=this._createCombo(o.value.start),this.right=this._createCombo(o.value.end),this.label=BI.createWidget({type:"bi.label",height:this.constants.height,width:this.constants.width,text:"-"}),BI.createWidget({element:self,type:"bi.center",height:this.constants.height,items:[{type:"bi.absolute",items:[{el:self.left,left:this.constants.offset,right:this.constants.width/2,top:0,bottom:0}]},{type:"bi.absolute",items:[{el:self.right,left:this.constants.width/2,right:this.constants.offset,top:0,bottom:0}]}]}),BI.createWidget({type:"bi.horizontal_auto",element:this,items:[self.label]})},_createCombo:function(v){var self=this,o=this.options,combo=BI.createWidget({type:"bi.dynamic_date_combo",behaviors:o.behaviors,value:v});return combo.on(BI.DynamicDateCombo.EVENT_ERROR,function(){self._clearTitle(),BI.Bubbles.hide("error"),self.element.removeClass(self.constants.timeErrorCls),self.fireEvent(BI.DateInterval.EVENT_ERROR)}),combo.on(BI.DynamicDateCombo.EVENT_VALID,function(){BI.Bubbles.hide("error");var smallDate=self.left.getKey(),bigDate=self.right.getKey();self._check(smallDate,bigDate)&&self._compare(smallDate,bigDate)?(self._setTitle(BI.i18nText("BI-Time_Interval_Error_Text")),self.element.addClass(self.constants.timeErrorCls),BI.Bubbles.show("error",BI.i18nText("BI-Time_Interval_Error_Text"),self,{offsetStyle:"center"}),self.fireEvent(BI.DateInterval.EVENT_ERROR)):(self._clearTitle(),self.element.removeClass(self.constants.timeErrorCls))}),combo.on(BI.DynamicDateCombo.EVENT_FOCUS,function(){BI.Bubbles.hide("error");var smallDate=self.left.getKey(),bigDate=self.right.getKey();self._check(smallDate,bigDate)&&self._compare(smallDate,bigDate)?(self._setTitle(BI.i18nText("BI-Time_Interval_Error_Text")),self.element.addClass(self.constants.timeErrorCls),BI.Bubbles.show("error",BI.i18nText("BI-Time_Interval_Error_Text"),self,{offsetStyle:"center"}),self.fireEvent(BI.DateInterval.EVENT_ERROR)):(self._clearTitle(),self.element.removeClass(self.constants.timeErrorCls))}),combo.on(BI.DynamicDateCombo.EVENT_BEFORE_POPUPVIEW,function(){self.left.hidePopupView(),self.right.hidePopupView()}),combo.on(BI.DynamicDateCombo.EVENT_CONFIRM,function(){BI.Bubbles.hide("error");var smallDate=self.left.getKey(),bigDate=self.right.getKey();self._check(smallDate,bigDate)&&self._compare(smallDate,bigDate)?(self._setTitle(BI.i18nText("BI-Time_Interval_Error_Text")),self.element.addClass(self.constants.timeErrorCls),self.fireEvent(BI.DateInterval.EVENT_ERROR)):(self._clearTitle(),self.element.removeClass(self.constants.timeErrorCls),self.fireEvent(BI.DateInterval.EVENT_CHANGE))}),combo},_dateCheck:function(date){return BI.print(BI.parseDateTime(date,"%Y-%x-%d"),"%Y-%x-%d")===date||BI.print(BI.parseDateTime(date,"%Y-%X-%d"),"%Y-%X-%d")===date||BI.print(BI.parseDateTime(date,"%Y-%x-%e"),"%Y-%x-%e")===date||BI.print(BI.parseDateTime(date,"%Y-%X-%e"),"%Y-%X-%e")===date},_checkVoid:function(obj){var o=this.options;return!BI.checkDateVoid(obj.year,obj.month,obj.day,o.minDate,o.maxDate)[0]},_check:function(smallDate,bigDate){var smallObj=smallDate.match(/\d+/g),bigObj=bigDate.match(/\d+/g);return this._dateCheck(smallDate)&&BI.checkDateLegal(smallDate)&&this._checkVoid({year:smallObj[0],month:smallObj[1],day:smallObj[2]})&&this._dateCheck(bigDate)&&BI.checkDateLegal(bigDate)&&this._checkVoid({year:bigObj[0],month:bigObj[1],day:bigObj[2]})},_compare:function(smallDate,bigDate){return smallDate=BI.print(BI.parseDateTime(smallDate,"%Y-%X-%d"),"%Y-%X-%d"),bigDate=BI.print(BI.parseDateTime(bigDate,"%Y-%X-%d"),"%Y-%X-%d"),BI.isNotNull(smallDate)&&BI.isNotNull(bigDate)&&smallDate>bigDate},_setTitle:function(v){this.left.setTitle(v),this.right.setTitle(v),this.label.setTitle(v)},_clearTitle:function(){this.left.setTitle(""),this.right.setTitle(""),this.label.setTitle("")},setValue:function(date){date=date||{},this.left.setValue(date.start),this.right.setValue(date.end)},getValue:function(){return{start:this.left.getValue(),end:this.right.getValue()}}}),BI.DateInterval.EVENT_VALID="EVENT_VALID",BI.DateInterval.EVENT_ERROR="EVENT_ERROR",BI.DateInterval.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.date_interval",BI.DateInterval),BI.TimeInterval=BI.inherit(BI.Single,{constants:{height:24,width:24,lgap:15,offset:0,timeErrorCls:"time-error"},_defaultConfig:function(){var conf=BI.TimeInterval.superclass._defaultConfig.apply(this,arguments);return BI.extend(conf,{extraCls:"bi-time-interval",minDate:"1900-01-01",maxDate:"2099-12-31"})},_init:function(){var self=this,o=this.options;BI.TimeInterval.superclass._init.apply(this,arguments),o.value=o.value||{},this.left=this._createCombo(o.value.start),this.right=this._createCombo(o.value.end),this.label=BI.createWidget({type:"bi.label",height:this.constants.height,width:this.constants.width,text:"-"}),BI.createWidget({element:self,type:"bi.center",height:this.constants.height,items:[{type:"bi.absolute",items:[{el:self.left,left:this.constants.offset,right:this.constants.width/2,top:0,bottom:0}]},{type:"bi.absolute",items:[{el:self.right,left:this.constants.width/2,right:this.constants.offset,top:0,bottom:0}]}]}),BI.createWidget({type:"bi.horizontal_auto",element:this,items:[self.label]})},_createCombo:function(v){var self=this,o=this.options,combo=BI.createWidget({type:"bi.dynamic_date_time_combo",behaviors:o.behaviors,value:v});return combo.on(BI.DynamicDateTimeCombo.EVENT_ERROR,function(){self._clearTitle(),BI.Bubbles.hide("error"),self.element.removeClass(self.constants.timeErrorCls),self.fireEvent(BI.TimeInterval.EVENT_ERROR)}),combo.on(BI.DynamicDateTimeCombo.EVENT_VALID,function(){BI.Bubbles.hide("error");var smallDate=self.left.getKey(),bigDate=self.right.getKey();self.left.isValid()&&self.right.isValid()&&self._check(smallDate,bigDate)&&self._compare(smallDate,bigDate)?(self._setTitle(BI.i18nText("BI-Time_Interval_Error_Text")),self.element.addClass(self.constants.timeErrorCls),BI.Bubbles.show("error",BI.i18nText("BI-Time_Interval_Error_Text"),self,{offsetStyle:"center"}),self.fireEvent(BI.TimeInterval.EVENT_ERROR)):(self._clearTitle(),self.element.removeClass(self.constants.timeErrorCls))}),combo.on(BI.DynamicDateTimeCombo.EVENT_FOCUS,function(){BI.Bubbles.hide("error");var smallDate=self.left.getKey(),bigDate=self.right.getKey();self.left.isValid()&&self.right.isValid()&&self._check(smallDate,bigDate)&&self._compare(smallDate,bigDate)?(self._setTitle(BI.i18nText("BI-Time_Interval_Error_Text")),self.element.addClass(self.constants.timeErrorCls),BI.Bubbles.show("error",BI.i18nText("BI-Time_Interval_Error_Text"),self,{offsetStyle:"center"}),self.fireEvent(BI.TimeInterval.EVENT_ERROR)):(self._clearTitle(),self.element.removeClass(self.constants.timeErrorCls))}),combo.on(BI.DynamicDateTimeCombo.EVENT_BEFORE_POPUPVIEW,function(){self.left.hidePopupView(),self.right.hidePopupView()}),combo.on(BI.DynamicDateTimeCombo.EVENT_CONFIRM,function(){BI.Bubbles.hide("error");var smallDate=self.left.getKey(),bigDate=self.right.getKey();self.left.isValid()&&self.right.isValid()&&self._check(smallDate,bigDate)&&self._compare(smallDate,bigDate)?(self._setTitle(BI.i18nText("BI-Time_Interval_Error_Text")),self.element.addClass(self.constants.timeErrorCls),self.fireEvent(BI.TimeInterval.EVENT_ERROR)):(self._clearTitle(),self.element.removeClass(self.constants.timeErrorCls),self.fireEvent(BI.TimeInterval.EVENT_CHANGE))}),combo},_dateCheck:function(date){return BI.print(BI.parseDateTime(date,"%Y-%x-%d %H:%M:%S"),"%Y-%x-%d %H:%M:%S")===date||BI.print(BI.parseDateTime(date,"%Y-%X-%d %H:%M:%S"),"%Y-%X-%d %H:%M:%S")===date||BI.print(BI.parseDateTime(date,"%Y-%x-%e %H:%M:%S"),"%Y-%x-%e %H:%M:%S")===date||BI.print(BI.parseDateTime(date,"%Y-%X-%e %H:%M:%S"),"%Y-%X-%e %H:%M:%S")===date},_checkVoid:function(obj){var o=this.options;return!BI.checkDateVoid(obj.year,obj.month,obj.day,o.minDate,o.maxDate)[0]},_check:function(smallDate,bigDate){var smallObj=smallDate.match(/\d+/g),bigObj=bigDate.match(/\d+/g);return this._dateCheck(smallDate)&&BI.checkDateLegal(smallDate)&&this._checkVoid({year:smallObj[0],month:smallObj[1],day:smallObj[2]})&&this._dateCheck(bigDate)&&BI.checkDateLegal(bigDate)&&this._checkVoid({year:bigObj[0],month:bigObj[1],day:bigObj[2]})},_compare:function(smallDate,bigDate){return smallDate=BI.print(BI.parseDateTime(smallDate,"%Y-%X-%d %H:%M:%S"),"%Y-%X-%d %H:%M:%S"),bigDate=BI.print(BI.parseDateTime(bigDate,"%Y-%X-%d %H:%M:%S"),"%Y-%X-%d %H:%M:%S"),BI.isNotNull(smallDate)&&BI.isNotNull(bigDate)&&smallDate>bigDate},_setTitle:function(v){this.left.setTitle(v),this.right.setTitle(v),this.label.setTitle(v)},_clearTitle:function(){this.left.setTitle(""),this.right.setTitle(""),this.label.setTitle("")},setValue:function(date){date=date||{},this.left.setValue(date.start),this.right.setValue(date.end)},getValue:function(){return{start:this.left.getValue(),end:this.right.getValue()}}}),BI.TimeInterval.EVENT_VALID="EVENT_VALID",BI.TimeInterval.EVENT_ERROR="EVENT_ERROR",BI.TimeInterval.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.time_interval",BI.TimeInterval),!function(){BI.TimePeriods=BI.inherit(BI.Single,{constants:{height:24,width:24,lgap:15,offset:0},props:{extraCls:"bi-time-interval",value:{}},render:function(){var self=this,o=this.options;return{type:"bi.absolute",height:this.constants.height,items:[{el:{type:"bi.horizontal_auto",items:[{type:"bi.label",height:this.constants.height,width:this.constants.width,text:"-",ref:function(_ref){self.label=_ref}}]},top:0,left:0,right:0,bottom:0},{el:{type:"bi.center",height:this.constants.height,items:[{type:"bi.absolute",items:[{el:BI.extend({ref:function(_ref){self.left=_ref}},this._createCombo(o.value.start)),left:this.constants.offset,right:this.constants.width/2,top:0,bottom:0}]},{type:"bi.absolute",items:[{el:BI.extend({ref:function(_ref){self.right=_ref}},this._createCombo(o.value.end)),left:this.constants.width/2,right:this.constants.offset,top:0,bottom:0}]}]},top:0,left:0,right:0,bottom:0}]}},_createCombo:function(v){var self=this;return{type:"bi.time_combo",value:v,listeners:[{eventName:BI.TimeCombo.EVENT_BEFORE_POPUPVIEW,action:function(){self.left.hidePopupView(),self.right.hidePopupView()}},{eventName:BI.TimeCombo.EVENT_CHANGE,action:function(){self.fireEvent(BI.TimePeriods.EVENT_CHANGE)}},{eventName:BI.TimeCombo.EVENT_CONFIRM,action:function(){self.fireEvent(BI.TimePeriods.EVENT_CONFIRM)}}]}},setValue:function(date){date=date||{},this.left.setValue(date.start),this.right.setValue(date.end)},getValue:function(){return{start:this.left.getValue(),end:this.right.getValue()}}}),BI.TimePeriods.EVENT_CONFIRM="EVENT_CONFIRM",BI.TimePeriods.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.time_periods",BI.TimePeriods)}(),BI.DynamicYearCard=BI.inherit(BI.Widget,{props:{baseCls:"bi-year-card"},render:function(){var self=this;return{type:"bi.vertical",items:[{type:"bi.label",text:BI.i18nText("BI-Multi_Date_Relative_Current_Time"),textAlign:"left",height:24},{type:"bi.dynamic_date_param_item",ref:function(){self.item=this},listeners:[{eventName:"EVENT_CHANGE",action:function(){self.fireEvent("EVENT_CHANGE")}}]}],vgap:10,hgap:10}},_createValue:function(type,v){return{dateType:type,value:Math.abs(v),offset:v>0?1:0}},setValue:function(v){v=v||{year:0},this.item.setValue(this._createValue(BI.DynamicDateCard.TYPE.YEAR,v.year))},getValue:function(){var value=this.item.getValue();return{year:0===value.offset?-value.value:value.value}}}),BI.DynamicYearCard.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.dynamic_year_card",BI.DynamicYearCard),BI.StaticYearCard=BI.inherit(BI.Widget,{_defaultConfig:function(){return BI.extend(BI.StaticYearCard.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-year-card",behaviors:{},min:"1900-01-01",max:"2099-12-31"})},_createYearCalendar:function(v){var o=this.options,y=this._year,calendar=BI.createWidget({type:"bi.year_calendar",behaviors:o.behaviors,min:o.min,max:o.max,logic:{dynamic:!0},year:y+12*v});return calendar.setValue(this._year),calendar},_init:function(){BI.StaticYearCard.superclass._init.apply(this,arguments);var self=this,o=this.options;this.selectedYear=this._year=BI.getDate().getFullYear(),this.backBtn=BI.createWidget({type:"bi.icon_button",cls:"pre-page-h-font",width:25,height:25,value:-1,listeners:[{eventName:BI.IconButton.EVENT_CHANGE,action:function(){self.navigation.setSelect(self.navigation.getSelect()-1),self._checkLeftValid(),self._checkRightValid()}}]}),this.preBtn=BI.createWidget({type:"bi.icon_button",cls:"next-page-h-font",width:25,height:25,value:1,listeners:[{eventName:BI.IconButton.EVENT_CHANGE,action:function(){self.navigation.setSelect(self.navigation.getSelect()+1),self._checkLeftValid(),self._checkRightValid()}}]}),this.navigation=BI.createWidget({type:"bi.navigation",direction:"top",element:this,single:!0,logic:{dynamic:!0},tab:{type:"bi.htape",cls:"bi-split-top bi-split-bottom",height:30,items:[{el:{type:"bi.center_adapt",items:[self.backBtn]},width:25},{type:"bi.layout"},{el:{type:"bi.center_adapt",items:[self.preBtn]},width:25}]},cardCreator:BI.bind(this._createYearCalendar,this),afterCardShow:function(){this.setValue(self.selectedYear);var calendar=this.getSelectedCard();self.backBtn.setEnable(!calendar.isFrontYear()),self.preBtn.setEnable(!calendar.isFinalYear())}}),this.navigation.on(BI.Navigation.EVENT_CHANGE,function(){self.selectedYear=this.getValue(),self.fireEvent(BI.Controller.EVENT_CHANGE,arguments),self.fireEvent(BI.StaticYearCard.EVENT_CHANGE,self.selectedYear)}),BI.isKey(o.value)&&this.setValue(o.value)},_checkLeftValid:function(){var o=this.options,valid=!0;return this.backBtn.setEnable(valid),valid},_checkRightValid:function(){var o=this.options,valid=!0;return this.preBtn.setEnable(valid),valid},getValue:function(){return{year:this.selectedYear}},setValue:function(obj){var o=this.options;obj=obj||{};var v=obj.year;BI.checkDateVoid(v,1,1,o.min,o.max)[0]?(v=BI.getDate().getFullYear(),this.selectedYear="",this.navigation.setSelect(BI.YearCalendar.getPageByYear(v)),this.navigation.setValue("")):(this.selectedYear=BI.parseInt(v),this.navigation.setSelect(BI.YearCalendar.getPageByYear(v)),this.navigation.setValue(this.selectedYear)),this._checkLeftValid(),this._checkRightValid()}}),BI.StaticYearCard.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.static_year_card",BI.StaticYearCard),BI.DynamicYearCombo=BI.inherit(BI.Widget,{props:{baseCls:"bi-year-combo bi-border bi-focus-shadow",behaviors:{},min:"1900-01-01",max:"2099-12-31",height:22},_init:function(){BI.DynamicYearCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.storeValue=o.value,this.trigger=BI.createWidget({type:"bi.dynamic_year_trigger",min:o.min,max:o.max,height:o.height,value:o.value||""}),this.trigger.on(BI.DynamicYearTrigger.EVENT_FOCUS,function(){self.storeTriggerValue=this.getKey()}),this.trigger.on(BI.DynamicYearTrigger.EVENT_START,function(){self.combo.isViewVisible()&&self.combo.hideView()}),this.trigger.on(BI.DynamicYearTrigger.EVENT_STOP,function(){self.combo.showView()}),this.trigger.on(BI.DynamicYearTrigger.EVENT_ERROR,function(){self.combo.isViewVisible()&&self.combo.hideView()}),this.trigger.on(BI.DynamicYearTrigger.EVENT_CONFIRM,function(){self.combo.isViewVisible()||(this.getKey()&&this.getKey()!==self.storeTriggerValue?(self.storeValue=self.trigger.getValue(),self.setValue(self.storeValue)):this.getKey()||(self.storeValue=null,self.setValue()),self._checkDynamicValue(self.storeValue),self.fireEvent(BI.DynamicYearCombo.EVENT_CONFIRM))}),this.combo=BI.createWidget({type:"bi.combo",container:o.container,isNeedAdjustHeight:!1,isNeedAdjustWidth:!1,el:this.trigger,popup:{minWidth:85,stopPropagation:!1,el:{type:"bi.dynamic_year_popup",ref:function(){self.popup=this},listeners:[{eventName:BI.DynamicYearPopup.EVENT_CHANGE,action:function(){self.setValue(self.popup.getValue()),self.combo.hideView(),self.fireEvent(BI.DynamicYearCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicYearPopup.BUTTON_CLEAR_EVENT_CHANGE,action:function(){self.setValue(),self.combo.hideView(),self.fireEvent(BI.DynamicYearCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicYearPopup.BUTTON_lABEL_EVENT_CHANGE,action:function(){var date=BI.getDate();self.setValue({type:BI.DynamicYearCombo.Static,value:{year:date.getFullYear()}}),self.combo.hideView(),self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicYearPopup.BUTTON_OK_EVENT_CHANGE,action:function(){self.setValue(self.popup.getValue()),self.combo.hideView(),self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM)}}],behaviors:o.behaviors,min:o.min,max:o.max},value:o.value||""}}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){self.popup.setValue(self.storeValue),self.fireEvent(BI.DynamicYearCombo.EVENT_BEFORE_POPUPVIEW)}),BI.createWidget({type:"bi.htape",element:this,ref:function(){self.comboWrapper=this},items:[{el:{type:"bi.icon_button",cls:"bi-trigger-icon-button date-change-h-font",width:24,height:24,ref:function(){self.changeIcon=this}},width:24},this.combo]}),this._checkDynamicValue(o.value)},_checkDynamicValue:function(v){var type=null;switch(BI.isNotNull(v)&&(type=v.type),type){case BI.DynamicYearCombo.Dynamic:this.changeIcon.setVisible(!0),this.comboWrapper.attr("items")[0].width=24,this.comboWrapper.resize();break;default:this.comboWrapper.attr("items")[0].width=0,this.comboWrapper.resize(),this.changeIcon.setVisible(!1)}},setValue:function(v){this.storeValue=v,this.trigger.setValue(v),this._checkDynamicValue(v)},getValue:function(){return this.storeValue}}),BI.DynamicYearCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.DynamicYearCombo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.dynamic_year_combo",BI.DynamicYearCombo),BI.extend(BI.DynamicYearCombo,{Static:1,Dynamic:2}),BI.DynamicYearPopup=BI.inherit(BI.Widget,{constants:{tabHeight:30,buttonHeight:24},props:{baseCls:"bi-year-popup",behaviors:{},min:"1900-01-01",max:"2099-12-31",width:180,height:240},render:function(){var self=this,opts=this.options,c=this.constants;return this.storeValue={type:BI.DynamicYearCombo.Static},{type:"bi.vtape",items:[{el:this._getTabJson()},{el:{type:"bi.grid",items:[[{type:"bi.text_button",cls:"bi-split-top bi-high-light",textHeight:c.buttonHeight-1,shadow:!0,text:BI.i18nText("BI-Basic_Clear"),listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicYearPopup.BUTTON_CLEAR_EVENT_CHANGE)}}]},{type:"bi.text_button",textHeight:c.buttonHeight-1,cls:"bi-split-left bi-split-right bi-high-light bi-split-top",shadow:!0,text:BI.i18nText("BI-Basic_Current_Year"),ref:function(){self.textButton=this},listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicYearPopup.BUTTON_lABEL_EVENT_CHANGE)}}]},{type:"bi.text_button",cls:"bi-split-top bi-high-light",textHeight:c.buttonHeight-1,shadow:!0,text:BI.i18nText("BI-Basic_OK"),listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicYearPopup.BUTTON_OK_EVENT_CHANGE)}}]}]]},height:24}]}},_setInnerValue:function(){if(this.dateTab.getSelect()===BI.DynamicDateCombo.Static)this.textButton.setValue(BI.i18nText("BI-Basic_Current_Year")),this.textButton.setEnable(!0);else{var date=BI.DynamicDateHelper.getCalculation(this.dynamicPane.getValue());date=BI.print(date,"%Y"),this.textButton.setValue(date),this.textButton.setEnable(!1)}},_getTabJson:function(){var self=this,o=this.options;return{type:"bi.tab",ref:function(){ +self.dateTab=this},tab:{type:"bi.linear_segment",cls:"bi-split-bottom",height:this.constants.tabHeight,items:BI.createItems([{text:BI.i18nText("BI-Basic_Year_Fen"),value:BI.DynamicYearCombo.Static},{text:BI.i18nText("BI-Basic_Dynamic_Title"),value:BI.DynamicYearCombo.Dynamic}],{textAlign:"center"})},cardCreator:function(v){switch(v){case BI.DynamicYearCombo.Dynamic:return{type:"bi.dynamic_year_card",listeners:[{eventName:"EVENT_CHANGE",action:function(){self._setInnerValue(self.year,v)}}],ref:function(){self.dynamicPane=this}};case BI.DynamicYearCombo.Static:default:return{type:"bi.static_year_card",behaviors:o.behaviors,min:self.options.min,max:self.options.max,listeners:[{eventName:BI.StaticYearCard.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicYearPopup.EVENT_CHANGE)}}],ref:function(){self.year=this}}}},listeners:[{eventName:BI.Tab.EVENT_CHANGE,action:function(){var v=self.dateTab.getSelect();switch(v){case BI.DynamicYearCombo.Static:var date=BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue());self.year.setValue({year:date.getFullYear()}),self._setInnerValue();break;case BI.DynamicYearCombo.Dynamic:default:self.storeValue&&self.storeValue.type===BI.DynamicYearCombo.Dynamic?self.dynamicPane.setValue(self.storeValue.value):self.dynamicPane.setValue({year:0}),self._setInnerValue()}}}]}},setValue:function(v){this.storeValue=v;var self=this,type,value;switch(v=v||{},type=v.type||BI.DynamicDateCombo.Static,value=v.value||v,this.dateTab.setSelect(type),type){case BI.DynamicDateCombo.Dynamic:this.dynamicPane.setValue(value),self._setInnerValue();break;case BI.DynamicDateCombo.Static:default:this.year.setValue(value),this.textButton.setValue(BI.i18nText("BI-Basic_Current_Year")),this.textButton.setEnable(!0)}},getValue:function(){return{type:this.dateTab.getSelect(),value:this.dateTab.getValue()}}}),BI.DynamicYearPopup.BUTTON_CLEAR_EVENT_CHANGE="BUTTON_CLEAR_EVENT_CHANGE",BI.DynamicYearPopup.BUTTON_lABEL_EVENT_CHANGE="BUTTON_lABEL_EVENT_CHANGE",BI.DynamicYearPopup.BUTTON_OK_EVENT_CHANGE="BUTTON_OK_EVENT_CHANGE",BI.DynamicYearPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.dynamic_year_popup",BI.DynamicYearPopup),BI.DynamicYearTrigger=BI.inherit(BI.Trigger,{_const:{hgap:4,vgap:2},_defaultConfig:function(){return BI.extend(BI.DynamicYearTrigger.superclass._defaultConfig.apply(this,arguments),{extraCls:"bi-year-trigger",min:"1900-01-01",max:"2099-12-31",height:24})},beforeInit:function(callback){var o=this.options;o.title=BI.bind(this._titleCreator,this),callback()},_init:function(){BI.DynamicYearTrigger.superclass._init.apply(this,arguments);var self=this,o=this.options,c=this._const;this.editor=BI.createWidget({type:"bi.sign_editor",height:o.height,validationChecker:function(v){return""===v||BI.isPositiveInteger(v)&&!BI.checkDateVoid(v,1,1,o.min,o.max)[0]},quitChecker:function(v){return!1},hgap:c.hgap,vgap:c.vgap,watermark:BI.i18nText("BI-Basic_Unrestricted"),allowBlank:!0,errorText:function(){return BI.i18nText("BI-Year_Trigger_Invalid_Text")}}),this.editor.on(BI.SignEditor.EVENT_FOCUS,function(){self.fireEvent(BI.DynamicYearTrigger.EVENT_FOCUS)}),this.editor.on(BI.SignEditor.EVENT_STOP,function(){self.fireEvent(BI.DynamicYearTrigger.EVENT_STOP)}),this.editor.on(BI.SignEditor.EVENT_CONFIRM,function(){var value=self.editor.getValue();BI.isNotNull(value)&&self.editor.setValue(value),BI.isNotEmptyString(value)&&(self.storeValue={type:BI.DynamicDateCombo.Static,value:{year:value}}),self.fireEvent(BI.DynamicYearTrigger.EVENT_CONFIRM)}),this.editor.on(BI.SignEditor.EVENT_SPACE,function(){self.editor.isValid()&&self.editor.blur()}),this.editor.on(BI.SignEditor.EVENT_START,function(){self.fireEvent(BI.DynamicYearTrigger.EVENT_START)}),this.editor.on(BI.SignEditor.EVENT_ERROR,function(){self.fireEvent(BI.DynamicYearTrigger.EVENT_ERROR)}),BI.createWidget({element:this,type:"bi.htape",items:[{el:this.editor},{el:{type:"bi.text_button",baseCls:"bi-trigger-year-text",text:BI.i18nText("BI-Multi_Date_Year"),width:o.height},width:o.height},{el:{type:"bi.trigger_icon_button",width:o.height},width:o.height}]}),this.setValue(o.value)},_getText:function(obj){var value="";return BI.isNotNull(obj.year)&&0!==BI.parseInt(obj.year)&&(value+=Math.abs(obj.year)+BI.i18nText("BI-Basic_Year")+(obj.year<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),value},_setInnerValue:function(date,text){var dateStr=BI.print(date,"%Y");this.editor.setState(dateStr),this.editor.setValue(dateStr)},_titleCreator:function(){var storeValue=this.storeValue||{},type=storeValue.type||BI.DynamicDateCombo.Static,value=storeValue.value;if(!this.editor.isValid())return"";switch(type){case BI.DynamicDateCombo.Dynamic:var text=this._getText(value),date=BI.getDate();date=BI.DynamicDateHelper.getCalculation(value);var dateStr=BI.print(date,"%Y");return BI.isEmptyString(text)?dateStr:text+":"+dateStr;case BI.DynamicDateCombo.Static:default:return value=value||{},value.year}},setValue:function(v){var type,value,date=BI.getDate();switch(this.storeValue=v,BI.isNotNull(v)&&(type=v.type||BI.DynamicDateCombo.Static,value=v.value||v),type){case BI.DynamicDateCombo.Dynamic:var text=this._getText(value);date=BI.DynamicDateHelper.getCalculation(value),this._setInnerValue(date,text);break;case BI.DynamicDateCombo.Static:default:value=value||{},this.editor.setState(value.year),this.editor.setValue(value.year)}},getValue:function(){return this.storeValue},getKey:function(){return 0|this.editor.getValue()}}),BI.DynamicYearTrigger.EVENT_FOCUS="EVENT_FOCUS",BI.DynamicYearTrigger.EVENT_ERROR="EVENT_ERROR",BI.DynamicYearTrigger.EVENT_START="EVENT_START",BI.DynamicYearTrigger.EVENT_CONFIRM="EVENT_CONFIRM",BI.DynamicYearTrigger.EVENT_STOP="EVENT_STOP",BI.shortcut("bi.dynamic_year_trigger",BI.DynamicYearTrigger),BI.DynamicYearMonthCard=BI.inherit(BI.Widget,{props:{baseCls:"bi-year-month-card"},render:function(){var self=this;return{type:"bi.vertical",items:[{type:"bi.label",text:BI.i18nText("BI-Multi_Date_Relative_Current_Time"),textAlign:"left",height:24},{type:"bi.dynamic_date_param_item",ref:function(){self.year=this},listeners:[{eventName:"EVENT_CHANGE",action:function(){self.fireEvent("EVENT_CHANGE")}}]},{type:"bi.dynamic_date_param_item",dateType:BI.DynamicDateCard.TYPE.MONTH,ref:function(){self.month=this},listeners:[{eventName:"EVENT_CHANGE",action:function(){self.fireEvent("EVENT_CHANGE")}}]}],vgap:10,hgap:10}},_createValue:function(type,v){return{dateType:type,value:Math.abs(v),offset:v>0?1:0}},setValue:function(v){v=v||{year:0,month:0},this.year.setValue(this._createValue(BI.DynamicDateCard.TYPE.YEAR,v.year)),this.month.setValue(this._createValue(BI.DynamicDateCard.TYPE.MONTH,v.month))},getValue:function(){var year=this.year.getValue(),month=this.month.getValue();return{year:0===year.offset?-year.value:year.value,month:0===month.offset?-month.value:month.value}}}),BI.DynamicYearMonthCard.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.dynamic_year_month_card",BI.DynamicYearMonthCard),BI.StaticYearMonthCard=BI.inherit(BI.Widget,{props:{baseCls:"bi-static-year-month-card",behaviors:{}},_createMonths:function(){var self=this,month=[1,7,2,8,3,9,4,10,5,11,6,12],items=[];return items.push(month.slice(0,2)),items.push(month.slice(2,4)),items.push(month.slice(4,6)),items.push(month.slice(6,8)),items.push(month.slice(8,10)),items.push(month.slice(10,12)),BI.map(items,function(i,item){return BI.map(item,function(j,td){return{type:"bi.text_item",cls:"bi-list-item-select",textAlign:"center",whiteSpace:"nowrap",once:!1,forceSelected:!0,height:23,width:38,value:td,text:td,ref:function(_ref){self.monthMap[0===j?i:i+6]=_ref}}})})},render:function(){var self=this,o=this.options;return this.monthMap={},{type:"bi.vertical",items:[{type:"bi.year_picker",min:o.min,max:o.max,ref:function(){self.yearPicker=this},behaviors:o.behaviors,height:30,listeners:[{eventName:BI.YearPicker.EVENT_CHANGE,action:function(){var value=this.getValue();self._checkMonthStatus(value),self.setValue({year:value,month:self.selectedMonth})}}]},{type:"bi.button_group",cls:"bi-split-top",behaviors:o.behaviors,ref:function(){self.month=this},items:this._createMonths(),layouts:[BI.LogicFactory.createLogic("table",BI.extend({dynamic:!0},{columns:2,rows:6,columnSize:[.5,.5],rowSize:25})),{type:"bi.center_adapt",vgap:1,hgap:2}],value:o.value,listeners:[{eventName:BI.ButtonGroup.EVENT_CHANGE,action:function(){self.selectedYear=self.yearPicker.getValue(),self.selectedMonth=this.getValue()[0],self.fireEvent(BI.StaticYearMonthCard.EVENT_CHANGE)}}]}]}},mounted:function(){this._checkMonthStatus(this.selectedYear)},_checkMonthStatus:function(year){var o=this.options,minDate=BI.parseDateTime(o.min,"%Y-%X-%d"),maxDate=BI.parseDateTime(o.max,"%Y-%X-%d"),minYear=minDate.getFullYear(),maxYear=maxDate.getFullYear(),minMonth=0,maxMonth=11;minYear===year&&(minMonth=minDate.getMonth()),maxYear===year&&(maxMonth=maxDate.getMonth());var yearInvalid=yearmaxYear;BI.each(this.monthMap,function(month,obj){var monthInvalid=monthmaxMonth;obj.setEnable(!yearInvalid&&!monthInvalid)})},getValue:function(){return{year:this.selectedYear,month:this.selectedMonth}},setValue:function(obj){var o=this.options,newObj={};if(newObj.year=obj.year||0,newObj.month=obj.month||0,0===newObj.year||0===newObj.month||BI.checkDateVoid(newObj.year,newObj.month,1,o.min,o.max)[0]){var year=newObj.year||BI.getDate().getFullYear();this.selectedYear=year,this.selectedMonth="",this.yearPicker.setValue(year),this.month.setValue()}else this.selectedYear=BI.parseInt(newObj.year),this.selectedMonth=BI.parseInt(newObj.month),this.yearPicker.setValue(this.selectedYear),this.month.setValue(this.selectedMonth)}}),BI.StaticYearMonthCard.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.static_year_month_card",BI.StaticYearMonthCard),BI.DynamicYearMonthCombo=BI.inherit(BI.Single,{props:{baseCls:"bi-year-month-combo bi-border bi-focus-shadow",behaviors:{},minDate:"1900-01-01",maxDate:"2099-12-31",height:22},_init:function(){BI.DynamicYearMonthCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.storeValue=o.value,this.storeTriggerValue="",this.trigger=BI.createWidget({type:"bi.dynamic_year_month_trigger",min:o.minDate,max:o.maxDate,height:o.height,value:o.value||""}),this.trigger.on(BI.DynamicYearMonthTrigger.EVENT_KEY_DOWN,function(){self.combo.isViewVisible()&&self.combo.hideView()}),this.trigger.on(BI.DynamicYearMonthTrigger.EVENT_START,function(){self.combo.isViewVisible()&&self.combo.hideView()}),this.trigger.on(BI.DynamicYearMonthTrigger.EVENT_STOP,function(){self.combo.showView()}),this.trigger.on(BI.DynamicYearMonthTrigger.EVENT_ERROR,function(){self.combo.isViewVisible()&&self.combo.hideView(),self.fireEvent(BI.DynamicYearMonthCombo.EVENT_ERROR)}),this.trigger.on(BI.DynamicYearMonthTrigger.EVENT_VALID,function(){self.fireEvent(BI.DynamicYearMonthCombo.EVENT_VALID)}),this.trigger.on(BI.DynamicYearMonthTrigger.EVENT_CONFIRM,function(){var dateStore=self.storeTriggerValue,dateObj=self.trigger.getKey();BI.isNotEmptyString(dateObj)&&!BI.isEqual(dateObj,dateStore)&&(self.storeValue=self.trigger.getValue(),self.setValue(self.trigger.getValue())),self._checkDynamicValue(self.storeValue),self.fireEvent(BI.DynamicYearMonthCombo.EVENT_CONFIRM)}),this.trigger.on(BI.DynamicYearMonthTrigger.EVENT_FOCUS,function(){self.storeTriggerValue=self.trigger.getKey(),self.fireEvent(BI.DynamicYearMonthCombo.EVENT_FOCUS)}),this.combo=BI.createWidget({type:"bi.combo",container:o.container,isNeedAdjustHeight:!1,isNeedAdjustWidth:!1,el:this.trigger,popup:{minWidth:100,stopPropagation:!1,el:{type:"bi.dynamic_year_month_popup",ref:function(){self.popup=this},listeners:[{eventName:BI.DynamicYearMonthPopup.EVENT_CHANGE,action:function(){self.setValue(self.popup.getValue()),self.combo.hideView(),self.fireEvent(BI.DynamicYearMonthCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicYearMonthPopup.BUTTON_CLEAR_EVENT_CHANGE,action:function(){self.setValue(),self.combo.hideView(),self.fireEvent(BI.DynamicYearMonthCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicYearMonthPopup.BUTTON_lABEL_EVENT_CHANGE,action:function(){var date=BI.getDate();self.setValue({type:BI.DynamicYearMonthCombo.Static,value:{year:date.getFullYear(),month:date.getMonth()+1}}),self.combo.hideView(),self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicYearMonthPopup.BUTTON_OK_EVENT_CHANGE,action:function(){self.setValue(self.popup.getValue()),self.combo.hideView(),self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM)}}],behaviors:o.behaviors,min:o.minDate,max:o.maxDate},value:o.value||""}}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){self.popup.setValue(self.storeValue),self.fireEvent(BI.DynamicYearMonthCombo.EVENT_BEFORE_POPUPVIEW)}),BI.createWidget({type:"bi.htape",element:this,ref:function(){self.comboWrapper=this},items:[{el:{type:"bi.icon_button",cls:"bi-trigger-icon-button date-change-h-font",width:24,height:24,ref:function(){self.changeIcon=this}},width:24},this.combo]}),this._checkDynamicValue(o.value)},_checkDynamicValue:function(v){var type=null;switch(BI.isNotNull(v)&&(type=v.type),type){case BI.DynamicYearMonthCombo.Dynamic:this.changeIcon.setVisible(!0),this.comboWrapper.attr("items")[0].width=24,this.comboWrapper.resize();break;default:this.comboWrapper.attr("items")[0].width=0,this.comboWrapper.resize(),this.changeIcon.setVisible(!1)}},hideView:function(){this.combo.hideView()},setValue:function(v){this.storeValue=v,this.trigger.setValue(v),this._checkDynamicValue(v)},getValue:function(){return this.storeValue},getKey:function(){return this.trigger.getKey()},isValid:function(){return this.trigger.isValid()}}),BI.DynamicYearMonthCombo.EVENT_ERROR="EVENT_ERROR",BI.DynamicYearMonthCombo.EVENT_VALID="EVENT_VALID",BI.DynamicYearMonthCombo.EVENT_FOCUS="EVENT_FOCUS",BI.DynamicYearMonthCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.DynamicYearMonthCombo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.dynamic_year_month_combo",BI.DynamicYearMonthCombo),BI.extend(BI.DynamicYearMonthCombo,{Static:1,Dynamic:2}),BI.DynamicYearMonthPopup=BI.inherit(BI.Widget,{constants:{tabHeight:30,buttonHeight:24},props:{baseCls:"bi-year-month-popup",behaviors:{},min:"1900-01-01",max:"2099-12-31",width:180,height:240},render:function(){var self=this,opts=this.options,c=this.constants;return this.storeValue={type:BI.DynamicYearMonthCombo.Static},{type:"bi.vtape",items:[{el:this._getTabJson()},{el:{type:"bi.grid",items:[[{type:"bi.text_button",cls:"bi-split-top bi-high-light",textHeight:c.buttonHeight-1,shadow:!0,text:BI.i18nText("BI-Basic_Clear"),listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicYearMonthPopup.BUTTON_CLEAR_EVENT_CHANGE)}}]},{type:"bi.text_button",cls:"bi-split-left bi-split-right bi-high-light bi-split-top",textHeight:c.buttonHeight-1,shadow:!0,text:BI.i18nText("BI-Basic_Current_Month"),ref:function(){self.textButton=this},listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicYearMonthPopup.BUTTON_lABEL_EVENT_CHANGE)}}]},{type:"bi.text_button",cls:"bi-split-top bi-high-light",textHeight:c.buttonHeight-1,shadow:!0,text:BI.i18nText("BI-Basic_OK"),listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicYearMonthPopup.BUTTON_OK_EVENT_CHANGE)}}]}]]},height:24}]}},_setInnerValue:function(){if(this.dateTab.getSelect()===BI.DynamicDateCombo.Static)this.textButton.setValue(BI.i18nText("BI-Basic_Current_Month")),this.textButton.setEnable(!0);else{var date=BI.DynamicDateHelper.getCalculation(this.dynamicPane.getValue());date=BI.print(date,"%Y-%x"),this.textButton.setValue(date),this.textButton.setEnable(!1)}},_getTabJson:function(){var self=this,o=this.options;return{type:"bi.tab",ref:function(){self.dateTab=this},tab:{type:"bi.linear_segment",cls:"bi-split-bottom",height:this.constants.tabHeight,items:BI.createItems([{text:BI.i18nText("BI-Basic_Year_Month"),value:BI.DynamicYearCombo.Static},{text:BI.i18nText("BI-Basic_Dynamic_Title"),value:BI.DynamicYearCombo.Dynamic}],{textAlign:"center"})},cardCreator:function(v){switch(v){case BI.DynamicYearCombo.Dynamic:return{type:"bi.dynamic_year_month_card",listeners:[{eventName:"EVENT_CHANGE",action:function(){self._setInnerValue(self.year,v)}}],ref:function(){self.dynamicPane=this}};case BI.DynamicYearCombo.Static:default:return{type:"bi.static_year_month_card",behaviors:o.behaviors,min:self.options.min,max:self.options.max,listeners:[{eventName:BI.StaticYearMonthCard.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicYearMonthPopup.EVENT_CHANGE)}}],ref:function(){self.year=this}}}},listeners:[{eventName:BI.Tab.EVENT_CHANGE,action:function(){var v=self.dateTab.getSelect();switch(v){case BI.DynamicYearCombo.Static:var date=BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue());self.year.setValue({year:date.getFullYear(),month:date.getMonth()+1}),self._setInnerValue();break;case BI.DynamicYearCombo.Dynamic:default:self.storeValue&&self.storeValue.type===BI.DynamicYearCombo.Dynamic?self.dynamicPane.setValue(self.storeValue.value):self.dynamicPane.setValue({year:0}),self._setInnerValue()}}}]}},setValue:function(v){this.storeValue=v;var self=this,type,value;switch(v=v||{},type=v.type||BI.DynamicDateCombo.Static,value=v.value||v,this.dateTab.setSelect(type),type){case BI.DynamicDateCombo.Dynamic:this.dynamicPane.setValue(value),self._setInnerValue();break;case BI.DynamicDateCombo.Static:default:this.year.setValue(value),this.textButton.setValue(BI.i18nText("BI-Basic_Current_Month")),this.textButton.setEnable(!0)}},getValue:function(){return{type:this.dateTab.getSelect(),value:this.dateTab.getValue()}}}),BI.DynamicYearMonthPopup.BUTTON_CLEAR_EVENT_CHANGE="BUTTON_CLEAR_EVENT_CHANGE",BI.DynamicYearMonthPopup.BUTTON_lABEL_EVENT_CHANGE="BUTTON_lABEL_EVENT_CHANGE",BI.DynamicYearMonthPopup.BUTTON_OK_EVENT_CHANGE="BUTTON_OK_EVENT_CHANGE",BI.DynamicYearMonthPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.dynamic_year_month_popup",BI.DynamicYearMonthPopup),BI.DynamicYearMonthTrigger=BI.inherit(BI.Trigger,{_const:{hgap:4,vgap:2},props:{extraCls:"bi-year-month-trigger",min:"1900-01-01",max:"2099-12-31",height:22},beforeInit:function(callback){var o=this.options;o.title=BI.bind(this._titleCreator,this),callback()},_init:function(){BI.DynamicYearMonthTrigger.superclass._init.apply(this,arguments);var o=this.options;this.yearEditor=this._createEditor(!0),this.monthEditor=this._createEditor(!1),BI.createWidget({element:this,type:"bi.htape",items:[{type:"bi.center",items:[{type:"bi.htape",items:[this.yearEditor,{el:{type:"bi.text_button",text:BI.i18nText("BI-Multi_Date_Year"),width:o.height},width:o.height}]},{type:"bi.htape",items:[this.monthEditor,{el:{type:"bi.text_button",text:BI.i18nText("BI-Multi_Date_Month"),width:o.height},width:o.height}]}]},{el:{type:"bi.trigger_icon_button",width:o.height},width:o.height}]}),this.setValue(o.value)},_createEditor:function(isYear){var self=this,o=this.options,c=this._const,minDate=BI.parseDateTime(o.min,"%Y-%X-%d"),editor=BI.createWidget({type:"bi.sign_editor",height:o.height,validationChecker:function(v){return isYear?""===v||BI.isPositiveInteger(v)&&!BI.checkDateVoid(v,v===minDate.getFullYear()?minDate.getMonth()+1:1,1,o.min,o.max)[0]:""===v||BI.isPositiveInteger(v)&&v>=1&&v<=12&&!BI.checkDateVoid(BI.getDate().getFullYear(),v,1,o.min,o.max)[0]},quitChecker:function(){return!1},watermark:BI.i18nText("BI-Basic_Unrestricted"),errorText:function(v){return BI.i18nText("BI-Year_Trigger_Invalid_Text")},hgap:c.hgap,vgap:c.vgap,allowBlank:!0});return editor.on(BI.SignEditor.EVENT_KEY_DOWN,function(){self.fireEvent(BI.DynamicYearMonthTrigger.EVENT_KEY_DOWN)}),editor.on(BI.SignEditor.EVENT_FOCUS,function(){self.fireEvent(BI.DynamicYearMonthTrigger.EVENT_FOCUS)}),editor.on(BI.SignEditor.EVENT_STOP,function(){self.fireEvent(BI.DynamicYearMonthTrigger.EVENT_STOP)}),editor.on(BI.SignEditor.EVENT_CONFIRM,function(){self._doEditorConfirm(editor),self.fireEvent(BI.DynamicYearMonthTrigger.EVENT_CONFIRM)}),editor.on(BI.SignEditor.EVENT_SPACE,function(){editor.isValid()&&editor.blur()}),editor.on(BI.SignEditor.EVENT_START,function(){self.fireEvent(BI.DynamicYearMonthTrigger.EVENT_START)}),editor.on(BI.SignEditor.EVENT_ERROR,function(){self.fireEvent(BI.DynamicYearMonthTrigger.EVENT_ERROR)}),editor.on(BI.SignEditor.EVENT_VALID,function(){var year=self.yearEditor.getValue(),month=self.monthEditor.getValue();BI.isNotEmptyString(year)&&BI.isNotEmptyString(month)&&BI.isPositiveInteger(year)&&month>=1&&month<=12&&!BI.checkDateVoid(year,month,1,o.min,o.max)[0]&&self.fireEvent(BI.DynamicYearMonthTrigger.EVENT_VALID)}),editor.on(BI.SignEditor.EVENT_CHANGE,function(){isYear&&self._autoSwitch(editor)}),editor},_titleCreator:function(){var storeValue=this.storeValue||{},type=storeValue.type||BI.DynamicDateCombo.Static,value=storeValue.value;if(!this.monthEditor.isValid()||!this.yearEditor.isValid())return"";switch(type){case BI.DynamicDateCombo.Dynamic:var text=this._getText(value),date=BI.getDate();date=BI.DynamicDateHelper.getCalculation(value);var dateStr=BI.print(date,"%Y-%x");return BI.isEmptyString(text)?dateStr:text+":"+dateStr;case BI.DynamicDateCombo.Static:default:return value=value||{},this._getStaticTitle(value)}},_doEditorConfirm:function(editor){var value=editor.getValue();BI.isNotNull(value)&&editor.setValue(value);var monthValue=this.monthEditor.getValue();this.storeValue={type:BI.DynamicDateCombo.Static,value:{year:this.yearEditor.getValue(),month:BI.isEmptyString(this.monthEditor.getValue())?"":monthValue}}},_yearCheck:function(v){var date=BI.print(BI.parseDateTime(v,"%Y-%X-%d"),"%Y-%X-%d");return BI.print(BI.parseDateTime(v,"%Y"),"%Y")===v&&date>=this.options.min&&date<=this.options.max},_autoSwitch:function(editor){var v=editor.getValue();BI.isNotEmptyString(v)&&BI.checkDateLegal(v)&&4===v.length&&this._yearCheck(v)&&(this._doEditorConfirm(editor),this.fireEvent(BI.DynamicYearMonthTrigger.EVENT_CONFIRM),this.monthEditor.focus())},_getText:function(obj){var value="";return BI.isNotNull(obj.year)&&0!==BI.parseInt(obj.year)&&(value+=Math.abs(obj.year)+BI.i18nText("BI-Basic_Year")+(obj.year<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),BI.isNotNull(obj.month)&&0!==BI.parseInt(obj.month)&&(value+=Math.abs(obj.month)+BI.i18nText("BI-Basic_Month")+(obj.month<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),value},_setInnerValue:function(date,text){this.yearEditor.setValue(date.getFullYear()),this.monthEditor.setValue(date.getMonth()+1)},_getStaticTitle:function(value){value=value||{};var hasYear=!(BI.isNull(value.year)||BI.isEmptyString(value.year)),hasMonth=!(BI.isNull(value.month)||BI.isEmptyString(value.month));switch(hasYear<<1|hasMonth){case 0:return"";case 1:return value.month;case 2:return value.year;case 3:default:return value.year+"-"+value.month}},setValue:function(v){var type,value,date=BI.getDate();switch(this.storeValue=v,BI.isNotNull(v)&&(type=v.type||BI.DynamicDateCombo.Static,value=v.value||v),type){case BI.DynamicDateCombo.Dynamic:var text=this._getText(value);date=BI.DynamicDateHelper.getCalculation(value),this._setInnerValue(date,text);break;case BI.DynamicDateCombo.Static:default:value=value||{};var month=BI.isNull(value.month)?null:value.month;this.yearEditor.setValue(value.year),this.monthEditor.setValue(month)}},getValue:function(){return this.storeValue},getKey:function(){return this.yearEditor.getValue()+"-"+this.monthEditor.getValue()},isValid:function(){return this.yearEditor.isValid()&&this.monthEditor.isValid()}}),BI.DynamicYearMonthTrigger.EVENT_VALID="EVENT_VALID",BI.DynamicYearMonthTrigger.EVENT_FOCUS="EVENT_FOCUS",BI.DynamicYearMonthTrigger.EVENT_ERROR="EVENT_ERROR",BI.DynamicYearMonthTrigger.EVENT_START="EVENT_START",BI.DynamicYearMonthTrigger.EVENT_CONFIRM="EVENT_CONFIRM",BI.DynamicYearMonthTrigger.EVENT_STOP="EVENT_STOP",BI.DynamicYearMonthTrigger.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.shortcut("bi.dynamic_year_month_trigger",BI.DynamicYearMonthTrigger),BI.YearMonthInterval=BI.inherit(BI.Single,{constants:{height:24,width:25,lgap:15,offset:-15,timeErrorCls:"time-error"},props:{extraCls:"bi-year-month-interval",minDate:"1900-01-01",maxDate:"2099-12-31"},_init:function(){var self=this,o=this.options;BI.YearMonthInterval.superclass._init.apply(this,arguments),o.value=o.value||{},this.left=this._createCombo(o.value.start),this.right=this._createCombo(o.value.end),this.label=BI.createWidget({type:"bi.label",height:this.constants.height,width:this.constants.width,text:"-"}),BI.createWidget({element:self,type:"bi.center",hgap:15,height:this.constants.height,items:[{type:"bi.absolute",items:[{el:self.left,left:this.constants.offset,right:0,top:0,bottom:0}]},{type:"bi.absolute",items:[{el:self.right,left:0,right:this.constants.offset,top:0,bottom:0}]}]}),BI.createWidget({type:"bi.horizontal_auto",element:this,items:[self.label]})},_createCombo:function(v){var self=this,o=this.options,combo=BI.createWidget({type:"bi.dynamic_year_month_combo",behaviors:o.behaviors,value:v,listeners:[{eventName:BI.DynamicYearMonthCombo.EVENT_BEFORE_POPUPVIEW,action:function(){self.fireEvent(BI.YearMonthInterval.EVENT_BEFORE_POPUPVIEW)}}]});return combo.on(BI.DynamicYearMonthCombo.EVENT_ERROR,function(){self._clearTitle(),BI.Bubbles.hide("error"),self.element.removeClass(self.constants.timeErrorCls),self.fireEvent(BI.YearMonthInterval.EVENT_ERROR)}),combo.on(BI.DynamicYearMonthCombo.EVENT_VALID,function(){self._checkValid()}),combo.on(BI.DynamicYearMonthCombo.EVENT_FOCUS,function(){self._checkValid()}),combo.on(BI.DynamicYearMonthCombo.EVENT_BEFORE_POPUPVIEW,function(){self.left.hideView(),self.right.hideView()}),combo.on(BI.DynamicYearMonthCombo.EVENT_CONFIRM,function(){BI.Bubbles.hide("error");var smallDate=self.left.getKey(),bigDate=self.right.getKey();self.left.isValid()&&self.right.isValid()&&self._check(smallDate,bigDate)&&self._compare(smallDate,bigDate)?(self._setTitle(BI.i18nText("BI-Time_Interval_Error_Text")),self.element.addClass(self.constants.timeErrorCls),self.fireEvent(BI.YearMonthInterval.EVENT_ERROR)):(self._clearTitle(),self.element.removeClass(self.constants.timeErrorCls),self.fireEvent(BI.YearMonthInterval.EVENT_CHANGE))}),combo},_dateCheck:function(date){return BI.print(BI.parseDateTime(date,"%Y-%x"),"%Y-%x")===date||BI.print(BI.parseDateTime(date,"%Y-%X"),"%Y-%X")===date},_checkVoid:function(obj){var o=this.options;return!BI.checkDateVoid(obj.year,obj.month,1,o.minDate,o.maxDate)[0]},_check:function(smallDate,bigDate){var smallObj=smallDate.match(/\d+/g),bigObj=bigDate.match(/\d+/g),smallDate4Check="";BI.isNotNull(smallObj)&&(smallDate4Check=(smallObj[0]||"")+"-"+(smallObj[1]||1));var bigDate4Check="";return BI.isNotNull(bigObj)&&(bigDate4Check=(bigObj[0]||"")+"-"+(bigObj[1]||1)),this._dateCheck(smallDate4Check)&&BI.checkDateLegal(smallDate)&&this._checkVoid({year:smallObj[0],month:smallObj[1],day:1})&&this._dateCheck(bigDate4Check)&&BI.checkDateLegal(bigDate)&&this._checkVoid({year:bigObj[0],month:bigObj[1],day:1})},_compare:function(smallDate,bigDate){return smallDate=BI.print(BI.parseDateTime(smallDate,"%Y-%X"),"%Y-%X"),bigDate=BI.print(BI.parseDateTime(bigDate,"%Y-%X"),"%Y-%X"),BI.isNotNull(smallDate)&&BI.isNotNull(bigDate)&&smallDate>bigDate},_setTitle:function(v){this.setTitle(v)},_clearTitle:function(){this.setTitle("")},_checkValid:function(){var self=this;BI.Bubbles.hide("error");var smallDate=self.left.getKey(),bigDate=self.right.getKey();self.left.isValid()&&self.right.isValid()&&self._check(smallDate,bigDate)&&self._compare(smallDate,bigDate)?(self._setTitle(BI.i18nText("BI-Time_Interval_Error_Text")),self.element.addClass(self.constants.timeErrorCls),BI.Bubbles.show("error",BI.i18nText("BI-Time_Interval_Error_Text"),self,{offsetStyle:"center"}),self.fireEvent(BI.YearMonthInterval.EVENT_ERROR)):(self._clearTitle(),self.element.removeClass(self.constants.timeErrorCls))},setValue:function(date){date=date||{},this.left.setValue(date.start),this.right.setValue(date.end),this._checkValid()},getValue:function(){return{start:this.left.getValue(),end:this.right.getValue()}}}),BI.YearMonthInterval.EVENT_VALID="EVENT_VALID",BI.YearMonthInterval.EVENT_ERROR="EVENT_ERROR",BI.YearMonthInterval.EVENT_CHANGE="EVENT_CHANGE",BI.YearMonthInterval.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.year_month_interval",BI.YearMonthInterval),BI.DynamicYearQuarterCard=BI.inherit(BI.Widget,{props:{baseCls:"bi-year-month-card"},render:function(){var self=this;return{type:"bi.vertical",items:[{type:"bi.label",text:BI.i18nText("BI-Multi_Date_Relative_Current_Time"),textAlign:"left",height:24},{type:"bi.dynamic_date_param_item",ref:function(){self.year=this},listeners:[{eventName:"EVENT_CHANGE",action:function(){self.fireEvent("EVENT_CHANGE")}}]},{type:"bi.dynamic_date_param_item",dateType:BI.DynamicDateCard.TYPE.QUARTER,ref:function(){self.quarter=this},listeners:[{eventName:"EVENT_CHANGE",action:function(){self.fireEvent("EVENT_CHANGE")}}]}],vgap:10,hgap:10}},_createValue:function(type,v){return{dateType:type,value:Math.abs(v),offset:v>0?1:0}},setValue:function(v){v=v||{year:0,month:0},this.year.setValue(this._createValue(BI.DynamicDateCard.TYPE.YEAR,v.year)),this.quarter.setValue(this._createValue(BI.DynamicDateCard.TYPE.QUARTER,v.quarter))},getValue:function(){var year=this.year.getValue(),quarter=this.quarter.getValue();return{year:0===year.offset?-year.value:year.value,quarter:0===quarter.offset?-quarter.value:quarter.value}}}),BI.DynamicYearQuarterCard.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.dynamic_year_quarter_card",BI.DynamicYearQuarterCard),BI.StaticYearQuarterCard=BI.inherit(BI.Widget,{props:{baseCls:"bi-static-year-quarter-card",behaviors:{}},_createQuarter:function(){var items=[{text:BI.Date._QN[1],value:1},{text:BI.Date._QN[2],value:2},{text:BI.Date._QN[3],value:3},{text:BI.Date._QN[4],value:4}];return BI.map(items,function(j,item){return BI.extend(item,{type:"bi.text_item",cls:"bi-list-item-select",textAlign:"center",whiteSpace:"nowrap",once:!1,forceSelected:!0,height:24})})},render:function(){var self=this,o=this.options;return{type:"bi.vertical",items:[{type:"bi.year_picker",ref:function(){self.yearPicker=this},behaviors:o.behaviors,height:30,listeners:[{eventName:BI.YearPicker.EVENT_CHANGE,action:function(){var value=this.getValue();self.setValue({year:value,quarter:self.selectedQuarter})}}]},{type:"bi.button_group",behaviors:o.behaviors,ref:function(){self.quarter=this},items:this._createQuarter(),layouts:[{type:"bi.vertical",vgap:10}],value:o.value,listeners:[{eventName:BI.ButtonGroup.EVENT_CHANGE,action:function(){self.selectedYear=self.yearPicker.getValue(),self.selectedQuarter=this.getValue()[0],self.fireEvent(BI.StaticYearQuarterCard.EVENT_CHANGE)}}]}]}},getValue:function(){return{year:this.selectedYear,quarter:this.selectedQuarter}},setValue:function(obj){var o=this.options,newObj={};if(newObj.year=obj.year||0,newObj.quarter=obj.quarter||0,0===newObj.quarter||0===newObj.year||BI.checkDateVoid(newObj.year,newObj.quarter,1,o.min,o.max)[0]){var year=newObj.year||BI.getDate().getFullYear();this.selectedYear=year,this.selectedQuarter="",this.yearPicker.setValue(year),this.quarter.setValue()}else this.selectedYear=BI.parseInt(newObj.year),this.selectedQuarter=BI.parseInt(newObj.quarter),this.yearPicker.setValue(this.selectedYear),this.quarter.setValue(this.selectedQuarter)}}),BI.StaticYearQuarterCard.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.static_year_quarter_card",BI.StaticYearQuarterCard),BI.DynamicYearQuarterCombo=BI.inherit(BI.Widget,{props:{baseCls:"bi-year-quarter-combo bi-border bi-focus-shadow",behaviors:{},min:"1900-01-01",max:"2099-12-31",height:22},_init:function(){BI.DynamicYearQuarterCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;this.storeValue=o.value,self.storeTriggerValue="",this.trigger=BI.createWidget({type:"bi.dynamic_year_quarter_trigger",min:o.min,max:o.max,height:o.height,value:o.value||""}),this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_KEY_DOWN,function(){ +self.combo.isViewVisible()&&self.combo.hideView()}),this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_START,function(){self.combo.isViewVisible()&&self.combo.hideView()}),this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_STOP,function(){self.combo.showView()}),this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_ERROR,function(){self.combo.isViewVisible()&&self.combo.hideView()}),this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_CONFIRM,function(){var dateStore=self.storeTriggerValue,dateObj=self.trigger.getKey();BI.isNotEmptyString(dateObj)&&!BI.isEqual(dateObj,dateStore)&&(self.storeValue=self.trigger.getValue(),self.setValue(self.trigger.getValue())),self._checkDynamicValue(self.storeValue),self.fireEvent(BI.DynamicYearQuarterCombo.EVENT_CONFIRM)}),this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_FOCUS,function(){self.storeTriggerValue=self.trigger.getKey()}),this.combo=BI.createWidget({type:"bi.combo",container:o.container,isNeedAdjustHeight:!1,isNeedAdjustWidth:!1,el:this.trigger,popup:{minWidth:85,stopPropagation:!1,el:{type:"bi.dynamic_year_quarter_popup",ref:function(){self.popup=this},listeners:[{eventName:BI.DynamicYearQuarterPopup.EVENT_CHANGE,action:function(){self.setValue(self.popup.getValue()),self.combo.hideView(),self.fireEvent(BI.DynamicYearQuarterCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicYearQuarterPopup.BUTTON_CLEAR_EVENT_CHANGE,action:function(){self.setValue(),self.combo.hideView(),self.fireEvent(BI.DynamicYearQuarterCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicYearQuarterPopup.BUTTON_lABEL_EVENT_CHANGE,action:function(){var date=BI.getDate();self.setValue({type:BI.DynamicYearMonthCombo.Static,value:{year:date.getFullYear(),quarter:BI.getQuarter(date)}}),self.combo.hideView(),self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM)}},{eventName:BI.DynamicYearQuarterPopup.BUTTON_OK_EVENT_CHANGE,action:function(){self.setValue(self.popup.getValue()),self.combo.hideView(),self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM)}}],behaviors:o.behaviors,min:o.min,max:o.max},value:o.value||""}}),this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW,function(){self.popup.setValue(self.storeValue),self.fireEvent(BI.DynamicYearQuarterCombo.EVENT_BEFORE_POPUPVIEW)}),BI.createWidget({type:"bi.htape",element:this,ref:function(){self.comboWrapper=this},items:[{el:{type:"bi.icon_button",cls:"bi-trigger-icon-button date-change-h-font",width:24,height:24,ref:function(){self.changeIcon=this}},width:24},this.combo]}),this._checkDynamicValue(o.value)},_checkDynamicValue:function(v){var type=null;switch(BI.isNotNull(v)&&(type=v.type),type){case BI.DynamicYearQuarterCombo.Dynamic:this.changeIcon.setVisible(!0),this.comboWrapper.attr("items")[0].width=24,this.comboWrapper.resize();break;default:this.comboWrapper.attr("items")[0].width=0,this.comboWrapper.resize(),this.changeIcon.setVisible(!1)}},setValue:function(v){this.storeValue=v,this.trigger.setValue(v),this._checkDynamicValue(v)},getValue:function(){return this.storeValue}}),BI.DynamicYearQuarterCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.DynamicYearQuarterCombo.EVENT_BEFORE_POPUPVIEW="EVENT_BEFORE_POPUPVIEW",BI.shortcut("bi.dynamic_year_quarter_combo",BI.DynamicYearQuarterCombo),BI.extend(BI.DynamicYearQuarterCombo,{Static:1,Dynamic:2}),BI.DynamicYearQuarterPopup=BI.inherit(BI.Widget,{constants:{tabHeight:30,buttonHeight:24},props:{baseCls:"bi-year-quarter-popup",behaviors:{},min:"1900-01-01",max:"2099-12-31",width:180,height:240},render:function(){var self=this,opts=this.options,c=this.constants;return this.storeValue={type:BI.DynamicYearQuarterCombo.Static},{type:"bi.vtape",items:[{el:this._getTabJson()},{el:{type:"bi.grid",items:[[{type:"bi.text_button",cls:"bi-split-top bi-high-light",shadow:!0,textHeight:c.buttonHeight-1,text:BI.i18nText("BI-Basic_Clear"),listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicYearQuarterPopup.BUTTON_CLEAR_EVENT_CHANGE)}}]},{type:"bi.text_button",cls:"bi-split-left bi-split-right bi-high-light bi-split-top",textHeight:c.buttonHeight-1,shadow:!0,text:BI.i18nText("BI-Basic_Current_Quarter"),ref:function(){self.textButton=this},listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicYearQuarterPopup.BUTTON_lABEL_EVENT_CHANGE)}}]},{type:"bi.text_button",cls:"bi-split-top bi-high-light",shadow:!0,textHeight:c.buttonHeight-1,text:BI.i18nText("BI-Basic_OK"),listeners:[{eventName:BI.TextButton.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicYearQuarterPopup.BUTTON_OK_EVENT_CHANGE)}}]}]]},height:24}]}},_setInnerValue:function(){if(this.dateTab.getSelect()===BI.DynamicYearQuarterCombo.Static)this.textButton.setValue(BI.i18nText("BI-Basic_Current_Quarter")),this.textButton.setEnable(!0);else{var date=BI.DynamicDateHelper.getCalculation(this.dynamicPane.getValue());date=BI.print(date,"%Y-%Q"),this.textButton.setValue(date),this.textButton.setEnable(!1)}},_getTabJson:function(){var self=this,o=this.options;return{type:"bi.tab",ref:function(){self.dateTab=this},tab:{type:"bi.linear_segment",cls:"bi-split-bottom",height:this.constants.tabHeight,items:BI.createItems([{text:BI.i18nText("BI-Basic_Year_Quarter"),value:BI.DynamicYearQuarterCombo.Static},{text:BI.i18nText("BI-Basic_Dynamic_Title"),value:BI.DynamicYearQuarterCombo.Dynamic}],{textAlign:"center"})},cardCreator:function(v){switch(v){case BI.DynamicYearQuarterCombo.Dynamic:return{type:"bi.dynamic_year_quarter_card",listeners:[{eventName:"EVENT_CHANGE",action:function(){self._setInnerValue(self.year,v)}}],ref:function(){self.dynamicPane=this}};case BI.DynamicYearQuarterCombo.Static:default:return{type:"bi.static_year_quarter_card",behaviors:o.behaviors,min:self.options.min,max:self.options.max,listeners:[{eventName:BI.DynamicYearCard.EVENT_CHANGE,action:function(){self.fireEvent(BI.DynamicYearQuarterPopup.EVENT_CHANGE)}}],ref:function(){self.year=this}}}},listeners:[{eventName:BI.Tab.EVENT_CHANGE,action:function(){var v=self.dateTab.getSelect();switch(v){case BI.DynamicYearQuarterCombo.Static:var date=BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue());self.year.setValue({year:date.getFullYear(),quarter:BI.getQuarter(date)}),self._setInnerValue();break;case BI.DynamicYearQuarterCombo.Dynamic:default:self.storeValue&&self.storeValue.type===BI.DynamicYearQuarterCombo.Dynamic?self.dynamicPane.setValue(self.storeValue.value):self.dynamicPane.setValue({year:0}),self._setInnerValue()}}}]}},setValue:function(v){this.storeValue=v;var self=this,type,value;switch(v=v||{},type=v.type||BI.DynamicDateCombo.Static,value=v.value||v,this.dateTab.setSelect(type),type){case BI.DynamicDateCombo.Dynamic:this.dynamicPane.setValue(value),self._setInnerValue();break;case BI.DynamicDateCombo.Static:default:this.year.setValue(value),this.textButton.setValue(BI.i18nText("BI-Basic_Current_Quarter")),this.textButton.setEnable(!0)}},getValue:function(){return{type:this.dateTab.getSelect(),value:this.dateTab.getValue()}}}),BI.DynamicYearQuarterPopup.BUTTON_CLEAR_EVENT_CHANGE="BUTTON_CLEAR_EVENT_CHANGE",BI.DynamicYearQuarterPopup.BUTTON_lABEL_EVENT_CHANGE="BUTTON_lABEL_EVENT_CHANGE",BI.DynamicYearQuarterPopup.BUTTON_OK_EVENT_CHANGE="BUTTON_OK_EVENT_CHANGE",BI.DynamicYearQuarterPopup.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.dynamic_year_quarter_popup",BI.DynamicYearQuarterPopup),BI.DynamicYearQuarterTrigger=BI.inherit(BI.Trigger,{_const:{hgap:4,vgap:2},props:{extraCls:"bi-year-quarter-trigger",min:"1900-01-01",max:"2099-12-31",height:22},_init:function(){BI.DynamicYearQuarterTrigger.superclass._init.apply(this,arguments);var o=this.options;this.yearEditor=this._createEditor(!0),this.quarterEditor=this._createEditor(!1),BI.createWidget({element:this,type:"bi.htape",items:[{type:"bi.center",items:[{type:"bi.htape",items:[this.yearEditor,{el:{type:"bi.text_button",text:BI.i18nText("BI-Multi_Date_Year"),width:o.height},width:o.height}]},{type:"bi.htape",items:[this.quarterEditor,{el:{type:"bi.text_button",text:BI.i18nText("BI-Multi_Date_Quarter"),width:24},width:24}]}]},{el:{type:"bi.trigger_icon_button",width:o.height},width:o.height}]}),this.setValue(o.value)},_createEditor:function(isYear){var self=this,o=this.options,c=this._const,editor=BI.createWidget({type:"bi.sign_editor",height:o.height,validationChecker:function(v){return isYear?""===v||BI.isPositiveInteger(v)&&!BI.checkDateVoid(v,1,1,o.min,o.max)[0]:""===v||BI.isPositiveInteger(v)&&v>=1&&v<=4&&!BI.checkDateVoid(BI.getDate().getFullYear(),v,1,o.min,o.max)[0]},quitChecker:function(){return!1},errorText:function(v){return BI.i18nText("BI-Year_Trigger_Invalid_Text")},watermark:BI.i18nText("BI-Basic_Unrestricted"),hgap:c.hgap,vgap:c.vgap,title:"",allowBlank:!0});return editor.on(BI.SignEditor.EVENT_KEY_DOWN,function(){self.fireEvent(BI.DynamicYearQuarterTrigger.EVENT_KEY_DOWN)}),editor.on(BI.SignEditor.EVENT_FOCUS,function(){self.fireEvent(BI.DynamicYearQuarterTrigger.EVENT_FOCUS)}),editor.on(BI.SignEditor.EVENT_STOP,function(){self.fireEvent(BI.DynamicYearQuarterTrigger.EVENT_STOP)}),editor.on(BI.SignEditor.EVENT_CONFIRM,function(){self._doEditorConfirm(editor),self.fireEvent(BI.DynamicYearQuarterTrigger.EVENT_CONFIRM)}),editor.on(BI.SignEditor.EVENT_SPACE,function(){editor.isValid()&&editor.blur()}),editor.on(BI.SignEditor.EVENT_START,function(){self.fireEvent(BI.DynamicYearQuarterTrigger.EVENT_START)}),editor.on(BI.SignEditor.EVENT_ERROR,function(){self.fireEvent(BI.DynamicYearQuarterTrigger.EVENT_ERROR)}),editor.on(BI.SignEditor.EVENT_CHANGE,function(){isYear&&self._autoSwitch(editor)}),editor},_doEditorConfirm:function(editor){var value=editor.getValue();BI.isNotNull(value)&&editor.setValue(value);var quarterValue=this.quarterEditor.getValue();this.storeValue={type:BI.DynamicYearQuarterCombo.Static,value:{year:this.yearEditor.getValue(),quarter:BI.isEmptyString(this.quarterEditor.getValue())?"":quarterValue}},this.setTitle(this._getStaticTitle(this.storeValue.value))},_yearCheck:function(v){var date=BI.print(BI.parseDateTime(v,"%Y-%X-%d"),"%Y-%X-%d");return BI.print(BI.parseDateTime(v,"%Y"),"%Y")===v&&date>=this.options.min&&date<=this.options.max},_autoSwitch:function(editor){var v=editor.getValue();BI.isNotEmptyString(v)&&BI.checkDateLegal(v)&&4===v.length&&this._yearCheck(v)&&(this._doEditorConfirm(editor),this.fireEvent(BI.DynamicYearQuarterTrigger.EVENT_CONFIRM),this.quarterEditor.focus())},_getStaticTitle:function(value){value=value||{};var hasYear=!(BI.isNull(value.year)||BI.isEmptyString(value.year)),hasMonth=!(BI.isNull(value.quarter)||BI.isEmptyString(value.quarter));switch(hasYear<<1|hasMonth){case 0:return"";case 1:return value.quarter;case 2:return value.year;case 3:default:return value.year+"-"+value.quarter}},_getText:function(obj){var value="";return BI.isNotNull(obj.year)&&0!==BI.parseInt(obj.year)&&(value+=Math.abs(obj.year)+BI.i18nText("BI-Basic_Year")+(obj.year<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),BI.isNotNull(obj.quarter)&&0!==BI.parseInt(obj.quarter)&&(value+=Math.abs(obj.quarter)+BI.i18nText("BI-Basic_Single_Quarter")+(obj.quarter<0?BI.i18nText("BI-Basic_Front"):BI.i18nText("BI-Basic_Behind"))),value},_setInnerValue:function(date,text){var dateStr=BI.print(date,"%Y-%Q");this.yearEditor.setValue(date.getFullYear()),this.quarterEditor.setValue(BI.getQuarter(date)),this.setTitle(BI.isEmptyString(text)?dateStr:text+":"+dateStr)},setValue:function(v){var type,value,date=BI.getDate();switch(this.storeValue=v,BI.isNotNull(v)&&(type=v.type||BI.DynamicYearQuarterCombo.Static,value=v.value||v),type){case BI.DynamicYearQuarterCombo.Dynamic:var text=this._getText(value);date=BI.DynamicDateHelper.getCalculation(value),this._setInnerValue(date,text);break;case BI.DynamicYearQuarterCombo.Static:default:value=value||{};var quarter=BI.isNull(value.quarter)?null:value.quarter;this.yearEditor.setValue(value.year),this.yearEditor.setTitle(value.year),this.quarterEditor.setValue(quarter),this.quarterEditor.setTitle(quarter),this.setTitle(this._getStaticTitle(value))}},getValue:function(){return this.storeValue},getKey:function(){return this.yearEditor.getValue()+"-"+this.quarterEditor.getValue()}}),BI.DynamicYearQuarterTrigger.EVENT_FOCUS="EVENT_FOCUS",BI.DynamicYearQuarterTrigger.EVENT_ERROR="EVENT_ERROR",BI.DynamicYearQuarterTrigger.EVENT_START="EVENT_START",BI.DynamicYearQuarterTrigger.EVENT_CONFIRM="EVENT_CONFIRM",BI.DynamicYearQuarterTrigger.EVENT_STOP="EVENT_STOP",BI.DynamicYearQuarterTrigger.EVENT_KEY_DOWN="EVENT_KEY_DOWN",BI.shortcut("bi.dynamic_year_quarter_trigger",BI.DynamicYearQuarterTrigger),BI.AbstractAllValueChooser=BI.inherit(BI.Widget,{_const:{perPage:100},_defaultConfig:function(){return BI.extend(BI.AbstractAllValueChooser.superclass._defaultConfig.apply(this,arguments),{width:200,height:30,items:null,itemsCreator:BI.emptyFn,cache:!0})},_valueFormatter:function(v){var text=v;return BI.isNotNull(this.items)&&BI.some(this.items,function(i,item){if(item.value===v||item.value+""===v)return text=item.text,!0}),text},_itemsCreator:function(options,callback){function call(items){var keywords=(options.keywords||[]).slice();options.keyword&&keywords.push(options.keyword);var resultItems=items;if(BI.isNotEmptyArray(keywords)&&(resultItems=[],BI.each(keywords,function(i,kw){var search=BI.Func.getSearchResult(items,kw);resultItems=resultItems.concat(search.match).concat(search.find)}),resultItems=BI.uniq(resultItems)),options.selectedValues){var filter=BI.makeObject(options.selectedValues,!0);resultItems=BI.filter(resultItems,function(i,ob){return!filter[ob.value]})}return options.type===BI.MultiSelectCombo.REQ_GET_ALL_DATA?void callback({items:resultItems}):options.type===BI.MultiSelectCombo.REQ_GET_DATA_LENGTH?void callback({count:resultItems.length}):void callback({items:resultItems,hasNext:!1})}var self=this,o=this.options;o.cache&&this.items?call(this.items):o.itemsCreator({},function(items){self.items=items,call(items)})}}),BI.AllValueChooserCombo=BI.inherit(BI.AbstractAllValueChooser,{_defaultConfig:function(){return BI.extend(BI.AllValueChooserCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-all-value-chooser-combo",width:200,height:24,items:null,itemsCreator:BI.emptyFn,cache:!0})},_init:function(){BI.AllValueChooserCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;BI.isNotNull(o.items)&&(this.items=o.items),this.combo=BI.createWidget({type:"bi.multi_select_combo",text:o.text,element:this,itemsCreator:BI.bind(this._itemsCreator,this),valueFormatter:BI.bind(this._valueFormatter,this),width:o.width,height:o.height,value:{type:BI.Selection.Multi,value:o.value||[]}}),this.combo.on(BI.MultiSelectCombo.EVENT_CONFIRM,function(){self.fireEvent(BI.AllValueChooserCombo.EVENT_CONFIRM)})},setValue:function(v){this.combo.setValue({type:BI.Selection.Multi,value:v||[]})},getValue:function(){var val=this.combo.getValue()||{};return val.type===BI.Selection.All?val.assist:val.value||[]},populate:function(items){this.items=items,this.combo.populate.apply(this,arguments)}}),BI.AllValueChooserCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.all_value_chooser_combo",BI.AllValueChooserCombo),BI.AllValueChooserPane=BI.inherit(BI.AbstractAllValueChooser,{_defaultConfig:function(){return BI.extend(BI.AllValueChooserPane.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-all-value-chooser-pane",width:200,height:30,items:null,itemsCreator:BI.emptyFn,cache:!0})},_init:function(){BI.AllValueChooserPane.superclass._init.apply(this,arguments);var self=this,o=this.options;BI.isNotNull(o.items)&&(this.items=o.items),this.list=BI.createWidget({type:"bi.multi_select_list",element:this,itemsCreator:BI.bind(this._itemsCreator,this),valueFormatter:BI.bind(this._valueFormatter,this),width:o.width,height:o.height}),this.list.on(BI.MultiSelectList.EVENT_CHANGE,function(){self.fireEvent(BI.AllValueChooserPane.EVENT_CHANGE)})},setValue:function(v){this.list.setValue({type:BI.Selection.Multi,value:v||[]})},getValue:function(){var val=this.list.getValue()||{};return val.type===BI.Selection.All?val.assist:val.value||[]},populate:function(items){this.items=items,this.list.populate.apply(this.list,arguments)}}),BI.AllValueChooserPane.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.all_value_chooser_pane",BI.AllValueChooserPane),BI.AllValueMultiTextValueCombo=BI.inherit(BI.Widget,{props:{baseCls:"bi-all-value-multi-text-value-combo",width:200,height:24,items:[]},render:function(){var self=this,o=this.options,value=this._digestValue(o.value);return{type:"bi.search_multi_text_value_combo",text:o.text,height:o.height,items:o.items,value:value,numOfPage:100,valueFormatter:o.valueFormatter,warningTitle:o.warningTitle,listeners:[{eventName:BI.SearchMultiTextValueCombo.EVENT_CONFIRM,action:function(){self.fireEvent(BI.AllValueMultiTextValueCombo.EVENT_CONFIRM)}}],ref:function(){self.combo=this}}},setValue:function(v){var value=this._digestValue(v);this.combo.setValue(value)},getValue:function(){var obj=this.combo.getValue()||{};if(obj.value=obj.value||[],obj.type===BI.Selection.All){var values=[];return BI.each(this.options.items,function(idx,item){!BI.contains(obj.value,item.value)&&values.push(item.value)}),values}return obj.value||[]},populate:function(items){this.options.items=items,this.combo.populate.apply(this,arguments)},_digestValue:function(v){return{type:BI.Selection.Multi,value:v||[]}}}),BI.AllValueMultiTextValueCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.all_value_multi_text_value_combo",BI.AllValueMultiTextValueCombo),BI.AbstractTreeValueChooser=BI.inherit(BI.Widget,{_const:{perPage:100},_defaultConfig:function(){return BI.extend(BI.AbstractTreeValueChooser.superclass._defaultConfig.apply(this,arguments),{items:null,itemsCreator:BI.emptyFn,open:!1})},_valueFormatter:function(v){var text=v;return BI.isNotNull(this.items)&&BI.some(this.items,function(i,item){if(item.value===v||item.value+""===v)return text=item.text,!0}),text},_initData:function(items){this.items=items;var nodes=BI.Tree.treeFormat(items);this.tree=new BI.Tree,this.tree.initTree(nodes)},_itemsCreator:function(options,callback){function call(){switch(options.type){case BI.TreeView.REQ_TYPE_INIT_DATA:self._reqInitTreeNode(options,callback);break;case BI.TreeView.REQ_TYPE_ADJUST_DATA:self._reqAdjustTreeNode(options,callback);break;case BI.TreeView.REQ_TYPE_SELECT_DATA:self._reqSelectedTreeNode(options,callback);break;case BI.TreeView.REQ_TYPE_GET_SELECTED_DATA:self._reqDisplayTreeNode(options,callback);break;default:self._reqTreeNode(options,callback)}}var self=this,o=this.options;this.items?call():o.itemsCreator({},function(items){self._initData(items),call()})},_reqDisplayTreeNode:function(op,callback){function doCheck(parentValues,node,selected){return null==selected||BI.isEmpty(selected)?void BI.each(node.getChildren(),function(i,child){var newParents=BI.clone(parentValues);newParents.push(child.value);var llen=self._getChildCount(newParents);createOneJson(child,node.id,llen),doCheck(newParents,child,{})}):void BI.each(selected,function(k){var node=self._getTreeNode(parentValues,k);if(BI.isNull(node))createOneJson({id:BI.UUID(),text:k,value:k},BI.UUID(),0);else{var newParents=BI.clone(parentValues);newParents.push(node.value),createOneJson(node,node.parent&&node.parent.id,getCount(selected[k],newParents)),doCheck(newParents,node,selected[k])}})}function getCount(jo,parentValues){return null==jo?0:BI.isEmpty(jo)?self._getChildCount(parentValues):BI.size(jo)}function createOneJson(node,pId,llen){result.push({id:node.id,pId:pId,text:node.text+(llen>0?"("+BI.i18nText("BI-Basic_Altogether")+llen+BI.i18nText("BI-Basic_Count")+")":""),value:node.value,open:!0})}var self=this,result=[],selectedValues=op.selectedValues;return null==selectedValues||BI.isEmpty(selectedValues)?void callback({}):(doCheck([],this.tree.getRoot(),selectedValues),void callback({items:result}))},_reqSelectedTreeNode:function(op,callback){function dealWithSelectedValues(selectedValues){var p=parentValues.concat(notSelectedValue);if(canFindKey(selectedValues,p))if(isSearchValueInParent(p))self._deleteNode(selectedValues,p);else{var searched=[],find=search(parentValues,notSelectedValue,[],searched);find&&BI.isNotEmptyArray(searched)&&BI.each(searched,function(i,arr){var node=self._getNode(selectedValues,arr);node?self._deleteNode(selectedValues,arr):expandSelectedValue(selectedValues,arr,BI.last(arr))})}if(isChild(selectedValues,p)){var result=[],find=!1;isSearchValueInParent(p)?find=!0:(find=search(parentValues,notSelectedValue,result),p=parentValues),find===!0&&(expandSelectedValue(selectedValues,p,notSelectedValue),result.length>0&&BI.each(result,function(i,strs){self._buildTree(selectedValues,strs)}))}}function expandSelectedValue(selectedValues,parents,notSelectedValue){var next=selectedValues,childrenCount=[],path=[];BI.some(parents,function(i,v){var t=next[v];if(null==t){if(0===i)return!0;if(!BI.isEmpty(next))return!0;var split=parents.slice(0,i),expanded=self._getChildren(split);if(path.push(split),childrenCount.push(expanded.length),i===parents.length-1&&1===expanded.length&&expanded[0].value===notSelectedValue)for(var j=childrenCount.length-1;j>=0&&1===childrenCount[j];j--)self._deleteNode(selectedValues,path[j]);else BI.each(expanded,function(m,child){return i===parents.length-1&&child.value===notSelectedValue||void(next[child.value]={})});next=next[v]}else next=t})}function search(parents,current,result,searched){var newParents=BI.clone(parents);if(newParents.push(current),self._isMatch(parents,current,keyword))return searched&&searched.push(newParents),!0;var children=self._getChildren(newParents),notSearch=[],can=!1;return BI.each(children,function(i,child){search(newParents,child.value,result,searched)?can=!0:notSearch.push(child.value)}),can===!0&&BI.each(notSearch,function(i,v){var next=BI.clone(newParents);next.push(v),result.push(next)}),can}function isSearchValueInParent(parentValues){for(var i=0,len=parentValues.length;iself._const.perPage)break}if(1===op.times){var nodes=self._getAddedValueNode([],selectedValues);result=BI.concat(BI.filter(nodes,function(idx,node){var find=BI.Func.getSearchResult([node.text||node.value],keyword);return find.find.length>0||find.match.length>0}),result)}return output}function nodeSearch(deep,parentValues,current,isAllSelect,result){if(self._isMatch(parentValues,current,keyword)){var checked=isAllSelect||isSelected(parentValues,current);return createOneJson(parentValues,current,!1,checked,!isAllSelect&&isHalf(parentValues,current),!0,result),[!0,checked]}var newParents=BI.clone(parentValues);newParents.push(current);var children=self._getChildren(newParents),can=!1,checked=!1,isCurAllSelected=isAllSelect||isAllSelected(parentValues,current);return BI.each(children,function(i,child){var state=nodeSearch(deep+1,newParents,child.value,isCurAllSelected,result);state[1]===!0&&(checked=!0),state[0]===!0&&(can=!0)}),can===!0&&(checked=isCurAllSelected||isSelected(parentValues,current)&&checked,createOneJson(parentValues,current,!0,checked,!1,!1,result)),[can,checked]}function createOneJson(parentValues,value,isOpen,checked,half,flag,result){var node=self._getTreeNode(parentValues,value);result.push({id:node.id,pId:node.pId,text:node.text,value:node.value,title:node.title,isParent:node.getChildrenLength()>0,open:isOpen,checked:checked,halfCheck:half,flag:flag})}function isHalf(parentValues,value){var find=findSelectedObj(parentValues);return null==find?null:BI.any(find,function(v,ob){if(v===value&&null!=ob&&!BI.isEmpty(ob))return!0})}function isAllSelected(parentValues,value){var find=findSelectedObj(parentValues);return null==find?null:BI.any(find,function(v,ob){if(v===value&&null!=ob&&BI.isEmpty(ob))return!0})}function isSelected(parentValues,value){var find=findSelectedObj(parentValues);return null!=find&&BI.any(find,function(v){if(v===value)return!0})}function findSelectedObj(parentValues){var find=selectedValues;return null==find?null:(BI.every(parentValues,function(i,v){return find=find[v],null!=find}),find)}var self=this,result=[],keyword=op.keyword||"",selectedValues=op.selectedValues,lastSearchValue=op.lastSearchValue||"",output=search();BI.nextTick(function(){callback({hasNext:output.length>self._const.perPage,items:result,lastSearchValue:BI.last(output)})})},_reqTreeNode:function(op,callback){function judgeState(parentValues,selected_value,checkState){var checked=checkState.checked,half=checkState.half;return!(parentValues.length>0&&!checked)&&(0===parentValues.length||checked&&half&&!BI.isEmpty(selected_value))}function dealWithSelectedValue(parentValues,selectedValues){var valueMap={};return BI.each(parentValues,function(i,v){selectedValues=selectedValues[v]||{}}),BI.each(selectedValues,function(value,obj){if(BI.isNull(obj))return void(valueMap[value]=[0,0]);if(BI.isEmpty(obj))return void(valueMap[value]=[2,0]);var nextNames={};BI.each(obj,function(t,o){(BI.isNull(o)||BI.isEmpty(o))&&(nextNames[t]=!0)}),valueMap[value]=[1,BI.size(nextNames)]}),valueMap}function getCheckState(current,parentValues,valueMap,checkState){var checked=checkState.checked,half=checkState.half,tempCheck=!1,halfCheck=!1;if(BI.has(valueMap,current))if(1===valueMap[current][0]){var values=BI.clone(parentValues);values.push(current);var childCount=self._getChildCount(values);childCount>0&&childCount!==valueMap[current][1]&&(halfCheck=!0)}else 2===valueMap[current][0]&&(tempCheck=!0);var check;return check=checked||halfCheck||tempCheck?(tempCheck||checked)&&!half||BI.has(valueMap,current):BI.has(valueMap,current),[check,halfCheck]}var self=this,o=this.options,result=[],times=op.times,checkState=op.checkState||{},parentValues=op.parentValues||[],selectedValues=op.selectedValues||{},valueMap={};valueMap=dealWithSelectedValue(parentValues,selectedValues);for(var nodes=this._getChildren(parentValues),i=(times-1)*this._const.perPage;nodes[i]&&i0,checked:state[0],halfCheck:state[1],open:o.open})}if(o.open){var allNodes=[];BI.each(nodes,function(idx,node){allNodes=BI.concat(allNodes,self._getAllChildren(parentValues.concat([node.value])))}),BI.each(allNodes,function(idx,node){var valueMap=dealWithSelectedValue(node.parentValues,selectedValues),state=getCheckState(node.value,node.parentValues,valueMap,checkState);result.push({id:node.id,pId:node.pId,value:node.value,text:node.text,times:1,isParent:node.getChildrenLength()>0,checked:state[0],halfCheck:state[1],open:self.options.open})})}0===parentValues.length&&1===times&&(result=BI.concat(self._getAddedValueNode(parentValues,selectedValues),result)),BI.nextTick(function(){callback({items:result,hasNext:nodes.length>times*self._const.perPage})})},_getAddedValueNode:function(parentValues,selectedValues){var nodes=this._getChildren(parentValues);return BI.map(BI.difference(BI.keys(selectedValues),BI.map(nodes,"value")),function(idx,v){return{id:BI.UUID(),pId:nodes.length>0?nodes[0].pId:BI.UUID(),value:v,text:v,times:1,isParent:!1,checked:!0,halfCheck:!1}})},_getNode:function(selectedValues,parentValues){for(var pNode=selectedValues,i=0,len=parentValues.length;i0&&BI.isEmpty(pNode);)name=p[p.length-1],p=p.slice(0,p.length-1),pNode=this._getNode(selectedValues,p),null!=pNode&&delete pNode[name]},_buildTree:function(jo,values){var t=jo;BI.each(values,function(i,v){BI.has(t,v)||(t[v]={}),t=t[v]})},_isMatch:function(parentValues,value,keyword){var o=this.options,node=this._getTreeNode(parentValues,value);if(!node)return!1;var find=BI.Func.getSearchResult([node.text||node.value],keyword);if(o.allowSearchValue&&node.value){var valueFind=BI.Func.getSearchResult([node.value],keyword);return valueFind.find.length>0||valueFind.match.length>0||find.find.length>0||find.match.length>0}return find.find.length>0||find.match.length>0},_getTreeNode:function(parentValues,v){var self=this,findParentNode,index=0;return this.tree.traverse(function(node){if(!self.tree.isRoot(node))return!(index>parentValues.length)&&(index===parentValues.length&&node.value===v?(findParentNode=node,!1):node.value!==parentValues[index]||void index++)}),findParentNode},_getChildren:function(parentValues){if(parentValues.length>0)var value=BI.last(parentValues),parent=this._getTreeNode(parentValues.slice(0,parentValues.length-1),value);else var parent=this.tree.getRoot();return parent.getChildren()},_getAllChildren:function(parentValues){var children=this._getChildren(parentValues),nodes=[].concat(children);BI.each(nodes,function(idx,node){node.parentValues=parentValues});for(var queue=BI.map(children,function(idx,node){return{parentValues:parentValues,value:node.value}});BI.isNotEmptyArray(queue);){var node=queue.shift(),pValues=node.parentValues.concat(node.value),childNodes=this._getChildren(pValues);BI.each(childNodes,function(idx,node){node.parentValues=pValues}),queue=queue.concat(childNodes),nodes=nodes.concat(childNodes)}return nodes},_getChildCount:function(parentValues){return this._getChildren(parentValues).length}}),BI.AbstractListTreeValueChooser=BI.inherit(BI.AbstractTreeValueChooser,{_reqDisplayTreeNode:function(op,callback){function doCheck(parentValues,node,selected){BI.each(selected,function(idx,path){BI.each(path,function(id,value){var nodeValue=value,node=self._getTreeNode(path.slice(0,id),nodeValue);BI.isNull(node)?createOneJson({id:BI.UUID(),text:nodeValue,value:nodeValue,isLeaf:!0},BI.UUID()):(BI.has(result,node.id)||createOneJson(node,node.parent&&node.parent.id),result[node.id].isLeaf!==!0&&(result[node.id].isLeaf=id===path.length-1))})})}function createOneJson(node,pId){ +result[node.id]={id:node.id,pId:pId,text:node.text,value:node.value,open:!0,isLeaf:node.isLeaf}}var self=this,result={},selectedValues=op.selectedValues;return null==selectedValues||BI.isEmpty(selectedValues)?void callback({}):(doCheck([],this.tree.getRoot(),selectedValues),void callback({items:BI.values(result)}))},_reqInitTreeNode:function(op,callback){function search(){var children=self._getChildren([]),start=children.length;if(""!==lastSearchValue){for(var j=0,len=start;jself._const.perPage)break}if(1===op.times){var nodes=self._getAddedValueNode([],selectedValues);result=BI.concat(BI.filter(nodes,function(idx,node){var find=BI.Func.getSearchResult([node.text||node.value],keyword);return find.find.length>0||find.match.length>0}),result)}return output}function nodeSearch(deep,parentValues,current,result){if(self._isMatch(parentValues,current,keyword)){var checked=isSelected(current);return createOneJson(parentValues,current,!1,checked,!0,result),[!0,checked]}var newParents=BI.clone(parentValues);newParents.push(current);var children=self._getChildren(newParents),can=!1,checked=!1;return BI.each(children,function(i,child){var state=nodeSearch(deep+1,newParents,child.value,result);state[1]===!0&&(checked=!0),state[0]===!0&&(can=!0)}),can===!0&&(checked=isSelected(current),createOneJson(parentValues,current,!0,checked,!1,result)),[can,checked]}function createOneJson(parentValues,value,isOpen,checked,flag,result){var node=self._getTreeNode(parentValues,value);result.push({id:node.id,pId:node.pId,text:node.text,value:node.value,title:node.title,isParent:node.getChildrenLength()>0,open:isOpen,checked:checked,halfCheck:!1,flag:flag})}function isHalf(parentValues,value){var find=findSelectedObj(parentValues);return null==find?null:BI.any(find,function(v,ob){if(v===value&&null!=ob&&!BI.isEmpty(ob))return!0})}function isAllSelected(parentValues,value){var find=findSelectedObj(parentValues);return null==find?null:BI.any(find,function(v,ob){if(v===value&&null!=ob&&BI.isEmpty(ob))return!0})}function isSelected(value){return BI.any(selectedValues,function(idx,array){return BI.last(array)===value})}function findSelectedObj(parentValues){var find=selectedValues;return null==find?null:(BI.every(parentValues,function(i,v){return find=find[v],null!=find}),find)}var self=this,result=[],keyword=op.keyword||"",selectedValues=op.selectedValues,lastSearchValue=op.lastSearchValue||"",output=search();BI.nextTick(function(){callback({hasNext:output.length>self._const.perPage,items:result,lastSearchValue:BI.last(output)})})},_reqTreeNode:function(op,callback){function dealWithSelectedValue(selectedValues){var valueMap={};return BI.each(selectedValues,function(idx,v){valueMap[BI.last(v)]=[2,0]}),valueMap}for(var self=this,o=this.options,result=[],times=op.times,parentValues=op.parentValues||[],selectedValues=op.selectedValues||[],valueMap=dealWithSelectedValue(selectedValues),nodes=this._getChildren(parentValues),i=(times-1)*this._const.perPage;nodes[i]&&i0,checked:checked,halfCheck:!1,open:o.open})}if(o.open){var allNodes=[];BI.each(nodes,function(idx,node){allNodes=BI.concat(allNodes,self._getAllChildren(parentValues.concat([node.value])))}),BI.each(allNodes,function(idx,node){var checked=BI.has(valueMap,node.value);result.push({id:node.id,pId:node.pId,value:node.value,text:node.text,times:1,isParent:node.getChildrenLength()>0,checked:checked,halfCheck:!1,open:o.open})})}0===parentValues.length&&1===times&&(result=BI.concat(self._getAddedValueNode(parentValues,selectedValues),result)),BI.nextTick(function(){callback({items:result,hasNext:nodes.length>times*self._const.perPage})})},_getAddedValueNode:function(parentValues,selectedValues){var nodes=this._getChildren(parentValues),values=BI.flatten(BI.filter(selectedValues,function(idx,array){return 1===array.length}));return BI.map(BI.difference(values,BI.map(nodes,"value")),function(idx,v){return{id:BI.UUID(),pId:nodes.length>0?nodes[0].pId:BI.UUID(),value:v,text:v,times:1,isParent:!1,checked:!0,halfCheck:!1}})}}),BI.ListTreeValueChooserInsertCombo=BI.inherit(BI.AbstractListTreeValueChooser,{_defaultConfig:function(){return BI.extend(BI.ListTreeValueChooserInsertCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-list-tree-value-chooser-insert-combo",width:200,height:24,items:null,itemsCreator:BI.emptyFn})},_init:function(){BI.ListTreeValueChooserInsertCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;BI.isNotNull(o.items)&&this._initData(o.items),this.combo=BI.createWidget({type:"bi.multi_tree_list_combo",element:this,text:o.text,value:o.value,watermark:o.watermark,allowInsertValue:o.allowInsertValue,allowEdit:o.allowEdit,itemsCreator:BI.bind(this._itemsCreator,this),valueFormatter:BI.bind(this._valueFormatter,this),width:o.width,height:o.height,listeners:[{eventName:BI.MultiTreeListCombo.EVENT_FOCUS,action:function(){self.fireEvent(BI.ListTreeValueChooserInsertCombo.EVENT_FOCUS)}},{eventName:BI.MultiTreeListCombo.EVENT_BLUR,action:function(){self.fireEvent(BI.ListTreeValueChooserInsertCombo.EVENT_BLUR)}},{eventName:BI.MultiTreeListCombo.EVENT_STOP,action:function(){self.fireEvent(BI.ListTreeValueChooserInsertCombo.EVENT_STOP)}},{eventName:BI.MultiTreeListCombo.EVENT_CLICK_ITEM,action:function(){self.fireEvent(BI.ListTreeValueChooserInsertCombo.EVENT_CLICK_ITEM)}},{eventName:BI.MultiTreeListCombo.EVENT_SEARCHING,action:function(){self.fireEvent(BI.ListTreeValueChooserInsertCombo.EVENT_SEARCHING)}},{eventName:BI.MultiTreeListCombo.EVENT_CONFIRM,action:function(){self.fireEvent(BI.ListTreeValueChooserInsertCombo.EVENT_CONFIRM)}}]})},setValue:function(v){this.combo.setValue(v)},getValue:function(){return this.combo.getValue()},populate:function(items){this._initData(items),this.combo.populate.apply(this.combo,arguments)}}),BI.ListTreeValueChooserInsertCombo.EVENT_FOCUS="EVENT_FOCUS",BI.ListTreeValueChooserInsertCombo.EVENT_BLUR="EVENT_BLUR",BI.ListTreeValueChooserInsertCombo.EVENT_STOP="EVENT_STOP",BI.ListTreeValueChooserInsertCombo.EVENT_CLICK_ITEM="EVENT_CLICK_ITEM",BI.ListTreeValueChooserInsertCombo.EVENT_SEARCHING="EVENT_SEARCHING",BI.ListTreeValueChooserInsertCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.list_tree_value_chooser_insert_combo",BI.ListTreeValueChooserInsertCombo),BI.TreeValueChooserInsertCombo=BI.inherit(BI.AbstractTreeValueChooser,{_defaultConfig:function(){return BI.extend(BI.TreeValueChooserInsertCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-tree-value-chooser-insert-combo",width:200,height:24,items:null,itemsCreator:BI.emptyFn})},_init:function(){BI.TreeValueChooserInsertCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;BI.isNotNull(o.items)&&this._initData(o.items),this.combo=BI.createWidget({type:"bi.multi_tree_insert_combo",text:o.text,value:o.value,watermark:o.watermark,element:this,itemsCreator:BI.bind(this._itemsCreator,this),valueFormatter:BI.bind(this._valueFormatter,this),width:o.width,height:o.height,listeners:[{eventName:BI.MultiTreeInsertCombo.EVENT_FOCUS,action:function(){self.fireEvent(BI.TreeValueChooserCombo.EVENT_FOCUS)}},{eventName:BI.MultiTreeInsertCombo.EVENT_BLUR,action:function(){self.fireEvent(BI.TreeValueChooserCombo.EVENT_BLUR)}},{eventName:BI.MultiTreeInsertCombo.EVENT_STOP,action:function(){self.fireEvent(BI.TreeValueChooserInsertCombo.EVENT_STOP)}},{eventName:BI.MultiTreeInsertCombo.EVENT_CLICK_ITEM,action:function(){self.fireEvent(BI.TreeValueChooserInsertCombo.EVENT_CLICK_ITEM)}},{eventName:BI.MultiTreeInsertCombo.EVENT_SEARCHING,action:function(){self.fireEvent(BI.TreeValueChooserInsertCombo.EVENT_SEARCHING)}},{eventName:BI.MultiTreeInsertCombo.EVENT_CONFIRM,action:function(){self.fireEvent(BI.TreeValueChooserInsertCombo.EVENT_CONFIRM)}}]})},setValue:function(v){this.combo.setValue(v)},getValue:function(){return this.combo.getValue()},populate:function(items){this._initData(items),this.combo.populate.apply(this.combo,arguments)}}),BI.TreeValueChooserInsertCombo.EVENT_FOCUS="EVENT_FOCUS",BI.TreeValueChooserInsertCombo.EVENT_BLUR="EVENT_BLUR",BI.TreeValueChooserInsertCombo.EVENT_STOP="EVENT_STOP",BI.TreeValueChooserInsertCombo.EVENT_CLICK_ITEM="EVENT_CLICK_ITEM",BI.TreeValueChooserInsertCombo.EVENT_SEARCHING="EVENT_SEARCHING",BI.TreeValueChooserInsertCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.shortcut("bi.tree_value_chooser_insert_combo",BI.TreeValueChooserInsertCombo),BI.TreeValueChooserCombo=BI.inherit(BI.AbstractTreeValueChooser,{_defaultConfig:function(){return BI.extend(BI.TreeValueChooserCombo.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-tree-value-chooser-combo",width:200,height:24,items:null,itemsCreator:BI.emptyFn})},_init:function(){BI.TreeValueChooserCombo.superclass._init.apply(this,arguments);var self=this,o=this.options;BI.isNotNull(o.items)&&this._initData(o.items),this.combo=BI.createWidget({type:"bi.multi_tree_combo",text:o.text,value:o.value,watermark:o.watermark,element:this,itemsCreator:BI.bind(this._itemsCreator,this),valueFormatter:BI.bind(this._valueFormatter,this),width:o.width,height:o.height,listeners:[{eventName:BI.MultiTreeCombo.EVENT_FOCUS,action:function(){self.fireEvent(BI.TreeValueChooserCombo.EVENT_FOCUS)}},{eventName:BI.MultiTreeCombo.EVENT_BLUR,action:function(){self.fireEvent(BI.TreeValueChooserCombo.EVENT_BLUR)}},{eventName:BI.MultiTreeCombo.EVENT_STOP,action:function(){self.fireEvent(BI.TreeValueChooserCombo.EVENT_STOP)}},{eventName:BI.MultiTreeCombo.EVENT_CLICK_ITEM,action:function(){self.fireEvent(BI.TreeValueChooserCombo.EVENT_CLICK_ITEM)}},{eventName:BI.MultiTreeCombo.EVENT_SEARCHING,action:function(){self.fireEvent(BI.TreeValueChooserCombo.EVENT_SEARCHING)}},{eventName:BI.MultiTreeCombo.EVENT_CONFIRM,action:function(){self.fireEvent(BI.TreeValueChooserCombo.EVENT_CONFIRM)}}]})},setValue:function(v){this.combo.setValue(v)},getValue:function(){return this.combo.getValue()},populate:function(items){this._initData(items),this.combo.populate.apply(this.combo,arguments)}}),BI.TreeValueChooserCombo.EVENT_CONFIRM="EVENT_CONFIRM",BI.TreeValueChooserCombo.EVENT_FOCUS="EVENT_FOCUS",BI.TreeValueChooserCombo.EVENT_BLUR="EVENT_BLUR",BI.TreeValueChooserCombo.EVENT_STOP="EVENT_STOP",BI.TreeValueChooserCombo.EVENT_CLICK_ITEM="EVENT_CLICK_ITEM",BI.TreeValueChooserCombo.EVENT_SEARCHING="EVENT_SEARCHING",BI.shortcut("bi.tree_value_chooser_combo",BI.TreeValueChooserCombo),BI.TreeValueChooserPane=BI.inherit(BI.AbstractTreeValueChooser,{_defaultConfig:function(){return BI.extend(BI.TreeValueChooserPane.superclass._defaultConfig.apply(this,arguments),{baseCls:"bi-tree-value-chooser-pane",items:null,itemsCreator:BI.emptyFn})},_init:function(){BI.TreeValueChooserPane.superclass._init.apply(this,arguments);var self=this,o=this.options;this.pane=BI.createWidget({type:"bi.multi_select_tree",element:this,itemsCreator:BI.bind(this._itemsCreator,this)}),this.pane.on(BI.MultiSelectTree.EVENT_CHANGE,function(){self.fireEvent(BI.TreeValueChooserPane.EVENT_CHANGE)}),BI.isNotNull(o.items)&&(this._initData(o.items),this.populate())},setSelectedValue:function(v){this.pane.setSelectedValue(v)},setValue:function(v){this.pane.setValue(v)},getValue:function(){return this.pane.getValue()},populate:function(){this.pane.populate.apply(this.pane,arguments)}}),BI.TreeValueChooserPane.EVENT_CHANGE="EVENT_CHANGE",BI.shortcut("bi.tree_value_chooser_pane",BI.TreeValueChooserPane),BI.AbstractValueChooser=BI.inherit(BI.Widget,{_const:{perPage:100},_defaultConfig:function(){return BI.extend(BI.AbstractValueChooser.superclass._defaultConfig.apply(this,arguments),{items:null,itemsCreator:BI.emptyFn,cache:!0})},_valueFormatter:function(v){var text=v;return BI.isNotNull(this.items)&&BI.some(this.items,function(i,item){if(item.value===v||item.value+""===v)return text=item.text,!0}),text},_getItemsByTimes:function(items,times){for(var res=[],i=(times-1)*this._const.perPage;items[i]&&i"+i+""};t.exports=function(n,t){var r={};r[n]=t(f),e(e.P+e.F*i(function(){var t=""[n]('"');return t!==t.toLowerCase()||3document.F=Object<\/script>"),t.close(),s=t.F;r--;)delete s[a][u[r]];return s()};t.exports=Object.create||function(t,n){var r;return null!==t?(f[a]=i(t),r=new f,f[a]=null,r[c]=t):r=s(),n===undefined?r:o(r,n)}},function(t,n,r){var e=r(90),i=r(63).concat("length","prototype");n.f=Object.getOwnPropertyNames||function(t){return e(t,i)}},function(t,n,r){var e=r(13),i=r(10),o=r(62)("IE_PROTO"),u=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),e(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?u:null}},function(t,n,r){var e=r(5)("unscopables"),i=Array.prototype;i[e]==undefined&&r(14)(i,e,{}),t.exports=function(t){i[e][t]=!0}},function(t,n,r){var e=r(4);t.exports=function(t,n){if(!e(t)||t._t!==n)throw TypeError("Incompatible receiver, "+n+" required!");return t}},function(t,n,r){var e=r(9).f,i=r(13),o=r(5)("toStringTag");t.exports=function(t,n,r){t&&!i(t=r?t:t.prototype,o)&&e(t,o,{configurable:!0,value:n})}},function(t,n,r){var u=r(0),e=r(24),c=r(2),f=r(66),i="["+f+"]",o=RegExp("^"+i+i+"*"),a=RegExp(i+i+"*$"),s=function s(t,n,r){var e={},i=c(function(){return!!f[t]()||"​…"!="​…"[t]()}),o=e[t]=i?n(l):f[t];r&&(e[r]=o),u(u.P+u.F*i,"String",e)},l=s.trim=function(t,n){return t=String(e(t)),1&n&&(t=t.replace(o,"")),2&n&&(t=t.replace(a,"")),t};t.exports=s},function(t,n){t.exports={}},function(t,n,r){"use strict";var e=r(1),i=r(9),o=r(8),u=r(5)("species");t.exports=function(t){var n=e[t];o&&n&&!n[u]&&i.f(n,u,{configurable:!0,get:function(){return this}})}},function(t,n){t.exports=function(t,n,r,e){if(!(t instanceof n)||e!==undefined&&e in t)throw TypeError(r+": incorrect invocation!");return t}},function(t,n,r){var i=r(11);t.exports=function(t,n,r){for(var e in n)i(t,e,n[e],r);return t}},function(t,n,r){var e=r(23);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==e(t)?t.split(""):Object(t)}},function(t,n){n.f={}.propertyIsEnumerable},function(t,n,r){var i=r(23),o=r(5)("toStringTag"),u="Arguments"==i(function(){return arguments}()),c=function c(t,n){try{return t[n]}catch(r){}};t.exports=function(t){var n,r,e;return t===undefined?"Undefined":null===t?"Null":"string"==typeof(r=c(n=Object(t),o))?r:u?i(n):"Object"==(e=i(n))&&"function"==typeof n.callee?"Arguments":e}},function(t,n,r){var i=r(3),o=r(18),u=r(5)("species");t.exports=function(t,n){var r,e=i(t).constructor;return e===undefined||(r=i(e)[u])==undefined?n:o(r)}},function(t,n,r){var e=r(7),i=r(1),o="__core-js_shared__",u=i[o]||(i[o]={});(t.exports=function(t,n){return u[t]||(u[t]=n!==undefined?n:{})})("versions",[]).push({version:e.version,mode:r(30)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(t,n,r){var f=r(15),a=r(6),s=r(32);t.exports=function(c){return function(t,n,r){var e,i=f(t),o=a(i.length),u=s(r,o);if(c&&n!=n){for(;u")}),b=function(){var t=/(?:)/,n=t.exec;t.exec=function(){return n.apply(this,arguments)};var r="ab".split(t);return 2===r.length&&"a"===r[0]&&"b"===r[1]}();t.exports=function(r,t,n){var e=d(r),o=!h(function(){var t={};return t[e]=function(){return 7},7!=""[r](t)}),i=o?!h(function(){var t=!1,n=/a/;return n.exec=function(){return t=!0,null},"split"===r&&(n.constructor={},n.constructor[y]=function(){return n}),n[e](""),!t}):undefined;if(!o||!i||"replace"===r&&!g||"split"===r&&!b){var u=/./[e],c=n(p,e,""[r],function(t,n,r,e,i){return n.exec===v?o&&!i?{done:!0,value:u.call(n,r,e)}:{done:!0,value:t.call(r,n,e)}:{done:!1}}),f=c[0],a=c[1];s(String.prototype,r,f),l(RegExp.prototype,e,2==t?function(t,n){return a.call(t,this,n)}:function(t){return a.call(t,this)})}}},function(t,n,r){var h=r(17),p=r(103),d=r(76),v=r(3),y=r(6),g=r(78),b={},m={};(n=t.exports=function(t,n,r,e,i){var o,u,c,f,a=i?function(){return t}:g(t),s=h(r,e,n?2:1),l=0;if("function"!=typeof a)throw TypeError(t+" is not iterable!");if(d(a)){for(o=y(t.length);l>>=1)&&(n+=n))1&e&&(r+=n);return r}},function(t,n){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},function(t,n){var r=Math.expm1;t.exports=!r||22025.465794806718=t.length?(this._t=undefined,i(1)):i(0,"keys"==n?r:"values"==n?t[r]:[r,t[r]])},"values"),o.Arguments=o.Array,e("keys"),e("values"),e("entries")},function(t,n,r){"use strict";var e,i,u=r(53),c=RegExp.prototype.exec,f=String.prototype.replace,o=c,a="lastIndex",s=(e=/a/,i=/b*/g,c.call(e,"a"),c.call(i,"a"),0!==e[a]||0!==i[a]),l=/()??/.exec("")[1]!==undefined;(s||l)&&(o=function(t){var n,r,e,i,o=this;return l&&(r=new RegExp("^"+o.source+"$(?!\\s)",u.call(o))),s&&(n=o[a]),e=c.call(o,t),s&&e&&(o[a]=o.global?e.index+e[0].length:n),l&&e&&1>1,s=23===n?j(2,-24)-j(2,-77):0,l=0,h=t<0||0===t&&1/t<0?1:0;for((t=M(t))!=t||t===P?(i=t!=t?1:0,e=f):(e=A(I(t)/T),t*(o=j(2,-e))<1&&(e--,o*=2),2<=(t+=1<=e+a?s/o:s*j(2,1-a))*o&&(e++,o/=2),f<=e+a?(i=0,e=f):1<=e+a?(i=(t*o-1)*j(2,n),e+=a):(i=t*j(2,a-1)*j(2,n),e=0));8<=n;u[l++]=255&i,i/=256,n-=8);for(e=e<>1,c=i-7,f=r-1,a=t[f--],s=127&a;for(a>>=7;0>=-c,c+=n;0>8&255]}function V(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]}function Y(t){return D(t,52,8)}function z(t){return D(t,23,4)}function q(t,n,r){v(t[w],n,{get:function(){return this[r]}})}function K(t,n,r,e){var i=p(+r);if(i+n>t[k])throw O(S);var o=t[R]._b,u=i+t[C],c=o.slice(u,u+n);return e?c:c.reverse()}function $(t,n,r,e,i,o){var u=p(+r);if(u+n>t[k])throw O(S);for(var c=t[R]._b,f=u+t[C],a=e(+i),s=0;sZ;)(J=H[Z++])in x||c(x,J,F[J]);o||(X.constructor=x)}var Q=new _(new x(2)),tt=_[w].setInt8;Q.setInt8(0,2147483648),Q.setInt8(1,2147483649),!Q.getInt8(0)&&Q.getInt8(1)||f(_[w],{setInt8:function(t,n){tt.call(this,t,n<<24>>24)},setUint8:function(t,n){tt.call(this,t,n<<24>>24)}},!0)}else x=function(t){s(this,x,b);var n=p(t);this._b=y.call(new Array(n),0),this[k]=n},_=function(t,n,r){s(this,_,m),s(t,x,m);var e=t[k],i=l(n);if(i<0||e>24},getUint8:function(t){return K(this,1,t)[0]},getInt16:function(t){var n=K(this,2,t,arguments[1]);return(n[1]<<8|n[0])<<16>>16},getUint16:function(t){var n=K(this,2,t,arguments[1]);return n[1]<<8|n[0]},getInt32:function(t){return G(K(this,4,t,arguments[1]))},getUint32:function(t){return G(K(this,4,t,arguments[1]))>>>0},getFloat32:function(t){return U(K(this,4,t,arguments[1]),23,4)},getFloat64:function(t){return U(K(this,8,t,arguments[1]),52,8)},setInt8:function(t,n){$(this,1,t,W,n)},setUint8:function(t,n){$(this,1,t,W,n)},setInt16:function(t,n){$(this,2,t,B,n,arguments[2])},setUint16:function(t,n){$(this,2,t,B,n,arguments[2])},setInt32:function(t,n){$(this,4,t,V,n,arguments[2])},setUint32:function(t,n){$(this,4,t,V,n,arguments[2])},setFloat32:function(t,n){$(this,4,t,z,n,arguments[2])},setFloat64:function(t,n){$(this,8,t,Y,n,arguments[2])}});g(x,b),g(_,m),c(_[w],u.VIEW,!0),n[b]=x,n[m]=_},function(t,n){var r=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},function(t,n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}t.exports=function(t){return"object"===r(t)?null!==t:"function"==typeof t}},function(t,n,r){t.exports=!r(120)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,n,r){t.exports=!r(8)&&!r(2)(function(){return 7!=Object.defineProperty(r(60)("div"),"a",{get:function(){return 7}}).a})},function(t,n,r){var e=r(1),i=r(7),o=r(30),u=r(61),c=r(9).f;t.exports=function(t){var n=i.Symbol||(i.Symbol=o?{}:e.Symbol||{});"_"==t.charAt(0)||t in n||c(n,t,{value:u.f(t)})}},function(t,n,r){var u=r(13),c=r(15),f=r(49)(!1),a=r(62)("IE_PROTO");t.exports=function(t,n){var r,e=c(t),i=0,o=[];for(r in e)r!=a&&u(e,r)&&o.push(r);for(;n.length>i;)u(e,r=n[i++])&&(~f(o,r)||o.push(r));return o}},function(t,n,r){var u=r(9),c=r(3),f=r(31);t.exports=r(8)?Object.defineProperties:function(t,n){c(t);for(var r,e=f(n),i=e.length,o=0;o>>0||(u.test(r)?16:10))}:e},function(t,n,r){var e=r(1).parseFloat,i=r(39).trim;t.exports=1/e(r(66)+"-0")!=-Infinity?function(t){var n=i(String(t),3),r=e(n);return 0===r&&"-"==n.charAt(0)?-0:r}:e},function(t,n,r){var e=r(23);t.exports=function(t,n){if("number"!=typeof t&&"Number"!=e(t))throw TypeError(n);return+t}},function(t,n,r){var e=r(4),i=Math.floor;t.exports=function(t){return!e(t)&&isFinite(t)&&i(t)===t}},function(t,n){t.exports=Math.log1p||function(t){return-1e-8<(t=+t)&&t<1e-8?t-t*t/2:Math.log(1+t)}},function(t,n,r){"use strict";var e=r(33),i=r(28),o=r(38),u={};r(14)(u,r(5)("iterator"),function(){return this}),t.exports=function(t,n,r){t.prototype=e(u,{next:i(1,r)}),o(t,n+" Iterator")}},function(t,n,r){var u=r(3);t.exports=function(t,n,r,e){try{return e?n(u(r)[0],r[1]):n(r)}catch(o){var i=t["return"];throw i!==undefined&&u(i.call(t)),o}}},function(t,n,r){var e=r(216);t.exports=function(t,n){return new(e(t))(n)}},function(t,n,r){var s=r(18),l=r(10),h=r(44),p=r(6);t.exports=function(t,n,r,e,i){s(n);var o=l(t),u=h(o),c=p(o.length),f=i?c-1:0,a=i?-1:1;if(r<2)for(;;){if(f in u){e=u[f],f+=a;break}if(f+=a,i?f<0:c<=f)throw TypeError("Reduce of empty array with no initial value")}for(;i?0<=f:ft;)l(r[t++]);h._c=[],h._n=!1,n&&!h._h&&R(h)})}},R=function R(o){g.call(f,function(){var t,n,r,e=o._v,i=k(o);if(i&&(t=w(function(){j?O.emit("unhandledRejection",e,o):(n=f.onunhandledrejection)?n({promise:o,reason:e}):(r=f.console)&&r.error&&r.error("Unhandled promise rejection",e)}),o._h=j||k(o)?2:1),o._a=undefined,i&&t.e)throw t.v})},k=function k(t){return 1!==t._h&&0===(t._a||t._c).length},C=function C(n){g.call(f,function(){var t;j?O.emit("rejectionHandled",n):(t=f.onrejectionhandled)&&t({promise:n,reason:n._v})})},D=function D(t){var n=this;n._d||(n._d=!0,(n=n._w||n)._v=t,n._s=2,n._a||(n._a=n._c.slice()),L(n,!0))},U=function U(r){var e,i=this;if(!i._d){i._d=!0,i=i._w||i;try{if(i===r)throw E("Promise can't be resolved itself");(e=N(r))?b(function(){var t={_w:i,_d:!1};try{e.call(r,a(U,t,1),a(D,t,1))}catch(n){D.call(t,n)}}):(i._v=r,i._s=1,L(i,!1))}catch(t){D.call({_w:i,_d:!1},t)}}};T||(M=function(t){d(this,M,_,"_h"),p(t),r.call(this);try{t(a(U,this,1),a(D,this,1))}catch(n){D.call(this,n)}},(r=function(t){this._c=[],this._a=undefined,this._s=0,this._d=!1,this._v=undefined,this._h=0,this._n=!1}).prototype=e(43)(M.prototype,{then:function(t,n){var r=I(y(this,M));return r.ok="function"!=typeof t||t,r.fail="function"==typeof n&&n,r.domain=j?O.domain:undefined,this._c.push(r),this._a&&this._a.push(r),this._s&&L(this,!1),r.promise},"catch":function(t){return this.then(undefined,t)}}),o=function o(){var t=new r;this.promise=t,this.resolve=a(U,t,1),this.reject=a(D,t,1)},m.f=I=function I(t){return t===M||t===u?new o(t):i(t)}),l(l.G+l.W+l.F*!T,{Promise:M}),e(38)(M,_),e(41)(_),u=e(7)[_],l(l.S+l.F*!T,_,{reject:function(t){var n=I(this);return(0,n.reject)(t),n.promise}}),l(l.S+l.F*(c||!T),_,{resolve:function(t){return x(c&&this===u?M:this,t)}}),l(l.S+l.F*!(T&&e(52)(function(t){M.all(t)["catch"](A)})),_,{all:function(t){var u=this,n=I(u),c=n.resolve,f=n.reject,r=w(function(){var e=[],i=0,o=1;v(t,!1,function(t){var n=i++,r=!1;e.push(undefined),o++,u.resolve(t).then(function(t){r||(r=!0,e[n]=t,--o||c(e))},f)}),--o||c(e)});return r.e&&f(r.v),n.promise},race:function(t){var n=this,r=I(n),e=r.reject,i=w(function(){v(t,!1,function(t){n.resolve(t).then(r.resolve,e)})});return i.e&&e(i.v),r.promise}})},function(t,n,r){"use strict";var i=r(18);function e(t){var r,e;this.promise=new t(function(t,n){if(r!==undefined||e!==undefined)throw TypeError("Bad Promise constructor");r=t,e=n}),this.resolve=i(r),this.reject=i(e)}t.exports.f=function(t){return new e(t)}},function(t,n,r){var e=r(3),i=r(4),o=r(111);t.exports=function(t,n){if(e(t),i(n)&&n.constructor===t)return n;var r=o.f(t);return(0,r.resolve)(n),r.promise}},function(t,n,r){"use strict";var u=r(9).f,c=r(33),f=r(43),a=r(17),s=r(42),l=r(56),e=r(72),i=r(107),o=r(41),h=r(8),p=r(27).fastKey,d=r(37),v=h?"_s":"size",y=function y(t,n){var r,e=p(n);if("F"!==e)return t._i[e];for(r=t._f;r;r=r.n)if(r.k==n)return r};t.exports={getConstructor:function(t,o,r,e){var i=t(function(t,n){s(t,i,o,"_i"),t._t=o,t._i=c(null),t._f=undefined,t._l=undefined,t[v]=0,n!=undefined&&l(n,r,t[e],t)});return f(i.prototype,{clear:function(){for(var t=d(this,o),n=t._i,r=t._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=undefined),delete n[r.i];t._f=t._l=undefined,t[v]=0},"delete":function(t){var n=d(this,o),r=y(n,t);if(r){var e=r.n,i=r.p;delete n._i[r.i],r.r=!0,i&&(i.n=e),e&&(e.p=i),n._f==r&&(n._f=e),n._l==r&&(n._l=i),n[v]--}return!!r},forEach:function(t){d(this,o);for(var n,r=a(t,1f&&(a=a.slice(0,f)),e?a+i:i+a}},function(t,n,r){var f=r(8),a=r(31),s=r(15),l=r(45).f;t.exports=function(c){return function(t){for(var n,r=s(t),e=a(r),i=e.length,o=0,u=[];oi;)s(K,n=r[i++])||n==V||n==d||e.push(n);return e}function f(t){for(var n,r=t===J,e=D(r?$:F(t)),i=[],o=0;e.length>o;)!s(K,n=e[o++])||r&&!s(J,n)||i.push(K[n]);return i}var a=r(1),s=r(13),l=r(8),h=r(0),p=r(11),d=r(27).KEY,v=r(2),y=r(48),g=r(38),b=r(29),m=r(5),w=r(61),S=r(89),x=r(127),_=r(51),E=r(3),O=r(4),P=r(10),F=r(15),M=r(26),j=r(28),A=r(33),I=r(92),T=r(20),N=r(50),L=r(9),R=r(31),k=T.f,C=L.f,D=I.f,U=a.Symbol,G=a.JSON,W=G&&G.stringify,B="prototype",V=m("_hidden"),Y=m("toPrimitive"),z={}.propertyIsEnumerable,q=y("symbol-registry"),K=y("symbols"),$=y("op-symbols"),J=Object[B],X="function"==typeof U&&!!N.f,H=a.QObject,Z=!H||!H[B]||!H[B].findChild,Q=l&&v(function(){return 7!=A(C({},"a",{get:function(){return C(this,"a",{value:7}).a}})).a})?function(t,n,r){var e=k(J,n);e&&delete J[n],C(t,n,r),e&&t!==J&&C(J,n,e)}:C,tt=function tt(t){var n=K[t]=A(U[B]);return n._k=t,n},nt=X&&"symbol"==e(U.iterator)?function(t){return"symbol"==e(t)}:function(t){return t instanceof U},rt=function(t,n,r){return t===J&&rt($,n,r),E(t),n=M(n,!0),E(r),s(K,n)?(r.enumerable?(s(t,V)&&t[V][n]&&(t[V][n]=!1),r=A(r,{enumerable:j(0,!1)})):(s(t,V)||C(t,V,j(1,{})),t[V][n]=!0),Q(t,n,r)):C(t,n,r)};X||(p((U=function(){if(this instanceof U)throw TypeError("Symbol is not a constructor!");var n=b(0it;)m(et[it++]);for(var ot=R(m.store),ut=0;ot.length>ut;)S(ot[ut++]);h(h.S+h.F*!X,"Symbol",{"for":function(t){return s(q,t+="")?q[t]:q[t]=U(t)},keyFor:function(t){if(!nt(t))throw TypeError(t+" is not a symbol!");for(var n in q)if(q[n]===t)return n},useSetter:function(){Z=!0},useSimple:function(){Z=!1}}),h(h.S+h.F*!X,"Object",{create:function(t,n){return n===undefined?A(t):i(A(t),n)},defineProperty:rt,defineProperties:i,getOwnPropertyDescriptor:u,getOwnPropertyNames:c,getOwnPropertySymbols:f});var ct=v(function(){N.f(1)});h(h.S+h.F*ct,"Object",{getOwnPropertySymbols:function(t){return N.f(P(t))}}),G&&h(h.S+h.F*(!X||v(function(){var t=U();return"[null]"!=W([t])||"{}"!=W({a:t})||"{}"!=W(Object(t))})),"JSON",{stringify:function(t){for(var r,e,n=[t],i=1;iu;)o.call(t,e=i[u++])&&n.push(e);return n}},function(t,n,r){var e=r(0);e(e.S,"Object",{create:r(33)})},function(t,n,r){var e=r(0);e(e.S+e.F*!r(8),"Object",{defineProperty:r(9).f})},function(t,n,r){var e=r(0);e(e.S+e.F*!r(8),"Object",{defineProperties:r(91)})},function(t,n,r){var e=r(15),i=r(20).f;r(21)("getOwnPropertyDescriptor",function(){return function(t,n){return i(e(t),n)}})},function(t,n,r){var e=r(10),i=r(35);r(21)("getPrototypeOf",function(){return function(t){return i(e(t))}})},function(t,n,r){var e=r(10),i=r(31);r(21)("keys",function(){return function(t){return i(e(t))}})},function(t,n,r){r(21)("getOwnPropertyNames",function(){return r(92).f})},function(t,n,r){var e=r(4),i=r(27).onFreeze;r(21)("freeze",function(n){return function(t){return n&&e(t)?n(i(t)):t}})},function(t,n,r){var e=r(4),i=r(27).onFreeze;r(21)("seal",function(n){return function(t){return n&&e(t)?n(i(t)):t}})},function(t,n,r){var e=r(4),i=r(27).onFreeze;r(21)("preventExtensions",function(n){return function(t){return n&&e(t)?n(i(t)):t}})},function(t,n,r){var e=r(4);r(21)("isFrozen",function(n){return function(t){return!e(t)||!!n&&n(t)}})},function(t,n,r){var e=r(4);r(21)("isSealed",function(n){return function(t){return!e(t)||!!n&&n(t)}})},function(t,n,r){var e=r(4);r(21)("isExtensible",function(n){return function(t){return!!e(t)&&(!n||n(t))}})},function(t,n,r){var e=r(0);e(e.S+e.F,"Object",{assign:r(93)})},function(t,n,r){var e=r(0);e(e.S,"Object",{is:r(94)})},function(t,n,r){var e=r(0);e(e.S,"Object",{setPrototypeOf:r(65).set})},function(t,n,r){"use strict";var e=r(46),i={};i[r(5)("toStringTag")]="z",i+""!="[object z]"&&r(11)(Object.prototype,"toString",function(){return"[object "+e(this)+"]"},!0)},function(t,n,r){var e=r(0);e(e.P,"Function",{bind:r(95)})},function(t,n,r){var e=r(9).f,i=Function.prototype,o=/^\s*function ([^ (]*)/;"name"in i||r(8)&&e(i,"name",{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(t){return""}}})},function(t,n,r){"use strict";var e=r(4),i=r(35),o=r(5)("hasInstance"),u=Function.prototype;o in u||r(9).f(u,o,{value:function(t){if("function"!=typeof this||!e(t))return!1;if(!e(this.prototype))return t instanceof this;for(;t=i(t);)if(this.prototype===t)return!0;return!1}})},function(t,n,r){var e=r(0),i=r(97);e(e.G+e.F*(parseInt!=i),{parseInt:i})},function(t,n,r){var e=r(0),i=r(98);e(e.G+e.F*(parseFloat!=i),{parseFloat:i})},function(t,n,r){"use strict";var e=r(1),i=r(13),o=r(23),u=r(67),s=r(26),c=r(2),f=r(34).f,a=r(20).f,l=r(9).f,h=r(39).trim,p="Number",d=e[p],v=d,y=d.prototype,g=o(r(33)(y))==p,b="trim"in String.prototype,m=function m(t){var n=s(t,!1);if("string"==typeof n&&2x;x++)i(v,w=S[x])&&!i(d,w)&&l(d,w,a(v,w));(d.prototype=y).constructor=d,r(11)(e,p,d)}},function(t,n,r){"use strict";var e=r(0),a=r(19),s=r(99),l=r(68),i=1..toFixed,o=Math.floor,u=[0,0,0,0,0,0],h="Number.toFixed: incorrect invocation!",p=function p(t,n){for(var r=-1,e=n;++r<6;)e+=t*u[r],u[r]=e%1e7,e=o(e/1e7)},d=function d(t){for(var n=6,r=0;0<=--n;)r+=u[n],u[n]=o(r/t),r=r%t*1e7},v=function v(){for(var t=6,n="";0<=--t;)if(""!==n||0===t||0!==u[t]){var r=String(u[t]);n=""===n?r:n+l.call("0",7-r.length)+r}return n},y=function y(t,n,r){return 0===n?r:n%2==1?y(t,n-1,r*t):y(t*t,n/2,r)},g=function g(t){for(var n=0,r=t;4096<=r;)n+=12,r/=4096;for(;2<=r;)n+=1,r/=2;return n};e(e.P+e.F*(!!i&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!r(2)(function(){i.call({})})),"Number",{toFixed:function(t){var n,r,e,i,o=s(this,h),u=a(t),c="",f="0";if(u<0||20>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},function(t,n,r){var e=r(0),i=Math.exp;e(e.S,"Math",{cosh:function(t){return(i(t=+t)+i(-t))/2}})},function(t,n,r){var e=r(0),i=r(70);e(e.S+e.F*(i!=Math.expm1),"Math",{expm1:i})},function(t,n,r){var e=r(0);e(e.S,"Math",{fround:r(170)})},function(t,n,r){var o=r(69),e=Math.pow,u=e(2,-52),c=e(2,-23),f=e(2,127)*(2-c),a=e(2,-126),s=function s(t){return t+1/u-1/u};t.exports=Math.fround||function(t){var n,r,e=Math.abs(t),i=o(t);return e>>16)*u+o*(r&i>>>16)<<16>>>0)}})},function(t,n,r){var e=r(0);e(e.S,"Math",{log10:function(t){return Math.log(t)*Math.LOG10E}})},function(t,n,r){var e=r(0);e(e.S,"Math",{log1p:r(101)})},function(t,n,r){var e=r(0);e(e.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}})},function(t,n,r){var e=r(0);e(e.S,"Math",{sign:r(69)})},function(t,n,r){var e=r(0),i=r(70),o=Math.exp;e(e.S+e.F*r(2)(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(t){return Math.abs(t=+t)<1?(i(t)-i(-t))/2:(o(t-1)-o(-t-1))*(Math.E/2)}})},function(t,n,r){var e=r(0),i=r(70),o=Math.exp;e(e.S,"Math",{tanh:function(t){var n=i(t=+t),r=i(-t);return n==Infinity?1:r==Infinity?-1:(n-r)/(o(t)+o(-t))}})},function(t,n,r){var e=r(0);e(e.S,"Math",{trunc:function(t){return(0>10),n%1024+56320))}return r.join("")}})},function(t,n,r){var e=r(0),u=r(15),c=r(6);e(e.S,"String",{raw:function(t){for(var n=u(t.raw),r=c(n.length),e=arguments.length,i=[],o=0;o=n.length?{value:undefined,done:!0}:(t=e(n,r),this._i+=t.length,{value:t,done:!1})})},function(t,n,r){"use strict";var e=r(0),i=r(71)(!1);e(e.P,"String",{codePointAt:function(t){return i(this,t)}})},function(t,n,r){"use strict";var e=r(0),u=r(6),c=r(73),f="endsWith",a=""[f];e(e.P+e.F*r(75)(f),"String",{endsWith:function(t){var n=c(this,t,f),r=1g;)v(y[g++]);(l.constructor=a).prototype=l,r(11)(e,"RegExp",a)}r(41)("RegExp")},function(t,n,r){"use strict";r(109);var e=r(3),i=r(53),o=r(8),u="toString",c=/./[u],f=function f(t){r(11)(RegExp.prototype,u,t,!0)};r(2)(function(){return"/a/b"!=c.call({source:"a",flags:"b"})})?f(function(){var t=e(this);return"/".concat(t.source,"/","flags"in t?t.flags:!o&&t instanceof RegExp?i.call(t):undefined)}):c.name!=u&&f(function(){return c.call(this)})},function(t,n,r){"use strict";var l=r(3),h=r(6),p=r(82),d=r(54);r(55)("match",1,function(e,i,a,s){return[function(t){var n=e(this),r=t==undefined?undefined:t[i];return r!==undefined?r.call(t,n):new RegExp(t)[i](String(n))},function(t){var n=s(a,t,this);if(n.done)return n.value;var r=l(t),e=String(this);if(!r.global)return d(r,e);for(var i,o=r.unicode,u=[],c=r.lastIndex=0;null!==(i=d(r,e));){var f=String(i[0]);""===(u[c]=f)&&(r.lastIndex=p(e,h(r.lastIndex),o)),c++}return 0===c?null:u}]})},function(t,n,r){"use strict";var _=r(3),e=r(10),E=r(6),O=r(19),P=r(82),F=r(54),M=Math.max,j=Math.min,h=Math.floor,p=/\$([$&`']|\d\d?|<[^>]*>)/g,d=/\$([$&`']|\d\d?)/g,A=function A(t){return t===undefined?t:String(t)};r(55)("replace",2,function(i,o,w,S){return[function(t,n){var r=i(this),e=t==undefined?undefined:t[o];return e!==undefined?e.call(t,r,n):w.call(String(r),t,n)},function(t,n){var r=S(w,t,this,n);if(r.done)return r.value;var e=_(t),i=String(this),o="function"==typeof n;o||(n=String(n));var u=e.global;if(u){var c=e.unicode;e.lastIndex=0}for(var f=[];;){var a=F(e,i);if(null===a)break;if(f.push(a),!u)break;""===String(a[0])&&(e.lastIndex=P(i,E(e.lastIndex),c))}for(var s="",l=0,h=0;h>>0,s=new RegExp(t.source,c+"g");(e=h.call(s,r))&&!(f<(i=s[v])&&(u.push(r.slice(f,e.index)),1=a));)s[v]===e.index&&s[v]++;return f===r[d]?!o&&s.test("")||u.push(""):u.push(r.slice(f)),u[d]>a?u.slice(0,a):u}:"0"[u](undefined,0)[d]?function b(t,n){return t===undefined&&0===n?[]:y.call(this,t,n)}:y,[function(t,n){var r=i(this),e=t==undefined?undefined:t[o];return e!==undefined?e.call(t,r,n):b.call(String(r),t,n)},function(t,n){var r=g(b,t,this,n,b!==y);if(r.done)return r.value;var e=m(t),i=String(this),o=w(e,RegExp),u=e.unicode,c=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(P?"y":"g"),f=new o(P?e:"^(?:"+e.source+")",c),a=n===undefined?O:n>>>0;if(0==a)return[];if(0===i.length)return null===_(f,i)?[i]:[];for(var s=0,l=0,h=[];l=n.length)return{value:undefined,done:!0}}while(!((t=n[this._i++])in this._t));return{value:t,done:!1}}),e(e.S,"Reflect",{enumerate:function(t){return new o(t)}})},function(t,n,r){var o=r(20),u=r(35),c=r(13),e=r(0),f=r(4),a=r(3);e(e.S,"Reflect",{get:function s(t,n){var r,e,i=arguments.length<3?t:arguments[2];return a(t)===i?t[n]:(r=o.f(t,n))?c(r,"value")?r.value:r.get!==undefined?r.get.call(i):undefined:f(e=u(t))?s(e,n,i):void 0}})},function(t,n,r){var e=r(20),i=r(0),o=r(3);i(i.S,"Reflect",{getOwnPropertyDescriptor:function(t,n){return e.f(o(t),n)}})},function(t,n,r){var e=r(0),i=r(35),o=r(3);e(e.S,"Reflect",{getPrototypeOf:function(t){return i(o(t))}})},function(t,n,r){var e=r(0);e(e.S,"Reflect",{has:function(t,n){return n in t}})},function(t,n,r){var e=r(0),i=r(3),o=Object.isExtensible;e(e.S,"Reflect",{isExtensible:function(t){return i(t),!o||o(t)}})},function(t,n,r){var e=r(0);e(e.S,"Reflect",{ownKeys:r(116)})},function(t,n,r){var e=r(0),i=r(3),o=Object.preventExtensions;e(e.S,"Reflect",{preventExtensions:function(t){i(t);try{return o&&o(t),!0}catch(n){return!1}}})},function(t,n,r){var c=r(9),f=r(20),a=r(35),s=r(13),e=r(0),l=r(28),h=r(3),p=r(4);e(e.S,"Reflect",{set:function d(t,n,r){var e,i,o=arguments.length<4?t:arguments[3],u=f.f(h(t),n);if(!u){if(p(i=a(t)))return d(i,n,r,o);u=l(0)}if(s(u,"value")){if(!1===u.writable||!p(o))return!1;if(e=f.f(o,n)){if(e.get||e.set||!1===e.writable)return!1;e.value=r,c.f(o,n,e)}else c.f(o,n,l(0,r));return!0}return u.set!==undefined&&(u.set.call(o,r),!0)}})},function(t,n,r){var e=r(0),i=r(65);i&&e(e.S,"Reflect",{setPrototypeOf:function(t,n){i.check(t,n);try{return i.set(t,n),!0}catch(r){return!1}}})},function(t,n,r){r(268),t.exports=r(7).Array.includes},function(t,n,r){"use strict";var e=r(0),i=r(49)(!0);e(e.P,"Array",{includes:function(t){return i(this,t,1c;)(r=i(e,n=o[c++]))!==undefined&&l(u,n,r);return u}})},function(t,n,r){r(285),t.exports=r(7).Object.values},function(t,n,r){var e=r(0),i=r(118)(!1);e(e.S,"Object",{values:function(t){return i(t)}})},function(t,n,r){r(287),t.exports=r(7).Object.entries},function(t,n,r){var e=r(0),i=r(118)(!0);e(e.S,"Object",{entries:function(t){return i(t)}})},function(t,n,r){"use strict";r(110),r(289),t.exports=r(7).Promise["finally"]},function(t,n,r){"use strict";var e=r(0),i=r(7),o=r(1),u=r(47),c=r(112);e(e.P+e.R,"Promise",{"finally":function(n){var r=u(this,i.Promise||o.Promise),t="function"==typeof n;return this.then(t?function(t){return c(r,n()).then(function(){return t})}:n,t?function(t){return c(r,n()).then(function(){throw t})}:n)}})},function(t,n,r){r(291),r(292),r(293),t.exports=r(7)},function(t,n,r){var e=r(1),i=r(0),o=r(57),u=[].slice,c=/MSIE .\./.test(o),f=function f(i){return function(t,n){var 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

      EKu59lcq;!;hk~zb)!7+)eMW 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 + + + + +Created by iconfont + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fr/design/login/lib/font/iconfont.ttf b/designer-base/src/main/resources/com/fr/design/login/lib/font/iconfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d1a7b4f8b1dbcb255bcda3c6bd8859d48ac2b09f GIT binary patch literal 122432 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

    • 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 D+L^iW literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/login/lib/font/iconfont.woff b/designer-base/src/main/resources/com/fr/design/login/lib/font/iconfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..e4088c07ba47a0e1e45f459524389f9878048242 GIT binary patch literal 60244 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%0DhRw9OGcoK#+r&6O^nTbtIQ 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 I)`kH90B| { + content += ` '${key}': '${value}',\n`; + }); + + content = `var Store = { + i18n : { +${content} + }} +window.Store = Store;` + + fs.writeFileSync( + resolve( + __dirname, + `${filePrefix}.js` + ), + content + ); +} +function compilePropertiesFiles2JS() { + fs.readdirSync(resolve(__dirname, '../../../i18n')) + .forEach(file => compileSinglePropertiesFile2JS(file)); +} + +compilePropertiesFiles2JS(); diff --git a/designer-base/src/main/resources/com/fr/design/login/lib/polyfill.min.js b/designer-base/src/main/resources/com/fr/design/login/lib/polyfill.min.js new file mode 100644 index 0000000000..d3201b8604 --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/login/lib/polyfill.min.js @@ -0,0 +1,3 @@ +/* Disable minification (remove `.min` from URL path) for more info */ + +(function(undefined) {var _DOMTokenList=function(){var n=!0,t=function(t,e,r,o){Object.defineProperty?Object.defineProperty(t,e,{configurable:!1===n||!!o,get:r}):t.__defineGetter__(e,r)};try{t({},"support")}catch(e){n=!1}return function(n,e){var r=this,o=[],i={},a=0,c=0,f=function(n){t(r,n,function(){return u(),o[n]},!1)},l=function(){if(a>=c)for(;c>>0,"object"==typeof n[e]?n[e].baseVal=o.join(" "):n[e]=o.join(" "),l())},r.remove=function(){u.apply(r,t=arguments);for(var t,c={},f=0,g=[];f>>0,"object"==typeof n[e]?n[e].baseVal=o.join(" "):n[e]=o.join(" "),l()},r.toggle=function(n,t){return u.apply(r,[n]),undefined!==t?t?(r.add(n),!0):(r.remove(n),!1):i[n]?(r.remove(n),!1):(r.add(n),!0)},r}}();function ArrayCreate(r){if(1/r==-Infinity&&(r=0),r>Math.pow(2,32)-1)throw new RangeError("Invalid array length");var n=[];return n.length=r,n}function Call(t,l){var n=arguments.length>2?arguments[2]:[];if(!1===IsCallable(t))throw new TypeError(Object.prototype.toString.call(t)+"is not a function.");return t.apply(l,n)}function CreateDataProperty(e,r,t){var a={value:t,writable:!0,enumerable:!0,configurable:!0};try{return Object.defineProperty(e,r,a),!0}catch(n){return!1}}function CreateDataPropertyOrThrow(t,r,o){var e=CreateDataProperty(t,r,o);if(!e)throw new TypeError("Cannot assign value `"+Object.prototype.toString.call(o)+"` to property `"+Object.prototype.toString.call(r)+"` on object `"+Object.prototype.toString.call(t)+"`");return e}function CreateMethodProperty(e,r,t){var a={value:t,writable:!0,enumerable:!1,configurable:!0};Object.defineProperty(e,r,a)}function Get(n,t){return n[t]}function HasProperty(n,r){return r in n}function IsArray(r){return"[object Array]"===Object.prototype.toString.call(r)}function IsCallable(n){return"function"==typeof n}function RequireObjectCoercible(e){if(null===e||e===undefined)throw TypeError();return e}function SameValueNonNumber(e,n){return e===n}function ToBoolean(o){return Boolean(o)}function ToInteger(n){var i=Number(n);return isNaN(i)?0:1/i===Infinity||1/i==-Infinity||i===Infinity||i===-Infinity?i:(i<0?-1:1)*Math.floor(Math.abs(i))}function ToLength(n){var t=ToInteger(n);return t<=0?0:Math.min(t,Math.pow(2,53)-1)}function ToNumber(r){return Number(r)}function ToObject(e){if(null===e||e===undefined)throw TypeError();return Object(e)}function GetV(t,e){return ToObject(t)[e]}function GetMethod(e,n){var r=GetV(e,n);if(null===r||r===undefined)return undefined;if(!1===IsCallable(r))throw new TypeError("Method not callable: "+n);return r}function ToUint32(n){var i=Number(n);return isNaN(i)||1/i===Infinity||1/i==-Infinity||i===Infinity||i===-Infinity?0:(i<0?-1:1)*Math.floor(Math.abs(i))>>>0}function Type(e){switch(typeof e){case"undefined":return"undefined";case"boolean":return"boolean";case"number":return"number";case"string":return"string";case"symbol":return"symbol";default:return null===e?"null":"Symbol"in this&&e instanceof this.Symbol?"symbol":"object"}}function CreateIterResultObject(e,r){if("boolean"!==Type(r))throw new Error;var t={};return CreateDataProperty(t,"value",e),CreateDataProperty(t,"done",r),t}function EnumerableOwnProperties(e,r){for(var t=Object.keys(e),n=[],s=t.length,a=0;a2?arguments[2]:r,o=arguments.length>1?arguments[1]:[];if(!IsConstructor(r))throw new TypeError("F must be a constructor.");if(!IsConstructor(t))throw new TypeError("newTarget must be a constructor.");if(t===r)return new(Function.prototype.bind.apply(r,[null].concat(o)));var n=OrdinaryCreateFromConstructor(t,Object.prototype);return Call(r,n,o)}function ArraySpeciesCreate(r,e){if(1/e==-Infinity&&(e=0),!1===IsArray(r))return ArrayCreate(e);var t=Get(r,"constructor");if("object"===Type(t)&&null===(t="Symbol"in this&&"species"in this.Symbol?Get(t,this.Symbol.species):undefined)&&(t=undefined),t===undefined)return ArrayCreate(e);if(!IsConstructor(t))throw new TypeError("C must be a constructor");return Construct(t,[e])}function IsRegExp(e){if("object"!==Type(e))return!1;var t="Symbol"in this&&"match"in this.Symbol?Get(e,this.Symbol.match):undefined;if(t!==undefined)return ToBoolean(t);try{var n=e.lastIndex;return e.lastIndex=0,RegExp.prototype.exec.call(e),!0}catch(r){}finally{e.lastIndex=n}return!1}function IteratorClose(r,t){if("object"!==Type(r["[[Iterator]]"]))throw new Error(Object.prototype.toString.call(r["[[Iterator]]"])+"is not an Object.");var e=r["[[Iterator]]"],o=GetMethod(e,"return");if(o===undefined)return t;try{var n=Call(o,e)}catch(c){var a=c}if(t)return t;if(a)throw a;if("object"!==Type(n))throw new TypeError("Iterator's return method returned a non-object.");return t}function IteratorComplete(t){if("object"!==Type(t))throw new Error(Object.prototype.toString.call(t)+"is not an Object.");return ToBoolean(Get(t,"done"))}function IteratorNext(t){if(arguments.length<2)var e=Call(t["[[NextMethod]]"],t["[[Iterator]]"]);else e=Call(t["[[NextMethod]]"],t["[[Iterator]]"],[arguments[1]]);if("object"!==Type(e))throw new TypeError("bad iterator");return e}function IteratorStep(t){var r=IteratorNext(t);return!0!==IteratorComplete(r)&&r}function IteratorValue(t){if("object"!==Type(t))throw new Error(Object.prototype.toString.call(t)+"is not an Object.");return Get(t,"value")}function OrdinaryToPrimitive(r,t){if("string"===t)var e=["toString","valueOf"];else e=["valueOf","toString"];for(var i=0;i1?arguments[1]:undefined;if("object"===Type(e)){if(arguments.length<2)var i="default";else t===String?i="string":t===Number&&(i="number");var r="function"==typeof this.Symbol&&"symbol"==typeof this.Symbol.toPrimitive?GetMethod(e,this.Symbol.toPrimitive):undefined;if(r!==undefined){var n=Call(r,e,[i]);if("object"!==Type(n))return n;throw new TypeError("Cannot convert exotic object to primitive.")}return"default"===i&&(i="number"),OrdinaryToPrimitive(e,i)}return e}function ToString(t){switch(Type(t)){case"symbol":throw new TypeError("Cannot convert a Symbol value to a string");case"object":return ToString(ToPrimitive(t,"string"));default:return String(t)}}function ToPropertyKey(r){var i=ToPrimitive(r,String);return"symbol"===Type(i)?i:ToString(i)}function UTF16Decode(e,n){return 1024*(e-55296)+(n-56320)+65536}function UTF16Encoding(n){return n<=65535?n:[Math.floor((n-65536)/1024)+55296,(n-65536)%1024+56320]}var _mutation=function(){function e(e){return"function"==typeof Node?e instanceof Node:e&&"object"==typeof e&&e.nodeName&&e.nodeType>=1&&e.nodeType<=12}return function n(t){if(1===t.length)return e(t[0])?t[0]:document.createTextNode(t[0]+"");for(var o=document.createDocumentFragment(),r=0;r>0}function f(t){return t>>>0}function u(e){if(!("TYPED_ARRAY_POLYFILL_NO_ARRAY_ACCESSORS"in t)){if(e.length>N)throw RangeError("Array too large for polyfill");var r;for(r=0;r>r}function h(t,e){var r=32-e;return t<>>r}function y(t){return[255&t]}function s(t){return a(t[0],8)}function l(t){return[255&t]}function p(t){return h(t[0],8)}function c(t){return t=x(Number(t)),[t<0?0:t>255?255:255&t]}function b(t){return[255&t,t>>8&255]}function g(t){return a(t[1]<<8|t[0],16)}function E(t){return[255&t,t>>8&255]}function v(t){return h(t[1]<<8|t[0],16)}function _(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]}function O(t){return a(t[3]<<24|t[2]<<16|t[1]<<8|t[0],32)}function d(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]}function j(t){return h(t[3]<<24|t[2]<<16|t[1]<<8|t[0],32)}function P(t,e,r){function n(t){var e=m(t),r=t-e;return r<.5?e:r>.5?e+1:e%2?e+1:e}var o,i,f,u=(1<=F(2,1-u)){i=Y(m(I(t)/S),1023);var a=t/F(2,i);a<1&&(i-=1,a*=2),a>=2&&(i+=1,a/=2);var h=F(2,r);f=n(a*h)-h,i+=u,f/h>=1&&(i+=1,f=0),i>2*u&&(i=(1<>=1;return s.reverse(),f=s.join(""),u=(1<0?a*F(2,h-u)*(1+y/F(2,r)):0!==y?a*F(2,-(u-1))*(y/F(2,r)):a<0?-0:0}function w(t){return T(t,11,52)}function A(t){return P(t,11,52)}function L(t){return T(t,8,23)}function R(t){return P(t,8,23)}var B=void 0,N=1e5,S=Math.LN2,M=Math.abs,m=Math.floor,I=Math.log,U=Math.max,Y=Math.min,F=Math.pow,x=Math.round;!function(){var t=Object.defineProperty,e=!function(){try{return Object.defineProperty({},"x",{})}catch(t){return!1}}();t&&!e||(Object.defineProperty=function(e,r,n){if(t)try{return t(e,r,n)}catch(o){}if(e!==Object(e))throw TypeError("Object.defineProperty called on non-object");return Object.prototype.__defineGetter__&&"get"in n&&Object.prototype.__defineGetter__.call(e,r,n.get),Object.prototype.__defineSetter__&&"set"in n&&Object.prototype.__defineSetter__.call(e,r,n.set),"value"in n&&(e[r]=n.value),e})}(),function(){function a(t){if((t=i(t))<0)throw RangeError("ArrayBuffer size is not a small enough positive integer.");Object.defineProperty(this,"byteLength",{value:t}),Object.defineProperty(this,"_bytes",{value:Array(t)});for(var e=0;e=1&&"object"===e(arguments[0])&&arguments[0]instanceof h)return function(t){if(this.constructor!==t.constructor)throw TypeError();var e=t.length*this.BYTES_PER_ELEMENT;Object.defineProperty(this,"buffer",{value:new a(e)}),Object.defineProperty(this,"byteLength",{value:e}),Object.defineProperty(this,"byteOffset",{value:0}),Object.defineProperty(this,"length",{value:t.length});for(var r=0;r=1&&"object"===e(arguments[0])&&!(arguments[0]instanceof h)&&!(arguments[0]instanceof a||"ArrayBuffer"===r(arguments[0])))return function(t){var e=t.length*this.BYTES_PER_ELEMENT;Object.defineProperty(this,"buffer",{value:new a(e)}),Object.defineProperty(this,"byteLength",{value:e}),Object.defineProperty(this,"byteOffset",{value:0}),Object.defineProperty(this,"length",{value:t.length});for(var r=0;r=1&&"object"===e(arguments[0])&&(arguments[0]instanceof a||"ArrayBuffer"===r(arguments[0])))return function(t,e,r){if((e=f(e))>t.byteLength)throw RangeError("byteOffset out of range");if(e%this.BYTES_PER_ELEMENT)throw RangeError("buffer length minus the byteOffset is not a multiple of the element size.");if(r===B){var n=t.byteLength-e;if(n%this.BYTES_PER_ELEMENT)throw RangeError("length of buffer minus byteOffset not a multiple of the element size");r=n/this.BYTES_PER_ELEMENT}else r=f(r),n=r*this.BYTES_PER_ELEMENT;if(e+n>t.byteLength)throw RangeError("byteOffset and length reference an area beyond the end of the buffer");Object.defineProperty(this,"buffer",{value:t}),Object.defineProperty(this,"byteLength",{value:n}),Object.defineProperty(this,"byteOffset",{value:e}),Object.defineProperty(this,"length",{value:r})}.apply(this,arguments);throw TypeError()}function P(t,e,r){var n=function(){Object.defineProperty(this,"constructor",{value:n}),h.apply(this,arguments),u(this)};"__proto__"in n?n.__proto__=h:(n.from=h.from,n.of=h.of),n.BYTES_PER_ELEMENT=t;var o=function(){};return o.prototype=T,n.prototype=new o,Object.defineProperty(n.prototype,"BYTES_PER_ELEMENT",{value:t}),Object.defineProperty(n.prototype,"_pack",{value:e}),Object.defineProperty(n.prototype,"_unpack",{value:r}),n}t.ArrayBuffer=t.ArrayBuffer||a,Object.defineProperty(h,"from",{value:function(t){return new this(t)}}),Object.defineProperty(h,"of",{value:function(){return new this(arguments)}});var T={};h.prototype=T,Object.defineProperty(h.prototype,"_getter",{value:function(t){if(arguments.length<1)throw SyntaxError("Not enough arguments");if((t=f(t))>=this.length)return B;var e,r,n=[];for(e=0,r=this.byteOffset+t*this.BYTES_PER_ELEMENT;e=this.length)){var r,n,o=this._pack(e);for(r=0,n=this.byteOffset+t*this.BYTES_PER_ELEMENT;r0;)n._setter(h,n._getter(s)),s+=b,h+=b,g-=1;return n}}),Object.defineProperty(h.prototype,"every",{value:function(t){if(this===B||null===this)throw TypeError();var e=Object(this),r=f(e.length);if(!n(t))throw TypeError();for(var o=arguments[1],i=0;i1?arguments[1]:B,a=0;a1?arguments[1]:B,a=0;a0&&(n=Number(arguments[1]),n!==n?n=0:0!==n&&n!==1/0&&n!==-1/0&&(n=(n>0||-1)*m(M(n)))),n>=r)return-1;for(var o=n>=0?n:U(r-M(n),0);o1&&(n=Number(arguments[1]),n!==n?n=0:0!==n&&n!==1/0&&n!==-1/0&&(n=(n>0||-1)*m(M(n))));for(var o=n>=0?Y(n,r-1):r-M(n);o>=0;o--)if(e._getter(o)===t)return o;return-1}}),Object.defineProperty(h.prototype,"map",{value:function(t){if(this===B||null===this)throw TypeError();var e=Object(this),r=f(e.length);if(!n(t))throw TypeError();var o=[];o.length=r;for(var i=arguments[1],u=0;u=2?arguments[1]:e._getter(i++);i=2?arguments[1]:e._getter(i--);i>=0;)o=t.call(B,o,e._getter(i),i,e),i--;return o}}),Object.defineProperty(h.prototype,"reverse",{value:function(){if(this===B||null===this)throw TypeError();for(var t=Object(this),e=f(t.length),r=m(e/2),n=0,o=e-1;nthis.length)throw RangeError("Offset plus length of array is out of range");if(y=this.byteOffset+o*this.BYTES_PER_ELEMENT,s=r.length*this.BYTES_PER_ELEMENT,r.buffer===this.buffer){for(l=[],u=0,a=r.byteOffset;uthis.length)throw RangeError("Offset plus length of array is out of range");for(u=0;ur?1:0}if(this===B||null===this)throw TypeError();for(var r=Object(this),n=f(r.length),o=Array(n),i=0;ir?r:t}t=i(t),e=i(e),arguments.length<1&&(t=0),arguments.length<2&&(e=this.length),t<0&&(t=this.length+t),e<0&&(e=this.length+e),t=r(t,0,this.length),e=r(e,0,this.length);var n=e-t;return n<0&&(n=0),new this.constructor(this.buffer,this.byteOffset+t*this.BYTES_PER_ELEMENT,n)}});var N=P(1,y,s),S=P(1,l,p),I=P(1,c,p),F=P(2,b,g),x=P(2,E,v),k=P(4,_,O),C=P(4,d,j),z=P(4,R,L),D=P(8,A,w);t.Int8Array=t.Int8Array||N,t.Uint8Array=t.Uint8Array||S,t.Uint8ClampedArray=t.Uint8ClampedArray||I,t.Int16Array=t.Int16Array||F,t.Uint16Array=t.Uint16Array||x,t.Int32Array=t.Int32Array||k,t.Uint32Array=t.Uint32Array||C,t.Float32Array=t.Float32Array||z,t.Float64Array=t.Float64Array||D}(),function(){function e(t,e){return n(t.get)?t.get(e):t[e]}function o(t,e,n){if(!(t instanceof ArrayBuffer||"ArrayBuffer"===r(t)))throw TypeError();if((e=f(e))>t.byteLength)throw RangeError("byteOffset out of range");if(n=n===B?t.byteLength-e:f(n),e+n>t.byteLength)throw RangeError("byteOffset and length reference an area beyond the end of the buffer");Object.defineProperty(this,"buffer",{value:t}),Object.defineProperty(this,"byteLength",{value:n}),Object.defineProperty(this,"byteOffset",{value:e})}function i(t){return function r(n,o){if((n=f(n))+t.BYTES_PER_ELEMENT>this.byteLength)throw RangeError("Array index out of range");n+=this.byteOffset;for(var i=new Uint8Array(this.buffer,n,t.BYTES_PER_ELEMENT),u=[],h=0;hthis.byteLength)throw RangeError("Array index out of range");var u,h,y=new t([o]),s=new Uint8Array(y.buffer),l=[];for(u=0;u0;){var f=String(M),g=String(h);if(HasProperty(n,f)){var l=n[f];n[g]=l}else delete n[g];M+=s,h+=s,d-=1}return n});CreateMethodProperty(Array.prototype,"fill",function t(e){for(var r=arguments[1],n=arguments[2],o=ToObject(this),a=ToLength(Get(o,"length")),h=ToInteger(r),i=h<0?Math.max(a+h,0):Math.min(h,a),g=n===undefined?a:ToInteger(n),M=g<0?Math.max(a+g,0):Math.min(g,a);i1?arguments[1]:undefined,a=0;a1?arguments[1]:undefined,a=0;a=0)var a=n;else(a=o+n)<0&&(a=0);for(;a1?NaN:-1===t?-Infinity:1===t?Infinity:0===t&&1/t===Infinity?0:0===t&&1/t==-Infinity?-0:Math.log((1+t)/(1-t))/2});CreateMethodProperty(Math,"cbrt",function n(t){if(isNaN(t))return NaN;if(0===t&&1/t===Infinity)return 0;if(0===t&&1/t==-Infinity)return-0;if(t===Infinity)return Infinity;if(t===-Infinity)return-Infinity;var i=Math.pow(Math.abs(t),1/3);return t<0?-i:i});CreateMethodProperty(Math,"clz32",function t(r){var e=ToUint32(r);return e?32-e.toString(2).length:32});CreateMethodProperty(Math,"cosh",function n(t){if(isNaN(t))return NaN;if(0===t&&1/t===Infinity)return 1;if(0===t&&1/t==-Infinity)return 1;if(t===Infinity)return Infinity;if(t===-Infinity)return Infinity;if((t=Math.abs(t))>709){var i=Math.exp(.5*t);return i/2*i}var i=Math.exp(t);return(i+1/i)/2});CreateMethodProperty(Math,"expm1",function n(i){return isNaN(i)?NaN:0===i&&1/i===Infinity?0:0===i&&1/i==-Infinity?-0:i===Infinity?Infinity:i===-Infinity?-1:i>-1e-6&&i<1e-6?i+i*i/2:Math.exp(i)-1});CreateMethodProperty(Math,"fround",function(n){return isNaN(n)?NaN:1/n==+Infinity||1/n==-Infinity||n===+Infinity||n===-Infinity?n:new Float32Array([n])[0]});CreateMethodProperty(Math,"hypot",function t(n,r){if(0===arguments.length)return 0;for(var i=0,e=0,a=0;ae&&(i*=Math.pow(e/f,2),e=f),0===f&&0===e||(i+=Math.pow(f/e,2))}return e*Math.sqrt(i)});CreateMethodProperty(Math,"imul",function t(r,e){var n=ToUint32(r),o=ToUint32(e),i=n>>>16&65535,a=65535&n,u=o>>>16&65535,h=65535&o;return a*h+(i*h+a*u<<16>>>0)|0});CreateMethodProperty(Math,"log10",function t(e){return Math.log(e)/Math.LN10});CreateMethodProperty(Math,"log1p",function r(t){if(-1<(t=Number(t))&&t<1){for(var o=t,e=2;e<=300;e++)o+=Math.pow(-1,e-1)*Math.pow(t,e)/e;return o}return Math.log(1+t)});CreateMethodProperty(Math,"log2",function t(e){return Math.log(e)/Math.LN2});CreateMethodProperty(Math,"sign",function i(n){var n=Number(n);return isNaN(n)?NaN:1/n==-Infinity?-0:1/n===Infinity?0:n<0?-1:n>0?1:void 0});CreateMethodProperty(Math,"sinh",function r(t){var a=t<0?-1:1,e=Math.abs(t);if(e<22){if(en&&(r.length=n)}var r=A(n),o=0;return function(n,t){r[o++]=n,r[o++]=t,2===o&&rn.nextTick(e)}}function l(n,t){var e,r,u,c,f=0;if(!n)throw h(Q);var a=n[rn[q][z]];if(o(a))r=a.call(n);else{if(!o(n.next)){if(i(n,A)){for(e=n.length;f1114111)throw new RangeError("Invalid code point "+Object.prototype.toString.call(p));var c=UTF16Encoding(p);IsArray(c)?a=a.concat(c):a.push(c),i+=1,t.push(String.fromCharCode.apply(null,a))}return 0===n?"":t.join("")});CreateMethodProperty(String.prototype,"codePointAt",function e(t){var r=RequireObjectCoercible(this),o=ToString(r),n=ToInteger(t),i=o.length;if(n<0||n>=i)return undefined;var c=String.prototype.charCodeAt.call(o,n);if(c<55296||c>56319||n+1===i)return c;var a=String.prototype.charCodeAt.call(o,n+1);return a<56320||a>57343?c:UTF16Decode(c,a)});CreateMethodProperty(String.prototype,"endsWith",function e(t){"use strict";var r=arguments.length>1?arguments[1]:undefined,n=RequireObjectCoercible(this),i=ToString(n);if(IsRegExp(t))throw new TypeError("First argument to String.prototype.endsWith must not be a regular expression");var o=ToString(t),s=i.length,g=r===undefined?s:ToInteger(r),h=Math.min(Math.max(g,0),s),u=o.length,a=h-u;return!(a<0)&&i.substr(a,u)===o});CreateMethodProperty(String.prototype,"includes",function e(t){"use strict";var r=arguments.length>1?arguments[1]:undefined,n=RequireObjectCoercible(this),i=ToString(n);if(IsRegExp(t))throw new TypeError("First argument to String.prototype.includes must not be a regular expression");var o=ToString(t),g=ToInteger(r),a=i.length,p=Math.min(Math.max(g,0),a);return-1!==String.prototype.indexOf.call(i,o,p)});CreateMethodProperty(String.prototype,"padEnd",function e(r){"use strict";var t=arguments.length>1?arguments[1]:undefined,n=RequireObjectCoercible(this),i=ToString(n),o=ToLength(r),u=i.length;if(o<=u)return i;if(t===undefined)var d=" ";else var d=ToString(t);if(""===d)return i;for(var f=o-u,a="",g=0;g1?arguments[1]:undefined,n=RequireObjectCoercible(this),i=ToString(n),o=ToLength(r),u=i.length;if(o<=u)return i;if(t===undefined)var a=" ";else var a=ToString(t);if(""===a)return i;for(var f=o-u,d="",g=0;g1?arguments[1]:undefined,n=RequireObjectCoercible(this),i=ToString(n);if(IsRegExp(e))throw new TypeError("First argument to String.prototype.startsWith must not be a regular expression");var o=ToString(e),s=ToInteger(r),a=i.length,g=Math.min(Math.max(s,0),a);return!(o.length+g>a)&&0===i.substr(g).indexOf(e)});!function(t,r,n){"use strict";var e,o=0,u=""+Math.random(),l="__symbol:",c=l.length,a="__symbol@@"+u,i="defineProperty",f="defineProperties",s="getOwnPropertyNames",v="getOwnPropertyDescriptor",b="propertyIsEnumerable",h=t.prototype,y=h.hasOwnProperty,m=h[b],p=h.toString,g=Array.prototype.concat,w=t.getOwnPropertyNames?t.getOwnPropertyNames(window):[],d=t[s],S=function L(t){if("[object Window]"===p.call(t))try{return d(t)}catch(r){return g.call([],w)}return d(t)},P=t[v],j=t.create,O=t.keys,E=t.freeze||t,N=t[i],_=t[f],k=P(t,s),T=function(t,r,n){if(!y.call(t,a))try{N(t,a,{enumerable:!1,configurable:!1,writable:!1,value:{}})}catch(e){t[a]={}}t[a]["@@"+r]=n},z=function(t,r){var n=j(t);return S(r).forEach(function(t){M.call(r,t)&&G(n,t,r[t])}),n},A=function(t){var r=j(t);return r.enumerable=!1,r},D=function Q(){},F=function(t){return t!=a&&!y.call(x,t)},I=function(t){return t!=a&&y.call(x,t)},M=function R(t){var r=""+t;return I(r)?y.call(this,r)&&this[a]["@@"+r]:m.call(this,t)},W=function(r){var n={enumerable:!1,configurable:!0,get:D,set:function(t){e(this,r,{enumerable:!1,configurable:!0,writable:!0,value:t}),T(this,r,!0)}};try{N(h,r,n)}catch(o){h[r]=n.value}return E(x[r]=N(t(r),"constructor",B))},q=function U(){var t=arguments[0];if(this instanceof U)throw new TypeError("Symbol is not a constructor");return W(l.concat(t||"",u,++o))},x=j(null),B={value:q},C=function(t){return x[t]},G=function V(t,r,n){var o=""+r;return I(o)?(e(t,o,n.enumerable?A(n):n),T(t,o,!!n.enumerable)):N(t,r,n),t},H=function(t){return function(r){return y.call(t,a)&&y.call(t[a],"@@"+r)}},J=function X(t){return S(t).filter(t===h?H(t):I).map(C)};k.value=G,N(t,i,k),k.value=J,N(t,"getOwnPropertySymbols",k),k.value=function Y(t){return S(t).filter(F)},N(t,s,k),k.value=function Z(t,r){var n=J(r);return n.length?O(r).concat(n).forEach(function(n){M.call(r,n)&&G(t,n,r[n])}):_(t,r),t},N(t,f,k),k.value=M,N(h,b,k),k.value=q,N(n,"Symbol",k),k.value=function(t){var r=l.concat(l,t,u);return r in h?x[r]:W(r)},N(q,"for",k),k.value=function(t){if(F(t))throw new TypeError(t+" is not a symbol");return y.call(x,t)?t.slice(2*c,-u.length):void 0},N(q,"keyFor",k),k.value=function $(t,r){var n=P(t,r);return n&&I(r)&&(n.enumerable=M.call(t,r)),n},N(t,v,k),k.value=function(t,r){return 1===arguments.length||void 0===r?j(t):z(t,r)},N(t,"create",k);var K=null===function(){return this}.call(null);k.value=K?function(){var t=p.call(this);return"[object String]"===t&&I(this)?"[object Symbol]":t}:function(){if(this===window)return"[object Null]";var t=p.call(this);return"[object String]"===t&&I(this)?"[object Symbol]":t},N(h,"toString",k),e=function(t,r,n){var e=P(h,r);delete h[r],N(t,r,n),t!==h&&N(h,r,e)}}(Object,0,this);CreateMethodProperty(Reflect,"ownKeys",function e(t){if("object"!==Type(t))throw new TypeError(Object.prototype.toString.call(t)+" is not an Object");return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))});CreateMethodProperty(Object,"getOwnPropertyDescriptors",function e(r){for(var t=ToObject(r),o=Reflect.ownKeys(t),n={},c=o.length,a=0;a1?arguments[1]:GetMethod(t,Symbol.iterator),r=Call(e,t);if("object"!==Type(r))throw new TypeError("bad iterator");var o=GetV(r,"next"),a=Object.create(null);return a["[[Iterator]]"]=r,a["[[NextMethod]]"]=o,a["[[Done]]"]=!1,a}Object.defineProperty(Symbol,"match",{value:Symbol("match")});Object.defineProperty(Symbol,"replace",{value:Symbol("replace")});Object.defineProperty(Symbol,"search",{value:Symbol("search")});Object.defineProperty(Symbol,"species",{value:Symbol("species")});!function(e){function t(e,t){if("object"!==Type(e))throw new TypeError("createMapIterator called on incompatible receiver "+Object.prototype.toString.call(e));if(!0!==e._es6Map)throw new TypeError("createMapIterator called on incompatible receiver "+Object.prototype.toString.call(e));var r=Object.create(n);return Object.defineProperty(r,"[[Map]]",{configurable:!0,enumerable:!1,writable:!0,value:e}),Object.defineProperty(r,"[[MapNextIndex]]",{configurable:!0,enumerable:!1,writable:!0,value:0}),Object.defineProperty(r,"[[MapIterationKind]]",{configurable:!0,enumerable:!1,writable:!0,value:t}),r}var r=function(){try{var e={};return Object.defineProperty(e,"t",{configurable:!0,enumerable:!1,get:function(){return!0},set:undefined}),!!e.t}catch(t){return!1}}(),o=Symbol("undef"),a=function p(){if(!(this instanceof p))throw new TypeError('Constructor Map requires "new"');var e=OrdinaryCreateFromConstructor(this,p.prototype,{_keys:[],_values:[],_size:0,_es6Map:!0});r||Object.defineProperty(e,"size",{configurable:!0,enumerable:!1,writable:!0,value:0});var t=arguments.length>0?arguments[0]:undefined;if(null===t||t===undefined)return e;var o=e.set;if(!IsCallable(o))throw new TypeError("Map.prototype.set is not a function");try{for(var a=GetIterator(t);;){var n=IteratorStep(a);if(!1===n)return e;var i=IteratorValue(n);if("object"!==Type(i))try{throw new TypeError("Iterator value "+i+" is not an entry object")}catch(u){return IteratorClose(a,u)}try{var l=i[0],c=i[1];o.call(e,l,c)}catch(f){return IteratorClose(a,f)}}}catch(f){if(Array.isArray(t)||"[object Arguments]"===Object.prototype.toString.call(t)||t.callee){var y,s=t.length;for(y=0;y0?arguments[0]:undefined;if(null===t||t===undefined)return e;var o=e.add;if(!IsCallable(o))throw new TypeError("Set.prototype.add is not a function");try{for(var n=GetIterator(t);;){var a=IteratorStep(n);if(!1===a)return e;var i=IteratorValue(a);try{o.call(e,i)}catch(y){return IteratorClose(n,y)}}}catch(y){if(!Array.isArray(t)&&"[object Arguments]"!==Object.prototype.toString.call(t)&&!t.callee)throw y;var l,p=t.length;for(l=0;l1?arguments[1]:undefined;if(a===undefined)var n=!1;else{if(!1===IsCallable(a))throw new TypeError(Object.prototype.toString.call(a)+" is not a function.");var i=arguments.length>2?arguments[2]:undefined;if(i!==undefined)var l=i;else l=undefined;n=!0}var u=GetMethod(t,Symbol.iterator);if(u!==undefined){if(IsConstructor(o))var f=Construct(o);else f=ArrayCreate(0);for(var c=GetIterator(t,u),s=0;;){if(s>=Math.pow(2,53)-1){var h=new TypeError("Iteration count can not be greater than or equal 9007199254740991.");return IteratorClose(c,h)}var y=ToString(s),C=IteratorStep(c);if(!1===C)return f.length=s,f;var g=IteratorValue(C);if(n)try{var p=Call(a,l,[g,s])}catch(b){return IteratorClose(c,b)}else p=g;try{CreateDataPropertyOrThrow(f,y,p)}catch(b){return IteratorClose(c,b)}s+=1}}if(r(t))var v=e.call(t,/[\uD800-\uDBFF][\uDC00-\uDFFF]?|[^\uD800-\uDFFF]|./g)||[];else v=ToObject(t);var d=ToLength(Get(v,"length"));for(f=IsConstructor(o)?Construct(o,[d]):ArrayCreate(d),s=0;s=this.__nextIndex__)){if(++this.__nextIndex__,!this.__redo__)return void Object.defineProperty(this,"__redo__",{value:[e],configurable:!0,enumerable:!1,writable:!1});this.__redo__.forEach(function(t,_){t>=e&&(this.__redo__[_]=++t)},this),this.__redo__.push(e)}},configurable:!0,enumerable:!1,writable:!0},_onDelete:{value:function(e){var t;e>=this.__nextIndex__||(--this.__nextIndex__,this.__redo__&&(t=this.__redo__.indexOf(e),-1!==t&&this.__redo__.splice(t,1),this.__redo__.forEach(function(t,_){t>e&&(this.__redo__[_]=--t)},this)))},configurable:!0,enumerable:!1,writable:!0},_onClear:{value:function(){this.__redo__&&e.call(this.__redo__),this.__nextIndex__=0},configurable:!0,enumerable:!1,writable:!0}})),Object.defineProperty(_.prototype,Symbol.iterator,{value:function(){return this},configurable:!0,enumerable:!1,writable:!0}),Object.defineProperty(_.prototype,Symbol.toStringTag,{value:"Iterator",configurable:!1,enumerable:!1,writable:!0}),_}();var ArrayIterator=function(){var e=function(t,r){if(!(this instanceof e))return new e(t,r);Iterator.call(this,t),r=r?String.prototype.includes.call(r,"key+value")?"key+value":String.prototype.includes.call(r,"key")?"key":"value":"value",Object.defineProperty(this,"__kind__",{value:r,configurable:!1,enumerable:!1,writable:!1})};return Object.setPrototypeOf&&Object.setPrototypeOf(e,Iterator.prototype),e.prototype=Object.create(Iterator.prototype,{constructor:{value:e,configurable:!0,enumerable:!1,writable:!0},_resolve:{value:function(e){return"value"===this.__kind__?this.__list__[e]:"key+value"===this.__kind__?[e,this.__list__[e]]:e},configurable:!0,enumerable:!1,writable:!0},toString:{value:function(){return"[object Array Iterator]"},configurable:!0,enumerable:!1,writable:!0}}),e}();CreateMethodProperty(Array.prototype,"entries",function r(){var r=ToObject(this);return new ArrayIterator(r,"key+value")});CreateMethodProperty(Array.prototype,"keys",function r(){var r=ToObject(this);return new ArrayIterator(r,"key")});"Symbol"in this&&"iterator"in Symbol&&"function"==typeof Array.prototype[Symbol.iterator]?CreateMethodProperty(Array.prototype,"values",Array.prototype[Symbol.iterator]):CreateMethodProperty(Array.prototype,"values",function r(){var r=ToObject(this);return new ArrayIterator(r,"value")});CreateMethodProperty(Array.prototype,Symbol.iterator,Array.prototype.values);var StringIterator=function(){var t=function(e){if(!(this instanceof t))return new t(e);e=String(e),Iterator.call(this,e),Object.defineProperty(this,"__length__",{value:e.length,configurable:!1,enumerable:!1,writable:!1})};return Object.setPrototypeOf&&Object.setPrototypeOf(t,Iterator),t.prototype=Object.create(Iterator.prototype,{constructor:{value:t,configurable:!0,enumerable:!1,writable:!0},_next:{value:function(){if(this.__list__)return this.__nextIndex__=55296&&e<=56319?r+this.__list__[this.__nextIndex__++]:r)},configurable:!0,enumerable:!1,writable:!0},toString:{value:function(){return"[object String Iterator]"},configurable:!0,enumerable:!1,writable:!0}}),t}();CreateMethodProperty(String.prototype,Symbol.iterator,function(){var r=RequireObjectCoercible(this),t=ToString(r);return new StringIterator(t)});Object.defineProperty(Symbol,"unscopables",{value:Symbol("unscopables")});!function(e){"use strict";function t(t){return!!t&&("Symbol"in e&&"iterator"in e.Symbol&&"function"==typeof t[Symbol.iterator]||!!Array.isArray(t))}function n(e){return"from"in Array?Array.from(e):Array.prototype.slice.call(e)}!function(){function r(e){var t="",n=!0;return e.forEach(function(e){var r=encodeURIComponent(e.name),a=encodeURIComponent(e.value);n||(t+="&"),t+=r+"="+a,n=!1}),t.replace(/%20/g,"+")}function a(e,t){var n=e.split("&");t&&-1===n[0].indexOf("=")&&(n[0]="="+n[0]);var r=[];n.forEach(function(e){if(0!==e.length){var t=e.indexOf("=");if(-1!==t)var n=e.substring(0,t),a=e.substring(t+1);else n=e,a="";n=n.replace(/\+/g," "),a=a.replace(/\+/g," "),r.push({name:n,value:a})}});var a=[];return r.forEach(function(e){a.push({name:decodeURIComponent(e.name),value:decodeURIComponent(e.value)})}),a}function i(e){if(c)return new s(e);var t=document.createElement("a");return t.href=e,t}function o(e){var i=this;this._list=[],e===undefined||null===e||(e instanceof o?this._list=a(String(e)):"object"==typeof e&&t(e)?n(e).forEach(function(e){if(!t(e))throw TypeError();var r=n(e);if(2!==r.length)throw TypeError();i._list.push({name:String(r[0]),value:String(r[1])})}):"object"==typeof e&&e?Object.keys(e).forEach(function(t){i._list.push({name:String(t),value:String(e[t])})}):(e=String(e),"?"===e.substring(0,1)&&(e=e.substring(1)),this._list=a(e))),this._url_object=null,this._setList=function(e){u||(i._list=e)};var u=!1;this._update_steps=function(){u||(u=!0,i._url_object&&("about:"===i._url_object.protocol&&-1!==i._url_object.pathname.indexOf("?")&&(i._url_object.pathname=i._url_object.pathname.split("?")[0]),i._url_object.search=r(i._list),u=!1))}}function u(e,t){var n=0;this.next=function(){if(n>=e.length)return{done:!0,value:undefined};var r=e[n++];return{done:!1,value:"key"===t?r.name:"value"===t?r.value:[r.name,r.value]}}}function l(t,n){function r(){var e=l.href.replace(/#$|\?$|\?(?=#)/g,"");l.href!==e&&(l.href=e)}function u(){m._setList(l.search?a(l.search.substring(1)):[]),m._update_steps()}if(!(this instanceof e.URL))throw new TypeError("Failed to construct 'URL': Please use the 'new' operator.");n&&(t=function(){if(c)return new s(t,n).href;var e;try{var r;if("[object OperaMini]"===Object.prototype.toString.call(window.operamini)?(e=document.createElement("iframe"),e.style.display="none",document.documentElement.appendChild(e),r=e.contentWindow.document):document.implementation&&document.implementation.createHTMLDocument?r=document.implementation.createHTMLDocument(""):document.implementation&&document.implementation.createDocument?(r=document.implementation.createDocument("http://www.w3.org/1999/xhtml","html",null),r.documentElement.appendChild(r.createElement("head")),r.documentElement.appendChild(r.createElement("body"))):window.ActiveXObject&&(r=new window.ActiveXObject("htmlfile"),r.write(""),r.close()),!r)throw Error("base not supported");var a=r.createElement("base");a.href=n,r.getElementsByTagName("head")[0].appendChild(a);var i=r.createElement("a");return i.href=t,i.href}finally{e&&e.parentNode.removeChild(e)}}());var l=i(t||""),f=function(){if(!("defineProperties"in Object))return!1;try{var e={};return Object.defineProperties(e,{prop:{get:function(){return!0}}}),e.prop}catch(t){return!1}}(),h=f?this:document.createElement("a"),m=new o(l.search?l.search.substring(1):null);return m._url_object=h,Object.defineProperties(h,{href:{get:function(){return l.href},set:function(e){l.href=e,r(),u()},enumerable:!0,configurable:!0},origin:{get:function(){return"origin"in l?l.origin:this.protocol+"//"+this.host},enumerable:!0,configurable:!0},protocol:{get:function(){return l.protocol},set:function(e){l.protocol=e},enumerable:!0,configurable:!0},username:{get:function(){return l.username},set:function(e){l.username=e},enumerable:!0,configurable:!0},password:{get:function(){return l.password},set:function(e){l.password=e},enumerable:!0,configurable:!0},host:{get:function(){var e={"http:":/:80$/,"https:":/:443$/,"ftp:":/:21$/}[l.protocol];return e?l.host.replace(e,""):l.host},set:function(e){l.host=e},enumerable:!0,configurable:!0},hostname:{get:function(){return l.hostname},set:function(e){l.hostname=e},enumerable:!0,configurable:!0},port:{get:function(){return l.port},set:function(e){l.port=e},enumerable:!0,configurable:!0},pathname:{get:function(){return"/"!==l.pathname.charAt(0)?"/"+l.pathname:l.pathname},set:function(e){l.pathname=e},enumerable:!0,configurable:!0},search:{get:function(){return l.search},set:function(e){l.search!==e&&(l.search=e,r(),u())},enumerable:!0,configurable:!0},searchParams:{get:function(){return m},enumerable:!0,configurable:!0},hash:{get:function(){return l.hash},set:function(e){l.hash=e,r()},enumerable:!0,configurable:!0},toString:{value:function(){return l.toString()},enumerable:!1,configurable:!0},valueOf:{value:function(){return l.valueOf()},enumerable:!1,configurable:!0}}),h}var c,s=e.URL;try{if(s){if("searchParams"in(c=new e.URL("http://example.com"))){var f=new l("http://example.com");if(f.search="a=1&b=2","http://example.com/?a=1&b=2"===f.href&&(f.search="","http://example.com/"===f.href))return}"href"in c||(c=undefined),c=undefined}}catch(m){}if(Object.defineProperties(o.prototype,{append:{value:function(e,t){this._list.push({name:e,value:t}),this._update_steps()},writable:!0,enumerable:!0,configurable:!0},"delete":{value:function(e){for(var t=0;t1?arguments[1]:undefined;this._list.forEach(function(n){e.call(t,n.value,n.name)})},writable:!0,enumerable:!0,configurable:!0},toString:{value:function(){return r(this._list)},writable:!0,enumerable:!1,configurable:!0}}),"Symbol"in e&&"iterator"in e.Symbol&&(Object.defineProperty(o.prototype,e.Symbol.iterator,{value:o.prototype.entries,writable:!0,enumerable:!0,configurable:!0}),Object.defineProperty(u.prototype,e.Symbol.iterator,{value:function(){return this},writable:!0,enumerable:!0,configurable:!0})),s)for(var h in s)s.hasOwnProperty(h)&&"function"==typeof s[h]&&(l[h]=s[h]);e.URL=l,e.URLSearchParams=o}(),function(){if("1"!==new e.URLSearchParams([["a",1]]).get("a")||"1"!==new e.URLSearchParams({a:1}).get("a")){var r=e.URLSearchParams;e.URLSearchParams=function(e){if(e&&"object"==typeof e&&t(e)){var a=new r;return n(e).forEach(function(e){if(!t(e))throw TypeError();var r=n(e);if(2!==r.length)throw TypeError();a.append(r[0],r[1])}),a}return e&&"object"==typeof e?(a=new r,Object.keys(e).forEach(function(t){a.set(t,e[t])}),a):new r(e)}}}()}(self);!function(e){var t=Symbol("undef"),r=function a(){if(!(this instanceof a))throw new TypeError('Constructor WeakMap requires "new"');var e=OrdinaryCreateFromConstructor(this,a.prototype,{_keys:[],_values:[],_es6WeakMap:!0}),t=arguments.length>0?arguments[0]:undefined;if(null===t||t===undefined)return e;var r=Get(e,"set");if(!IsCallable(r))throw new TypeError("WeakMap.prototype.set is not a function");try{for(var o=GetIterator(t);;){var p=IteratorStep(o);if(!1===p)return e;var n=IteratorValue(p);if("object"!==Type(n))try{throw new TypeError("Iterator value "+n+" is not an entry object")}catch(s){return IteratorClose(o,s)}try{var i=Get(n,"0"),l=Get(n,"1");Call(r,e,[i,l])}catch(u){return IteratorClose(o,u)}}}catch(u){if(Array.isArray(t)||"[object Arguments]"===Object.prototype.toString.call(t)||t.callee){var y,c=t.length;for(y=0;y0?arguments[0]:undefined;if(null===t||t===undefined)return e;var r=Get(e,"add");if(!IsCallable(r))throw new TypeError("WeakSet.prototype.add is not a function");try{for(var o=GetIterator(t);;){var n=IteratorStep(o);if(!1===n)return e;var l=IteratorValue(n);try{Call(r,e,[l])}catch(c){return IteratorClose(o,c)}}}catch(c){if(IsArray(t)||"[object Arguments]"===Object.prototype.toString.call(t)||t.callee){var i,p=t.length;for(i=0;i + + + + + title + + + + + + + + + \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/login/login.js b/designer-base/src/main/resources/com/fr/design/login/login.js new file mode 100644 index 0000000000..18d1954e08 --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/login/login.js @@ -0,0 +1 @@ +!function(e){var t={};function i(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,i),o.l=!0,o.exports}i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)i.d(n,o,function(t){return e[t]}.bind(null,o));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=4)}([function(e,t,i){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,i,n){n===undefined&&(n=i),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[i]}})}:function(e,t,i,n){n===undefined&&(n=i),e[n]=t[i]}),o=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||t.hasOwnProperty(i)||n(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),o(i(5),t)},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=window.DesignerLoginHelper,o=function(){function e(){}return e.prototype.getParams=function(){return{designerLoginSource:window.designerLoginSource||"0",lastLoginType:window.lastLoginType||"-1",lastLoginAccount:window.lastLoginAccount||""}},e.prototype.closeWindow=function(e){n&&n.closeWindow(e)},e.prototype.serviceHref=function(){n?n.serviceHref():window.open("https://bbs.fanruan.com/thread-102821-1-1.html")},e.prototype.forgetHref=function(){n?n.forgetHref():window.open("https://id.fanruan.com/forget/forget.php?clue=activityf")},e.prototype.normalLogin=function(e,t,i){n?n.normalLogin(e,t,i):i(-1)},e.prototype.sendCaptcha=function(e,t,i){n?n.sendCaptcha(e,t,i):i(-1)},e.prototype.smsLogin=function(e,t,i,o){n?n.smsLogin(e,t,i,o):o(null)},e.prototype.smsRegister=function(e,t,i,o,s){n?n.smsRegister(e,t,i,o,s):s(-1)},e.prototype.resize=function(e,t){n&&n.resize(e,t)},e}();t["default"]=new o},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.BBS_ERROR_CODE=t.NORMAL_LOGIN_RESULT=t.REGION=t.LOGIN=void 0,t.LOGIN={NORMAL_METHOD:"normal",SMS_METHOD:"sms",TABS:{LOGIN:"login",FORGET_PASSWORD:"forget",RESET_PASSWORD:"reset",REGISTER:"register"}},t.REGION=[{value:"+86",text:"Designer-Basic_Chinese_Mainland"},{value:"+886",text:"Designer-Basic_Chinese_Taiwan"},{value:"+852",text:"Designer-Basic_Chinese_Hong_Kong"},{value:"+853",text:"Designer-Basic_Chinese_Macao"},{value:"+90",text:"Designer-Basic_Turkey"},{value:"+82",text:"Designer-Basic_South_Korea"},{value:"+81",text:"Designer-Basic_Japan"},{value:"+65",text:"Designer-Basic_Singapore"},{value:"+60",text:"Designer-Basic_Malaysia"}],t.NORMAL_LOGIN_RESULT=[{status:0,message:"Designer-Login_Internal_Error"},{status:-1,message:"Designer-Login_Store_User_Not_Exist"},{status:-2,message:"Designer-Login_Store_User_Password_Error"},{status:-3,message:"Designer-Login_Unexpected_Error"},{status:-4,message:"Designer-Login_Network_Connected_Failed"}],t.BBS_ERROR_CODE=[{status:0,message:"Designer-Login_Internal_Error"},{status:-1,message:"Designer-BBS_Register_Timeout"},{status:-2,message:"Designer-BBS_Phone_Is_Register"},{status:-3,message:"Designer-BBS_Captcha_Send_Exceed_Limit"},{status:-4,message:"Designer-BBS_Phone_Format_Error"},{status:-100,message:"Designer-BBS_Captcha_Out_Of_Date"},{status:-101,message:"Designer-BBS_Captcha_Try_Exceed_Limit"},{status:-102,message:"Designer-BBS_Captcha_Error"},{status:-104,message:"Designer-BBS_Username_Format_Error"},{status:-105,message:"Designer-BBS_Username_Too_Short"},{status:-106,message:"Designer-BBS_Username_Too_Long"},{status:-107,message:"Designer-BBS_Phone_Is_Register"},{status:-108,message:"Designer-BBS_Username_Is_Register"}]},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getError=void 0,t.getError=function(e,t){var i=BI.find(e,(function(e,i){return i.status===t}));return i&&i.message?i.message:""}},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(0),o=i(6);BI.addI18n(Store.i18n),BI.createWidget({type:n.Vertical,element:"body",items:[{type:o["default"]}]})},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ListView=t.VirtualGroup=t.LeftRightVerticalAdapt=t.Left=t.Horizontal=t.Vertical=t.Absolute=t.Layout=t.Htape=t.CenterAdapt=t.Vtape=t.HorizontalAdapt=t.VerticalAdapt=t.BubbleCombo=t.Img=t.Tab=t.SingleSelectInsertCombo=t.SingleSelectRadioItem=t.MultiTreePopupView=t.Editor=t.NicEditor=t.RichEditor=t.MultiTreeCombo=t.DynamicDateTimeCombo=t.DynamicDateCombo=t.BarPopOver=t.MultiSelectItem=t.TextAreaEditor=t.AllValueChooserCombo=t.ButtonGroup=t.MultiSelectInsertCombo=t.TextEditor=t.Button=t.SignEditor=t.MultiFileEditor=t.SmallTextEditor=t.HtmlLabel=t.Label=t.DownListCombo=t.TextButton=t.IconChangeButton=t.IconButton=t.IconTextIconItem=t.IconTextItem=void 0,t.IconTextItem="bi.icon_text_item",t.IconTextIconItem="bi.icon_text_icon_item",t.IconButton="bi.icon_button",t.IconChangeButton="bi.icon_change_button",t.TextButton="bi.text_button",t.DownListCombo="bi.down_list_combo",t.Label="bi.label",t.HtmlLabel="bi.html_label",t.SmallTextEditor="bi.small_text_editor",t.MultiFileEditor="bi.multifile_editor",t.SignEditor="bi.sign_editor",t.Button="bi.button",t.TextEditor="bi.text_editor",t.MultiSelectInsertCombo="bi.multi_select_insert_combo",t.ButtonGroup="bi.button_group",t.AllValueChooserCombo="bi.all_value_chooser_combo",t.TextAreaEditor="bi.textarea_editor",t.MultiSelectItem="bi.multi_select_item",t.BarPopOver="bi.bar_popover",t.DynamicDateCombo="bi.dynamic_date_combo",t.DynamicDateTimeCombo="bi.dynamic_date_time_combo",t.MultiTreeCombo="bi.multi_tree_combo",t.RichEditor="bi.rich_editor",t.NicEditor="bi.nic_editor",t.Editor="bi.editor",t.MultiTreePopupView="bi.multi_tree_popup_view",t.SingleSelectRadioItem="bi.single_select_radio_item",t.SingleSelectInsertCombo="bi.single_select_insert_combo",t.Tab="bi.tab",t.Img="bi.img",t.BubbleCombo="bi.bubble_combo",t.VerticalAdapt="bi.vertical_adapt",t.HorizontalAdapt="bi.horizontal_adapt",t.Vtape="bi.vtape",t.CenterAdapt="bi.center_adapt",t.Htape="bi.htape",t.Layout="bi.layout",t.Absolute="bi.absolute",t.Vertical="bi.vertical",t.Horizontal="bi.horizontal",t.Left="bi.left",t.LeftRightVerticalAdapt="bi.left_right_vertical_adapt",t.VirtualGroup="bi.virtual_group",t.ListView="bi.list_view"},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(7),s=i(8),r=i(9),a=i(11);i(24),t.className="designer.login.login",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login",width:420},_store:function(){return BI.Models.getModel(o["default"])},watch:{loading:function(e){this.loading.setVisible(e)}},render:function(){return{type:n.Vertical,cls:"designer-login",items:[{el:{type:n.HorizontalAdapt,items:[{type:s["default"],rgap:14,tgap:14}]}},{el:{type:n.Vertical,items:[{type:r["default"]},{type:a["default"]}]},lgap:15,rgap:15,bgap:15}]}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});BI.model("designer.login.login.model",BI.inherit(Fix.Model,{childContext:["loading"],state:function(){return{loading:!1}}})),t["default"]="designer.login.login.model"},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(1);t.className="designer.login.login.close.button",t.Widget=BI.inherit(BI.Widget,{render:function(){return{type:n.TextButton,text:String.fromCharCode(10005),cls:"background-login-close",width:18.38,height:18.38,handler:function(){o["default"].closeWindow(!1)}}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0);i(10),t.className="designer.login.login.title",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-title"},render:function(){return{type:n.Label,text:BI.i18nText("Designer-Login_Title"),cls:"bi-font-bold",bgap:10}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(12);i(13);var s=i(14),r=i(16),a=i(18),l=i(2),u=i(1),g=249.64,c=331.64,d=422,f=478,p=560;t.className="designer.login.login.body",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(o["default"])},watch:{loginMethod:function(e){this.tabOption.setValue(e),this.tab.setSelect(e),this.foot.setLoginMethod(e),this.refreshLoginButton(),e===l.LOGIN.NORMAL_METHOD?(this.tab.setHeight(g),u["default"].resize(d,f)):this.model.expand&&(u["default"].resize(d,p),this.tab.setHeight(c))},approve:function(e){this.refreshLoginButton()},expand:function(e){e&&(u["default"].resize(d,p),this.tab.setHeight(c))}},render:function(){var e=this;return{type:n.Vertical,cls:"designer-login-body",items:[{type:n.ButtonGroup,value:this.model.loginMethod,ref:function(t){e.tabOption=t},layouts:[{type:n.HorizontalAdapt}],items:[{cls:"designer-login-change-mode bi-list-item-effect bi-border-bottom bi-font-bold",width:70,height:28,value:l.LOGIN.SMS_METHOD,text:BI.i18nText("Designer-Login_Sms")},{cls:"designer-login-change-mode bi-list-item-effect bi-border-bottom bi-font-bold",width:70,height:28,value:l.LOGIN.NORMAL_METHOD,text:BI.i18nText("Designer-Login_Normal")}],listeners:[{eventName:BI.ButtonGroup.EVENT_CHANGE,action:function(t){e.store.setLoginMethod(t)}}],tgap:24,lgap:75,rgap:75},{type:n.CenterAdapt,tgap:35,items:[{type:n.Tab,cardCreator:BI.bind(this.createCard,this),showIndex:this.model.loginMethod,ref:function(t){e.tab=t},height:g,width:280}]},{type:s["default"],lgap:50,rgap:50,bgap:30,ref:function(t){e.foot=t},refreshStatus:function(t){e.store.setApprove(t)}}]}},mounted:function(){var e=u["default"].getParams(),t=e.designerLoginSource,i=e.lastLoginType;if("2"===t){var n="0"===i?l.LOGIN.NORMAL_METHOD:l.LOGIN.SMS_METHOD;this.store.setLoginMethod(n)}},createCard:function(e){var t=this;switch(e){case l.LOGIN.NORMAL_METHOD:return{type:r["default"],ref:function(e){t.normalMethod=e}};case l.LOGIN.SMS_METHOD:default:return{type:a["default"],ref:function(e){t.smsMethod=e},expand:function(){t.store.setExpand(!0)}}}},refreshLoginButton:function(){this.model.loginMethod===l.LOGIN.NORMAL_METHOD?this.normalMethod.setApprove(this.model.approve):this.smsMethod.setApprove(this.model.approve)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0;var n=i(2);t.className="designer.login.model.login.body",t.Model=BI.inherit(Fix.Model,{context:["loading"],state:function(){return{loginMethod:n.LOGIN.SMS_METHOD,approve:!0,expand:!1}},actions:{setLoginMethod:function(e){this.model.loginMethod=e},setApprove:function(e){this.model.approve=e},setExpand:function(e){this.model.expand=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(1),o=i(0);i(15);var s=i(2);t.className="designer.login.login.foot",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-foot"},render:function(){var e=this,t=this.options;return{type:o.LeftRightVerticalAdapt,items:{left:[{type:o.MultiSelectItem,width:30,selected:!0,handler:function(){t.refreshStatus(this.isSelected())}},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:BI.i18nText("Designer-Login_I_Have_Read")},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:"《"},{type:o.TextButton,cls:"login-link",textAlign:"left",text:BI.i18nText("Designer-Login_Service_Terms"),handler:function(){n["default"].serviceHref()}},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:"》"}],right:[{type:o.TextButton,cls:"login-link",textAlign:"right",text:BI.i18nText("Designer-Login_Forget_Password"),invisible:!0,ref:function(t){e.forgetPassword=t},handler:function(){n["default"].forgetHref()}}]}}},setLoginMethod:function(e){e===s.LOGIN.NORMAL_METHOD?this.forgetPassword.setVisible(!0):this.forgetPassword.setVisible(!1)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(3),s=i(1),r=i(17),a=i(2);t.className="designer.login.login.normal",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(r["default"])},watch:{errMessage:function(e){this.errMessage.setText(e)}},render:function(){var e=this;return{type:n.Vertical,items:[{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_User_Name"),bgap:3},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-username",watermark:BI.i18nText("Designer-Login_User_Name_Hint"),inputType:"text",allowBlank:!0,height:40,ref:function(t){e.userName=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Password"),bgap:3},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Password_Hint"),inputType:"password",allowBlank:!0,height:40,ref:function(t){e.password=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,cls:"designer-login-error-message",textAlign:"center",text:"",height:20,bgap:10,ref:function(t){e.errMessage=t}},{type:n.Button,cls:"login-login-button bi-font-bold",text:BI.i18nText("Designer-Login"),level:"common",height:40,ref:function(t){e.loginButton=t},handler:function(){e.login()},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]}]}},mounted:function(){var e=this;this.element.keyup((function(t){13===t.keyCode&&e.login()}));var t=s["default"].getParams(),i=t.designerLoginSource,n=t.lastLoginType,o=t.lastLoginAccount;"2"===i&&"0"===n&&e.userName.setValue(o)},checkUsername:function(){var e=this.userName.getValue();e&&this.userName.setValue(e.replace(/\s+/g,""))},login:function(){var e=this;e.checkUsername();var t=this.userName.getValue(),i=this.password.getValue();t?i?s["default"].normalLogin(t,i,(function(t){var i=parseInt(t,10);if(i>0)s["default"].closeWindow(!0);else{var n=o.getError(a.NORMAL_LOGIN_RESULT,i);n&&e.store.setErrMessage(BI.i18nText(n))}})):this.store.setErrMessage(BI.i18nText("Designer-Login_Password_Not_Null")):this.store.setErrMessage(BI.i18nText("Designer-Login_Username_Not_Null"))},setApprove:function(e){this.loginButton.setEnable(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0,t.className="designer.login.model.normal_method",t.Model=BI.inherit(Fix.Model,{context:[""],state:function(){return{errMessage:""}},actions:{setErrMessage:function(e){this.model.errMessage=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(19),s=i(21),r=i(22),a=i(2),l=i(23),u=i(1),g=i(3);t.className="designer.login.login.sms",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(l["default"])},watch:{errMessage:function(e){this.errMessage.setText(e)},isRegister:function(e){var t=this.options;e&&(t.expand(),this.password.setVisible(!0),this.passwordLabel.setVisible(!0))}},render:function(){var e=this,t=this;return{type:n.Vertical,items:[{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Phone"),bgap:3},{type:n.HorizontalAdapt,bgap:7,items:[{type:o["default"],height:42,textFormatter:function(e){var i=t.getNumberTypeItem(e);return{value:i.value,text:BI.i18nText(i.text)}},value:a.REGION[0].value,items:BI.map(a.REGION,(function(e,t){return{type:s["default"],value:t.value,label:BI.i18nText(t.text),text:t.value}})),ref:function(t){e.regionCode=t}},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-username",watermark:BI.i18nText("Designer-Login_Phone_Hint"),inputType:"text",allowBlank:!0,height:40,ref:function(t){e.phone=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Code"),bgap:3},{type:n.Horizontal,bgap:7,items:[{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Code_Hint"),inputType:"text",allowBlank:!0,height:40,width:200,ref:function(t){e.code=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:r["default"],height:40,width:80,ref:function(t){e.accountCaptcha=t},listeners:[{eventName:"EVENT_SEND",action:function(){t.sendCaptcha()}}]}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Password"),bgap:3,invisible:!0,ref:function(t){e.passwordLabel=t}},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Password_Setting_Hint"),inputType:"password",allowBlank:!0,height:40,invisible:!0,ref:function(t){e.password=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,cls:"designer-login-error-message",textAlign:"center",text:"",height:20,bgap:11,ref:function(t){e.errMessage=t}},{type:n.Button,cls:"login-login-button bi-font-bold",text:BI.i18nText("Designer-Login_Register_Or_Login"),level:"common",height:40,ref:function(t){e.loginButton=t},handler:function(){e.login()}}]}},mounted:function(){var e=this;this.element.keyup((function(t){13===t.keyCode&&e.login()}));var t=u["default"].getParams(),i=t.designerLoginSource,n=t.lastLoginType,o=t.lastLoginAccount;if("2"===i&&"1"===n){var s=o.split("-")[0],r=o.split("-")[1];e.regionCode.setValue(s),e.phone.setValue(r)}},getNumberTypeItem:function(e){return BI.find(a.REGION,(function(t,i){return e===i.value}))||{}},checkPhone:function(){var e=this.phone.getValue();e&&this.phone.setValue(e.replace(/\s+/g,""))},login:function(){var e=this,t=this;t.checkPhone();var i=this.phone.getValue(),n=this.code.getValue();if(i)if(n){var o=this.regionCode.getValue();if(this.model.isRegister){var s=this.password.getValue();if(!s)return void this.store.setErrMessage(BI.i18nText("Designer-Login_Password_Not_Null"));var r=this.model.regToken;if(!r)return void this.store.setErrMessage(BI.i18nText("Designer-Login_Token_Request_Failed"));u["default"].smsRegister(o,i,s,r,(function(e){var i=parseInt(e,10);if(i>0)u["default"].closeWindow(!0);else{var n=g.getError(a.BBS_ERROR_CODE,i);n&&t.store.setErrMessage(BI.i18nText(n))}}))}else u["default"].smsLogin(o,i,n,(function(i){var n=JSON.parse(i);if(n.status>0)if(!0===n.register){var o=n.regtoken;o?(t.store.setRegister(!0),t.store.setRegToken(o)):e.store.setErrMessage(BI.i18nText("Designer-Login_Token_Request_Failed"))}else u["default"].closeWindow(!0);else{var s=g.getError(a.BBS_ERROR_CODE,n.status);s&&t.store.setErrMessage(BI.i18nText(s))}}))}else this.store.setErrMessage(BI.i18nText("Designer-Login_Code_Not_Null"));else this.store.setErrMessage(BI.i18nText("Designer-Login_Phone_Not_Null"))},sendCaptcha:function(){var e=this;e.checkPhone();var t=this.phone.getValue();if(!t)return e.accountCaptcha.setButtonEnable(!0),void this.store.setErrMessage(BI.i18nText("Designer-Login_Phone_Not_Null"));var i=this.regionCode.getValue();u["default"].sendCaptcha(i,t,(function(t){var i=parseInt(t,10);if(1===i)e.accountCaptcha.regainCaptcha();else{e.accountCaptcha.setButtonEnable(!0);var n=g.getError(a.BBS_ERROR_CODE,i);n&&e.store.setErrMessage(BI.i18nText(n))}}))},setApprove:function(e){this.loginButton.setEnable(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(20);t.className="designer.left_right_text_value_combo",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"",height:24,chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,textFormatter:function(e){return e},value:""},render:function(){var e=this,t=this.options;return{type:"bi.combo",container:t.container,adjustLength:2,ref:function(t){e.combo=t},el:{type:n["default"],cls:"text-value-trigger",items:t.items,height:t.height-2,value:t.textFormatter(t.value),ref:function(t){e.trigger=t}},popup:{el:{type:"bi.text_value_combo_popup",chooseType:t.chooseType,value:t.value,items:t.items,ref:function(t){e.popup=t},listeners:[{eventName:BI.TextValueComboPopup.EVENT_CHANGE,action:function(){e.setValue(e.getValue()),e.combo.hideView(),e.fireEvent("EVENT_CHANGE",arguments)}},{eventName:BI.Controller.EVENT_CHANGE,action:function(){e.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}}]},value:t.value,maxHeight:240,minHeight:25}}},setValue:function(e){this.combo.setValue(e),this.trigger.setValue(this.options.textFormatter(e))},getValue:function(){var e=this.combo.getValue();return BI.isNull(e)?"":BI.isArray(e)?e[0]:e},populate:function(e){this.options.items=e,this.combo.populate(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0,t.className="designer.left_right_text_value_combo_trigger",t.Widget=BI.inherit(BI.Trigger,{props:{baseCls:"",value:{}},render:function(){var e=this,t=this.options,i=t.value;return{type:"bi.htape",cls:"bi-border-bottom bi-border-radius",items:[{type:"bi.label",text:i.text,title:function(){return e.textRow.getText()},height:t.height,hgap:3,textAlign:"left",ref:function(t){e.textRow=t}},{type:"bi.label",text:i.value,height:t.height,width:32,textAlign:"right",ref:function(t){e.valueRow=t}},{type:"bi.trigger_icon_button",width:t.triggerWidth||t.height}]}},setValue:function(e){this.textRow.setText(e.text),this.valueRow.setText(e.value)},setText:function(e){this.textRow.setText(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0,t.className="designer.components.phone.editor.item",t.Widget=BI.inherit(BI.BasicButton,{props:{baseCls:"designer-login-login-body",label:"",text:""},render:function(){var e=this.options;return{type:"bi.htape",items:[{el:{type:"bi.label",text:e.label,title:e.label,textAlign:"left"},lgap:10,rgap:5},{el:{type:"bi.label",text:e.text,textAlign:"right"},width:32,rgap:10}]}},doClick:function(){BI.SingleSelectItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent("EVENT_CHANGE",this.isSelected(),this)},setSelected:function(e){BI.SingleSelectItem.superclass.setSelected.apply(this,arguments)},getValue:function(){return this.options.value}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0);t.className="designer.user.account.setting.captcha",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},render:function(){var e=this;this.options;return{type:n.TextButton,text:BI.i18nText("Designer-Login_Code_Request"),cls:"designer-login-border-bottom designer-login-code-text",handler:function(){e.setButtonEnable(!1),e.fireEvent("EVENT_SEND")},ref:function(t){e.getButton=t}}},setButtonEnable:function(e){this.captchaTime&&(e=!1),this.getButton.setEnable(e)},regainCaptcha:function(){var e=this,t=0;window.clearInterval(e.captchaTime),this.captchaTime=window.setInterval((function(){if(60===t)return window.clearInterval(e.captchaTime),e.captchaTime=null,e.getButton.setText(BI.i18nText("Designer-Login_Code_Request")),void e.setButtonEnable(!0);e.getButton.setText(BI.i18nText("Designer-Login_Code_Request_Again")+"("+(60-t)+")"),t++}),1e3),this.setButtonEnable(!1)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0,t.className="designer.login.model.sms_method",t.Model=BI.inherit(Fix.Model,{context:[""],state:function(){return{errMessage:"",isRegister:!1,regToken:""}},actions:{setErrMessage:function(e){this.model.errMessage=e},setRegister:function(e){this.model.isRegister=e},setRegToken:function(e){this.model.regToken=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){}]); \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoLabel.java b/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoLabel.java index 92a2882545..d166dada77 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoLabel.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoLabel.java @@ -3,19 +3,16 @@ */ package com.fr.design.mainframe.bbs; -import com.fr.base.FRContext; -import com.fr.config.MarketConfig; import com.fr.design.DesignerEnvManager; import com.fr.design.bbs.BBSLoginUtils; import com.fr.design.extra.LoginContextListener; -import com.fr.design.extra.LoginWebBridge; -import com.fr.design.extra.PluginWebBridge; import com.fr.design.extra.UserLoginContext; -import com.fr.design.extra.WebViewDlgHelper; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.locale.impl.BbsSpaceMark; +import com.fr.design.login.DesignerLoginHelper; +import com.fr.design.login.DesignerLoginSource; import com.fr.design.mainframe.DesignerContext; import com.fr.design.os.impl.SupportOSImpl; import com.fr.design.upm.event.CertificateEvent; @@ -32,7 +29,6 @@ import com.fr.general.locale.LocaleCenter; import com.fr.general.locale.LocaleMark; import com.fr.log.FineLoggerFactory; import com.fr.stable.EncodeConstants; -import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import javax.swing.SwingConstants; import java.awt.Cursor; @@ -86,7 +82,7 @@ public class UserInfoLabel extends UILabel { @Override public void mouseClicked(MouseEvent e) { - userName = MarketConfig.getInstance().getBbsUsername(); + userName = DesignerEnvManager.getEnvManager().getDesignerLoginUsername(); if (StringUtils.isNotEmpty(userName)) { UIPopupMenu menu = new UIPopupMenu(); menu.setOnlyText(true); @@ -113,15 +109,14 @@ public class UserInfoLabel extends UILabel { closeOther.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { - BBSLoginUtils.bbsLogout(); - UserLoginContext.fireLoginContextListener(); + UserLoginContext.fireLoginContextListener(DesignerLoginSource.SWITCH_ACCOUNT); } }); menu.add(priviteMessage); menu.add(closeOther); GUICoreUtils.showPopupMenu(menu, UserInfoLabel.this, 0, MENU_HEIGHT); } else { - UserLoginContext.fireLoginContextListener(); + UserLoginContext.fireLoginContextListener(DesignerLoginSource.NORMAL); } } }; @@ -202,17 +197,10 @@ public class UserInfoLabel extends UILabel { this.addMouseListener(userInfoAdapter); this.setHorizontalAlignment(SwingConstants.CENTER); - if (StableUtils.getMajorJavaVersion() >= VERSION_8) { - LoginWebBridge.getHelper().setUILabel(UserInfoLabel.this); - PluginWebBridge.getHelper().setUILabel(UserInfoLabel.this); - } - UserLoginContext.addLoginContextListener(new LoginContextListener() { @Override - public void showLoginContext() { - WebViewDlgHelper.createLoginDialog(); - clearLoginInformation(); - updateInfoPane(); + public void showLoginContext(DesignerLoginSource source) { + DesignerLoginHelper.showLoginDialog(source); } }); EventDispatcher.listen(CertificateEvent.LOGIN, new Listener() { @@ -221,22 +209,12 @@ public class UserInfoLabel extends UILabel { setText(text); } }); - EventDispatcher.listen(CertificateEvent.LOGOUT, new Listener() { - @Override - public void on(Event event, String text) { - setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_UnSignIn")); - } - }); } private void clearLoginInformation() { BBSLoginUtils.bbsLogout(); } - private void updateInfoPane() { - userInfoPane.markUnSignIn(); - } - private void sleep(long millis) { try { Thread.sleep(millis); diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoPane.java index 24ae13edaf..c0169fc09d 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoPane.java @@ -5,7 +5,6 @@ package com.fr.design.mainframe.bbs; import com.fr.base.FRContext; import com.fr.concurrent.NamedThreadFactory; -import com.fr.config.MarketConfig; import com.fr.design.DesignerEnvManager; import com.fr.design.constants.UIConstants; import com.fr.design.dialog.BasicPane; @@ -34,7 +33,7 @@ public class UserInfoPane extends BasicPane { /** * 默认未登录颜色 */ - private static final Color UN_LOGIN_BACKGROUND = UIConstants.TEMPLATE_TAB_PANE_BACKGROUND; + private static final Color UN_LOGIN_BACKGROUND = UIConstants.DESIGNER_LOGIN_BACKGROUND; private static final Color LOGIN_BACKGROUND = new Color(184, 220, 242); private static final int WIDTH = 104; private static final int HEIGHT = 24; @@ -91,7 +90,8 @@ public class UserInfoPane extends BasicPane { * 标志未登录状态, 面板设置为灰色 */ public void markUnSignIn() { - this.userInfoLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_UnSignIn")); + this.userInfoLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Designer_Login_Now")); + this.userInfoLabel.setForeground(Color.WHITE); this.userInfoLabel.setOpaque(true); this.userInfoLabel.setBackground(UN_LOGIN_BACKGROUND); this.userInfoLabel.resetUserName(); @@ -104,6 +104,7 @@ public class UserInfoPane extends BasicPane { */ public void markSignIn(String userName) { this.userInfoLabel.setText(userName); + this.userInfoLabel.setForeground(Color.BLACK); this.userInfoLabel.setUserName(userName); this.userInfoLabel.setOpaque(true); this.userInfoLabel.setBackground(LOGIN_BACKGROUND); @@ -115,7 +116,7 @@ public class UserInfoPane extends BasicPane { } public void updateBBSUserInfo() { - String username = MarketConfig.getInstance().getBbsUsername(); + String username = DesignerEnvManager.getEnvManager().getDesignerLoginUsername(); if (StringUtils.isEmpty(username)) { markUnSignIn(); } else { @@ -173,7 +174,7 @@ public class UserInfoPane extends BasicPane { FineLoggerFactory.getLogger().error(e.getMessage(), e); } - String userName = MarketConfig.getInstance().getBbsUsername(); + String userName = DesignerEnvManager.getEnvManager().getDesignerLoginUsername(); if (StringUtils.isNotEmpty(userName)) { return; } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoLogAppender.java b/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoLogAppender.java index dd9c50c9e7..2626193a4c 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoLogAppender.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoLogAppender.java @@ -2,7 +2,6 @@ package com.fr.design.mainframe.errorinfo; import com.fr.base.io.IOFile; import com.fr.base.io.XMLReadHelper; -import com.fr.config.MarketConfig; import com.fr.design.DesignerEnvManager; import com.fr.design.i18n.Toolkit; import com.fr.web.session.SessionLocalManager; @@ -43,7 +42,7 @@ public class ErrorInfoLogAppender extends AppenderSkeleton { this.layout = new com.fr.third.apache.log4j.PatternLayout("%d{HH:mm:ss} %t %p [%c] %m%n"); DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); - this.username = MarketConfig.getInstance().getBbsUsername(); + this.username = envManager.getDesignerLoginUsername(); this.uuid = envManager.getUUID(); this.activekey = envManager.getActivationKey(); } diff --git a/designer-realize/src/main/java/com/fr/start/CollectUserInformationDialog.java b/designer-realize/src/main/java/com/fr/start/CollectUserInformationDialog.java index ba89eeb99c..692245eb4e 100644 --- a/designer-realize/src/main/java/com/fr/start/CollectUserInformationDialog.java +++ b/designer-realize/src/main/java/com/fr/start/CollectUserInformationDialog.java @@ -52,6 +52,7 @@ public class CollectUserInformationDialog extends UIDialog { FineJOptionPane.showMessageDialog(CollectUserInformationDialog.this, message); DesignerEnvManager.getEnvManager().setActivationKey(keyValue); DesignerEnvManager.getEnvManager().saveXMLFile(); + DesignerEnvManager.getEnvManager().setDesignerActivatedTime(System.currentTimeMillis()); doOK(); } else { message = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Activate_Activation_Code_Invalid"); diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java index ef3baffd4a..303f655e4f 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java @@ -39,6 +39,9 @@ import com.fr.design.javascript.EmailPane; import com.fr.design.javascript.JavaScriptImplPane; import com.fr.design.javascript.ParameterJavaScriptPane; import com.fr.design.javascript.ProcessTransitionAdapter; +import com.fr.design.login.DesignerLoginType; +import com.fr.design.login.guide.DesignerGuideHelper; +import com.fr.design.login.socketio.LoginAuthServer; import com.fr.design.mainframe.BaseJForm; import com.fr.design.mainframe.FormHierarchyTreePane; import com.fr.design.mainframe.InformationCollector; @@ -80,6 +83,7 @@ import com.fr.locale.LocaleScope; import com.fr.log.FineLoggerFactory; import com.fr.log.LogHandler; import com.fr.module.Activator; +import com.fr.module.extension.Prepare; import com.fr.plugin.context.PluginContext; import com.fr.plugin.injectable.PluginModule; import com.fr.plugin.manage.PluginFilter; @@ -127,7 +131,7 @@ import java.awt.image.BufferedImage; * 触发原来的DesignerModule的启动 * 之后慢慢将DesignerModule拆成Activator */ -public class DesignerActivator extends Activator { +public class DesignerActivator extends Activator implements Prepare { private LogHandler logHandler = null; @@ -135,11 +139,13 @@ public class DesignerActivator extends Activator { @Override public void run() { DesignerPushUpdateManager.getInstance().preparePushUpdate(); + DesignerGuideHelper.prepareShowGuideDialog(); } }); @Override public void start() { + migrateBBSInfoFromFineDB(); List markers = findMutable(InterMutableKey.Path); for (LocaleMarker marker : markers) { if (marker.match(LocaleScope.DESIGN)) { @@ -418,9 +424,35 @@ public class DesignerActivator extends Activator { }); } + private void migrateBBSInfoFromFineDB() { + DesignerEnvManager manager = DesignerEnvManager.getEnvManager(); + if (manager.isCurrentVersionFirstLaunch()) { + int newUid = manager.getDesignerLoginUid(); + if (newUid > 0) { + return; + } + int oldUid = MarketConfig.getInstance().getBbsUid(); + if (oldUid > 0) { + manager.setDesignerLoginUid(oldUid); + manager.setDesignerLoginUsername(MarketConfig.getInstance().getBbsUsername()); + manager.setDesignerLoginAppId(MarketConfig.getInstance().getBbsAppId()); + manager.setDesignerLoginRefreshToken(MarketConfig.getInstance().getBbsRefreshToken()); + manager.setCurrentVersionFirstLaunch(false); + manager.setLastLoginType(DesignerLoginType.NORMAL_LOGIN); + manager.setLastLoginAccount(MarketConfig.getInstance().getBbsUsername()); + DesignerEnvManager.getEnvManager().saveXMLFile(); + } + } + } + @Override public void stop() { unloadLogAppender(); DesignerSocketIO.close(); } + + @Override + public void prepare() { + LoginAuthServer.getInstance().start(); + } } From ff203a24fe58d73420a16eed5ba5ebe0741d18d5 Mon Sep 17 00:00:00 2001 From: Lanlan Date: Mon, 7 Jun 2021 16:17:22 +0800 Subject: [PATCH 078/148] =?UTF-8?q?=E5=85=BC=E5=AE=B9=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/extra/LoginWebBridge.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/extra/LoginWebBridge.java b/designer-base/src/main/java/com/fr/design/extra/LoginWebBridge.java index 0007a839e2..61cd36e5d3 100644 --- a/designer-base/src/main/java/com/fr/design/extra/LoginWebBridge.java +++ b/designer-base/src/main/java/com/fr/design/extra/LoginWebBridge.java @@ -41,6 +41,7 @@ public class LoginWebBridge { private int messageCount; private UIDialog uiDialog; private UIDialog qqDialog; + private UILabel uiLabel; private WebEngine webEngine; private LoginWebBridge() { @@ -100,6 +101,10 @@ public class LoginWebBridge { this.uiDialog = uiDialog; } + public void setUILabel(UILabel uiLabel) { + this.uiLabel = uiLabel; + } + /** * 测试论坛网络连接 * From f3a19d05d23bc31b6f1d71939f32ae5f95f727bf Mon Sep 17 00:00:00 2001 From: Lanlan Date: Mon, 7 Jun 2021 17:10:32 +0800 Subject: [PATCH 079/148] =?UTF-8?q?REPORT-51360=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E5=95=86=E5=9F=8Etoast=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/login/DesignerLoginBridge.java | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/login/DesignerLoginBridge.java b/designer-base/src/main/java/com/fr/design/login/DesignerLoginBridge.java index 9425097abf..4d0ba8a41c 100644 --- a/designer-base/src/main/java/com/fr/design/login/DesignerLoginBridge.java +++ b/designer-base/src/main/java/com/fr/design/login/DesignerLoginBridge.java @@ -3,7 +3,10 @@ package com.fr.design.login; import com.fr.design.bridge.exec.JSBridge; import com.fr.design.bridge.exec.JSCallback; import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.gui.ilable.ActionLabel; +import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.locale.impl.BbsResetMark; import com.fr.design.login.executor.DesignerLoginBrowserExecutor; import com.fr.design.login.executor.DesignerLoginExecutor; @@ -11,6 +14,7 @@ import com.fr.design.login.executor.DesignerSendCaptchaExecutor; import com.fr.design.login.executor.DesignerSmsLoginExecutor; import com.fr.design.login.executor.DesignerSmsRegisterExecutor; import com.fr.design.login.task.DesignerLoginTaskWorker; +import com.fr.design.mainframe.toast.DesignerToastMsgUtil; import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; import com.fr.general.locale.LocaleCenter; @@ -20,10 +24,13 @@ import com.teamdev.jxbrowser.chromium.Browser; import com.teamdev.jxbrowser.chromium.JSFunction; import com.teamdev.jxbrowser.chromium.JSObject; import java.awt.Desktop; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.net.URI; import java.util.Map; import java.util.Set; import javax.swing.JOptionPane; +import javax.swing.JPanel; import javax.swing.SwingUtilities; /** @@ -59,7 +66,15 @@ public class DesignerLoginBridge { public void closeWindow(boolean loginSuccess) { DesignerLoginSource source = DesignerLoginSource.valueOf(Integer.parseInt(params.get("designerLoginSource"))); if (loginSuccess) { - if (source == DesignerLoginSource.BBS_JUMP) { + if (source == DesignerLoginSource.GUIDE) { + DesignerToastMsgUtil.toastPrompt( + getHyperlinkPane( + com.fr.design.i18n.Toolkit.i18nText("Fine-Designer_Guide_Login_Success_Title"), + com.fr.design.i18n.Toolkit.i18nText("Fine-Designer_Guide_Login_Success_Hyperlink_Text"), + CloudCenter.getInstance().acquireUrlByKind("designer.premium.template", "https://market.fanruan.com/template") + ) + ); + } else if (source == DesignerLoginSource.BBS_JUMP) { String bbsJumpUrl = params.get("bbsJumpUrl"); BrowseUtils.browser(bbsJumpUrl); } @@ -245,4 +260,21 @@ public class DesignerLoginBridge { public void resize(int width, int height) { DesignerLoginHelper.getDialog().setSize(width, height); } + + private JPanel getHyperlinkPane(String title, String hyperlinkText, String hyperlink) { + ActionLabel actionLabel = new ActionLabel(hyperlinkText); + actionLabel.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + try { + Desktop.getDesktop().browse(new URI(hyperlink)); + } catch (Exception ignore) { + } + } + }); + JPanel panel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); + panel.add(new UILabel(title)); + panel.add(actionLabel); + return panel; + } } From 50d105b4a5dda7940d74e82fb28ba0925d436b8e Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Mon, 7 Jun 2021 19:16:53 +0800 Subject: [PATCH 080/148] =?UTF-8?q?REPORT-53240=20=E5=8A=A0=E5=AF=86?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=9C=A8=E6=9C=8D=E5=8A=A1=E5=99=A8=E4=B8=8A?= =?UTF-8?q?=E9=A2=84=E8=A7=88=E4=B8=8D=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/share/util/SharableXMLUtils.java | 13 ------------- .../java/com/fr/design/share/SharableManager.java | 2 -- 2 files changed, 15 deletions(-) delete mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/util/SharableXMLUtils.java diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/SharableXMLUtils.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/SharableXMLUtils.java deleted file mode 100644 index baacf42722..0000000000 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/util/SharableXMLUtils.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.fr.design.mainframe.share.util; - -import com.fr.form.share.encrypt.engine.SharableReadHelper; -import com.fr.stable.xml.XMLConf; -import com.fr.stable.xml.helper.XMLReadHelper; - -public class SharableXMLUtils { - public static synchronized void registerSharableReadHelper() { - XMLReadHelper readHelper = XMLConf.getReadHelper(); - XMLReadHelper helper = new SharableReadHelper(readHelper); - XMLConf.registerXMLHelper(helper); - } -} diff --git a/designer-realize/src/main/java/com/fr/design/share/SharableManager.java b/designer-realize/src/main/java/com/fr/design/share/SharableManager.java index ba3b830643..05f893fadd 100644 --- a/designer-realize/src/main/java/com/fr/design/share/SharableManager.java +++ b/designer-realize/src/main/java/com/fr/design/share/SharableManager.java @@ -9,7 +9,6 @@ import com.fr.design.mainframe.share.collect.ComponentCollector; import com.fr.design.mainframe.share.collect.SharableCollectorManager; import com.fr.design.mainframe.share.encrypt.clipboard.impl.EncryptSelectionClipboardHandler; import com.fr.design.mainframe.share.encrypt.clipboard.impl.EncryptTransferableClipboardHandler; -import com.fr.design.mainframe.share.util.SharableXMLUtils; import com.fr.design.mainframe.share.util.ShareComponentUtils; import com.fr.design.share.utils.EffectItemUtils; import com.fr.json.JSONArray; @@ -18,7 +17,6 @@ import java.util.List; public class SharableManager { public static void start() { - SharableXMLUtils.registerSharableReadHelper(); SharableCollectorManager.getInstance().execute(); ClipboardFilter.registerClipboardHandler(EncryptSelectionClipboardHandler.getInstance()); ClipboardFilter.registerClipboardHandler(EncryptTransferableClipboardHandler.getInstance()); From d727b8f4244e224311d00fb709b8ae46bb6bedc1 Mon Sep 17 00:00:00 2001 From: Lanlan Date: Mon, 7 Jun 2021 19:43:56 +0800 Subject: [PATCH 081/148] =?UTF-8?q?REPORT-51360=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E9=80=9A=E8=A1=8C=E8=AF=81=E5=92=8Cfinedb=E9=87=8C?= =?UTF-8?q?=E7=9A=84=E5=8C=BA=E5=88=86=E5=BC=80=EF=BC=8C=E5=AF=B9=E4=B8=8D?= =?UTF-8?q?=E6=94=AF=E6=8C=81jxbrowser=E7=9A=84=E7=B3=BB=E7=BB=9F=E5=81=9A?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/DesignerEnvManager.java | 8 ++++ .../com/fr/design/constants/UIConstants.java | 1 + .../com/fr/design/extra/LoginWebBridge.java | 23 ++++----- .../fr/design/extra/PluginFromStorePane.java | 6 +-- .../fr/design/extra/PluginOperateUtils.java | 5 +- .../com/fr/design/extra/PluginUpdatePane.java | 6 +-- .../com/fr/design/extra/PluginWebBridge.java | 6 +-- .../com/fr/design/extra/WebViewDlgHelper.java | 2 + .../design/extra/exe/PluginLoginExecutor.java | 7 ++- .../fr/design/login/AbstractDesignerSSO.java | 47 ++++++++++--------- .../fr/design/login/DesignerLoginHelper.java | 26 ++++++++-- .../design/login/DesignerLoginShowDialog.java | 14 +++++- .../config/DesignerLoginConfigManager.java | 15 +++++- .../login/utils/DesignerLoginUtils.java | 16 +++++++ .../mainframe/chart/info/ChartInfo.java | 5 +- .../java/com/fr/design/upm/UpmBridge.java | 9 ++-- .../java/com/fr/design/upm/UpmFinder.java | 2 + .../fr/design/login/lib/locale/login_zh_CN.js | 1 + .../resources/com/fr/design/login/login.js | 2 +- .../share/ui/block/OnlineWidgetBlock.java | 9 ++-- .../design/mainframe/ActiveKeyGenerator.java | 3 +- .../alphafine/component/AlphaFineDialog.java | 3 +- .../design/mainframe/bbs/UserInfoLabel.java | 8 ++++ .../fr/design/mainframe/bbs/UserInfoPane.java | 2 +- .../entity/FileEntityBuilder.java | 3 +- .../share/ui/generate/ShareLoginLabel.java | 4 +- .../share/ui/generate/ShareMainPane.java | 10 ++-- .../fr/start/module/DesignerActivator.java | 4 +- 28 files changed, 161 insertions(+), 86 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java index 80dcb5918c..de83d6d7b4 100644 --- a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java @@ -841,6 +841,14 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { designerLoginConfigManager.setLoginRemindBeforeJumpBBS(loginRemindBeforeJumpBBS); } + public boolean isPluginRemindOnFirstLaunch() { + return designerLoginConfigManager.isPluginRemindOnFirstLaunch(); + } + + public void setPluginRemindOnFirstLaunch(boolean pluginRemindOnFirstLaunch) { + designerLoginConfigManager.setPluginRemindOnFirstLaunch(pluginRemindOnFirstLaunch); + } + /** * 内置服务器是否使用时启动 * diff --git a/designer-base/src/main/java/com/fr/design/constants/UIConstants.java b/designer-base/src/main/java/com/fr/design/constants/UIConstants.java index f43d37c00a..b10d3f9e52 100644 --- a/designer-base/src/main/java/com/fr/design/constants/UIConstants.java +++ b/designer-base/src/main/java/com/fr/design/constants/UIConstants.java @@ -149,6 +149,7 @@ public interface UIConstants { public static final Color POPUP_TITLE_BACKGROUND = new Color(0xd8f2fd); public static final Color LIST_ITEM_SPLIT_LINE = new Color(0xf0f0f3); public static final Color DESIGNER_LOGIN_BACKGROUND = new Color(0xf1ad14); + public static final Color DESIGNER_LOGIN_BACKGROUND_ONCLICK = new Color(0xd89600); public static final BufferedImage DRAG_BAR = IOUtils.readImage("com/fr/design/images/control/bar.png"); public static final BufferedImage DRAG_BAR_LIGHT = IOUtils.readImage("com/fr/design/images/control/bar-light.png"); diff --git a/designer-base/src/main/java/com/fr/design/extra/LoginWebBridge.java b/designer-base/src/main/java/com/fr/design/extra/LoginWebBridge.java index 61cd36e5d3..0ec65001c9 100644 --- a/designer-base/src/main/java/com/fr/design/extra/LoginWebBridge.java +++ b/designer-base/src/main/java/com/fr/design/extra/LoginWebBridge.java @@ -1,13 +1,15 @@ package com.fr.design.extra; -import com.fr.base.passport.FinePassportManager; import com.fr.concurrent.NamedThreadFactory; import com.fr.config.MarketConfig; +import com.fr.design.DesignerEnvManager; import com.fr.design.dialog.UIDialog; import com.fr.design.extra.exe.PluginLoginExecutor; import com.fr.design.gui.ilable.UILabel; import com.fr.design.locale.impl.BbsRegisterMark; import com.fr.design.locale.impl.BbsResetMark; +import com.fr.design.login.service.DesignerLoginClient; +import com.fr.design.login.service.DesignerLoginResult; import com.fr.general.CloudCenter; import com.fr.general.http.HttpClient; import com.fr.general.locale.LocaleCenter; @@ -80,12 +82,12 @@ public class LoginWebBridge { */ public void setMessageCount(int count) { if (count == MIN_MESSAGE_COUNT) { - MarketConfig.getInstance().setInShowBBsName(MarketConfig.getInstance().getBbsUsername()); + MarketConfig.getInstance().setInShowBBsName(DesignerEnvManager.getEnvManager().getDesignerLoginUsername()); return; } this.messageCount = count; StringBuilder sb = new StringBuilder(); - sb.append(StringUtils.BLANK).append(MarketConfig.getInstance().getBbsUsername()) + sb.append(StringUtils.BLANK).append(DesignerEnvManager.getEnvManager().getDesignerLoginUsername()) .append("(").append(this.messageCount) .append(")").append(StringUtils.BLANK); MarketConfig.getInstance().setInShowBBsName(sb.toString()); @@ -161,18 +163,9 @@ public class LoginWebBridge { * @return 登录信息标志 */ public String login(String userInfo, String password) { - if (!StringUtils.isNotBlank(userInfo) && !StringUtils.isNotBlank(password)) { - return LOGIN_INFO_EMPTY; - } - if (!testConnection()) { - return NET_FAILED; - } - int uid = 0; - try { - uid = FinePassportManager.getInstance().login(userInfo, password); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } + DesignerLoginClient client = new DesignerLoginClient(); + DesignerLoginResult result = client.login(userInfo, password); + int uid = result.getUid(); if (uid > 0) { closeWindow(); } diff --git a/designer-base/src/main/java/com/fr/design/extra/PluginFromStorePane.java b/designer-base/src/main/java/com/fr/design/extra/PluginFromStorePane.java index 5f76dbafca..dbb6e3edb6 100644 --- a/designer-base/src/main/java/com/fr/design/extra/PluginFromStorePane.java +++ b/designer-base/src/main/java/com/fr/design/extra/PluginFromStorePane.java @@ -1,6 +1,6 @@ package com.fr.design.extra; -import com.fr.config.MarketConfig; +import com.fr.design.DesignerEnvManager; import com.fr.design.dialog.FineJOptionPane; import com.fr.design.extra.tradition.callback.UpdateOnlineCallback; import com.fr.design.gui.frpane.UITabbedPane; @@ -190,10 +190,10 @@ public class PluginFromStorePane extends PluginAbstractLoadingViewPane process) { - result = LoginWebBridge.getHelper().login(username, password); + int uid = DesignerPassportManager.getInstance().login(username, password); + if (uid > 0) { + LoginWebBridge.getHelper().closeWindow(); + } + result = String.valueOf(uid); } } }; diff --git a/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java b/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java index 4aee417fd5..80d6462fab 100644 --- a/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java +++ b/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java @@ -2,6 +2,7 @@ package com.fr.design.login; import com.fr.design.DesignerEnvManager; import com.fr.design.actions.UpdateAction; +import com.fr.design.os.impl.SupportOSImpl; import com.fr.design.utils.BrowseUtils; import com.fr.general.CloudCenter; import com.fr.general.log.MessageFormatter; @@ -31,29 +32,31 @@ public abstract class AbstractDesignerSSO extends UpdateAction { @Override public void actionPerformed(ActionEvent event) { String url = getJumpUrl(); - if (StringUtils.isNotEmpty(url)) { - DesignerEnvManager manager = DesignerEnvManager.getEnvManager(); - int uid = manager.getDesignerLoginUid(); - if (uid > 0) { - String ssoUrl = CloudCenter.getInstance().acquireUrlByKind("designer.sso.api", "https://id.fanruan.com/api/app/?code={}&referrer={}"); - try { - String code = generateLoginCode(); - MessageFormatter.FormattingTuple tuple = MessageFormatter.arrayFormat(ssoUrl, new String[]{code, url}); - BrowseUtils.browser(tuple.getMessage()); - } catch (Exception e) { - BrowseUtils.browser(url); - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } + if (!SupportOSImpl.DESIGNER_LOGIN.support()) { + BrowseUtils.browser(url); + return; + } + DesignerEnvManager manager = DesignerEnvManager.getEnvManager(); + int uid = manager.getDesignerLoginUid(); + if (uid > 0) { + String ssoUrl = CloudCenter.getInstance().acquireUrlByKind("designer.sso.api", "https://id.fanruan.com/api/app/?code={}&referrer={}"); + try { + String code = generateLoginCode(); + MessageFormatter.FormattingTuple tuple = MessageFormatter.arrayFormat(ssoUrl, new String[]{code, url}); + BrowseUtils.browser(tuple.getMessage()); + } catch (Exception e) { + BrowseUtils.browser(url); + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } else { + boolean loginRemindBeforeJumpBBS = manager.isLoginRemindBeforeJumpBBS(); + if (loginRemindBeforeJumpBBS) { + Map params = new HashMap<>(); + params.put("bbsJumpUrl", url); + DesignerLoginHelper.showLoginDialog(DesignerLoginSource.BBS_JUMP, params); + manager.setLoginRemindBeforeJumpBBS(false); } else { - boolean loginRemindBeforeJumpBBS = manager.isLoginRemindBeforeJumpBBS(); - if (loginRemindBeforeJumpBBS) { - Map params = new HashMap<>(); - params.put("bbsJumpUrl", url); - DesignerLoginHelper.showLoginDialog(DesignerLoginSource.BBS_JUMP, params); - manager.setLoginRemindBeforeJumpBBS(false); - } else { - BrowseUtils.browser(url); - } + BrowseUtils.browser(url); } } } diff --git a/designer-base/src/main/java/com/fr/design/login/DesignerLoginHelper.java b/designer-base/src/main/java/com/fr/design/login/DesignerLoginHelper.java index cf86de806c..93d7b1adf2 100644 --- a/designer-base/src/main/java/com/fr/design/login/DesignerLoginHelper.java +++ b/designer-base/src/main/java/com/fr/design/login/DesignerLoginHelper.java @@ -2,10 +2,15 @@ package com.fr.design.login; import com.fr.design.DesignerEnvManager; import com.fr.design.dialog.UIDialog; +import com.fr.design.extra.WebViewDlgHelper; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.os.impl.SupportOSImpl; import com.fr.design.update.ui.dialog.UpdateMainDialog; import com.fr.general.GeneralContext; +import java.awt.Dialog; +import java.awt.Frame; +import java.awt.Window; import java.util.HashMap; import java.util.Locale; import java.util.Map; @@ -37,6 +42,14 @@ public class DesignerLoginHelper { } public static void showLoginDialog(DesignerLoginSource source, Map params) { + showLoginDialog(source, params, DesignerContext.getDesignerFrame()); + } + + public static void showLoginDialog(DesignerLoginSource source, Map params, Window window) { + if (!SupportOSImpl.DESIGNER_LOGIN.support()) { + WebViewDlgHelper.createLoginDialog(window); + return; + } boolean hasJxBrowser = true; try { Class.forName(JXBROWSER); @@ -44,16 +57,23 @@ public class DesignerLoginHelper { hasJxBrowser = false; } if (hasJxBrowser) { - showLoginPane(source, params); + showLoginPane(source, params, window); } else { showUpdatePane(); } } - private static void showLoginPane(DesignerLoginSource source, Map params) { + private static void showLoginPane(DesignerLoginSource source, Map params, Window window) { DesignerLoginPane designerLoginPane = new DesignerLoginPane(source, params); if (dialog == null) { - dialog = new DesignerLoginShowDialog(DesignerContext.getDesignerFrame(), designerLoginPane); + if (window instanceof Dialog) { + dialog = new DesignerLoginShowDialog((Dialog) window, designerLoginPane); + } else if (window instanceof Frame) { + dialog = new DesignerLoginShowDialog((Frame) window, designerLoginPane); + } else { + return; + } + } dialog.setVisible(true); } diff --git a/designer-base/src/main/java/com/fr/design/login/DesignerLoginShowDialog.java b/designer-base/src/main/java/com/fr/design/login/DesignerLoginShowDialog.java index b5464373fa..031ec4941f 100644 --- a/designer-base/src/main/java/com/fr/design/login/DesignerLoginShowDialog.java +++ b/designer-base/src/main/java/com/fr/design/login/DesignerLoginShowDialog.java @@ -1,9 +1,10 @@ package com.fr.design.login; -import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.UIDialog; import com.fr.design.utils.gui.GUICoreUtils; import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dialog; import java.awt.Dimension; import java.awt.Frame; import javax.swing.JPanel; @@ -17,8 +18,17 @@ public class DesignerLoginShowDialog extends UIDialog { private static final Dimension DEFAULT = new Dimension(422, 478); - public DesignerLoginShowDialog(Frame frame, BasicPane pane) { + public DesignerLoginShowDialog(Frame frame, Component pane) { super(frame); + init(pane); + } + + public DesignerLoginShowDialog(Dialog dialog, Component pane) { + super(dialog); + init(pane); + } + + private void init(Component pane) { setUndecorated(true); JPanel panel = (JPanel) getContentPane(); panel.setLayout(new BorderLayout()); diff --git a/designer-base/src/main/java/com/fr/design/login/config/DesignerLoginConfigManager.java b/designer-base/src/main/java/com/fr/design/login/config/DesignerLoginConfigManager.java index 8c078ef8b2..a0ab68109d 100644 --- a/designer-base/src/main/java/com/fr/design/login/config/DesignerLoginConfigManager.java +++ b/designer-base/src/main/java/com/fr/design/login/config/DesignerLoginConfigManager.java @@ -62,11 +62,14 @@ public class DesignerLoginConfigManager implements XMLReadable, XMLWriter { * 当前版本第一次启动 */ private boolean currentVersionFirstLaunch = true; - /** * bbs跳转前的登录提醒 */ private boolean loginRemindBeforeJumpBBS = true; + /** + * 插件管理第一次启动时的提醒 + */ + private boolean pluginRemindOnFirstLaunch = true; private DesignerLoginConfigManager() { @@ -94,6 +97,7 @@ public class DesignerLoginConfigManager implements XMLReadable, XMLWriter { this.setLastLoginType(DesignerLoginType.valueOf(reader.getAttrAsInt("lastLoginType", -1))); this.setLastLoginAccount(reader.getAttrAsString("lastLoginAccount", StringUtils.EMPTY)); this.setLoginRemindBeforeJumpBBS(reader.getAttrAsBoolean("loginRemindBeforeJumpBBS", true)); + this.setPluginRemindOnFirstLaunch(reader.getAttrAsBoolean("pluginRemindOnFirstLaunch", true)); } } @@ -112,6 +116,7 @@ public class DesignerLoginConfigManager implements XMLReadable, XMLWriter { writer.attr("lastLoginType", lastLoginType.getType()); writer.attr("lastLoginAccount", lastLoginAccount); writer.attr("loginRemindBeforeJumpBBS", loginRemindBeforeJumpBBS); + writer.attr("pluginRemindOnFirstLaunch", pluginRemindOnFirstLaunch); writer.end(); } @@ -210,4 +215,12 @@ public class DesignerLoginConfigManager implements XMLReadable, XMLWriter { public void setLoginRemindBeforeJumpBBS(boolean loginRemindBeforeJumpBBS) { this.loginRemindBeforeJumpBBS = loginRemindBeforeJumpBBS; } + + public boolean isPluginRemindOnFirstLaunch() { + return pluginRemindOnFirstLaunch; + } + + public void setPluginRemindOnFirstLaunch(boolean pluginRemindOnFirstLaunch) { + this.pluginRemindOnFirstLaunch = pluginRemindOnFirstLaunch; + } } diff --git a/designer-base/src/main/java/com/fr/design/login/utils/DesignerLoginUtils.java b/designer-base/src/main/java/com/fr/design/login/utils/DesignerLoginUtils.java index 6e52d6fc21..0e1815c25b 100644 --- a/designer-base/src/main/java/com/fr/design/login/utils/DesignerLoginUtils.java +++ b/designer-base/src/main/java/com/fr/design/login/utils/DesignerLoginUtils.java @@ -1,5 +1,7 @@ package com.fr.design.login.utils; +import com.fr.design.DesignerEnvManager; +import com.fr.design.mainframe.toast.DesignerToastMsgUtil; import com.fr.general.GeneralContext; import java.util.HashMap; import java.util.Map; @@ -16,4 +18,18 @@ public class DesignerLoginUtils { map4Tpl.put("language", GeneralContext.getLocale().toString()); return map4Tpl; } + + public static void showPluginRemindOnFirstLaunch() { + DesignerEnvManager manager = DesignerEnvManager.getEnvManager(); + int uid = manager.getDesignerLoginUid(); + if (uid > 0) { + boolean pluginRemindOnFirstLaunch = manager.isPluginRemindOnFirstLaunch(); + if (pluginRemindOnFirstLaunch) { + DesignerToastMsgUtil.toastWarning( + com.fr.design.i18n.Toolkit.i18nText("Fine-Designer_Plugin_Tip") + ); + manager.setPluginRemindOnFirstLaunch(false); + } + } + } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/chart/info/ChartInfo.java b/designer-base/src/main/java/com/fr/design/mainframe/chart/info/ChartInfo.java index 262ccc8778..7d687ac147 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/chart/info/ChartInfo.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/chart/info/ChartInfo.java @@ -5,7 +5,6 @@ import com.fr.chartx.attr.ChartProvider; import com.fr.chartx.config.info.AbstractConfig; import com.fr.chartx.config.info.ChartConfigInfo; import com.fr.chartx.config.info.constant.ConfigType; -import com.fr.config.MarketConfig; import com.fr.design.DesignModelAdapter; import com.fr.design.DesignerEnvManager; import com.fr.design.file.HistoryTemplateListCache; @@ -132,8 +131,8 @@ public class ChartInfo extends AbstractPointInfo implements Comparable chartConsumingMap = new HashMap<>(); - String username = MarketConfig.getInstance().getBbsUsername(); - String userId = String.valueOf(MarketConfig.getInstance().getBbsUid()); + String username = DesignerEnvManager.getEnvManager().getDesignerLoginUsername(); + String userId = String.valueOf(DesignerEnvManager.getEnvManager().getDesignerLoginUid()); String uuid = DesignerEnvManager.getEnvManager().getUUID(); String activityKey = DesignerEnvManager.getEnvManager().getActivationKey(); String chartId = chartProvider.getChartUuid(); diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java b/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java index e932c5083d..1169b7c9a6 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java @@ -1,9 +1,8 @@ package com.fr.design.upm; -import com.fr.base.passport.FinePassportManager; -import com.fr.config.MarketConfig; import com.fr.config.ServerPreferenceConfig; import com.fr.decision.webservice.v10.plugin.helper.category.impl.UpmResourceLoader; +import com.fr.design.DesignerEnvManager; import com.fr.design.bridge.exec.JSBridge; import com.fr.design.bridge.exec.JSCallback; import com.fr.design.extra.PluginOperateUtils; @@ -19,12 +18,10 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.locale.impl.BbsRegisterMark; import com.fr.design.locale.impl.BbsResetMark; import com.fr.design.locale.impl.BbsSpaceMark; -import com.fr.design.upm.event.CertificateEvent; import com.fr.design.upm.event.DownloadEvent; import com.fr.design.upm.exec.UpmBrowserExecutor; import com.fr.design.upm.task.UpmTaskWorker; import com.fr.event.EventDispatcher; -import com.fr.general.CloudCenter; import com.fr.general.GeneralUtils; import com.fr.general.locale.LocaleCenter; import com.fr.general.locale.LocaleMark; @@ -379,7 +376,7 @@ public class UpmBridge { @JSBridge public String getLoginInfo(final JSFunction callback) { registerLoginInfo(callback); - return MarketConfig.getInstance().getBbsUsername(); + return DesignerEnvManager.getEnvManager().getDesignerLoginUsername(); } /** @@ -390,7 +387,7 @@ public class UpmBridge { @JSBridge public void registerLoginInfo(final JSFunction callback) { JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); - String username = MarketConfig.getInstance().getBbsUsername(); + String username = DesignerEnvManager.getEnvManager().getDesignerLoginUsername(); if (StringUtils.isEmpty(username)) { jsCallback.execute(StringUtils.EMPTY); } else { diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java b/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java index 36e558d171..74bbcb73fd 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java @@ -5,6 +5,7 @@ import com.fr.decision.webservice.v10.plugin.helper.category.impl.UpmResourceLoa import com.fr.design.dialog.FineJOptionPane; import com.fr.design.dialog.UIDialog; import com.fr.design.i18n.Toolkit; +import com.fr.design.login.utils.DesignerLoginUtils; import com.fr.design.mainframe.DesignerContext; import com.fr.design.plugin.DesignerPluginContext; import com.fr.design.update.ui.dialog.UpdateMainDialog; @@ -97,6 +98,7 @@ public class UpmFinder { dialog = new UpmShowDialog(DesignerContext.getDesignerFrame(), upmPane); } dialog.setVisible(true); + DesignerLoginUtils.showPluginRemindOnFirstLaunch(); } } diff --git a/designer-base/src/main/resources/com/fr/design/login/lib/locale/login_zh_CN.js b/designer-base/src/main/resources/com/fr/design/login/lib/locale/login_zh_CN.js index ec38f61f2a..5181aa4351 100644 --- a/designer-base/src/main/resources/com/fr/design/login/lib/locale/login_zh_CN.js +++ b/designer-base/src/main/resources/com/fr/design/login/lib/locale/login_zh_CN.js @@ -52,6 +52,7 @@ var Store = { 'Designer-BBS_Username_Too_Short': '昵称长度太短', 'Designer-BBS_Username_Too_Long': '这个昵称长度已经达到了上限', 'Designer-BBS_Username_Is_Register': '该用户已被注册', + 'Designer-BBS_Please_Enter_Correct_Phone': '请输入正确的手机号', 'Designer-Login_Network_Connected_Failed': '网络连接失败', }} diff --git a/designer-base/src/main/resources/com/fr/design/login/login.js b/designer-base/src/main/resources/com/fr/design/login/login.js index 18d1954e08..71e2daa06a 100644 --- a/designer-base/src/main/resources/com/fr/design/login/login.js +++ b/designer-base/src/main/resources/com/fr/design/login/login.js @@ -1 +1 @@ -!function(e){var t={};function i(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,i),o.l=!0,o.exports}i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)i.d(n,o,function(t){return e[t]}.bind(null,o));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=4)}([function(e,t,i){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,i,n){n===undefined&&(n=i),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[i]}})}:function(e,t,i,n){n===undefined&&(n=i),e[n]=t[i]}),o=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||t.hasOwnProperty(i)||n(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),o(i(5),t)},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=window.DesignerLoginHelper,o=function(){function e(){}return e.prototype.getParams=function(){return{designerLoginSource:window.designerLoginSource||"0",lastLoginType:window.lastLoginType||"-1",lastLoginAccount:window.lastLoginAccount||""}},e.prototype.closeWindow=function(e){n&&n.closeWindow(e)},e.prototype.serviceHref=function(){n?n.serviceHref():window.open("https://bbs.fanruan.com/thread-102821-1-1.html")},e.prototype.forgetHref=function(){n?n.forgetHref():window.open("https://id.fanruan.com/forget/forget.php?clue=activityf")},e.prototype.normalLogin=function(e,t,i){n?n.normalLogin(e,t,i):i(-1)},e.prototype.sendCaptcha=function(e,t,i){n?n.sendCaptcha(e,t,i):i(-1)},e.prototype.smsLogin=function(e,t,i,o){n?n.smsLogin(e,t,i,o):o(null)},e.prototype.smsRegister=function(e,t,i,o,s){n?n.smsRegister(e,t,i,o,s):s(-1)},e.prototype.resize=function(e,t){n&&n.resize(e,t)},e}();t["default"]=new o},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.BBS_ERROR_CODE=t.NORMAL_LOGIN_RESULT=t.REGION=t.LOGIN=void 0,t.LOGIN={NORMAL_METHOD:"normal",SMS_METHOD:"sms",TABS:{LOGIN:"login",FORGET_PASSWORD:"forget",RESET_PASSWORD:"reset",REGISTER:"register"}},t.REGION=[{value:"+86",text:"Designer-Basic_Chinese_Mainland"},{value:"+886",text:"Designer-Basic_Chinese_Taiwan"},{value:"+852",text:"Designer-Basic_Chinese_Hong_Kong"},{value:"+853",text:"Designer-Basic_Chinese_Macao"},{value:"+90",text:"Designer-Basic_Turkey"},{value:"+82",text:"Designer-Basic_South_Korea"},{value:"+81",text:"Designer-Basic_Japan"},{value:"+65",text:"Designer-Basic_Singapore"},{value:"+60",text:"Designer-Basic_Malaysia"}],t.NORMAL_LOGIN_RESULT=[{status:0,message:"Designer-Login_Internal_Error"},{status:-1,message:"Designer-Login_Store_User_Not_Exist"},{status:-2,message:"Designer-Login_Store_User_Password_Error"},{status:-3,message:"Designer-Login_Unexpected_Error"},{status:-4,message:"Designer-Login_Network_Connected_Failed"}],t.BBS_ERROR_CODE=[{status:0,message:"Designer-Login_Internal_Error"},{status:-1,message:"Designer-BBS_Register_Timeout"},{status:-2,message:"Designer-BBS_Phone_Is_Register"},{status:-3,message:"Designer-BBS_Captcha_Send_Exceed_Limit"},{status:-4,message:"Designer-BBS_Phone_Format_Error"},{status:-100,message:"Designer-BBS_Captcha_Out_Of_Date"},{status:-101,message:"Designer-BBS_Captcha_Try_Exceed_Limit"},{status:-102,message:"Designer-BBS_Captcha_Error"},{status:-104,message:"Designer-BBS_Username_Format_Error"},{status:-105,message:"Designer-BBS_Username_Too_Short"},{status:-106,message:"Designer-BBS_Username_Too_Long"},{status:-107,message:"Designer-BBS_Phone_Is_Register"},{status:-108,message:"Designer-BBS_Username_Is_Register"}]},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getError=void 0,t.getError=function(e,t){var i=BI.find(e,(function(e,i){return i.status===t}));return i&&i.message?i.message:""}},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(0),o=i(6);BI.addI18n(Store.i18n),BI.createWidget({type:n.Vertical,element:"body",items:[{type:o["default"]}]})},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ListView=t.VirtualGroup=t.LeftRightVerticalAdapt=t.Left=t.Horizontal=t.Vertical=t.Absolute=t.Layout=t.Htape=t.CenterAdapt=t.Vtape=t.HorizontalAdapt=t.VerticalAdapt=t.BubbleCombo=t.Img=t.Tab=t.SingleSelectInsertCombo=t.SingleSelectRadioItem=t.MultiTreePopupView=t.Editor=t.NicEditor=t.RichEditor=t.MultiTreeCombo=t.DynamicDateTimeCombo=t.DynamicDateCombo=t.BarPopOver=t.MultiSelectItem=t.TextAreaEditor=t.AllValueChooserCombo=t.ButtonGroup=t.MultiSelectInsertCombo=t.TextEditor=t.Button=t.SignEditor=t.MultiFileEditor=t.SmallTextEditor=t.HtmlLabel=t.Label=t.DownListCombo=t.TextButton=t.IconChangeButton=t.IconButton=t.IconTextIconItem=t.IconTextItem=void 0,t.IconTextItem="bi.icon_text_item",t.IconTextIconItem="bi.icon_text_icon_item",t.IconButton="bi.icon_button",t.IconChangeButton="bi.icon_change_button",t.TextButton="bi.text_button",t.DownListCombo="bi.down_list_combo",t.Label="bi.label",t.HtmlLabel="bi.html_label",t.SmallTextEditor="bi.small_text_editor",t.MultiFileEditor="bi.multifile_editor",t.SignEditor="bi.sign_editor",t.Button="bi.button",t.TextEditor="bi.text_editor",t.MultiSelectInsertCombo="bi.multi_select_insert_combo",t.ButtonGroup="bi.button_group",t.AllValueChooserCombo="bi.all_value_chooser_combo",t.TextAreaEditor="bi.textarea_editor",t.MultiSelectItem="bi.multi_select_item",t.BarPopOver="bi.bar_popover",t.DynamicDateCombo="bi.dynamic_date_combo",t.DynamicDateTimeCombo="bi.dynamic_date_time_combo",t.MultiTreeCombo="bi.multi_tree_combo",t.RichEditor="bi.rich_editor",t.NicEditor="bi.nic_editor",t.Editor="bi.editor",t.MultiTreePopupView="bi.multi_tree_popup_view",t.SingleSelectRadioItem="bi.single_select_radio_item",t.SingleSelectInsertCombo="bi.single_select_insert_combo",t.Tab="bi.tab",t.Img="bi.img",t.BubbleCombo="bi.bubble_combo",t.VerticalAdapt="bi.vertical_adapt",t.HorizontalAdapt="bi.horizontal_adapt",t.Vtape="bi.vtape",t.CenterAdapt="bi.center_adapt",t.Htape="bi.htape",t.Layout="bi.layout",t.Absolute="bi.absolute",t.Vertical="bi.vertical",t.Horizontal="bi.horizontal",t.Left="bi.left",t.LeftRightVerticalAdapt="bi.left_right_vertical_adapt",t.VirtualGroup="bi.virtual_group",t.ListView="bi.list_view"},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(7),s=i(8),r=i(9),a=i(11);i(24),t.className="designer.login.login",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login",width:420},_store:function(){return BI.Models.getModel(o["default"])},watch:{loading:function(e){this.loading.setVisible(e)}},render:function(){return{type:n.Vertical,cls:"designer-login",items:[{el:{type:n.HorizontalAdapt,items:[{type:s["default"],rgap:14,tgap:14}]}},{el:{type:n.Vertical,items:[{type:r["default"]},{type:a["default"]}]},lgap:15,rgap:15,bgap:15}]}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});BI.model("designer.login.login.model",BI.inherit(Fix.Model,{childContext:["loading"],state:function(){return{loading:!1}}})),t["default"]="designer.login.login.model"},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(1);t.className="designer.login.login.close.button",t.Widget=BI.inherit(BI.Widget,{render:function(){return{type:n.TextButton,text:String.fromCharCode(10005),cls:"background-login-close",width:18.38,height:18.38,handler:function(){o["default"].closeWindow(!1)}}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0);i(10),t.className="designer.login.login.title",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-title"},render:function(){return{type:n.Label,text:BI.i18nText("Designer-Login_Title"),cls:"bi-font-bold",bgap:10}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(12);i(13);var s=i(14),r=i(16),a=i(18),l=i(2),u=i(1),g=249.64,c=331.64,d=422,f=478,p=560;t.className="designer.login.login.body",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(o["default"])},watch:{loginMethod:function(e){this.tabOption.setValue(e),this.tab.setSelect(e),this.foot.setLoginMethod(e),this.refreshLoginButton(),e===l.LOGIN.NORMAL_METHOD?(this.tab.setHeight(g),u["default"].resize(d,f)):this.model.expand&&(u["default"].resize(d,p),this.tab.setHeight(c))},approve:function(e){this.refreshLoginButton()},expand:function(e){e&&(u["default"].resize(d,p),this.tab.setHeight(c))}},render:function(){var e=this;return{type:n.Vertical,cls:"designer-login-body",items:[{type:n.ButtonGroup,value:this.model.loginMethod,ref:function(t){e.tabOption=t},layouts:[{type:n.HorizontalAdapt}],items:[{cls:"designer-login-change-mode bi-list-item-effect bi-border-bottom bi-font-bold",width:70,height:28,value:l.LOGIN.SMS_METHOD,text:BI.i18nText("Designer-Login_Sms")},{cls:"designer-login-change-mode bi-list-item-effect bi-border-bottom bi-font-bold",width:70,height:28,value:l.LOGIN.NORMAL_METHOD,text:BI.i18nText("Designer-Login_Normal")}],listeners:[{eventName:BI.ButtonGroup.EVENT_CHANGE,action:function(t){e.store.setLoginMethod(t)}}],tgap:24,lgap:75,rgap:75},{type:n.CenterAdapt,tgap:35,items:[{type:n.Tab,cardCreator:BI.bind(this.createCard,this),showIndex:this.model.loginMethod,ref:function(t){e.tab=t},height:g,width:280}]},{type:s["default"],lgap:50,rgap:50,bgap:30,ref:function(t){e.foot=t},refreshStatus:function(t){e.store.setApprove(t)}}]}},mounted:function(){var e=u["default"].getParams(),t=e.designerLoginSource,i=e.lastLoginType;if("2"===t){var n="0"===i?l.LOGIN.NORMAL_METHOD:l.LOGIN.SMS_METHOD;this.store.setLoginMethod(n)}},createCard:function(e){var t=this;switch(e){case l.LOGIN.NORMAL_METHOD:return{type:r["default"],ref:function(e){t.normalMethod=e}};case l.LOGIN.SMS_METHOD:default:return{type:a["default"],ref:function(e){t.smsMethod=e},expand:function(){t.store.setExpand(!0)}}}},refreshLoginButton:function(){this.model.loginMethod===l.LOGIN.NORMAL_METHOD?this.normalMethod.setApprove(this.model.approve):this.smsMethod.setApprove(this.model.approve)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0;var n=i(2);t.className="designer.login.model.login.body",t.Model=BI.inherit(Fix.Model,{context:["loading"],state:function(){return{loginMethod:n.LOGIN.SMS_METHOD,approve:!0,expand:!1}},actions:{setLoginMethod:function(e){this.model.loginMethod=e},setApprove:function(e){this.model.approve=e},setExpand:function(e){this.model.expand=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(1),o=i(0);i(15);var s=i(2);t.className="designer.login.login.foot",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-foot"},render:function(){var e=this,t=this.options;return{type:o.LeftRightVerticalAdapt,items:{left:[{type:o.MultiSelectItem,width:30,selected:!0,handler:function(){t.refreshStatus(this.isSelected())}},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:BI.i18nText("Designer-Login_I_Have_Read")},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:"《"},{type:o.TextButton,cls:"login-link",textAlign:"left",text:BI.i18nText("Designer-Login_Service_Terms"),handler:function(){n["default"].serviceHref()}},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:"》"}],right:[{type:o.TextButton,cls:"login-link",textAlign:"right",text:BI.i18nText("Designer-Login_Forget_Password"),invisible:!0,ref:function(t){e.forgetPassword=t},handler:function(){n["default"].forgetHref()}}]}}},setLoginMethod:function(e){e===s.LOGIN.NORMAL_METHOD?this.forgetPassword.setVisible(!0):this.forgetPassword.setVisible(!1)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(3),s=i(1),r=i(17),a=i(2);t.className="designer.login.login.normal",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(r["default"])},watch:{errMessage:function(e){this.errMessage.setText(e)}},render:function(){var e=this;return{type:n.Vertical,items:[{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_User_Name"),bgap:3},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-username",watermark:BI.i18nText("Designer-Login_User_Name_Hint"),inputType:"text",allowBlank:!0,height:40,ref:function(t){e.userName=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Password"),bgap:3},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Password_Hint"),inputType:"password",allowBlank:!0,height:40,ref:function(t){e.password=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,cls:"designer-login-error-message",textAlign:"center",text:"",height:20,bgap:10,ref:function(t){e.errMessage=t}},{type:n.Button,cls:"login-login-button bi-font-bold",text:BI.i18nText("Designer-Login"),level:"common",height:40,ref:function(t){e.loginButton=t},handler:function(){e.login()},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]}]}},mounted:function(){var e=this;this.element.keyup((function(t){13===t.keyCode&&e.login()}));var t=s["default"].getParams(),i=t.designerLoginSource,n=t.lastLoginType,o=t.lastLoginAccount;"2"===i&&"0"===n&&e.userName.setValue(o)},checkUsername:function(){var e=this.userName.getValue();e&&this.userName.setValue(e.replace(/\s+/g,""))},login:function(){var e=this;e.checkUsername();var t=this.userName.getValue(),i=this.password.getValue();t?i?s["default"].normalLogin(t,i,(function(t){var i=parseInt(t,10);if(i>0)s["default"].closeWindow(!0);else{var n=o.getError(a.NORMAL_LOGIN_RESULT,i);n&&e.store.setErrMessage(BI.i18nText(n))}})):this.store.setErrMessage(BI.i18nText("Designer-Login_Password_Not_Null")):this.store.setErrMessage(BI.i18nText("Designer-Login_Username_Not_Null"))},setApprove:function(e){this.loginButton.setEnable(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0,t.className="designer.login.model.normal_method",t.Model=BI.inherit(Fix.Model,{context:[""],state:function(){return{errMessage:""}},actions:{setErrMessage:function(e){this.model.errMessage=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(19),s=i(21),r=i(22),a=i(2),l=i(23),u=i(1),g=i(3);t.className="designer.login.login.sms",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(l["default"])},watch:{errMessage:function(e){this.errMessage.setText(e)},isRegister:function(e){var t=this.options;e&&(t.expand(),this.password.setVisible(!0),this.passwordLabel.setVisible(!0))}},render:function(){var e=this,t=this;return{type:n.Vertical,items:[{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Phone"),bgap:3},{type:n.HorizontalAdapt,bgap:7,items:[{type:o["default"],height:42,textFormatter:function(e){var i=t.getNumberTypeItem(e);return{value:i.value,text:BI.i18nText(i.text)}},value:a.REGION[0].value,items:BI.map(a.REGION,(function(e,t){return{type:s["default"],value:t.value,label:BI.i18nText(t.text),text:t.value}})),ref:function(t){e.regionCode=t}},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-username",watermark:BI.i18nText("Designer-Login_Phone_Hint"),inputType:"text",allowBlank:!0,height:40,ref:function(t){e.phone=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Code"),bgap:3},{type:n.Horizontal,bgap:7,items:[{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Code_Hint"),inputType:"text",allowBlank:!0,height:40,width:200,ref:function(t){e.code=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:r["default"],height:40,width:80,ref:function(t){e.accountCaptcha=t},listeners:[{eventName:"EVENT_SEND",action:function(){t.sendCaptcha()}}]}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Password"),bgap:3,invisible:!0,ref:function(t){e.passwordLabel=t}},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Password_Setting_Hint"),inputType:"password",allowBlank:!0,height:40,invisible:!0,ref:function(t){e.password=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,cls:"designer-login-error-message",textAlign:"center",text:"",height:20,bgap:11,ref:function(t){e.errMessage=t}},{type:n.Button,cls:"login-login-button bi-font-bold",text:BI.i18nText("Designer-Login_Register_Or_Login"),level:"common",height:40,ref:function(t){e.loginButton=t},handler:function(){e.login()}}]}},mounted:function(){var e=this;this.element.keyup((function(t){13===t.keyCode&&e.login()}));var t=u["default"].getParams(),i=t.designerLoginSource,n=t.lastLoginType,o=t.lastLoginAccount;if("2"===i&&"1"===n){var s=o.split("-")[0],r=o.split("-")[1];e.regionCode.setValue(s),e.phone.setValue(r)}},getNumberTypeItem:function(e){return BI.find(a.REGION,(function(t,i){return e===i.value}))||{}},checkPhone:function(){var e=this.phone.getValue();e&&this.phone.setValue(e.replace(/\s+/g,""))},login:function(){var e=this,t=this;t.checkPhone();var i=this.phone.getValue(),n=this.code.getValue();if(i)if(n){var o=this.regionCode.getValue();if(this.model.isRegister){var s=this.password.getValue();if(!s)return void this.store.setErrMessage(BI.i18nText("Designer-Login_Password_Not_Null"));var r=this.model.regToken;if(!r)return void this.store.setErrMessage(BI.i18nText("Designer-Login_Token_Request_Failed"));u["default"].smsRegister(o,i,s,r,(function(e){var i=parseInt(e,10);if(i>0)u["default"].closeWindow(!0);else{var n=g.getError(a.BBS_ERROR_CODE,i);n&&t.store.setErrMessage(BI.i18nText(n))}}))}else u["default"].smsLogin(o,i,n,(function(i){var n=JSON.parse(i);if(n.status>0)if(!0===n.register){var o=n.regtoken;o?(t.store.setRegister(!0),t.store.setRegToken(o)):e.store.setErrMessage(BI.i18nText("Designer-Login_Token_Request_Failed"))}else u["default"].closeWindow(!0);else{var s=g.getError(a.BBS_ERROR_CODE,n.status);s&&t.store.setErrMessage(BI.i18nText(s))}}))}else this.store.setErrMessage(BI.i18nText("Designer-Login_Code_Not_Null"));else this.store.setErrMessage(BI.i18nText("Designer-Login_Phone_Not_Null"))},sendCaptcha:function(){var e=this;e.checkPhone();var t=this.phone.getValue();if(!t)return e.accountCaptcha.setButtonEnable(!0),void this.store.setErrMessage(BI.i18nText("Designer-Login_Phone_Not_Null"));var i=this.regionCode.getValue();u["default"].sendCaptcha(i,t,(function(t){var i=parseInt(t,10);if(1===i)e.accountCaptcha.regainCaptcha();else{e.accountCaptcha.setButtonEnable(!0);var n=g.getError(a.BBS_ERROR_CODE,i);n&&e.store.setErrMessage(BI.i18nText(n))}}))},setApprove:function(e){this.loginButton.setEnable(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(20);t.className="designer.left_right_text_value_combo",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"",height:24,chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,textFormatter:function(e){return e},value:""},render:function(){var e=this,t=this.options;return{type:"bi.combo",container:t.container,adjustLength:2,ref:function(t){e.combo=t},el:{type:n["default"],cls:"text-value-trigger",items:t.items,height:t.height-2,value:t.textFormatter(t.value),ref:function(t){e.trigger=t}},popup:{el:{type:"bi.text_value_combo_popup",chooseType:t.chooseType,value:t.value,items:t.items,ref:function(t){e.popup=t},listeners:[{eventName:BI.TextValueComboPopup.EVENT_CHANGE,action:function(){e.setValue(e.getValue()),e.combo.hideView(),e.fireEvent("EVENT_CHANGE",arguments)}},{eventName:BI.Controller.EVENT_CHANGE,action:function(){e.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}}]},value:t.value,maxHeight:240,minHeight:25}}},setValue:function(e){this.combo.setValue(e),this.trigger.setValue(this.options.textFormatter(e))},getValue:function(){var e=this.combo.getValue();return BI.isNull(e)?"":BI.isArray(e)?e[0]:e},populate:function(e){this.options.items=e,this.combo.populate(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0,t.className="designer.left_right_text_value_combo_trigger",t.Widget=BI.inherit(BI.Trigger,{props:{baseCls:"",value:{}},render:function(){var e=this,t=this.options,i=t.value;return{type:"bi.htape",cls:"bi-border-bottom bi-border-radius",items:[{type:"bi.label",text:i.text,title:function(){return e.textRow.getText()},height:t.height,hgap:3,textAlign:"left",ref:function(t){e.textRow=t}},{type:"bi.label",text:i.value,height:t.height,width:32,textAlign:"right",ref:function(t){e.valueRow=t}},{type:"bi.trigger_icon_button",width:t.triggerWidth||t.height}]}},setValue:function(e){this.textRow.setText(e.text),this.valueRow.setText(e.value)},setText:function(e){this.textRow.setText(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0,t.className="designer.components.phone.editor.item",t.Widget=BI.inherit(BI.BasicButton,{props:{baseCls:"designer-login-login-body",label:"",text:""},render:function(){var e=this.options;return{type:"bi.htape",items:[{el:{type:"bi.label",text:e.label,title:e.label,textAlign:"left"},lgap:10,rgap:5},{el:{type:"bi.label",text:e.text,textAlign:"right"},width:32,rgap:10}]}},doClick:function(){BI.SingleSelectItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent("EVENT_CHANGE",this.isSelected(),this)},setSelected:function(e){BI.SingleSelectItem.superclass.setSelected.apply(this,arguments)},getValue:function(){return this.options.value}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0);t.className="designer.user.account.setting.captcha",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},render:function(){var e=this;this.options;return{type:n.TextButton,text:BI.i18nText("Designer-Login_Code_Request"),cls:"designer-login-border-bottom designer-login-code-text",handler:function(){e.setButtonEnable(!1),e.fireEvent("EVENT_SEND")},ref:function(t){e.getButton=t}}},setButtonEnable:function(e){this.captchaTime&&(e=!1),this.getButton.setEnable(e)},regainCaptcha:function(){var e=this,t=0;window.clearInterval(e.captchaTime),this.captchaTime=window.setInterval((function(){if(60===t)return window.clearInterval(e.captchaTime),e.captchaTime=null,e.getButton.setText(BI.i18nText("Designer-Login_Code_Request")),void e.setButtonEnable(!0);e.getButton.setText(BI.i18nText("Designer-Login_Code_Request_Again")+"("+(60-t)+")"),t++}),1e3),this.setButtonEnable(!1)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0,t.className="designer.login.model.sms_method",t.Model=BI.inherit(Fix.Model,{context:[""],state:function(){return{errMessage:"",isRegister:!1,regToken:""}},actions:{setErrMessage:function(e){this.model.errMessage=e},setRegister:function(e){this.model.isRegister=e},setRegToken:function(e){this.model.regToken=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){}]); \ No newline at end of file +!function(e){var t={};function i(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,i),o.l=!0,o.exports}i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)i.d(n,o,function(t){return e[t]}.bind(null,o));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=4)}([function(e,t,i){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,i,n){n===undefined&&(n=i),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[i]}})}:function(e,t,i,n){n===undefined&&(n=i),e[n]=t[i]}),o=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||t.hasOwnProperty(i)||n(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),o(i(5),t)},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=window.DesignerLoginHelper,o=function(){function e(){}return e.prototype.getParams=function(){return{designerLoginSource:window.designerLoginSource||"0",lastLoginType:window.lastLoginType||"-1",lastLoginAccount:window.lastLoginAccount||""}},e.prototype.closeWindow=function(e){n&&n.closeWindow(e)},e.prototype.serviceHref=function(){n?n.serviceHref():window.open("https://bbs.fanruan.com/thread-102821-1-1.html")},e.prototype.forgetHref=function(){n?n.forgetHref():window.open("https://id.fanruan.com/forget/forget.php?clue=activityf")},e.prototype.normalLogin=function(e,t,i){n?n.normalLogin(e,t,i):i(-1)},e.prototype.sendCaptcha=function(e,t,i){n?n.sendCaptcha(e,t,i):i(-1)},e.prototype.smsLogin=function(e,t,i,o){n?n.smsLogin(e,t,i,o):o(null)},e.prototype.smsRegister=function(e,t,i,o,s){n?n.smsRegister(e,t,i,o,s):s(-1)},e.prototype.resize=function(e,t){n&&n.resize(e,t)},e}();t["default"]=new o},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.BBS_ERROR_CODE=t.NORMAL_LOGIN_RESULT=t.REGION=t.LOGIN=void 0,t.LOGIN={NORMAL_METHOD:"normal",SMS_METHOD:"sms",TABS:{LOGIN:"login",FORGET_PASSWORD:"forget",RESET_PASSWORD:"reset",REGISTER:"register"}},t.REGION=[{value:"+86",text:"Designer-Basic_Chinese_Mainland"},{value:"+886",text:"Designer-Basic_Chinese_Taiwan"},{value:"+852",text:"Designer-Basic_Chinese_Hong_Kong"},{value:"+853",text:"Designer-Basic_Chinese_Macao"},{value:"+90",text:"Designer-Basic_Turkey"},{value:"+82",text:"Designer-Basic_South_Korea"},{value:"+81",text:"Designer-Basic_Japan"},{value:"+65",text:"Designer-Basic_Singapore"},{value:"+60",text:"Designer-Basic_Malaysia"}],t.NORMAL_LOGIN_RESULT=[{status:0,message:"Designer-Login_Internal_Error"},{status:-1,message:"Designer-Login_Store_User_Not_Exist"},{status:-2,message:"Designer-Login_Store_User_Password_Error"},{status:-3,message:"Designer-Login_Unexpected_Error"},{status:-4,message:"Designer-Login_Network_Connected_Failed"}],t.BBS_ERROR_CODE=[{status:0,message:"Designer-Login_Internal_Error"},{status:-1,message:"Designer-BBS_Register_Timeout"},{status:-2,message:"Designer-BBS_Phone_Is_Register"},{status:-3,message:"Designer-BBS_Captcha_Send_Exceed_Limit"},{status:-4,message:"Designer-BBS_Phone_Format_Error"},{status:-100,message:"Designer-BBS_Captcha_Out_Of_Date"},{status:-101,message:"Designer-BBS_Captcha_Try_Exceed_Limit"},{status:-102,message:"Designer-BBS_Captcha_Error"},{status:-104,message:"Designer-BBS_Username_Format_Error"},{status:-103,message:"Designer-BBS_Please_Enter_Correct_Phone"},{status:-105,message:"Designer-BBS_Username_Too_Short"},{status:-106,message:"Designer-BBS_Username_Too_Long"},{status:-107,message:"Designer-BBS_Phone_Is_Register"},{status:-108,message:"Designer-BBS_Username_Is_Register"}]},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getError=void 0,t.getError=function(e,t){var i=BI.find(e,(function(e,i){return i.status===t}));return i&&i.message?i.message:""}},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(0),o=i(6);BI.addI18n(Store.i18n),BI.createWidget({type:n.Vertical,element:"body",items:[{type:o["default"]}]})},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ListView=t.VirtualGroup=t.LeftRightVerticalAdapt=t.Left=t.Horizontal=t.Vertical=t.Absolute=t.Layout=t.Htape=t.CenterAdapt=t.Vtape=t.HorizontalAdapt=t.VerticalAdapt=t.BubbleCombo=t.Img=t.Tab=t.SingleSelectInsertCombo=t.SingleSelectRadioItem=t.MultiTreePopupView=t.Editor=t.NicEditor=t.RichEditor=t.MultiTreeCombo=t.DynamicDateTimeCombo=t.DynamicDateCombo=t.BarPopOver=t.MultiSelectItem=t.TextAreaEditor=t.AllValueChooserCombo=t.ButtonGroup=t.MultiSelectInsertCombo=t.TextEditor=t.Button=t.SignEditor=t.MultiFileEditor=t.SmallTextEditor=t.HtmlLabel=t.Label=t.DownListCombo=t.TextButton=t.IconChangeButton=t.IconButton=t.IconTextIconItem=t.IconTextItem=void 0,t.IconTextItem="bi.icon_text_item",t.IconTextIconItem="bi.icon_text_icon_item",t.IconButton="bi.icon_button",t.IconChangeButton="bi.icon_change_button",t.TextButton="bi.text_button",t.DownListCombo="bi.down_list_combo",t.Label="bi.label",t.HtmlLabel="bi.html_label",t.SmallTextEditor="bi.small_text_editor",t.MultiFileEditor="bi.multifile_editor",t.SignEditor="bi.sign_editor",t.Button="bi.button",t.TextEditor="bi.text_editor",t.MultiSelectInsertCombo="bi.multi_select_insert_combo",t.ButtonGroup="bi.button_group",t.AllValueChooserCombo="bi.all_value_chooser_combo",t.TextAreaEditor="bi.textarea_editor",t.MultiSelectItem="bi.multi_select_item",t.BarPopOver="bi.bar_popover",t.DynamicDateCombo="bi.dynamic_date_combo",t.DynamicDateTimeCombo="bi.dynamic_date_time_combo",t.MultiTreeCombo="bi.multi_tree_combo",t.RichEditor="bi.rich_editor",t.NicEditor="bi.nic_editor",t.Editor="bi.editor",t.MultiTreePopupView="bi.multi_tree_popup_view",t.SingleSelectRadioItem="bi.single_select_radio_item",t.SingleSelectInsertCombo="bi.single_select_insert_combo",t.Tab="bi.tab",t.Img="bi.img",t.BubbleCombo="bi.bubble_combo",t.VerticalAdapt="bi.vertical_adapt",t.HorizontalAdapt="bi.horizontal_adapt",t.Vtape="bi.vtape",t.CenterAdapt="bi.center_adapt",t.Htape="bi.htape",t.Layout="bi.layout",t.Absolute="bi.absolute",t.Vertical="bi.vertical",t.Horizontal="bi.horizontal",t.Left="bi.left",t.LeftRightVerticalAdapt="bi.left_right_vertical_adapt",t.VirtualGroup="bi.virtual_group",t.ListView="bi.list_view"},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(7),s=i(8),r=i(9),a=i(11);i(24),t.className="designer.login.login",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login",width:420},_store:function(){return BI.Models.getModel(o["default"])},watch:{loading:function(e){this.loading.setVisible(e)}},render:function(){return{type:n.Vertical,cls:"designer-login",items:[{el:{type:n.HorizontalAdapt,items:[{type:s["default"],rgap:14,tgap:14}]}},{el:{type:n.Vertical,items:[{type:r["default"]},{type:a["default"]}]},lgap:15,rgap:15,bgap:15}]}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});BI.model("designer.login.login.model",BI.inherit(Fix.Model,{childContext:["loading"],state:function(){return{loading:!1}}})),t["default"]="designer.login.login.model"},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(1);t.className="designer.login.login.close.button",t.Widget=BI.inherit(BI.Widget,{render:function(){return{type:n.TextButton,text:String.fromCharCode(10005),cls:"background-login-close",width:18.38,height:18.38,handler:function(){o["default"].closeWindow(!1)}}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0);i(10),t.className="designer.login.login.title",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-title"},render:function(){return{type:n.Label,text:BI.i18nText("Designer-Login_Title"),cls:"bi-font-bold",bgap:10}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(12);i(13);var s=i(14),r=i(16),a=i(18),l=i(2),u=i(1),g=249.64,c=331.64,d=422,f=478,p=560;t.className="designer.login.login.body",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(o["default"])},watch:{loginMethod:function(e){this.tabOption.setValue(e),this.tab.setSelect(e),this.foot.setLoginMethod(e),this.refreshLoginButton(),e===l.LOGIN.NORMAL_METHOD?(this.tab.setHeight(g),u["default"].resize(d,f)):this.model.expand&&(u["default"].resize(d,p),this.tab.setHeight(c))},approve:function(e){this.refreshLoginButton()},expand:function(e){e&&(u["default"].resize(d,p),this.tab.setHeight(c))}},render:function(){var e=this;return{type:n.Vertical,cls:"designer-login-body",items:[{type:n.ButtonGroup,value:this.model.loginMethod,ref:function(t){e.tabOption=t},layouts:[{type:n.HorizontalAdapt}],items:[{cls:"designer-login-change-mode bi-list-item-effect bi-border-bottom bi-font-bold",width:70,height:28,value:l.LOGIN.SMS_METHOD,text:BI.i18nText("Designer-Login_Sms")},{cls:"designer-login-change-mode bi-list-item-effect bi-border-bottom bi-font-bold",width:70,height:28,value:l.LOGIN.NORMAL_METHOD,text:BI.i18nText("Designer-Login_Normal")}],listeners:[{eventName:BI.ButtonGroup.EVENT_CHANGE,action:function(t){e.store.setLoginMethod(t)}}],tgap:24,lgap:75,rgap:75},{type:n.CenterAdapt,tgap:35,items:[{type:n.Tab,cardCreator:BI.bind(this.createCard,this),showIndex:this.model.loginMethod,ref:function(t){e.tab=t},height:g,width:280}]},{type:s["default"],lgap:50,rgap:50,bgap:30,ref:function(t){e.foot=t},refreshStatus:function(t){e.store.setApprove(t)}}]}},mounted:function(){var e=u["default"].getParams(),t=e.designerLoginSource,i=e.lastLoginType;if("2"===t){var n="0"===i?l.LOGIN.NORMAL_METHOD:l.LOGIN.SMS_METHOD;this.store.setLoginMethod(n)}},createCard:function(e){var t=this;switch(e){case l.LOGIN.NORMAL_METHOD:return{type:r["default"],ref:function(e){t.normalMethod=e}};case l.LOGIN.SMS_METHOD:default:return{type:a["default"],ref:function(e){t.smsMethod=e},expand:function(){t.store.setExpand(!0)}}}},refreshLoginButton:function(){this.model.loginMethod===l.LOGIN.NORMAL_METHOD?this.normalMethod.setApprove(this.model.approve):this.smsMethod.setApprove(this.model.approve)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0;var n=i(2);t.className="designer.login.model.login.body",t.Model=BI.inherit(Fix.Model,{context:["loading"],state:function(){return{loginMethod:n.LOGIN.SMS_METHOD,approve:!0,expand:!1}},actions:{setLoginMethod:function(e){this.model.loginMethod=e},setApprove:function(e){this.model.approve=e},setExpand:function(e){this.model.expand=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(1),o=i(0);i(15);var s=i(2);t.className="designer.login.login.foot",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-foot"},render:function(){var e=this,t=this.options;return{type:o.LeftRightVerticalAdapt,items:{left:[{type:o.MultiSelectItem,width:30,selected:!0,handler:function(){t.refreshStatus(this.isSelected())}},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:BI.i18nText("Designer-Login_I_Have_Read")},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:"《"},{type:o.TextButton,cls:"login-link",textAlign:"left",text:BI.i18nText("Designer-Login_Service_Terms"),handler:function(){n["default"].serviceHref()}},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:"》"}],right:[{type:o.TextButton,cls:"login-link",textAlign:"right",text:BI.i18nText("Designer-Login_Forget_Password"),invisible:!0,ref:function(t){e.forgetPassword=t},handler:function(){n["default"].forgetHref()}}]}}},setLoginMethod:function(e){e===s.LOGIN.NORMAL_METHOD?this.forgetPassword.setVisible(!0):this.forgetPassword.setVisible(!1)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(3),s=i(1),r=i(17),a=i(2);t.className="designer.login.login.normal",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(r["default"])},watch:{errMessage:function(e){this.errMessage.setText(e)}},render:function(){var e=this;return{type:n.Vertical,items:[{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_User_Name"),bgap:3},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-username",watermark:BI.i18nText("Designer-Login_User_Name_Hint"),inputType:"text",allowBlank:!0,height:40,ref:function(t){e.userName=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Password"),bgap:3},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Password_Hint"),inputType:"password",allowBlank:!0,height:40,ref:function(t){e.password=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,cls:"designer-login-error-message",textAlign:"center",text:"",height:20,bgap:10,ref:function(t){e.errMessage=t}},{type:n.Button,cls:"login-login-button bi-font-bold",text:BI.i18nText("Designer-Login"),level:"common",height:40,ref:function(t){e.loginButton=t},handler:function(){e.login()},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]}]}},mounted:function(){var e=this;this.element.keyup((function(t){13===t.keyCode&&e.login()}));var t=s["default"].getParams(),i=t.designerLoginSource,n=t.lastLoginType,o=t.lastLoginAccount;"2"===i&&"0"===n&&e.userName.setValue(o)},checkUsername:function(){var e=this.userName.getValue();e&&this.userName.setValue(e.replace(/\s+/g,""))},login:function(){var e=this;e.checkUsername();var t=this.userName.getValue(),i=this.password.getValue();t?i?s["default"].normalLogin(t,i,(function(t){var i=parseInt(t,10);if(i>0)s["default"].closeWindow(!0);else{var n=o.getError(a.NORMAL_LOGIN_RESULT,i);n&&e.store.setErrMessage(BI.i18nText(n))}})):this.store.setErrMessage(BI.i18nText("Designer-Login_Password_Not_Null")):this.store.setErrMessage(BI.i18nText("Designer-Login_Username_Not_Null"))},setApprove:function(e){this.loginButton.setEnable(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0,t.className="designer.login.model.normal_method",t.Model=BI.inherit(Fix.Model,{context:[""],state:function(){return{errMessage:""}},actions:{setErrMessage:function(e){this.model.errMessage=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(19),s=i(21),r=i(22),a=i(2),l=i(23),u=i(1),g=i(3);t.className="designer.login.login.sms",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(l["default"])},watch:{errMessage:function(e){this.errMessage.setText(e)},isRegister:function(e){var t=this.options;e&&(t.expand(),this.password.setVisible(!0),this.passwordLabel.setVisible(!0))}},render:function(){var e=this,t=this;return{type:n.Vertical,items:[{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Phone"),bgap:3},{type:n.HorizontalAdapt,bgap:7,items:[{type:o["default"],height:42,textFormatter:function(e){var i=t.getNumberTypeItem(e);return{value:i.value,text:BI.i18nText(i.text)}},value:a.REGION[0].value,items:BI.map(a.REGION,(function(e,t){return{type:s["default"],value:t.value,label:BI.i18nText(t.text),text:t.value}})),ref:function(t){e.regionCode=t}},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-username",watermark:BI.i18nText("Designer-Login_Phone_Hint"),inputType:"text",allowBlank:!0,height:40,ref:function(t){e.phone=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Code"),bgap:3},{type:n.Horizontal,bgap:7,items:[{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Code_Hint"),inputType:"text",allowBlank:!0,height:40,width:200,ref:function(t){e.code=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:r["default"],height:40,width:80,ref:function(t){e.accountCaptcha=t},listeners:[{eventName:"EVENT_SEND",action:function(){t.sendCaptcha()}}]}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Password"),bgap:3,invisible:!0,ref:function(t){e.passwordLabel=t}},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Password_Setting_Hint"),inputType:"password",allowBlank:!0,height:40,invisible:!0,ref:function(t){e.password=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,cls:"designer-login-error-message",textAlign:"center",text:"",height:20,bgap:11,ref:function(t){e.errMessage=t}},{type:n.Button,cls:"login-login-button bi-font-bold",text:BI.i18nText("Designer-Login_Register_Or_Login"),level:"common",height:40,ref:function(t){e.loginButton=t},handler:function(){e.login()}}]}},mounted:function(){var e=this;this.element.keyup((function(t){13===t.keyCode&&e.login()}));var t=u["default"].getParams(),i=t.designerLoginSource,n=t.lastLoginType,o=t.lastLoginAccount;if("2"===i&&"1"===n){var s=o.split("-")[0],r=o.split("-")[1];e.regionCode.setValue(s),e.phone.setValue(r)}},getNumberTypeItem:function(e){return BI.find(a.REGION,(function(t,i){return e===i.value}))||{}},checkPhone:function(){var e=this.phone.getValue();e&&this.phone.setValue(e.replace(/\s+/g,""))},login:function(){var e=this,t=this;t.checkPhone();var i=this.phone.getValue(),n=this.code.getValue();if(i)if(n){var o=this.regionCode.getValue();if(this.model.isRegister){var s=this.password.getValue();if(!s)return void this.store.setErrMessage(BI.i18nText("Designer-Login_Password_Not_Null"));var r=this.model.regToken;if(!r)return void this.store.setErrMessage(BI.i18nText("Designer-Login_Token_Request_Failed"));u["default"].smsRegister(o,i,s,r,(function(e){var i=parseInt(e,10);if(i>0)u["default"].closeWindow(!0);else{var n=g.getError(a.BBS_ERROR_CODE,i);n&&t.store.setErrMessage(BI.i18nText(n))}}))}else u["default"].smsLogin(o,i,n,(function(i){var n=JSON.parse(i);if(n.status>0)if(!0===n.register){var o=n.regtoken;o?(t.store.setRegister(!0),t.store.setRegToken(o)):e.store.setErrMessage(BI.i18nText("Designer-Login_Token_Request_Failed"))}else u["default"].closeWindow(!0);else{var s=g.getError(a.BBS_ERROR_CODE,n.status);s&&t.store.setErrMessage(BI.i18nText(s))}}))}else this.store.setErrMessage(BI.i18nText("Designer-Login_Code_Not_Null"));else this.store.setErrMessage(BI.i18nText("Designer-Login_Phone_Not_Null"))},sendCaptcha:function(){var e=this;e.checkPhone();var t=this.phone.getValue();if(!t)return e.accountCaptcha.setButtonEnable(!0),void this.store.setErrMessage(BI.i18nText("Designer-Login_Phone_Not_Null"));var i=this.regionCode.getValue();u["default"].sendCaptcha(i,t,(function(t){var i=parseInt(t,10);if(1===i)e.accountCaptcha.regainCaptcha();else{e.accountCaptcha.setButtonEnable(!0);var n=g.getError(a.BBS_ERROR_CODE,i);n&&e.store.setErrMessage(BI.i18nText(n))}}))},setApprove:function(e){this.loginButton.setEnable(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(20);t.className="designer.left_right_text_value_combo",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"",height:24,chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,textFormatter:function(e){return e},value:""},render:function(){var e=this,t=this.options;return{type:"bi.combo",container:t.container,adjustLength:2,ref:function(t){e.combo=t},el:{type:n["default"],cls:"text-value-trigger",items:t.items,height:t.height-2,value:t.textFormatter(t.value),ref:function(t){e.trigger=t}},popup:{el:{type:"bi.text_value_combo_popup",chooseType:t.chooseType,value:t.value,items:t.items,ref:function(t){e.popup=t},listeners:[{eventName:BI.TextValueComboPopup.EVENT_CHANGE,action:function(){e.setValue(e.getValue()),e.combo.hideView(),e.fireEvent("EVENT_CHANGE",arguments)}},{eventName:BI.Controller.EVENT_CHANGE,action:function(){e.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}}]},value:t.value,maxHeight:240,minHeight:25}}},setValue:function(e){this.combo.setValue(e),this.trigger.setValue(this.options.textFormatter(e))},getValue:function(){var e=this.combo.getValue();return BI.isNull(e)?"":BI.isArray(e)?e[0]:e},populate:function(e){this.options.items=e,this.combo.populate(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0,t.className="designer.left_right_text_value_combo_trigger",t.Widget=BI.inherit(BI.Trigger,{props:{baseCls:"",value:{}},render:function(){var e=this,t=this.options,i=t.value;return{type:"bi.htape",cls:"bi-border-bottom bi-border-radius",items:[{type:"bi.label",text:i.text,title:function(){return e.textRow.getText()},height:t.height,hgap:3,textAlign:"left",ref:function(t){e.textRow=t}},{type:"bi.label",text:i.value,height:t.height,width:32,textAlign:"right",ref:function(t){e.valueRow=t}},{type:"bi.trigger_icon_button",width:t.triggerWidth||t.height}]}},setValue:function(e){this.textRow.setText(e.text),this.valueRow.setText(e.value)},setText:function(e){this.textRow.setText(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0,t.className="designer.components.phone.editor.item",t.Widget=BI.inherit(BI.BasicButton,{props:{baseCls:"designer-login-login-body",label:"",text:""},render:function(){var e=this.options;return{type:"bi.htape",items:[{el:{type:"bi.label",text:e.label,title:e.label,textAlign:"left"},lgap:10,rgap:5},{el:{type:"bi.label",text:e.text,textAlign:"right"},width:32,rgap:10}]}},doClick:function(){BI.SingleSelectItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent("EVENT_CHANGE",this.isSelected(),this)},setSelected:function(e){BI.SingleSelectItem.superclass.setSelected.apply(this,arguments)},getValue:function(){return this.options.value}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0);t.className="designer.user.account.setting.captcha",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},render:function(){var e=this;this.options;return{type:n.TextButton,text:BI.i18nText("Designer-Login_Code_Request"),cls:"designer-login-border-bottom designer-login-code-text",handler:function(){e.setButtonEnable(!1),e.fireEvent("EVENT_SEND")},ref:function(t){e.getButton=t}}},setButtonEnable:function(e){this.captchaTime&&(e=!1),this.getButton.setEnable(e)},regainCaptcha:function(){var e=this,t=0;window.clearInterval(e.captchaTime),this.captchaTime=window.setInterval((function(){if(60===t)return window.clearInterval(e.captchaTime),e.captchaTime=null,e.getButton.setText(BI.i18nText("Designer-Login_Code_Request")),void e.setButtonEnable(!0);e.getButton.setText(BI.i18nText("Designer-Login_Code_Request_Again")+"("+(60-t)+")"),t++}),1e3),this.setButtonEnable(!1)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0,t.className="designer.login.model.sms_method",t.Model=BI.inherit(Fix.Model,{context:[""],state:function(){return{errMessage:"",isRegister:!1,regToken:""}},actions:{setErrMessage:function(e){this.model.errMessage=e},setRegister:function(e){this.model.isRegister=e},setRegToken:function(e){this.model.regToken=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){}]); \ No newline at end of file diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java index 4b5c9c0cb5..b8cb0e6788 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/OnlineWidgetBlock.java @@ -1,14 +1,15 @@ package com.fr.design.mainframe.share.ui.block; import com.fr.base.iofile.attr.SharableAttrMark; -import com.fr.config.MarketConfig; +import com.fr.design.DesignerEnvManager; import com.fr.design.base.mode.DesignModeContext; import com.fr.design.designer.creator.XCreator; -import com.fr.design.extra.WebViewDlgHelper; import com.fr.design.form.util.XCreatorConstants; import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.login.DesignerLoginHelper; +import com.fr.design.login.DesignerLoginSource; import com.fr.design.mainframe.WidgetToolBarPane; import com.fr.design.mainframe.share.collect.ComponentCollector; import com.fr.form.share.group.DefaultShareGroup; @@ -156,9 +157,9 @@ public class OnlineWidgetBlock extends AbstractOnlineWidgetBlock { final WidgetDownloadProcess process = new WidgetDownloadProcess(); downloading = true; process.process(0.0D); - String userName = MarketConfig.getInstance().getBbsUsername(); + String userName = DesignerEnvManager.getEnvManager().getDesignerLoginUsername(); if (StringUtils.isEmpty(userName)) { - WebViewDlgHelper.createLoginDialog(); + DesignerLoginHelper.showLoginDialog(DesignerLoginSource.NORMAL); downloading = false; return; } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/ActiveKeyGenerator.java b/designer-realize/src/main/java/com/fr/design/mainframe/ActiveKeyGenerator.java index 8b6c3ce4ce..68496a76b6 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/ActiveKeyGenerator.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/ActiveKeyGenerator.java @@ -1,5 +1,4 @@ package com.fr.design.mainframe; -import com.fr.config.MarketConfig; import com.fr.design.DesignerEnvManager; import com.fr.general.CloudCenter; import com.fr.general.http.HttpClient; @@ -101,7 +100,7 @@ public class ActiveKeyGenerator { HashMap para = new HashMap(); para.put("uuid", envManager.getUUID()); para.put("key", key); - para.put("username", MarketConfig.getInstance().getBbsUsername()); + para.put("username", DesignerEnvManager.getEnvManager().getDesignerLoginUsername()); HttpClient hc = new HttpClient(CloudCenter.getInstance().acquireUrlByKind("verify.code"), para); if (timeout != -1) { hc.setTimeout(timeout); diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java index acfcdb4d35..c708960d7e 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java @@ -1,7 +1,6 @@ package com.fr.design.mainframe.alphafine.component; import com.bulenkov.iconloader.IconLoader; -import com.fr.config.MarketConfig; import com.fr.design.DesignerEnvManager; import com.fr.design.actions.help.alphafine.AlphaFineConfigManager; import com.fr.design.dialog.UIDialog; @@ -952,7 +951,7 @@ public class AlphaFineDialog extends UIDialog { */ private void sendDataToServer(String searchKey, AlphaCellModel cellModel) { if (cellModel.isNeedToSendToServer()) { - String username = MarketConfig.getInstance().getBbsUsername(); + String username = DesignerEnvManager.getEnvManager().getDesignerLoginUsername(); String uuid = DesignerEnvManager.getEnvManager().getUUID(); String activityKey = DesignerEnvManager.getEnvManager().getActivationKey(); String createTime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(Calendar.getInstance().getTime()); diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoLabel.java b/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoLabel.java index d166dada77..4e25381e1f 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoLabel.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoLabel.java @@ -5,6 +5,7 @@ package com.fr.design.mainframe.bbs; import com.fr.design.DesignerEnvManager; import com.fr.design.bbs.BBSLoginUtils; +import com.fr.design.constants.UIConstants; import com.fr.design.extra.LoginContextListener; import com.fr.design.extra.UserLoginContext; import com.fr.design.gui.ilable.UILabel; @@ -30,6 +31,7 @@ import com.fr.general.locale.LocaleMark; import com.fr.log.FineLoggerFactory; import com.fr.stable.EncodeConstants; import com.fr.stable.StringUtils; +import java.awt.Color; import javax.swing.SwingConstants; import java.awt.Cursor; import java.awt.Desktop; @@ -78,6 +80,12 @@ public class UserInfoLabel extends UILabel { @Override public void mouseEntered(MouseEvent e) { UserInfoLabel.this.setCursor(new Cursor(Cursor.HAND_CURSOR)); + UserInfoLabel.this.setBackground(UIConstants.DESIGNER_LOGIN_BACKGROUND_ONCLICK); + } + + @Override + public void mouseExited(MouseEvent e) { + UserInfoLabel.this.setBackground(UIConstants.DESIGNER_LOGIN_BACKGROUND); } @Override diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoPane.java index c0169fc09d..1e3df83df4 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoPane.java @@ -90,7 +90,7 @@ public class UserInfoPane extends BasicPane { * 标志未登录状态, 面板设置为灰色 */ public void markUnSignIn() { - this.userInfoLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Designer_Login_Now")); + this.userInfoLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Designer_Login_Onclick")); this.userInfoLabel.setForeground(Color.WHITE); this.userInfoLabel.setOpaque(true); this.userInfoLabel.setBackground(UN_LOGIN_BACKGROUND); diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java index 358672d232..09bf17d95b 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java @@ -1,6 +1,5 @@ package com.fr.design.mainframe.messagecollect.entity; -import com.fr.config.MarketConfig; import com.fr.design.DesignerEnvManager; import com.fr.general.CloudClient; import com.fr.general.IOUtils; @@ -103,7 +102,7 @@ public class FileEntityBuilder { CloudClient client = CloudClient.getInstance(); String today = new JDateTime().toString("YYYY-MM-DD"); String filePath = FOCUS_POINT_FILE_ROOT_PATH + CoreConstants.SEPARATOR + today + CoreConstants.SEPARATOR + keyFileName; - String bbsUserName = MarketConfig.getInstance().getBbsUsername(); + String bbsUserName = DesignerEnvManager.getEnvManager().getDesignerLoginUsername(); String uuid = DesignerEnvManager.getEnvManager().getUUID(); String name = StringUtils.isEmpty(bbsUserName) ? uuid : bbsUserName; diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareLoginLabel.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareLoginLabel.java index 14ad32415e..47612c8509 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareLoginLabel.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareLoginLabel.java @@ -1,6 +1,6 @@ package com.fr.design.share.ui.generate; -import com.fr.config.MarketConfig; +import com.fr.design.DesignerEnvManager; import com.fr.design.gui.ilable.UILabel; import com.fr.design.mainframe.bbs.UserInfoPane; import com.fr.stable.StringUtils; @@ -35,7 +35,7 @@ public class ShareLoginLabel extends UILabel { private void tryGetLogin() { - String bbsUsername = MarketConfig.getInstance().getBbsUsername(); + String bbsUsername = DesignerEnvManager.getEnvManager().getDesignerLoginUsername(); if (StringUtils.isNotEmpty(bbsUsername)) { vendorPane.remove(unLoginLabel); loginLabel.setText(bbsUsername); diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java index 504d95be95..df1d2c04ba 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java @@ -1,12 +1,11 @@ package com.fr.design.share.ui.generate; -import com.fr.config.MarketConfig; +import com.fr.design.DesignerEnvManager; import com.fr.design.constants.LayoutConstants; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.dialog.FineJOptionPane; import com.fr.design.extra.LoginWebBridge; -import com.fr.design.extra.WebViewDlgHelper; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.icombobox.UIComboBox; @@ -18,6 +17,8 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.login.DesignerLoginHelper; +import com.fr.design.login.DesignerLoginSource; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.share.constants.ComponentType; import com.fr.design.mainframe.share.constants.ComponentTypes; @@ -43,6 +44,7 @@ import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; import com.fr.stable.collections.combination.Pair; import com.fr.stable.pinyin.PinyinHelper; +import java.util.HashMap; import org.jetbrains.annotations.NotNull; import javax.swing.BorderFactory; @@ -419,7 +421,7 @@ public class ShareMainPane extends JPanel { final JPanel vendorPane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); - String bbsUsername = MarketConfig.getInstance().getBbsUsername(); + String bbsUsername = DesignerEnvManager.getEnvManager().getDesignerLoginUsername(); if (StringUtils.isEmpty(bbsUsername)) { UILabel unLoginLabel = ShareUIUtils.createHyperlinkLabel(Toolkit.i18nText("Fine-Design_Share_Click_Login")); @@ -431,7 +433,7 @@ public class ShareMainPane extends JPanel { LoginWebBridge.getHelper().setUILabel(hidden); Dialog shareDialog = ShareDialogUtils.getInstance().getShareDialog(); //必须这样创建,不然窗口优先级不对 - WebViewDlgHelper.createLoginDialog(shareDialog); + DesignerLoginHelper.showLoginDialog(DesignerLoginSource.NORMAL, new HashMap<>(), shareDialog); } }); vendorPane.add(unLoginLabel); diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java index 303f655e4f..1232cd400e 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java @@ -415,11 +415,11 @@ public class DesignerActivator extends Activator implements Prepare { } private static void storePassport() { - FinePassportManager.getInstance().storePassport(MarketConfig.getInstance().getBbsUsername(), DesignerEnvManager.getEnvManager().getActivationKey()); + FinePassportManager.getInstance().storePassport(DesignerEnvManager.getEnvManager().getDesignerLoginUsername(), DesignerEnvManager.getEnvManager().getActivationKey()); FinePassportManager.getInstance().addPassportListener(new FinePassportListenerAdapter() { @Override public void onLoginSuccess() { - FinePassportManager.getInstance().storePassport(MarketConfig.getInstance().getBbsUsername(), DesignerEnvManager.getEnvManager().getActivationKey()); + FinePassportManager.getInstance().storePassport(DesignerEnvManager.getEnvManager().getDesignerLoginUsername(), DesignerEnvManager.getEnvManager().getActivationKey()); } }); } From 4b2f2d51d8e60ea395c21472fecee26e21c0dae0 Mon Sep 17 00:00:00 2001 From: hades Date: Tue, 8 Jun 2021 10:18:28 +0800 Subject: [PATCH 082/148] =?UTF-8?q?REPORT-53398=20=E3=80=90=E6=99=BA?= =?UTF-8?q?=E8=83=BD=E8=81=94=E5=8A=A8=E3=80=91=E7=BB=84=E4=BB=B6=E6=8B=96?= =?UTF-8?q?=E5=85=A5=E6=97=B6=EF=BC=8Ctab2=E5=86=85=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E5=88=B0=E7=BB=84=E4=BB=B6=E5=90=8D=E7=9A=84=E5=9C=B0=E6=96=B9?= =?UTF-8?q?=EF=BC=8C=E6=9B=BF=E6=8D=A2=E5=90=8D=E7=A7=B0=E6=9C=89=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/designer/beans/models/ModelUtil.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/designer-form/src/main/java/com/fr/design/designer/beans/models/ModelUtil.java b/designer-form/src/main/java/com/fr/design/designer/beans/models/ModelUtil.java index 10e672f58b..0f75896e1b 100644 --- a/designer-form/src/main/java/com/fr/design/designer/beans/models/ModelUtil.java +++ b/designer-form/src/main/java/com/fr/design/designer/beans/models/ModelUtil.java @@ -32,6 +32,8 @@ abstract class ModelUtil { //直接遍历出来目标值,然后按需处理 xCreator.traversalNameRelatedXCreators(nameRelatedCreators); Map renameMap = new HashMap<>(); + // 避免与旧名称重复 + initDuplicated(nameRelatedCreators, duplicated); for (XCreator target : nameRelatedCreators) { String uniqueName = uniqueName(form, target, duplicated); String oldName = target.toData().getWidgetName(); @@ -42,6 +44,12 @@ abstract class ModelUtil { } EventDispatcher.fire(WidgetNameModifyEvent.INSTANCE, new ContentChangeItem(renameMap, xCreator.toData(), ChangeItem.WIDGET_NAME)); } + + private static void initDuplicated(Set nameRelatedCreators, Set duplicated) { + for (XCreator xCreator : nameRelatedCreators) { + duplicated.add(xCreator.toData().getWidgetName()); + } + } private static String uniqueName(Form form, XCreator xCreator, Set duplicated) { From eeb3ad9ce3593882f1d1a67a7b91e34e4f8fbb84 Mon Sep 17 00:00:00 2001 From: "Bruce.Deng" Date: Tue, 8 Jun 2021 10:22:16 +0800 Subject: [PATCH 083/148] =?UTF-8?q?REPORT-53351=20=E5=A4=8D=E5=88=B6?= =?UTF-8?q?=E4=BC=A0=E5=8F=82=E5=90=8Esql-=E5=8F=82=E6=95=B0=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA=E6=97=B6=E7=9A=84=E6=98=BE=E7=A4=BA=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E4=B8=8D=E5=AF=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../preview/sql/PreviewPerformedSqlPane.java | 54 +++++++------------ 1 file changed, 20 insertions(+), 34 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java index 2800e6f759..938c49f9a4 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java @@ -107,11 +107,11 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener { topPanel.add(imagePanel, BorderLayout.WEST); topPanel.add(messagePanel, BorderLayout.CENTER); - topPanel.setBorder(BorderFactory.createEmptyBorder(10,10,0,10)); + topPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 10)); //中间的SQL面板 centerPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); - centerPanel.setBorder(BorderFactory.createEmptyBorder(0,10,10,10)); + centerPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10)); JScrollPane scrollPane = new JScrollPane(); JTextArea checkArea = new JTextArea(sql); checkArea.setEditable(false); @@ -135,7 +135,7 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener { UIButton okButton = new UIButton(Toolkit.i18nText("Fine-Design_Report_OK")); okButton.addActionListener(this); bottomPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); - bottomPanel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); + bottomPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); bottomPanel.add(okButton, BorderLayout.EAST); this.setTitle(Toolkit.i18nText("Fine-Design_Basic_Preview_Performed_Sql")); @@ -167,42 +167,28 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener { parameterMap.put(parameter.getName(), parameter.getValue()); } } - boolean showOriginSql = true; - for (ParameterProvider parameter : DataOperator.getInstance().getTableDataParameters(tableData)) { - if (parameterMap.containsKey(parameter.getName())) { - Object value = parameterMap.get(parameter.getName()); - if (value != null && !StringUtils.EMPTY.equals(value)) { - showOriginSql = false; - } - parameter.setValue(value); - } - } String sql; // 计算高亮文本位置 List specialCharParamIndex = null; boolean highlight = true; - if (showOriginSql) { - sql = tableData.getQuery(); - } else { - NameSpace ns = ParameterMapNameSpace.create(parameterMap); - calculator.pushNameSpace(ns); - Parameter[] paras = processParameters(tableData, calculator); - // 所有被转义参数的集合 - Set specialCharParam = EscapeSqlHelper.getInstance().getSpecialCharParam(paras); - // 将参数转义等 - Set tableDataProviders = getTableDataProviders(); - for (TableDataProvider provider : tableDataProviders) { - provider.processParametersBeforeAnalyzeSQL(paras, calculator); - } + NameSpace ns = ParameterMapNameSpace.create(parameterMap); + calculator.pushNameSpace(ns); + Parameter[] paras = processParameters(tableData, calculator); + // 所有被转义参数的集合 + Set specialCharParam = EscapeSqlHelper.getInstance().getSpecialCharParam(paras); + // 将参数转义等 + Set tableDataProviders = getTableDataProviders(); + for (TableDataProvider provider : tableDataProviders) { + provider.processParametersBeforeAnalyzeSQL(paras, calculator); + } - if (!specialCharParam.isEmpty()) { - specialCharParamIndex = ParameterHelper.analyzeCurrentContextTableData4Template(tableData.getQuery(), paras, specialCharParam); - } - String oldSql = ParameterHelper.analyzeCurrentContextTableData4Templatee(tableData.getQuery(), paras); - sql = processExtraSQL(paras, oldSql, calculator, tableDataProviders); - if (!StringUtils.equals(oldSql, sql)) { - highlight = false; - } + if (!specialCharParam.isEmpty()) { + specialCharParamIndex = ParameterHelper.analyzeCurrentContextTableData4Template(tableData.getQuery(), paras, specialCharParam); + } + String oldSql = ParameterHelper.analyzeCurrentContextTableData4Templatee(tableData.getQuery(), paras); + sql = processExtraSQL(paras, oldSql, calculator, tableDataProviders); + if (!StringUtils.equals(oldSql, sql)) { + highlight = false; } // sql内容复制到剪切板 StringSelection selection = new StringSelection(sql); From 0afe612090338c0feed70fc5e8acce2924afc564 Mon Sep 17 00:00:00 2001 From: hades Date: Tue, 8 Jun 2021 13:56:47 +0800 Subject: [PATCH 084/148] =?UTF-8?q?KERNEL-7634=20=E4=BE=9D=E8=B5=96?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/ui/ModernUIConstants.java | 6 +++--- .../fr/design/ui/compatible/NxInterceptRequestCallback.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/ui/ModernUIConstants.java b/designer-base/src/main/java/com/fr/design/ui/ModernUIConstants.java index ed6fb542e9..8f7bf07034 100644 --- a/designer-base/src/main/java/com/fr/design/ui/ModernUIConstants.java +++ b/designer-base/src/main/java/com/fr/design/ui/ModernUIConstants.java @@ -7,9 +7,9 @@ import com.fr.general.IOUtils; * @version 10.0 * Created by richie on 2019-03-05 */ -class ModernUIConstants { +public class ModernUIConstants { - static final String SCRIPT_INIT_NAME_SPACE = IOUtils.readResourceAsString("/com/fr/design/ui/InitNameSpace.js"); + public static final String SCRIPT_INIT_NAME_SPACE = IOUtils.readResourceAsString("/com/fr/design/ui/InitNameSpace.js"); - static final String HTML_TPL = IOUtils.readResourceAsString("/com/fr/design/ui/tpl.html"); + public static final String HTML_TPL = IOUtils.readResourceAsString("/com/fr/design/ui/tpl.html"); } diff --git a/designer-base/src/main/java/com/fr/design/ui/compatible/NxInterceptRequestCallback.java b/designer-base/src/main/java/com/fr/design/ui/compatible/NxInterceptRequestCallback.java index 5ec0ff4339..7b4977e77b 100644 --- a/designer-base/src/main/java/com/fr/design/ui/compatible/NxInterceptRequestCallback.java +++ b/designer-base/src/main/java/com/fr/design/ui/compatible/NxInterceptRequestCallback.java @@ -124,7 +124,7 @@ public class NxInterceptRequestCallback implements InterceptRequestCallback { if (path.endsWith(".gif")) { return "image/gif"; } - Path file = new File("D:\\Fanruan\\FR10.0\\final_05_27\\FineReport_10.0\\webapps\\webroot\\upm\\lib\\locale\\plugin_zh_CN.js").toPath(); + Path file = new File(path).toPath(); try { return Files.probeContentType(file); } catch (IOException e) { From a92a5c82d8c6781f13a4c3105ceb871c5b962dfe Mon Sep 17 00:00:00 2001 From: kerry Date: Tue, 8 Jun 2021 14:09:53 +0800 Subject: [PATCH 085/148] =?UTF-8?q?REPORT-53365=20&&=20REPORT-53310=20?= =?UTF-8?q?=E4=BA=A4=E4=BA=92=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/gui/controlpane/UIListGroupControlPane.java | 9 +++++++++ .../com/fr/design/mainframe/CellWidgetPropertyPane.java | 6 ++++++ 2 files changed, 15 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListGroupControlPane.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListGroupControlPane.java index bb7fee0a36..dbc71fe1af 100644 --- a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListGroupControlPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListGroupControlPane.java @@ -107,6 +107,15 @@ public abstract class UIListGroupControlPane extends UIControlPane implements L contentPane.add(wrapperPane); nameEdListMap.put(event, wrapperPane); } + contentPane.addMouseListener(new MouseAdapter() { + @Override + public void mousePressed(MouseEvent e) { + super.mousePressed(e); + if (selectNameEdList != null) { + selectNameEdList.stopEditing(); + } + } + }); } protected void populateNameObjects(Widget widget) { diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/CellWidgetPropertyPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/CellWidgetPropertyPane.java index 246bb72aa8..0ddfdd3d7d 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/CellWidgetPropertyPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/CellWidgetPropertyPane.java @@ -106,6 +106,9 @@ public class CellWidgetPropertyPane extends BasicPane { final CellSelection finalCS = (CellSelection) ePane.getSelection(); final TemplateElementCase tplEC = ePane.getEditingElementCase(); final Widget cellWidget = cellEditorDefPane.update(); + if(cellWidget == null){ + return; + } if (finalCS.isSelectedOneCell(ePane)) { if (tplEC.getTemplateCellElement(cellElement.getColumn(), cellElement.getRow()) == null) {//cellElement未加入到report中时要添加进去 tplEC.addCellElement(cellElement); @@ -141,6 +144,9 @@ public class CellWidgetPropertyPane extends BasicPane { final CellSelection finalCS = (CellSelection) selection; final TemplateElementCase tplEC = ePane.getEditingElementCase(); final Widget cellWidget = cellEditorDefPane.update(); + if(cellWidget == null){ + return; + } if(finalCS.isSelectedOneCell(ePane)){ if(tplEC.getTemplateCellElement(cellElement.getColumn(), cellElement.getRow())== null){//cellElement未加入到report中时要添加进去 tplEC.addCellElement(cellElement); From 58364c9503b34452927a5603858f99dc2e786186 Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Tue, 8 Jun 2021 14:46:24 +0800 Subject: [PATCH 086/148] =?UTF-8?q?REPORT-53592=20=E6=89=A9=E5=B1=95?= =?UTF-8?q?=E5=9B=BE=E8=A1=A8=E5=88=9B=E5=BB=BA=E5=85=B1=E4=BA=AB=E7=BB=84?= =?UTF-8?q?=E4=BB=B6npe=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/share/effect/EffectItemGroup.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/share/effect/EffectItemGroup.java b/designer-realize/src/main/java/com/fr/design/share/effect/EffectItemGroup.java index a07478c9d9..91d842c61e 100644 --- a/designer-realize/src/main/java/com/fr/design/share/effect/EffectItemGroup.java +++ b/designer-realize/src/main/java/com/fr/design/share/effect/EffectItemGroup.java @@ -111,8 +111,11 @@ public class EffectItemGroup { ChartCollection chartCollection = (ChartCollection) value; for (int index = 0; index < chartCollection.getChartCount(); index++) { Chart chart= (Chart) chartCollection.getChart(index, ChartProvider.class); - SourceNode chartSourceNode = SourceNodeUtils.createSourceNode(chart.getPlot(), chartCollection.getChartName(index), cellSourceNode); Plot plot = chart.getPlot(); + if (plot == null) { + break; + } + SourceNode chartSourceNode = SourceNodeUtils.createSourceNode(plot, chartCollection.getChartName(index), cellSourceNode); initChartPlot(plot, chartSourceNode, false); } @@ -126,8 +129,11 @@ public class EffectItemGroup { ChartCollection chartCollection = (ChartCollection) editor.getChartCollection(); for (int index = 0; index < chartCollection.getChartCount(); index++) { Chart chart= (Chart) chartCollection.getChart(index, ChartProvider.class); - SourceNode plotSourceNode = SourceNodeUtils.createSourceNode(chart.getPlot(), chartCollection.getChartName(index), null); Plot plot = chart.getPlot(); + if (plot == null) { + break; + } + SourceNode plotSourceNode = SourceNodeUtils.createSourceNode(plot, chartCollection.getChartName(index), null); initChartPlot(plot, plotSourceNode, false); } From be9a0b313f4cb7fef6e0b35bc2531b17a6a86ff4 Mon Sep 17 00:00:00 2001 From: "Bruce.Deng" Date: Tue, 8 Jun 2021 15:06:41 +0800 Subject: [PATCH 087/148] =?UTF-8?q?REPORT-53351=20=E5=A4=8D=E5=88=B6?= =?UTF-8?q?=E4=BC=A0=E5=8F=82=E5=90=8Esql-=E5=8F=82=E6=95=B0=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA=E6=97=B6=E7=9A=84=E6=98=BE=E7=A4=BA=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E4=B8=8D=E5=AF=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/datapane/preview/sql/PreviewPerformedSqlPane.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java index 938c49f9a4..bf210380bc 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java @@ -167,6 +167,11 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener { parameterMap.put(parameter.getName(), parameter.getValue()); } } + for (ParameterProvider parameter : DataOperator.getInstance().getTableDataParameters(tableData)) { + if (parameterMap.containsKey(parameter.getName())) { + parameter.setValue(parameterMap.get(parameter.getName())); + } + } String sql; // 计算高亮文本位置 List specialCharParamIndex = null; From 7edab03d094468cb90ded27c6a86e793f7ad6588 Mon Sep 17 00:00:00 2001 From: pengda Date: Tue, 8 Jun 2021 15:36:53 +0800 Subject: [PATCH 088/148] =?UTF-8?q?REPORT-53601=20&=20REPORT-53614=20=20?= =?UTF-8?q?=E7=BB=93=E6=9E=9C=E6=96=87=E6=9C=AC=E6=A1=86=E6=A1=86=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E4=B8=8D=E5=8F=AF=E7=BC=96=E8=BE=91=E3=80=82=E8=BF=9B?= =?UTF-8?q?=E5=BA=A6=E6=9D=A1=E6=9B=B4=E6=96=B0=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/env/CheckServiceDialog.java | 59 ++++++++++--------- .../com/fr/env/SyncFailedPluginsDialog.java | 1 + 2 files changed, 32 insertions(+), 28 deletions(-) diff --git a/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java b/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java index 3a46126992..062b20acdc 100644 --- a/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java +++ b/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java @@ -40,7 +40,6 @@ import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.File; import java.util.List; -import java.util.concurrent.ExecutionException; import javax.swing.BorderFactory; import javax.swing.Icon; import javax.swing.JDialog; @@ -155,7 +154,7 @@ public class CheckServiceDialog extends JDialog implements ActionListener { detailsComponents = new Component[][]{{jarCheckTitleLabel}, {jarCheckResultLabel}, {affectedFunctionsLabel}, {affectedFunctionsDetailsPane}, {pluginCheckTitleLabel}, {pluginsCheckResultPanel}}; hideAffectedFunctionsComponents = new Component[][]{{jarCheckTitleLabel}, {jarCheckResultLabel}, {affectedFunctionsLabel}, {pluginCheckTitleLabel}, {pluginsCheckResultPanel}}; if (noExistServiceDescription.size() > 0 && !ComparatorUtils.equals(remoteBranch, localBranch)) { - detailsRowSize = new double[]{p, p, p, p,p,p}; + detailsRowSize = new double[]{p, p, p, p, p, p}; detailsInnerPane = TableLayoutHelper.createTableLayoutPane(detailsComponents, detailsRowSize, detailsColumnSize); } else { detailsRowSize = new double[]{p, p, 0, 0, p, p}; @@ -330,32 +329,36 @@ public class CheckServiceDialog extends JDialog implements ActionListener { @Override public void onDownloadSuccess() { deleteForDesignerUpdate(installLib); - //主jar下载成功之后再卸载安装插件 - progressBar.setString(Toolkit.i18nText("Fine-Design_Basic_Sync_Plugins")); - progressBar.setValue(0); - new SwingWorker() { - - @Override - protected JSONArray doInBackground() { - return VersionCheckUtils.syncPlugins(differentPlugins); - } - - @Override - protected void done() { - progressBar.setVisible(false); - JSONArray syncFailedPlugins = null; - try { - syncFailedPlugins = get(); - } catch (Exception ex) { - FineLoggerFactory.getLogger().error(ex.getMessage(), ex); + if (differentPlugins.size() > 0) { + //主jar下载成功之后再卸载安装插件 + new SwingWorker() { + + @Override + protected JSONArray doInBackground() { + progressBar.setString(Toolkit.i18nText("Fine-Design_Basic_Sync_Plugins")); + progressBar.setValue(0); + return VersionCheckUtils.syncPlugins(differentPlugins); } - if (syncFailedPlugins != null && syncFailedPlugins.size() > 0) { - SyncFailedPluginsDialog syncFailedPluginsDialog = new SyncFailedPluginsDialog(DesignerContext.getDesignerFrame(), syncFailedPlugins); - syncFailedPluginsDialog.setVisible(true); + + @Override + protected void done() { + progressBar.setVisible(false); + JSONArray syncFailedPlugins = null; + try { + syncFailedPlugins = get(); + } catch (Exception ex) { + FineLoggerFactory.getLogger().error(ex.getMessage(), ex); + } + if (syncFailedPlugins != null && syncFailedPlugins.size() > 0) { + SyncFailedPluginsDialog syncFailedPluginsDialog = new SyncFailedPluginsDialog(DesignerContext.getDesignerFrame(), syncFailedPlugins); + syncFailedPluginsDialog.setVisible(true); + } + helper.restartForUpdate(frame); } - helper.restartForUpdate(frame); - } - }.execute(); + }.execute(); + } else { + helper.restartForUpdate(frame); + } } @Override @@ -369,12 +372,12 @@ public class CheckServiceDialog extends JDialog implements ActionListener { }.execute(); } else { //到这边说明主jar是一致的,就只尝试同步插件 - progressBar.setString(Toolkit.i18nText("Fine-Design_Basic_Sync_Plugins")); - progressBar.setValue(0); new SwingWorker() { @Override protected JSONArray doInBackground() { + progressBar.setString(Toolkit.i18nText("Fine-Design_Basic_Sync_Plugins")); + progressBar.setValue(0); return VersionCheckUtils.syncPlugins(differentPlugins); } diff --git a/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java b/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java index b9046e1535..9bf63460da 100644 --- a/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java +++ b/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java @@ -77,6 +77,7 @@ public class SyncFailedPluginsDialog extends JDialog { detailsText.append(plugin.getString("name")).append(",").append(Toolkit.i18nText("Fine-Design_Basic_Sync_Server_Version")).append(plugin.getString("version")).append("\n"); } detailsTextArea.setText(detailsText.toString()); + detailsTextArea.setEditable(false); scrollPane = new JScrollPane(detailsTextArea); centerPanel.add(detailsTitlePanel,BorderLayout.NORTH); centerPanel.add(scrollPane,BorderLayout.CENTER); From 9c51640be0cd67477df803d0ff7fb61319de6e79 Mon Sep 17 00:00:00 2001 From: kerry Date: Tue, 8 Jun 2021 17:02:45 +0800 Subject: [PATCH 089/148] =?UTF-8?q?=E8=A7=86=E8=A7=89=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/gui/controlpane/UIListGroupControlPane.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListGroupControlPane.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListGroupControlPane.java index dbc71fe1af..384d2bb524 100644 --- a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListGroupControlPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListGroupControlPane.java @@ -482,7 +482,7 @@ public abstract class UIListGroupControlPane extends UIControlPane implements L UILabel label = new UILabel(labelText + getWrapperLabelText()) { @Override public void paint(Graphics g) { - ((Graphics2D) g).setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.7f)); + ((Graphics2D) g).setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.8f)); super.paint(g); } }; @@ -490,7 +490,7 @@ public abstract class UIListGroupControlPane extends UIControlPane implements L label.setOpaque(true); label.setBackground(Color.WHITE); label.setForeground(Color.decode("#333334")); - label.setFont(label.getFont().deriveFont(10F)); + label.setFont(label.getFont().deriveFont(11F)); label.setPreferredSize(new Dimension(224, 26)); this.nameEdList = nameEdList; this.add(label, BorderLayout.NORTH); From a8596d7e27fd6b5f7ea4dc61c7ca111e8fa35b87 Mon Sep 17 00:00:00 2001 From: hades Date: Tue, 8 Jun 2021 17:17:42 +0800 Subject: [PATCH 090/148] =?UTF-8?q?REPORT-53135=20=E3=80=90=E6=99=BA?= =?UTF-8?q?=E8=83=BD=E8=81=94=E5=8A=A8=E3=80=91=E7=BB=84=E4=BB=B6=E7=94=9F?= =?UTF-8?q?=E6=88=90=E6=97=B6=EF=BC=8C=E6=B2=A1=E6=9C=89=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=96=87=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mod/ContentObjectManager.java | 28 +++++++++++++++++++ .../com/fr/design/mod/ContentReplaceUtil.java | 8 ++++++ .../com/fr/design/mod/ContentReplacer.java | 5 ++++ .../repalce/JavaScriptContentReplacer.java | 4 +++ .../VanChartHtmlLabelContentReplacer.java | 5 ++++ .../share/ui/generate/ShareGeneratePane.java | 26 +++++++++++++++-- .../share/ui/generate/ShareMainPane.java | 13 +++++++-- 7 files changed, 85 insertions(+), 4 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java b/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java index b70ea88b0a..0111f7836f 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java @@ -9,6 +9,8 @@ import com.fr.data.SimpleDSColumn; import com.fr.data.condition.FormulaCondition; import com.fr.data.impl.FormulaDictionary; import com.fr.data.impl.NameTableData; +import com.fr.design.mod.impl.repalce.JavaScriptContentReplacer; +import com.fr.design.mod.impl.repalce.VanChartHtmlLabelContentReplacer; import com.fr.form.main.FormHyperlink; import com.fr.form.ui.CardSwitchButton; import com.fr.form.ui.WidgetTitle; @@ -22,6 +24,7 @@ import com.fr.report.cell.cellattr.core.group.DSColumn; import com.fr.report.cell.cellattr.core.group.FunctionGrouper; import com.fr.report.cell.cellattr.core.group.SelectCount; import com.fr.stable.Filter; +import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -49,6 +52,8 @@ public class ContentObjectManager { private final Set set = new HashSet<>(); + private final Map map = new HashMap<>(); + private ContentObjectManager() { set.add(Formula.class.getName()); set.add(JavaScriptImpl.class.getName()); @@ -70,6 +75,8 @@ public class ContentObjectManager { set.add(SelectCount.class.getName()); set.add(WidgetTitle.class.getName()); set.add(FunctionGrouper.class.getName()); + map.put(JavaScriptImpl.class.getName(), new JavaScriptContentReplacer()); + map.put(VanChartHtmlLabel.class.getName(), new VanChartHtmlLabelContentReplacer()); } public void searchObject(Object ob) { @@ -84,6 +91,9 @@ public class ContentObjectManager { objectMap = ClassHelper.searchObject(ob, set, filter); } public void clearObject() { + if (objectMap != null) { + objectMap.clear(); + } objectMap = null; } @@ -92,4 +102,22 @@ public class ContentObjectManager { return objectMap; } + public boolean needContentTip(Object ob, Set nameSet) { + long start = System.currentTimeMillis(); + objectMap = ClassHelper.searchObject(ob, set, ModClassFilter.getInstance()); + for (Map.Entry> entry : objectMap.entrySet()) { + for (Object o : entry.getValue()) { + for (String name : nameSet) { + ContentReplacer contentReplacer = map.get(entry.getKey()); + if (contentReplacer!= null && contentReplacer.contain(o, name)) { + clearObject(); + return true; + } + } + } + } + clearObject(); + return false; + } + } diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java b/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java index 1d8e73e840..3b7d9e7715 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java @@ -77,6 +77,7 @@ public class ContentReplaceUtil { content = getFormulaPureContent(content); FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); frFormulaTransformer.addRenamedWidget(oldName, newName); + frFormulaTransformer.addRenamedParameter(oldName, newName); return EQ_STRING + frFormulaTransformer.transform(content); } @@ -168,5 +169,12 @@ public class ContentReplaceUtil { return content; } + public static boolean containsName(String content, String name) { + if (StringUtils.isNotEmpty(content)) { + return content.contains(name); + } + return false; + } + } diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentReplacer.java b/designer-base/src/main/java/com/fr/design/mod/ContentReplacer.java index 3f71265354..a9d54b6a40 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentReplacer.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentReplacer.java @@ -10,4 +10,9 @@ public interface ContentReplacer { void replace(T t, String oldName, String newName); + + default boolean contain(T t, String name) { + return false; + } + } diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/JavaScriptContentReplacer.java b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/JavaScriptContentReplacer.java index 118f1b79ce..763b0b4a06 100644 --- a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/JavaScriptContentReplacer.java +++ b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/JavaScriptContentReplacer.java @@ -19,4 +19,8 @@ public class JavaScriptContentReplacer implements ContentReplacer xCreators = new HashSet<>(); + xCreator.traversalNameRelatedXCreators(xCreators); + Set nameSet = new HashSet<>(); + for (XCreator creator : xCreators) { + nameSet.add(creator.toData().getWidgetName()); + } + boolean result = ContentObjectManager.getInstance().needContentTip(shareWidget, nameSet); + FineLoggerFactory.getLogger().debug("needContentTip spend {} ms", (System.currentTimeMillis() - start)); + return result; + } + private JPanel createUploadCheckBox() { JPanel panel = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java index df1d2c04ba..a4fc73fbe7 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareMainPane.java @@ -131,13 +131,15 @@ public class ShareMainPane extends JPanel { private boolean upload; private List effectItemGroups; + private final boolean needContentTip; - public ShareMainPane(Image shareCover, Rectangle rec, boolean upload, List effectItemGroups) { + public ShareMainPane(Image shareCover, Rectangle rec, boolean upload, List effectItemGroups, boolean needContentTip) { this.shareCover = shareCover; this.rec = rec; this.upload = upload; this.effectItemGroups = effectItemGroups; + this.needContentTip = needContentTip; initCover(shareCover); this.setLayout(FRGUIPaneFactory.createBorderLayout()); @@ -174,7 +176,14 @@ public class ShareMainPane extends JPanel { private JPanel createOverviewPane(boolean upload) { JPanel componentPane = createComponentOverviewPane(upload); String title = Toolkit.i18nText("Fine-Design_Share_Overview"); - JPanel overviewPane = FRGUIPaneFactory.createTitledBorderPane(title); + JPanel overviewPane = FRGUIPaneFactory.createTopVerticalTitledBorderPane(title); + if (needContentTip) { + UILabel tipsLabel = ShareUIUtils.createTipsLabel(Toolkit.i18nText("Fine-Design_Share_Generate_Content_Tip")); + tipsLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); + JPanel panel = new JPanel(FRGUIPaneFactory.createBorderLayout()); + panel.add(tipsLabel); + overviewPane.add(panel, BorderLayout.NORTH); + } overviewPane.add(componentPane, BorderLayout.CENTER); return overviewPane; From 77076eae38ad4eff198b29a3ffb9b265830f4b16 Mon Sep 17 00:00:00 2001 From: hades Date: Tue, 8 Jun 2021 17:19:23 +0800 Subject: [PATCH 091/148] =?UTF-8?q?REPORT-53135=20=E6=BC=8F=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/mod/ContentReplaceUtil.java | 1 - 1 file changed, 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java b/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java index 3b7d9e7715..f2afd5d8da 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java @@ -77,7 +77,6 @@ public class ContentReplaceUtil { content = getFormulaPureContent(content); FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); frFormulaTransformer.addRenamedWidget(oldName, newName); - frFormulaTransformer.addRenamedParameter(oldName, newName); return EQ_STRING + frFormulaTransformer.transform(content); } From 59d5958c8cc39df0bd7182ea0f39ab7b6e06d89f Mon Sep 17 00:00:00 2001 From: kerry Date: Tue, 8 Jun 2021 18:54:16 +0800 Subject: [PATCH 092/148] =?UTF-8?q?REPORT-53133=20=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=A4=8D=E7=94=A8-=E5=90=88=E5=85=A5=E4=B8=BB=E7=89=88?= =?UTF-8?q?=E6=9C=AC-=E6=9C=89=E4=BF=A9=E5=95=86=E5=9F=8E=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E4=B8=8B=E6=9D=A5=E7=9A=84=E5=A4=8D=E7=94=A8=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E6=8B=96=E5=85=A5=E5=90=8E=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E6=A0=91=E5=A4=84=E6=B2=A1=E6=98=BE=E7=A4=BA=E5=A4=8D=E7=94=A8?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E7=9A=84=E5=9B=BE=E6=A0=87=EF=BC=8C=E9=BA=BB?= =?UTF-8?q?=E7=83=A6=E7=9C=8B=E4=B8=8B=E6=98=AF=E8=BF=99=E4=BF=A9=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E7=BB=93=E6=9E=84=E6=9C=89=E5=95=A5=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E5=98=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/designer/creator/XWTitleLayout.java | 17 ++++++++++++++++- .../treeview/ComponentTreeCellRenderer.java | 14 ++------------ .../share/util/ShareComponentUtils.java | 14 ++++++++++++++ 3 files changed, 32 insertions(+), 13 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XWTitleLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/XWTitleLayout.java index 7401b5ede0..bfa841a4a5 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XWTitleLayout.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XWTitleLayout.java @@ -112,6 +112,21 @@ public class XWTitleLayout extends DedicateLayoutContainer { return null; } + + /** + * 返回body组件 + * @return body组件 + */ + public XCreator getBodyCreator() { + for (int i=0; i < getXCreatorCount(); i++) { + XCreator creator = getXCreator(i); + if (creator.hasTitleStyle()) { + return creator; + } + } + return null; + } + /** * 编辑状态的时候需要重新绘制下边框 * @@ -196,4 +211,4 @@ public class XWTitleLayout extends DedicateLayoutContainer { super.setShareId(shareId); this.getEditingChildCreator().setShareId(shareId); } -} \ No newline at end of file +} diff --git a/designer-form/src/main/java/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java b/designer-form/src/main/java/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java index f310adc42f..e3b9b81750 100644 --- a/designer-form/src/main/java/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java +++ b/designer-form/src/main/java/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java @@ -1,13 +1,11 @@ package com.fr.design.designer.treeview; import com.fr.base.BaseUtils; -import com.fr.base.iofile.attr.ExtendSharableAttrMark; import com.fr.design.constants.UIConstants; import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XCreatorUtils; -import com.fr.form.ui.AbstractBorderStyleWidget; +import com.fr.design.mainframe.share.util.ShareComponentUtils; import com.fr.log.FineLoggerFactory; -import com.fr.stable.StringUtils; import javax.swing.BorderFactory; import javax.swing.Icon; @@ -38,7 +36,7 @@ public class ComponentTreeCellRenderer extends DefaultTreeCellRenderer { } if (icon != null) { setIcon(icon); - this.needAddShareIcon = isShareWidget((XCreator) value); + this.needAddShareIcon = ShareComponentUtils.isShareWidgetWithChild((XCreator) value); } } @@ -47,14 +45,6 @@ public class ComponentTreeCellRenderer extends DefaultTreeCellRenderer { return this; } - private boolean isShareWidget(XCreator xCreator) { - if (!xCreator.toData().acceptType(AbstractBorderStyleWidget.class)) { - return false; - } - ExtendSharableAttrMark attrMark = ((AbstractBorderStyleWidget) xCreator.toData()).getWidgetAttrMark(ExtendSharableAttrMark.XML_TAG); - return attrMark != null && StringUtils.isNotEmpty(attrMark.getShareId()); - - } public void paint(Graphics g) { super.paint(g); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareComponentUtils.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareComponentUtils.java index 485c44149b..80162a4065 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareComponentUtils.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/ShareComponentUtils.java @@ -5,6 +5,7 @@ import com.fr.base.iofile.attr.ExtendSharableAttrMark; import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XCreatorUtils; import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.designer.creator.XWTitleLayout; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.FormSelection; @@ -91,6 +92,19 @@ public class ShareComponentUtils { return false; } + public static boolean isShareWidgetWithChild(XCreator xCreator) { + boolean result = isShareWidget(xCreator); + if (result) { + return true; + } + //做下兼容处理,老的组件结构的共享信息存储在子组件上 + if (xCreator instanceof XWTitleLayout) { + XCreator child = ((XWTitleLayout) xCreator).getBodyCreator(); + return isShareWidget(child); + } + return false; + } + public static List getHelpConfigXCreatorList(XCreator root) { List helpConfigXCreatorList = new ArrayList<>(); From ed8b36a8ad5c15234bef9a3cc8d307d6f87bed89 Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Tue, 8 Jun 2021 19:06:47 +0800 Subject: [PATCH 093/148] =?UTF-8?q?REPORT-52539=20window=E4=B8=8A=E7=94=9F?= =?UTF-8?q?=E6=88=90=E9=9D=A2=E6=9D=BF=E5=87=BA=E7=8E=B0=E4=BA=86=E6=BB=9A?= =?UTF-8?q?=E5=8A=A8=E6=9D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/share/ui/generate/EffectContent.java | 4 ++-- .../com/fr/design/share/ui/generate/ShareGeneratePane.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/EffectContent.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/EffectContent.java index 4fef5f51a4..0eeda7731c 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/generate/EffectContent.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/EffectContent.java @@ -56,8 +56,8 @@ public class EffectContent extends JPanel { Object[] columnNames = {com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Share_From"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Share_Rename")}; JTable table = new JTable(new EffectTableModel(effectItemGroup, columnNames)); table.setRowHeight(25); - table.getColumnModel().getColumn(0).setPreferredWidth(235); - table.getColumnModel().getColumn(1).setPreferredWidth(325); + table.getColumnModel().getColumn(0).setPreferredWidth(230); + table.getColumnModel().getColumn(1).setPreferredWidth(320); table.setDefaultEditor(EffectTableModel.class, new EffectItemEditor(table)); diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareGeneratePane.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareGeneratePane.java index 82eb60f08a..3ba8bb8e6c 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareGeneratePane.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/ShareGeneratePane.java @@ -56,7 +56,7 @@ import static javax.swing.JOptionPane.ERROR_MESSAGE; **/ public class ShareGeneratePane extends BasicPane { - private static final Dimension DIALOG_SIZE = new Dimension(670, 740); + private static final Dimension DIALOG_SIZE = new Dimension(670, 760); private static final Dimension DIALOG_NORMAL_SIZE = new Dimension(670, 610); private static final Border DIALOG_BORDER = BorderFactory.createEmptyBorder(0, 6, 4, 6); From 70e34c211787f3029517c03e31d1cf1561762cc6 Mon Sep 17 00:00:00 2001 From: "Bruce.Deng" Date: Tue, 8 Jun 2021 19:44:39 +0800 Subject: [PATCH 094/148] =?UTF-8?q?REPORT-53367=20=E5=A4=8D=E5=88=B6?= =?UTF-8?q?=E4=BC=A0=E5=8F=82=E5=90=8Esql-=E8=BF=9C=E7=A8=8B=E4=B8=8B?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9E=E7=9A=84=E8=BD=AC=E4=B9=89=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=E6=8F=90=E7=A4=BA=E5=A4=B1=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/datapane/preview/sql/PreviewPerformedSqlPane.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java index bf210380bc..7f75d4d3a1 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java @@ -6,6 +6,7 @@ import com.fr.base.ParameterMapNameSpace; import com.fr.data.impl.DBTableData; import com.fr.data.impl.EscapeSqlHelper; import com.fr.data.operator.DataOperator; +import com.fr.decision.config.PreventSqlInjConfig; import com.fr.decision.webservice.v10.config.ConfigService; import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.dialog.link.MessageWithLink; @@ -18,6 +19,7 @@ import com.fr.design.parameter.ParameterInputPane; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.CloudCenter; import com.fr.general.GeneralContext; +import com.fr.invoke.Reflect; import com.fr.log.FineLoggerFactory; import com.fr.plugin.injectable.PluginModule; import com.fr.script.Calculator; @@ -180,6 +182,10 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener { calculator.pushNameSpace(ns); Parameter[] paras = processParameters(tableData, calculator); // 所有被转义参数的集合 + //这里比较恶心。方法1是通过在DataOperatorProvider新增rpc接口,交由服务器去获取转义字符。但是要考虑兼容问题: + //新设计器jar远程老服务器jar,需要提供Compatible实现,但是这个实现能做什么呢?目前没有老的接口可以去获取服务器的转义字符,仍然啥也做不了; + //现在采用方法2,通过反射调用PreventSqlInjConfig的刷新方法(因为这个方法是private,直接改成public仍然有兼容问题) + Reflect.on(PreventSqlInjConfig.class).call("refreshPreventSqlInjConfig"); Set specialCharParam = EscapeSqlHelper.getInstance().getSpecialCharParam(paras); // 将参数转义等 Set tableDataProviders = getTableDataProviders(); From d8dc68e440fb24f8680d77c2a1a2e9484e67e7cb Mon Sep 17 00:00:00 2001 From: "Bruce.Deng" Date: Tue, 8 Jun 2021 19:50:26 +0800 Subject: [PATCH 095/148] =?UTF-8?q?REPORT-53367=20=E5=A4=8D=E5=88=B6?= =?UTF-8?q?=E4=BC=A0=E5=8F=82=E5=90=8Esql-=E8=BF=9C=E7=A8=8B=E4=B8=8B?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9E=E7=9A=84=E8=BD=AC=E4=B9=89=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=E6=8F=90=E7=A4=BA=E5=A4=B1=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/datapane/preview/sql/PreviewPerformedSqlPane.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java index 7f75d4d3a1..d86b6ad6cd 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java @@ -182,9 +182,10 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener { calculator.pushNameSpace(ns); Parameter[] paras = processParameters(tableData, calculator); // 所有被转义参数的集合 - //这里比较恶心。方法1是通过在DataOperatorProvider新增rpc接口,交由服务器去获取转义字符。但是要考虑兼容问题: - //新设计器jar远程老服务器jar,需要提供Compatible实现,但是这个实现能做什么呢?目前没有老的接口可以去获取服务器的转义字符,仍然啥也做不了; - //现在采用方法2,通过反射调用PreventSqlInjConfig的刷新方法(因为这个方法是private,直接改成public仍然有兼容问题) + // 远程时如何获取服务器上的转义字符?这里比较恶心 + // 方法1是新增rpc接口,交由服务器去获取转义字符。但是要考虑兼容问题: + // 新设计器jar远程老服务器jar,需要提供Compatible实现,但是这个实现能做什么呢?目前没有老的接口可以去获取服务器的转义字符,仍然啥也做不了; + // 现在采用方法2,通过反射调用PreventSqlInjConfig的刷新方法(因为它是decision模块的private方法,直接改成public仍然有兼容问题) Reflect.on(PreventSqlInjConfig.class).call("refreshPreventSqlInjConfig"); Set specialCharParam = EscapeSqlHelper.getInstance().getSpecialCharParam(paras); // 将参数转义等 From 310eb160bdce1a6ee58817ba7bd6cf05bcb356da Mon Sep 17 00:00:00 2001 From: "Bruce.Deng" Date: Tue, 8 Jun 2021 20:10:02 +0800 Subject: [PATCH 096/148] =?UTF-8?q?REPORT-53362=20=E5=A4=8D=E5=88=B6?= =?UTF-8?q?=E4=BC=A0=E5=8F=82=E5=90=8Esql-=E9=BC=A0=E6=A0=87=E6=82=AC?= =?UTF-8?q?=E6=B5=AE=E6=9F=A5=E7=9C=8B=E8=AE=BE=E8=AE=A1=E5=99=A8=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF=EF=BC=8C=E4=BC=9A=E5=A4=9A=E5=87=BA=E6=9D=A5=E6=9F=A5?= =?UTF-8?q?=E7=9C=8B=E6=89=A7=E8=A1=8Csql=E7=9A=84=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../preview/sql/PreviewPerformedSqlPane.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java index d86b6ad6cd..8ddf261cfd 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java @@ -48,6 +48,8 @@ import java.awt.Frame; import java.awt.datatransfer.StringSelection; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -146,6 +148,12 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener { this.add(centerPanel, BorderLayout.CENTER); this.add(bottomPanel, BorderLayout.SOUTH); this.setSize(600, 400); + this.addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + close(); + } + }); GUICoreUtils.centerWindow(this); } @@ -272,4 +280,8 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener { public void actionPerformed(ActionEvent e) { this.dispose(); } + + private void close() { + this.dispose(); + } } From 3af622275391f496956161d41650569a460a6299 Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Wed, 9 Jun 2021 09:23:02 +0800 Subject: [PATCH 097/148] =?UTF-8?q?REPORT-53592=20=E6=89=A9=E5=B1=95?= =?UTF-8?q?=E5=9B=BE=E8=A1=A8=E5=88=9B=E5=BB=BA=E5=85=B1=E4=BA=AB=E7=BB=84?= =?UTF-8?q?=E4=BB=B6npe=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/share/effect/EffectItemGroup.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/share/effect/EffectItemGroup.java b/designer-realize/src/main/java/com/fr/design/share/effect/EffectItemGroup.java index 91d842c61e..c04932d0d7 100644 --- a/designer-realize/src/main/java/com/fr/design/share/effect/EffectItemGroup.java +++ b/designer-realize/src/main/java/com/fr/design/share/effect/EffectItemGroup.java @@ -113,7 +113,7 @@ public class EffectItemGroup { Chart chart= (Chart) chartCollection.getChart(index, ChartProvider.class); Plot plot = chart.getPlot(); if (plot == null) { - break; + continue; } SourceNode chartSourceNode = SourceNodeUtils.createSourceNode(plot, chartCollection.getChartName(index), cellSourceNode); initChartPlot(plot, chartSourceNode, false); @@ -131,7 +131,7 @@ public class EffectItemGroup { Chart chart= (Chart) chartCollection.getChart(index, ChartProvider.class); Plot plot = chart.getPlot(); if (plot == null) { - break; + continue; } SourceNode plotSourceNode = SourceNodeUtils.createSourceNode(plot, chartCollection.getChartName(index), null); initChartPlot(plot, plotSourceNode, false); From a64ace980a9d3abe02fc42e2c02cdfcc37a60279 Mon Sep 17 00:00:00 2001 From: hades Date: Wed, 9 Jun 2021 11:25:16 +0800 Subject: [PATCH 098/148] =?UTF-8?q?REPORT-53157=20=E5=80=BC=E4=B8=80?= =?UTF-8?q?=E6=A0=B7=20=E5=AF=B9=E8=B1=A1=E5=9C=B0=E5=9D=80=E4=B8=8D?= =?UTF-8?q?=E4=B8=80=E6=A0=B7=E7=9A=84=E5=AF=B9=E8=B1=A1=E5=90=8C=E6=A0=B7?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E8=A2=AB=E8=BF=94=E5=9B=9E=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mod/ContentObjectManager.java | 8 ++++---- .../java/com/fr/design/mod/ContentReplacerCenter.java | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java b/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java index 0111f7836f..6c8a123fd9 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java @@ -24,6 +24,7 @@ import com.fr.report.cell.cellattr.core.group.DSColumn; import com.fr.report.cell.cellattr.core.group.FunctionGrouper; import com.fr.report.cell.cellattr.core.group.SelectCount; import com.fr.stable.Filter; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -48,7 +49,7 @@ public class ContentObjectManager { /** * 放置所有需要替换内容的对象 */ - private Map> objectMap; + private Map> objectMap; private final Set set = new HashSet<>(); @@ -98,14 +99,13 @@ public class ContentObjectManager { } @Nullable - public Map> getObjectMap() { + public Map> getObjectMap() { return objectMap; } public boolean needContentTip(Object ob, Set nameSet) { - long start = System.currentTimeMillis(); objectMap = ClassHelper.searchObject(ob, set, ModClassFilter.getInstance()); - for (Map.Entry> entry : objectMap.entrySet()) { + for (Map.Entry> entry : objectMap.entrySet()) { for (Object o : entry.getValue()) { for (String name : nameSet) { ContentReplacer contentReplacer = map.get(entry.getKey()); diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java b/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java index cccc08c9af..7440895a8b 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java @@ -29,9 +29,9 @@ import com.fr.event.EventDispatcher; import com.fr.event.Listener; import com.fr.log.FineLoggerFactory; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.Set; /** * 默认联动内容替换器实现 @@ -106,14 +106,14 @@ public class ContentReplacerCenter { } private void onRename(List contentChangeItemList, List contentChangeList) { - Map> objectMap = ContentObjectManager.getInstance().getObjectMap(); + Map> objectMap = ContentObjectManager.getInstance().getObjectMap(); if (objectMap != null) { long start = System.currentTimeMillis(); for (ContentChange contentChange : contentChangeList) { - Set set = objectMap.get(contentChange.type()); + Collection objects = objectMap.get(contentChange.type()); // 所有需要处理的js等对象 - if (set != null) { - for (Object ob : set) { + if (objects != null) { + for (Object ob : objects) { fireChange(ob, contentChange, contentChangeItemList); } } From b351e0129862cb9cb034958906ffcf721c78c9a3 Mon Sep 17 00:00:00 2001 From: pengda Date: Wed, 9 Jun 2021 11:45:02 +0800 Subject: [PATCH 099/148] =?UTF-8?q?REPORT-53601=20&=20REPORT-53614=20=20?= =?UTF-8?q?=E7=BB=93=E6=9E=9C=E6=96=87=E6=9C=AC=E6=A1=86=E6=A1=86=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E4=B8=8D=E5=8F=AF=E7=BC=96=E8=BE=91=E3=80=82=E8=BF=9B?= =?UTF-8?q?=E5=BA=A6=E6=9D=A1=E6=9B=B4=E6=96=B0=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/EnvChangeEntrance.java | 3 +- .../update/actions/SyncFileProcess.java | 19 ++++++-- .../{ => versioncheck}/VersionCheckUtils.java | 23 ++++++---- .../java/com/fr/env/CheckServiceDialog.java | 45 +++++-------------- .../com/fr/env/VersionCheckMessageDialog.java | 2 +- .../module/DesignerWorkspaceProvider.java | 2 +- 6 files changed, 43 insertions(+), 51 deletions(-) rename designer-base/src/main/java/com/fr/design/{ => versioncheck}/VersionCheckUtils.java (94%) diff --git a/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java b/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java index c5a4a7dd2e..4ab6b30896 100644 --- a/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java +++ b/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java @@ -18,11 +18,10 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; import com.fr.design.utils.DesignUtils; -import com.fr.env.CheckServiceDialog; +import com.fr.design.versioncheck.VersionCheckUtils; import com.fr.env.EnvListPane; import com.fr.env.RemoteWorkspaceURL; import com.fr.env.TestConnectionResult; -import com.fr.env.VersionCheckMessageDialog; import com.fr.exit.DesignerExiter; import com.fr.general.ComparatorUtils; import com.fr.general.GeneralUtils; diff --git a/designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java b/designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java index 1614d1084c..b41d099cbb 100644 --- a/designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java +++ b/designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java @@ -2,22 +2,33 @@ package com.fr.design.update.actions; import com.fr.decision.update.SyncExecutor; import com.fr.decision.update.info.UpdateCallBack; +import com.fr.decision.update.info.UpdateProgressCallBack; +import com.fr.design.i18n.Toolkit; +import com.fr.design.versioncheck.VersionCheckUtils; import com.fr.log.FineLoggerFactory; import java.util.concurrent.ExecutionException; +import javax.swing.JProgressBar; import javax.swing.SwingWorker; public abstract class SyncFileProcess extends SwingWorker { - private UpdateCallBack callBack; private String buildNo; + private JProgressBar bar; - public SyncFileProcess(UpdateCallBack callBack,String buildNo) { - this.callBack = callBack; + public SyncFileProcess(JProgressBar bar, String buildNo) { + this.bar = bar; this.buildNo = buildNo; } @Override protected Boolean doInBackground() throws Exception { - return SyncExecutor.getInstance().execute(callBack,buildNo); + UpdateCallBack callBack = new UpdateProgressCallBack(bar); + boolean result = SyncExecutor.getInstance().execute(callBack, buildNo); + if (result) { + bar.setValue(0); + bar.setString(Toolkit.i18nText("Fine-Design_Basic_Sync_Plugins")); + VersionCheckUtils.syncPlugins(VersionCheckUtils.checkLocalAndRemotePlugin()); + } + return SyncExecutor.getInstance().execute(callBack, buildNo); } @Override diff --git a/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java b/designer-base/src/main/java/com/fr/design/versioncheck/VersionCheckUtils.java similarity index 94% rename from designer-base/src/main/java/com/fr/design/VersionCheckUtils.java rename to designer-base/src/main/java/com/fr/design/versioncheck/VersionCheckUtils.java index 17dcd51a13..11780409a7 100644 --- a/designer-base/src/main/java/com/fr/design/VersionCheckUtils.java +++ b/designer-base/src/main/java/com/fr/design/versioncheck/VersionCheckUtils.java @@ -1,11 +1,14 @@ -package com.fr.design; +package com.fr.design.versioncheck; import com.fr.base.FRContext; +import com.fr.design.DesignerEnvManager; +import com.fr.design.dialog.NotificationDialog; import com.fr.design.env.DesignerWorkspaceInfo; import com.fr.design.env.DesignerWorkspaceType; import com.fr.design.env.RemoteWorkspace; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerContext; +import com.fr.env.CheckServiceDialog; import com.fr.env.VersionCheckMessageDialog; import com.fr.general.ComparatorUtils; import com.fr.general.GeneralUtils; @@ -30,6 +33,9 @@ import com.fr.workspace.engine.base.FineObjectPool; import com.fr.workspace.engine.channel.http.FunctionalHttpRequest; import com.fr.workspace.engine.exception.WorkspaceConnectionException; import com.fr.workspace.engine.rpc.WorkspaceProxyPool; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; import java.lang.reflect.Method; import java.text.ParsePosition; import java.text.SimpleDateFormat; @@ -226,21 +232,21 @@ public class VersionCheckUtils { } remotePlugin.put("type", INCONSISTENCY); } - } - remotePlugin.put("type", MISSING); - if (remotePlugin.getString(NAME) == null) { - remotePlugin.put(NAME, remotePlugin.getString("id")); + } else { + remotePlugin.put("type", MISSING); + if (remotePlugin.getString(NAME) == null) { + remotePlugin.put(NAME, remotePlugin.getString("id")); + } } differentPlugins.put(remotePlugin); } return differentPlugins; } - public static JSONArray syncPlugins(JSONArray differentPlugins) { + public static void syncPlugins(JSONArray differentPlugins) { Set uninstallFailed = uninstallPlugins(differentPlugins); List plugins = getSyncPlugins(differentPlugins, uninstallFailed); installPlugins(plugins); - return getPluginsSyncFailed(differentPlugins); } private static List getSyncPlugins(JSONArray differentPlugins, Set uninstallFailed) { @@ -296,7 +302,7 @@ public class VersionCheckUtils { return uninstallFailedID; } - private static JSONArray getPluginsSyncFailed(JSONArray differentPlugins){ + public static JSONArray getPluginsSyncFailed(JSONArray differentPlugins){ JSONArray pluginsNeedSync = JSONArray.create(); List localPlugins = PluginManager.getContexts(); Map localPluginsInfo = new HashMap<>(); @@ -326,6 +332,7 @@ public class VersionCheckUtils { @Override public void done(PluginTaskResult result) { latch.countDown(); + FineLoggerFactory.getLogger().info("installPlugin: " + result.getCurrentTask().getMarker().getPluginID()); } }); } diff --git a/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java b/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java index 062b20acdc..7e9e74ebcf 100644 --- a/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java +++ b/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java @@ -1,10 +1,7 @@ package com.fr.env; import com.fr.decision.update.data.UpdateConstants; -import com.fr.decision.update.info.UpdateCallBack; -import com.fr.decision.update.info.UpdateProgressCallBack; import com.fr.design.RestartHelper; -import com.fr.design.VersionCheckUtils; import com.fr.design.dialog.FineJOptionPane; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; @@ -15,6 +12,7 @@ import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; import com.fr.design.update.actions.SyncFileProcess; import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.design.versioncheck.VersionCheckUtils; import com.fr.general.CloudCenter; import com.fr.general.CloudCenterConfig; import com.fr.general.ComparatorUtils; @@ -315,7 +313,6 @@ public class CheckServiceDialog extends JDialog implements ActionListener { Toolkit.i18nText("Fine-Design_Basic_Confirm"), JOptionPane.YES_NO_OPTION, QUESTION_MESSAGE, IOUtils.readIcon("com/fr/design/icon/versioncheck/question.png"), option, 1); if (0 == a) { //jar包一致的话只更新插件 - UpdateCallBack callBack = new UpdateProgressCallBack(progressBar); progressBar.setVisible(true); progressBar.setString(Toolkit.i18nText("Fine-Design_Update_Info_Wait_Message")); syncButton.setEnabled(false); @@ -325,40 +322,17 @@ public class CheckServiceDialog extends JDialog implements ActionListener { final JFrame frame = DesignerContext.getDesignerFrame(); final RestartHelper helper = new RestartHelper(); FineProcessContext.getParentPipe().fire(FineProcessEngineEvent.DESTROY); - new SyncFileProcess(callBack, remoteBuildNo) { + new SyncFileProcess(progressBar, remoteBuildNo) { @Override public void onDownloadSuccess() { deleteForDesignerUpdate(installLib); - if (differentPlugins.size() > 0) { - //主jar下载成功之后再卸载安装插件 - new SwingWorker() { - - @Override - protected JSONArray doInBackground() { - progressBar.setString(Toolkit.i18nText("Fine-Design_Basic_Sync_Plugins")); - progressBar.setValue(0); - return VersionCheckUtils.syncPlugins(differentPlugins); - } - - @Override - protected void done() { - progressBar.setVisible(false); - JSONArray syncFailedPlugins = null; - try { - syncFailedPlugins = get(); - } catch (Exception ex) { - FineLoggerFactory.getLogger().error(ex.getMessage(), ex); - } - if (syncFailedPlugins != null && syncFailedPlugins.size() > 0) { - SyncFailedPluginsDialog syncFailedPluginsDialog = new SyncFailedPluginsDialog(DesignerContext.getDesignerFrame(), syncFailedPlugins); - syncFailedPluginsDialog.setVisible(true); - } - helper.restartForUpdate(frame); - } - }.execute(); - } else { - helper.restartForUpdate(frame); + progressBar.setVisible(false); + JSONArray syncFailedPlugins = VersionCheckUtils.getPluginsSyncFailed(differentPlugins); + if (syncFailedPlugins.size() > 0) { + SyncFailedPluginsDialog syncFailedPluginsDialog = new SyncFailedPluginsDialog(DesignerContext.getDesignerFrame(), syncFailedPlugins); + syncFailedPluginsDialog.setVisible(true); } + helper.restartForUpdate(frame); } @Override @@ -378,7 +352,8 @@ public class CheckServiceDialog extends JDialog implements ActionListener { protected JSONArray doInBackground() { progressBar.setString(Toolkit.i18nText("Fine-Design_Basic_Sync_Plugins")); progressBar.setValue(0); - return VersionCheckUtils.syncPlugins(differentPlugins); + VersionCheckUtils.syncPlugins(differentPlugins); + return VersionCheckUtils.getPluginsSyncFailed(differentPlugins); } @Override diff --git a/designer-base/src/main/java/com/fr/env/VersionCheckMessageDialog.java b/designer-base/src/main/java/com/fr/env/VersionCheckMessageDialog.java index 657b13e0a3..5fd4c9ec09 100644 --- a/designer-base/src/main/java/com/fr/env/VersionCheckMessageDialog.java +++ b/designer-base/src/main/java/com/fr/env/VersionCheckMessageDialog.java @@ -1,6 +1,6 @@ package com.fr.env; -import com.fr.design.VersionCheckUtils; +import com.fr.design.versioncheck.VersionCheckUtils; import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerWorkspaceProvider.java b/designer-realize/src/main/java/com/fr/start/module/DesignerWorkspaceProvider.java index 4c759822bd..220a4e39e2 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerWorkspaceProvider.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerWorkspaceProvider.java @@ -2,7 +2,6 @@ package com.fr.start.module; import com.fr.design.DesignerEnvManager; import com.fr.design.EnvChangeEntrance; -import com.fr.design.VersionCheckUtils; import com.fr.design.constants.DesignerLaunchStatus; import com.fr.design.editlock.ConnectionLockChangeChecker; import com.fr.design.editlock.ServerTableDataLockChangeChecker; @@ -10,6 +9,7 @@ import com.fr.design.env.DesignerWorkspaceGenerator; import com.fr.design.env.DesignerWorkspaceInfo; import com.fr.design.env.LocalDesignerWorkspaceInfo; import com.fr.design.i18n.Toolkit; +import com.fr.design.versioncheck.VersionCheckUtils; import com.fr.env.TestConnectionResult; import com.fr.event.Event; import com.fr.event.EventDispatcher; From c2b91aabf45f08aba95e9f324f6f90a24f0c2238 Mon Sep 17 00:00:00 2001 From: pengda Date: Wed, 9 Jun 2021 11:49:18 +0800 Subject: [PATCH 100/148] =?UTF-8?q?REPORT-53601=20&=20REPORT-53614=20=20?= =?UTF-8?q?=E7=BB=93=E6=9E=9C=E6=96=87=E6=9C=AC=E6=A1=86=E6=A1=86=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E4=B8=8D=E5=8F=AF=E7=BC=96=E8=BE=91=E3=80=82=E8=BF=9B?= =?UTF-8?q?=E5=BA=A6=E6=9D=A1=E6=9B=B4=E6=96=B0=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/update/actions/SyncFileProcess.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java b/designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java index b41d099cbb..ea2db13989 100644 --- a/designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java +++ b/designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java @@ -28,7 +28,7 @@ public abstract class SyncFileProcess extends SwingWorker { bar.setString(Toolkit.i18nText("Fine-Design_Basic_Sync_Plugins")); VersionCheckUtils.syncPlugins(VersionCheckUtils.checkLocalAndRemotePlugin()); } - return SyncExecutor.getInstance().execute(callBack, buildNo); + return result; } @Override From cec0f89c5f8347d3f4836086fec6d75f77c46ca7 Mon Sep 17 00:00:00 2001 From: "Bruce.Deng" Date: Wed, 9 Jun 2021 14:20:34 +0800 Subject: [PATCH 101/148] =?UTF-8?q?REPORT-53367=20=E5=A4=8D=E5=88=B6?= =?UTF-8?q?=E4=BC=A0=E5=8F=82=E5=90=8Esql-=E8=BF=9C=E7=A8=8B=E4=B8=8B?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9E=E7=9A=84=E8=BD=AC=E4=B9=89=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=E6=8F=90=E7=A4=BA=E5=A4=B1=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../preview/sql/PreviewPerformedSqlPane.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java index 8ddf261cfd..462f70b34e 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java @@ -6,7 +6,6 @@ import com.fr.base.ParameterMapNameSpace; import com.fr.data.impl.DBTableData; import com.fr.data.impl.EscapeSqlHelper; import com.fr.data.operator.DataOperator; -import com.fr.decision.config.PreventSqlInjConfig; import com.fr.decision.webservice.v10.config.ConfigService; import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.dialog.link.MessageWithLink; @@ -19,7 +18,6 @@ import com.fr.design.parameter.ParameterInputPane; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.CloudCenter; import com.fr.general.GeneralContext; -import com.fr.invoke.Reflect; import com.fr.log.FineLoggerFactory; import com.fr.plugin.injectable.PluginModule; import com.fr.script.Calculator; @@ -190,11 +188,7 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener { calculator.pushNameSpace(ns); Parameter[] paras = processParameters(tableData, calculator); // 所有被转义参数的集合 - // 远程时如何获取服务器上的转义字符?这里比较恶心 - // 方法1是新增rpc接口,交由服务器去获取转义字符。但是要考虑兼容问题: - // 新设计器jar远程老服务器jar,需要提供Compatible实现,但是这个实现能做什么呢?目前没有老的接口可以去获取服务器的转义字符,仍然啥也做不了; - // 现在采用方法2,通过反射调用PreventSqlInjConfig的刷新方法(因为它是decision模块的private方法,直接改成public仍然有兼容问题) - Reflect.on(PreventSqlInjConfig.class).call("refreshPreventSqlInjConfig"); + refreshEscapeSqlHelper(); Set specialCharParam = EscapeSqlHelper.getInstance().getSpecialCharParam(paras); // 将参数转义等 Set tableDataProviders = getTableDataProviders(); @@ -223,6 +217,13 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener { pane.setVisible(true); } + private static void refreshEscapeSqlHelper() { + EscapeSqlHelper.getInstance().setUseForbidWord(ConfigService.getInstance().getPSIConfig().isUseForbidWord()); + EscapeSqlHelper.getInstance().setSelectedForbidWord(ConfigService.getInstance().getPSIConfig().getSelectedForbidWord()); + EscapeSqlHelper.getInstance().setUseEscapeSpecialChar(ConfigService.getInstance().getPSIConfig().isUseEscapeSpecialChar()); + EscapeSqlHelper.getInstance().setSelectedSpecialChar(ConfigService.getInstance().getPSIConfig().getSelectedSpecialChar()); + } + private static boolean isShowSpecialCharSqlPane(List specialCharParamIndex) { return specialCharParamIndex != null && !specialCharParamIndex.isEmpty(); } From 6782a52e0260322d451733c22f64d4856b991b11 Mon Sep 17 00:00:00 2001 From: pengda Date: Wed, 9 Jun 2021 14:29:22 +0800 Subject: [PATCH 102/148] =?UTF-8?q?REPORT-51958=20=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=A3=80=E6=B5=8B=E5=8F=8A=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/dialog/NotificationDialog.java | 173 ++++++++++++++++++ .../dialog/NotificationDialogAction.java | 5 + 2 files changed, 178 insertions(+) create mode 100644 designer-base/src/main/java/com/fr/design/dialog/NotificationDialog.java create mode 100644 designer-base/src/main/java/com/fr/design/dialog/NotificationDialogAction.java diff --git a/designer-base/src/main/java/com/fr/design/dialog/NotificationDialog.java b/designer-base/src/main/java/com/fr/design/dialog/NotificationDialog.java new file mode 100644 index 0000000000..409f7afe6d --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/dialog/NotificationDialog.java @@ -0,0 +1,173 @@ +package com.fr.design.dialog; + + +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.utils.gui.GUICoreUtils; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import javax.swing.BorderFactory; +import javax.swing.Icon; +import javax.swing.JDialog; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.ScrollPaneConstants; +import javax.swing.UIManager; + +/** + * 带查看详情的简要通知框 + * + */ +public class NotificationDialog extends JDialog { + public static final int ERROR_MESSAGE = 0; + public static final int NEW_MESSAGE = 1; + public static final int WARNING_MESSAGE = 2; + public static final String HTML_TAG_1 = ""; + public static final String HTML_TAG_2 = ""; + private UILabel messageText; + private NotificationDialogAction notificationDialogAction; + + public NotificationDialog(Frame owner, String title, boolean isModal, int messageType, String message,NotificationDialogAction action) { + super(owner); + setTitle(title); + initComponents(messageType, message, isModal,action); + } + + public NotificationDialog(Builder builder) { + super(builder.owner); + setTitle(builder.title); + initComponents(builder.messageType, builder.message, builder.modal, builder.action); + } + + public void initComponents(int messageType, String message, boolean isModal,NotificationDialogAction action) { + notificationDialogAction = action; + setModal(isModal); + setResizable(false); + + //消息内容 + UILabel icon = new UILabel(getIconForType(messageType)); + JPanel iconPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); + iconPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 8)); + iconPanel.add(icon); + add(iconPanel, BorderLayout.WEST); + + messageText = new UILabel(HTML_TAG_1 + message + HTML_TAG_2); + messageText.setForeground(new Color(51, 51, 52)); + JPanel centerPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); + centerPanel.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 10)); + JScrollPane jScrollPane = new JScrollPane(messageText, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); + jScrollPane.setBorder(BorderFactory.createEmptyBorder()); + centerPanel.add(jScrollPane, BorderLayout.CENTER); + add(centerPanel, BorderLayout.CENTER); + + //查看详情 + UILabel detailLabel = new UILabel(); + detailLabel.setText(Toolkit.i18nText("Fine_Designer_Look_Detail")); + detailLabel.setForeground(Color.BLUE); + JPanel detailPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); + detailPanel.add(detailLabel, BorderLayout.EAST); + add(detailPanel, BorderLayout.SOUTH); + setPreferredSize(new Dimension(262, 135)); + + detailLabel.addMouseListener(detailClickListener); + messageText.addMouseListener(detailClickListener); + + pack(); + if (getOwner() != null) { + GUICoreUtils.setWindowCenter(getOwner(), this); + } + } + + private MouseListener detailClickListener = new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if(notificationDialogAction != null){ + hideDialog(); + notificationDialogAction.doClick(); + } + } + }; + + + public void setMessage(String message){ + messageText.setText(HTML_TAG_1 + message + HTML_TAG_2); + } + + private void hideDialog(){ + this.dispose(); + } + + protected Icon getIconForType(int messageType) { + String propertyName; + switch (messageType) { + case 0: + propertyName = "OptionPane.circularErrorIcon"; + break; + case 1: + propertyName = "OptionPane.newMessageIcon"; + break; + case 2: + propertyName = "OptionPane.warningIcon"; + break; + default: + return null; + } + return UIManager.getIcon(propertyName); + } + + public static Builder Builder() { + return new NotificationDialog.Builder(); + } + + public static final class Builder { + public int messageType = WARNING_MESSAGE; + public String message; + public boolean modal = true; + public Frame owner = null; + public String title; + public NotificationDialogAction action; + private Builder() { + + } + + public NotificationDialog build() { + return new NotificationDialog(this); + } + + public Builder owner(Frame owner) { + this.owner = owner; + return this; + } + + public Builder messageType(int messageType) { + this.messageType = messageType; + return this; + } + + public Builder message(String message) { + this.message = message; + return this; + } + + public Builder modal(boolean modal) { + this.modal = modal; + return this; + } + + public Builder title(String title) { + this.title = title; + return this; + } + + public Builder notificationDialogAction(NotificationDialogAction action) { + this.action = action; + return this; + } + } +} diff --git a/designer-base/src/main/java/com/fr/design/dialog/NotificationDialogAction.java b/designer-base/src/main/java/com/fr/design/dialog/NotificationDialogAction.java new file mode 100644 index 0000000000..3cd4e85e89 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/dialog/NotificationDialogAction.java @@ -0,0 +1,5 @@ +package com.fr.design.dialog; + +public interface NotificationDialogAction { + void doClick(); +} From 725b0c973939fc25aefcc02fc5d8334d32af9a8d Mon Sep 17 00:00:00 2001 From: pengda Date: Wed, 9 Jun 2021 14:30:11 +0800 Subject: [PATCH 103/148] =?UTF-8?q?REPORT-51958=20=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=A3=80=E6=B5=8B=E5=8F=8A=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/dialog/NotificationDialog.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/dialog/NotificationDialog.java b/designer-base/src/main/java/com/fr/design/dialog/NotificationDialog.java index 409f7afe6d..db3be1387e 100644 --- a/designer-base/src/main/java/com/fr/design/dialog/NotificationDialog.java +++ b/designer-base/src/main/java/com/fr/design/dialog/NotificationDialog.java @@ -95,6 +95,9 @@ public class NotificationDialog extends JDialog { }; + /** + * 设置通知消息 + */ public void setMessage(String message){ messageText.setText(HTML_TAG_1 + message + HTML_TAG_2); } From 616dea871c8f3cec0d54795a0702c74a70c51b1a Mon Sep 17 00:00:00 2001 From: pengda Date: Wed, 9 Jun 2021 14:31:57 +0800 Subject: [PATCH 104/148] =?UTF-8?q?REPORT-51958=20=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=A3=80=E6=B5=8B=E5=8F=8A=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../images/lookandfeel/circularErrorIcon.png | Bin 0 -> 346 bytes .../images/lookandfeel/circularWarningIcon.png | Bin 0 -> 345 bytes .../design/images/lookandfeel/newMessageIcon.png | Bin 0 -> 423 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 designer-base/src/main/resources/com/fr/design/images/lookandfeel/circularErrorIcon.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/lookandfeel/circularWarningIcon.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/lookandfeel/newMessageIcon.png diff --git a/designer-base/src/main/resources/com/fr/design/images/lookandfeel/circularErrorIcon.png b/designer-base/src/main/resources/com/fr/design/images/lookandfeel/circularErrorIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..bcd2b0611e21f044466269046d4905dc853a192f GIT binary patch literal 346 zcmV-g0j2(lP)%T1_A=*z&!pbD1%&v2W8;s55Jzkg0peevQovK|xz9?QrF{bORB z&&a^Qhs|OC85lk>{rjIN`{dy|m^|D7kmmo4467L!8JY0<>i_?LjQ<%zVTOPW06CkD zjpGh3o3R-9@#n7}svz%x4R|Cg-^#$qSOrrkdGs*DhwdJR?;AFPg*XHJ83am87@k|( zBFy^#zfJD(!)mAj3YQod8FXQ?APvIZT?}ta%NQ6K7#W1SJHc$2fzW`xEcf_<9>f4S zh3^au3>?T#g&6`8!_W*-_(Sf|15P{!1b}TO&H!0_USNQG2e%g}4Mb9-5tN{Q{raH- sk4BI`DN0DN(5EOV!wjJ)Gm(?C0e)kr5!g6wApigX07*qoM6N<$g4Q{dmH+?% literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/lookandfeel/circularWarningIcon.png b/designer-base/src/main/resources/com/fr/design/images/lookandfeel/circularWarningIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..69fc1527d46b02914edb435bb4a3124ea77ee0e4 GIT binary patch literal 345 zcmV-f0jB;JsUP?Up_z2N_UMqdU7234s1ZAQlbn}7WOIe|Cq{A*-AC*v|#Day&iS-|+8(U*aNK@}>0`#(r@P9rd z0|Os6hy7<@_{7M-nE1+m%{rJo+yJm<#{a7s|1&V*^VNSwhJTFz8AD-)fDHgUo15zn zE}PK}{LjGf@%z_rsvz%x4G=vP)XMmuu?obFm2hFGRg7Wy@aHQ--pwgsy_3{)7z9|j z8Jg}dVOa8F4_NF!k@Z**JT22%LKpIk{yck-P6B!s8 zQDgZ3|Njg%cjq(AdA1E^E{XwQFTi9nq1Jd{A-sSbi0FoZ z_*gWf1|qI#1i1tR&}?P^C8+OTzp22Z5fT#=BqW%#DN4#PLnz8j`0@ZQIRI9{wh`a7 R`QiWo002ovPDHLkV1n=4#R32T literal 0 HcmV?d00001 From 8d31a5a6f2d5d0af53ae8276a0c29fdabedc7631 Mon Sep 17 00:00:00 2001 From: pengda Date: Wed, 9 Jun 2021 14:32:38 +0800 Subject: [PATCH 105/148] =?UTF-8?q?REPORT-51958=20=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=A3=80=E6=B5=8B=E5=8F=8A=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/gui/UILookAndFeel.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/gui/UILookAndFeel.java b/designer-base/src/main/java/com/fr/design/gui/UILookAndFeel.java index 6d1a729d93..abb9d613dd 100644 --- a/designer-base/src/main/java/com/fr/design/gui/UILookAndFeel.java +++ b/designer-base/src/main/java/com/fr/design/gui/UILookAndFeel.java @@ -176,6 +176,9 @@ public class UILookAndFeel extends MetalLookAndFeel { table.put("OptionPane.narrow.right", loadIcon("Icon_Narrow_Right_16x16.png", this)); table.put("OptionPane.narrow.down", loadIcon("Icon_Narrow_Down_16x16.png", this)); table.put("OptionPane.warningIcon", loadIcon("WarningIcon.png", this)); + table.put("OptionPane.circularWarningIcon", loadIcon("circularWarningIcon.png", this)); + table.put("OptionPane.newMessageIcon", loadIcon("newMessageIcon.png", this)); + table.put("OptionPane.circularErrorIcon", loadIcon("circularErrorIcon.png", this)); table.put("OptionPane.questionIcon", loadIcon("QuestionIcon.png", this)); table.put("OptionPane.tipIcon", loadIcon("TipIcon.png", this)); table.put("ScrollPane.border", new UIScrollPaneBorder()); From baff606c1ab77ca830533aa96cda4270546f1ebc Mon Sep 17 00:00:00 2001 From: Lanlan Date: Wed, 9 Jun 2021 14:44:16 +0800 Subject: [PATCH 106/148] =?UTF-8?q?=E7=99=BB=E5=BD=95=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=E4=B8=8D=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/login/DesignerLoginHelper.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/login/DesignerLoginHelper.java b/designer-base/src/main/java/com/fr/design/login/DesignerLoginHelper.java index 93d7b1adf2..5da006fa76 100644 --- a/designer-base/src/main/java/com/fr/design/login/DesignerLoginHelper.java +++ b/designer-base/src/main/java/com/fr/design/login/DesignerLoginHelper.java @@ -68,12 +68,9 @@ public class DesignerLoginHelper { if (dialog == null) { if (window instanceof Dialog) { dialog = new DesignerLoginShowDialog((Dialog) window, designerLoginPane); - } else if (window instanceof Frame) { - dialog = new DesignerLoginShowDialog((Frame) window, designerLoginPane); } else { - return; + dialog = new DesignerLoginShowDialog((Frame) window, designerLoginPane); } - } dialog.setVisible(true); } From 3741ff06fb777df79e433f196a262ce153e3fdb4 Mon Sep 17 00:00:00 2001 From: Lanlan Date: Wed, 9 Jun 2021 15:22:24 +0800 Subject: [PATCH 107/148] =?UTF-8?q?REPORT-53674=20=E5=B7=B2=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E5=B7=A5=E7=A8=8B=E5=8D=87=E7=BA=A7=E5=88=B0=E6=9C=80?= =?UTF-8?q?=E6=96=B0=E7=89=88=E6=9C=ACjar=E5=90=8E=E4=BB=8D=E4=BC=9A?= =?UTF-8?q?=E6=9C=89=E7=99=BB=E5=BD=95=E6=8F=90=E9=86=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/start/module/DesignerActivator.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java index 1232cd400e..0427fe3c4d 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java @@ -437,9 +437,10 @@ public class DesignerActivator extends Activator implements Prepare { manager.setDesignerLoginUsername(MarketConfig.getInstance().getBbsUsername()); manager.setDesignerLoginAppId(MarketConfig.getInstance().getBbsAppId()); manager.setDesignerLoginRefreshToken(MarketConfig.getInstance().getBbsRefreshToken()); - manager.setCurrentVersionFirstLaunch(false); + manager.setDesignerLastLoginTime(System.currentTimeMillis()); manager.setLastLoginType(DesignerLoginType.NORMAL_LOGIN); manager.setLastLoginAccount(MarketConfig.getInstance().getBbsUsername()); + manager.setCurrentVersionFirstLaunch(false); DesignerEnvManager.getEnvManager().saveXMLFile(); } } From 7df9d4fc59e077c540724d7269b6f5997670728f Mon Sep 17 00:00:00 2001 From: Lanlan Date: Wed, 9 Jun 2021 15:43:48 +0800 Subject: [PATCH 108/148] =?UTF-8?q?REPORT-53626=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E5=90=AF=E5=8A=A8=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/mainframe/DesignerFrame.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java index 3d7fb8c48b..73f3254db3 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java @@ -71,6 +71,7 @@ import com.fr.start.OemHandler; import com.fr.workspace.WorkContext; import com.fr.workspace.Workspace; import com.fr.workspace.connect.WorkspaceConnectionInfo; +import java.util.concurrent.CopyOnWriteArrayList; import org.jetbrains.annotations.Nullable; import javax.swing.Icon; @@ -132,7 +133,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta private static final Integer TOP_LAYER = 200; - private List designerOpenedListenerList = new ArrayList<>(); + private List designerOpenedListenerList = new CopyOnWriteArrayList<>(); private ToolBarMenuDock ad; From 3657f1ddeb87d62d5e90e89a7590de0af7639e8e Mon Sep 17 00:00:00 2001 From: Lanlan Date: Wed, 9 Jun 2021 16:29:39 +0800 Subject: [PATCH 109/148] =?UTF-8?q?REPORT-53695=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E5=9C=A8=E6=9C=AA=E6=BF=80=E6=B4=BB=E6=83=85=E5=86=B5?= =?UTF-8?q?=E4=B8=8B=E5=BC=B9=E5=87=BA=E7=99=BB=E5=BD=95=E5=BC=95=E5=AF=BC?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/login/guide/DesignerGuideHelper.java | 8 +++++++- .../src/main/resources/com/fr/design/login/login.js | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/login/guide/DesignerGuideHelper.java b/designer-base/src/main/java/com/fr/design/login/guide/DesignerGuideHelper.java index 71e7f13e07..f6112e7147 100644 --- a/designer-base/src/main/java/com/fr/design/login/guide/DesignerGuideHelper.java +++ b/designer-base/src/main/java/com/fr/design/login/guide/DesignerGuideHelper.java @@ -5,6 +5,7 @@ import com.fr.design.dialog.UIDialog; import com.fr.design.event.DesignerOpenedListener; import com.fr.design.mainframe.DesignerContext; import com.fr.design.os.impl.SupportOSImpl; +import com.fr.stable.StringUtils; import javax.swing.WindowConstants; /** @@ -54,7 +55,12 @@ public class DesignerGuideHelper { * 激活满一周 */ private static boolean isActivatedForOneWeek() { - return (System.currentTimeMillis() - DesignerEnvManager.getEnvManager().getDesignerActivatedTime()) > ONE_WEEK; + DesignerEnvManager manager = DesignerEnvManager.getEnvManager(); + String key = manager.getActivationKey(); + if (StringUtils.isEmpty(key)) { + return false; + } + return (System.currentTimeMillis() - manager.getDesignerActivatedTime()) > ONE_WEEK; } /** diff --git a/designer-base/src/main/resources/com/fr/design/login/login.js b/designer-base/src/main/resources/com/fr/design/login/login.js index 71e2daa06a..49fe1bcfaf 100644 --- a/designer-base/src/main/resources/com/fr/design/login/login.js +++ b/designer-base/src/main/resources/com/fr/design/login/login.js @@ -1 +1 @@ -!function(e){var t={};function i(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,i),o.l=!0,o.exports}i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)i.d(n,o,function(t){return e[t]}.bind(null,o));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=4)}([function(e,t,i){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,i,n){n===undefined&&(n=i),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[i]}})}:function(e,t,i,n){n===undefined&&(n=i),e[n]=t[i]}),o=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||t.hasOwnProperty(i)||n(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),o(i(5),t)},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=window.DesignerLoginHelper,o=function(){function e(){}return e.prototype.getParams=function(){return{designerLoginSource:window.designerLoginSource||"0",lastLoginType:window.lastLoginType||"-1",lastLoginAccount:window.lastLoginAccount||""}},e.prototype.closeWindow=function(e){n&&n.closeWindow(e)},e.prototype.serviceHref=function(){n?n.serviceHref():window.open("https://bbs.fanruan.com/thread-102821-1-1.html")},e.prototype.forgetHref=function(){n?n.forgetHref():window.open("https://id.fanruan.com/forget/forget.php?clue=activityf")},e.prototype.normalLogin=function(e,t,i){n?n.normalLogin(e,t,i):i(-1)},e.prototype.sendCaptcha=function(e,t,i){n?n.sendCaptcha(e,t,i):i(-1)},e.prototype.smsLogin=function(e,t,i,o){n?n.smsLogin(e,t,i,o):o(null)},e.prototype.smsRegister=function(e,t,i,o,s){n?n.smsRegister(e,t,i,o,s):s(-1)},e.prototype.resize=function(e,t){n&&n.resize(e,t)},e}();t["default"]=new o},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.BBS_ERROR_CODE=t.NORMAL_LOGIN_RESULT=t.REGION=t.LOGIN=void 0,t.LOGIN={NORMAL_METHOD:"normal",SMS_METHOD:"sms",TABS:{LOGIN:"login",FORGET_PASSWORD:"forget",RESET_PASSWORD:"reset",REGISTER:"register"}},t.REGION=[{value:"+86",text:"Designer-Basic_Chinese_Mainland"},{value:"+886",text:"Designer-Basic_Chinese_Taiwan"},{value:"+852",text:"Designer-Basic_Chinese_Hong_Kong"},{value:"+853",text:"Designer-Basic_Chinese_Macao"},{value:"+90",text:"Designer-Basic_Turkey"},{value:"+82",text:"Designer-Basic_South_Korea"},{value:"+81",text:"Designer-Basic_Japan"},{value:"+65",text:"Designer-Basic_Singapore"},{value:"+60",text:"Designer-Basic_Malaysia"}],t.NORMAL_LOGIN_RESULT=[{status:0,message:"Designer-Login_Internal_Error"},{status:-1,message:"Designer-Login_Store_User_Not_Exist"},{status:-2,message:"Designer-Login_Store_User_Password_Error"},{status:-3,message:"Designer-Login_Unexpected_Error"},{status:-4,message:"Designer-Login_Network_Connected_Failed"}],t.BBS_ERROR_CODE=[{status:0,message:"Designer-Login_Internal_Error"},{status:-1,message:"Designer-BBS_Register_Timeout"},{status:-2,message:"Designer-BBS_Phone_Is_Register"},{status:-3,message:"Designer-BBS_Captcha_Send_Exceed_Limit"},{status:-4,message:"Designer-BBS_Phone_Format_Error"},{status:-100,message:"Designer-BBS_Captcha_Out_Of_Date"},{status:-101,message:"Designer-BBS_Captcha_Try_Exceed_Limit"},{status:-102,message:"Designer-BBS_Captcha_Error"},{status:-104,message:"Designer-BBS_Username_Format_Error"},{status:-103,message:"Designer-BBS_Please_Enter_Correct_Phone"},{status:-105,message:"Designer-BBS_Username_Too_Short"},{status:-106,message:"Designer-BBS_Username_Too_Long"},{status:-107,message:"Designer-BBS_Phone_Is_Register"},{status:-108,message:"Designer-BBS_Username_Is_Register"}]},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getError=void 0,t.getError=function(e,t){var i=BI.find(e,(function(e,i){return i.status===t}));return i&&i.message?i.message:""}},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(0),o=i(6);BI.addI18n(Store.i18n),BI.createWidget({type:n.Vertical,element:"body",items:[{type:o["default"]}]})},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ListView=t.VirtualGroup=t.LeftRightVerticalAdapt=t.Left=t.Horizontal=t.Vertical=t.Absolute=t.Layout=t.Htape=t.CenterAdapt=t.Vtape=t.HorizontalAdapt=t.VerticalAdapt=t.BubbleCombo=t.Img=t.Tab=t.SingleSelectInsertCombo=t.SingleSelectRadioItem=t.MultiTreePopupView=t.Editor=t.NicEditor=t.RichEditor=t.MultiTreeCombo=t.DynamicDateTimeCombo=t.DynamicDateCombo=t.BarPopOver=t.MultiSelectItem=t.TextAreaEditor=t.AllValueChooserCombo=t.ButtonGroup=t.MultiSelectInsertCombo=t.TextEditor=t.Button=t.SignEditor=t.MultiFileEditor=t.SmallTextEditor=t.HtmlLabel=t.Label=t.DownListCombo=t.TextButton=t.IconChangeButton=t.IconButton=t.IconTextIconItem=t.IconTextItem=void 0,t.IconTextItem="bi.icon_text_item",t.IconTextIconItem="bi.icon_text_icon_item",t.IconButton="bi.icon_button",t.IconChangeButton="bi.icon_change_button",t.TextButton="bi.text_button",t.DownListCombo="bi.down_list_combo",t.Label="bi.label",t.HtmlLabel="bi.html_label",t.SmallTextEditor="bi.small_text_editor",t.MultiFileEditor="bi.multifile_editor",t.SignEditor="bi.sign_editor",t.Button="bi.button",t.TextEditor="bi.text_editor",t.MultiSelectInsertCombo="bi.multi_select_insert_combo",t.ButtonGroup="bi.button_group",t.AllValueChooserCombo="bi.all_value_chooser_combo",t.TextAreaEditor="bi.textarea_editor",t.MultiSelectItem="bi.multi_select_item",t.BarPopOver="bi.bar_popover",t.DynamicDateCombo="bi.dynamic_date_combo",t.DynamicDateTimeCombo="bi.dynamic_date_time_combo",t.MultiTreeCombo="bi.multi_tree_combo",t.RichEditor="bi.rich_editor",t.NicEditor="bi.nic_editor",t.Editor="bi.editor",t.MultiTreePopupView="bi.multi_tree_popup_view",t.SingleSelectRadioItem="bi.single_select_radio_item",t.SingleSelectInsertCombo="bi.single_select_insert_combo",t.Tab="bi.tab",t.Img="bi.img",t.BubbleCombo="bi.bubble_combo",t.VerticalAdapt="bi.vertical_adapt",t.HorizontalAdapt="bi.horizontal_adapt",t.Vtape="bi.vtape",t.CenterAdapt="bi.center_adapt",t.Htape="bi.htape",t.Layout="bi.layout",t.Absolute="bi.absolute",t.Vertical="bi.vertical",t.Horizontal="bi.horizontal",t.Left="bi.left",t.LeftRightVerticalAdapt="bi.left_right_vertical_adapt",t.VirtualGroup="bi.virtual_group",t.ListView="bi.list_view"},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(7),s=i(8),r=i(9),a=i(11);i(24),t.className="designer.login.login",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login",width:420},_store:function(){return BI.Models.getModel(o["default"])},watch:{loading:function(e){this.loading.setVisible(e)}},render:function(){return{type:n.Vertical,cls:"designer-login",items:[{el:{type:n.HorizontalAdapt,items:[{type:s["default"],rgap:14,tgap:14}]}},{el:{type:n.Vertical,items:[{type:r["default"]},{type:a["default"]}]},lgap:15,rgap:15,bgap:15}]}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});BI.model("designer.login.login.model",BI.inherit(Fix.Model,{childContext:["loading"],state:function(){return{loading:!1}}})),t["default"]="designer.login.login.model"},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(1);t.className="designer.login.login.close.button",t.Widget=BI.inherit(BI.Widget,{render:function(){return{type:n.TextButton,text:String.fromCharCode(10005),cls:"background-login-close",width:18.38,height:18.38,handler:function(){o["default"].closeWindow(!1)}}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0);i(10),t.className="designer.login.login.title",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-title"},render:function(){return{type:n.Label,text:BI.i18nText("Designer-Login_Title"),cls:"bi-font-bold",bgap:10}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(12);i(13);var s=i(14),r=i(16),a=i(18),l=i(2),u=i(1),g=249.64,c=331.64,d=422,f=478,p=560;t.className="designer.login.login.body",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(o["default"])},watch:{loginMethod:function(e){this.tabOption.setValue(e),this.tab.setSelect(e),this.foot.setLoginMethod(e),this.refreshLoginButton(),e===l.LOGIN.NORMAL_METHOD?(this.tab.setHeight(g),u["default"].resize(d,f)):this.model.expand&&(u["default"].resize(d,p),this.tab.setHeight(c))},approve:function(e){this.refreshLoginButton()},expand:function(e){e&&(u["default"].resize(d,p),this.tab.setHeight(c))}},render:function(){var e=this;return{type:n.Vertical,cls:"designer-login-body",items:[{type:n.ButtonGroup,value:this.model.loginMethod,ref:function(t){e.tabOption=t},layouts:[{type:n.HorizontalAdapt}],items:[{cls:"designer-login-change-mode bi-list-item-effect bi-border-bottom bi-font-bold",width:70,height:28,value:l.LOGIN.SMS_METHOD,text:BI.i18nText("Designer-Login_Sms")},{cls:"designer-login-change-mode bi-list-item-effect bi-border-bottom bi-font-bold",width:70,height:28,value:l.LOGIN.NORMAL_METHOD,text:BI.i18nText("Designer-Login_Normal")}],listeners:[{eventName:BI.ButtonGroup.EVENT_CHANGE,action:function(t){e.store.setLoginMethod(t)}}],tgap:24,lgap:75,rgap:75},{type:n.CenterAdapt,tgap:35,items:[{type:n.Tab,cardCreator:BI.bind(this.createCard,this),showIndex:this.model.loginMethod,ref:function(t){e.tab=t},height:g,width:280}]},{type:s["default"],lgap:50,rgap:50,bgap:30,ref:function(t){e.foot=t},refreshStatus:function(t){e.store.setApprove(t)}}]}},mounted:function(){var e=u["default"].getParams(),t=e.designerLoginSource,i=e.lastLoginType;if("2"===t){var n="0"===i?l.LOGIN.NORMAL_METHOD:l.LOGIN.SMS_METHOD;this.store.setLoginMethod(n)}},createCard:function(e){var t=this;switch(e){case l.LOGIN.NORMAL_METHOD:return{type:r["default"],ref:function(e){t.normalMethod=e}};case l.LOGIN.SMS_METHOD:default:return{type:a["default"],ref:function(e){t.smsMethod=e},expand:function(){t.store.setExpand(!0)}}}},refreshLoginButton:function(){this.model.loginMethod===l.LOGIN.NORMAL_METHOD?this.normalMethod.setApprove(this.model.approve):this.smsMethod.setApprove(this.model.approve)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0;var n=i(2);t.className="designer.login.model.login.body",t.Model=BI.inherit(Fix.Model,{context:["loading"],state:function(){return{loginMethod:n.LOGIN.SMS_METHOD,approve:!0,expand:!1}},actions:{setLoginMethod:function(e){this.model.loginMethod=e},setApprove:function(e){this.model.approve=e},setExpand:function(e){this.model.expand=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(1),o=i(0);i(15);var s=i(2);t.className="designer.login.login.foot",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-foot"},render:function(){var e=this,t=this.options;return{type:o.LeftRightVerticalAdapt,items:{left:[{type:o.MultiSelectItem,width:30,selected:!0,handler:function(){t.refreshStatus(this.isSelected())}},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:BI.i18nText("Designer-Login_I_Have_Read")},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:"《"},{type:o.TextButton,cls:"login-link",textAlign:"left",text:BI.i18nText("Designer-Login_Service_Terms"),handler:function(){n["default"].serviceHref()}},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:"》"}],right:[{type:o.TextButton,cls:"login-link",textAlign:"right",text:BI.i18nText("Designer-Login_Forget_Password"),invisible:!0,ref:function(t){e.forgetPassword=t},handler:function(){n["default"].forgetHref()}}]}}},setLoginMethod:function(e){e===s.LOGIN.NORMAL_METHOD?this.forgetPassword.setVisible(!0):this.forgetPassword.setVisible(!1)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(3),s=i(1),r=i(17),a=i(2);t.className="designer.login.login.normal",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(r["default"])},watch:{errMessage:function(e){this.errMessage.setText(e)}},render:function(){var e=this;return{type:n.Vertical,items:[{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_User_Name"),bgap:3},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-username",watermark:BI.i18nText("Designer-Login_User_Name_Hint"),inputType:"text",allowBlank:!0,height:40,ref:function(t){e.userName=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Password"),bgap:3},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Password_Hint"),inputType:"password",allowBlank:!0,height:40,ref:function(t){e.password=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,cls:"designer-login-error-message",textAlign:"center",text:"",height:20,bgap:10,ref:function(t){e.errMessage=t}},{type:n.Button,cls:"login-login-button bi-font-bold",text:BI.i18nText("Designer-Login"),level:"common",height:40,ref:function(t){e.loginButton=t},handler:function(){e.login()},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]}]}},mounted:function(){var e=this;this.element.keyup((function(t){13===t.keyCode&&e.login()}));var t=s["default"].getParams(),i=t.designerLoginSource,n=t.lastLoginType,o=t.lastLoginAccount;"2"===i&&"0"===n&&e.userName.setValue(o)},checkUsername:function(){var e=this.userName.getValue();e&&this.userName.setValue(e.replace(/\s+/g,""))},login:function(){var e=this;e.checkUsername();var t=this.userName.getValue(),i=this.password.getValue();t?i?s["default"].normalLogin(t,i,(function(t){var i=parseInt(t,10);if(i>0)s["default"].closeWindow(!0);else{var n=o.getError(a.NORMAL_LOGIN_RESULT,i);n&&e.store.setErrMessage(BI.i18nText(n))}})):this.store.setErrMessage(BI.i18nText("Designer-Login_Password_Not_Null")):this.store.setErrMessage(BI.i18nText("Designer-Login_Username_Not_Null"))},setApprove:function(e){this.loginButton.setEnable(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0,t.className="designer.login.model.normal_method",t.Model=BI.inherit(Fix.Model,{context:[""],state:function(){return{errMessage:""}},actions:{setErrMessage:function(e){this.model.errMessage=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(19),s=i(21),r=i(22),a=i(2),l=i(23),u=i(1),g=i(3);t.className="designer.login.login.sms",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(l["default"])},watch:{errMessage:function(e){this.errMessage.setText(e)},isRegister:function(e){var t=this.options;e&&(t.expand(),this.password.setVisible(!0),this.passwordLabel.setVisible(!0))}},render:function(){var e=this,t=this;return{type:n.Vertical,items:[{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Phone"),bgap:3},{type:n.HorizontalAdapt,bgap:7,items:[{type:o["default"],height:42,textFormatter:function(e){var i=t.getNumberTypeItem(e);return{value:i.value,text:BI.i18nText(i.text)}},value:a.REGION[0].value,items:BI.map(a.REGION,(function(e,t){return{type:s["default"],value:t.value,label:BI.i18nText(t.text),text:t.value}})),ref:function(t){e.regionCode=t}},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-username",watermark:BI.i18nText("Designer-Login_Phone_Hint"),inputType:"text",allowBlank:!0,height:40,ref:function(t){e.phone=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Code"),bgap:3},{type:n.Horizontal,bgap:7,items:[{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Code_Hint"),inputType:"text",allowBlank:!0,height:40,width:200,ref:function(t){e.code=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:r["default"],height:40,width:80,ref:function(t){e.accountCaptcha=t},listeners:[{eventName:"EVENT_SEND",action:function(){t.sendCaptcha()}}]}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Password"),bgap:3,invisible:!0,ref:function(t){e.passwordLabel=t}},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Password_Setting_Hint"),inputType:"password",allowBlank:!0,height:40,invisible:!0,ref:function(t){e.password=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,cls:"designer-login-error-message",textAlign:"center",text:"",height:20,bgap:11,ref:function(t){e.errMessage=t}},{type:n.Button,cls:"login-login-button bi-font-bold",text:BI.i18nText("Designer-Login_Register_Or_Login"),level:"common",height:40,ref:function(t){e.loginButton=t},handler:function(){e.login()}}]}},mounted:function(){var e=this;this.element.keyup((function(t){13===t.keyCode&&e.login()}));var t=u["default"].getParams(),i=t.designerLoginSource,n=t.lastLoginType,o=t.lastLoginAccount;if("2"===i&&"1"===n){var s=o.split("-")[0],r=o.split("-")[1];e.regionCode.setValue(s),e.phone.setValue(r)}},getNumberTypeItem:function(e){return BI.find(a.REGION,(function(t,i){return e===i.value}))||{}},checkPhone:function(){var e=this.phone.getValue();e&&this.phone.setValue(e.replace(/\s+/g,""))},login:function(){var e=this,t=this;t.checkPhone();var i=this.phone.getValue(),n=this.code.getValue();if(i)if(n){var o=this.regionCode.getValue();if(this.model.isRegister){var s=this.password.getValue();if(!s)return void this.store.setErrMessage(BI.i18nText("Designer-Login_Password_Not_Null"));var r=this.model.regToken;if(!r)return void this.store.setErrMessage(BI.i18nText("Designer-Login_Token_Request_Failed"));u["default"].smsRegister(o,i,s,r,(function(e){var i=parseInt(e,10);if(i>0)u["default"].closeWindow(!0);else{var n=g.getError(a.BBS_ERROR_CODE,i);n&&t.store.setErrMessage(BI.i18nText(n))}}))}else u["default"].smsLogin(o,i,n,(function(i){var n=JSON.parse(i);if(n.status>0)if(!0===n.register){var o=n.regtoken;o?(t.store.setRegister(!0),t.store.setRegToken(o)):e.store.setErrMessage(BI.i18nText("Designer-Login_Token_Request_Failed"))}else u["default"].closeWindow(!0);else{var s=g.getError(a.BBS_ERROR_CODE,n.status);s&&t.store.setErrMessage(BI.i18nText(s))}}))}else this.store.setErrMessage(BI.i18nText("Designer-Login_Code_Not_Null"));else this.store.setErrMessage(BI.i18nText("Designer-Login_Phone_Not_Null"))},sendCaptcha:function(){var e=this;e.checkPhone();var t=this.phone.getValue();if(!t)return e.accountCaptcha.setButtonEnable(!0),void this.store.setErrMessage(BI.i18nText("Designer-Login_Phone_Not_Null"));var i=this.regionCode.getValue();u["default"].sendCaptcha(i,t,(function(t){var i=parseInt(t,10);if(1===i)e.accountCaptcha.regainCaptcha();else{e.accountCaptcha.setButtonEnable(!0);var n=g.getError(a.BBS_ERROR_CODE,i);n&&e.store.setErrMessage(BI.i18nText(n))}}))},setApprove:function(e){this.loginButton.setEnable(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(20);t.className="designer.left_right_text_value_combo",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"",height:24,chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,textFormatter:function(e){return e},value:""},render:function(){var e=this,t=this.options;return{type:"bi.combo",container:t.container,adjustLength:2,ref:function(t){e.combo=t},el:{type:n["default"],cls:"text-value-trigger",items:t.items,height:t.height-2,value:t.textFormatter(t.value),ref:function(t){e.trigger=t}},popup:{el:{type:"bi.text_value_combo_popup",chooseType:t.chooseType,value:t.value,items:t.items,ref:function(t){e.popup=t},listeners:[{eventName:BI.TextValueComboPopup.EVENT_CHANGE,action:function(){e.setValue(e.getValue()),e.combo.hideView(),e.fireEvent("EVENT_CHANGE",arguments)}},{eventName:BI.Controller.EVENT_CHANGE,action:function(){e.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}}]},value:t.value,maxHeight:240,minHeight:25}}},setValue:function(e){this.combo.setValue(e),this.trigger.setValue(this.options.textFormatter(e))},getValue:function(){var e=this.combo.getValue();return BI.isNull(e)?"":BI.isArray(e)?e[0]:e},populate:function(e){this.options.items=e,this.combo.populate(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0,t.className="designer.left_right_text_value_combo_trigger",t.Widget=BI.inherit(BI.Trigger,{props:{baseCls:"",value:{}},render:function(){var e=this,t=this.options,i=t.value;return{type:"bi.htape",cls:"bi-border-bottom bi-border-radius",items:[{type:"bi.label",text:i.text,title:function(){return e.textRow.getText()},height:t.height,hgap:3,textAlign:"left",ref:function(t){e.textRow=t}},{type:"bi.label",text:i.value,height:t.height,width:32,textAlign:"right",ref:function(t){e.valueRow=t}},{type:"bi.trigger_icon_button",width:t.triggerWidth||t.height}]}},setValue:function(e){this.textRow.setText(e.text),this.valueRow.setText(e.value)},setText:function(e){this.textRow.setText(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0,t.className="designer.components.phone.editor.item",t.Widget=BI.inherit(BI.BasicButton,{props:{baseCls:"designer-login-login-body",label:"",text:""},render:function(){var e=this.options;return{type:"bi.htape",items:[{el:{type:"bi.label",text:e.label,title:e.label,textAlign:"left"},lgap:10,rgap:5},{el:{type:"bi.label",text:e.text,textAlign:"right"},width:32,rgap:10}]}},doClick:function(){BI.SingleSelectItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent("EVENT_CHANGE",this.isSelected(),this)},setSelected:function(e){BI.SingleSelectItem.superclass.setSelected.apply(this,arguments)},getValue:function(){return this.options.value}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0);t.className="designer.user.account.setting.captcha",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},render:function(){var e=this;this.options;return{type:n.TextButton,text:BI.i18nText("Designer-Login_Code_Request"),cls:"designer-login-border-bottom designer-login-code-text",handler:function(){e.setButtonEnable(!1),e.fireEvent("EVENT_SEND")},ref:function(t){e.getButton=t}}},setButtonEnable:function(e){this.captchaTime&&(e=!1),this.getButton.setEnable(e)},regainCaptcha:function(){var e=this,t=0;window.clearInterval(e.captchaTime),this.captchaTime=window.setInterval((function(){if(60===t)return window.clearInterval(e.captchaTime),e.captchaTime=null,e.getButton.setText(BI.i18nText("Designer-Login_Code_Request")),void e.setButtonEnable(!0);e.getButton.setText(BI.i18nText("Designer-Login_Code_Request_Again")+"("+(60-t)+")"),t++}),1e3),this.setButtonEnable(!1)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0,t.className="designer.login.model.sms_method",t.Model=BI.inherit(Fix.Model,{context:[""],state:function(){return{errMessage:"",isRegister:!1,regToken:""}},actions:{setErrMessage:function(e){this.model.errMessage=e},setRegister:function(e){this.model.isRegister=e},setRegToken:function(e){this.model.regToken=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){}]); \ No newline at end of file +!function(e){var t={};function i(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,i),o.l=!0,o.exports}i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)i.d(n,o,function(t){return e[t]}.bind(null,o));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=4)}([function(e,t,i){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,i,n){n===undefined&&(n=i),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[i]}})}:function(e,t,i,n){n===undefined&&(n=i),e[n]=t[i]}),o=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||t.hasOwnProperty(i)||n(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),o(i(5),t)},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=window.DesignerLoginHelper,o=function(){function e(){}return e.prototype.getParams=function(){return{designerLoginSource:window.designerLoginSource||"0",lastLoginType:window.lastLoginType||"-1",lastLoginAccount:window.lastLoginAccount||""}},e.prototype.closeWindow=function(e){n&&n.closeWindow(e)},e.prototype.serviceHref=function(){n?n.serviceHref():window.open("https://bbs.fanruan.com/thread-102821-1-1.html")},e.prototype.forgetHref=function(){n?n.forgetHref():window.open("https://id.fanruan.com/forget/forget.php?clue=activityf")},e.prototype.normalLogin=function(e,t,i){n?n.normalLogin(e,t,i):i(-1)},e.prototype.sendCaptcha=function(e,t,i){n?n.sendCaptcha(e,t,i):i(-1)},e.prototype.smsLogin=function(e,t,i,o){n?n.smsLogin(e,t,i,o):o(null)},e.prototype.smsRegister=function(e,t,i,o,s){n?n.smsRegister(e,t,i,o,s):s(-1)},e.prototype.resize=function(e,t){n&&n.resize(e,t)},e}();t["default"]=new o},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.BBS_ERROR_CODE=t.NORMAL_LOGIN_RESULT=t.REGION=t.LOGIN=void 0,t.LOGIN={NORMAL_METHOD:"normal",SMS_METHOD:"sms",TABS:{LOGIN:"login",FORGET_PASSWORD:"forget",RESET_PASSWORD:"reset",REGISTER:"register"}},t.REGION=[{value:"+86",text:"Designer-Basic_Chinese_Mainland"},{value:"+886",text:"Designer-Basic_Chinese_Taiwan"},{value:"+852",text:"Designer-Basic_Chinese_Hong_Kong"},{value:"+853",text:"Designer-Basic_Chinese_Macao"},{value:"+90",text:"Designer-Basic_Turkey"},{value:"+82",text:"Designer-Basic_South_Korea"},{value:"+81",text:"Designer-Basic_Japan"},{value:"+65",text:"Designer-Basic_Singapore"},{value:"+60",text:"Designer-Basic_Malaysia"}],t.NORMAL_LOGIN_RESULT=[{status:0,message:"Designer-Login_Internal_Error"},{status:-1,message:"Designer-Login_Store_User_Not_Exist"},{status:-2,message:"Designer-Login_Store_User_Password_Error"},{status:-3,message:"Designer-Login_Unexpected_Error"},{status:-4,message:"Designer-Login_Network_Connected_Failed"}],t.BBS_ERROR_CODE=[{status:0,message:"Designer-Login_Internal_Error"},{status:-1,message:"Designer-BBS_Register_Timeout"},{status:-2,message:"Designer-BBS_Phone_Is_Register"},{status:-3,message:"Designer-BBS_Captcha_Send_Exceed_Limit"},{status:-4,message:"Designer-BBS_Phone_Format_Error"},{status:-100,message:"Designer-BBS_Captcha_Out_Of_Date"},{status:-101,message:"Designer-BBS_Captcha_Try_Exceed_Limit"},{status:-102,message:"Designer-BBS_Captcha_Error"},{status:-104,message:"Designer-BBS_Username_Format_Error"},{status:-103,message:"Designer-BBS_Please_Enter_Correct_Phone"},{status:-105,message:"Designer-BBS_Username_Too_Short"},{status:-106,message:"Designer-BBS_Username_Too_Long"},{status:-107,message:"Designer-BBS_Phone_Is_Register"},{status:-108,message:"Designer-BBS_Username_Is_Register"}]},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getError=void 0,t.getError=function(e,t){var i=BI.find(e,(function(e,i){return i.status===t}));return i&&i.message?i.message:""}},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(0),o=i(6);BI.addI18n(Store.i18n),BI.createWidget({type:n.Vertical,element:"body",items:[{type:o["default"]}]})},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ListView=t.VirtualGroup=t.LeftRightVerticalAdapt=t.Left=t.Horizontal=t.Vertical=t.Absolute=t.Layout=t.Htape=t.CenterAdapt=t.Vtape=t.HorizontalAdapt=t.VerticalAdapt=t.BubbleCombo=t.Img=t.Tab=t.SingleSelectInsertCombo=t.SingleSelectRadioItem=t.MultiTreePopupView=t.Editor=t.NicEditor=t.RichEditor=t.MultiTreeCombo=t.DynamicDateTimeCombo=t.DynamicDateCombo=t.BarPopOver=t.MultiSelectItem=t.TextAreaEditor=t.AllValueChooserCombo=t.ButtonGroup=t.MultiSelectInsertCombo=t.TextEditor=t.Button=t.SignEditor=t.MultiFileEditor=t.SmallTextEditor=t.HtmlLabel=t.Label=t.DownListCombo=t.TextButton=t.IconChangeButton=t.IconButton=t.IconTextIconItem=t.IconTextItem=void 0,t.IconTextItem="bi.icon_text_item",t.IconTextIconItem="bi.icon_text_icon_item",t.IconButton="bi.icon_button",t.IconChangeButton="bi.icon_change_button",t.TextButton="bi.text_button",t.DownListCombo="bi.down_list_combo",t.Label="bi.label",t.HtmlLabel="bi.html_label",t.SmallTextEditor="bi.small_text_editor",t.MultiFileEditor="bi.multifile_editor",t.SignEditor="bi.sign_editor",t.Button="bi.button",t.TextEditor="bi.text_editor",t.MultiSelectInsertCombo="bi.multi_select_insert_combo",t.ButtonGroup="bi.button_group",t.AllValueChooserCombo="bi.all_value_chooser_combo",t.TextAreaEditor="bi.textarea_editor",t.MultiSelectItem="bi.multi_select_item",t.BarPopOver="bi.bar_popover",t.DynamicDateCombo="bi.dynamic_date_combo",t.DynamicDateTimeCombo="bi.dynamic_date_time_combo",t.MultiTreeCombo="bi.multi_tree_combo",t.RichEditor="bi.rich_editor",t.NicEditor="bi.nic_editor",t.Editor="bi.editor",t.MultiTreePopupView="bi.multi_tree_popup_view",t.SingleSelectRadioItem="bi.single_select_radio_item",t.SingleSelectInsertCombo="bi.single_select_insert_combo",t.Tab="bi.tab",t.Img="bi.img",t.BubbleCombo="bi.bubble_combo",t.VerticalAdapt="bi.vertical_adapt",t.HorizontalAdapt="bi.horizontal_adapt",t.Vtape="bi.vtape",t.CenterAdapt="bi.center_adapt",t.Htape="bi.htape",t.Layout="bi.layout",t.Absolute="bi.absolute",t.Vertical="bi.vertical",t.Horizontal="bi.horizontal",t.Left="bi.left",t.LeftRightVerticalAdapt="bi.left_right_vertical_adapt",t.VirtualGroup="bi.virtual_group",t.ListView="bi.list_view"},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(7),s=i(8),r=i(9),a=i(11);i(24),t.className="designer.login.login",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login",width:420},_store:function(){return BI.Models.getModel(o["default"])},watch:{loading:function(e){this.loading.setVisible(e)}},render:function(){return{type:n.Vertical,cls:"designer-login",items:[{el:{type:n.HorizontalAdapt,items:[{type:s["default"],rgap:14,tgap:14}]}},{el:{type:n.Vertical,items:[{type:r["default"]},{type:a["default"]}]},lgap:15,rgap:15,bgap:15}]}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});BI.model("designer.login.login.model",BI.inherit(Fix.Model,{childContext:["loading"],state:function(){return{loading:!1}}})),t["default"]="designer.login.login.model"},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(1);t.className="designer.login.login.close.button",t.Widget=BI.inherit(BI.Widget,{render:function(){return{type:n.TextButton,text:String.fromCharCode(10005),cls:"background-login-close",width:18.38,height:18.38,handler:function(){o["default"].closeWindow(!1)}}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0);i(10),t.className="designer.login.login.title",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-title"},render:function(){return{type:n.Label,text:BI.i18nText("Designer-Login_Title"),cls:"bi-font-bold",bgap:10}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(12);i(13);var s=i(14),r=i(16),a=i(18),l=i(2),u=i(1),g=249.64,c=331.64,d=422,f=478,p=560;t.className="designer.login.login.body",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(o["default"])},watch:{loginMethod:function(e){this.tabOption.setValue(e),this.tab.setSelect(e),this.foot.setLoginMethod(e),this.refreshLoginButton(),e===l.LOGIN.NORMAL_METHOD?(this.tab.setHeight(g),u["default"].resize(d,f)):this.model.expand&&(u["default"].resize(d,p),this.tab.setHeight(c))},approve:function(e){this.refreshLoginButton()},expand:function(e){e&&(u["default"].resize(d,p),this.tab.setHeight(c))}},render:function(){var e=this;return{type:n.Vertical,cls:"designer-login-body",items:[{type:n.ButtonGroup,value:this.model.loginMethod,ref:function(t){e.tabOption=t},layouts:[{type:n.HorizontalAdapt}],items:[{cls:"designer-login-change-mode bi-list-item-effect bi-border-bottom bi-font-bold",width:70,height:28,value:l.LOGIN.SMS_METHOD,text:BI.i18nText("Designer-Login_Sms")},{cls:"designer-login-change-mode bi-list-item-effect bi-border-bottom bi-font-bold",width:70,height:28,value:l.LOGIN.NORMAL_METHOD,text:BI.i18nText("Designer-Login_Normal")}],listeners:[{eventName:BI.ButtonGroup.EVENT_CHANGE,action:function(t){e.store.setLoginMethod(t)}}],tgap:24,lgap:75,rgap:75},{type:n.CenterAdapt,tgap:35,items:[{type:n.Tab,cardCreator:BI.bind(this.createCard,this),showIndex:this.model.loginMethod,ref:function(t){e.tab=t},height:g,width:280}]},{type:s["default"],lgap:50,rgap:50,bgap:30,ref:function(t){e.foot=t},refreshStatus:function(t){e.store.setApprove(t)}}]}},mounted:function(){var e=u["default"].getParams(),t=e.designerLoginSource,i=e.lastLoginType;if("2"===t){var n="0"===i?l.LOGIN.NORMAL_METHOD:l.LOGIN.SMS_METHOD;this.store.setLoginMethod(n)}},createCard:function(e){var t=this;switch(e){case l.LOGIN.NORMAL_METHOD:return{type:r["default"],ref:function(e){t.normalMethod=e}};case l.LOGIN.SMS_METHOD:default:return{type:a["default"],ref:function(e){t.smsMethod=e},expand:function(){t.store.setExpand(!0)}}}},refreshLoginButton:function(){this.model.loginMethod===l.LOGIN.NORMAL_METHOD?this.normalMethod.setApprove(this.model.approve):this.smsMethod.setApprove(this.model.approve)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0;var n=i(2);t.className="designer.login.model.login.body",t.Model=BI.inherit(Fix.Model,{context:["loading"],state:function(){return{loginMethod:n.LOGIN.SMS_METHOD,approve:!0,expand:!1}},actions:{setLoginMethod:function(e){this.model.loginMethod=e},setApprove:function(e){this.model.approve=e},setExpand:function(e){this.model.expand=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(1),o=i(0);i(15);var s=i(2);t.className="designer.login.login.foot",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-foot"},render:function(){var e=this,t=this.options;return{type:o.LeftRightVerticalAdapt,items:{left:[{type:o.MultiSelectItem,width:30,selected:!0,handler:function(){t.refreshStatus(this.isSelected())}},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:BI.i18nText("Designer-Login_I_Have_Read")},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:"《"},{type:o.TextButton,cls:"login-link",textAlign:"left",text:BI.i18nText("Designer-Login_Service_Terms"),handler:function(){n["default"].serviceHref()}},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:"》"}],right:[{type:o.TextButton,cls:"login-link",textAlign:"right",text:BI.i18nText("Designer-Login_Forget_Password"),invisible:!0,ref:function(t){e.forgetPassword=t},handler:function(){n["default"].forgetHref()}}]}}},setLoginMethod:function(e){e===s.LOGIN.NORMAL_METHOD?this.forgetPassword.setVisible(!0):this.forgetPassword.setVisible(!1)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(3),s=i(1),r=i(17),a=i(2);t.className="designer.login.login.normal",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(r["default"])},watch:{errMessage:function(e){this.errMessage.setText(e)}},render:function(){var e=this;return{type:n.Vertical,items:[{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_User_Name"),bgap:3},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-username",watermark:BI.i18nText("Designer-Login_User_Name_Hint"),inputType:"text",allowBlank:!0,height:40,ref:function(t){e.userName=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Password"),bgap:3},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Password_Hint"),inputType:"password",allowBlank:!0,height:40,ref:function(t){e.password=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,cls:"designer-login-error-message",textAlign:"center",text:"",height:20,bgap:10,ref:function(t){e.errMessage=t}},{type:n.Button,cls:"login-login-button bi-font-bold",text:BI.i18nText("Designer-Login"),level:"common",height:40,ref:function(t){e.loginButton=t},handler:function(){e.login()}}]}},mounted:function(){var e=this;this.element.keyup((function(t){13===t.keyCode&&e.login()}));var t=s["default"].getParams(),i=t.designerLoginSource,n=t.lastLoginType,o=t.lastLoginAccount;"2"===i&&"0"===n&&e.userName.setValue(o)},checkUsername:function(){var e=this.userName.getValue();e&&this.userName.setValue(e.replace(/\s+/g,""))},login:function(){var e=this;e.checkUsername();var t=this.userName.getValue(),i=this.password.getValue();t?i?s["default"].normalLogin(t,i,(function(t){var i=parseInt(t,10);if(i>0)s["default"].closeWindow(!0);else{var n=o.getError(a.NORMAL_LOGIN_RESULT,i);n&&e.store.setErrMessage(BI.i18nText(n))}})):this.store.setErrMessage(BI.i18nText("Designer-Login_Password_Not_Null")):this.store.setErrMessage(BI.i18nText("Designer-Login_Username_Not_Null"))},setApprove:function(e){this.loginButton.setEnable(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0,t.className="designer.login.model.normal_method",t.Model=BI.inherit(Fix.Model,{context:[""],state:function(){return{errMessage:""}},actions:{setErrMessage:function(e){this.model.errMessage=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(19),s=i(21),r=i(22),a=i(2),l=i(23),u=i(1),g=i(3);t.className="designer.login.login.sms",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(l["default"])},watch:{errMessage:function(e){this.errMessage.setText(e)},isRegister:function(e){var t=this.options;e&&(t.expand(),this.password.setVisible(!0),this.passwordLabel.setVisible(!0))}},render:function(){var e=this,t=this;return{type:n.Vertical,items:[{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Phone"),bgap:3},{type:n.HorizontalAdapt,bgap:7,items:[{type:o["default"],height:42,textFormatter:function(e){var i=t.getNumberTypeItem(e);return{value:i.value,text:BI.i18nText(i.text)}},value:a.REGION[0].value,items:BI.map(a.REGION,(function(e,t){return{type:s["default"],value:t.value,label:BI.i18nText(t.text),text:t.value}})),ref:function(t){e.regionCode=t}},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-username",watermark:BI.i18nText("Designer-Login_Phone_Hint"),inputType:"text",allowBlank:!0,height:40,ref:function(t){e.phone=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Code"),bgap:3},{type:n.Horizontal,bgap:7,items:[{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Code_Hint"),inputType:"text",allowBlank:!0,height:40,width:200,ref:function(t){e.code=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:r["default"],height:40,width:80,ref:function(t){e.accountCaptcha=t},listeners:[{eventName:"EVENT_SEND",action:function(){t.sendCaptcha()}}]}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Password"),bgap:3,invisible:!0,ref:function(t){e.passwordLabel=t}},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Password_Setting_Hint"),inputType:"password",allowBlank:!0,height:40,invisible:!0,ref:function(t){e.password=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,cls:"designer-login-error-message",textAlign:"center",text:"",height:20,bgap:11,ref:function(t){e.errMessage=t}},{type:n.Button,cls:"login-login-button bi-font-bold",text:BI.i18nText("Designer-Login_Register_Or_Login"),level:"common",height:40,ref:function(t){e.loginButton=t},handler:function(){e.login()}}]}},mounted:function(){var e=this;this.element.keyup((function(t){13===t.keyCode&&e.login()}));var t=u["default"].getParams(),i=t.designerLoginSource,n=t.lastLoginType,o=t.lastLoginAccount;if("2"===i&&"1"===n){var s=o.split("-")[0],r=o.split("-")[1];e.regionCode.setValue(s),e.phone.setValue(r)}},getNumberTypeItem:function(e){return BI.find(a.REGION,(function(t,i){return e===i.value}))||{}},checkPhone:function(){var e=this.phone.getValue();e&&this.phone.setValue(e.replace(/\s+/g,""))},login:function(){var e=this,t=this;t.checkPhone();var i=this.phone.getValue(),n=this.code.getValue();if(i)if(n){var o=this.regionCode.getValue();if(this.model.isRegister){var s=this.password.getValue();if(!s)return void this.store.setErrMessage(BI.i18nText("Designer-Login_Password_Not_Null"));var r=this.model.regToken;if(!r)return void this.store.setErrMessage(BI.i18nText("Designer-Login_Token_Request_Failed"));u["default"].smsRegister(o,i,s,r,(function(e){var i=parseInt(e,10);if(i>0)u["default"].closeWindow(!0);else{var n=g.getError(a.BBS_ERROR_CODE,i);n&&t.store.setErrMessage(BI.i18nText(n))}}))}else u["default"].smsLogin(o,i,n,(function(i){var n=JSON.parse(i);if(n.status>0)if(!0===n.register){var o=n.regtoken;o?(t.store.setRegister(!0),t.store.setRegToken(o)):e.store.setErrMessage(BI.i18nText("Designer-Login_Token_Request_Failed"))}else u["default"].closeWindow(!0);else{var s=g.getError(a.BBS_ERROR_CODE,n.status);s&&t.store.setErrMessage(BI.i18nText(s))}}))}else this.store.setErrMessage(BI.i18nText("Designer-Login_Code_Not_Null"));else this.store.setErrMessage(BI.i18nText("Designer-Login_Phone_Not_Null"))},sendCaptcha:function(){var e=this;e.checkPhone();var t=this.phone.getValue();if(!t)return e.accountCaptcha.setButtonEnable(!0),void this.store.setErrMessage(BI.i18nText("Designer-Login_Phone_Not_Null"));var i=this.regionCode.getValue();u["default"].sendCaptcha(i,t,(function(t){var i=parseInt(t,10);if(1===i)e.accountCaptcha.regainCaptcha();else{if(e.accountCaptcha.setButtonEnable(!0),0===i)return void e.store.setErrMessage(BI.i18nText("Designer-BBS_Please_Enter_Correct_Phone"));var n=g.getError(a.BBS_ERROR_CODE,i);n&&e.store.setErrMessage(BI.i18nText(n))}}))},setApprove:function(e){this.loginButton.setEnable(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(20);t.className="designer.left_right_text_value_combo",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"",height:24,chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,textFormatter:function(e){return e},value:""},render:function(){var e=this,t=this.options;return{type:"bi.combo",container:t.container,adjustLength:2,ref:function(t){e.combo=t},el:{type:n["default"],cls:"text-value-trigger",items:t.items,height:t.height-2,value:t.textFormatter(t.value),ref:function(t){e.trigger=t}},popup:{el:{type:"bi.text_value_combo_popup",chooseType:t.chooseType,value:t.value,items:t.items,ref:function(t){e.popup=t},listeners:[{eventName:BI.TextValueComboPopup.EVENT_CHANGE,action:function(){e.setValue(e.getValue()),e.combo.hideView(),e.fireEvent("EVENT_CHANGE",arguments)}},{eventName:BI.Controller.EVENT_CHANGE,action:function(){e.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}}]},value:t.value,maxHeight:240,minHeight:25}}},setValue:function(e){this.combo.setValue(e),this.trigger.setValue(this.options.textFormatter(e))},getValue:function(){var e=this.combo.getValue();return BI.isNull(e)?"":BI.isArray(e)?e[0]:e},populate:function(e){this.options.items=e,this.combo.populate(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0,t.className="designer.left_right_text_value_combo_trigger",t.Widget=BI.inherit(BI.Trigger,{props:{baseCls:"",value:{}},render:function(){var e=this,t=this.options,i=t.value;return{type:"bi.htape",cls:"bi-border-bottom bi-border-radius",items:[{type:"bi.label",text:i.text,title:function(){return e.textRow.getText()},height:t.height,hgap:3,textAlign:"left",ref:function(t){e.textRow=t}},{type:"bi.label",text:i.value,height:t.height,width:32,textAlign:"right",ref:function(t){e.valueRow=t}},{type:"bi.trigger_icon_button",width:t.triggerWidth||t.height}]}},setValue:function(e){this.textRow.setText(e.text),this.valueRow.setText(e.value)},setText:function(e){this.textRow.setText(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0,t.className="designer.components.phone.editor.item",t.Widget=BI.inherit(BI.BasicButton,{props:{baseCls:"designer-login-login-body",label:"",text:""},render:function(){var e=this.options;return{type:"bi.htape",items:[{el:{type:"bi.label",text:e.label,title:e.label,textAlign:"left"},lgap:10,rgap:5},{el:{type:"bi.label",text:e.text,textAlign:"right"},width:32,rgap:10}]}},doClick:function(){BI.SingleSelectItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent("EVENT_CHANGE",this.isSelected(),this)},setSelected:function(e){BI.SingleSelectItem.superclass.setSelected.apply(this,arguments)},getValue:function(){return this.options.value}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0);t.className="designer.user.account.setting.captcha",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},render:function(){var e=this;this.options;return{type:n.TextButton,text:BI.i18nText("Designer-Login_Code_Request"),cls:"designer-login-border-bottom designer-login-code-text",handler:function(){e.setButtonEnable(!1),e.fireEvent("EVENT_SEND")},ref:function(t){e.getButton=t}}},setButtonEnable:function(e){this.captchaTime&&(e=!1),this.getButton.setEnable(e)},regainCaptcha:function(){var e=this,t=0;window.clearInterval(e.captchaTime),this.captchaTime=window.setInterval((function(){if(60===t)return window.clearInterval(e.captchaTime),e.captchaTime=null,e.getButton.setText(BI.i18nText("Designer-Login_Code_Request")),void e.setButtonEnable(!0);e.getButton.setText(BI.i18nText("Designer-Login_Code_Request_Again")+"("+(60-t)+")"),t++}),1e3),this.setButtonEnable(!1)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0,t.className="designer.login.model.sms_method",t.Model=BI.inherit(Fix.Model,{context:[""],state:function(){return{errMessage:"",isRegister:!1,regToken:""}},actions:{setErrMessage:function(e){this.model.errMessage=e},setRegister:function(e){this.model.isRegister=e},setRegToken:function(e){this.model.regToken=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){}]); \ No newline at end of file From cc810db9c443b7ef254a22fe3ece78daa34c00cd Mon Sep 17 00:00:00 2001 From: hades Date: Wed, 9 Jun 2021 16:39:30 +0800 Subject: [PATCH 110/148] =?UTF-8?q?KERNEL-7634=20gradle=20=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 29 ++++++----------------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/build.gradle b/build.gradle index 781c65e227..cbc6d696ce 100644 --- a/build.gradle +++ b/build.gradle @@ -28,17 +28,6 @@ dependencies { api project(':designer-realize') } -configurations.all { - resolutionStrategy { - force 'com.fr.third:jxbrowser:6.23' - force 'com.fr.third:jxbrowser-mac:6.23' - force 'com.fr.third:jxbrowser-win64:6.23' - force 'com.fr.third:jxbrowser:7.5' - force 'com.fr.third:jxbrowser-mac:7.5' - force 'com.fr.third:jxbrowser-win64:7.5' - } -} - allprojects { apply plugin: 'java' apply plugin: 'java-library' @@ -68,18 +57,12 @@ allprojects { } dependencies { - implementation ('com.fr.third:jxbrowser:6.23') { - force = true - } - implementation ('com.fr.third:jxbrowser-mac:6.23') { - force = true - } - implementation ('com.fr.third:jxbrowser-win64:6.23') { - force = true - } - implementation 'com.fr.third:jxbrowser:7.5' - implementation 'com.fr.third:jxbrowser-mac:7.5' - implementation 'com.fr.third:jxbrowser-win64:7.5' + implementation 'com.fr.third:jxbrowser:6.23' + implementation 'com.fr.third:jxbrowser-mac:6.23' + implementation 'com.fr.third:jxbrowser-win64:6.23' + implementation 'com.fr.third:jxbrowser-v7:7.5' + implementation 'com.fr.third:jxbrowser-mac-v7:7.5' + implementation 'com.fr.third:jxbrowser-win64-v7:7.5' implementation 'com.fr.third:jxbrowser-swing:7.5' implementation 'com.fr.third.server:servlet-api:3.0' implementation 'org.swingexplorer:swexpl:2.0.1' From b5c89e6c6e3ba78e2e5d36ef3e4bb27589ddf0f3 Mon Sep 17 00:00:00 2001 From: "Bruce.Deng" Date: Wed, 9 Jun 2021 16:58:00 +0800 Subject: [PATCH 111/148] =?UTF-8?q?REPORT-52526=20=E3=80=90=E6=9D=A5?= =?UTF-8?q?=E6=BA=90=E4=BA=8E=E8=BF=AD=E4=BB=A3=E4=BB=BB=E5=8A=A1=E3=80=91?= =?UTF-8?q?=E3=80=90V2.1.0=E3=80=91=E8=AE=BE=E8=AE=A1=E5=99=A8=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E9=9B=86=E6=9F=A5=E8=AF=A2=E7=95=8C=E9=9D=A2=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=A4=8D=E5=88=B6=E4=BC=A0=E5=8F=82=E5=90=8Esql?= =?UTF-8?q?=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../preview/sql/PreviewPerformedSqlPane.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java index 462f70b34e..c0239c8fad 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java @@ -208,12 +208,22 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener { StringSelection selection = new StringSelection(sql); java.awt.Toolkit.getDefaultToolkit().getSystemClipboard().setContents(selection, selection); // 弹窗 - PreviewPerformedSqlPane pane; if (isShowSpecialCharSqlPane(specialCharParamIndex)) { - pane = new PreviewPerformedSqlPane(DesignerContext.getDesignerFrame(), sql, specialCharParamIndex, ConfigService.getInstance().getPSIConfig().getSelectedSpecialChar(), highlight); + showSpecialCharSqlPane(sql, specialCharParamIndex, highlight); } else { - pane = new PreviewPerformedSqlPane(DesignerContext.getDesignerFrame(), sql); + showNormalPreviewPane(sql); } + } + + // 埋点方法 + private static void showNormalPreviewPane(String sql) { + PreviewPerformedSqlPane pane = new PreviewPerformedSqlPane(DesignerContext.getDesignerFrame(), sql); + pane.setVisible(true); + } + + // 埋点方法 + private static void showSpecialCharSqlPane(String sql, List specialCharParamIndex, boolean highlight) { + PreviewPerformedSqlPane pane = new PreviewPerformedSqlPane(DesignerContext.getDesignerFrame(), sql, specialCharParamIndex, ConfigService.getInstance().getPSIConfig().getSelectedSpecialChar(), highlight); pane.setVisible(true); } From 7b067cc1e84b78955d813f02d9bf57939d71e6fc Mon Sep 17 00:00:00 2001 From: Lanlan Date: Wed, 9 Jun 2021 19:11:44 +0800 Subject: [PATCH 112/148] =?UTF-8?q?REPORT-53644=20=E7=82=B9=E5=87=BB?= =?UTF-8?q?=E5=BF=98=E8=AE=B0=E5=AF=86=E7=A0=81=EF=BC=8C=E4=BC=9A=E5=BC=B9?= =?UTF-8?q?=E5=87=BA=E8=AE=BE=E8=AE=A1=E5=99=A8bin=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=A4=B9=E6=89=80=E5=9C=A8=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/actions/community/BBSAction.java | 2 +- .../com/fr/design/actions/community/BugAction.java | 2 +- .../com/fr/design/actions/community/CenterAction.java | 2 +- .../fr/design/actions/community/CusDemandAction.java | 2 +- .../design/actions/community/FacebookFansAction.java | 2 +- .../com/fr/design/actions/community/NeedAction.java | 2 +- .../fr/design/actions/community/QuestionAction.java | 2 +- .../com/fr/design/actions/community/SignAction.java | 2 +- .../design/actions/community/TechSolutionAction.java | 2 +- .../design/actions/community/TemplateStoreAction.java | 2 +- .../java/com/fr/design/actions/community/UpAction.java | 2 +- .../actions/community/WorkOrderCenterAction.java | 2 +- .../com/fr/design/locale/impl/BbsRegisterMark.java | 10 +++++----- .../java/com/fr/design/locale/impl/BbsResetMark.java | 10 +++++----- .../java/com/fr/design/locale/impl/BbsSpaceMark.java | 10 +++++----- .../java/com/fr/design/locale/impl/BugNeedMark.java | 2 +- .../com/fr/design/locale/impl/TechSupportMark.java | 4 ++-- .../java/com/fr/design/locale/impl/UserInfoMark.java | 10 +++++----- .../main/java/com/fr/design/locale/impl/VideoMark.java | 6 +++--- .../java/com/fr/design/login/AbstractDesignerSSO.java | 3 +++ 20 files changed, 41 insertions(+), 38 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/community/BBSAction.java b/designer-base/src/main/java/com/fr/design/actions/community/BBSAction.java index 14046b683c..1acbbe4170 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/BBSAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/BBSAction.java @@ -20,7 +20,7 @@ public class BBSAction extends AbstractDesignerSSO { @Override public String getJumpUrl() { - return CloudCenter.getInstance().acquireUrlByKind("bbs"); + return CloudCenter.getInstance().acquireUrlByKind("bbs", "http://bbs.fanruan.com/"); } public static final MenuKeySet BBS = new MenuKeySet() { diff --git a/designer-base/src/main/java/com/fr/design/actions/community/BugAction.java b/designer-base/src/main/java/com/fr/design/actions/community/BugAction.java index 1438f97770..a162571002 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/BugAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/BugAction.java @@ -17,7 +17,7 @@ public class BugAction extends AbstractDesignerSSO { @Override public String getJumpUrl() { - return CloudCenter.getInstance().acquireUrlByKind("bbs.bugs"); + return CloudCenter.getInstance().acquireUrlByKind("bbs.bugs", "http://bbs.fanruan.com/forum-156-1.html"); } public static final MenuKeySet BUG = new MenuKeySet() { diff --git a/designer-base/src/main/java/com/fr/design/actions/community/CenterAction.java b/designer-base/src/main/java/com/fr/design/actions/community/CenterAction.java index 17b2ce3797..6ae03f1a8a 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/CenterAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/CenterAction.java @@ -18,7 +18,7 @@ public class CenterAction extends UpAction { @Override public String getJumpUrl() { - return CloudCenter.getInstance().acquireUrlByKind("bbs.center"); + return CloudCenter.getInstance().acquireUrlByKind("bbs.center", "http://bbs.fanruan.com/events/"); } public static final MenuKeySet CENTER = new MenuKeySet() { diff --git a/designer-base/src/main/java/com/fr/design/actions/community/CusDemandAction.java b/designer-base/src/main/java/com/fr/design/actions/community/CusDemandAction.java index 9e294d859c..007eeb9abf 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/CusDemandAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/CusDemandAction.java @@ -25,7 +25,7 @@ public class CusDemandAction extends UpAction{ @Override public void actionPerformed(ActionEvent arg0) { - String url = CloudCenter.getInstance().acquireUrlByKind("bbs.demand"); + String url = CloudCenter.getInstance().acquireUrlByKind("bbs.demand", "https://market.fanruan.com/demand"); BrowseUtils.browser(url); } diff --git a/designer-base/src/main/java/com/fr/design/actions/community/FacebookFansAction.java b/designer-base/src/main/java/com/fr/design/actions/community/FacebookFansAction.java index 192d921faf..e5ff4dd472 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/FacebookFansAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/FacebookFansAction.java @@ -18,7 +18,7 @@ public class FacebookFansAction extends UpAction { @Override public void actionPerformed(ActionEvent arg0) { - BrowseUtils.browser(CloudCenter.getInstance().acquireUrlByKind("facebook.fans.tw")); + BrowseUtils.browser(CloudCenter.getInstance().acquireUrlByKind("facebook.fans.tw", "https://www.facebook.com/twfinereport")); } public static final MenuKeySet FACEBOOKFANS = new MenuKeySet() { diff --git a/designer-base/src/main/java/com/fr/design/actions/community/NeedAction.java b/designer-base/src/main/java/com/fr/design/actions/community/NeedAction.java index b13e424319..c8b2ccdae1 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/NeedAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/NeedAction.java @@ -18,7 +18,7 @@ public class NeedAction extends AbstractDesignerSSO { @Override public String getJumpUrl() { - return CloudCenter.getInstance().acquireUrlByKind("bbs.needs"); + return CloudCenter.getInstance().acquireUrlByKind("bbs.needs", "http://bbs.fanruan.com/forum-56-1.html"); } public static final MenuKeySet NEED = new MenuKeySet() { diff --git a/designer-base/src/main/java/com/fr/design/actions/community/QuestionAction.java b/designer-base/src/main/java/com/fr/design/actions/community/QuestionAction.java index e3b64d31fd..5b44112254 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/QuestionAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/QuestionAction.java @@ -18,7 +18,7 @@ public class QuestionAction extends AbstractDesignerSSO { @Override public String getJumpUrl() { - return CloudCenter.getInstance().acquireUrlByKind("bbs.questions"); + return CloudCenter.getInstance().acquireUrlByKind("bbs.questions", "http://bbs.fanruan.com/wenda"); } public static final MenuKeySet QUESTIONS = new MenuKeySet() { diff --git a/designer-base/src/main/java/com/fr/design/actions/community/SignAction.java b/designer-base/src/main/java/com/fr/design/actions/community/SignAction.java index 244b838540..8c29ee5e66 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/SignAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/SignAction.java @@ -18,7 +18,7 @@ public class SignAction extends AbstractDesignerSSO { @Override public String getJumpUrl() { - return CloudCenter.getInstance().acquireUrlByKind("bbs.aut"); + return CloudCenter.getInstance().acquireUrlByKind("bbs.aut", "https://bbs.fanruan.com/certification/"); } public static final MenuKeySet SIGN = new MenuKeySet() { diff --git a/designer-base/src/main/java/com/fr/design/actions/community/TechSolutionAction.java b/designer-base/src/main/java/com/fr/design/actions/community/TechSolutionAction.java index 350cad6190..8975555780 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/TechSolutionAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/TechSolutionAction.java @@ -20,7 +20,7 @@ public class TechSolutionAction extends AbstractDesignerSSO { @Override public String getJumpUrl() { - return CloudCenter.getInstance().acquireUrlByKind("bbs.solution"); + return CloudCenter.getInstance().acquireUrlByKind("bbs.solution", "http://bbs.fanruan.com/forum-113-1.html"); } public static final MenuKeySet TSO = new MenuKeySet() { diff --git a/designer-base/src/main/java/com/fr/design/actions/community/TemplateStoreAction.java b/designer-base/src/main/java/com/fr/design/actions/community/TemplateStoreAction.java index 6a01b3f1c4..ac0d71fb2f 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/TemplateStoreAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/TemplateStoreAction.java @@ -46,7 +46,7 @@ public class TemplateStoreAction extends UpdateAction { @Override public void actionPerformed(ActionEvent e) { ComponentCollector.getInstance().collectTepMenuEnterClick(); - String url = CloudCenter.getInstance().acquireUrlByKind("design.market.template"); + String url = CloudCenter.getInstance().acquireUrlByKind("design.market.template", "https://market.fanruan.com/template"); BrowseUtils.browser(url); } } diff --git a/designer-base/src/main/java/com/fr/design/actions/community/UpAction.java b/designer-base/src/main/java/com/fr/design/actions/community/UpAction.java index effc00eb1e..05022ecf8c 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/UpAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/UpAction.java @@ -18,7 +18,7 @@ public class UpAction extends AbstractDesignerSSO { @Override public String getJumpUrl() { - return CloudCenter.getInstance().acquireUrlByKind("bbs.update"); + return CloudCenter.getInstance().acquireUrlByKind("bbs.update", "http://bbs.fanruan.com/forum.php?mod=collection&action=view&ctid=10"); } public static final MenuKeySet UPDATE = new MenuKeySet() { diff --git a/designer-base/src/main/java/com/fr/design/actions/community/WorkOrderCenterAction.java b/designer-base/src/main/java/com/fr/design/actions/community/WorkOrderCenterAction.java index 3e711ac8d7..d1168eca70 100644 --- a/designer-base/src/main/java/com/fr/design/actions/community/WorkOrderCenterAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/WorkOrderCenterAction.java @@ -16,6 +16,6 @@ public class WorkOrderCenterAction extends UpAction { @Override public String getJumpUrl() { - return CloudCenter.getInstance().acquireUrlByKind("bbs.work.order.center"); + return CloudCenter.getInstance().acquireUrlByKind("bbs.work.order.center", "https://service.fanruan.com/ticket"); } } \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/locale/impl/BbsRegisterMark.java b/designer-base/src/main/java/com/fr/design/locale/impl/BbsRegisterMark.java index d5afe26db6..6c97b1e6b5 100644 --- a/designer-base/src/main/java/com/fr/design/locale/impl/BbsRegisterMark.java +++ b/designer-base/src/main/java/com/fr/design/locale/impl/BbsRegisterMark.java @@ -16,11 +16,11 @@ import java.util.Map; public class BbsRegisterMark implements LocaleMark { private final Map map = new HashMap<>(); - private static final String BBS_REGISTER_CN = CloudCenter.getInstance().acquireUrlByKind("bbs.register"); - private static final String BBS_REGISTER_TW = CloudCenter.getInstance().acquireUrlByKind("bbs.register"); - private static final String BBS_REGISTER_EN = CloudCenter.getInstance().acquireUrlByKind("bbs.register.en_US"); - private static final String BBS_REGISTER_KR = CloudCenter.getInstance().acquireUrlByKind("bbs.register.en_US"); - private static final String BBS_REGISTER_JP = CloudCenter.getInstance().acquireUrlByKind("bbs.register.en_US"); + private static final String BBS_REGISTER_CN = CloudCenter.getInstance().acquireUrlByKind("bbs.register", "http://id.fanruan.com/register/register.php?clueSource=activityfr"); + private static final String BBS_REGISTER_TW = CloudCenter.getInstance().acquireUrlByKind("bbs.register", "http://id.fanruan.com/register/register.php?clueSource=activityfr"); + private static final String BBS_REGISTER_EN = CloudCenter.getInstance().acquireUrlByKind("bbs.register.en_US", "https://id.fanruan.com/en/register/register.php"); + private static final String BBS_REGISTER_KR = CloudCenter.getInstance().acquireUrlByKind("bbs.register.en_US", "https://id.fanruan.com/en/register/register.php"); + private static final String BBS_REGISTER_JP = CloudCenter.getInstance().acquireUrlByKind("bbs.register.en_US", "https://id.fanruan.com/en/register/register.php"); public BbsRegisterMark() { map.put(Locale.CHINA, BBS_REGISTER_CN); diff --git a/designer-base/src/main/java/com/fr/design/locale/impl/BbsResetMark.java b/designer-base/src/main/java/com/fr/design/locale/impl/BbsResetMark.java index 4573aac3a6..b44a4e691c 100644 --- a/designer-base/src/main/java/com/fr/design/locale/impl/BbsResetMark.java +++ b/designer-base/src/main/java/com/fr/design/locale/impl/BbsResetMark.java @@ -16,11 +16,11 @@ import java.util.Map; public class BbsResetMark implements LocaleMark { private final Map map = new HashMap<>(); - private static final String BBS_RESET_CN = CloudCenter.getInstance().acquireUrlByKind("bbs.reset"); - private static final String BBS_RESET_TW = CloudCenter.getInstance().acquireUrlByKind("bbs.reset"); - private static final String BBS_RESET_EN = CloudCenter.getInstance().acquireUrlByKind("bbs.reset.en_US"); - private static final String BBS_RESET_KR = CloudCenter.getInstance().acquireUrlByKind("bbs.reset.en_US"); - private static final String BBS_RESET_JP = CloudCenter.getInstance().acquireUrlByKind("bbs.reset.en_US"); + private static final String BBS_RESET_CN = CloudCenter.getInstance().acquireUrlByKind("bbs.reset", "http://id.fanruan.com/forget/forget.php?clue=activityfr"); + private static final String BBS_RESET_TW = CloudCenter.getInstance().acquireUrlByKind("bbs.reset", "http://id.fanruan.com/forget/forget.php?clue=activityfr"); + private static final String BBS_RESET_EN = CloudCenter.getInstance().acquireUrlByKind("bbs.reset.en_US", "https://id.fanruan.com/en/forget/forget.php"); + private static final String BBS_RESET_KR = CloudCenter.getInstance().acquireUrlByKind("bbs.reset.en_US", "https://id.fanruan.com/en/forget/forget.php"); + private static final String BBS_RESET_JP = CloudCenter.getInstance().acquireUrlByKind("bbs.reset.en_US", "https://id.fanruan.com/en/forget/forget.php"); public BbsResetMark() { map.put(Locale.CHINA, BBS_RESET_CN); diff --git a/designer-base/src/main/java/com/fr/design/locale/impl/BbsSpaceMark.java b/designer-base/src/main/java/com/fr/design/locale/impl/BbsSpaceMark.java index 2303dc2509..999c732845 100644 --- a/designer-base/src/main/java/com/fr/design/locale/impl/BbsSpaceMark.java +++ b/designer-base/src/main/java/com/fr/design/locale/impl/BbsSpaceMark.java @@ -16,11 +16,11 @@ import java.util.Map; public class BbsSpaceMark implements LocaleMark { private final Map map = new HashMap<>(); - private static final String BBS_SPACE_CN = CloudCenter.getInstance().acquireUrlByKind("bbs.default"); - private static final String BBS_SPACE_TW = CloudCenter.getInstance().acquireUrlByKind("bbs.default"); - private static final String BBS_SPACE_EN = CloudCenter.getInstance().acquireUrlByKind("bbs.default.en_US"); - private static final String BBS_SPACE_KR = CloudCenter.getInstance().acquireUrlByKind("bbs.default.en_US"); - private static final String BBS_SPACE_JP = CloudCenter.getInstance().acquireUrlByKind("bbs.default.en_US"); + private static final String BBS_SPACE_CN = CloudCenter.getInstance().acquireUrlByKind("bbs.default", "http://bbs.fanruan.com/home.php?mod=space&do=pm"); + private static final String BBS_SPACE_TW = CloudCenter.getInstance().acquireUrlByKind("bbs.default", "http://bbs.fanruan.com/home.php?mod=space&do=pm"); + private static final String BBS_SPACE_EN = CloudCenter.getInstance().acquireUrlByKind("bbs.default.en_US", "https://community.finereport.com/home.php?mod=space&do=pm"); + private static final String BBS_SPACE_KR = CloudCenter.getInstance().acquireUrlByKind("bbs.default.en_US", "https://community.finereport.com/home.php?mod=space&do=pm"); + private static final String BBS_SPACE_JP = CloudCenter.getInstance().acquireUrlByKind("bbs.default.en_US", "https://community.finereport.com/home.php?mod=space&do=pm"); public BbsSpaceMark() { map.put(Locale.CHINA, BBS_SPACE_CN); diff --git a/designer-base/src/main/java/com/fr/design/locale/impl/BugNeedMark.java b/designer-base/src/main/java/com/fr/design/locale/impl/BugNeedMark.java index 41822d19cb..f67b4e6fe0 100644 --- a/designer-base/src/main/java/com/fr/design/locale/impl/BugNeedMark.java +++ b/designer-base/src/main/java/com/fr/design/locale/impl/BugNeedMark.java @@ -14,7 +14,7 @@ import java.util.Map; */ public class BugNeedMark implements LocaleMark { private Map map = new HashMap<>(); - private static final String TW_BUG_AND_NEEDS = CloudCenter.getInstance().acquireUrlByKind("bbs.bug.needs.zh_TW"); + private static final String TW_BUG_AND_NEEDS = CloudCenter.getInstance().acquireUrlByKind("bbs.bug.needs.zh_TW", "https://fanruanhelp.zendesk.com/hc/zh-tw/requests/new"); public BugNeedMark() { map.put(Locale.TAIWAN, TW_BUG_AND_NEEDS); diff --git a/designer-base/src/main/java/com/fr/design/locale/impl/TechSupportMark.java b/designer-base/src/main/java/com/fr/design/locale/impl/TechSupportMark.java index 6d15764b5f..2ffb9f2307 100644 --- a/designer-base/src/main/java/com/fr/design/locale/impl/TechSupportMark.java +++ b/designer-base/src/main/java/com/fr/design/locale/impl/TechSupportMark.java @@ -14,8 +14,8 @@ import java.util.Map; */ public class TechSupportMark implements LocaleMark { private Map map = new HashMap<>(); - private static final String EN_TECH_SUPPORT = CloudCenter.getInstance().acquireUrlByKind("bbs.tech.support.en_US"); - private static final String TW_TECH_SUPPORT = CloudCenter.getInstance().acquireUrlByKind("bbs.tech.support.zh_TW"); + private static final String EN_TECH_SUPPORT = CloudCenter.getInstance().acquireUrlByKind("bbs.tech.support.en_US", "https://fanruanhelp.zendesk.com/hc/en-us"); + private static final String TW_TECH_SUPPORT = CloudCenter.getInstance().acquireUrlByKind("bbs.tech.support.zh_TW", "https://fanruanhelp.zendesk.com/hc/zh-tw"); public TechSupportMark() { map.put(Locale.US, EN_TECH_SUPPORT); diff --git a/designer-base/src/main/java/com/fr/design/locale/impl/UserInfoMark.java b/designer-base/src/main/java/com/fr/design/locale/impl/UserInfoMark.java index c72f6a4ff0..a7b45b4904 100644 --- a/designer-base/src/main/java/com/fr/design/locale/impl/UserInfoMark.java +++ b/designer-base/src/main/java/com/fr/design/locale/impl/UserInfoMark.java @@ -15,11 +15,11 @@ import java.util.Map; public class UserInfoMark implements LocaleMark { private Map map = new HashMap<>(); - private static final String CN_LOGIN_HTML = CloudCenter.getInstance().acquireUrlByKind("frlogin.cn"); - private static final String EN_LOGIN_HTML = CloudCenter.getInstance().acquireUrlByKind("frlogin.en"); - private static final String TW_LOGIN_HTML = CloudCenter.getInstance().acquireUrlByKind("frlogin.tw"); - private static final String JP_LOGIN_HTML = CloudCenter.getInstance().acquireUrlByKind("frlogin.jp"); - private static final String KR_LOGIN_HTML = CloudCenter.getInstance().acquireUrlByKind("frlogin.kr"); + private static final String CN_LOGIN_HTML = CloudCenter.getInstance().acquireUrlByKind("frlogin.cn", "http://www.finereport.com/product/active?utm_source=direct&utm_medium=exe"); + private static final String EN_LOGIN_HTML = CloudCenter.getInstance().acquireUrlByKind("frlogin.en", "http://www.finereport.com/en/activation"); + private static final String TW_LOGIN_HTML = CloudCenter.getInstance().acquireUrlByKind("frlogin.tw", "http://www.finereport.com/tw/products/frlogin"); + private static final String JP_LOGIN_HTML = CloudCenter.getInstance().acquireUrlByKind("frlogin.jp", "http://www.finereport.com/jp/trial/"); + private static final String KR_LOGIN_HTML = CloudCenter.getInstance().acquireUrlByKind("frlogin.kr", "http://www.finereport.com/kr/activation/"); public UserInfoMark() { map.put(Locale.CHINA, CN_LOGIN_HTML); diff --git a/designer-base/src/main/java/com/fr/design/locale/impl/VideoMark.java b/designer-base/src/main/java/com/fr/design/locale/impl/VideoMark.java index 8e086a569c..2521c82c23 100644 --- a/designer-base/src/main/java/com/fr/design/locale/impl/VideoMark.java +++ b/designer-base/src/main/java/com/fr/design/locale/impl/VideoMark.java @@ -15,9 +15,9 @@ import java.util.Map; public class VideoMark implements LocaleMark { private Map map = new HashMap<>(); - private static final String VIDEO_EN = CloudCenter.getInstance().acquireUrlByKind("bbs.video.en_US"); - private static final String VIDEO_CN = CloudCenter.getInstance().acquireUrlByKind("bbs.video.zh_CN"); - private static final String VIDEO_TW = CloudCenter.getInstance().acquireUrlByKind("bbs.video.zh_TW"); + private static final String VIDEO_EN = CloudCenter.getInstance().acquireUrlByKind("bbs.video.en_US", "http://www.finereport.com/en/Learning-path"); + private static final String VIDEO_CN = CloudCenter.getInstance().acquireUrlByKind("bbs.video.zh_CN", "https://edu.fanruan.com/video?class1=16&class2=0"); + private static final String VIDEO_TW = CloudCenter.getInstance().acquireUrlByKind("bbs.video.zh_TW", "http://www.finereport.com/tw/video"); public VideoMark() { map.put(Locale.CHINA, VIDEO_CN); diff --git a/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java b/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java index 80d6462fab..1f696ab8c3 100644 --- a/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java +++ b/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java @@ -32,6 +32,9 @@ public abstract class AbstractDesignerSSO extends UpdateAction { @Override public void actionPerformed(ActionEvent event) { String url = getJumpUrl(); + if (StringUtils.isEmpty(url)) { + return; + } if (!SupportOSImpl.DESIGNER_LOGIN.support()) { BrowseUtils.browser(url); return; From 24f4a68ecaf4b7be2fef995f690f31eeb2a9e004 Mon Sep 17 00:00:00 2001 From: pengda Date: Wed, 9 Jun 2021 19:12:28 +0800 Subject: [PATCH 113/148] =?UTF-8?q?REPORT-53651=20=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=A3=80=E6=B5=8B=E5=8F=8A=E5=90=8C=E6=AD=A5?= =?UTF-8?q?-=E6=8F=92=E4=BB=B6=E5=90=8C=E6=AD=A5=E6=88=90=E5=8A=9F?= =?UTF-8?q?=E5=90=8E=EF=BC=8C=E8=AE=BE=E8=AE=A1=E5=99=A8=E6=B2=A1=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E9=87=8D=E5=90=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../update/actions/SyncFileProcess.java | 17 ++++++++------ .../versioncheck/VersionCheckUtils.java | 5 +++-- .../java/com/fr/env/CheckServiceDialog.java | 8 +++---- .../com/fr/env/SyncFailedPluginsDialog.java | 22 +++++++++++++------ 4 files changed, 32 insertions(+), 20 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java b/designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java index ea2db13989..b4a1b49071 100644 --- a/designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java +++ b/designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java @@ -5,6 +5,7 @@ import com.fr.decision.update.info.UpdateCallBack; import com.fr.decision.update.info.UpdateProgressCallBack; import com.fr.design.i18n.Toolkit; import com.fr.design.versioncheck.VersionCheckUtils; +import com.fr.json.JSONArray; import com.fr.log.FineLoggerFactory; import java.util.concurrent.ExecutionException; import javax.swing.JProgressBar; @@ -13,6 +14,7 @@ import javax.swing.SwingWorker; public abstract class SyncFileProcess extends SwingWorker { private String buildNo; private JProgressBar bar; + private JSONArray syncFailedPlugins; public SyncFileProcess(JProgressBar bar, String buildNo) { this.bar = bar; @@ -22,13 +24,10 @@ public abstract class SyncFileProcess extends SwingWorker { @Override protected Boolean doInBackground() throws Exception { UpdateCallBack callBack = new UpdateProgressCallBack(bar); - boolean result = SyncExecutor.getInstance().execute(callBack, buildNo); - if (result) { - bar.setValue(0); - bar.setString(Toolkit.i18nText("Fine-Design_Basic_Sync_Plugins")); - VersionCheckUtils.syncPlugins(VersionCheckUtils.checkLocalAndRemotePlugin()); - } - return result; + bar.setValue(0); + bar.setString(Toolkit.i18nText("Fine-Design_Basic_Sync_Plugins")); + syncFailedPlugins = VersionCheckUtils.syncPlugins(VersionCheckUtils.checkLocalAndRemotePlugin()); + return SyncExecutor.getInstance().execute(callBack, buildNo); } @Override @@ -49,6 +48,10 @@ public abstract class SyncFileProcess extends SwingWorker { } } + public JSONArray getSyncFailedPlugins(){ + return syncFailedPlugins; + } + /** * 下载成功 */ diff --git a/designer-base/src/main/java/com/fr/design/versioncheck/VersionCheckUtils.java b/designer-base/src/main/java/com/fr/design/versioncheck/VersionCheckUtils.java index 11780409a7..46622c44d8 100644 --- a/designer-base/src/main/java/com/fr/design/versioncheck/VersionCheckUtils.java +++ b/designer-base/src/main/java/com/fr/design/versioncheck/VersionCheckUtils.java @@ -243,10 +243,11 @@ public class VersionCheckUtils { return differentPlugins; } - public static void syncPlugins(JSONArray differentPlugins) { + public static JSONArray syncPlugins(JSONArray differentPlugins) { Set uninstallFailed = uninstallPlugins(differentPlugins); List plugins = getSyncPlugins(differentPlugins, uninstallFailed); installPlugins(plugins); + return getPluginsSyncFailed(differentPlugins); } private static List getSyncPlugins(JSONArray differentPlugins, Set uninstallFailed) { @@ -302,7 +303,7 @@ public class VersionCheckUtils { return uninstallFailedID; } - public static JSONArray getPluginsSyncFailed(JSONArray differentPlugins){ + private static JSONArray getPluginsSyncFailed(JSONArray differentPlugins){ JSONArray pluginsNeedSync = JSONArray.create(); List localPlugins = PluginManager.getContexts(); Map localPluginsInfo = new HashMap<>(); diff --git a/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java b/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java index 7e9e74ebcf..222a9a2a57 100644 --- a/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java +++ b/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java @@ -322,14 +322,15 @@ public class CheckServiceDialog extends JDialog implements ActionListener { final JFrame frame = DesignerContext.getDesignerFrame(); final RestartHelper helper = new RestartHelper(); FineProcessContext.getParentPipe().fire(FineProcessEngineEvent.DESTROY); + SyncFailedPluginsDialog syncFailedPluginsDialog = new SyncFailedPluginsDialog(DesignerContext.getDesignerFrame(),JSONArray.create()); new SyncFileProcess(progressBar, remoteBuildNo) { @Override public void onDownloadSuccess() { deleteForDesignerUpdate(installLib); progressBar.setVisible(false); - JSONArray syncFailedPlugins = VersionCheckUtils.getPluginsSyncFailed(differentPlugins); + JSONArray syncFailedPlugins = getSyncFailedPlugins(); if (syncFailedPlugins.size() > 0) { - SyncFailedPluginsDialog syncFailedPluginsDialog = new SyncFailedPluginsDialog(DesignerContext.getDesignerFrame(), syncFailedPlugins); + syncFailedPluginsDialog.showSyncFailedPluginsInfo(syncFailedPlugins); syncFailedPluginsDialog.setVisible(true); } helper.restartForUpdate(frame); @@ -352,8 +353,7 @@ public class CheckServiceDialog extends JDialog implements ActionListener { protected JSONArray doInBackground() { progressBar.setString(Toolkit.i18nText("Fine-Design_Basic_Sync_Plugins")); progressBar.setValue(0); - VersionCheckUtils.syncPlugins(differentPlugins); - return VersionCheckUtils.getPluginsSyncFailed(differentPlugins); + return VersionCheckUtils.syncPlugins(differentPlugins); } @Override diff --git a/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java b/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java index 9bf63460da..0a9faab55a 100644 --- a/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java +++ b/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java @@ -38,6 +38,7 @@ import javax.swing.UIManager; public class SyncFailedPluginsDialog extends JDialog { private UILabel detailsLabel; private JScrollPane scrollPane; + private UITextArea detailsTextArea; public SyncFailedPluginsDialog(Frame parent, JSONArray syncFailedPlugins) { super(parent, true); JPanel body = FRGUIPaneFactory.createBorderLayout_L_Pane(); @@ -70,14 +71,9 @@ public class SyncFailedPluginsDialog extends JDialog { detailsTitlePanel.add(detailsLabel); detailsTitlePanel.setBorder(BorderFactory.createEmptyBorder(0,0,5,0)); - UITextArea detailsTextArea = new UITextArea(); - StringBuilder detailsText = new StringBuilder(StringUtils.EMPTY); - for (int i = 0; i < syncFailedPlugins.size(); i++) { - JSONObject plugin = syncFailedPlugins.getJSONObject(i); - detailsText.append(plugin.getString("name")).append(",").append(Toolkit.i18nText("Fine-Design_Basic_Sync_Server_Version")).append(plugin.getString("version")).append("\n"); - } - detailsTextArea.setText(detailsText.toString()); + detailsTextArea = new UITextArea(); detailsTextArea.setEditable(false); + showSyncFailedPluginsInfo(syncFailedPlugins); scrollPane = new JScrollPane(detailsTextArea); centerPanel.add(detailsTitlePanel,BorderLayout.NORTH); centerPanel.add(scrollPane,BorderLayout.CENTER); @@ -98,6 +94,18 @@ public class SyncFailedPluginsDialog extends JDialog { GUICoreUtils.centerWindow(this); } + public void showSyncFailedPluginsInfo(JSONArray syncFailedPlugins){ + if(null == syncFailedPlugins){ + return; + } + StringBuilder detailsText = new StringBuilder(StringUtils.EMPTY); + for (int i = 0; i < syncFailedPlugins.size(); i++) { + JSONObject plugin = syncFailedPlugins.getJSONObject(i); + detailsText.append(plugin.getString("name")).append(",").append(Toolkit.i18nText("Fine-Design_Basic_Sync_Server_Version")).append(plugin.getString("version")).append("\n"); + } + detailsTextArea.setText(detailsText.toString()); + } + private MouseListener detailsLabelClickListener = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { From 3c86ba1aeb5ea4ac373d40574621de96ae9cdc69 Mon Sep 17 00:00:00 2001 From: Lanlan Date: Wed, 9 Jun 2021 19:19:47 +0800 Subject: [PATCH 114/148] fix --- .../src/main/java/com/fr/design/login/AbstractDesignerSSO.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java b/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java index 1f696ab8c3..80d6462fab 100644 --- a/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java +++ b/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java @@ -32,9 +32,6 @@ public abstract class AbstractDesignerSSO extends UpdateAction { @Override public void actionPerformed(ActionEvent event) { String url = getJumpUrl(); - if (StringUtils.isEmpty(url)) { - return; - } if (!SupportOSImpl.DESIGNER_LOGIN.support()) { BrowseUtils.browser(url); return; From a119a7b16e6a5e712c2f9331d42f1d6a01cd3c64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=B2=B3?= <445798420@qq.com> Date: Thu, 10 Jun 2021 09:07:01 +0800 Subject: [PATCH 115/148] =?UTF-8?q?KERNEL-7934=20win10=E5=AF=8C=E6=96=87?= =?UTF-8?q?=E6=9C=AC=E7=9A=84jxbrowser=E7=BB=84=E4=BB=B6=E4=BD=BF=E7=94=A8?= =?UTF-8?q?LIGHTWEIGHT=E6=B8=B2=E6=9F=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/ui/ModernUIPane.java | 29 ++++++++++++------- .../richText/VanChartRichEditorPane.java | 5 +++- .../richText/VanChartRichTextDialog.java | 2 +- .../richText/VanChartRichTextPane.java | 2 +- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java b/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java index 0afe2ccd31..084820a13e 100644 --- a/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java +++ b/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java @@ -8,6 +8,7 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.web.struct.AssembleComponent; import com.teamdev.jxbrowser.chromium.Browser; +import com.teamdev.jxbrowser.chromium.BrowserType; import com.teamdev.jxbrowser.chromium.JSValue; import com.teamdev.jxbrowser.chromium.events.LoadListener; import com.teamdev.jxbrowser.chromium.events.ScriptContextAdapter; @@ -18,11 +19,11 @@ import com.teamdev.jxbrowser.chromium.swing.BrowserView; import javax.swing.JDialog; import javax.swing.SwingUtilities; import javax.swing.WindowConstants; +import java.util.Map; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.util.Map; /** * @author richie @@ -37,11 +38,11 @@ public class ModernUIPane extends BasicPane { private String variable = "data"; private String expression = "update()"; - private ModernUIPane() { - initialize(); + private ModernUIPane(BrowserType browserType) { + initialize(browserType); } - private void initialize() { + private void initialize(BrowserType browserType) { if (browser == null) { setLayout(new BorderLayout()); Assistant.addChromiumSwitches("--disable-google-traffic"); @@ -76,10 +77,10 @@ public class ModernUIPane extends BasicPane { } }); Assistant.addChromiumSwitches("--remote-debugging-port=9222"); - initializeBrowser(); + initializeBrowser(browserType); add(new BrowserView(browser), BorderLayout.CENTER); } else { - initializeBrowser(); + initializeBrowser(browserType); add(new BrowserView(browser), BorderLayout.CENTER); } } @@ -97,8 +98,8 @@ public class ModernUIPane extends BasicPane { debugger.loadURL(browser.getRemoteDebuggingURL()); } - private void initializeBrowser() { - browser = new Browser(); + private void initializeBrowser(BrowserType browserType) { + browser = new Browser(browserType); // 初始化的时候,就把命名空间对象初始化好,确保window.a.b.c("a.b.c"为命名空间)对象都是初始化过的 browser.addScriptContextListener(new ScriptContextAdapter() { @Override @@ -145,14 +146,22 @@ public class ModernUIPane extends BasicPane { public T update() { JSValue jsValue = browser.executeJavaScriptAndReturnValue("window." + namespace + "." + expression); if (jsValue.isObject()) { - return (T)jsValue.asJavaObject(); + return (T) jsValue.asJavaObject(); } return null; } public static class Builder { - private ModernUIPane pane = new ModernUIPane<>(); + private ModernUIPane pane; + + public Builder() { + this(BrowserType.HEAVYWEIGHT); + } + + public Builder(BrowserType browserType) { + this.pane = new ModernUIPane<>(browserType); + } public Builder prepare(ScriptContextListener contextListener) { pane.browser.addScriptContextListener(contextListener); diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/richText/VanChartRichEditorPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/richText/VanChartRichEditorPane.java index 312c24e84b..f1d7bfcbf6 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/richText/VanChartRichEditorPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/richText/VanChartRichEditorPane.java @@ -20,8 +20,10 @@ import com.fr.plugin.chart.custom.CustomDefinition; import com.fr.plugin.chart.custom.type.CustomPlotType; import com.fr.plugin.chart.type.TextAlign; import com.fr.stable.StringUtils; +import com.fr.third.org.apache.commons.lang3.SystemUtils; import com.fr.van.chart.designer.PlotFactory; import com.teamdev.jxbrowser.chromium.Browser; +import com.teamdev.jxbrowser.chromium.BrowserType; import com.teamdev.jxbrowser.chromium.JSValue; import com.teamdev.jxbrowser.chromium.events.ScriptContextAdapter; import com.teamdev.jxbrowser.chromium.events.ScriptContextEvent; @@ -152,7 +154,8 @@ public class VanChartRichEditorPane { } public static ModernUIPane initPane(VanChartRichEditorModel model) { - return new ModernUIPane.Builder() + BrowserType type = SystemUtils.IS_OS_WINDOWS_10 ? BrowserType.LIGHTWEIGHT : BrowserType.HEAVYWEIGHT; + return new ModernUIPane.Builder(type) .prepare(new ScriptContextAdapter() { public void onScriptContextCreated(ScriptContextEvent event) { browser = event.getBrowser(); diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/richText/VanChartRichTextDialog.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/richText/VanChartRichTextDialog.java index 993c4bc2ea..509055842a 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/richText/VanChartRichTextDialog.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/richText/VanChartRichTextDialog.java @@ -10,7 +10,7 @@ import java.awt.Frame; public class VanChartRichTextDialog extends BasicDialog { - public static final Dimension DEFAULT = new Dimension(960, 800); + public static final Dimension DEFAULT = new Dimension(960, 700); public VanChartRichTextDialog(Frame parent, BasicPane pane) { super(parent, pane); diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/richText/VanChartRichTextPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/richText/VanChartRichTextPane.java index b6bce1145f..8b3d063960 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/richText/VanChartRichTextPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/richText/VanChartRichTextPane.java @@ -20,7 +20,7 @@ public class VanChartRichTextPane extends BasicBeanPane { private static final int FIELD_PANE_H = 270; private static final int RICH_EDITOR_W = 940; - private static final int RICH_EDITOR_H = 460; + private static final int RICH_EDITOR_H = 400; private VanChartFieldListPane fieldListPane; private VanChartFieldAttrPane fieldAttrPane; From 669ad6eebe95af6963d3b4ff5918e12f243a0ffc Mon Sep 17 00:00:00 2001 From: vito Date: Thu, 10 Jun 2021 10:02:53 +0800 Subject: [PATCH 116/148] =?UTF-8?q?REPORT-53731=20=E5=85=B3=E9=97=AD?= =?UTF-8?q?=E7=AA=97=E5=8F=A3=E8=A7=A6=E5=8F=91doCancel=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/dialog/UIExpandDialog.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/dialog/UIExpandDialog.java b/designer-base/src/main/java/com/fr/design/dialog/UIExpandDialog.java index 60ee096c3d..d2a1ec85f9 100644 --- a/designer-base/src/main/java/com/fr/design/dialog/UIExpandDialog.java +++ b/designer-base/src/main/java/com/fr/design/dialog/UIExpandDialog.java @@ -91,7 +91,7 @@ public class UIExpandDialog extends UIDialog { public void initComponents(int messageType, String message, String detail, boolean isModal, boolean isExpand, DialogActionListener l) { - + applyClosingAction(); setLayout(new BorderLayout(GAP, GAP)); setResizable(false); setModal(isModal); From b2df27010f058c01fa9a0b96eaeaf54fb8560521 Mon Sep 17 00:00:00 2001 From: Lanlan Date: Thu, 10 Jun 2021 10:05:12 +0800 Subject: [PATCH 117/148] =?UTF-8?q?REPORT-53714=20=E6=B5=B7=E5=A4=96?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E4=B8=8D=E6=98=BE=E7=A4=BA=E5=BC=95=E5=AF=BC?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/login/guide/DesignerGuideHelper.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/login/guide/DesignerGuideHelper.java b/designer-base/src/main/java/com/fr/design/login/guide/DesignerGuideHelper.java index f6112e7147..b55469af11 100644 --- a/designer-base/src/main/java/com/fr/design/login/guide/DesignerGuideHelper.java +++ b/designer-base/src/main/java/com/fr/design/login/guide/DesignerGuideHelper.java @@ -1,5 +1,6 @@ package com.fr.design.login.guide; +import com.fr.base.FRContext; import com.fr.design.DesignerEnvManager; import com.fr.design.dialog.UIDialog; import com.fr.design.event.DesignerOpenedListener; @@ -32,7 +33,7 @@ public class DesignerGuideHelper { } public static void prepareShowGuideDialog() { - if (!SupportOSImpl.DESIGNER_LOGIN.support()) { + if (!SupportOSImpl.DESIGNER_LOGIN.support() || !FRContext.isChineseEnv()) { return; } if (isActivatedForOneWeek()) { From db5d7270fd7e06b96839171c9b48ff5ab536d055 Mon Sep 17 00:00:00 2001 From: vito Date: Thu, 10 Jun 2021 10:15:16 +0800 Subject: [PATCH 118/148] =?UTF-8?q?REPORT-53739=20=E6=8F=90=E4=BE=9B?= =?UTF-8?q?=E5=8D=95=E6=8C=89=E9=92=AEui?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/dialog/UIExpandDialog.java | 27 ++++++++++++------- .../mainframe/app/DesignerAppUtils.java | 1 + 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/dialog/UIExpandDialog.java b/designer-base/src/main/java/com/fr/design/dialog/UIExpandDialog.java index d2a1ec85f9..328b59f729 100644 --- a/designer-base/src/main/java/com/fr/design/dialog/UIExpandDialog.java +++ b/designer-base/src/main/java/com/fr/design/dialog/UIExpandDialog.java @@ -6,6 +6,7 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextarea.UITextArea; import com.fr.design.i18n.Toolkit; import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.stable.StringUtils; import javax.swing.BorderFactory; import javax.swing.Icon; @@ -64,7 +65,7 @@ public class UIExpandDialog extends UIDialog { private final UILabel narrow = new UILabel(); private final UILabel narrowHit = new UILabel(); private final UIButton buttonOK; - private final UIButton buttonCancel; + private UIButton buttonCancel = null; private JLabel msg; private final UITextArea textArea = new UITextArea(); @@ -73,7 +74,9 @@ public class UIExpandDialog extends UIDialog { String okText, String cancelText, boolean isExpand) { super(owner); buttonOK = new UIButton(okText); - buttonCancel = new UIButton(cancelText); + if (!StringUtils.isEmpty(cancelText)) { + buttonCancel = new UIButton(cancelText); + } setTitle(title); setModal(isModal); initComponents(messageType, message, detail, isModal, isExpand, null); @@ -82,7 +85,9 @@ public class UIExpandDialog extends UIDialog { public UIExpandDialog(Builder builder) { super(builder.owner); buttonOK = new UIButton(builder.okText); - buttonCancel = new UIButton(builder.cancelText); + if (!StringUtils.isEmpty(builder.cancelText)) { + buttonCancel = new UIButton(builder.cancelText); + } setTitle(builder.title); setModal(builder.modal); initComponents(builder.messageType, builder.message, builder.detail, @@ -133,7 +138,9 @@ public class UIExpandDialog extends UIDialog { // 操作面板 JPanel actionPanel = new JPanel(); actionPanel.setLayout(new FlowLayout(FlowLayout.CENTER, MARGIN, MARGIN)); - actionPanel.add(buttonCancel); + if (buttonCancel != null) { + actionPanel.add(buttonCancel); + } actionPanel.add(buttonOK); add(actionPanel, BorderLayout.SOUTH); @@ -185,11 +192,13 @@ public class UIExpandDialog extends UIDialog { } }); - buttonCancel.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - doCancel(); - } - }); + if (buttonCancel != null) { + buttonCancel.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + doCancel(); + } + }); + } } protected Icon getIconForType(int messageType) { diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java b/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java index e0dfb3b6cb..b9f84d23a7 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java @@ -178,6 +178,7 @@ public class DesignerAppUtils { } else { UIExpandDialog.Builder().owner(DesignerContext.getDesignerFrame()) .title(Toolkit.i18nText("Fine-Design_Basic_Tool_Tips")) + .cancelText(StringUtils.EMPTY) .message(Toolkit.i18nText("Fine-Design_Template_Plugin_Error_Message_Remote")) .detail(detail) .build() From 0dc7ca9c11eeec0a4fed9af710bab065e6905dde Mon Sep 17 00:00:00 2001 From: Lanlan Date: Thu, 10 Jun 2021 10:47:36 +0800 Subject: [PATCH 119/148] =?UTF-8?q?=E5=A6=82=E6=9E=9C=E5=AD=98=E5=9C=A8?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=8D=87=E7=BA=A7=E7=9A=84=E5=BC=B9=E7=AA=97?= =?UTF-8?q?=EF=BC=8C=E5=88=99=E4=B8=8D=E6=98=BE=E7=A4=BA=E5=BC=95=E5=AF=BC?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/login/guide/DesignerGuideHelper.java | 4 +++- .../update/push/DesignerPushUpdateManager.java | 15 +++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/login/guide/DesignerGuideHelper.java b/designer-base/src/main/java/com/fr/design/login/guide/DesignerGuideHelper.java index b55469af11..8adebba4f1 100644 --- a/designer-base/src/main/java/com/fr/design/login/guide/DesignerGuideHelper.java +++ b/designer-base/src/main/java/com/fr/design/login/guide/DesignerGuideHelper.java @@ -6,6 +6,7 @@ import com.fr.design.dialog.UIDialog; import com.fr.design.event.DesignerOpenedListener; import com.fr.design.mainframe.DesignerContext; import com.fr.design.os.impl.SupportOSImpl; +import com.fr.design.update.push.DesignerPushUpdateManager; import com.fr.stable.StringUtils; import javax.swing.WindowConstants; @@ -33,7 +34,8 @@ public class DesignerGuideHelper { } public static void prepareShowGuideDialog() { - if (!SupportOSImpl.DESIGNER_LOGIN.support() || !FRContext.isChineseEnv()) { + // 如果存在更新升级的弹窗,则不显示引导页面 + if (!SupportOSImpl.DESIGNER_LOGIN.support() || !FRContext.isChineseEnv() || DesignerPushUpdateManager.getInstance().isShouldPopUp()) { return; } if (isActivatedForOneWeek()) { diff --git a/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java index efd809e791..6214f1cfa9 100644 --- a/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java +++ b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java @@ -27,6 +27,8 @@ public class DesignerPushUpdateManager { private DesignerUpdateInfo updateInfo; + private boolean shouldPopUp = false; + private DesignerPushUpdateManager() { } @@ -91,13 +93,14 @@ public class DesignerPushUpdateManager { * 检查更新,如果有合适的更新版本,则弹窗 */ private void checkAndPop() { + if (!shouldPopUp()) { + this.shouldPopUp = true; + FineLoggerFactory.getLogger().debug("skip push update"); + return; + } checkUpdateService.execute(new Runnable() { @Override public void run() { - if (!shouldPopUp()) { - FineLoggerFactory.getLogger().debug("skip push update"); - return; - } final DesignerFrame designerFrame = DesignerContext.getDesignerFrame(); DesignerPushUpdateDialog.createAndShow(designerFrame, updateInfo); } @@ -139,6 +142,10 @@ public class DesignerPushUpdateManager { return StringUtils.isNotEmpty(prefix) && fullCurrentVersion.contains(SPLIT_CHAR); } + public boolean isShouldPopUp() { + return shouldPopUp; + } + /** * 跳转到更新升级窗口,并自动开始更新 */ From 8d537ff7c6eadac2793c94df3d9a703fce8759f4 Mon Sep 17 00:00:00 2001 From: hades Date: Thu, 10 Jun 2021 11:05:03 +0800 Subject: [PATCH 120/148] =?UTF-8?q?REPORT-53734=20=E3=80=90=E6=99=BA?= =?UTF-8?q?=E8=83=BD=E8=81=94=E5=8A=A8=E3=80=91=E7=BB=84=E4=BB=B6=E5=90=8D?= =?UTF-8?q?/=E6=95=B0=E6=8D=AE=E9=9B=86=E5=90=8D=E6=9B=BF=E6=8D=A2?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E5=8F=91=E7=8E=B0=E6=9B=BF=E6=8D=A2=E5=A4=9A?= =?UTF-8?q?=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/start/module/DesignerActivator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java index 0427fe3c4d..5e4887aa35 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java @@ -165,7 +165,6 @@ public class DesignerActivator extends Activator implements Prepare { storePassport(); AlphaFineHelper.switchConfig4Locale(); RecoverManager.register(new RecoverForDesigner()); - ContentReplacerCenter.getInstance().register(); pushUpdateTask.run(); } @@ -455,5 +454,6 @@ public class DesignerActivator extends Activator implements Prepare { @Override public void prepare() { LoginAuthServer.getInstance().start(); + ContentReplacerCenter.getInstance().register(); } } From 7dd528f13314b0c3b19d22ebff302faebb957999 Mon Sep 17 00:00:00 2001 From: hades Date: Thu, 10 Jun 2021 11:08:41 +0800 Subject: [PATCH 121/148] =?UTF-8?q?REPORT-52936=20saveWorker=E5=8E=BB?= =?UTF-8?q?=E6=8E=89=E5=AF=B9=E6=A8=A1=E6=9D=BFid=E7=9A=84=E4=BE=9D?= =?UTF-8?q?=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/actions/file/WebPreviewUtils.java | 6 +++--- .../com/fr/design/file/MutilTempalteTabPane.java | 2 +- .../java/com/fr/design/mainframe/JTemplate.java | 16 ++++++++++------ .../fr/design/mainframe/check/CheckButton.java | 6 +++--- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/file/WebPreviewUtils.java b/designer-base/src/main/java/com/fr/design/actions/file/WebPreviewUtils.java index 8f8d4ae139..2503db1de2 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/WebPreviewUtils.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/WebPreviewUtils.java @@ -76,7 +76,7 @@ public final class WebPreviewUtils { browserTemplate(jt, baseRoute, map, actionType); } }); - worker.start(jt.getTarget().getTemplateID()); + worker.start(jt.getRuntimeId()); return; } browserTemplate(jt, baseRoute, map, actionType); @@ -97,7 +97,7 @@ public final class WebPreviewUtils { ); if (OK_OPTION == selVal) { CallbackSaveWorker worker = jt.saveAs(); - worker.start(jt.getTarget().getTemplateID()); + worker.start(jt.getRuntimeId()); worker.addSuccessCallback(new Runnable() { @Override public void run() { @@ -125,7 +125,7 @@ public final class WebPreviewUtils { browseUrl(jt.getEditingFILE(), baseRoute, map, actionType, jt); } }); - worker.start(jt.getTarget().getTemplateID()); + worker.start(jt.getRuntimeId()); } } } diff --git a/designer-base/src/main/java/com/fr/design/file/MutilTempalteTabPane.java b/designer-base/src/main/java/com/fr/design/file/MutilTempalteTabPane.java index 9fa676f94e..87b7f2f25c 100644 --- a/designer-base/src/main/java/com/fr/design/file/MutilTempalteTabPane.java +++ b/designer-base/src/main/java/com/fr/design/file/MutilTempalteTabPane.java @@ -706,7 +706,7 @@ public class MutilTempalteTabPane extends JComponent { closeTpl(specifiedTemplate); } }); - worker.start(specifiedTemplate.getTarget().getTemplateID()); + worker.start(specifiedTemplate.getRuntimeId()); } else if (returnVal == JOptionPane.NO_OPTION) { closeTpl(specifiedTemplate); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java index 3c62f3b583..9e8df6b85f 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java @@ -129,6 +129,11 @@ public abstract class JTemplate> private volatile boolean opening = false; private volatile boolean openFailed = false; + /** + * UI界面模板运行时唯一的id 不存储在模板中 仅在运行时使用 模板界面上关闭就不关注了 + */ + private final String runtimeId = UUID.randomUUID().toString(); + private PluginEventListener pluginListener; public JTemplate() { @@ -1492,10 +1497,6 @@ public abstract class JTemplate> editingFILE = fileChooser.getSelectedFILE(); } - //收集和生成templateID 因为是另存为操作 无论怎么样都需要重新生成templateID - // TODO Hades https://work.fineres.com/browse/REPORT-52936 - // initForCollect(); - FILE finalEditingFILE = editingFILE; CallbackSaveWorker worker = new CallbackSaveWorker(new Callable() { @Override @@ -1587,13 +1588,13 @@ public abstract class JTemplate> @Override public void saveDirectly() { CallbackSaveWorker worker = save(); - worker.start(this.template.getTemplateID()); + worker.start(getRuntimeId()); } @Override public void saveAsDirectly() { CallbackSaveWorker worker = saveAs(); - worker.start(this.template.getTemplateID()); + worker.start(getRuntimeId()); } @Override @@ -1634,4 +1635,7 @@ public abstract class JTemplate> return !isSaving() && !isOpening() && !isOpenFailed(); } + public String getRuntimeId() { + return runtimeId; + } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/check/CheckButton.java b/designer-base/src/main/java/com/fr/design/mainframe/check/CheckButton.java index 7757ea2f42..0ec50ef248 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/check/CheckButton.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/check/CheckButton.java @@ -116,7 +116,7 @@ public class CheckButton extends UIButton { startCheck(checkThread); } }); - worker.start(jtemplate.getTarget().getTemplateID()); + worker.start(jtemplate.getRuntimeId()); } } else { if (!jtemplate.isSaved()) { @@ -127,7 +127,7 @@ public class CheckButton extends UIButton { startCheck(checkThread); } }); - worker.start(jtemplate.getTarget().getTemplateID()); + worker.start(jtemplate.getRuntimeId()); } else { startCheck(checkThread); } @@ -148,7 +148,7 @@ public class CheckButton extends UIButton { startCheck(checkThread); } }); - worker.start(jtemplate.getTarget().getTemplateID()); + worker.start(jtemplate.getRuntimeId()); } } } From 64d258f6e531584a1e3e109b7f47552474e27226 Mon Sep 17 00:00:00 2001 From: Lanlan Date: Thu, 10 Jun 2021 11:45:03 +0800 Subject: [PATCH 122/148] =?UTF-8?q?REPORT-51360=20=E6=8F=90=E4=BE=9B?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E7=BF=BB=E8=AF=91=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/login/lib/locale/login_en_US.js | 54 +++++++++++++++++++ .../fr/design/login/lib/locale/login_ja_JP.js | 54 +++++++++++++++++++ .../fr/design/login/lib/locale/login_ko_KR.js | 54 +++++++++++++++++++ .../fr/design/login/lib/locale/login_zh_TW.js | 54 +++++++++++++++++++ 4 files changed, 216 insertions(+) diff --git a/designer-base/src/main/resources/com/fr/design/login/lib/locale/login_en_US.js b/designer-base/src/main/resources/com/fr/design/login/lib/locale/login_en_US.js index 37cecf414d..162f7d1b35 100644 --- a/designer-base/src/main/resources/com/fr/design/login/lib/locale/login_en_US.js +++ b/designer-base/src/main/resources/com/fr/design/login/lib/locale/login_en_US.js @@ -1,5 +1,59 @@ var Store = { i18n : { + 'Designer-Login_User_Name': 'Username/Email/Phone number', + 'Designer-Login_User_Name_Hint': 'Please enter username/email/phone number', + 'Designer-Login_Password': 'Password', + 'Designer-Login_Password_Hint': 'Please enter the password', + 'Designer-Login': 'Login', + 'Designer-Login_Title': 'FanRuan Passport Login', + 'Designer-Login_I_Have_Read': 'I have read', + 'Designer-Login_Service_Terms': 'Terms of Service', + 'Designer-Login_Forget_Password': 'Forgot your password?', + 'Designer-Login_Sms': 'SMS login', + 'Designer-Login_Normal': 'Password login', + 'Designer-Login_Phone': 'Phone number', + 'Designer-Login_Phone_Hint': 'Please enter your phone number', + 'Designer-Login_Code': 'Captcha', + 'Designer-Login_Code_Hint': 'Please enter the captcha', + 'Designer-Login_Code_Request': 'Get captcha', + 'Designer-Login_Code_Request_Again': 'Re-acquire', + 'Designer-Login_Register_Or_Login': 'Register/Login', + 'Designer-Basic_Chinese_Mainland': 'Mainland China', + 'Designer-Basic_Chinese_Hong_Kong': 'Hong Kong', + 'Designer-Basic_Chinese_Macao': 'Macao', + 'Designer-Basic_Chinese_Taiwan': 'Taiwan', + 'Designer-Basic_Turkey': 'Turkey', + 'Designer-Basic_South_Korea': 'South Korea', + 'Designer-Basic_Japan': 'Japan', + 'Designer-Basic_Singapore': 'Singapore', + 'Designer-Basic_Malaysia': 'Malaysia', + 'Designer-Login_Username_Not_Null': 'Username cannot be empty', + 'Designer-Login_Password_Not_Null': 'Password cannot be empty', + 'Designer-Login_Username_Or_Password_Incorrect': 'The username or password is incorrect, please check', + 'Designer-Login_Phone_Not_Null': 'The phone number format is illegal', + 'Designer-Login_Code_Not_Null': 'The captcha cannot be empty', + 'Designer-Login_Code_Incorrect': 'The captcha has expired, please get it again', + 'Designer-Login_Password_Setting_Hint': 'Enter the login password (6-16 digits password can be entered)', + 'Designer-Login_Store_User_Not_Exist': 'The username does not exist', + 'Designer-Login_Store_User_Password_Error': 'Username or password is incorrect', + 'Designer-Login_Token_Request_Failed': 'Failed to get registration token', + 'Designer-Login_Unexpected_Error': 'Unexpected error', + 'Designer-Login_Internal_Error': 'Server internal error', + 'Designer-Guide_Do_Not_Remind': 'No reminders within one month', + 'Designer-Guide_Login': 'Login now', + 'Designer-BBS_Register_Timeout': 'Register timeout, please resend the captcha', + 'Designer-BBS_Phone_Is_Register': 'The phone number is already registered', + 'Designer-BBS_Captcha_Send_Exceed_Limit': 'The captcha can only be sent once every 60s', + 'Designer-BBS_Phone_Format_Error': 'Failed to send, the phone number format is incorrect', + 'Designer-BBS_Captcha_Out_Of_Date': 'The captcha has expired, please get it again', + 'Designer-BBS_Captcha_Try_Exceed_Limit': 'The number of attempts of the captcha has reached the upper limit, please get it again', + 'Designer-BBS_Captcha_Error': 'Captcha error', + 'Designer-BBS_Username_Format_Error': 'The nickname only supports Chinese, English and numbers', + 'Designer-BBS_Username_Too_Short': 'The length of the nickname is too short', + 'Designer-BBS_Username_Too_Long': 'The length of this nickname has reached the upper limit', + 'Designer-BBS_Username_Is_Register': 'The user has been registered', + 'Designer-BBS_Please_Enter_Correct_Phone': 'Please enter the correct phone number', + 'Designer-Login_Network_Connected_Failed': 'Network connection failed', }} window.Store = Store; \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/login/lib/locale/login_ja_JP.js b/designer-base/src/main/resources/com/fr/design/login/lib/locale/login_ja_JP.js index 37cecf414d..455998282c 100644 --- a/designer-base/src/main/resources/com/fr/design/login/lib/locale/login_ja_JP.js +++ b/designer-base/src/main/resources/com/fr/design/login/lib/locale/login_ja_JP.js @@ -1,5 +1,59 @@ var Store = { i18n : { + 'Designer-Login_User_Name': 'ユーザ名/メールアドレス/携帯番号', + 'Designer-Login_User_Name_Hint': 'ユーザ名/メールアドレス/携帯番号を入力してください。', + 'Designer-Login_Password': 'パスワード', + 'Designer-Login_Password_Hint': 'パスワードを入力してください。', + 'Designer-Login': 'ログイン', + 'Designer-Login_Title': 'FanRuanアカウントでログイン', + 'Designer-Login_I_Have_Read': '承認する', + 'Designer-Login_Service_Terms': '利用規約', + 'Designer-Login_Forget_Password': 'パスワードをお忘れですか', + 'Designer-Login_Sms': '認証コードログイン', + 'Designer-Login_Normal': 'パスワードでログイン', + 'Designer-Login_Phone': '携帯番号', + 'Designer-Login_Phone_Hint': '携帯番号を入力してください。', + 'Designer-Login_Code': '認証コード', + 'Designer-Login_Code_Hint': '認証コードを入力してください。', + 'Designer-Login_Code_Request': '認証コードを取得', + 'Designer-Login_Code_Request_Again': '再取得', + 'Designer-Login_Register_Or_Login': '登録/ログイン', + 'Designer-Basic_Chinese_Mainland': '中国大陸', + 'Designer-Basic_Chinese_Hong_Kong': '中国香港', + 'Designer-Basic_Chinese_Macao': '中国澳門', + 'Designer-Basic_Chinese_Taiwan': '中国台湾', + 'Designer-Basic_Turkey': 'トルコ共和国', + 'Designer-Basic_South_Korea': '韓国', + 'Designer-Basic_Japan': '日本', + 'Designer-Basic_Singapore': 'シンガポール', + 'Designer-Basic_Malaysia': 'マレーシア', + 'Designer-Login_Username_Not_Null': 'ユーザ名は空白不可。', + 'Designer-Login_Password_Not_Null': 'パスワードは空白不可。', + 'Designer-Login_Username_Or_Password_Incorrect': 'ユーザ名又はパスワードが間違っています。ご確認ください。', + 'Designer-Login_Phone_Not_Null': '携帯番号の形式が正しくない。', + 'Designer-Login_Code_Not_Null': '認証コードは空白不可。', + 'Designer-Login_Code_Incorrect': '認証コードが無効になりました。再取得してください。', + 'Designer-Login_Password_Setting_Hint': 'パスワードを入力してください。(6‐16桁入力可能)', + 'Designer-Login_Store_User_Not_Exist': 'ユーザ名は存在しません', + 'Designer-Login_Store_User_Password_Error': 'ユーザ名又はパスワードが間違っています。', + 'Designer-Login_Token_Request_Failed': '登録Token取得に失敗', + 'Designer-Login_Unexpected_Error': '未知のエラー', + 'Designer-Login_Internal_Error': 'サーバ内部エラー', + 'Designer-Guide_Do_Not_Remind': '一か月内アラートしません。', + 'Designer-Guide_Login': 'ログイン', + 'Designer-BBS_Register_Timeout': '登録Timeout、検証コードをもう一度取得してください。', + 'Designer-BBS_Phone_Is_Register': 'この携帯は既に登録されています。', + 'Designer-BBS_Captcha_Send_Exceed_Limit': '認証コードは60s内に一回しか送信できません。', + 'Designer-BBS_Phone_Format_Error': '携帯番号の形式が間違っています、検証コード送信失敗。', + 'Designer-BBS_Captcha_Out_Of_Date': '認証コードが無効になりました。再取得してください。', + 'Designer-BBS_Captcha_Try_Exceed_Limit': '認証コードの試行回数が上限に達しています。再取得してください。', + 'Designer-BBS_Captcha_Error': '認証コードが間違っています。', + 'Designer-BBS_Username_Format_Error': 'ユーザ名は漢字、アルバイトと数字しかサポートできません。', + 'Designer-BBS_Username_Too_Short': 'ユーザ名が短すぎます。', + 'Designer-BBS_Username_Too_Long': 'ユーザ名が長すぎます。', + 'Designer-BBS_Username_Is_Register': 'このユーザは登録済みです。', + 'Designer-BBS_Please_Enter_Correct_Phone': '正確な携帯番号を入力してください。', + 'Designer-Login_Network_Connected_Failed': 'インターネット接続失敗', }} window.Store = Store; \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/login/lib/locale/login_ko_KR.js b/designer-base/src/main/resources/com/fr/design/login/lib/locale/login_ko_KR.js index 37cecf414d..162f7d1b35 100644 --- a/designer-base/src/main/resources/com/fr/design/login/lib/locale/login_ko_KR.js +++ b/designer-base/src/main/resources/com/fr/design/login/lib/locale/login_ko_KR.js @@ -1,5 +1,59 @@ var Store = { i18n : { + 'Designer-Login_User_Name': 'Username/Email/Phone number', + 'Designer-Login_User_Name_Hint': 'Please enter username/email/phone number', + 'Designer-Login_Password': 'Password', + 'Designer-Login_Password_Hint': 'Please enter the password', + 'Designer-Login': 'Login', + 'Designer-Login_Title': 'FanRuan Passport Login', + 'Designer-Login_I_Have_Read': 'I have read', + 'Designer-Login_Service_Terms': 'Terms of Service', + 'Designer-Login_Forget_Password': 'Forgot your password?', + 'Designer-Login_Sms': 'SMS login', + 'Designer-Login_Normal': 'Password login', + 'Designer-Login_Phone': 'Phone number', + 'Designer-Login_Phone_Hint': 'Please enter your phone number', + 'Designer-Login_Code': 'Captcha', + 'Designer-Login_Code_Hint': 'Please enter the captcha', + 'Designer-Login_Code_Request': 'Get captcha', + 'Designer-Login_Code_Request_Again': 'Re-acquire', + 'Designer-Login_Register_Or_Login': 'Register/Login', + 'Designer-Basic_Chinese_Mainland': 'Mainland China', + 'Designer-Basic_Chinese_Hong_Kong': 'Hong Kong', + 'Designer-Basic_Chinese_Macao': 'Macao', + 'Designer-Basic_Chinese_Taiwan': 'Taiwan', + 'Designer-Basic_Turkey': 'Turkey', + 'Designer-Basic_South_Korea': 'South Korea', + 'Designer-Basic_Japan': 'Japan', + 'Designer-Basic_Singapore': 'Singapore', + 'Designer-Basic_Malaysia': 'Malaysia', + 'Designer-Login_Username_Not_Null': 'Username cannot be empty', + 'Designer-Login_Password_Not_Null': 'Password cannot be empty', + 'Designer-Login_Username_Or_Password_Incorrect': 'The username or password is incorrect, please check', + 'Designer-Login_Phone_Not_Null': 'The phone number format is illegal', + 'Designer-Login_Code_Not_Null': 'The captcha cannot be empty', + 'Designer-Login_Code_Incorrect': 'The captcha has expired, please get it again', + 'Designer-Login_Password_Setting_Hint': 'Enter the login password (6-16 digits password can be entered)', + 'Designer-Login_Store_User_Not_Exist': 'The username does not exist', + 'Designer-Login_Store_User_Password_Error': 'Username or password is incorrect', + 'Designer-Login_Token_Request_Failed': 'Failed to get registration token', + 'Designer-Login_Unexpected_Error': 'Unexpected error', + 'Designer-Login_Internal_Error': 'Server internal error', + 'Designer-Guide_Do_Not_Remind': 'No reminders within one month', + 'Designer-Guide_Login': 'Login now', + 'Designer-BBS_Register_Timeout': 'Register timeout, please resend the captcha', + 'Designer-BBS_Phone_Is_Register': 'The phone number is already registered', + 'Designer-BBS_Captcha_Send_Exceed_Limit': 'The captcha can only be sent once every 60s', + 'Designer-BBS_Phone_Format_Error': 'Failed to send, the phone number format is incorrect', + 'Designer-BBS_Captcha_Out_Of_Date': 'The captcha has expired, please get it again', + 'Designer-BBS_Captcha_Try_Exceed_Limit': 'The number of attempts of the captcha has reached the upper limit, please get it again', + 'Designer-BBS_Captcha_Error': 'Captcha error', + 'Designer-BBS_Username_Format_Error': 'The nickname only supports Chinese, English and numbers', + 'Designer-BBS_Username_Too_Short': 'The length of the nickname is too short', + 'Designer-BBS_Username_Too_Long': 'The length of this nickname has reached the upper limit', + 'Designer-BBS_Username_Is_Register': 'The user has been registered', + 'Designer-BBS_Please_Enter_Correct_Phone': 'Please enter the correct phone number', + 'Designer-Login_Network_Connected_Failed': 'Network connection failed', }} window.Store = Store; \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/login/lib/locale/login_zh_TW.js b/designer-base/src/main/resources/com/fr/design/login/lib/locale/login_zh_TW.js index 37cecf414d..2cef831517 100644 --- a/designer-base/src/main/resources/com/fr/design/login/lib/locale/login_zh_TW.js +++ b/designer-base/src/main/resources/com/fr/design/login/lib/locale/login_zh_TW.js @@ -1,5 +1,59 @@ var Store = { i18n : { + 'Designer-Login_User_Name': '帳號/郵箱/手機號', + 'Designer-Login_User_Name_Hint': '請輸入帳號/郵箱/手機號', + 'Designer-Login_Password': '密碼', + 'Designer-Login_Password_Hint': '請輸入密碼', + 'Designer-Login': '登入', + 'Designer-Login_Title': '帆軟通行證登入', + 'Designer-Login_I_Have_Read': '我已閱讀', + 'Designer-Login_Service_Terms': '服務條款', + 'Designer-Login_Forget_Password': '忘記密碼?', + 'Designer-Login_Sms': '驗證碼登入', + 'Designer-Login_Normal': '密碼登入', + 'Designer-Login_Phone': '手機號碼', + 'Designer-Login_Phone_Hint': '請輸入手機號碼', + 'Designer-Login_Code': '驗證碼', + 'Designer-Login_Code_Hint': '請輸入驗證碼', + 'Designer-Login_Code_Request': '獲取驗證碼', + 'Designer-Login_Code_Request_Again': '重新獲取', + 'Designer-Login_Register_Or_Login': '註冊/登入', + 'Designer-Basic_Chinese_Mainland': '中國大陸', + 'Designer-Basic_Chinese_Hong_Kong': '中國香港', + 'Designer-Basic_Chinese_Macao': '中國澳門', + 'Designer-Basic_Chinese_Taiwan': '中國臺灣', + 'Designer-Basic_Turkey': '土耳其', + 'Designer-Basic_South_Korea': '韓國', + 'Designer-Basic_Japan': '日本', + 'Designer-Basic_Singapore': '新加坡', + 'Designer-Basic_Malaysia': '馬來西亞', + 'Designer-Login_Username_Not_Null': '使用者名稱不能為空', + 'Designer-Login_Password_Not_Null': '密碼不能為空', + 'Designer-Login_Username_Or_Password_Incorrect': '使用者名稱或者密碼錯誤,請檢查', + 'Designer-Login_Phone_Not_Null': '手機號碼格式不正確', + 'Designer-Login_Code_Not_Null': '驗證碼不能為空', + 'Designer-Login_Code_Incorrect': '驗證碼已過期,請重新獲取', + 'Designer-Login_Password_Setting_Hint': '輸入登入密碼(可輸入6-16位密碼)', + 'Designer-Login_Store_User_Not_Exist': '帳號不存在', + 'Designer-Login_Store_User_Password_Error': '帳號或密碼錯誤', + 'Designer-Login_Token_Request_Failed': '註冊令牌獲取失敗', + 'Designer-Login_Unexpected_Error': '未知錯誤', + 'Designer-Login_Internal_Error': '伺服器內部錯誤', + 'Designer-Guide_Do_Not_Remind': '一個月內不再提醒', + 'Designer-Guide_Login': '立即登入', + 'Designer-BBS_Register_Timeout': '註冊超時,請重新發送驗證碼', + 'Designer-BBS_Phone_Is_Register': '該手機號碼已註冊', + 'Designer-BBS_Captcha_Send_Exceed_Limit': '驗證碼每60s只能傳送一次', + 'Designer-BBS_Phone_Format_Error': '傳送失敗,手機號格式錯誤', + 'Designer-BBS_Captcha_Out_Of_Date': '驗證碼已過期,請重新獲取', + 'Designer-BBS_Captcha_Try_Exceed_Limit': '驗證碼嘗試次數已達上限,請重新獲取', + 'Designer-BBS_Captcha_Error': '驗證碼錯誤', + 'Designer-BBS_Username_Format_Error': '暱稱只支援中英文和數字', + 'Designer-BBS_Username_Too_Short': '暱稱長度太短', + 'Designer-BBS_Username_Too_Long': '這個暱稱長度已經達到了上限', + 'Designer-BBS_Username_Is_Register': '該帳號已被註冊', + 'Designer-BBS_Please_Enter_Correct_Phone': '請輸入正確的手機號', + 'Designer-Login_Network_Connected_Failed': '網路連線失敗', }} window.Store = Store; \ No newline at end of file From fb72df97bf0fcf39bef133e8af315e775557e8b1 Mon Sep 17 00:00:00 2001 From: Lanlan Date: Thu, 10 Jun 2021 11:45:44 +0800 Subject: [PATCH 123/148] =?UTF-8?q?REPORT-53689=20=E7=82=B9=E5=87=BB?= =?UTF-8?q?=E7=A7=81=E4=BA=BA=E6=B6=88=E6=81=AF/=E7=A4=BE=E5=8C=BA?= =?UTF-8?q?=EF=BC=8C=E8=B7=B3=E8=BD=AC=E7=9A=84=E4=B8=8D=E6=98=AF=E5=BD=93?= =?UTF-8?q?=E5=89=8D=E8=AE=BE=E8=AE=A1=E5=99=A8=E7=99=BB=E5=BD=95=E8=B4=A6?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../login/utils/DesignerLoginUtils.java | 52 +++++++++++++++++++ .../java/com/fr/design/upm/UpmBridge.java | 5 +- .../design/mainframe/bbs/UserInfoLabel.java | 8 +-- 3 files changed, 60 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/login/utils/DesignerLoginUtils.java b/designer-base/src/main/java/com/fr/design/login/utils/DesignerLoginUtils.java index 0e1815c25b..5dd49a00bb 100644 --- a/designer-base/src/main/java/com/fr/design/login/utils/DesignerLoginUtils.java +++ b/designer-base/src/main/java/com/fr/design/login/utils/DesignerLoginUtils.java @@ -2,9 +2,18 @@ package com.fr.design.login.utils; import com.fr.design.DesignerEnvManager; import com.fr.design.mainframe.toast.DesignerToastMsgUtil; +import com.fr.general.CloudCenter; import com.fr.general.GeneralContext; +import com.fr.general.log.MessageFormatter; +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.third.org.bouncycastle.util.encoders.Hex; +import java.security.SecureRandom; import java.util.HashMap; import java.util.Map; +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; /** * @author Lanlan @@ -13,6 +22,10 @@ import java.util.Map; */ public class DesignerLoginUtils { + private static final String PRODUCT_FINEREPORT = "product-finereport"; + + private static final String KEY = "i7hP48WAcuTrmxfN"; + public static Map renderMap() { Map map4Tpl = new HashMap<>(); map4Tpl.put("language", GeneralContext.getLocale().toString()); @@ -32,4 +45,43 @@ public class DesignerLoginUtils { } } } + + public static String generateDesignerSSOUrl(String referrer) { + String ssoTemplate = CloudCenter.getInstance().acquireUrlByKind("designer.sso.api", "https://id.fanruan.com/api/app/?code={}&referrer={}"); + try { + String code = generateLoginCode(); + MessageFormatter.FormattingTuple tuple = MessageFormatter.arrayFormat(ssoTemplate, new String[]{code, referrer}); + return tuple.getMessage(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return referrer; + } + + private static String generateLoginCode() throws Exception { + DesignerEnvManager manager = DesignerEnvManager.getEnvManager(); + JSONObject jo = JSONObject.create(); + jo.put("uid", manager.getDesignerLoginUid()); + jo.put("username", manager.getDesignerLoginUsername()); + jo.put("source", PRODUCT_FINEREPORT); + byte[] iv = randomIv(); + return new String(Hex.encode(iv)) + encrypt(jo.toString(), KEY.getBytes(), iv); + } + + private static byte[] randomIv() { + byte[] salt = new byte[16]; + SecureRandom secureRandom = new SecureRandom(); + secureRandom.setSeed(System.currentTimeMillis()); + secureRandom.nextBytes(salt); + return salt; + } + + private static String encrypt(String content, byte[] key, byte[] iv) throws Exception { + SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES"); + Cipher cipher = Cipher.getInstance("AES/CTR/PKCS5Padding"); + IvParameterSpec ivParameterSpec = new IvParameterSpec(iv); + cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec); + byte[] resultBytes = cipher.doFinal(content.getBytes()); + return new String(Hex.encode(resultBytes)); + } } diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java b/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java index 1169b7c9a6..ad933d7d24 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java @@ -18,9 +18,11 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.locale.impl.BbsRegisterMark; import com.fr.design.locale.impl.BbsResetMark; import com.fr.design.locale.impl.BbsSpaceMark; +import com.fr.design.login.utils.DesignerLoginUtils; import com.fr.design.upm.event.DownloadEvent; import com.fr.design.upm.exec.UpmBrowserExecutor; import com.fr.design.upm.task.UpmTaskWorker; +import com.fr.design.utils.BrowseUtils; import com.fr.event.EventDispatcher; import com.fr.general.GeneralUtils; import com.fr.general.locale.LocaleCenter; @@ -424,7 +426,8 @@ public class UpmBridge { public void getPriviteMessage() { try { LocaleMark spaceMark = LocaleCenter.getMark(BbsSpaceMark.class); - Desktop.getDesktop().browse(new URI(spaceMark.getValue())); + String ssoUrl = DesignerLoginUtils.generateDesignerSSOUrl(spaceMark.getValue()); + BrowseUtils.browser(ssoUrl); } catch (Exception exp) { FineLoggerFactory.getLogger().info(exp.getMessage()); } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoLabel.java b/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoLabel.java index 4e25381e1f..c9e83d5b6d 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoLabel.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoLabel.java @@ -14,9 +14,11 @@ import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.locale.impl.BbsSpaceMark; import com.fr.design.login.DesignerLoginHelper; import com.fr.design.login.DesignerLoginSource; +import com.fr.design.login.utils.DesignerLoginUtils; import com.fr.design.mainframe.DesignerContext; import com.fr.design.os.impl.SupportOSImpl; import com.fr.design.upm.event.CertificateEvent; +import com.fr.design.utils.BrowseUtils; import com.fr.design.utils.concurrent.ThreadFactoryBuilder; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.event.Event; @@ -31,17 +33,14 @@ import com.fr.general.locale.LocaleMark; import com.fr.log.FineLoggerFactory; import com.fr.stable.EncodeConstants; import com.fr.stable.StringUtils; -import java.awt.Color; import javax.swing.SwingConstants; import java.awt.Cursor; -import java.awt.Desktop; import java.awt.Frame; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.UnsupportedEncodingException; import java.lang.reflect.Constructor; import java.lang.reflect.Method; -import java.net.URI; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.Date; @@ -104,7 +103,8 @@ public class UserInfoLabel extends UILabel { if (StringUtils.isNotEmpty(userName)) { try { LocaleMark spaceMark = LocaleCenter.getMark(BbsSpaceMark.class); - Desktop.getDesktop().browse(new URI(spaceMark.getValue())); + String ssoUrl = DesignerLoginUtils.generateDesignerSSOUrl(spaceMark.getValue()); + BrowseUtils.browser(ssoUrl); } catch (Exception exp) { FineLoggerFactory.getLogger().info(exp.getMessage()); } From fd3364a299d5e7924bfd94b9abb1fd7d4f49423a Mon Sep 17 00:00:00 2001 From: Lanlan Date: Thu, 10 Jun 2021 11:46:32 +0800 Subject: [PATCH 124/148] fix --- .../fr/design/login/AbstractDesignerSSO.java | 59 ++----------------- 1 file changed, 6 insertions(+), 53 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java b/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java index 80d6462fab..c75c63ff66 100644 --- a/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java +++ b/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java @@ -2,21 +2,12 @@ package com.fr.design.login; import com.fr.design.DesignerEnvManager; import com.fr.design.actions.UpdateAction; +import com.fr.design.login.utils.DesignerLoginUtils; import com.fr.design.os.impl.SupportOSImpl; import com.fr.design.utils.BrowseUtils; -import com.fr.general.CloudCenter; -import com.fr.general.log.MessageFormatter; -import com.fr.json.JSONObject; -import com.fr.log.FineLoggerFactory; -import com.fr.stable.StringUtils; -import com.fr.third.org.bouncycastle.util.encoders.Hex; import java.awt.event.ActionEvent; -import java.security.SecureRandom; import java.util.HashMap; import java.util.Map; -import javax.crypto.Cipher; -import javax.crypto.spec.IvParameterSpec; -import javax.crypto.spec.SecretKeySpec; /** * @author Lanlan @@ -25,30 +16,19 @@ import javax.crypto.spec.SecretKeySpec; */ public abstract class AbstractDesignerSSO extends UpdateAction { - private static final String PRODUCT_FINEREPORT = "product-finereport"; - - private static final String KEY = "i7hP48WAcuTrmxfN"; - @Override public void actionPerformed(ActionEvent event) { String url = getJumpUrl(); - if (!SupportOSImpl.DESIGNER_LOGIN.support()) { - BrowseUtils.browser(url); - return; - } DesignerEnvManager manager = DesignerEnvManager.getEnvManager(); int uid = manager.getDesignerLoginUid(); if (uid > 0) { - String ssoUrl = CloudCenter.getInstance().acquireUrlByKind("designer.sso.api", "https://id.fanruan.com/api/app/?code={}&referrer={}"); - try { - String code = generateLoginCode(); - MessageFormatter.FormattingTuple tuple = MessageFormatter.arrayFormat(ssoUrl, new String[]{code, url}); - BrowseUtils.browser(tuple.getMessage()); - } catch (Exception e) { + String ssoUrl = DesignerLoginUtils.generateDesignerSSOUrl(url); + BrowseUtils.browser(ssoUrl); + } else { + if (!SupportOSImpl.DESIGNER_LOGIN.support()) { BrowseUtils.browser(url); - FineLoggerFactory.getLogger().error(e.getMessage(), e); + return; } - } else { boolean loginRemindBeforeJumpBBS = manager.isLoginRemindBeforeJumpBBS(); if (loginRemindBeforeJumpBBS) { Map params = new HashMap<>(); @@ -61,32 +41,5 @@ public abstract class AbstractDesignerSSO extends UpdateAction { } } - private String generateLoginCode() throws Exception { - DesignerEnvManager manager = DesignerEnvManager.getEnvManager(); - JSONObject jo = JSONObject.create(); - jo.put("uid", manager.getDesignerLoginUid()); - jo.put("username", manager.getDesignerLoginUsername()); - jo.put("source", PRODUCT_FINEREPORT); - byte[] iv = randomIv(); - return new String(Hex.encode(iv)) + encrypt(jo.toString(), KEY.getBytes(), iv); - } - - private static byte[] randomIv() { - byte[] salt = new byte[16]; - SecureRandom secureRandom = new SecureRandom(); - secureRandom.setSeed(System.currentTimeMillis()); - secureRandom.nextBytes(salt); - return salt; - } - - public static String encrypt(String content, byte[] key, byte[] iv) throws Exception { - SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES"); - Cipher cipher = Cipher.getInstance("AES/CTR/PKCS5Padding"); - IvParameterSpec ivParameterSpec = new IvParameterSpec(iv); - cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec); - byte[] resultBytes = cipher.doFinal(content.getBytes()); - return new String(Hex.encode(resultBytes)); - } - public abstract String getJumpUrl(); } From eec7460cd1ee89746f24c79bd693caceff662f3b Mon Sep 17 00:00:00 2001 From: Lanlan Date: Thu, 10 Jun 2021 12:10:01 +0800 Subject: [PATCH 125/148] =?UTF-8?q?REPORT-53714=20=E6=B5=B7=E5=A4=96?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E8=AE=BF=E9=97=AE=E7=A4=BE=E5=8C=BA=E6=97=B6?= =?UTF-8?q?=E4=B8=8D=E6=8F=90=E7=A4=BA=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/login/AbstractDesignerSSO.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java b/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java index c75c63ff66..6fc3c817b4 100644 --- a/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java +++ b/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java @@ -1,5 +1,6 @@ package com.fr.design.login; +import com.fr.base.FRContext; import com.fr.design.DesignerEnvManager; import com.fr.design.actions.UpdateAction; import com.fr.design.login.utils.DesignerLoginUtils; @@ -25,7 +26,7 @@ public abstract class AbstractDesignerSSO extends UpdateAction { String ssoUrl = DesignerLoginUtils.generateDesignerSSOUrl(url); BrowseUtils.browser(ssoUrl); } else { - if (!SupportOSImpl.DESIGNER_LOGIN.support()) { + if (!SupportOSImpl.DESIGNER_LOGIN.support() || !FRContext.isChineseEnv()) { BrowseUtils.browser(url); return; } From dd3b2680b8c84a38ed0499e5651753b2613e13a4 Mon Sep 17 00:00:00 2001 From: pengda Date: Thu, 10 Jun 2021 14:12:15 +0800 Subject: [PATCH 126/148] =?UTF-8?q?REPORT-53651=20&=20REPORT-53591=20&=20R?= =?UTF-8?q?EPORT-53610=20=E6=8F=92=E4=BB=B6=E6=A3=80=E6=B5=8B=E7=BB=93?= =?UTF-8?q?=E6=9E=9C=E5=B1=95=E7=A4=BA=E5=92=8C=E9=87=8D=E5=90=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../update/actions/SyncFileProcess.java | 24 +++-- .../versioncheck/VersionCheckUtils.java | 26 +++--- .../java/com/fr/env/CheckServiceDialog.java | 90 +++++++++---------- .../com/fr/env/SyncFailedPluginsDialog.java | 26 +++++- 4 files changed, 96 insertions(+), 70 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java b/designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java index b4a1b49071..304cae1ba1 100644 --- a/designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java +++ b/designer-base/src/main/java/com/fr/design/update/actions/SyncFileProcess.java @@ -5,6 +5,7 @@ import com.fr.decision.update.info.UpdateCallBack; import com.fr.decision.update.info.UpdateProgressCallBack; import com.fr.design.i18n.Toolkit; import com.fr.design.versioncheck.VersionCheckUtils; +import com.fr.env.SyncFailedPluginsDialog; import com.fr.json.JSONArray; import com.fr.log.FineLoggerFactory; import java.util.concurrent.ExecutionException; @@ -14,11 +15,12 @@ import javax.swing.SwingWorker; public abstract class SyncFileProcess extends SwingWorker { private String buildNo; private JProgressBar bar; - private JSONArray syncFailedPlugins; + private SyncFailedPluginsDialog syncFailedPluginsDialog; - public SyncFileProcess(JProgressBar bar, String buildNo) { + public SyncFileProcess(JProgressBar bar, String buildNo, SyncFailedPluginsDialog syncFailedPluginsDialog) { this.bar = bar; this.buildNo = buildNo; + this.syncFailedPluginsDialog = syncFailedPluginsDialog; } @Override @@ -26,8 +28,19 @@ public abstract class SyncFileProcess extends SwingWorker { UpdateCallBack callBack = new UpdateProgressCallBack(bar); bar.setValue(0); bar.setString(Toolkit.i18nText("Fine-Design_Basic_Sync_Plugins")); - syncFailedPlugins = VersionCheckUtils.syncPlugins(VersionCheckUtils.checkLocalAndRemotePlugin()); - return SyncExecutor.getInstance().execute(callBack, buildNo); + JSONArray syncFailedPlugins = VersionCheckUtils.syncPlugins(VersionCheckUtils.checkLocalAndRemotePlugin()); + if (syncFailedPlugins.size() > 0) { + syncFailedPluginsDialog.showSyncFailedPluginsInfo(syncFailedPlugins); + } + RecoverForDesigner recoverForDesigner = new RecoverForDesigner(); + if (!recoverForDesigner.backup()) { + return false; + } + boolean result = SyncExecutor.getInstance().execute(callBack, buildNo); + if (!result) { + recoverForDesigner.recover(); + } + return result; } @Override @@ -48,9 +61,6 @@ public abstract class SyncFileProcess extends SwingWorker { } } - public JSONArray getSyncFailedPlugins(){ - return syncFailedPlugins; - } /** * 下载成功 diff --git a/designer-base/src/main/java/com/fr/design/versioncheck/VersionCheckUtils.java b/designer-base/src/main/java/com/fr/design/versioncheck/VersionCheckUtils.java index 46622c44d8..bd1452e0bc 100644 --- a/designer-base/src/main/java/com/fr/design/versioncheck/VersionCheckUtils.java +++ b/designer-base/src/main/java/com/fr/design/versioncheck/VersionCheckUtils.java @@ -2,13 +2,11 @@ package com.fr.design.versioncheck; import com.fr.base.FRContext; import com.fr.design.DesignerEnvManager; -import com.fr.design.dialog.NotificationDialog; import com.fr.design.env.DesignerWorkspaceInfo; import com.fr.design.env.DesignerWorkspaceType; import com.fr.design.env.RemoteWorkspace; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerContext; -import com.fr.env.CheckServiceDialog; import com.fr.env.VersionCheckMessageDialog; import com.fr.general.ComparatorUtils; import com.fr.general.GeneralUtils; @@ -24,6 +22,7 @@ import com.fr.plugin.manage.control.PluginControllerHelper; import com.fr.plugin.manage.control.PluginTaskCallback; import com.fr.plugin.manage.control.PluginTaskResult; import com.fr.plugin.manage.control.ProgressCallback; +import com.fr.report.ReportHelper; import com.fr.rpc.Result; import com.fr.stable.StringUtils; import com.fr.workspace.WorkContext; @@ -33,9 +32,6 @@ import com.fr.workspace.engine.base.FineObjectPool; import com.fr.workspace.engine.channel.http.FunctionalHttpRequest; import com.fr.workspace.engine.exception.WorkspaceConnectionException; import com.fr.workspace.engine.rpc.WorkspaceProxyPool; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; import java.lang.reflect.Method; import java.text.ParsePosition; import java.text.SimpleDateFormat; @@ -206,10 +202,7 @@ public class VersionCheckUtils { } private static boolean needCheckBranch(DesignerWorkspaceInfo selectedEnv) { - if (selectedEnv.getType() == DesignerWorkspaceType.Remote) { - return true; - } - return false; + return selectedEnv.getType() == DesignerWorkspaceType.Remote; } public static JSONArray checkLocalAndRemotePlugin() { @@ -221,21 +214,26 @@ public class VersionCheckUtils { localPluginsMap.put(pluginContext.getID(), pluginContext); } JSONObject remotePlugin; + Map pluginsNameMap = ReportHelper.getPluginNameMap(); for (int i = 0; i < remotePlugins.size(); i++) { remotePlugin = remotePlugins.getJSONObject(i); - if (localPluginsMap.containsKey(remotePlugin.getString(ID))) { - if (ComparatorUtils.equals(localPluginsMap.get(remotePlugin.getString(ID)).getVersion(), remotePlugin.getString(VERSION))) { + if (ComparatorUtils.equals(remotePlugin.getString("running"), "false")) { + continue; + } + String remotePluginID = remotePlugin.getString(ID); + if (localPluginsMap.containsKey(remotePluginID)) { + if (ComparatorUtils.equals(localPluginsMap.get(remotePluginID).getVersion(), remotePlugin.getString(VERSION))) { continue; } else { if (remotePlugin.getString(NAME) == null) { - remotePlugin.put(NAME, localPluginsMap.get(remotePlugin.getString(ID)).getName()); + remotePlugin.put(NAME, localPluginsMap.get(remotePluginID).getName()); } remotePlugin.put("type", INCONSISTENCY); } } else { remotePlugin.put("type", MISSING); if (remotePlugin.getString(NAME) == null) { - remotePlugin.put(NAME, remotePlugin.getString("id")); + remotePlugin.put(NAME, pluginsNameMap.getOrDefault(remotePluginID, remotePluginID)); } } differentPlugins.put(remotePlugin); @@ -303,7 +301,7 @@ public class VersionCheckUtils { return uninstallFailedID; } - private static JSONArray getPluginsSyncFailed(JSONArray differentPlugins){ + private static JSONArray getPluginsSyncFailed(JSONArray differentPlugins) { JSONArray pluginsNeedSync = JSONArray.create(); List localPlugins = PluginManager.getContexts(); Map localPluginsInfo = new HashMap<>(); diff --git a/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java b/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java index 222a9a2a57..185268e79c 100644 --- a/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java +++ b/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java @@ -308,32 +308,30 @@ public class CheckServiceDialog extends JDialog implements ActionListener { private MouseListener syncButtonClickListener = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { + ignoreButton.setEnabled(false); String[] option = {Toolkit.i18nText("Fine-Design_Report_Yes"), Toolkit.i18nText("Fine-Design_Report_No")}; - int a = FineJOptionPane.showOptionDialog(getParent(), Toolkit.i18nText("Fine-Design_Basic_Sync_Info_Information"), - Toolkit.i18nText("Fine-Design_Basic_Confirm"), JOptionPane.YES_NO_OPTION, QUESTION_MESSAGE, IOUtils.readIcon("com/fr/design/icon/versioncheck/question.png"), option, 1); - if (0 == a) { - //jar包一致的话只更新插件 - progressBar.setVisible(true); - progressBar.setString(Toolkit.i18nText("Fine-Design_Update_Info_Wait_Message")); - syncButton.setEnabled(false); - if (!jarConsistency) { + if (!jarConsistency) { + int a = FineJOptionPane.showOptionDialog(getParent(), Toolkit.i18nText("Fine-Design_Basic_Sync_Info_Information"), + Toolkit.i18nText("Fine-Design_Basic_Confirm"), JOptionPane.YES_NO_OPTION, QUESTION_MESSAGE, IOUtils.readIcon("com/fr/design/icon/versioncheck/question.png"), option, 1); + if (0 == a) { + progressBar.setVisible(true); + progressBar.setString(Toolkit.i18nText("Fine-Design_Update_Info_Wait_Message")); + syncButton.setEnabled(false); deletePreviousPropertyFile(); final String installLib = StableUtils.pathJoin(StableUtils.getInstallHome(), ProjectConstants.LOGS_NAME, UpdateConstants.INSTALL_LIB); final JFrame frame = DesignerContext.getDesignerFrame(); final RestartHelper helper = new RestartHelper(); FineProcessContext.getParentPipe().fire(FineProcessEngineEvent.DESTROY); - SyncFailedPluginsDialog syncFailedPluginsDialog = new SyncFailedPluginsDialog(DesignerContext.getDesignerFrame(),JSONArray.create()); - new SyncFileProcess(progressBar, remoteBuildNo) { + SyncFailedPluginsDialog syncFailedPluginsDialog = new SyncFailedPluginsDialog(frame, JSONArray.create()); + new SyncFileProcess(progressBar, remoteBuildNo, syncFailedPluginsDialog) { @Override public void onDownloadSuccess() { deleteForDesignerUpdate(installLib); progressBar.setVisible(false); - JSONArray syncFailedPlugins = getSyncFailedPlugins(); - if (syncFailedPlugins.size() > 0) { - syncFailedPluginsDialog.showSyncFailedPluginsInfo(syncFailedPlugins); - syncFailedPluginsDialog.setVisible(true); + syncFailedPluginsDialog.showDialog(); + if (!syncFailedPluginsDialog.restartClicked()) { + helper.restartForUpdate(frame); } - helper.restartForUpdate(frame); } @Override @@ -345,39 +343,39 @@ public class CheckServiceDialog extends JDialog implements ActionListener { helper.restartForUpdate(frame); } }.execute(); - } else { - //到这边说明主jar是一致的,就只尝试同步插件 - new SwingWorker() { - - @Override - protected JSONArray doInBackground() { - progressBar.setString(Toolkit.i18nText("Fine-Design_Basic_Sync_Plugins")); - progressBar.setValue(0); - return VersionCheckUtils.syncPlugins(differentPlugins); + } + } else { + //到这边说明主jar是一致的,就只尝试同步插件 + new SwingWorker() { + + @Override + protected JSONArray doInBackground() { + progressBar.setString(Toolkit.i18nText("Fine-Design_Basic_Sync_Plugins")); + progressBar.setValue(0); + return VersionCheckUtils.syncPlugins(differentPlugins); + } + + @Override + protected void done() { + progressBar.setVisible(false); + JSONArray syncFailedPlugins = null; + try { + syncFailedPlugins = get(); + } catch (Exception ex) { + FineLoggerFactory.getLogger().error(ex.getMessage(), ex); } - - @Override - protected void done() { - progressBar.setVisible(false); - JSONArray syncFailedPlugins = null; - try { - syncFailedPlugins = get(); - } catch (Exception ex) { - FineLoggerFactory.getLogger().error(ex.getMessage(), ex); - } - if (syncFailedPlugins != null && syncFailedPlugins.size() > 0) { - SyncFailedPluginsDialog syncFailedPluginsDialog = new SyncFailedPluginsDialog(DesignerContext.getDesignerFrame(), syncFailedPlugins); - syncFailedPluginsDialog.setVisible(true); - } else { - FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), - Toolkit.i18nText("Fine-Design_Basic_Sync_Success"), - Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"), - FineJOptionPane.INFORMATION_MESSAGE); - } - close(); + if (syncFailedPlugins != null && syncFailedPlugins.size() > 0) { + SyncFailedPluginsDialog syncFailedPluginsDialog = new SyncFailedPluginsDialog(DesignerContext.getDesignerFrame(), syncFailedPlugins); + syncFailedPluginsDialog.setVisible(true); + } else { + FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), + Toolkit.i18nText("Fine-Design_Basic_Sync_Success"), + Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"), + FineJOptionPane.INFORMATION_MESSAGE); } - }.execute(); - } + close(); + } + }.execute(); } } }; diff --git a/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java b/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java index 0a9faab55a..232225c854 100644 --- a/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java +++ b/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java @@ -10,6 +10,7 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.CloudCenter; +import com.fr.general.ComparatorUtils; import com.fr.general.GeneralContext; import com.fr.general.IOUtils; import com.fr.json.JSONArray; @@ -25,6 +26,7 @@ import java.util.Locale; import javax.swing.BorderFactory; import javax.swing.Icon; import javax.swing.JDialog; +import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; @@ -39,7 +41,11 @@ public class SyncFailedPluginsDialog extends JDialog { private UILabel detailsLabel; private JScrollPane scrollPane; private UITextArea detailsTextArea; - public SyncFailedPluginsDialog(Frame parent, JSONArray syncFailedPlugins) { + private JFrame frame = DesignerContext.getDesignerFrame(); + private RestartHelper restartHelper = new RestartHelper(); + private UIButton restartButton; + private boolean show; + public SyncFailedPluginsDialog(JFrame parent, JSONArray syncFailedPlugins) { super(parent, true); JPanel body = FRGUIPaneFactory.createBorderLayout_L_Pane(); @@ -79,7 +85,7 @@ public class SyncFailedPluginsDialog extends JDialog { centerPanel.add(scrollPane,BorderLayout.CENTER); JPanel southPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); - UIButton restartButton = new UIButton(Toolkit.i18nText("Fine-Design_Updater_Restart_Designer")); + restartButton = new UIButton(Toolkit.i18nText("Fine-Design_Updater_Restart_Designer")); restartButton.addMouseListener(restartButtonClickListener); southPane.add(restartButton); @@ -104,6 +110,15 @@ public class SyncFailedPluginsDialog extends JDialog { detailsText.append(plugin.getString("name")).append(",").append(Toolkit.i18nText("Fine-Design_Basic_Sync_Server_Version")).append(plugin.getString("version")).append("\n"); } detailsTextArea.setText(detailsText.toString()); + if(!ComparatorUtils.equals(detailsLabel.getText(),StringUtils.EMPTY)){ + show = true; + } + } + + public void showDialog(){ + if(show){ + this.setVisible(true); + } } private MouseListener detailsLabelClickListener = new MouseAdapter() { @@ -119,10 +134,15 @@ public class SyncFailedPluginsDialog extends JDialog { } }; + public boolean restartClicked(){ + return !restartButton.isEnabled(); + } + private MouseListener restartButtonClickListener = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { - RestartHelper.restartForUpdate(DesignerContext.getDesignerFrame()); + restartButton.setEnabled(false); + restartHelper.restartForUpdate(frame); } }; } From c146dc9d369cf520144be05a9e39894184076a75 Mon Sep 17 00:00:00 2001 From: pengda Date: Thu, 10 Jun 2021 14:13:30 +0800 Subject: [PATCH 127/148] =?UTF-8?q?REPORT-53651=20&=20REPORT-53591=20&=20R?= =?UTF-8?q?EPORT-53610=20=E6=8F=92=E4=BB=B6=E6=A3=80=E6=B5=8B=E7=BB=93?= =?UTF-8?q?=E6=9E=9C=E5=B1=95=E7=A4=BA=E5=92=8C=E9=87=8D=E5=90=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/versioncheck/VersionCheckUtils.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/versioncheck/VersionCheckUtils.java b/designer-base/src/main/java/com/fr/design/versioncheck/VersionCheckUtils.java index bd1452e0bc..9fa6980e9d 100644 --- a/designer-base/src/main/java/com/fr/design/versioncheck/VersionCheckUtils.java +++ b/designer-base/src/main/java/com/fr/design/versioncheck/VersionCheckUtils.java @@ -331,7 +331,9 @@ public class VersionCheckUtils { @Override public void done(PluginTaskResult result) { latch.countDown(); - FineLoggerFactory.getLogger().info("installPlugin: " + result.getCurrentTask().getMarker().getPluginID()); + if(result.isSuccess()) { + FineLoggerFactory.getLogger().info("installPlugin: " + result.getCurrentTask().getMarker().getPluginID()); + } } }); } From 6661c24bedbd217784936dd3673f13b5d59c833e Mon Sep 17 00:00:00 2001 From: kerry Date: Thu, 10 Jun 2021 14:18:57 +0800 Subject: [PATCH 128/148] =?UTF-8?q?=E8=A7=86=E8=A7=89=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/reuse/ReuseGuideDialog.java | 2 +- .../com/fr/design/images/dashboard/guide.png | Bin 704 -> 314951 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/reuse/ReuseGuideDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/reuse/ReuseGuideDialog.java index 4e0bb3143f..a0e9166592 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/reuse/ReuseGuideDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/reuse/ReuseGuideDialog.java @@ -108,7 +108,7 @@ public class ReuseGuideDialog extends UIDialog implements PromptWindow { JPanel centerPanel = new JPanel(new BorderLayout()); UILabel titleLabel = new UILabel(Toolkit.i18nText("Fine-Design_Share_Drag_And_Make_Component")); - UILabel imageLabel = new UILabel(new ImageIcon(IOUtils.readImage("com/fr/base/images/share/guide.png").getScaledInstance(DEFAULT.width, DEFAULT.height, Image.SCALE_SMOOTH))); + UILabel imageLabel = new UILabel(new ImageIcon(IOUtils.readImage("com/fr/design/images/dashboard/guide.png").getScaledInstance(DEFAULT.width, DEFAULT.height, Image.SCALE_SMOOTH))); titleLabel.setFont(new Font(titleLabel.getFont().getName(), Font.BOLD, TITLE_FONT_SIZE)); titleLabel.setBorder(BorderFactory.createEmptyBorder()); diff --git a/designer-base/src/main/resources/com/fr/design/images/dashboard/guide.png b/designer-base/src/main/resources/com/fr/design/images/dashboard/guide.png index fbd5593bba448cfee56ef62e39c338ad2753fb5f..411a9a29629e8ddb001e476b6491f83a1c233e61 100644 GIT binary patch literal 314951 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 z

      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 m=2#5BpZ(huj{0~0E5HEus|{4u{#=g$0000 Date: Thu, 10 Jun 2021 15:37:44 +0800 Subject: [PATCH 129/148] =?UTF-8?q?REPORT-53710=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E5=A4=84=E4=BA=8E=E6=9C=AA=E7=99=BB=E5=BD=95=E7=8A=B6?= =?UTF-8?q?=E6=80=81=EF=BC=8C=E5=88=87=E6=8D=A2=E8=87=B3=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=8F=98=E4=B8=BA=E7=99=BB=E5=BD=95=E7=8A=B6?= =?UTF-8?q?=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer-base/src/main/resources/com/fr/design/login/login.js | 2 +- .../src/main/java/com/fr/start/module/DesignerActivator.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/resources/com/fr/design/login/login.js b/designer-base/src/main/resources/com/fr/design/login/login.js index 49fe1bcfaf..cec6fd34b1 100644 --- a/designer-base/src/main/resources/com/fr/design/login/login.js +++ b/designer-base/src/main/resources/com/fr/design/login/login.js @@ -1 +1 @@ -!function(e){var t={};function i(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,i),o.l=!0,o.exports}i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)i.d(n,o,function(t){return e[t]}.bind(null,o));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=4)}([function(e,t,i){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,i,n){n===undefined&&(n=i),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[i]}})}:function(e,t,i,n){n===undefined&&(n=i),e[n]=t[i]}),o=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||t.hasOwnProperty(i)||n(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),o(i(5),t)},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=window.DesignerLoginHelper,o=function(){function e(){}return e.prototype.getParams=function(){return{designerLoginSource:window.designerLoginSource||"0",lastLoginType:window.lastLoginType||"-1",lastLoginAccount:window.lastLoginAccount||""}},e.prototype.closeWindow=function(e){n&&n.closeWindow(e)},e.prototype.serviceHref=function(){n?n.serviceHref():window.open("https://bbs.fanruan.com/thread-102821-1-1.html")},e.prototype.forgetHref=function(){n?n.forgetHref():window.open("https://id.fanruan.com/forget/forget.php?clue=activityf")},e.prototype.normalLogin=function(e,t,i){n?n.normalLogin(e,t,i):i(-1)},e.prototype.sendCaptcha=function(e,t,i){n?n.sendCaptcha(e,t,i):i(-1)},e.prototype.smsLogin=function(e,t,i,o){n?n.smsLogin(e,t,i,o):o(null)},e.prototype.smsRegister=function(e,t,i,o,s){n?n.smsRegister(e,t,i,o,s):s(-1)},e.prototype.resize=function(e,t){n&&n.resize(e,t)},e}();t["default"]=new o},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.BBS_ERROR_CODE=t.NORMAL_LOGIN_RESULT=t.REGION=t.LOGIN=void 0,t.LOGIN={NORMAL_METHOD:"normal",SMS_METHOD:"sms",TABS:{LOGIN:"login",FORGET_PASSWORD:"forget",RESET_PASSWORD:"reset",REGISTER:"register"}},t.REGION=[{value:"+86",text:"Designer-Basic_Chinese_Mainland"},{value:"+886",text:"Designer-Basic_Chinese_Taiwan"},{value:"+852",text:"Designer-Basic_Chinese_Hong_Kong"},{value:"+853",text:"Designer-Basic_Chinese_Macao"},{value:"+90",text:"Designer-Basic_Turkey"},{value:"+82",text:"Designer-Basic_South_Korea"},{value:"+81",text:"Designer-Basic_Japan"},{value:"+65",text:"Designer-Basic_Singapore"},{value:"+60",text:"Designer-Basic_Malaysia"}],t.NORMAL_LOGIN_RESULT=[{status:0,message:"Designer-Login_Internal_Error"},{status:-1,message:"Designer-Login_Store_User_Not_Exist"},{status:-2,message:"Designer-Login_Store_User_Password_Error"},{status:-3,message:"Designer-Login_Unexpected_Error"},{status:-4,message:"Designer-Login_Network_Connected_Failed"}],t.BBS_ERROR_CODE=[{status:0,message:"Designer-Login_Internal_Error"},{status:-1,message:"Designer-BBS_Register_Timeout"},{status:-2,message:"Designer-BBS_Phone_Is_Register"},{status:-3,message:"Designer-BBS_Captcha_Send_Exceed_Limit"},{status:-4,message:"Designer-BBS_Phone_Format_Error"},{status:-100,message:"Designer-BBS_Captcha_Out_Of_Date"},{status:-101,message:"Designer-BBS_Captcha_Try_Exceed_Limit"},{status:-102,message:"Designer-BBS_Captcha_Error"},{status:-104,message:"Designer-BBS_Username_Format_Error"},{status:-103,message:"Designer-BBS_Please_Enter_Correct_Phone"},{status:-105,message:"Designer-BBS_Username_Too_Short"},{status:-106,message:"Designer-BBS_Username_Too_Long"},{status:-107,message:"Designer-BBS_Phone_Is_Register"},{status:-108,message:"Designer-BBS_Username_Is_Register"}]},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getError=void 0,t.getError=function(e,t){var i=BI.find(e,(function(e,i){return i.status===t}));return i&&i.message?i.message:""}},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(0),o=i(6);BI.addI18n(Store.i18n),BI.createWidget({type:n.Vertical,element:"body",items:[{type:o["default"]}]})},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ListView=t.VirtualGroup=t.LeftRightVerticalAdapt=t.Left=t.Horizontal=t.Vertical=t.Absolute=t.Layout=t.Htape=t.CenterAdapt=t.Vtape=t.HorizontalAdapt=t.VerticalAdapt=t.BubbleCombo=t.Img=t.Tab=t.SingleSelectInsertCombo=t.SingleSelectRadioItem=t.MultiTreePopupView=t.Editor=t.NicEditor=t.RichEditor=t.MultiTreeCombo=t.DynamicDateTimeCombo=t.DynamicDateCombo=t.BarPopOver=t.MultiSelectItem=t.TextAreaEditor=t.AllValueChooserCombo=t.ButtonGroup=t.MultiSelectInsertCombo=t.TextEditor=t.Button=t.SignEditor=t.MultiFileEditor=t.SmallTextEditor=t.HtmlLabel=t.Label=t.DownListCombo=t.TextButton=t.IconChangeButton=t.IconButton=t.IconTextIconItem=t.IconTextItem=void 0,t.IconTextItem="bi.icon_text_item",t.IconTextIconItem="bi.icon_text_icon_item",t.IconButton="bi.icon_button",t.IconChangeButton="bi.icon_change_button",t.TextButton="bi.text_button",t.DownListCombo="bi.down_list_combo",t.Label="bi.label",t.HtmlLabel="bi.html_label",t.SmallTextEditor="bi.small_text_editor",t.MultiFileEditor="bi.multifile_editor",t.SignEditor="bi.sign_editor",t.Button="bi.button",t.TextEditor="bi.text_editor",t.MultiSelectInsertCombo="bi.multi_select_insert_combo",t.ButtonGroup="bi.button_group",t.AllValueChooserCombo="bi.all_value_chooser_combo",t.TextAreaEditor="bi.textarea_editor",t.MultiSelectItem="bi.multi_select_item",t.BarPopOver="bi.bar_popover",t.DynamicDateCombo="bi.dynamic_date_combo",t.DynamicDateTimeCombo="bi.dynamic_date_time_combo",t.MultiTreeCombo="bi.multi_tree_combo",t.RichEditor="bi.rich_editor",t.NicEditor="bi.nic_editor",t.Editor="bi.editor",t.MultiTreePopupView="bi.multi_tree_popup_view",t.SingleSelectRadioItem="bi.single_select_radio_item",t.SingleSelectInsertCombo="bi.single_select_insert_combo",t.Tab="bi.tab",t.Img="bi.img",t.BubbleCombo="bi.bubble_combo",t.VerticalAdapt="bi.vertical_adapt",t.HorizontalAdapt="bi.horizontal_adapt",t.Vtape="bi.vtape",t.CenterAdapt="bi.center_adapt",t.Htape="bi.htape",t.Layout="bi.layout",t.Absolute="bi.absolute",t.Vertical="bi.vertical",t.Horizontal="bi.horizontal",t.Left="bi.left",t.LeftRightVerticalAdapt="bi.left_right_vertical_adapt",t.VirtualGroup="bi.virtual_group",t.ListView="bi.list_view"},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(7),s=i(8),r=i(9),a=i(11);i(24),t.className="designer.login.login",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login",width:420},_store:function(){return BI.Models.getModel(o["default"])},watch:{loading:function(e){this.loading.setVisible(e)}},render:function(){return{type:n.Vertical,cls:"designer-login",items:[{el:{type:n.HorizontalAdapt,items:[{type:s["default"],rgap:14,tgap:14}]}},{el:{type:n.Vertical,items:[{type:r["default"]},{type:a["default"]}]},lgap:15,rgap:15,bgap:15}]}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});BI.model("designer.login.login.model",BI.inherit(Fix.Model,{childContext:["loading"],state:function(){return{loading:!1}}})),t["default"]="designer.login.login.model"},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(1);t.className="designer.login.login.close.button",t.Widget=BI.inherit(BI.Widget,{render:function(){return{type:n.TextButton,text:String.fromCharCode(10005),cls:"background-login-close",width:18.38,height:18.38,handler:function(){o["default"].closeWindow(!1)}}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0);i(10),t.className="designer.login.login.title",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-title"},render:function(){return{type:n.Label,text:BI.i18nText("Designer-Login_Title"),cls:"bi-font-bold",bgap:10}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(12);i(13);var s=i(14),r=i(16),a=i(18),l=i(2),u=i(1),g=249.64,c=331.64,d=422,f=478,p=560;t.className="designer.login.login.body",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(o["default"])},watch:{loginMethod:function(e){this.tabOption.setValue(e),this.tab.setSelect(e),this.foot.setLoginMethod(e),this.refreshLoginButton(),e===l.LOGIN.NORMAL_METHOD?(this.tab.setHeight(g),u["default"].resize(d,f)):this.model.expand&&(u["default"].resize(d,p),this.tab.setHeight(c))},approve:function(e){this.refreshLoginButton()},expand:function(e){e&&(u["default"].resize(d,p),this.tab.setHeight(c))}},render:function(){var e=this;return{type:n.Vertical,cls:"designer-login-body",items:[{type:n.ButtonGroup,value:this.model.loginMethod,ref:function(t){e.tabOption=t},layouts:[{type:n.HorizontalAdapt}],items:[{cls:"designer-login-change-mode bi-list-item-effect bi-border-bottom bi-font-bold",width:70,height:28,value:l.LOGIN.SMS_METHOD,text:BI.i18nText("Designer-Login_Sms")},{cls:"designer-login-change-mode bi-list-item-effect bi-border-bottom bi-font-bold",width:70,height:28,value:l.LOGIN.NORMAL_METHOD,text:BI.i18nText("Designer-Login_Normal")}],listeners:[{eventName:BI.ButtonGroup.EVENT_CHANGE,action:function(t){e.store.setLoginMethod(t)}}],tgap:24,lgap:75,rgap:75},{type:n.CenterAdapt,tgap:35,items:[{type:n.Tab,cardCreator:BI.bind(this.createCard,this),showIndex:this.model.loginMethod,ref:function(t){e.tab=t},height:g,width:280}]},{type:s["default"],lgap:50,rgap:50,bgap:30,ref:function(t){e.foot=t},refreshStatus:function(t){e.store.setApprove(t)}}]}},mounted:function(){var e=u["default"].getParams(),t=e.designerLoginSource,i=e.lastLoginType;if("2"===t){var n="0"===i?l.LOGIN.NORMAL_METHOD:l.LOGIN.SMS_METHOD;this.store.setLoginMethod(n)}},createCard:function(e){var t=this;switch(e){case l.LOGIN.NORMAL_METHOD:return{type:r["default"],ref:function(e){t.normalMethod=e}};case l.LOGIN.SMS_METHOD:default:return{type:a["default"],ref:function(e){t.smsMethod=e},expand:function(){t.store.setExpand(!0)}}}},refreshLoginButton:function(){this.model.loginMethod===l.LOGIN.NORMAL_METHOD?this.normalMethod.setApprove(this.model.approve):this.smsMethod.setApprove(this.model.approve)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0;var n=i(2);t.className="designer.login.model.login.body",t.Model=BI.inherit(Fix.Model,{context:["loading"],state:function(){return{loginMethod:n.LOGIN.SMS_METHOD,approve:!0,expand:!1}},actions:{setLoginMethod:function(e){this.model.loginMethod=e},setApprove:function(e){this.model.approve=e},setExpand:function(e){this.model.expand=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(1),o=i(0);i(15);var s=i(2);t.className="designer.login.login.foot",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-foot"},render:function(){var e=this,t=this.options;return{type:o.LeftRightVerticalAdapt,items:{left:[{type:o.MultiSelectItem,width:30,selected:!0,handler:function(){t.refreshStatus(this.isSelected())}},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:BI.i18nText("Designer-Login_I_Have_Read")},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:"《"},{type:o.TextButton,cls:"login-link",textAlign:"left",text:BI.i18nText("Designer-Login_Service_Terms"),handler:function(){n["default"].serviceHref()}},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:"》"}],right:[{type:o.TextButton,cls:"login-link",textAlign:"right",text:BI.i18nText("Designer-Login_Forget_Password"),invisible:!0,ref:function(t){e.forgetPassword=t},handler:function(){n["default"].forgetHref()}}]}}},setLoginMethod:function(e){e===s.LOGIN.NORMAL_METHOD?this.forgetPassword.setVisible(!0):this.forgetPassword.setVisible(!1)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(3),s=i(1),r=i(17),a=i(2);t.className="designer.login.login.normal",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(r["default"])},watch:{errMessage:function(e){this.errMessage.setText(e)}},render:function(){var e=this;return{type:n.Vertical,items:[{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_User_Name"),bgap:3},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-username",watermark:BI.i18nText("Designer-Login_User_Name_Hint"),inputType:"text",allowBlank:!0,height:40,ref:function(t){e.userName=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Password"),bgap:3},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Password_Hint"),inputType:"password",allowBlank:!0,height:40,ref:function(t){e.password=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,cls:"designer-login-error-message",textAlign:"center",text:"",height:20,bgap:10,ref:function(t){e.errMessage=t}},{type:n.Button,cls:"login-login-button bi-font-bold",text:BI.i18nText("Designer-Login"),level:"common",height:40,ref:function(t){e.loginButton=t},handler:function(){e.login()}}]}},mounted:function(){var e=this;this.element.keyup((function(t){13===t.keyCode&&e.login()}));var t=s["default"].getParams(),i=t.designerLoginSource,n=t.lastLoginType,o=t.lastLoginAccount;"2"===i&&"0"===n&&e.userName.setValue(o)},checkUsername:function(){var e=this.userName.getValue();e&&this.userName.setValue(e.replace(/\s+/g,""))},login:function(){var e=this;e.checkUsername();var t=this.userName.getValue(),i=this.password.getValue();t?i?s["default"].normalLogin(t,i,(function(t){var i=parseInt(t,10);if(i>0)s["default"].closeWindow(!0);else{var n=o.getError(a.NORMAL_LOGIN_RESULT,i);n&&e.store.setErrMessage(BI.i18nText(n))}})):this.store.setErrMessage(BI.i18nText("Designer-Login_Password_Not_Null")):this.store.setErrMessage(BI.i18nText("Designer-Login_Username_Not_Null"))},setApprove:function(e){this.loginButton.setEnable(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0,t.className="designer.login.model.normal_method",t.Model=BI.inherit(Fix.Model,{context:[""],state:function(){return{errMessage:""}},actions:{setErrMessage:function(e){this.model.errMessage=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(19),s=i(21),r=i(22),a=i(2),l=i(23),u=i(1),g=i(3);t.className="designer.login.login.sms",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(l["default"])},watch:{errMessage:function(e){this.errMessage.setText(e)},isRegister:function(e){var t=this.options;e&&(t.expand(),this.password.setVisible(!0),this.passwordLabel.setVisible(!0))}},render:function(){var e=this,t=this;return{type:n.Vertical,items:[{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Phone"),bgap:3},{type:n.HorizontalAdapt,bgap:7,items:[{type:o["default"],height:42,textFormatter:function(e){var i=t.getNumberTypeItem(e);return{value:i.value,text:BI.i18nText(i.text)}},value:a.REGION[0].value,items:BI.map(a.REGION,(function(e,t){return{type:s["default"],value:t.value,label:BI.i18nText(t.text),text:t.value}})),ref:function(t){e.regionCode=t}},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-username",watermark:BI.i18nText("Designer-Login_Phone_Hint"),inputType:"text",allowBlank:!0,height:40,ref:function(t){e.phone=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Code"),bgap:3},{type:n.Horizontal,bgap:7,items:[{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Code_Hint"),inputType:"text",allowBlank:!0,height:40,width:200,ref:function(t){e.code=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:r["default"],height:40,width:80,ref:function(t){e.accountCaptcha=t},listeners:[{eventName:"EVENT_SEND",action:function(){t.sendCaptcha()}}]}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Password"),bgap:3,invisible:!0,ref:function(t){e.passwordLabel=t}},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Password_Setting_Hint"),inputType:"password",allowBlank:!0,height:40,invisible:!0,ref:function(t){e.password=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,cls:"designer-login-error-message",textAlign:"center",text:"",height:20,bgap:11,ref:function(t){e.errMessage=t}},{type:n.Button,cls:"login-login-button bi-font-bold",text:BI.i18nText("Designer-Login_Register_Or_Login"),level:"common",height:40,ref:function(t){e.loginButton=t},handler:function(){e.login()}}]}},mounted:function(){var e=this;this.element.keyup((function(t){13===t.keyCode&&e.login()}));var t=u["default"].getParams(),i=t.designerLoginSource,n=t.lastLoginType,o=t.lastLoginAccount;if("2"===i&&"1"===n){var s=o.split("-")[0],r=o.split("-")[1];e.regionCode.setValue(s),e.phone.setValue(r)}},getNumberTypeItem:function(e){return BI.find(a.REGION,(function(t,i){return e===i.value}))||{}},checkPhone:function(){var e=this.phone.getValue();e&&this.phone.setValue(e.replace(/\s+/g,""))},login:function(){var e=this,t=this;t.checkPhone();var i=this.phone.getValue(),n=this.code.getValue();if(i)if(n){var o=this.regionCode.getValue();if(this.model.isRegister){var s=this.password.getValue();if(!s)return void this.store.setErrMessage(BI.i18nText("Designer-Login_Password_Not_Null"));var r=this.model.regToken;if(!r)return void this.store.setErrMessage(BI.i18nText("Designer-Login_Token_Request_Failed"));u["default"].smsRegister(o,i,s,r,(function(e){var i=parseInt(e,10);if(i>0)u["default"].closeWindow(!0);else{var n=g.getError(a.BBS_ERROR_CODE,i);n&&t.store.setErrMessage(BI.i18nText(n))}}))}else u["default"].smsLogin(o,i,n,(function(i){var n=JSON.parse(i);if(n.status>0)if(!0===n.register){var o=n.regtoken;o?(t.store.setRegister(!0),t.store.setRegToken(o)):e.store.setErrMessage(BI.i18nText("Designer-Login_Token_Request_Failed"))}else u["default"].closeWindow(!0);else{var s=g.getError(a.BBS_ERROR_CODE,n.status);s&&t.store.setErrMessage(BI.i18nText(s))}}))}else this.store.setErrMessage(BI.i18nText("Designer-Login_Code_Not_Null"));else this.store.setErrMessage(BI.i18nText("Designer-Login_Phone_Not_Null"))},sendCaptcha:function(){var e=this;e.checkPhone();var t=this.phone.getValue();if(!t)return e.accountCaptcha.setButtonEnable(!0),void this.store.setErrMessage(BI.i18nText("Designer-Login_Phone_Not_Null"));var i=this.regionCode.getValue();u["default"].sendCaptcha(i,t,(function(t){var i=parseInt(t,10);if(1===i)e.accountCaptcha.regainCaptcha();else{if(e.accountCaptcha.setButtonEnable(!0),0===i)return void e.store.setErrMessage(BI.i18nText("Designer-BBS_Please_Enter_Correct_Phone"));var n=g.getError(a.BBS_ERROR_CODE,i);n&&e.store.setErrMessage(BI.i18nText(n))}}))},setApprove:function(e){this.loginButton.setEnable(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(20);t.className="designer.left_right_text_value_combo",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"",height:24,chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,textFormatter:function(e){return e},value:""},render:function(){var e=this,t=this.options;return{type:"bi.combo",container:t.container,adjustLength:2,ref:function(t){e.combo=t},el:{type:n["default"],cls:"text-value-trigger",items:t.items,height:t.height-2,value:t.textFormatter(t.value),ref:function(t){e.trigger=t}},popup:{el:{type:"bi.text_value_combo_popup",chooseType:t.chooseType,value:t.value,items:t.items,ref:function(t){e.popup=t},listeners:[{eventName:BI.TextValueComboPopup.EVENT_CHANGE,action:function(){e.setValue(e.getValue()),e.combo.hideView(),e.fireEvent("EVENT_CHANGE",arguments)}},{eventName:BI.Controller.EVENT_CHANGE,action:function(){e.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}}]},value:t.value,maxHeight:240,minHeight:25}}},setValue:function(e){this.combo.setValue(e),this.trigger.setValue(this.options.textFormatter(e))},getValue:function(){var e=this.combo.getValue();return BI.isNull(e)?"":BI.isArray(e)?e[0]:e},populate:function(e){this.options.items=e,this.combo.populate(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0,t.className="designer.left_right_text_value_combo_trigger",t.Widget=BI.inherit(BI.Trigger,{props:{baseCls:"",value:{}},render:function(){var e=this,t=this.options,i=t.value;return{type:"bi.htape",cls:"bi-border-bottom bi-border-radius",items:[{type:"bi.label",text:i.text,title:function(){return e.textRow.getText()},height:t.height,hgap:3,textAlign:"left",ref:function(t){e.textRow=t}},{type:"bi.label",text:i.value,height:t.height,width:32,textAlign:"right",ref:function(t){e.valueRow=t}},{type:"bi.trigger_icon_button",width:t.triggerWidth||t.height}]}},setValue:function(e){this.textRow.setText(e.text),this.valueRow.setText(e.value)},setText:function(e){this.textRow.setText(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0,t.className="designer.components.phone.editor.item",t.Widget=BI.inherit(BI.BasicButton,{props:{baseCls:"designer-login-login-body",label:"",text:""},render:function(){var e=this.options;return{type:"bi.htape",items:[{el:{type:"bi.label",text:e.label,title:e.label,textAlign:"left"},lgap:10,rgap:5},{el:{type:"bi.label",text:e.text,textAlign:"right"},width:32,rgap:10}]}},doClick:function(){BI.SingleSelectItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent("EVENT_CHANGE",this.isSelected(),this)},setSelected:function(e){BI.SingleSelectItem.superclass.setSelected.apply(this,arguments)},getValue:function(){return this.options.value}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0);t.className="designer.user.account.setting.captcha",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},render:function(){var e=this;this.options;return{type:n.TextButton,text:BI.i18nText("Designer-Login_Code_Request"),cls:"designer-login-border-bottom designer-login-code-text",handler:function(){e.setButtonEnable(!1),e.fireEvent("EVENT_SEND")},ref:function(t){e.getButton=t}}},setButtonEnable:function(e){this.captchaTime&&(e=!1),this.getButton.setEnable(e)},regainCaptcha:function(){var e=this,t=0;window.clearInterval(e.captchaTime),this.captchaTime=window.setInterval((function(){if(60===t)return window.clearInterval(e.captchaTime),e.captchaTime=null,e.getButton.setText(BI.i18nText("Designer-Login_Code_Request")),void e.setButtonEnable(!0);e.getButton.setText(BI.i18nText("Designer-Login_Code_Request_Again")+"("+(60-t)+")"),t++}),1e3),this.setButtonEnable(!1)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0,t.className="designer.login.model.sms_method",t.Model=BI.inherit(Fix.Model,{context:[""],state:function(){return{errMessage:"",isRegister:!1,regToken:""}},actions:{setErrMessage:function(e){this.model.errMessage=e},setRegister:function(e){this.model.isRegister=e},setRegToken:function(e){this.model.regToken=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){}]); \ No newline at end of file +!function(e){var t={};function i(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,i),o.l=!0,o.exports}i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)i.d(n,o,function(t){return e[t]}.bind(null,o));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=4)}([function(e,t,i){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,i,n){n===undefined&&(n=i),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[i]}})}:function(e,t,i,n){n===undefined&&(n=i),e[n]=t[i]}),o=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||t.hasOwnProperty(i)||n(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),o(i(5),t)},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=window.DesignerLoginHelper,o=function(){function e(){}return e.prototype.getParams=function(){return{designerLoginSource:window.designerLoginSource||"0",lastLoginType:window.lastLoginType||"-1",lastLoginAccount:window.lastLoginAccount||""}},e.prototype.closeWindow=function(e){n&&n.closeWindow(e)},e.prototype.serviceHref=function(){n?n.serviceHref():window.open("https://bbs.fanruan.com/thread-102821-1-1.html")},e.prototype.forgetHref=function(){n?n.forgetHref():window.open("https://id.fanruan.com/forget/forget.php?clue=activityf")},e.prototype.normalLogin=function(e,t,i){n?n.normalLogin(e,t,i):i(-1)},e.prototype.sendCaptcha=function(e,t,i){n?n.sendCaptcha(e,t,i):i(-1)},e.prototype.smsLogin=function(e,t,i,o){n?n.smsLogin(e,t,i,o):o(null)},e.prototype.smsRegister=function(e,t,i,o,s){n?n.smsRegister(e,t,i,o,s):s(-1)},e.prototype.resize=function(e,t){n&&n.resize(e,t)},e}();t["default"]=new o},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.BBS_ERROR_CODE=t.NORMAL_LOGIN_RESULT=t.REGION=t.LOGIN=void 0,t.LOGIN={NORMAL_METHOD:"normal",SMS_METHOD:"sms",TABS:{LOGIN:"login",FORGET_PASSWORD:"forget",RESET_PASSWORD:"reset",REGISTER:"register"}},t.REGION=[{value:"+86",text:"Designer-Basic_Chinese_Mainland"},{value:"+886",text:"Designer-Basic_Chinese_Taiwan"},{value:"+852",text:"Designer-Basic_Chinese_Hong_Kong"},{value:"+853",text:"Designer-Basic_Chinese_Macao"},{value:"+90",text:"Designer-Basic_Turkey"},{value:"+82",text:"Designer-Basic_South_Korea"},{value:"+81",text:"Designer-Basic_Japan"},{value:"+65",text:"Designer-Basic_Singapore"},{value:"+60",text:"Designer-Basic_Malaysia"}],t.NORMAL_LOGIN_RESULT=[{status:0,message:"Designer-Login_Internal_Error"},{status:-1,message:"Designer-Login_Store_User_Not_Exist"},{status:-2,message:"Designer-Login_Store_User_Password_Error"},{status:-3,message:"Designer-Login_Unexpected_Error"},{status:-4,message:"Designer-Login_Network_Connected_Failed"}],t.BBS_ERROR_CODE=[{status:0,message:"Designer-Login_Internal_Error"},{status:-1,message:"Designer-BBS_Register_Timeout"},{status:-2,message:"Designer-BBS_Phone_Is_Register"},{status:-3,message:"Designer-BBS_Captcha_Send_Exceed_Limit"},{status:-4,message:"Designer-BBS_Phone_Format_Error"},{status:-100,message:"Designer-BBS_Captcha_Out_Of_Date"},{status:-101,message:"Designer-BBS_Captcha_Try_Exceed_Limit"},{status:-102,message:"Designer-BBS_Captcha_Error"},{status:-104,message:"Designer-BBS_Username_Format_Error"},{status:-103,message:"Designer-BBS_Please_Enter_Correct_Phone"},{status:-105,message:"Designer-BBS_Username_Too_Short"},{status:-106,message:"Designer-BBS_Username_Too_Long"},{status:-107,message:"Designer-BBS_Phone_Is_Register"},{status:-108,message:"Designer-BBS_Username_Is_Register"}]},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getError=void 0,t.getError=function(e,t){var i=BI.find(e,(function(e,i){return i.status===t}));return i&&i.message?i.message:""}},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(0),o=i(6);BI.addI18n(Store.i18n),BI.createWidget({type:n.Vertical,element:"body",items:[{type:o["default"]}]})},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ListView=t.VirtualGroup=t.LeftRightVerticalAdapt=t.Left=t.Horizontal=t.Vertical=t.Absolute=t.Layout=t.Htape=t.CenterAdapt=t.Vtape=t.HorizontalAdapt=t.VerticalAdapt=t.BubbleCombo=t.Img=t.Tab=t.SingleSelectInsertCombo=t.SingleSelectRadioItem=t.MultiTreePopupView=t.Editor=t.NicEditor=t.RichEditor=t.MultiTreeCombo=t.DynamicDateTimeCombo=t.DynamicDateCombo=t.BarPopOver=t.MultiSelectItem=t.TextAreaEditor=t.AllValueChooserCombo=t.ButtonGroup=t.MultiSelectInsertCombo=t.TextEditor=t.Button=t.SignEditor=t.MultiFileEditor=t.SmallTextEditor=t.HtmlLabel=t.Label=t.DownListCombo=t.TextButton=t.IconChangeButton=t.IconButton=t.IconTextIconItem=t.IconTextItem=void 0,t.IconTextItem="bi.icon_text_item",t.IconTextIconItem="bi.icon_text_icon_item",t.IconButton="bi.icon_button",t.IconChangeButton="bi.icon_change_button",t.TextButton="bi.text_button",t.DownListCombo="bi.down_list_combo",t.Label="bi.label",t.HtmlLabel="bi.html_label",t.SmallTextEditor="bi.small_text_editor",t.MultiFileEditor="bi.multifile_editor",t.SignEditor="bi.sign_editor",t.Button="bi.button",t.TextEditor="bi.text_editor",t.MultiSelectInsertCombo="bi.multi_select_insert_combo",t.ButtonGroup="bi.button_group",t.AllValueChooserCombo="bi.all_value_chooser_combo",t.TextAreaEditor="bi.textarea_editor",t.MultiSelectItem="bi.multi_select_item",t.BarPopOver="bi.bar_popover",t.DynamicDateCombo="bi.dynamic_date_combo",t.DynamicDateTimeCombo="bi.dynamic_date_time_combo",t.MultiTreeCombo="bi.multi_tree_combo",t.RichEditor="bi.rich_editor",t.NicEditor="bi.nic_editor",t.Editor="bi.editor",t.MultiTreePopupView="bi.multi_tree_popup_view",t.SingleSelectRadioItem="bi.single_select_radio_item",t.SingleSelectInsertCombo="bi.single_select_insert_combo",t.Tab="bi.tab",t.Img="bi.img",t.BubbleCombo="bi.bubble_combo",t.VerticalAdapt="bi.vertical_adapt",t.HorizontalAdapt="bi.horizontal_adapt",t.Vtape="bi.vtape",t.CenterAdapt="bi.center_adapt",t.Htape="bi.htape",t.Layout="bi.layout",t.Absolute="bi.absolute",t.Vertical="bi.vertical",t.Horizontal="bi.horizontal",t.Left="bi.left",t.LeftRightVerticalAdapt="bi.left_right_vertical_adapt",t.VirtualGroup="bi.virtual_group",t.ListView="bi.list_view"},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(7),s=i(8),r=i(9),a=i(11);i(24),t.className="designer.login.login",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login",width:420},_store:function(){return BI.Models.getModel(o["default"])},watch:{loading:function(e){this.loading.setVisible(e)}},render:function(){return{type:n.Vertical,cls:"designer-login",items:[{el:{type:n.HorizontalAdapt,items:[{type:s["default"],rgap:14,tgap:14}]}},{el:{type:n.Vertical,items:[{type:r["default"]},{type:a["default"]}]},lgap:15,rgap:15,bgap:15}]}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});BI.model("designer.login.login.model",BI.inherit(Fix.Model,{childContext:["loading"],state:function(){return{loading:!1}}})),t["default"]="designer.login.login.model"},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(1);t.className="designer.login.login.close.button",t.Widget=BI.inherit(BI.Widget,{render:function(){return{type:n.TextButton,text:String.fromCharCode(10005),cls:"background-login-close",width:18.38,height:18.38,handler:function(){o["default"].closeWindow(!1)}}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0);i(10),t.className="designer.login.login.title",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-title"},render:function(){return{type:n.Label,text:BI.i18nText("Designer-Login_Title"),cls:"bi-font-bold",bgap:10}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(12);i(13);var s=i(14),r=i(16),a=i(18),l=i(2),u=i(1),g=249.64,c=331.64,d=422,f=478,p=560;t.className="designer.login.login.body",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(o["default"])},watch:{loginMethod:function(e){this.tabOption.setValue(e),this.tab.setSelect(e),this.foot.setLoginMethod(e),this.refreshLoginButton(),e===l.LOGIN.NORMAL_METHOD?(this.tab.setHeight(g),u["default"].resize(d,f)):this.model.expand&&(u["default"].resize(d,p),this.tab.setHeight(c))},approve:function(e){this.refreshLoginButton()},expand:function(e){e&&(u["default"].resize(d,p),this.tab.setHeight(c))}},render:function(){var e=this;return{type:n.Vertical,cls:"designer-login-body",items:[{type:n.ButtonGroup,value:this.model.loginMethod,ref:function(t){e.tabOption=t},layouts:[{type:n.HorizontalAdapt}],items:[{cls:"designer-login-change-mode bi-list-item-effect bi-border-bottom bi-font-bold",width:70,height:28,value:l.LOGIN.SMS_METHOD,text:BI.i18nText("Designer-Login_Sms")},{cls:"designer-login-change-mode bi-list-item-effect bi-border-bottom bi-font-bold",width:70,height:28,value:l.LOGIN.NORMAL_METHOD,text:BI.i18nText("Designer-Login_Normal")}],listeners:[{eventName:BI.ButtonGroup.EVENT_CHANGE,action:function(t){e.store.setLoginMethod(t)}}],tgap:24,lgap:75,rgap:75},{type:n.CenterAdapt,tgap:35,items:[{type:n.Tab,cardCreator:BI.bind(this.createCard,this),showIndex:this.model.loginMethod,ref:function(t){e.tab=t},height:g,width:280}]},{type:s["default"],lgap:50,rgap:50,bgap:30,ref:function(t){e.foot=t},refreshStatus:function(t){e.store.setApprove(t)}}]}},mounted:function(){var e=u["default"].getParams(),t=e.designerLoginSource,i=e.lastLoginType;if("2"===t){var n="0"===i?l.LOGIN.NORMAL_METHOD:l.LOGIN.SMS_METHOD;this.store.setLoginMethod(n)}},createCard:function(e){var t=this;switch(e){case l.LOGIN.NORMAL_METHOD:return{type:r["default"],ref:function(e){t.normalMethod=e}};case l.LOGIN.SMS_METHOD:default:return{type:a["default"],ref:function(e){t.smsMethod=e},expand:function(){t.store.setExpand(!0)}}}},refreshLoginButton:function(){this.model.loginMethod===l.LOGIN.NORMAL_METHOD?this.normalMethod.setApprove(this.model.approve):this.smsMethod.setApprove(this.model.approve)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0;var n=i(2);t.className="designer.login.model.login.body",t.Model=BI.inherit(Fix.Model,{context:["loading"],state:function(){return{loginMethod:n.LOGIN.SMS_METHOD,approve:!0,expand:!1}},actions:{setLoginMethod:function(e){this.model.loginMethod=e},setApprove:function(e){this.model.approve=e},setExpand:function(e){this.model.expand=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(1),o=i(0);i(15);var s=i(2);t.className="designer.login.login.foot",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-foot"},render:function(){var e=this,t=this.options;return{type:o.LeftRightVerticalAdapt,items:{left:[{type:o.MultiSelectItem,width:30,selected:!0,handler:function(){t.refreshStatus(this.isSelected())}},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:BI.i18nText("Designer-Login_I_Have_Read")},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:"《"},{type:o.TextButton,cls:"login-link",textAlign:"left",text:BI.i18nText("Designer-Login_Service_Terms"),handler:function(){n["default"].serviceHref()}},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:"》"}],right:[{type:o.TextButton,cls:"login-link",textAlign:"right",text:BI.i18nText("Designer-Login_Forget_Password"),invisible:!0,ref:function(t){e.forgetPassword=t},handler:function(){n["default"].forgetHref()}}]}}},setLoginMethod:function(e){e===s.LOGIN.NORMAL_METHOD?this.forgetPassword.setVisible(!0):this.forgetPassword.setVisible(!1)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(3),s=i(1),r=i(17),a=i(2);t.className="designer.login.login.normal",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(r["default"])},watch:{errMessage:function(e){this.errMessage.setText(e)}},render:function(){var e=this;return{type:n.Vertical,items:[{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_User_Name"),bgap:3},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-username",watermark:BI.i18nText("Designer-Login_User_Name_Hint"),inputType:"text",allowBlank:!0,height:40,ref:function(t){e.userName=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Password"),bgap:3},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Password_Hint"),inputType:"password",allowBlank:!0,height:40,ref:function(t){e.password=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,cls:"designer-login-error-message",textAlign:"center",text:"",height:20,bgap:10,ref:function(t){e.errMessage=t}},{type:n.Button,cls:"login-login-button bi-font-bold",text:BI.i18nText("Designer-Login"),level:"common",height:40,ref:function(t){e.loginButton=t},handler:function(){e.login()}}]}},mounted:function(){var e=this;this.element.keyup((function(t){13===t.keyCode&&e.login()}));var t=s["default"].getParams(),i=t.designerLoginSource,n=t.lastLoginType,o=t.lastLoginAccount;"2"===i&&"0"===n&&e.userName.setValue(o)},checkUsername:function(){var e=this.userName.getValue();e&&this.userName.setValue(e.replace(/\s+/g,""))},login:function(){var e=this;e.checkUsername();var t=this.userName.getValue(),i=this.password.getValue();t?i?s["default"].normalLogin(t,i,(function(t){var i=parseInt(t,10);if(i>0)s["default"].closeWindow(!0);else{var n=o.getError(a.NORMAL_LOGIN_RESULT,i);n&&e.store.setErrMessage(BI.i18nText(n))}})):this.store.setErrMessage(BI.i18nText("Designer-Login_Password_Not_Null")):this.store.setErrMessage(BI.i18nText("Designer-Login_Username_Not_Null"))},setApprove:function(e){this.loginButton.setEnable(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0,t.className="designer.login.model.normal_method",t.Model=BI.inherit(Fix.Model,{context:[""],state:function(){return{errMessage:""}},actions:{setErrMessage:function(e){this.model.errMessage=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(19),s=i(21),r=i(22),a=i(2),l=i(23),u=i(1),g=i(3);t.className="designer.login.login.sms",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(l["default"])},watch:{errMessage:function(e){this.errMessage.setText(e)},isRegister:function(e){var t=this.options;e&&(t.expand(),this.password.setVisible(!0),this.passwordLabel.setVisible(!0))}},render:function(){var e=this,t=this;return{type:n.Vertical,items:[{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Phone"),bgap:3},{type:n.HorizontalAdapt,bgap:7,items:[{type:o["default"],height:42,textFormatter:function(e){var i=t.getNumberTypeItem(e);return{value:i.value,text:BI.i18nText(i.text)}},value:a.REGION[0].value,items:BI.map(a.REGION,(function(e,t){return{type:s["default"],value:t.value,label:BI.i18nText(t.text),text:t.value}})),ref:function(t){e.regionCode=t}},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-username",watermark:BI.i18nText("Designer-Login_Phone_Hint"),inputType:"text",allowBlank:!0,height:40,ref:function(t){e.phone=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Code"),bgap:3},{type:n.Horizontal,bgap:7,items:[{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Code_Hint"),inputType:"text",allowBlank:!0,height:40,width:190,ref:function(t){e.code=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:r["default"],height:40,width:90,ref:function(t){e.accountCaptcha=t},listeners:[{eventName:"EVENT_SEND",action:function(){t.sendCaptcha()}}]}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Password"),bgap:3,invisible:!0,ref:function(t){e.passwordLabel=t}},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Password_Setting_Hint"),inputType:"password",allowBlank:!0,height:40,invisible:!0,ref:function(t){e.password=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,cls:"designer-login-error-message",textAlign:"center",text:"",height:20,bgap:11,ref:function(t){e.errMessage=t}},{type:n.Button,cls:"login-login-button bi-font-bold",text:BI.i18nText("Designer-Login_Register_Or_Login"),level:"common",height:40,ref:function(t){e.loginButton=t},handler:function(){e.login()}}]}},mounted:function(){var e=this;this.element.keyup((function(t){13===t.keyCode&&e.login()}));var t=u["default"].getParams(),i=t.designerLoginSource,n=t.lastLoginType,o=t.lastLoginAccount;if("2"===i&&"1"===n){var s=o.split("-")[0],r=o.split("-")[1];e.regionCode.setValue(s),e.phone.setValue(r)}},getNumberTypeItem:function(e){return BI.find(a.REGION,(function(t,i){return e===i.value}))||{}},checkPhone:function(){var e=this.phone.getValue();e&&this.phone.setValue(e.replace(/\s+/g,""))},login:function(){var e=this,t=this;t.checkPhone();var i=this.phone.getValue(),n=this.code.getValue();if(i)if(n){var o=this.regionCode.getValue();if(this.model.isRegister){var s=this.password.getValue();if(!s)return void this.store.setErrMessage(BI.i18nText("Designer-Login_Password_Not_Null"));var r=this.model.regToken;if(!r)return void this.store.setErrMessage(BI.i18nText("Designer-Login_Token_Request_Failed"));u["default"].smsRegister(o,i,s,r,(function(e){var i=parseInt(e,10);if(i>0)u["default"].closeWindow(!0);else{var n=g.getError(a.BBS_ERROR_CODE,i);n&&t.store.setErrMessage(BI.i18nText(n))}}))}else u["default"].smsLogin(o,i,n,(function(i){var n=JSON.parse(i);if(n.status>0)if(!0===n.register){var o=n.regtoken;o?(t.store.setRegister(!0),t.store.setRegToken(o)):e.store.setErrMessage(BI.i18nText("Designer-Login_Token_Request_Failed"))}else u["default"].closeWindow(!0);else{var s=g.getError(a.BBS_ERROR_CODE,n.status);s&&t.store.setErrMessage(BI.i18nText(s))}}))}else this.store.setErrMessage(BI.i18nText("Designer-Login_Code_Not_Null"));else this.store.setErrMessage(BI.i18nText("Designer-Login_Phone_Not_Null"))},sendCaptcha:function(){var e=this;e.checkPhone();var t=this.phone.getValue();if(!t)return e.accountCaptcha.setButtonEnable(!0),void this.store.setErrMessage(BI.i18nText("Designer-Login_Phone_Not_Null"));var i=this.regionCode.getValue();u["default"].sendCaptcha(i,t,(function(t){var i=parseInt(t,10);if(1===i)e.accountCaptcha.regainCaptcha();else{if(e.accountCaptcha.setButtonEnable(!0),0===i)return void e.store.setErrMessage(BI.i18nText("Designer-BBS_Please_Enter_Correct_Phone"));var n=g.getError(a.BBS_ERROR_CODE,i);n&&e.store.setErrMessage(BI.i18nText(n))}}))},setApprove:function(e){this.loginButton.setEnable(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(20);t.className="designer.left_right_text_value_combo",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"",height:24,chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,textFormatter:function(e){return e},value:""},render:function(){var e=this,t=this.options;return{type:"bi.combo",container:t.container,adjustLength:2,ref:function(t){e.combo=t},el:{type:n["default"],cls:"text-value-trigger",items:t.items,height:t.height-2,value:t.textFormatter(t.value),ref:function(t){e.trigger=t}},popup:{el:{type:"bi.text_value_combo_popup",chooseType:t.chooseType,value:t.value,items:t.items,ref:function(t){e.popup=t},listeners:[{eventName:BI.TextValueComboPopup.EVENT_CHANGE,action:function(){e.setValue(e.getValue()),e.combo.hideView(),e.fireEvent("EVENT_CHANGE",arguments)}},{eventName:BI.Controller.EVENT_CHANGE,action:function(){e.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}}]},value:t.value,maxHeight:240,minHeight:25}}},setValue:function(e){this.combo.setValue(e),this.trigger.setValue(this.options.textFormatter(e))},getValue:function(){var e=this.combo.getValue();return BI.isNull(e)?"":BI.isArray(e)?e[0]:e},populate:function(e){this.options.items=e,this.combo.populate(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0,t.className="designer.left_right_text_value_combo_trigger",t.Widget=BI.inherit(BI.Trigger,{props:{baseCls:"",value:{}},render:function(){var e=this,t=this.options,i=t.value;return{type:"bi.htape",cls:"bi-border-bottom bi-border-radius",items:[{type:"bi.label",text:i.text,title:function(){return e.textRow.getText()},height:t.height,hgap:3,textAlign:"left",ref:function(t){e.textRow=t}},{type:"bi.label",text:i.value,height:t.height,width:32,textAlign:"right",ref:function(t){e.valueRow=t}},{type:"bi.trigger_icon_button",width:t.triggerWidth||t.height}]}},setValue:function(e){this.textRow.setText(e.text),this.valueRow.setText(e.value)},setText:function(e){this.textRow.setText(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0,t.className="designer.components.phone.editor.item",t.Widget=BI.inherit(BI.BasicButton,{props:{baseCls:"designer-login-login-body",label:"",text:""},render:function(){var e=this.options;return{type:"bi.htape",items:[{el:{type:"bi.label",text:e.label,title:e.label,textAlign:"left"},lgap:10,rgap:5},{el:{type:"bi.label",text:e.text,textAlign:"right"},width:32,rgap:10}]}},doClick:function(){BI.SingleSelectItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent("EVENT_CHANGE",this.isSelected(),this)},setSelected:function(e){BI.SingleSelectItem.superclass.setSelected.apply(this,arguments)},getValue:function(){return this.options.value}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0);t.className="designer.user.account.setting.captcha",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},render:function(){var e=this;this.options;return{type:n.TextButton,text:BI.i18nText("Designer-Login_Code_Request"),cls:"designer-login-border-bottom designer-login-code-text",handler:function(){e.setButtonEnable(!1),e.fireEvent("EVENT_SEND")},ref:function(t){e.getButton=t}}},setButtonEnable:function(e){this.captchaTime&&(e=!1),this.getButton.setEnable(e)},regainCaptcha:function(){var e=this,t=0;window.clearInterval(e.captchaTime),this.captchaTime=window.setInterval((function(){if(60===t)return window.clearInterval(e.captchaTime),e.captchaTime=null,e.getButton.setText(BI.i18nText("Designer-Login_Code_Request")),void e.setButtonEnable(!0);e.getButton.setText(BI.i18nText("Designer-Login_Code_Request_Again")+"("+(60-t)+")"),t++}),1e3),this.setButtonEnable(!1)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0,t.className="designer.login.model.sms_method",t.Model=BI.inherit(Fix.Model,{context:[""],state:function(){return{errMessage:"",isRegister:!1,regToken:""}},actions:{setErrMessage:function(e){this.model.errMessage=e},setRegister:function(e){this.model.isRegister=e},setRegToken:function(e){this.model.regToken=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){}]); \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java index 0427fe3c4d..2a59607f1c 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java @@ -118,6 +118,7 @@ import com.fr.stable.xml.ObjectTokenizer; import com.fr.stable.xml.ObjectXMLWriterFinder; import com.fr.start.BBSGuestPaneProvider; import com.fr.task.Once; +import com.fr.workspace.WorkContext; import com.fr.xml.ReportXMLUtils; import java.util.ArrayList; @@ -425,6 +426,9 @@ public class DesignerActivator extends Activator implements Prepare { } private void migrateBBSInfoFromFineDB() { + if (!WorkContext.getCurrent().isLocal()) { + return; + } DesignerEnvManager manager = DesignerEnvManager.getEnvManager(); if (manager.isCurrentVersionFirstLaunch()) { int newUid = manager.getDesignerLoginUid(); From 505756d314205e13726e9b993bc803efa31a629b Mon Sep 17 00:00:00 2001 From: Lanlan Date: Thu, 10 Jun 2021 16:00:03 +0800 Subject: [PATCH 130/148] =?UTF-8?q?=E7=99=BB=E5=BD=95=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=E9=A2=9C=E8=89=B2=E5=88=87=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/bbs/UserInfoLabel.java | 18 ++++++------------ .../fr/design/mainframe/bbs/UserInfoPane.java | 11 +++++++++++ 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoLabel.java b/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoLabel.java index c9e83d5b6d..29180c09db 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoLabel.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoLabel.java @@ -17,13 +17,9 @@ import com.fr.design.login.DesignerLoginSource; import com.fr.design.login.utils.DesignerLoginUtils; import com.fr.design.mainframe.DesignerContext; import com.fr.design.os.impl.SupportOSImpl; -import com.fr.design.upm.event.CertificateEvent; import com.fr.design.utils.BrowseUtils; import com.fr.design.utils.concurrent.ThreadFactoryBuilder; import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.event.Event; -import com.fr.event.EventDispatcher; -import com.fr.event.Listener; import com.fr.general.CloudCenter; import com.fr.general.ComparatorUtils; import com.fr.general.DateUtils; @@ -79,12 +75,16 @@ public class UserInfoLabel extends UILabel { @Override public void mouseEntered(MouseEvent e) { UserInfoLabel.this.setCursor(new Cursor(Cursor.HAND_CURSOR)); - UserInfoLabel.this.setBackground(UIConstants.DESIGNER_LOGIN_BACKGROUND_ONCLICK); + if (StringUtils.isEmpty(DesignerEnvManager.getEnvManager().getDesignerLoginUsername())) { + UserInfoLabel.this.setBackground(UIConstants.DESIGNER_LOGIN_BACKGROUND_ONCLICK); + } } @Override public void mouseExited(MouseEvent e) { - UserInfoLabel.this.setBackground(UIConstants.DESIGNER_LOGIN_BACKGROUND); + if (StringUtils.isEmpty(DesignerEnvManager.getEnvManager().getDesignerLoginUsername())) { + UserInfoLabel.this.setBackground(UIConstants.DESIGNER_LOGIN_BACKGROUND); + } } @Override @@ -211,12 +211,6 @@ public class UserInfoLabel extends UILabel { DesignerLoginHelper.showLoginDialog(source); } }); - EventDispatcher.listen(CertificateEvent.LOGIN, new Listener() { - @Override - public void on(Event event, String text) { - setText(text); - } - }); } private void clearLoginInformation() { diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoPane.java index 1e3df83df4..e6ae079aa4 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoPane.java @@ -9,6 +9,10 @@ import com.fr.design.DesignerEnvManager; import com.fr.design.constants.UIConstants; import com.fr.design.dialog.BasicPane; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.upm.event.CertificateEvent; +import com.fr.event.Event; +import com.fr.event.EventDispatcher; +import com.fr.event.Listener; import com.fr.general.DateUtils; import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; @@ -75,6 +79,13 @@ public class UserInfoPane extends BasicPane { autoPushLoginDialog(); this.add(userInfoLabel, BorderLayout.CENTER); + + EventDispatcher.listen(CertificateEvent.LOGIN, new Listener() { + @Override + public void on(Event event, String text) { + markSignIn(text); + } + }); } public UserInfoLabel getUserInfoLabel() { From 814b4636f532418f308bd4a3cd35f89e2499f18d Mon Sep 17 00:00:00 2001 From: hades Date: Thu, 10 Jun 2021 16:17:59 +0800 Subject: [PATCH 131/148] =?UTF-8?q?REPORT-53772=20=E3=80=90=E6=99=BA?= =?UTF-8?q?=E8=83=BD=E8=81=94=E5=8A=A8=E3=80=91=E7=BB=84=E4=BB=B6=E5=90=8D?= =?UTF-8?q?/=E6=95=B0=E6=8D=AE=E9=9B=86=E5=90=8D=E6=9B=BF=E6=8D=A2?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E6=8B=96=E5=85=A5=E5=A4=B1=E8=B4=A5=E6=97=B6?= =?UTF-8?q?=E9=87=8D=E6=96=B0=E5=86=8D=E6=8B=96=E5=85=A5=E6=88=90=E5=8A=9F?= =?UTF-8?q?=20=E6=9C=89=E5=87=A0=E7=8E=87=E9=80=A0=E6=88=90=E5=A4=9A?= =?UTF-8?q?=E6=AC=A1=E6=9B=BF=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mod/ContentReplacerCenter.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java b/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java index 7440895a8b..91f9bf3dc7 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java @@ -30,6 +30,7 @@ import com.fr.event.Listener; import com.fr.log.FineLoggerFactory; import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -51,7 +52,7 @@ public class ContentReplacerCenter { } private List contentChangeList = new ArrayList<>(); - private List items = new ArrayList<>(); + private Map itemsMap = new HashMap<>(); private ContentReplacerCenter() { @@ -61,21 +62,21 @@ public class ContentReplacerCenter { if (param.getChangeMap().isEmpty()) { return; } - items.add(param); + itemsMap.put(param.getChangeItem(), param); } }); EventDispatcher.listen(TableDataModifyEvent.INSTANCE, new Listener() { @Override public void on(Event event, ContentChangeItem param) { - items.add(param); + itemsMap.put(param.getChangeItem(), param); long start = System.currentTimeMillis(); ContentObjectManager.getInstance().searchObject(param.getObject()); FineLoggerFactory.getLogger().debug("search object spend {} ms", (System.currentTimeMillis() - start)); FineLoggerFactory.getLogger().debug("search result: {}", ContentObjectManager.getInstance().getObjectMap() == null ? null : ContentObjectManager.getInstance().getObjectMap().keySet()); - List itemsCopy = new ArrayList<>(items); - items.clear(); + List itemsCopy = new ArrayList<>(itemsMap.values()); + itemsMap.clear(); onRename(itemsCopy, contentChangeList); } }); From fc96c6bb7129d35a46186a2e9e1c9da3e4c8b185 Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Thu, 10 Jun 2021 19:41:26 +0800 Subject: [PATCH 132/148] =?UTF-8?q?REPORT-53785=20=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E7=9B=AE=E5=BD=95=E5=90=8E=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E7=BB=84=E4=BB=B6=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/share/SharableManager.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/designer-realize/src/main/java/com/fr/design/share/SharableManager.java b/designer-realize/src/main/java/com/fr/design/share/SharableManager.java index 05f893fadd..0e3a1c41e8 100644 --- a/designer-realize/src/main/java/com/fr/design/share/SharableManager.java +++ b/designer-realize/src/main/java/com/fr/design/share/SharableManager.java @@ -9,15 +9,21 @@ import com.fr.design.mainframe.share.collect.ComponentCollector; import com.fr.design.mainframe.share.collect.SharableCollectorManager; import com.fr.design.mainframe.share.encrypt.clipboard.impl.EncryptSelectionClipboardHandler; import com.fr.design.mainframe.share.encrypt.clipboard.impl.EncryptTransferableClipboardHandler; +import com.fr.design.mainframe.share.ui.block.LocalWidgetBlock; +import com.fr.design.mainframe.share.ui.local.LocalWidgetRepoPane; import com.fr.design.mainframe.share.util.ShareComponentUtils; import com.fr.design.share.utils.EffectItemUtils; +import com.fr.form.share.ShareLoader; +import com.fr.general.GeneralContext; import com.fr.json.JSONArray; +import com.fr.stable.EnvChangedListener; import java.util.List; public class SharableManager { public static void start() { SharableCollectorManager.getInstance().execute(); + listenEnv(); ClipboardFilter.registerClipboardHandler(EncryptSelectionClipboardHandler.getInstance()); ClipboardFilter.registerClipboardHandler(EncryptTransferableClipboardHandler.getInstance()); } @@ -44,4 +50,13 @@ public class SharableManager { } } } + + private static void listenEnv() { + GeneralContext.addEnvChangedListenerToLast(new EnvChangedListener() { + @Override + public void envChanged() { + LocalWidgetRepoPane.getInstance().refreshPane(); + } + }); + } } From a867ed903a02be93b411d6f1fcc6868101a94ec7 Mon Sep 17 00:00:00 2001 From: pengda Date: Thu, 10 Jun 2021 21:07:56 +0800 Subject: [PATCH 133/148] =?UTF-8?q?REPORT-53591=20=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=A3=80=E6=B5=8B=E5=8F=8A=E5=90=8C=E6=AD=A5?= =?UTF-8?q?-=E6=8F=92=E4=BB=B6=E5=90=8D=E7=A7=B0=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E6=9C=89=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/env/SyncFailedPluginsDialog.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java b/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java index 232225c854..7e053db424 100644 --- a/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java +++ b/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java @@ -44,7 +44,7 @@ public class SyncFailedPluginsDialog extends JDialog { private JFrame frame = DesignerContext.getDesignerFrame(); private RestartHelper restartHelper = new RestartHelper(); private UIButton restartButton; - private boolean show; + private boolean show = false; public SyncFailedPluginsDialog(JFrame parent, JSONArray syncFailedPlugins) { super(parent, true); JPanel body = FRGUIPaneFactory.createBorderLayout_L_Pane(); @@ -110,7 +110,7 @@ public class SyncFailedPluginsDialog extends JDialog { detailsText.append(plugin.getString("name")).append(",").append(Toolkit.i18nText("Fine-Design_Basic_Sync_Server_Version")).append(plugin.getString("version")).append("\n"); } detailsTextArea.setText(detailsText.toString()); - if(!ComparatorUtils.equals(detailsLabel.getText(),StringUtils.EMPTY)){ + if(!ComparatorUtils.equals(detailsTextArea.getText(),StringUtils.EMPTY)){ show = true; } } From 09f268e4b58cc36a5530c125492ccdf9fa2f0c8c Mon Sep 17 00:00:00 2001 From: hades Date: Fri, 11 Jun 2021 14:40:22 +0800 Subject: [PATCH 134/148] =?UTF-8?q?REPORT-52871=20=E8=81=9A=E5=90=88?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E9=83=A8=E5=88=86=E5=86=85=E5=AE=B9=E4=B8=8D?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=EF=BC=8C=E7=82=B9=E5=87=BB=E4=B9=8B=E5=90=8E?= =?UTF-8?q?=E6=89=8D=E5=8F=AF=E6=98=BE=E7=A4=BA=E5=AE=8C=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/poly/creator/PolyElementCasePane.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/designer-realize/src/main/java/com/fr/poly/creator/PolyElementCasePane.java b/designer-realize/src/main/java/com/fr/poly/creator/PolyElementCasePane.java index af6918de2e..cf93aa74aa 100644 --- a/designer-realize/src/main/java/com/fr/poly/creator/PolyElementCasePane.java +++ b/designer-realize/src/main/java/com/fr/poly/creator/PolyElementCasePane.java @@ -13,12 +13,18 @@ import com.fr.report.poly.PolyECBlock; */ public abstract class PolyElementCasePane extends ElementCasePane { + /** + * 水平方向在一个屏幕内可见的可扩展的列数 + */ + private static final int HORIZONTAL_EXTENT_VALUE = 200; + public PolyElementCasePane(PolyECBlock block) { super(block); setSelection(new CellSelection(0, 0, 1, 1)); // 都不加这两个组件,当然他们也就没可见性了 setHorizontalScrollBarVisible(false); setVerticalScrollBarVisible(false); + this.getGrid().setHorizontalExtent(HORIZONTAL_EXTENT_VALUE); } @Override From aa59c0a9bc6883c8b48b858dad55f211eaa982a1 Mon Sep 17 00:00:00 2001 From: kerry Date: Fri, 11 Jun 2021 16:33:55 +0800 Subject: [PATCH 135/148] =?UTF-8?q?REPORT-53806=E3=80=90=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=A4=8D=E7=94=A8=E3=80=91=E7=BB=84=E4=BB=B6=E7=94=9F=E6=88=90?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E6=95=B0=E6=8D=AE=E9=9B=86=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E7=9A=84=E6=95=B0=E6=8D=AE=E9=9B=86=E5=8F=98=E6=88=90=E4=BA=86?= =?UTF-8?q?=E5=86=85=E7=BD=AE=E6=95=B0=E6=8D=AE=E9=9B=86=EF=BC=8C=E8=80=8C?= =?UTF-8?q?=E4=B8=8D=E6=98=AF=E4=BF=9D=E7=95=99=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../share/generate/task/ComponentCreator.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentCreator.java b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentCreator.java index f93e28426b..62570e5132 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentCreator.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/generate/task/ComponentCreator.java @@ -1,5 +1,6 @@ package com.fr.design.mainframe.share.generate.task; +import com.fr.base.TableData; import com.fr.base.iofile.attr.ExtendSharableAttrMark; import com.fr.base.iofile.attr.SharableAttrMark; import com.fr.design.i18n.Toolkit; @@ -21,6 +22,7 @@ import com.fr.workspace.WorkContext; import org.jetbrains.annotations.NotNull; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; /** @@ -91,10 +93,16 @@ public class ComponentCreator extends AbstractComponentCreatorProcessor { FineLoggerFactory.getLogger().error(e.getMessage(), e); } -// //内置数据集 - ShareEmbeddedConverter embeddedConverter = WorkContext.getCurrent().get(ShareEmbeddedConverter.class); - embeddedConverter.convertToEmbeddedTableData(tpl, paraMap); - + //内置数据集 + if (tpl != null) { + ShareEmbeddedConverter embeddedConverter = WorkContext.getCurrent().get(ShareEmbeddedConverter.class); + Map map = embeddedConverter.convertToEmbeddedTableData(tpl, paraMap); + Iterator> iterator = map.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + tpl.putTableData(entry.getKey(), entry.getValue()); + } + } return tpl; } From 7d5d567597bcaf9d8bad9fa794ebd5f9d5aa7b98 Mon Sep 17 00:00:00 2001 From: pengda Date: Fri, 11 Jun 2021 16:50:04 +0800 Subject: [PATCH 136/148] =?UTF-8?q?REPORT-51958=20=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=A3=80=E6=B5=8B=E5=8F=8A=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/dialog/NotificationDialog.java | 5 +- .../java/com/fr/design/gui/UILookAndFeel.java | 1 + .../fr/design/mainframe/DesignerFrame.java | 2 + .../mainframe/toolbar/ToolBarMenuDock.java | 4 + .../fr/design/notification/Notification.java | 40 ++++ .../notification/NotificationCenter.java | 33 +++ .../ui/NotificationCenterDialog.java | 222 ++++++++++++++++++ .../ui/NotificationCenterPane.java | 54 +++++ .../versioncheck/VersionCheckUtils.java | 14 +- .../main/java/com/fr/start/MainDesigner.java | 5 + 10 files changed, 377 insertions(+), 3 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/notification/Notification.java create mode 100644 designer-base/src/main/java/com/fr/design/notification/NotificationCenter.java create mode 100644 designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterDialog.java create mode 100644 designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterPane.java diff --git a/designer-base/src/main/java/com/fr/design/dialog/NotificationDialog.java b/designer-base/src/main/java/com/fr/design/dialog/NotificationDialog.java index db3be1387e..4b18ab3e04 100644 --- a/designer-base/src/main/java/com/fr/design/dialog/NotificationDialog.java +++ b/designer-base/src/main/java/com/fr/design/dialog/NotificationDialog.java @@ -4,6 +4,8 @@ package com.fr.design.dialog; import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.notification.Notification; +import com.fr.design.notification.NotificationCenter; import com.fr.design.utils.gui.GUICoreUtils; import java.awt.BorderLayout; import java.awt.Color; @@ -46,6 +48,7 @@ public class NotificationDialog extends JDialog { } public void initComponents(int messageType, String message, boolean isModal,NotificationDialogAction action) { + NotificationCenter.getInstance().addNotification(new Notification(messageType,message,action)); notificationDialogAction = action; setModal(isModal); setResizable(false); @@ -116,7 +119,7 @@ public class NotificationDialog extends JDialog { propertyName = "OptionPane.newMessageIcon"; break; case 2: - propertyName = "OptionPane.warningIcon"; + propertyName = "OptionPane.circularWarningIcon"; break; default: return null; diff --git a/designer-base/src/main/java/com/fr/design/gui/UILookAndFeel.java b/designer-base/src/main/java/com/fr/design/gui/UILookAndFeel.java index abb9d613dd..488cbad37e 100644 --- a/designer-base/src/main/java/com/fr/design/gui/UILookAndFeel.java +++ b/designer-base/src/main/java/com/fr/design/gui/UILookAndFeel.java @@ -179,6 +179,7 @@ public class UILookAndFeel extends MetalLookAndFeel { table.put("OptionPane.circularWarningIcon", loadIcon("circularWarningIcon.png", this)); table.put("OptionPane.newMessageIcon", loadIcon("newMessageIcon.png", this)); table.put("OptionPane.circularErrorIcon", loadIcon("circularErrorIcon.png", this)); + table.put("OptionPane.deleteIcon", loadIcon("deleteIcon.png", this)); table.put("OptionPane.questionIcon", loadIcon("QuestionIcon.png", this)); table.put("OptionPane.tipIcon", loadIcon("TipIcon.png", this)); table.put("ScrollPane.border", new UIScrollPaneBorder()); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java index 331438565e..25948b62cf 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java @@ -486,6 +486,8 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta if (!DesignerEnvManager.getEnvManager().getAlphaFineConfigManager().isEnabled()) { ad.createAlphaFinePane().setVisible(false); } + northEastPane.add(ad.createNotificationCenterPane()); + OSSupportCenter.buildAction(new OSBasedAction() { @Override public void execute(Object... objects) { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java index d6cdbd8e3f..a2d0ec83fa 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -465,6 +465,10 @@ public abstract class ToolBarMenuDock { return new UILabel(); } + public Component createNotificationCenterPane(){ + return new UILabel(); + } + protected MenuDef createServerMenuDef(ToolBarMenuDockPlus plus) { MenuDef menuDef = new MenuDef(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic__M_Server"), 'S'); diff --git a/designer-base/src/main/java/com/fr/design/notification/Notification.java b/designer-base/src/main/java/com/fr/design/notification/Notification.java new file mode 100644 index 0000000000..bc0fcf670f --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/notification/Notification.java @@ -0,0 +1,40 @@ +package com.fr.design.notification; + +import com.fr.design.dialog.NotificationDialogAction; + +public class Notification { + private int type; + private String message; + private NotificationDialogAction notificationDialogAction; + public static final int ERROR_MESSAGE = 0; + public static final int NEW_MESSAGE = 1; + public static final int WARNING_MESSAGE = 2; + public Notification(int type,String message,NotificationDialogAction notificationDialogAction){ + this.type = type; + this.message = message; + this.notificationDialogAction = notificationDialogAction; + } + + public Notification(String message){ + this.type = WARNING_MESSAGE; + this.message = message; + this.notificationDialogAction = new NotificationDialogAction() { + @Override + public void doClick() { + //do nothing + } + }; + } + + public NotificationDialogAction getNotificationDialogAction() { + return notificationDialogAction; + } + + public int getType(){ + return type; + } + + public String getMessage(){ + return message; + } +} diff --git a/designer-base/src/main/java/com/fr/design/notification/NotificationCenter.java b/designer-base/src/main/java/com/fr/design/notification/NotificationCenter.java new file mode 100644 index 0000000000..65f28966ea --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/notification/NotificationCenter.java @@ -0,0 +1,33 @@ +package com.fr.design.notification; + + +import com.fr.design.notification.ui.NotificationCenterPane; +import java.util.ArrayList; +import java.util.List; + +public class NotificationCenter { + private static NotificationCenter notificationCenter = new NotificationCenter(); + private List notifications; + private NotificationCenter(){ + notifications = new ArrayList<>(); + } + + public static NotificationCenter getInstance(){ + return notificationCenter; + } + + public void addNotification(Notification message){ + notifications.add(message); + NotificationCenterPane.getNotificationCenterPane().refreshButton(); + } + + public List getNotifications(){ + return notifications; + } + + public void clearAllNotifications(){ + notifications.clear(); + NotificationCenterPane.getNotificationCenterPane().refreshButton(); + } + +} diff --git a/designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterDialog.java b/designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterDialog.java new file mode 100644 index 0000000000..162286a9d5 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterDialog.java @@ -0,0 +1,222 @@ +package com.fr.design.notification.ui; + +import com.fr.design.dialog.NotificationDialogAction; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.notification.Notification; +import com.fr.design.notification.NotificationCenter; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.Toolkit; +import java.awt.Window; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.util.ArrayList; +import java.util.List; +import javax.swing.BorderFactory; +import javax.swing.Icon; +import javax.swing.JDialog; +import javax.swing.JPanel; + +import javax.swing.UIManager; + +public class NotificationCenterDialog extends JDialog { + + private ArrayList notificationNeedShow; + private JPanel centerPanel; + private UILabel deleteLabel; + private static final int NOTIFICATIONCOUNT = 5; + + public NotificationCenterDialog(Frame parent) { + super(parent, true); + setTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Notification")); + setResizable(false); + notificationNeedShow = new ArrayList<>(); + initComponents(); + } + + public void initComponents() { + centerPanel = FRGUIPaneFactory.createNColumnGridInnerContainer_S_Pane(1); + addNotification(); + deleteLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Clear_Notifications") + "(" + NotificationCenter.getInstance().getNotifications().size() + ")"); + deleteLabel.setForeground(Color.BLUE); + + deleteLabel.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + NotificationCenter.getInstance().clearAllNotifications(); + centerPanel.removeAll(); + addNotification(); + pack(); + deleteLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Clear_Notifications") + "(" + NotificationCenter.getInstance().getNotifications().size() + ")"); + if (notificationNeedShow.size() == 0) { + hideDialog(); + } + } + }); + JPanel deletePane = new JPanel(FRGUIPaneFactory.createCenterFlowLayout()); + deletePane.add(deleteLabel); + deletePane.setPreferredSize(new Dimension(240, 30)); + add(centerPanel, BorderLayout.CENTER); + add(deletePane, BorderLayout.SOUTH); + pack(); + centerWindow(); + } + + private void hideDialog() { + this.dispose(); + } + + private void addNotification() { + notificationNeedShow.clear(); + List notifications = NotificationCenter.getInstance().getNotifications(); + int size = notifications.size(); + for (int i = NOTIFICATIONCOUNT; i > 0; i--) { + int j = size - i; + if (j >= 0) { + Notification notification = notifications.get(j); + NotificationPane notificationPane = new NotificationPane(notification.getType(), notification.getMessage(), i, notification.getNotificationDialogAction()); + notificationNeedShow.add(notificationPane); + } + } + size = notificationNeedShow.size(); + for (int i = size - 1; i >= 0; i--) { + centerPanel.add(notificationNeedShow.get(i)); + } + } + + private void centerWindow() { + Window win = this; + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + + Dimension winSize = win.getSize(); + + if (winSize.height > screenSize.height) { + winSize.height = screenSize.height; + } + if (winSize.width > screenSize.width) { + winSize.width = screenSize.width; + } + //这里设置位置:水平居中,竖直偏上 + win.setLocation(screenSize.width - winSize.width - 90, 50); + } + + /** + * 一条消息面板 + */ + + class NotificationPane extends JPanel { + private int index; + private UILabel messageLabel; + private UILabel messageIcon; + private NotificationDialogAction notificationDialogAction; + + public NotificationPane(int type, String message, int index, NotificationDialogAction notificationDialogAction) { + this.index = index; + this.notificationDialogAction = notificationDialogAction; + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + setTypeIcon(getIconForType(type)); + setNotification(message); + setDeleteIcon(); + } + + public void setTypeIcon(Icon icon) { + messageIcon = new UILabel(icon); + messageIcon.addMouseListener(messageAndIconListener); + JPanel messageIconPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + messageIconPanel.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 8)); + messageIconPanel.add(messageIcon); + add(messageIconPanel, BorderLayout.WEST); + } + + public void setDeleteIcon() { + UILabel deleteIcon = new UILabel(UIManager.getIcon("OptionPane.deleteIcon")); + JPanel deleteIconPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + deleteIconPane.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 7)); + deleteIconPane.add(deleteIcon); + deleteIconPane.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + NotificationCenter.getInstance().getNotifications().remove(NotificationCenter.getInstance().getNotifications().size() - index); + centerPanel.removeAll(); + addNotification(); + deleteLabel.setText("清除所有消息" + "(" + NotificationCenter.getInstance().getNotifications().size() + ")"); + pack(); + if (notificationNeedShow.size() == 0) { + centerWindow(); + } + NotificationCenterPane.getNotificationCenterPane().refreshButton(); + } + + @Override + public void mouseEntered(MouseEvent e) { + deleteIcon.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + + } + + @Override + public void mouseExited(MouseEvent e) { + deleteIcon.setCursor(Cursor.getDefaultCursor()); + } + }); + add(deleteIconPane, BorderLayout.EAST); + } + + public int getIndex() { + return index; + } + + public void setNotification(String message) { + messageLabel = new UILabel("" + message + ""); + messageLabel.addMouseListener(messageAndIconListener); + JPanel labelPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + labelPanel.add(messageLabel); + this.add(labelPanel, BorderLayout.CENTER); + } + + protected Icon getIconForType(int messageType) { + String propertyName; + switch (messageType) { + case 0: + propertyName = "OptionPane.circularErrorIcon"; + break; + case 1: + propertyName = "OptionPane.newMessageIcon"; + break; + case 2: + propertyName = "OptionPane.circularWarningIcon"; + break; + default: + return null; + } + return UIManager.getIcon(propertyName); + } + + private MouseListener messageAndIconListener = new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + hideDialog(); + notificationDialogAction.doClick(); + } + + @Override + public void mouseEntered(MouseEvent e) { + messageLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + messageIcon.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + messageLabel.setForeground(new Color(250, 170, 57)); + + } + + @Override + public void mouseExited(MouseEvent e) { + messageLabel.setCursor(Cursor.getDefaultCursor()); + messageIcon.setCursor(Cursor.getDefaultCursor()); + messageLabel.setForeground(Color.BLACK); + } + }; + } +} diff --git a/designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterPane.java b/designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterPane.java new file mode 100644 index 0000000000..55238a5eef --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterPane.java @@ -0,0 +1,54 @@ +package com.fr.design.notification.ui; + +import com.fr.design.constants.UIConstants; +import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.notification.NotificationCenter; +import com.fr.general.IOUtils; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; + +public class NotificationCenterPane extends BasicPane { + private static NotificationCenterPane notificationCenterPane = new NotificationCenterPane(); + private static UIButton notificationCenterButton; + + private NotificationCenterPane() { + setPreferredSize(new Dimension(24, 24)); + setLayout(new BorderLayout()); + notificationCenterButton = new UIButton(); + notificationCenterButton.setIcon(IOUtils.readIcon("/com/fr/design/mainframe/notificationcenter/notificationCenter.png")); + notificationCenterButton.setToolTipText(Toolkit.i18nText("显示当前通知")); + notificationCenterButton.set4ToolbarButton(); + notificationCenterButton.setRolloverEnabled(false); + this.add(notificationCenterButton); + notificationCenterButton.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + NotificationCenterDialog notificationCenterDialog = new NotificationCenterDialog(DesignerContext.getDesignerFrame()); + notificationCenterDialog.setVisible(true); + } + }); + this.setBackground(UIConstants.TEMPLATE_TAB_PANE_BACKGROUND); + } + + public static NotificationCenterPane getNotificationCenterPane() { + return notificationCenterPane; + } + + public void refreshButton() { + if (NotificationCenter.getInstance().getNotifications().size() > 0) { + notificationCenterButton.setIcon(IOUtils.readIcon("/com/fr/design/mainframe/notificationcenter/normal.png")); + } else { + notificationCenterButton.setIcon(IOUtils.readIcon("/com/fr/design/mainframe/notificationcenter/notificationCenter.png")); + } + } + + @Override + protected String title4PopupWindow() { + return "NotificationCenter"; + } +} diff --git a/designer-base/src/main/java/com/fr/design/versioncheck/VersionCheckUtils.java b/designer-base/src/main/java/com/fr/design/versioncheck/VersionCheckUtils.java index 9fa6980e9d..275bb09de3 100644 --- a/designer-base/src/main/java/com/fr/design/versioncheck/VersionCheckUtils.java +++ b/designer-base/src/main/java/com/fr/design/versioncheck/VersionCheckUtils.java @@ -2,11 +2,14 @@ package com.fr.design.versioncheck; import com.fr.base.FRContext; import com.fr.design.DesignerEnvManager; +import com.fr.design.dialog.NotificationDialog; +import com.fr.design.dialog.NotificationDialogAction; import com.fr.design.env.DesignerWorkspaceInfo; import com.fr.design.env.DesignerWorkspaceType; import com.fr.design.env.RemoteWorkspace; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerContext; +import com.fr.env.CheckServiceDialog; import com.fr.env.VersionCheckMessageDialog; import com.fr.general.ComparatorUtils; import com.fr.general.GeneralUtils; @@ -68,8 +71,15 @@ public class VersionCheckUtils { public static void showVersionCheckDialog(String envName) { if (!VersionCheckUtils.versionCheck(envName)) { - VersionCheckMessageDialog versionCheckMessageDialog = new VersionCheckMessageDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Basic_Sync_Check_Brief_Info"), envName); - versionCheckMessageDialog.setVisible(true); + NotificationDialog notificationDialog = new NotificationDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Basic_Sync_Prompt"), + true, NotificationDialog.WARNING_MESSAGE, Toolkit.i18nText("Fine-Design_Basic_Sync_Check_Brief_Info"), new NotificationDialogAction() { + @Override + public void doClick() { + CheckServiceDialog checkServiceDialog = new CheckServiceDialog(DesignerContext.getDesignerFrame(), GeneralUtils.readFullBuildNO(), getRemoteBranch(envName),getNoExistServiceDescription(envName)); + checkServiceDialog.setVisible(true); + } + }); + notificationDialog.setVisible(true); } } diff --git a/designer-realize/src/main/java/com/fr/start/MainDesigner.java b/designer-realize/src/main/java/com/fr/start/MainDesigner.java index 389538b2b3..5c8c57987b 100644 --- a/designer-realize/src/main/java/com/fr/start/MainDesigner.java +++ b/designer-realize/src/main/java/com/fr/start/MainDesigner.java @@ -29,6 +29,7 @@ import com.fr.design.mainframe.JWorkBook; import com.fr.design.mainframe.alphafine.component.AlphaFinePane; import com.fr.design.mainframe.bbs.UserInfoLabel; import com.fr.design.mainframe.bbs.UserInfoPane; +import com.fr.design.notification.ui.NotificationCenterPane; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.MenuDef; @@ -413,6 +414,10 @@ public class MainDesigner extends BaseDesigner { return AlphaFinePane.getAlphaFinePane(); } + public Component createNotificationCenterPane(){ + return NotificationCenterPane.getNotificationCenterPane(); + } + /** * 收集用户信息吗 */ From 993b9c20c81066f5b079302383d1c062429992f4 Mon Sep 17 00:00:00 2001 From: pengda Date: Fri, 11 Jun 2021 16:50:54 +0800 Subject: [PATCH 137/148] =?UTF-8?q?REPORT-51958=20=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=A3=80=E6=B5=8B=E5=8F=8A=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/env/CheckServiceDialog.java | 5 ++--- .../fr/design/images/lookandfeel/deleteIcon.png | Bin 0 -> 326 bytes .../mainframe/notificationCenter/normal.png | Bin 0 -> 423 bytes .../notificationCenter/notificationCenter.png | Bin 0 -> 347 bytes 4 files changed, 2 insertions(+), 3 deletions(-) create mode 100644 designer-base/src/main/resources/com/fr/design/images/lookandfeel/deleteIcon.png create mode 100644 designer-realize/src/main/resources/com/fr/design/mainframe/notificationCenter/normal.png create mode 100644 designer-realize/src/main/resources/com/fr/design/mainframe/notificationCenter/notificationCenter.png diff --git a/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java b/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java index 185268e79c..ef4b0e0322 100644 --- a/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java +++ b/designer-base/src/main/java/com/fr/env/CheckServiceDialog.java @@ -167,7 +167,8 @@ public class CheckServiceDialog extends JDialog implements ActionListener { centerPanel.add(detailsPane, BorderLayout.CENTER); JPanel buttonPanel = FRGUIPaneFactory.createBorderLayout_M_Pane(); buttonPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10)); - if (isOnline()) { + boolean Sync = false; + if (Sync && isOnline()) { ignoreButton = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Sync_Ignore")); ignoreButton.addActionListener(this); syncButton = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Sync_To_Local")); @@ -183,8 +184,6 @@ public class CheckServiceDialog extends JDialog implements ActionListener { buttonPanel.add(progressBar, BorderLayout.CENTER); buttonPanel.add(syncButton, BorderLayout.EAST); } else { - UILabel adviceLabel = new UILabel(Toolkit.i18nText("Fine-Design_Basic_Sync_Suggestion")); - centerPanel.add(adviceLabel, BorderLayout.SOUTH); UIButton okButton = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Button_Confirm")); okButton.addActionListener(this); buttonPanel.add(okButton, BorderLayout.EAST); diff --git a/designer-base/src/main/resources/com/fr/design/images/lookandfeel/deleteIcon.png b/designer-base/src/main/resources/com/fr/design/images/lookandfeel/deleteIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..71c71fc82855a055159ddba17019fd7f2ae118c8 GIT binary patch literal 326 zcmV-M0lEH(P)DMTsaZQK8*v<0@$==;%>$2GVd23b+JEprr@ z`=H$QAzIr-n$m{|zMU)Y{ZI$sU#ztgfIj<>Ls&{8JTUXNX*h7uhg20N`;&*^L4$_c zKtx0l(Pb1>%Kcn44ca?8v=A+fwK5#*pr+2 YKZQ?+64-RMBme*a07*qoM6N<$f_N8@A^-pY literal 0 HcmV?d00001 diff --git a/designer-realize/src/main/resources/com/fr/design/mainframe/notificationCenter/normal.png b/designer-realize/src/main/resources/com/fr/design/mainframe/notificationCenter/normal.png new file mode 100644 index 0000000000000000000000000000000000000000..5ee1816682bcf905486879dfbd13663e692391da GIT binary patch literal 423 zcmV;Y0a*TtP)*v|#Day&iS-|+8(U*aNK@}>0`#(r@P9rd z0|Os6hy7<@_{7M-nE1+m%{rJo+yJm<#{a7s|1&V*^VNSwhJTFz8AD-)fDHgUo15zn zE}PK}{LjGf@%z_rsvz%x4G=vP)XMmuu?obFm2hFGRg7Wy@aHQ--pwgsy_3{)7z9|j z8Jg}dVOa8F4_NF!k@Z**JT22%LKpIk{yck-P6B!s8 zQDgZ3|Njg%cjq(AdA1E^E{XwQFTi9nq1Jd{A-sSbi0FoZ z_*gWf1|qI#1i1tR&}?P^C8+OTzp22Z5fT#=BqW%#DN4#PLnz8j`0@ZQIRI9{wh`a7 R`QiWo002ovPDHLkV1n=4#R32T literal 0 HcmV?d00001 diff --git a/designer-realize/src/main/resources/com/fr/design/mainframe/notificationCenter/notificationCenter.png b/designer-realize/src/main/resources/com/fr/design/mainframe/notificationCenter/notificationCenter.png new file mode 100644 index 0000000000000000000000000000000000000000..0445f313449a9ec1f97ccd5d3de489870e1db79c GIT binary patch literal 347 zcmV-h0i^zkP)G*rC7WyJ`lnoNm zU6P))BJu{vp)n>dzSjW!TOyp)Sr);-nBcS#ptW8F=oNs| zuyZ<{er&{X{Qlc7IZ#TuL@Up>%cNmIDP+v!<0G?_RzNxT@khpxC#IO002ovPDHLkV1j<@jEevO literal 0 HcmV?d00001 From 6be9984128b0a373c6c4331c4a098d5d9ddf3e9d Mon Sep 17 00:00:00 2001 From: pengda Date: Fri, 11 Jun 2021 17:09:26 +0800 Subject: [PATCH 138/148] =?UTF-8?q?REPORT-51958=20=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=A3=80=E6=B5=8B=E5=8F=8A=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/notification/NotificationCenter.java | 13 +++++++++++-- .../notification/ui/NotificationCenterDialog.java | 14 +++++++------- .../notification/ui/NotificationCenterPane.java | 4 ++-- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/notification/NotificationCenter.java b/designer-base/src/main/java/com/fr/design/notification/NotificationCenter.java index 65f28966ea..7ca868db59 100644 --- a/designer-base/src/main/java/com/fr/design/notification/NotificationCenter.java +++ b/designer-base/src/main/java/com/fr/design/notification/NotificationCenter.java @@ -21,8 +21,17 @@ public class NotificationCenter { NotificationCenterPane.getNotificationCenterPane().refreshButton(); } - public List getNotifications(){ - return notifications; + public int getNotificationsCount(){ + return notifications.size(); + } + + public void removeNotification(int index){ + notifications.remove(index); + NotificationCenterPane.getNotificationCenterPane().refreshButton(); + } + + public Notification getNotification(int index){ + return notifications.get(index); } public void clearAllNotifications(){ diff --git a/designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterDialog.java b/designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterDialog.java index 162286a9d5..789a02fa94 100644 --- a/designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterDialog.java +++ b/designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterDialog.java @@ -42,7 +42,7 @@ public class NotificationCenterDialog extends JDialog { public void initComponents() { centerPanel = FRGUIPaneFactory.createNColumnGridInnerContainer_S_Pane(1); addNotification(); - deleteLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Clear_Notifications") + "(" + NotificationCenter.getInstance().getNotifications().size() + ")"); + deleteLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Clear_Notifications") + "(" + NotificationCenter.getInstance().getNotificationsCount() + ")"); deleteLabel.setForeground(Color.BLUE); deleteLabel.addMouseListener(new MouseAdapter() { @@ -52,7 +52,7 @@ public class NotificationCenterDialog extends JDialog { centerPanel.removeAll(); addNotification(); pack(); - deleteLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Clear_Notifications") + "(" + NotificationCenter.getInstance().getNotifications().size() + ")"); + deleteLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Clear_Notifications") + "(" + NotificationCenter.getInstance().getNotificationsCount() + ")"); if (notificationNeedShow.size() == 0) { hideDialog(); } @@ -73,12 +73,12 @@ public class NotificationCenterDialog extends JDialog { private void addNotification() { notificationNeedShow.clear(); - List notifications = NotificationCenter.getInstance().getNotifications(); - int size = notifications.size(); + + int size = NotificationCenter.getInstance().getNotificationsCount(); for (int i = NOTIFICATIONCOUNT; i > 0; i--) { int j = size - i; if (j >= 0) { - Notification notification = notifications.get(j); + Notification notification = NotificationCenter.getInstance().getNotification(j); NotificationPane notificationPane = new NotificationPane(notification.getType(), notification.getMessage(), i, notification.getNotificationDialogAction()); notificationNeedShow.add(notificationPane); } @@ -141,10 +141,10 @@ public class NotificationCenterDialog extends JDialog { deleteIconPane.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { - NotificationCenter.getInstance().getNotifications().remove(NotificationCenter.getInstance().getNotifications().size() - index); + NotificationCenter.getInstance().removeNotification(NotificationCenter.getInstance().getNotificationsCount() - index); centerPanel.removeAll(); addNotification(); - deleteLabel.setText("清除所有消息" + "(" + NotificationCenter.getInstance().getNotifications().size() + ")"); + deleteLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Clear_Notifications") + "(" + NotificationCenter.getInstance().getNotificationsCount() + ")"); pack(); if (notificationNeedShow.size() == 0) { centerWindow(); diff --git a/designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterPane.java b/designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterPane.java index 55238a5eef..6ed74782b1 100644 --- a/designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterPane.java +++ b/designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterPane.java @@ -21,7 +21,7 @@ public class NotificationCenterPane extends BasicPane { setLayout(new BorderLayout()); notificationCenterButton = new UIButton(); notificationCenterButton.setIcon(IOUtils.readIcon("/com/fr/design/mainframe/notificationcenter/notificationCenter.png")); - notificationCenterButton.setToolTipText(Toolkit.i18nText("显示当前通知")); + notificationCenterButton.setToolTipText(Toolkit.i18nText("Fine-Design_Basic_Show_Notification")); notificationCenterButton.set4ToolbarButton(); notificationCenterButton.setRolloverEnabled(false); this.add(notificationCenterButton); @@ -40,7 +40,7 @@ public class NotificationCenterPane extends BasicPane { } public void refreshButton() { - if (NotificationCenter.getInstance().getNotifications().size() > 0) { + if (NotificationCenter.getInstance().getNotificationsCount() > 0) { notificationCenterButton.setIcon(IOUtils.readIcon("/com/fr/design/mainframe/notificationcenter/normal.png")); } else { notificationCenterButton.setIcon(IOUtils.readIcon("/com/fr/design/mainframe/notificationcenter/notificationCenter.png")); From a320657685e423809699e71a9160f9cf7b9086d4 Mon Sep 17 00:00:00 2001 From: Lanlan Date: Mon, 14 Jun 2021 18:02:38 +0800 Subject: [PATCH 139/148] =?UTF-8?q?REPORT-53706=20=E5=85=B3=E9=97=AD?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E6=A0=B7=E5=BC=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/com/fr/design/login/guide.css | 11 +++-- .../resources/com/fr/design/login/guide.js | 2 +- .../design/login/img/icon_install_normal.png | Bin 0 -> 543 bytes .../resources/com/fr/design/login/login.css | 44 +++++++++++++----- 4 files changed, 41 insertions(+), 16 deletions(-) create mode 100644 designer-base/src/main/resources/com/fr/design/login/img/icon_install_normal.png diff --git a/designer-base/src/main/resources/com/fr/design/login/guide.css b/designer-base/src/main/resources/com/fr/design/login/guide.css index 194296aa0a..12af5f6c3b 100644 --- a/designer-base/src/main/resources/com/fr/design/login/guide.css +++ b/designer-base/src/main/resources/com/fr/design/login/guide.css @@ -4,9 +4,14 @@ font-size: 14px; } .background-guide-close { - color: black !important; - font-weight: bold; - font-size: 16px; + background: url(./img/icon_install_normal.png) no-repeat center center; + background-size: cover; + width: 20px; + height: 20px; + cursor: pointer; +} +.background-guide-close:hover { + background-color: #E8E8E9; } .background-login-loading { background: url(./img/login_loading.gif) no-repeat center center; diff --git a/designer-base/src/main/resources/com/fr/design/login/guide.js b/designer-base/src/main/resources/com/fr/design/login/guide.js index 2dc054d2d9..355fb5e5b0 100644 --- a/designer-base/src/main/resources/com/fr/design/login/guide.js +++ b/designer-base/src/main/resources/com/fr/design/login/guide.js @@ -1 +1 @@ -!function(e){var t={};function i(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,i),n.l=!0,n.exports}i.m=e,i.c=t,i.d=function(e,t,o){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(i.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(o,n,function(t){return e[t]}.bind(null,n));return o},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=1)}([function(e,t,i){"use strict";var o=this&&this.__createBinding||(Object.create?function(e,t,i,o){o===undefined&&(o=i),Object.defineProperty(e,o,{enumerable:!0,get:function(){return t[i]}})}:function(e,t,i,o){o===undefined&&(o=i),e[o]=t[i]}),n=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||t.hasOwnProperty(i)||o(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),n(i(2),t)},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),n=i(3);BI.addI18n(Store.i18n),BI.createWidget({type:o.Vertical,element:"body",items:[{type:n["default"]}]})},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ListView=t.VirtualGroup=t.LeftRightVerticalAdapt=t.Left=t.Horizontal=t.Vertical=t.Absolute=t.Layout=t.Htape=t.CenterAdapt=t.Vtape=t.HorizontalAdapt=t.VerticalAdapt=t.BubbleCombo=t.Img=t.Tab=t.SingleSelectInsertCombo=t.SingleSelectRadioItem=t.MultiTreePopupView=t.Editor=t.NicEditor=t.RichEditor=t.MultiTreeCombo=t.DynamicDateTimeCombo=t.DynamicDateCombo=t.BarPopOver=t.MultiSelectItem=t.TextAreaEditor=t.AllValueChooserCombo=t.ButtonGroup=t.MultiSelectInsertCombo=t.TextEditor=t.Button=t.SignEditor=t.MultiFileEditor=t.SmallTextEditor=t.HtmlLabel=t.Label=t.DownListCombo=t.TextButton=t.IconChangeButton=t.IconButton=t.IconTextIconItem=t.IconTextItem=void 0,t.IconTextItem="bi.icon_text_item",t.IconTextIconItem="bi.icon_text_icon_item",t.IconButton="bi.icon_button",t.IconChangeButton="bi.icon_change_button",t.TextButton="bi.text_button",t.DownListCombo="bi.down_list_combo",t.Label="bi.label",t.HtmlLabel="bi.html_label",t.SmallTextEditor="bi.small_text_editor",t.MultiFileEditor="bi.multifile_editor",t.SignEditor="bi.sign_editor",t.Button="bi.button",t.TextEditor="bi.text_editor",t.MultiSelectInsertCombo="bi.multi_select_insert_combo",t.ButtonGroup="bi.button_group",t.AllValueChooserCombo="bi.all_value_chooser_combo",t.TextAreaEditor="bi.textarea_editor",t.MultiSelectItem="bi.multi_select_item",t.BarPopOver="bi.bar_popover",t.DynamicDateCombo="bi.dynamic_date_combo",t.DynamicDateTimeCombo="bi.dynamic_date_time_combo",t.MultiTreeCombo="bi.multi_tree_combo",t.RichEditor="bi.rich_editor",t.NicEditor="bi.nic_editor",t.Editor="bi.editor",t.MultiTreePopupView="bi.multi_tree_popup_view",t.SingleSelectRadioItem="bi.single_select_radio_item",t.SingleSelectInsertCombo="bi.single_select_insert_combo",t.Tab="bi.tab",t.Img="bi.img",t.BubbleCombo="bi.bubble_combo",t.VerticalAdapt="bi.vertical_adapt",t.HorizontalAdapt="bi.horizontal_adapt",t.Vtape="bi.vtape",t.CenterAdapt="bi.center_adapt",t.Htape="bi.htape",t.Layout="bi.layout",t.Absolute="bi.absolute",t.Vertical="bi.vertical",t.Horizontal="bi.horizontal",t.Left="bi.left",t.LeftRightVerticalAdapt="bi.left_right_vertical_adapt",t.VirtualGroup="bi.virtual_group",t.ListView="bi.list_view"},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var o=i(0);i(4);var n=i(5),r=i(6);t.className="designer.login.guide",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-guide",width:700,height:557},_store:function(){return BI.Models.getModel(r["default"])},render:function(){var e=this;return{type:o.Vertical,items:[{el:{type:o.HorizontalAdapt,items:[{type:o.TextButton,text:String.fromCharCode(10005),cls:"background-guide-close",width:16,height:16,rgap:18,tgap:18,handler:function(){n["default"].closeWindow(e.model.doNotRemind,!1)}}]}},{el:{type:o.Vertical,items:[{type:o.Horizontal,items:[{type:o.MultiSelectItem,lgap:33,width:240,text:BI.i18nText("Designer-Guide_Do_Not_Remind"),handler:function(){e.store.setDoNotRemind(this.isSelected())}},{type:o.TextButton,width:122,height:38,cls:"designer-guide-login-button",text:BI.i18nText("Designer-Guide_Login"),handler:function(){n["default"].closeWindow(e.model.doNotRemind,!0)}}]}]},tgap:460}]}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.DesignerGuideHelper,n=function(){function e(){}return e.prototype.closeWindow=function(e,t){o&&o.closeWindow(e,t)},e}();t["default"]=new n},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});BI.model("designer.login.guide.model",BI.inherit(Fix.Model,{state:function(){return{doNotRemind:!1}},setDoNotRemind:function(e){this.model.doNotRemind=e}})),t["default"]="designer.login.guide.model"}]); \ No newline at end of file +!function(e){var t={};function i(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,i),n.l=!0,n.exports}i.m=e,i.c=t,i.d=function(e,t,o){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(i.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(o,n,function(t){return e[t]}.bind(null,n));return o},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=1)}([function(e,t,i){"use strict";var o=this&&this.__createBinding||(Object.create?function(e,t,i,o){o===undefined&&(o=i),Object.defineProperty(e,o,{enumerable:!0,get:function(){return t[i]}})}:function(e,t,i,o){o===undefined&&(o=i),e[o]=t[i]}),n=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||t.hasOwnProperty(i)||o(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),n(i(2),t)},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),n=i(3);BI.addI18n(Store.i18n),BI.createWidget({type:o.Vertical,element:"body",items:[{type:n["default"]}]})},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ListView=t.VirtualGroup=t.LeftRightVerticalAdapt=t.Left=t.Horizontal=t.Vertical=t.Absolute=t.Layout=t.Htape=t.CenterAdapt=t.Vtape=t.HorizontalAdapt=t.VerticalAdapt=t.BubbleCombo=t.Img=t.Tab=t.SingleSelectInsertCombo=t.SingleSelectRadioItem=t.MultiTreePopupView=t.Editor=t.NicEditor=t.RichEditor=t.MultiTreeCombo=t.DynamicDateTimeCombo=t.DynamicDateCombo=t.BarPopOver=t.MultiSelectItem=t.TextAreaEditor=t.AllValueChooserCombo=t.ButtonGroup=t.MultiSelectInsertCombo=t.TextEditor=t.Button=t.SignEditor=t.MultiFileEditor=t.SmallTextEditor=t.HtmlLabel=t.Label=t.DownListCombo=t.TextButton=t.IconChangeButton=t.IconButton=t.IconTextIconItem=t.IconTextItem=void 0,t.IconTextItem="bi.icon_text_item",t.IconTextIconItem="bi.icon_text_icon_item",t.IconButton="bi.icon_button",t.IconChangeButton="bi.icon_change_button",t.TextButton="bi.text_button",t.DownListCombo="bi.down_list_combo",t.Label="bi.label",t.HtmlLabel="bi.html_label",t.SmallTextEditor="bi.small_text_editor",t.MultiFileEditor="bi.multifile_editor",t.SignEditor="bi.sign_editor",t.Button="bi.button",t.TextEditor="bi.text_editor",t.MultiSelectInsertCombo="bi.multi_select_insert_combo",t.ButtonGroup="bi.button_group",t.AllValueChooserCombo="bi.all_value_chooser_combo",t.TextAreaEditor="bi.textarea_editor",t.MultiSelectItem="bi.multi_select_item",t.BarPopOver="bi.bar_popover",t.DynamicDateCombo="bi.dynamic_date_combo",t.DynamicDateTimeCombo="bi.dynamic_date_time_combo",t.MultiTreeCombo="bi.multi_tree_combo",t.RichEditor="bi.rich_editor",t.NicEditor="bi.nic_editor",t.Editor="bi.editor",t.MultiTreePopupView="bi.multi_tree_popup_view",t.SingleSelectRadioItem="bi.single_select_radio_item",t.SingleSelectInsertCombo="bi.single_select_insert_combo",t.Tab="bi.tab",t.Img="bi.img",t.BubbleCombo="bi.bubble_combo",t.VerticalAdapt="bi.vertical_adapt",t.HorizontalAdapt="bi.horizontal_adapt",t.Vtape="bi.vtape",t.CenterAdapt="bi.center_adapt",t.Htape="bi.htape",t.Layout="bi.layout",t.Absolute="bi.absolute",t.Vertical="bi.vertical",t.Horizontal="bi.horizontal",t.Left="bi.left",t.LeftRightVerticalAdapt="bi.left_right_vertical_adapt",t.VirtualGroup="bi.virtual_group",t.ListView="bi.list_view"},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var o=i(0);i(4);var n=i(5),r=i(6);t.className="designer.login.guide",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-guide",width:700,height:557},_store:function(){return BI.Models.getModel(r["default"])},render:function(){var e=this;return{type:o.Vertical,items:[{el:{type:o.HorizontalAdapt,items:[{type:o.Layout,cls:"background-guide-close",rgap:19,tgap:17,handler:function(){n["default"].closeWindow(e.model.doNotRemind,!1)}}]}},{el:{type:o.Vertical,items:[{type:o.Horizontal,items:[{type:o.MultiSelectItem,lgap:33,width:240,text:BI.i18nText("Designer-Guide_Do_Not_Remind"),handler:function(){e.store.setDoNotRemind(this.isSelected())}},{type:o.TextButton,width:122,height:38,cls:"designer-guide-login-button",text:BI.i18nText("Designer-Guide_Login"),handler:function(){n["default"].closeWindow(e.model.doNotRemind,!0)}}]}]},tgap:460}]}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.DesignerGuideHelper,n=function(){function e(){}return e.prototype.closeWindow=function(e,t){o&&o.closeWindow(e,t)},e}();t["default"]=new n},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});BI.model("designer.login.guide.model",BI.inherit(Fix.Model,{state:function(){return{doNotRemind:!1}},setDoNotRemind:function(e){this.model.doNotRemind=e}})),t["default"]="designer.login.guide.model"}]); \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/login/img/icon_install_normal.png b/designer-base/src/main/resources/com/fr/design/login/img/icon_install_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..a729d7173bcdfe37ab720170e6270e652b310c06 GIT binary patch literal 543 zcmV+)0^t3LP)YU6vodUiTrJ&#@I0?Ri4%WefcJU3w$(JYyV%5dAH;xXz zfpu-6HKs?>Hf@ME&AqonmuAhm=lkV5e{K+_{NR-JVFoaBfa^delhIqP)7C0Pi|vX&j^_mPM;0N@*7bJezQ zop7EAfYdIL```!5LWINt5kKqo+8QE~5P%nCn&vqXT+2d)#R0IP>)Lj;TKy0%fgdOf zAuHZ1aa?UhAymYL07S~6DlQB#4q_5nV%Pb z!^K^x;o5SXIAe_62={<#ZXFYK?*9r?TM&cgHCaTq5E#WA&V{174tEoXq9(D{iq^?22wRUR*YtoiCTmov0kbi)a#v hac5@$GY6*bz#kUPXEL-ulfVD~002ovPDHLkV1n)~^=1G7 literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/login/login.css b/designer-base/src/main/resources/com/fr/design/login/login.css index 10dd394f06..30b341c097 100644 --- a/designer-base/src/main/resources/com/fr/design/login/login.css +++ b/designer-base/src/main/resources/com/fr/design/login/login.css @@ -4,9 +4,14 @@ font-size: 14px; } .background-guide-close { - color: black !important; - font-weight: bold; - font-size: 16px; + background: url(./img/icon_install_normal.png) no-repeat center center; + background-size: cover; + width: 20px; + height: 20px; + cursor: pointer; +} +.background-guide-close:hover { + background-color: #E8E8E9; } .background-login-loading { background: url(./img/login_loading.gif) no-repeat center center; @@ -50,9 +55,14 @@ font-size: 14px; } .background-guide-close { - color: black !important; - font-weight: bold; - font-size: 16px; + background: url(./img/icon_install_normal.png) no-repeat center center; + background-size: cover; + width: 20px; + height: 20px; + cursor: pointer; +} +.background-guide-close:hover { + background-color: #E8E8E9; } .background-login-loading { background: url(./img/login_loading.gif) no-repeat center center; @@ -136,9 +146,14 @@ font-size: 14px; } .background-guide-close { - color: black !important; - font-weight: bold; - font-size: 16px; + background: url(./img/icon_install_normal.png) no-repeat center center; + background-size: cover; + width: 20px; + height: 20px; + cursor: pointer; +} +.background-guide-close:hover { + background-color: #E8E8E9; } .background-login-loading { background: url(./img/login_loading.gif) no-repeat center center; @@ -186,9 +201,14 @@ font-size: 14px; } .background-guide-close { - color: black !important; - font-weight: bold; - font-size: 16px; + background: url(./img/icon_install_normal.png) no-repeat center center; + background-size: cover; + width: 20px; + height: 20px; + cursor: pointer; +} +.background-guide-close:hover { + background-color: #E8E8E9; } .background-login-loading { background: url(./img/login_loading.gif) no-repeat center center; From e8752335465dd4c691a2faa452b6c89061fa5b07 Mon Sep 17 00:00:00 2001 From: Lanlan Date: Mon, 14 Jun 2021 18:40:28 +0800 Subject: [PATCH 140/148] =?UTF-8?q?REPORT-51360=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E6=B6=88=E6=81=AF=E6=8F=90=E9=86=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../login/message/DesignerMessageHelper.java | 117 ++++++++++++++++++ .../message/DesignerModuleClickType.java | 69 +++++++++++ .../login/message/NotificationJumpType.java | 31 +++++ .../fr/start/module/DesignerActivator.java | 2 + 4 files changed, 219 insertions(+) create mode 100644 designer-base/src/main/java/com/fr/design/login/message/DesignerMessageHelper.java create mode 100644 designer-base/src/main/java/com/fr/design/login/message/DesignerModuleClickType.java create mode 100644 designer-base/src/main/java/com/fr/design/login/message/NotificationJumpType.java diff --git a/designer-base/src/main/java/com/fr/design/login/message/DesignerMessageHelper.java b/designer-base/src/main/java/com/fr/design/login/message/DesignerMessageHelper.java new file mode 100644 index 0000000000..c23464c17c --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/message/DesignerMessageHelper.java @@ -0,0 +1,117 @@ +package com.fr.design.login.message; + +import com.fr.concurrent.NamedThreadFactory; +import com.fr.design.DesignerEnvManager; +import com.fr.design.dialog.NotificationDialog; +import com.fr.design.dialog.NotificationDialogAction; +import com.fr.design.event.DesignerOpenedListener; +import com.fr.design.login.utils.DesignerLoginUtils; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.utils.BrowseUtils; +import com.fr.general.CloudCenter; +import com.fr.general.http.HttpToolbox; +import com.fr.json.JSON; +import com.fr.json.JSONFactory; +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.StringUtils; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/6/11 + */ +public class DesignerMessageHelper { + + private static final long DELAY = 1L; + private static final String STATUS = "status"; + private static final String DATA = "data"; + private static final String SUCCESS = "success"; + private static final String MESSAGE_ID = "messageId"; + private static final String TITLE = "title"; + private static final String BODY = "body"; + private static final String JUMP_TYPE = "jumpType"; + private static final String JUMP_TO = "jumpTo"; + + private static DesignerMessageHelper instance; + + private DesignerMessageHelper() { + } + + public static DesignerMessageHelper getInstance() { + if (instance == null) { + instance = new DesignerMessageHelper(); + } + return instance; + } + + public void prepareShowMessage() { + DesignerContext.getDesignerFrame().addDesignerOpenedListener(new DesignerOpenedListener() { + @Override + public void designerOpened() { + ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory("DesignerMessageHelper")); + service.schedule(new Runnable() { + @Override + public void run() { + try { + pullLatestMessageAndShow(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + }, DELAY, TimeUnit.MINUTES); + service.shutdown(); + } + }); + } + + private void pullLatestMessageAndShow() throws Exception { + String url = CloudCenter.getInstance().acquireUrlByKind("designer.message.push", "https://market.fanruan.com/api/v1/message/designer"); + Map params = new HashMap<>(); + params.put("designerId", DesignerEnvManager.getEnvManager().getUUID()); + String result = HttpToolbox.post(url, params); + JSONObject response = JSONFactory.createJSON(JSON.OBJECT, result); + String status = response.optString(STATUS); + if (SUCCESS.equals(status)) { + JSONObject data = response.optJSONObject(DATA); + String messageId = data.optString(MESSAGE_ID); + String title = data.optString(TITLE); + String body = data.optString(BODY); + int jumpType = data.optInt(JUMP_TYPE); + String jumpTo = data.optString(JUMP_TO); + if (StringUtils.isNotEmpty(messageId) && StringUtils.isNotEmpty(title) && StringUtils.isNotEmpty(body) && jumpType > 0 && StringUtils.isNotEmpty(jumpTo)) { + NotificationJumpType notificationJumpType = NotificationJumpType.valueOf(jumpType); + if (notificationJumpType == NotificationJumpType.WEB_URL) { + NotificationDialog.Builder() + .owner(DesignerContext.getDesignerFrame()) + .title(title) + .modal(true) + .messageType(NotificationDialog.NEW_MESSAGE) + .message(body) + .notificationDialogAction(new NotificationDialogAction() { + @Override + public void doClick() { + String ssoUrl = DesignerLoginUtils.generateDesignerSSOUrl(jumpTo); + BrowseUtils.browser(ssoUrl); + } + }).build(); + } else if (notificationJumpType == NotificationJumpType.DESIGNER_MODULE) { + DesignerModuleClickType designerModuleClickType = DesignerModuleClickType.valueOf(jumpTo); + NotificationDialog.Builder() + .owner(DesignerContext.getDesignerFrame()) + .title(title) + .modal(true) + .messageType(NotificationDialog.NEW_MESSAGE) + .message(body) + .notificationDialogAction(designerModuleClickType.getAction()) + .build(); + } + } + } + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/message/DesignerModuleClickType.java b/designer-base/src/main/java/com/fr/design/login/message/DesignerModuleClickType.java new file mode 100644 index 0000000000..85b8983f11 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/message/DesignerModuleClickType.java @@ -0,0 +1,69 @@ +package com.fr.design.login.message; + +import com.fr.config.ServerPreferenceConfig; +import com.fr.design.dialog.NotificationDialogAction; +import com.fr.design.extra.WebViewDlgHelper; +import com.fr.design.os.impl.SupportOSImpl; +import com.fr.design.upm.UpmFinder; +import com.fr.design.utils.DesignUtils; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.StringUtils; +import com.fr.stable.os.Arch; +import com.fr.stable.os.OperatingSystem; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/6/11 + */ +public enum DesignerModuleClickType { + PLUGIN("PLUGIN", new NotificationDialogAction() { + @Override + public void doClick() { + try { + if (Arch.getArch() == Arch.ARM || OperatingSystem.isLinux() || SupportOSImpl.MACOS_WEB_PLUGIN_MANAGEMENT.support()) { + DesignUtils.visitEnvServerByParameters("#management/plugin", null, null); + return; + } + if (ServerPreferenceConfig.getInstance().isUseOptimizedUPM() || SupportOSImpl.MACOS_NEW_PLUGIN_MANAGEMENT.support()) { + UpmFinder.showUPMDialog(); + } else { + WebViewDlgHelper.createPluginDialog(); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + }), + REUSE("REUSE", new NotificationDialogAction() { + @Override + public void doClick() { + try { + // TODO + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + }), + UNKNOWN(StringUtils.EMPTY, new NotificationDialogAction() { + @Override + public void doClick() { + } + }); + + private String jumpTo; + private NotificationDialogAction action; + + DesignerModuleClickType(String jumpTo, NotificationDialogAction action) { + this.jumpTo = jumpTo; + this.action = action; + } + + public String getJumpTo() { + return jumpTo; + } + + public NotificationDialogAction getAction() { + return action; + } +} diff --git a/designer-base/src/main/java/com/fr/design/login/message/NotificationJumpType.java b/designer-base/src/main/java/com/fr/design/login/message/NotificationJumpType.java new file mode 100644 index 0000000000..e1b8f04ac3 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/login/message/NotificationJumpType.java @@ -0,0 +1,31 @@ +package com.fr.design.login.message; + +/** + * @author Lanlan + * @version 10.0 + * Created by Lanlan on 2021/6/11 + */ +public enum NotificationJumpType { + WEB_URL(1), + DESIGNER_MODULE(2), + UNKNOWN(-1); + + private int jumpType; + + NotificationJumpType(int jumpType) { + this.jumpType = jumpType; + } + + public int getJumpType() { + return jumpType; + } + + public static NotificationJumpType valueOf(int jumpType) { + for(NotificationJumpType value : NotificationJumpType.values()) { + if(value.getJumpType() == jumpType) { + return value; + } + } + return UNKNOWN; + } +} diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java index fee4ddaa90..3c9b4dc9db 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java @@ -41,6 +41,7 @@ import com.fr.design.javascript.ParameterJavaScriptPane; import com.fr.design.javascript.ProcessTransitionAdapter; import com.fr.design.login.DesignerLoginType; import com.fr.design.login.guide.DesignerGuideHelper; +import com.fr.design.login.message.DesignerMessageHelper; import com.fr.design.login.socketio.LoginAuthServer; import com.fr.design.mainframe.BaseJForm; import com.fr.design.mainframe.FormHierarchyTreePane; @@ -141,6 +142,7 @@ public class DesignerActivator extends Activator implements Prepare { public void run() { DesignerPushUpdateManager.getInstance().preparePushUpdate(); DesignerGuideHelper.prepareShowGuideDialog(); + DesignerMessageHelper.getInstance().prepareShowMessage(); } }); From 48e762113cbf2620f8286683f8ba99e00439b4f5 Mon Sep 17 00:00:00 2001 From: Lanlan Date: Mon, 14 Jun 2021 18:56:25 +0800 Subject: [PATCH 141/148] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BB=B6=E8=BF=9F?= =?UTF-8?q?=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/login/message/DesignerMessageHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/login/message/DesignerMessageHelper.java b/designer-base/src/main/java/com/fr/design/login/message/DesignerMessageHelper.java index c23464c17c..e899234b3f 100644 --- a/designer-base/src/main/java/com/fr/design/login/message/DesignerMessageHelper.java +++ b/designer-base/src/main/java/com/fr/design/login/message/DesignerMessageHelper.java @@ -28,7 +28,7 @@ import java.util.concurrent.TimeUnit; */ public class DesignerMessageHelper { - private static final long DELAY = 1L; + private static final long DELAY = 7L; private static final String STATUS = "status"; private static final String DATA = "data"; private static final String SUCCESS = "success"; From cbe011be6b71f3353c73caeddcbd41e8387989ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=B2=B3?= <445798420@qq.com> Date: Tue, 15 Jun 2021 10:12:38 +0800 Subject: [PATCH 142/148] =?UTF-8?q?CHART-19525=20=E5=AF=8C=E6=96=87?= =?UTF-8?q?=E6=9C=AC=E7=BC=96=E8=BE=91=E6=A1=86=E8=AE=BE=E7=BD=AE=E4=B8=BA?= =?UTF-8?q?=E5=8F=AF=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/component/richText/VanChartRichTextDialog.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/richText/VanChartRichTextDialog.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/richText/VanChartRichTextDialog.java index 509055842a..29598fa294 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/richText/VanChartRichTextDialog.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/richText/VanChartRichTextDialog.java @@ -18,7 +18,7 @@ public class VanChartRichTextDialog extends BasicDialog { this.setTitle(Toolkit.i18nText("Fine-Design_Report_RichTextEditor")); this.setBasicDialogSize(DEFAULT); GUICoreUtils.centerWindow(this); - this.setResizable(false); + this.setResizable(true); this.setModal(true); } From 1af829055b777332899b50bb164f37a4972b81f9 Mon Sep 17 00:00:00 2001 From: Lanlan Date: Tue, 15 Jun 2021 11:09:22 +0800 Subject: [PATCH 143/148] fix --- .../com/fr/design/login/message/DesignerMessageHelper.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/login/message/DesignerMessageHelper.java b/designer-base/src/main/java/com/fr/design/login/message/DesignerMessageHelper.java index e899234b3f..dbb2d69c44 100644 --- a/designer-base/src/main/java/com/fr/design/login/message/DesignerMessageHelper.java +++ b/designer-base/src/main/java/com/fr/design/login/message/DesignerMessageHelper.java @@ -99,7 +99,9 @@ public class DesignerMessageHelper { String ssoUrl = DesignerLoginUtils.generateDesignerSSOUrl(jumpTo); BrowseUtils.browser(ssoUrl); } - }).build(); + }) + .build() + .setVisible(true); } else if (notificationJumpType == NotificationJumpType.DESIGNER_MODULE) { DesignerModuleClickType designerModuleClickType = DesignerModuleClickType.valueOf(jumpTo); NotificationDialog.Builder() @@ -109,7 +111,8 @@ public class DesignerMessageHelper { .messageType(NotificationDialog.NEW_MESSAGE) .message(body) .notificationDialogAction(designerModuleClickType.getAction()) - .build(); + .build() + .setVisible(true); } } } From c1e38fc23cfe0f41c10811cec90baff2b1ea510b Mon Sep 17 00:00:00 2001 From: Lanlan Date: Tue, 15 Jun 2021 14:47:03 +0800 Subject: [PATCH 144/148] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BC=95=E5=AF=BC?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=97=A0=E6=B3=95=E5=85=B3=E9=97=AD=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer-base/src/main/resources/com/fr/design/login/guide.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/resources/com/fr/design/login/guide.js b/designer-base/src/main/resources/com/fr/design/login/guide.js index 355fb5e5b0..697878e1d8 100644 --- a/designer-base/src/main/resources/com/fr/design/login/guide.js +++ b/designer-base/src/main/resources/com/fr/design/login/guide.js @@ -1 +1 @@ -!function(e){var t={};function i(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,i),n.l=!0,n.exports}i.m=e,i.c=t,i.d=function(e,t,o){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(i.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(o,n,function(t){return e[t]}.bind(null,n));return o},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=1)}([function(e,t,i){"use strict";var o=this&&this.__createBinding||(Object.create?function(e,t,i,o){o===undefined&&(o=i),Object.defineProperty(e,o,{enumerable:!0,get:function(){return t[i]}})}:function(e,t,i,o){o===undefined&&(o=i),e[o]=t[i]}),n=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||t.hasOwnProperty(i)||o(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),n(i(2),t)},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),n=i(3);BI.addI18n(Store.i18n),BI.createWidget({type:o.Vertical,element:"body",items:[{type:n["default"]}]})},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ListView=t.VirtualGroup=t.LeftRightVerticalAdapt=t.Left=t.Horizontal=t.Vertical=t.Absolute=t.Layout=t.Htape=t.CenterAdapt=t.Vtape=t.HorizontalAdapt=t.VerticalAdapt=t.BubbleCombo=t.Img=t.Tab=t.SingleSelectInsertCombo=t.SingleSelectRadioItem=t.MultiTreePopupView=t.Editor=t.NicEditor=t.RichEditor=t.MultiTreeCombo=t.DynamicDateTimeCombo=t.DynamicDateCombo=t.BarPopOver=t.MultiSelectItem=t.TextAreaEditor=t.AllValueChooserCombo=t.ButtonGroup=t.MultiSelectInsertCombo=t.TextEditor=t.Button=t.SignEditor=t.MultiFileEditor=t.SmallTextEditor=t.HtmlLabel=t.Label=t.DownListCombo=t.TextButton=t.IconChangeButton=t.IconButton=t.IconTextIconItem=t.IconTextItem=void 0,t.IconTextItem="bi.icon_text_item",t.IconTextIconItem="bi.icon_text_icon_item",t.IconButton="bi.icon_button",t.IconChangeButton="bi.icon_change_button",t.TextButton="bi.text_button",t.DownListCombo="bi.down_list_combo",t.Label="bi.label",t.HtmlLabel="bi.html_label",t.SmallTextEditor="bi.small_text_editor",t.MultiFileEditor="bi.multifile_editor",t.SignEditor="bi.sign_editor",t.Button="bi.button",t.TextEditor="bi.text_editor",t.MultiSelectInsertCombo="bi.multi_select_insert_combo",t.ButtonGroup="bi.button_group",t.AllValueChooserCombo="bi.all_value_chooser_combo",t.TextAreaEditor="bi.textarea_editor",t.MultiSelectItem="bi.multi_select_item",t.BarPopOver="bi.bar_popover",t.DynamicDateCombo="bi.dynamic_date_combo",t.DynamicDateTimeCombo="bi.dynamic_date_time_combo",t.MultiTreeCombo="bi.multi_tree_combo",t.RichEditor="bi.rich_editor",t.NicEditor="bi.nic_editor",t.Editor="bi.editor",t.MultiTreePopupView="bi.multi_tree_popup_view",t.SingleSelectRadioItem="bi.single_select_radio_item",t.SingleSelectInsertCombo="bi.single_select_insert_combo",t.Tab="bi.tab",t.Img="bi.img",t.BubbleCombo="bi.bubble_combo",t.VerticalAdapt="bi.vertical_adapt",t.HorizontalAdapt="bi.horizontal_adapt",t.Vtape="bi.vtape",t.CenterAdapt="bi.center_adapt",t.Htape="bi.htape",t.Layout="bi.layout",t.Absolute="bi.absolute",t.Vertical="bi.vertical",t.Horizontal="bi.horizontal",t.Left="bi.left",t.LeftRightVerticalAdapt="bi.left_right_vertical_adapt",t.VirtualGroup="bi.virtual_group",t.ListView="bi.list_view"},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var o=i(0);i(4);var n=i(5),r=i(6);t.className="designer.login.guide",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-guide",width:700,height:557},_store:function(){return BI.Models.getModel(r["default"])},render:function(){var e=this;return{type:o.Vertical,items:[{el:{type:o.HorizontalAdapt,items:[{type:o.Layout,cls:"background-guide-close",rgap:19,tgap:17,handler:function(){n["default"].closeWindow(e.model.doNotRemind,!1)}}]}},{el:{type:o.Vertical,items:[{type:o.Horizontal,items:[{type:o.MultiSelectItem,lgap:33,width:240,text:BI.i18nText("Designer-Guide_Do_Not_Remind"),handler:function(){e.store.setDoNotRemind(this.isSelected())}},{type:o.TextButton,width:122,height:38,cls:"designer-guide-login-button",text:BI.i18nText("Designer-Guide_Login"),handler:function(){n["default"].closeWindow(e.model.doNotRemind,!0)}}]}]},tgap:460}]}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.DesignerGuideHelper,n=function(){function e(){}return e.prototype.closeWindow=function(e,t){o&&o.closeWindow(e,t)},e}();t["default"]=new n},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});BI.model("designer.login.guide.model",BI.inherit(Fix.Model,{state:function(){return{doNotRemind:!1}},setDoNotRemind:function(e){this.model.doNotRemind=e}})),t["default"]="designer.login.guide.model"}]); \ No newline at end of file +!function(e){var t={};function i(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,i),n.l=!0,n.exports}i.m=e,i.c=t,i.d=function(e,t,o){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(i.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(o,n,function(t){return e[t]}.bind(null,n));return o},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=1)}([function(e,t,i){"use strict";var o=this&&this.__createBinding||(Object.create?function(e,t,i,o){o===undefined&&(o=i),Object.defineProperty(e,o,{enumerable:!0,get:function(){return t[i]}})}:function(e,t,i,o){o===undefined&&(o=i),e[o]=t[i]}),n=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||t.hasOwnProperty(i)||o(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),n(i(2),t)},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),n=i(3);BI.addI18n(Store.i18n),BI.createWidget({type:o.Vertical,element:"body",items:[{type:n["default"]}]})},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ListView=t.VirtualGroup=t.LeftRightVerticalAdapt=t.Left=t.Horizontal=t.Vertical=t.Absolute=t.Layout=t.Htape=t.CenterAdapt=t.Vtape=t.HorizontalAdapt=t.VerticalAdapt=t.BubbleCombo=t.Img=t.Tab=t.SingleSelectInsertCombo=t.SingleSelectRadioItem=t.MultiTreePopupView=t.Editor=t.NicEditor=t.RichEditor=t.MultiTreeCombo=t.DynamicDateTimeCombo=t.DynamicDateCombo=t.BarPopOver=t.MultiSelectItem=t.TextAreaEditor=t.AllValueChooserCombo=t.ButtonGroup=t.MultiSelectInsertCombo=t.TextEditor=t.Button=t.SignEditor=t.MultiFileEditor=t.SmallTextEditor=t.HtmlLabel=t.Label=t.DownListCombo=t.TextButton=t.IconChangeButton=t.IconButton=t.IconTextIconItem=t.IconTextItem=void 0,t.IconTextItem="bi.icon_text_item",t.IconTextIconItem="bi.icon_text_icon_item",t.IconButton="bi.icon_button",t.IconChangeButton="bi.icon_change_button",t.TextButton="bi.text_button",t.DownListCombo="bi.down_list_combo",t.Label="bi.label",t.HtmlLabel="bi.html_label",t.SmallTextEditor="bi.small_text_editor",t.MultiFileEditor="bi.multifile_editor",t.SignEditor="bi.sign_editor",t.Button="bi.button",t.TextEditor="bi.text_editor",t.MultiSelectInsertCombo="bi.multi_select_insert_combo",t.ButtonGroup="bi.button_group",t.AllValueChooserCombo="bi.all_value_chooser_combo",t.TextAreaEditor="bi.textarea_editor",t.MultiSelectItem="bi.multi_select_item",t.BarPopOver="bi.bar_popover",t.DynamicDateCombo="bi.dynamic_date_combo",t.DynamicDateTimeCombo="bi.dynamic_date_time_combo",t.MultiTreeCombo="bi.multi_tree_combo",t.RichEditor="bi.rich_editor",t.NicEditor="bi.nic_editor",t.Editor="bi.editor",t.MultiTreePopupView="bi.multi_tree_popup_view",t.SingleSelectRadioItem="bi.single_select_radio_item",t.SingleSelectInsertCombo="bi.single_select_insert_combo",t.Tab="bi.tab",t.Img="bi.img",t.BubbleCombo="bi.bubble_combo",t.VerticalAdapt="bi.vertical_adapt",t.HorizontalAdapt="bi.horizontal_adapt",t.Vtape="bi.vtape",t.CenterAdapt="bi.center_adapt",t.Htape="bi.htape",t.Layout="bi.layout",t.Absolute="bi.absolute",t.Vertical="bi.vertical",t.Horizontal="bi.horizontal",t.Left="bi.left",t.LeftRightVerticalAdapt="bi.left_right_vertical_adapt",t.VirtualGroup="bi.virtual_group",t.ListView="bi.list_view"},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var o=i(0);i(4);var n=i(5),r=i(6);t.className="designer.login.guide",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-guide",width:700,height:557},_store:function(){return BI.Models.getModel(r["default"])},render:function(){var e=this;return{type:o.Vertical,items:[{el:{type:o.HorizontalAdapt,items:[{type:o.IconButton,cls:"background-guide-close",rgap:19,tgap:17,handler:function(){n["default"].closeWindow(e.model.doNotRemind,!1)}}]}},{el:{type:o.Vertical,items:[{type:o.Horizontal,items:[{type:o.MultiSelectItem,lgap:33,width:240,text:BI.i18nText("Designer-Guide_Do_Not_Remind"),handler:function(){e.store.setDoNotRemind(this.isSelected())}},{type:o.TextButton,width:122,height:38,cls:"designer-guide-login-button",text:BI.i18nText("Designer-Guide_Login"),handler:function(){n["default"].closeWindow(e.model.doNotRemind,!0)}}]}]},tgap:460}]}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=window.DesignerGuideHelper,n=function(){function e(){}return e.prototype.closeWindow=function(e,t){o&&o.closeWindow(e,t)},e}();t["default"]=new n},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});BI.model("designer.login.guide.model",BI.inherit(Fix.Model,{state:function(){return{doNotRemind:!1}},setDoNotRemind:function(e){this.model.doNotRemind=e}})),t["default"]="designer.login.guide.model"}]); \ No newline at end of file From c64f389214178d843674d712fa81638dc8d940fa Mon Sep 17 00:00:00 2001 From: Lanlan Date: Tue, 15 Jun 2021 15:07:05 +0800 Subject: [PATCH 145/148] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AF=B9=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E7=A0=81=E9=95=BF=E5=BA=A6=E7=9A=84=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer-base/src/main/resources/com/fr/design/login/login.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/resources/com/fr/design/login/login.js b/designer-base/src/main/resources/com/fr/design/login/login.js index cec6fd34b1..03ebdac30a 100644 --- a/designer-base/src/main/resources/com/fr/design/login/login.js +++ b/designer-base/src/main/resources/com/fr/design/login/login.js @@ -1 +1 @@ -!function(e){var t={};function i(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,i),o.l=!0,o.exports}i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)i.d(n,o,function(t){return e[t]}.bind(null,o));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=4)}([function(e,t,i){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,i,n){n===undefined&&(n=i),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[i]}})}:function(e,t,i,n){n===undefined&&(n=i),e[n]=t[i]}),o=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||t.hasOwnProperty(i)||n(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),o(i(5),t)},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=window.DesignerLoginHelper,o=function(){function e(){}return e.prototype.getParams=function(){return{designerLoginSource:window.designerLoginSource||"0",lastLoginType:window.lastLoginType||"-1",lastLoginAccount:window.lastLoginAccount||""}},e.prototype.closeWindow=function(e){n&&n.closeWindow(e)},e.prototype.serviceHref=function(){n?n.serviceHref():window.open("https://bbs.fanruan.com/thread-102821-1-1.html")},e.prototype.forgetHref=function(){n?n.forgetHref():window.open("https://id.fanruan.com/forget/forget.php?clue=activityf")},e.prototype.normalLogin=function(e,t,i){n?n.normalLogin(e,t,i):i(-1)},e.prototype.sendCaptcha=function(e,t,i){n?n.sendCaptcha(e,t,i):i(-1)},e.prototype.smsLogin=function(e,t,i,o){n?n.smsLogin(e,t,i,o):o(null)},e.prototype.smsRegister=function(e,t,i,o,s){n?n.smsRegister(e,t,i,o,s):s(-1)},e.prototype.resize=function(e,t){n&&n.resize(e,t)},e}();t["default"]=new o},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.BBS_ERROR_CODE=t.NORMAL_LOGIN_RESULT=t.REGION=t.LOGIN=void 0,t.LOGIN={NORMAL_METHOD:"normal",SMS_METHOD:"sms",TABS:{LOGIN:"login",FORGET_PASSWORD:"forget",RESET_PASSWORD:"reset",REGISTER:"register"}},t.REGION=[{value:"+86",text:"Designer-Basic_Chinese_Mainland"},{value:"+886",text:"Designer-Basic_Chinese_Taiwan"},{value:"+852",text:"Designer-Basic_Chinese_Hong_Kong"},{value:"+853",text:"Designer-Basic_Chinese_Macao"},{value:"+90",text:"Designer-Basic_Turkey"},{value:"+82",text:"Designer-Basic_South_Korea"},{value:"+81",text:"Designer-Basic_Japan"},{value:"+65",text:"Designer-Basic_Singapore"},{value:"+60",text:"Designer-Basic_Malaysia"}],t.NORMAL_LOGIN_RESULT=[{status:0,message:"Designer-Login_Internal_Error"},{status:-1,message:"Designer-Login_Store_User_Not_Exist"},{status:-2,message:"Designer-Login_Store_User_Password_Error"},{status:-3,message:"Designer-Login_Unexpected_Error"},{status:-4,message:"Designer-Login_Network_Connected_Failed"}],t.BBS_ERROR_CODE=[{status:0,message:"Designer-Login_Internal_Error"},{status:-1,message:"Designer-BBS_Register_Timeout"},{status:-2,message:"Designer-BBS_Phone_Is_Register"},{status:-3,message:"Designer-BBS_Captcha_Send_Exceed_Limit"},{status:-4,message:"Designer-BBS_Phone_Format_Error"},{status:-100,message:"Designer-BBS_Captcha_Out_Of_Date"},{status:-101,message:"Designer-BBS_Captcha_Try_Exceed_Limit"},{status:-102,message:"Designer-BBS_Captcha_Error"},{status:-104,message:"Designer-BBS_Username_Format_Error"},{status:-103,message:"Designer-BBS_Please_Enter_Correct_Phone"},{status:-105,message:"Designer-BBS_Username_Too_Short"},{status:-106,message:"Designer-BBS_Username_Too_Long"},{status:-107,message:"Designer-BBS_Phone_Is_Register"},{status:-108,message:"Designer-BBS_Username_Is_Register"}]},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getError=void 0,t.getError=function(e,t){var i=BI.find(e,(function(e,i){return i.status===t}));return i&&i.message?i.message:""}},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(0),o=i(6);BI.addI18n(Store.i18n),BI.createWidget({type:n.Vertical,element:"body",items:[{type:o["default"]}]})},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ListView=t.VirtualGroup=t.LeftRightVerticalAdapt=t.Left=t.Horizontal=t.Vertical=t.Absolute=t.Layout=t.Htape=t.CenterAdapt=t.Vtape=t.HorizontalAdapt=t.VerticalAdapt=t.BubbleCombo=t.Img=t.Tab=t.SingleSelectInsertCombo=t.SingleSelectRadioItem=t.MultiTreePopupView=t.Editor=t.NicEditor=t.RichEditor=t.MultiTreeCombo=t.DynamicDateTimeCombo=t.DynamicDateCombo=t.BarPopOver=t.MultiSelectItem=t.TextAreaEditor=t.AllValueChooserCombo=t.ButtonGroup=t.MultiSelectInsertCombo=t.TextEditor=t.Button=t.SignEditor=t.MultiFileEditor=t.SmallTextEditor=t.HtmlLabel=t.Label=t.DownListCombo=t.TextButton=t.IconChangeButton=t.IconButton=t.IconTextIconItem=t.IconTextItem=void 0,t.IconTextItem="bi.icon_text_item",t.IconTextIconItem="bi.icon_text_icon_item",t.IconButton="bi.icon_button",t.IconChangeButton="bi.icon_change_button",t.TextButton="bi.text_button",t.DownListCombo="bi.down_list_combo",t.Label="bi.label",t.HtmlLabel="bi.html_label",t.SmallTextEditor="bi.small_text_editor",t.MultiFileEditor="bi.multifile_editor",t.SignEditor="bi.sign_editor",t.Button="bi.button",t.TextEditor="bi.text_editor",t.MultiSelectInsertCombo="bi.multi_select_insert_combo",t.ButtonGroup="bi.button_group",t.AllValueChooserCombo="bi.all_value_chooser_combo",t.TextAreaEditor="bi.textarea_editor",t.MultiSelectItem="bi.multi_select_item",t.BarPopOver="bi.bar_popover",t.DynamicDateCombo="bi.dynamic_date_combo",t.DynamicDateTimeCombo="bi.dynamic_date_time_combo",t.MultiTreeCombo="bi.multi_tree_combo",t.RichEditor="bi.rich_editor",t.NicEditor="bi.nic_editor",t.Editor="bi.editor",t.MultiTreePopupView="bi.multi_tree_popup_view",t.SingleSelectRadioItem="bi.single_select_radio_item",t.SingleSelectInsertCombo="bi.single_select_insert_combo",t.Tab="bi.tab",t.Img="bi.img",t.BubbleCombo="bi.bubble_combo",t.VerticalAdapt="bi.vertical_adapt",t.HorizontalAdapt="bi.horizontal_adapt",t.Vtape="bi.vtape",t.CenterAdapt="bi.center_adapt",t.Htape="bi.htape",t.Layout="bi.layout",t.Absolute="bi.absolute",t.Vertical="bi.vertical",t.Horizontal="bi.horizontal",t.Left="bi.left",t.LeftRightVerticalAdapt="bi.left_right_vertical_adapt",t.VirtualGroup="bi.virtual_group",t.ListView="bi.list_view"},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(7),s=i(8),r=i(9),a=i(11);i(24),t.className="designer.login.login",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login",width:420},_store:function(){return BI.Models.getModel(o["default"])},watch:{loading:function(e){this.loading.setVisible(e)}},render:function(){return{type:n.Vertical,cls:"designer-login",items:[{el:{type:n.HorizontalAdapt,items:[{type:s["default"],rgap:14,tgap:14}]}},{el:{type:n.Vertical,items:[{type:r["default"]},{type:a["default"]}]},lgap:15,rgap:15,bgap:15}]}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});BI.model("designer.login.login.model",BI.inherit(Fix.Model,{childContext:["loading"],state:function(){return{loading:!1}}})),t["default"]="designer.login.login.model"},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(1);t.className="designer.login.login.close.button",t.Widget=BI.inherit(BI.Widget,{render:function(){return{type:n.TextButton,text:String.fromCharCode(10005),cls:"background-login-close",width:18.38,height:18.38,handler:function(){o["default"].closeWindow(!1)}}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0);i(10),t.className="designer.login.login.title",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-title"},render:function(){return{type:n.Label,text:BI.i18nText("Designer-Login_Title"),cls:"bi-font-bold",bgap:10}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(12);i(13);var s=i(14),r=i(16),a=i(18),l=i(2),u=i(1),g=249.64,c=331.64,d=422,f=478,p=560;t.className="designer.login.login.body",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(o["default"])},watch:{loginMethod:function(e){this.tabOption.setValue(e),this.tab.setSelect(e),this.foot.setLoginMethod(e),this.refreshLoginButton(),e===l.LOGIN.NORMAL_METHOD?(this.tab.setHeight(g),u["default"].resize(d,f)):this.model.expand&&(u["default"].resize(d,p),this.tab.setHeight(c))},approve:function(e){this.refreshLoginButton()},expand:function(e){e&&(u["default"].resize(d,p),this.tab.setHeight(c))}},render:function(){var e=this;return{type:n.Vertical,cls:"designer-login-body",items:[{type:n.ButtonGroup,value:this.model.loginMethod,ref:function(t){e.tabOption=t},layouts:[{type:n.HorizontalAdapt}],items:[{cls:"designer-login-change-mode bi-list-item-effect bi-border-bottom bi-font-bold",width:70,height:28,value:l.LOGIN.SMS_METHOD,text:BI.i18nText("Designer-Login_Sms")},{cls:"designer-login-change-mode bi-list-item-effect bi-border-bottom bi-font-bold",width:70,height:28,value:l.LOGIN.NORMAL_METHOD,text:BI.i18nText("Designer-Login_Normal")}],listeners:[{eventName:BI.ButtonGroup.EVENT_CHANGE,action:function(t){e.store.setLoginMethod(t)}}],tgap:24,lgap:75,rgap:75},{type:n.CenterAdapt,tgap:35,items:[{type:n.Tab,cardCreator:BI.bind(this.createCard,this),showIndex:this.model.loginMethod,ref:function(t){e.tab=t},height:g,width:280}]},{type:s["default"],lgap:50,rgap:50,bgap:30,ref:function(t){e.foot=t},refreshStatus:function(t){e.store.setApprove(t)}}]}},mounted:function(){var e=u["default"].getParams(),t=e.designerLoginSource,i=e.lastLoginType;if("2"===t){var n="0"===i?l.LOGIN.NORMAL_METHOD:l.LOGIN.SMS_METHOD;this.store.setLoginMethod(n)}},createCard:function(e){var t=this;switch(e){case l.LOGIN.NORMAL_METHOD:return{type:r["default"],ref:function(e){t.normalMethod=e}};case l.LOGIN.SMS_METHOD:default:return{type:a["default"],ref:function(e){t.smsMethod=e},expand:function(){t.store.setExpand(!0)}}}},refreshLoginButton:function(){this.model.loginMethod===l.LOGIN.NORMAL_METHOD?this.normalMethod.setApprove(this.model.approve):this.smsMethod.setApprove(this.model.approve)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0;var n=i(2);t.className="designer.login.model.login.body",t.Model=BI.inherit(Fix.Model,{context:["loading"],state:function(){return{loginMethod:n.LOGIN.SMS_METHOD,approve:!0,expand:!1}},actions:{setLoginMethod:function(e){this.model.loginMethod=e},setApprove:function(e){this.model.approve=e},setExpand:function(e){this.model.expand=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(1),o=i(0);i(15);var s=i(2);t.className="designer.login.login.foot",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-foot"},render:function(){var e=this,t=this.options;return{type:o.LeftRightVerticalAdapt,items:{left:[{type:o.MultiSelectItem,width:30,selected:!0,handler:function(){t.refreshStatus(this.isSelected())}},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:BI.i18nText("Designer-Login_I_Have_Read")},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:"《"},{type:o.TextButton,cls:"login-link",textAlign:"left",text:BI.i18nText("Designer-Login_Service_Terms"),handler:function(){n["default"].serviceHref()}},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:"》"}],right:[{type:o.TextButton,cls:"login-link",textAlign:"right",text:BI.i18nText("Designer-Login_Forget_Password"),invisible:!0,ref:function(t){e.forgetPassword=t},handler:function(){n["default"].forgetHref()}}]}}},setLoginMethod:function(e){e===s.LOGIN.NORMAL_METHOD?this.forgetPassword.setVisible(!0):this.forgetPassword.setVisible(!1)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(3),s=i(1),r=i(17),a=i(2);t.className="designer.login.login.normal",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(r["default"])},watch:{errMessage:function(e){this.errMessage.setText(e)}},render:function(){var e=this;return{type:n.Vertical,items:[{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_User_Name"),bgap:3},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-username",watermark:BI.i18nText("Designer-Login_User_Name_Hint"),inputType:"text",allowBlank:!0,height:40,ref:function(t){e.userName=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Password"),bgap:3},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Password_Hint"),inputType:"password",allowBlank:!0,height:40,ref:function(t){e.password=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,cls:"designer-login-error-message",textAlign:"center",text:"",height:20,bgap:10,ref:function(t){e.errMessage=t}},{type:n.Button,cls:"login-login-button bi-font-bold",text:BI.i18nText("Designer-Login"),level:"common",height:40,ref:function(t){e.loginButton=t},handler:function(){e.login()}}]}},mounted:function(){var e=this;this.element.keyup((function(t){13===t.keyCode&&e.login()}));var t=s["default"].getParams(),i=t.designerLoginSource,n=t.lastLoginType,o=t.lastLoginAccount;"2"===i&&"0"===n&&e.userName.setValue(o)},checkUsername:function(){var e=this.userName.getValue();e&&this.userName.setValue(e.replace(/\s+/g,""))},login:function(){var e=this;e.checkUsername();var t=this.userName.getValue(),i=this.password.getValue();t?i?s["default"].normalLogin(t,i,(function(t){var i=parseInt(t,10);if(i>0)s["default"].closeWindow(!0);else{var n=o.getError(a.NORMAL_LOGIN_RESULT,i);n&&e.store.setErrMessage(BI.i18nText(n))}})):this.store.setErrMessage(BI.i18nText("Designer-Login_Password_Not_Null")):this.store.setErrMessage(BI.i18nText("Designer-Login_Username_Not_Null"))},setApprove:function(e){this.loginButton.setEnable(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0,t.className="designer.login.model.normal_method",t.Model=BI.inherit(Fix.Model,{context:[""],state:function(){return{errMessage:""}},actions:{setErrMessage:function(e){this.model.errMessage=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(19),s=i(21),r=i(22),a=i(2),l=i(23),u=i(1),g=i(3);t.className="designer.login.login.sms",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(l["default"])},watch:{errMessage:function(e){this.errMessage.setText(e)},isRegister:function(e){var t=this.options;e&&(t.expand(),this.password.setVisible(!0),this.passwordLabel.setVisible(!0))}},render:function(){var e=this,t=this;return{type:n.Vertical,items:[{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Phone"),bgap:3},{type:n.HorizontalAdapt,bgap:7,items:[{type:o["default"],height:42,textFormatter:function(e){var i=t.getNumberTypeItem(e);return{value:i.value,text:BI.i18nText(i.text)}},value:a.REGION[0].value,items:BI.map(a.REGION,(function(e,t){return{type:s["default"],value:t.value,label:BI.i18nText(t.text),text:t.value}})),ref:function(t){e.regionCode=t}},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-username",watermark:BI.i18nText("Designer-Login_Phone_Hint"),inputType:"text",allowBlank:!0,height:40,ref:function(t){e.phone=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Code"),bgap:3},{type:n.Horizontal,bgap:7,items:[{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Code_Hint"),inputType:"text",allowBlank:!0,height:40,width:190,ref:function(t){e.code=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:r["default"],height:40,width:90,ref:function(t){e.accountCaptcha=t},listeners:[{eventName:"EVENT_SEND",action:function(){t.sendCaptcha()}}]}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Password"),bgap:3,invisible:!0,ref:function(t){e.passwordLabel=t}},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Password_Setting_Hint"),inputType:"password",allowBlank:!0,height:40,invisible:!0,ref:function(t){e.password=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,cls:"designer-login-error-message",textAlign:"center",text:"",height:20,bgap:11,ref:function(t){e.errMessage=t}},{type:n.Button,cls:"login-login-button bi-font-bold",text:BI.i18nText("Designer-Login_Register_Or_Login"),level:"common",height:40,ref:function(t){e.loginButton=t},handler:function(){e.login()}}]}},mounted:function(){var e=this;this.element.keyup((function(t){13===t.keyCode&&e.login()}));var t=u["default"].getParams(),i=t.designerLoginSource,n=t.lastLoginType,o=t.lastLoginAccount;if("2"===i&&"1"===n){var s=o.split("-")[0],r=o.split("-")[1];e.regionCode.setValue(s),e.phone.setValue(r)}},getNumberTypeItem:function(e){return BI.find(a.REGION,(function(t,i){return e===i.value}))||{}},checkPhone:function(){var e=this.phone.getValue();e&&this.phone.setValue(e.replace(/\s+/g,""))},login:function(){var e=this,t=this;t.checkPhone();var i=this.phone.getValue(),n=this.code.getValue();if(i)if(n){var o=this.regionCode.getValue();if(this.model.isRegister){var s=this.password.getValue();if(!s)return void this.store.setErrMessage(BI.i18nText("Designer-Login_Password_Not_Null"));var r=this.model.regToken;if(!r)return void this.store.setErrMessage(BI.i18nText("Designer-Login_Token_Request_Failed"));u["default"].smsRegister(o,i,s,r,(function(e){var i=parseInt(e,10);if(i>0)u["default"].closeWindow(!0);else{var n=g.getError(a.BBS_ERROR_CODE,i);n&&t.store.setErrMessage(BI.i18nText(n))}}))}else u["default"].smsLogin(o,i,n,(function(i){var n=JSON.parse(i);if(n.status>0)if(!0===n.register){var o=n.regtoken;o?(t.store.setRegister(!0),t.store.setRegToken(o)):e.store.setErrMessage(BI.i18nText("Designer-Login_Token_Request_Failed"))}else u["default"].closeWindow(!0);else{var s=g.getError(a.BBS_ERROR_CODE,n.status);s&&t.store.setErrMessage(BI.i18nText(s))}}))}else this.store.setErrMessage(BI.i18nText("Designer-Login_Code_Not_Null"));else this.store.setErrMessage(BI.i18nText("Designer-Login_Phone_Not_Null"))},sendCaptcha:function(){var e=this;e.checkPhone();var t=this.phone.getValue();if(!t)return e.accountCaptcha.setButtonEnable(!0),void this.store.setErrMessage(BI.i18nText("Designer-Login_Phone_Not_Null"));var i=this.regionCode.getValue();u["default"].sendCaptcha(i,t,(function(t){var i=parseInt(t,10);if(1===i)e.accountCaptcha.regainCaptcha();else{if(e.accountCaptcha.setButtonEnable(!0),0===i)return void e.store.setErrMessage(BI.i18nText("Designer-BBS_Please_Enter_Correct_Phone"));var n=g.getError(a.BBS_ERROR_CODE,i);n&&e.store.setErrMessage(BI.i18nText(n))}}))},setApprove:function(e){this.loginButton.setEnable(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(20);t.className="designer.left_right_text_value_combo",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"",height:24,chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,textFormatter:function(e){return e},value:""},render:function(){var e=this,t=this.options;return{type:"bi.combo",container:t.container,adjustLength:2,ref:function(t){e.combo=t},el:{type:n["default"],cls:"text-value-trigger",items:t.items,height:t.height-2,value:t.textFormatter(t.value),ref:function(t){e.trigger=t}},popup:{el:{type:"bi.text_value_combo_popup",chooseType:t.chooseType,value:t.value,items:t.items,ref:function(t){e.popup=t},listeners:[{eventName:BI.TextValueComboPopup.EVENT_CHANGE,action:function(){e.setValue(e.getValue()),e.combo.hideView(),e.fireEvent("EVENT_CHANGE",arguments)}},{eventName:BI.Controller.EVENT_CHANGE,action:function(){e.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}}]},value:t.value,maxHeight:240,minHeight:25}}},setValue:function(e){this.combo.setValue(e),this.trigger.setValue(this.options.textFormatter(e))},getValue:function(){var e=this.combo.getValue();return BI.isNull(e)?"":BI.isArray(e)?e[0]:e},populate:function(e){this.options.items=e,this.combo.populate(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0,t.className="designer.left_right_text_value_combo_trigger",t.Widget=BI.inherit(BI.Trigger,{props:{baseCls:"",value:{}},render:function(){var e=this,t=this.options,i=t.value;return{type:"bi.htape",cls:"bi-border-bottom bi-border-radius",items:[{type:"bi.label",text:i.text,title:function(){return e.textRow.getText()},height:t.height,hgap:3,textAlign:"left",ref:function(t){e.textRow=t}},{type:"bi.label",text:i.value,height:t.height,width:32,textAlign:"right",ref:function(t){e.valueRow=t}},{type:"bi.trigger_icon_button",width:t.triggerWidth||t.height}]}},setValue:function(e){this.textRow.setText(e.text),this.valueRow.setText(e.value)},setText:function(e){this.textRow.setText(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0,t.className="designer.components.phone.editor.item",t.Widget=BI.inherit(BI.BasicButton,{props:{baseCls:"designer-login-login-body",label:"",text:""},render:function(){var e=this.options;return{type:"bi.htape",items:[{el:{type:"bi.label",text:e.label,title:e.label,textAlign:"left"},lgap:10,rgap:5},{el:{type:"bi.label",text:e.text,textAlign:"right"},width:32,rgap:10}]}},doClick:function(){BI.SingleSelectItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent("EVENT_CHANGE",this.isSelected(),this)},setSelected:function(e){BI.SingleSelectItem.superclass.setSelected.apply(this,arguments)},getValue:function(){return this.options.value}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0);t.className="designer.user.account.setting.captcha",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},render:function(){var e=this;this.options;return{type:n.TextButton,text:BI.i18nText("Designer-Login_Code_Request"),cls:"designer-login-border-bottom designer-login-code-text",handler:function(){e.setButtonEnable(!1),e.fireEvent("EVENT_SEND")},ref:function(t){e.getButton=t}}},setButtonEnable:function(e){this.captchaTime&&(e=!1),this.getButton.setEnable(e)},regainCaptcha:function(){var e=this,t=0;window.clearInterval(e.captchaTime),this.captchaTime=window.setInterval((function(){if(60===t)return window.clearInterval(e.captchaTime),e.captchaTime=null,e.getButton.setText(BI.i18nText("Designer-Login_Code_Request")),void e.setButtonEnable(!0);e.getButton.setText(BI.i18nText("Designer-Login_Code_Request_Again")+"("+(60-t)+")"),t++}),1e3),this.setButtonEnable(!1)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0,t.className="designer.login.model.sms_method",t.Model=BI.inherit(Fix.Model,{context:[""],state:function(){return{errMessage:"",isRegister:!1,regToken:""}},actions:{setErrMessage:function(e){this.model.errMessage=e},setRegister:function(e){this.model.isRegister=e},setRegToken:function(e){this.model.regToken=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){}]); \ No newline at end of file +!function(e){var t={};function i(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,i),o.l=!0,o.exports}i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)i.d(n,o,function(t){return e[t]}.bind(null,o));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=4)}([function(e,t,i){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,i,n){n===undefined&&(n=i),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[i]}})}:function(e,t,i,n){n===undefined&&(n=i),e[n]=t[i]}),o=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||t.hasOwnProperty(i)||n(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),o(i(5),t)},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=window.DesignerLoginHelper,o=function(){function e(){}return e.prototype.getParams=function(){return{designerLoginSource:window.designerLoginSource||"0",lastLoginType:window.lastLoginType||"-1",lastLoginAccount:window.lastLoginAccount||""}},e.prototype.closeWindow=function(e){n&&n.closeWindow(e)},e.prototype.serviceHref=function(){n?n.serviceHref():window.open("https://bbs.fanruan.com/thread-102821-1-1.html")},e.prototype.forgetHref=function(){n?n.forgetHref():window.open("https://id.fanruan.com/forget/forget.php?clue=activityf")},e.prototype.normalLogin=function(e,t,i){n?n.normalLogin(e,t,i):i(-1)},e.prototype.sendCaptcha=function(e,t,i){n?n.sendCaptcha(e,t,i):i(-1)},e.prototype.smsLogin=function(e,t,i,o){n?n.smsLogin(e,t,i,o):o(null)},e.prototype.smsRegister=function(e,t,i,o,s){n?n.smsRegister(e,t,i,o,s):s(-1)},e.prototype.resize=function(e,t){n&&n.resize(e,t)},e}();t["default"]=new o},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.BBS_ERROR_CODE=t.NORMAL_LOGIN_RESULT=t.REGION=t.LOGIN=void 0,t.LOGIN={NORMAL_METHOD:"normal",SMS_METHOD:"sms",TABS:{LOGIN:"login",FORGET_PASSWORD:"forget",RESET_PASSWORD:"reset",REGISTER:"register"}},t.REGION=[{value:"+86",text:"Designer-Basic_Chinese_Mainland"},{value:"+886",text:"Designer-Basic_Chinese_Taiwan"},{value:"+852",text:"Designer-Basic_Chinese_Hong_Kong"},{value:"+853",text:"Designer-Basic_Chinese_Macao"},{value:"+90",text:"Designer-Basic_Turkey"},{value:"+82",text:"Designer-Basic_South_Korea"},{value:"+81",text:"Designer-Basic_Japan"},{value:"+65",text:"Designer-Basic_Singapore"},{value:"+60",text:"Designer-Basic_Malaysia"}],t.NORMAL_LOGIN_RESULT=[{status:0,message:"Designer-Login_Internal_Error"},{status:-1,message:"Designer-Login_Store_User_Not_Exist"},{status:-2,message:"Designer-Login_Store_User_Password_Error"},{status:-3,message:"Designer-Login_Unexpected_Error"},{status:-4,message:"Designer-Login_Network_Connected_Failed"}],t.BBS_ERROR_CODE=[{status:0,message:"Designer-Login_Internal_Error"},{status:-1,message:"Designer-BBS_Register_Timeout"},{status:-2,message:"Designer-BBS_Phone_Is_Register"},{status:-3,message:"Designer-BBS_Captcha_Send_Exceed_Limit"},{status:-4,message:"Designer-BBS_Phone_Format_Error"},{status:-100,message:"Designer-BBS_Captcha_Out_Of_Date"},{status:-101,message:"Designer-BBS_Captcha_Try_Exceed_Limit"},{status:-102,message:"Designer-BBS_Captcha_Error"},{status:-104,message:"Designer-BBS_Username_Format_Error"},{status:-103,message:"Designer-BBS_Please_Enter_Correct_Phone"},{status:-105,message:"Designer-BBS_Username_Too_Short"},{status:-106,message:"Designer-BBS_Username_Too_Long"},{status:-107,message:"Designer-BBS_Phone_Is_Register"},{status:-108,message:"Designer-BBS_Username_Is_Register"}]},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getError=void 0,t.getError=function(e,t){var i=BI.find(e,(function(e,i){return i.status===t}));return i&&i.message?i.message:""}},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(0),o=i(6);BI.addI18n(Store.i18n),BI.createWidget({type:n.Vertical,element:"body",items:[{type:o["default"]}]})},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ListView=t.VirtualGroup=t.LeftRightVerticalAdapt=t.Left=t.Horizontal=t.Vertical=t.Absolute=t.Layout=t.Htape=t.CenterAdapt=t.Vtape=t.HorizontalAdapt=t.VerticalAdapt=t.BubbleCombo=t.Img=t.Tab=t.SingleSelectInsertCombo=t.SingleSelectRadioItem=t.MultiTreePopupView=t.Editor=t.NicEditor=t.RichEditor=t.MultiTreeCombo=t.DynamicDateTimeCombo=t.DynamicDateCombo=t.BarPopOver=t.MultiSelectItem=t.TextAreaEditor=t.AllValueChooserCombo=t.ButtonGroup=t.MultiSelectInsertCombo=t.TextEditor=t.Button=t.SignEditor=t.MultiFileEditor=t.SmallTextEditor=t.HtmlLabel=t.Label=t.DownListCombo=t.TextButton=t.IconChangeButton=t.IconButton=t.IconTextIconItem=t.IconTextItem=void 0,t.IconTextItem="bi.icon_text_item",t.IconTextIconItem="bi.icon_text_icon_item",t.IconButton="bi.icon_button",t.IconChangeButton="bi.icon_change_button",t.TextButton="bi.text_button",t.DownListCombo="bi.down_list_combo",t.Label="bi.label",t.HtmlLabel="bi.html_label",t.SmallTextEditor="bi.small_text_editor",t.MultiFileEditor="bi.multifile_editor",t.SignEditor="bi.sign_editor",t.Button="bi.button",t.TextEditor="bi.text_editor",t.MultiSelectInsertCombo="bi.multi_select_insert_combo",t.ButtonGroup="bi.button_group",t.AllValueChooserCombo="bi.all_value_chooser_combo",t.TextAreaEditor="bi.textarea_editor",t.MultiSelectItem="bi.multi_select_item",t.BarPopOver="bi.bar_popover",t.DynamicDateCombo="bi.dynamic_date_combo",t.DynamicDateTimeCombo="bi.dynamic_date_time_combo",t.MultiTreeCombo="bi.multi_tree_combo",t.RichEditor="bi.rich_editor",t.NicEditor="bi.nic_editor",t.Editor="bi.editor",t.MultiTreePopupView="bi.multi_tree_popup_view",t.SingleSelectRadioItem="bi.single_select_radio_item",t.SingleSelectInsertCombo="bi.single_select_insert_combo",t.Tab="bi.tab",t.Img="bi.img",t.BubbleCombo="bi.bubble_combo",t.VerticalAdapt="bi.vertical_adapt",t.HorizontalAdapt="bi.horizontal_adapt",t.Vtape="bi.vtape",t.CenterAdapt="bi.center_adapt",t.Htape="bi.htape",t.Layout="bi.layout",t.Absolute="bi.absolute",t.Vertical="bi.vertical",t.Horizontal="bi.horizontal",t.Left="bi.left",t.LeftRightVerticalAdapt="bi.left_right_vertical_adapt",t.VirtualGroup="bi.virtual_group",t.ListView="bi.list_view"},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(7),s=i(8),r=i(9),a=i(11);i(24),t.className="designer.login.login",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login",width:420},_store:function(){return BI.Models.getModel(o["default"])},watch:{loading:function(e){this.loading.setVisible(e)}},render:function(){return{type:n.Vertical,cls:"designer-login",items:[{el:{type:n.HorizontalAdapt,items:[{type:s["default"],rgap:14,tgap:14}]}},{el:{type:n.Vertical,items:[{type:r["default"]},{type:a["default"]}]},lgap:15,rgap:15,bgap:15}]}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});BI.model("designer.login.login.model",BI.inherit(Fix.Model,{childContext:["loading"],state:function(){return{loading:!1}}})),t["default"]="designer.login.login.model"},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(1);t.className="designer.login.login.close.button",t.Widget=BI.inherit(BI.Widget,{render:function(){return{type:n.TextButton,text:String.fromCharCode(10005),cls:"background-login-close",width:18.38,height:18.38,handler:function(){o["default"].closeWindow(!1)}}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0);i(10),t.className="designer.login.login.title",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-title"},render:function(){return{type:n.Label,text:BI.i18nText("Designer-Login_Title"),cls:"bi-font-bold",bgap:10}}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(12);i(13);var s=i(14),r=i(16),a=i(18),l=i(2),u=i(1),g=249.64,c=331.64,d=422,f=478,p=560;t.className="designer.login.login.body",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(o["default"])},watch:{loginMethod:function(e){this.tabOption.setValue(e),this.tab.setSelect(e),this.foot.setLoginMethod(e),this.refreshLoginButton(),e===l.LOGIN.NORMAL_METHOD?(this.tab.setHeight(g),u["default"].resize(d,f)):this.model.expand&&(u["default"].resize(d,p),this.tab.setHeight(c))},approve:function(e){this.refreshLoginButton()},expand:function(e){e&&(u["default"].resize(d,p),this.tab.setHeight(c))}},render:function(){var e=this;return{type:n.Vertical,cls:"designer-login-body",items:[{type:n.ButtonGroup,value:this.model.loginMethod,ref:function(t){e.tabOption=t},layouts:[{type:n.HorizontalAdapt}],items:[{cls:"designer-login-change-mode bi-list-item-effect bi-border-bottom bi-font-bold",width:70,height:28,value:l.LOGIN.SMS_METHOD,text:BI.i18nText("Designer-Login_Sms")},{cls:"designer-login-change-mode bi-list-item-effect bi-border-bottom bi-font-bold",width:70,height:28,value:l.LOGIN.NORMAL_METHOD,text:BI.i18nText("Designer-Login_Normal")}],listeners:[{eventName:BI.ButtonGroup.EVENT_CHANGE,action:function(t){e.store.setLoginMethod(t)}}],tgap:24,lgap:75,rgap:75},{type:n.CenterAdapt,tgap:35,items:[{type:n.Tab,cardCreator:BI.bind(this.createCard,this),showIndex:this.model.loginMethod,ref:function(t){e.tab=t},height:g,width:280}]},{type:s["default"],lgap:50,rgap:50,bgap:30,ref:function(t){e.foot=t},refreshStatus:function(t){e.store.setApprove(t)}}]}},mounted:function(){var e=u["default"].getParams(),t=e.designerLoginSource,i=e.lastLoginType;if("2"===t){var n="0"===i?l.LOGIN.NORMAL_METHOD:l.LOGIN.SMS_METHOD;this.store.setLoginMethod(n)}},createCard:function(e){var t=this;switch(e){case l.LOGIN.NORMAL_METHOD:return{type:r["default"],ref:function(e){t.normalMethod=e}};case l.LOGIN.SMS_METHOD:default:return{type:a["default"],ref:function(e){t.smsMethod=e},expand:function(){t.store.setExpand(!0)}}}},refreshLoginButton:function(){this.model.loginMethod===l.LOGIN.NORMAL_METHOD?this.normalMethod.setApprove(this.model.approve):this.smsMethod.setApprove(this.model.approve)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0;var n=i(2);t.className="designer.login.model.login.body",t.Model=BI.inherit(Fix.Model,{context:["loading"],state:function(){return{loginMethod:n.LOGIN.SMS_METHOD,approve:!0,expand:!1}},actions:{setLoginMethod:function(e){this.model.loginMethod=e},setApprove:function(e){this.model.approve=e},setExpand:function(e){this.model.expand=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(1),o=i(0);i(15);var s=i(2);t.className="designer.login.login.foot",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-foot"},render:function(){var e=this,t=this.options;return{type:o.LeftRightVerticalAdapt,items:{left:[{type:o.MultiSelectItem,width:30,selected:!0,handler:function(){t.refreshStatus(this.isSelected())}},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:BI.i18nText("Designer-Login_I_Have_Read")},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:"《"},{type:o.TextButton,cls:"login-link",textAlign:"left",text:BI.i18nText("Designer-Login_Service_Terms"),handler:function(){n["default"].serviceHref()}},{type:o.Label,cls:"login-foot-text",textAlign:"left",text:"》"}],right:[{type:o.TextButton,cls:"login-link",textAlign:"right",text:BI.i18nText("Designer-Login_Forget_Password"),invisible:!0,ref:function(t){e.forgetPassword=t},handler:function(){n["default"].forgetHref()}}]}}},setLoginMethod:function(e){e===s.LOGIN.NORMAL_METHOD?this.forgetPassword.setVisible(!0):this.forgetPassword.setVisible(!1)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(3),s=i(1),r=i(17),a=i(2);t.className="designer.login.login.normal",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(r["default"])},watch:{errMessage:function(e){this.errMessage.setText(e)}},render:function(){var e=this;return{type:n.Vertical,items:[{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_User_Name"),bgap:3},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-username",watermark:BI.i18nText("Designer-Login_User_Name_Hint"),inputType:"text",allowBlank:!0,height:40,ref:function(t){e.userName=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Password"),bgap:3},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Password_Hint"),inputType:"password",allowBlank:!0,height:40,ref:function(t){e.password=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,cls:"designer-login-error-message",textAlign:"center",text:"",height:20,bgap:10,ref:function(t){e.errMessage=t}},{type:n.Button,cls:"login-login-button bi-font-bold",text:BI.i18nText("Designer-Login"),level:"common",height:40,ref:function(t){e.loginButton=t},handler:function(){e.login()}}]}},mounted:function(){var e=this;this.element.keyup((function(t){13===t.keyCode&&e.login()}));var t=s["default"].getParams(),i=t.designerLoginSource,n=t.lastLoginType,o=t.lastLoginAccount;"2"===i&&"0"===n&&e.userName.setValue(o)},checkUsername:function(){var e=this.userName.getValue();e&&this.userName.setValue(e.replace(/\s+/g,""))},login:function(){var e=this;e.checkUsername();var t=this.userName.getValue(),i=this.password.getValue();t?i?s["default"].normalLogin(t,i,(function(t){var i=parseInt(t,10);if(i>0)s["default"].closeWindow(!0);else{var n=o.getError(a.NORMAL_LOGIN_RESULT,i);n&&e.store.setErrMessage(BI.i18nText(n))}})):this.store.setErrMessage(BI.i18nText("Designer-Login_Password_Not_Null")):this.store.setErrMessage(BI.i18nText("Designer-Login_Username_Not_Null"))},setApprove:function(e){this.loginButton.setEnable(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0,t.className="designer.login.model.normal_method",t.Model=BI.inherit(Fix.Model,{context:[""],state:function(){return{errMessage:""}},actions:{setErrMessage:function(e){this.model.errMessage=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0),o=i(19),s=i(21),r=i(22),a=i(2),l=i(23),u=i(1),g=i(3);t.className="designer.login.login.sms",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},_store:function(){return BI.Stores.getStore(l["default"])},watch:{errMessage:function(e){this.errMessage.setText(e)},isRegister:function(e){var t=this.options;e&&(t.expand(),this.password.setVisible(!0),this.passwordLabel.setVisible(!0))}},render:function(){var e=this,t=this;return{type:n.Vertical,items:[{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Phone"),bgap:3},{type:n.HorizontalAdapt,bgap:7,items:[{type:o["default"],height:42,textFormatter:function(e){var i=t.getNumberTypeItem(e);return{value:i.value,text:BI.i18nText(i.text)}},value:a.REGION[0].value,items:BI.map(a.REGION,(function(e,t){return{type:s["default"],value:t.value,label:BI.i18nText(t.text),text:t.value}})),ref:function(t){e.regionCode=t}},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-username",watermark:BI.i18nText("Designer-Login_Phone_Hint"),inputType:"text",allowBlank:!0,height:40,ref:function(t){e.phone=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Code"),bgap:3},{type:n.Horizontal,bgap:7,items:[{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Code_Hint"),inputType:"text",allowBlank:!0,height:40,width:190,ref:function(t){e.code=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:r["default"],height:40,width:90,ref:function(t){e.accountCaptcha=t},listeners:[{eventName:"EVENT_SEND",action:function(){t.sendCaptcha()}}]}]},{type:n.Label,textAlign:"left",cls:"designer-login-text",text:BI.i18nText("Designer-Login_Password"),bgap:3,invisible:!0,ref:function(t){e.passwordLabel=t}},{type:n.Editor,cls:"bi-border-bottom designer-login-editor-password",watermark:BI.i18nText("Designer-Login_Password_Setting_Hint"),inputType:"password",allowBlank:!0,height:40,invisible:!0,ref:function(t){e.password=t},listeners:[{eventName:"EVENT_CHANGE",action:function(){e.store.setErrMessage("")}}]},{type:n.Label,cls:"designer-login-error-message",textAlign:"center",text:"",height:20,bgap:11,ref:function(t){e.errMessage=t}},{type:n.Button,cls:"login-login-button bi-font-bold",text:BI.i18nText("Designer-Login_Register_Or_Login"),level:"common",height:40,ref:function(t){e.loginButton=t},handler:function(){e.login()}}]}},mounted:function(){var e=this;this.element.keyup((function(t){13===t.keyCode&&e.login()}));var t=u["default"].getParams(),i=t.designerLoginSource,n=t.lastLoginType,o=t.lastLoginAccount;if("2"===i&&"1"===n){var s=o.split("-")[0],r=o.split("-")[1];e.regionCode.setValue(s),e.phone.setValue(r)}},getNumberTypeItem:function(e){return BI.find(a.REGION,(function(t,i){return e===i.value}))||{}},checkPhone:function(){var e=this.phone.getValue();e&&this.phone.setValue(e.replace(/\s+/g,""))},login:function(){var e=this,t=this;t.checkPhone();var i=this.phone.getValue(),n=this.code.getValue();if(i)if(n)if(6==n.length){var o=this.regionCode.getValue();if(this.model.isRegister){var s=this.password.getValue();if(!s)return void this.store.setErrMessage(BI.i18nText("Designer-Login_Password_Not_Null"));var r=this.model.regToken;if(!r)return void this.store.setErrMessage(BI.i18nText("Designer-Login_Token_Request_Failed"));u["default"].smsRegister(o,i,s,r,(function(e){var i=parseInt(e,10);if(i>0)u["default"].closeWindow(!0);else{var n=g.getError(a.BBS_ERROR_CODE,i);n&&t.store.setErrMessage(BI.i18nText(n))}}))}else u["default"].smsLogin(o,i,n,(function(i){var n=JSON.parse(i);if(n.status>0)if(!0===n.register){var o=n.regtoken;o?(t.store.setRegister(!0),t.store.setRegToken(o)):e.store.setErrMessage(BI.i18nText("Designer-Login_Token_Request_Failed"))}else u["default"].closeWindow(!0);else{var s=g.getError(a.BBS_ERROR_CODE,n.status);s&&t.store.setErrMessage(BI.i18nText(s))}}))}else this.store.setErrMessage(BI.i18nText("Designer-BBS_Captcha_Error"));else this.store.setErrMessage(BI.i18nText("Designer-Login_Code_Not_Null"));else this.store.setErrMessage(BI.i18nText("Designer-Login_Phone_Not_Null"))},sendCaptcha:function(){var e=this;e.checkPhone();var t=this.phone.getValue();if(!t)return e.accountCaptcha.setButtonEnable(!0),void this.store.setErrMessage(BI.i18nText("Designer-Login_Phone_Not_Null"));var i=this.regionCode.getValue();u["default"].sendCaptcha(i,t,(function(t){var i=parseInt(t,10);if(1===i)e.accountCaptcha.regainCaptcha();else{if(e.accountCaptcha.setButtonEnable(!0),0===i)return void e.store.setErrMessage(BI.i18nText("Designer-BBS_Please_Enter_Correct_Phone"));var n=g.getError(a.BBS_ERROR_CODE,i);n&&e.store.setErrMessage(BI.i18nText(n))}}))},setApprove:function(e){this.loginButton.setEnable(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(20);t.className="designer.left_right_text_value_combo",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"",height:24,chooseType:BI.ButtonGroup.CHOOSE_TYPE_SINGLE,textFormatter:function(e){return e},value:""},render:function(){var e=this,t=this.options;return{type:"bi.combo",container:t.container,adjustLength:2,ref:function(t){e.combo=t},el:{type:n["default"],cls:"text-value-trigger",items:t.items,height:t.height-2,value:t.textFormatter(t.value),ref:function(t){e.trigger=t}},popup:{el:{type:"bi.text_value_combo_popup",chooseType:t.chooseType,value:t.value,items:t.items,ref:function(t){e.popup=t},listeners:[{eventName:BI.TextValueComboPopup.EVENT_CHANGE,action:function(){e.setValue(e.getValue()),e.combo.hideView(),e.fireEvent("EVENT_CHANGE",arguments)}},{eventName:BI.Controller.EVENT_CHANGE,action:function(){e.fireEvent(BI.Controller.EVENT_CHANGE,arguments)}}]},value:t.value,maxHeight:240,minHeight:25}}},setValue:function(e){this.combo.setValue(e),this.trigger.setValue(this.options.textFormatter(e))},getValue:function(){var e=this.combo.getValue();return BI.isNull(e)?"":BI.isArray(e)?e[0]:e},populate:function(e){this.options.items=e,this.combo.populate(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0,t.className="designer.left_right_text_value_combo_trigger",t.Widget=BI.inherit(BI.Trigger,{props:{baseCls:"",value:{}},render:function(){var e=this,t=this.options,i=t.value;return{type:"bi.htape",cls:"bi-border-bottom bi-border-radius",items:[{type:"bi.label",text:i.text,title:function(){return e.textRow.getText()},height:t.height,hgap:3,textAlign:"left",ref:function(t){e.textRow=t}},{type:"bi.label",text:i.value,height:t.height,width:32,textAlign:"right",ref:function(t){e.valueRow=t}},{type:"bi.trigger_icon_button",width:t.triggerWidth||t.height}]}},setValue:function(e){this.textRow.setText(e.text),this.valueRow.setText(e.value)},setText:function(e){this.textRow.setText(e)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0,t.className="designer.components.phone.editor.item",t.Widget=BI.inherit(BI.BasicButton,{props:{baseCls:"designer-login-login-body",label:"",text:""},render:function(){var e=this.options;return{type:"bi.htape",items:[{el:{type:"bi.label",text:e.label,title:e.label,textAlign:"left"},lgap:10,rgap:5},{el:{type:"bi.label",text:e.text,textAlign:"right"},width:32,rgap:10}]}},doClick:function(){BI.SingleSelectItem.superclass.doClick.apply(this,arguments),this.isValid()&&this.fireEvent("EVENT_CHANGE",this.isSelected(),this)},setSelected:function(e){BI.SingleSelectItem.superclass.setSelected.apply(this,arguments)},getValue:function(){return this.options.value}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Widget=t.className=void 0;var n=i(0);t.className="designer.user.account.setting.captcha",t.Widget=BI.inherit(BI.Widget,{props:{baseCls:"designer-login-login-body"},render:function(){var e=this;this.options;return{type:n.TextButton,text:BI.i18nText("Designer-Login_Code_Request"),cls:"designer-login-border-bottom designer-login-code-text",handler:function(){e.setButtonEnable(!1),e.fireEvent("EVENT_SEND")},ref:function(t){e.getButton=t}}},setButtonEnable:function(e){this.captchaTime&&(e=!1),this.getButton.setEnable(e)},regainCaptcha:function(){var e=this,t=0;window.clearInterval(e.captchaTime),this.captchaTime=window.setInterval((function(){if(60===t)return window.clearInterval(e.captchaTime),e.captchaTime=null,e.getButton.setText(BI.i18nText("Designer-Login_Code_Request")),void e.setButtonEnable(!0);e.getButton.setText(BI.i18nText("Designer-Login_Code_Request_Again")+"("+(60-t)+")"),t++}),1e3),this.setButtonEnable(!1)}}),BI.shortcut(t.className,t.Widget),t["default"]=t.className},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Model=t.className=void 0,t.className="designer.login.model.sms_method",t.Model=BI.inherit(Fix.Model,{context:[""],state:function(){return{errMessage:"",isRegister:!1,regToken:""}},actions:{setErrMessage:function(e){this.model.errMessage=e},setRegister:function(e){this.model.isRegister=e},setRegToken:function(e){this.model.regToken=e}}}),BI.store(t.className,t.Model),t["default"]=t.className},function(e,t,i){}]); \ No newline at end of file From a9e769c86332b36acf324d042239a580b27bd75f Mon Sep 17 00:00:00 2001 From: pengda Date: Tue, 15 Jun 2021 15:56:53 +0800 Subject: [PATCH 146/148] =?UTF-8?q?REPORT-51958=20=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=A3=80=E6=B5=8B=E5=8F=8A=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/env/RemoteWorkspace.java | 17 ++++++++++------- .../ui/NotificationCenterDialog.java | 2 +- .../ui/NotificationCenterPane.java | 2 +- .../com/fr/env/SyncFailedPluginsDialog.java | 6 +++++- .../mainframe/alphafine/images/smallsearch.png | Bin 299 -> 546 bytes .../mainframe/notificationCenter/normal.png | Bin 423 -> 0 bytes .../notificationCenterDot.png | Bin 0 -> 491 bytes 7 files changed, 17 insertions(+), 10 deletions(-) delete mode 100644 designer-realize/src/main/resources/com/fr/design/mainframe/notificationCenter/normal.png create mode 100644 designer-realize/src/main/resources/com/fr/design/mainframe/notificationCenter/notificationCenterDot.png diff --git a/designer-base/src/main/java/com/fr/design/env/RemoteWorkspace.java b/designer-base/src/main/java/com/fr/design/env/RemoteWorkspace.java index f319549640..24b79e418c 100644 --- a/designer-base/src/main/java/com/fr/design/env/RemoteWorkspace.java +++ b/designer-base/src/main/java/com/fr/design/env/RemoteWorkspace.java @@ -34,11 +34,20 @@ public class RemoteWorkspace implements Workspace { private volatile Boolean warDeploy; + private final SwingWorker swingWorker; + RemoteWorkspace(WorkspaceClient client, WorkspaceConnectionInfo connection) { this.client = client; this.address = connection.getUrl(); this.connection = connection; + this.swingWorker = new SwingWorker() { + @Override + protected Void doInBackground() throws Exception { + client.close(); + return null; + } + }; } @Override @@ -125,13 +134,7 @@ public class RemoteWorkspace implements Workspace { @Override public void close() { - new SwingWorker() { - @Override - protected Void doInBackground() throws Exception { - client.close(); - return null; - } - }.execute(); + swingWorker.execute(); } @Override diff --git a/designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterDialog.java b/designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterDialog.java index 789a02fa94..3048959c57 100644 --- a/designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterDialog.java +++ b/designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterDialog.java @@ -147,7 +147,7 @@ public class NotificationCenterDialog extends JDialog { deleteLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Clear_Notifications") + "(" + NotificationCenter.getInstance().getNotificationsCount() + ")"); pack(); if (notificationNeedShow.size() == 0) { - centerWindow(); + hideDialog(); } NotificationCenterPane.getNotificationCenterPane().refreshButton(); } diff --git a/designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterPane.java b/designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterPane.java index 6ed74782b1..d0f09df00f 100644 --- a/designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterPane.java +++ b/designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterPane.java @@ -41,7 +41,7 @@ public class NotificationCenterPane extends BasicPane { public void refreshButton() { if (NotificationCenter.getInstance().getNotificationsCount() > 0) { - notificationCenterButton.setIcon(IOUtils.readIcon("/com/fr/design/mainframe/notificationcenter/normal.png")); + notificationCenterButton.setIcon(IOUtils.readIcon("/com/fr/design/mainframe/notificationcenter/notificationCenterDot.png")); } else { notificationCenterButton.setIcon(IOUtils.readIcon("/com/fr/design/mainframe/notificationcenter/notificationCenter.png")); } diff --git a/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java b/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java index 7e053db424..a93ea0460d 100644 --- a/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java +++ b/designer-base/src/main/java/com/fr/env/SyncFailedPluginsDialog.java @@ -18,7 +18,6 @@ import com.fr.json.JSONObject; import com.fr.stable.StringUtils; import java.awt.BorderLayout; import java.awt.Dimension; -import java.awt.Frame; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; @@ -138,9 +137,14 @@ public class SyncFailedPluginsDialog extends JDialog { return !restartButton.isEnabled(); } + private void hideDialog(){ + this.dispose(); + } + private MouseListener restartButtonClickListener = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { + hideDialog(); restartButton.setEnabled(false); restartHelper.restartForUpdate(frame); } diff --git a/designer-realize/src/main/resources/com/fr/design/mainframe/alphafine/images/smallsearch.png b/designer-realize/src/main/resources/com/fr/design/mainframe/alphafine/images/smallsearch.png index 63012b2823fc4ab56fe25c23bea5c7da2238f497..3daece322668a362c0316b0add12db62f7ca2cdc 100644 GIT binary patch literal 546 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa#^NA%Cx&(BWL^R}E~ycoX}-P; zT0k}j17mw80}DtA5K93u0|WB{Mh0de%?J`(zyz1&TfmH9gB0%lVEGHEtjE*EF+@YO zHgLZ;v!RGz&;}2|Rn04W7v4C#_Sw3k@~a!YyEo5{j+Ob#Y_;R1o<%1I*LIC2i>b_- zO-p6xbTuWM=5>k{S-LIeQMc-(dF_(#_SV=>Dvvj~G%fMTb^#$)#g<0Hx`utS{m08+ zfBm&v?RRGKr)V89;ge6kFeIBOvy>T%{caJE|5YNu!an8FtoOh56OEJ3tT0S__g9f2 zK_{Lm?#4D->tm-s9w@P8YcpGx`L5wvP&;RijMIggd~Ma|gx!OdKX&2BbCTF@CGl>y z?|SwK{=B#lnTanQ1-!XBR!vLwbvm@tNA2^P3W?AymhRJ-7QHIa2opHeZ`Ce)eCDg~ z`|oiaeBJAotizyr=4lak%aI3}C!$uDmM=cDF>kxI$MTn!&mVPNy5ep&yY^Ly)%>D8 zJ1wIcw(n&(Y-do{ntH1Bd8N~=jaH2tuU5AFYFF6O>ahOPe7DCFb9GM#)Y#J-86fmF7aHJIUI62@X!7mFERywu@%I$?4R&| R8Yd`zJYD@<);T3K0RT*h)Or8_ literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GGLLkg|>2BR0px|9k z7sn8b(`zSh&6gE1RVU0>6SpekywRA%AhO*-vz|TRP_JmZfO+JW*;>SOCzY44$rjF6*2UngAQzZx;Xn diff --git a/designer-realize/src/main/resources/com/fr/design/mainframe/notificationCenter/normal.png b/designer-realize/src/main/resources/com/fr/design/mainframe/notificationCenter/normal.png deleted file mode 100644 index 5ee1816682bcf905486879dfbd13663e692391da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 423 zcmV;Y0a*TtP)*v|#Day&iS-|+8(U*aNK@}>0`#(r@P9rd z0|Os6hy7<@_{7M-nE1+m%{rJo+yJm<#{a7s|1&V*^VNSwhJTFz8AD-)fDHgUo15zn zE}PK}{LjGf@%z_rsvz%x4G=vP)XMmuu?obFm2hFGRg7Wy@aHQ--pwgsy_3{)7z9|j z8Jg}dVOa8F4_NF!k@Z**JT22%LKpIk{yck-P6B!s8 zQDgZ3|Njg%cjq(AdA1E^E{XwQFTi9nq1Jd{A-sSbi0FoZ z_*gWf1|qI#1i1tR&}?P^C8+OTzp22Z5fT#=BqW%#DN4#PLnz8j`0@ZQIRI9{wh`a7 R`QiWo002ovPDHLkV1n=4#R32T diff --git a/designer-realize/src/main/resources/com/fr/design/mainframe/notificationCenter/notificationCenterDot.png b/designer-realize/src/main/resources/com/fr/design/mainframe/notificationCenter/notificationCenterDot.png new file mode 100644 index 0000000000000000000000000000000000000000..599a9ba64a964afce0945f8bae181361032856e6 GIT binary patch literal 491 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uuz(rC1}QWNE&K#j7V7EZ7-Auq zoT4D~=lZp@>fb-JFW0yIFI3R&;pypasoeQm;^RwmGqbtpPn@V3Xk?oR>JPsvzaj~>a`057jB#sDAj$Upz<*$$tc z^F}i7e*GUtsg*oO;v4?WZxig`wli{$i6&GF^;4J@uSY z4eQvBG9)A%Ri529_bi8Br-9{`k`MpI4X&*_sIu|mffs)}edpvD&Z#_jmdWwX@&X04r>mdK II;Vst0MRVIG5`Po literal 0 HcmV?d00001 From 38a1d8229a8e8ca70fbcdfe73cc44289d3870d91 Mon Sep 17 00:00:00 2001 From: kerry Date: Tue, 15 Jun 2021 16:09:16 +0800 Subject: [PATCH 147/148] =?UTF-8?q?REPORT-53787=20&&=20REPORT-53786?= =?UTF-8?q?=E3=80=90=E7=AC=AC=E4=BA=8C=E6=89=B9=E9=97=AE=E9=A2=98=E3=80=91?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=A4=8D=E7=94=A8-=E5=90=88=E5=85=A5?= =?UTF-8?q?=E4=B8=BB=E7=89=88=E6=9C=AC-=E6=96=B0=E6=89=8B=E5=BC=95?= =?UTF-8?q?=E5=AF=BC=E5=9B=BE=EF=BC=8C=E5=92=8C=E8=A7=86=E8=A7=89=E5=9B=BE?= =?UTF-8?q?=E6=9C=89=E4=B8=80=E4=BA=9B=E4=B8=8D=E7=AC=A6=E5=90=88=E7=9A=84?= =?UTF-8?q?=E5=9C=B0=E6=96=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controlpane/UIListGroupControlPane.java | 51 ++++++++++++++++-- .../com/fr/design/images/dashboard/guide.png | Bin 314951 -> 315121 bytes 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListGroupControlPane.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListGroupControlPane.java index 384d2bb524..82bf99bf33 100644 --- a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListGroupControlPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListGroupControlPane.java @@ -7,12 +7,12 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilist.JNameEdList; import com.fr.design.gui.ilist.ListModelElement; import com.fr.design.gui.ilist.ModNameActionListener; +import com.fr.design.gui.ilist.UIList; import com.fr.design.gui.ilist.UINameEdList; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.widget.EventCreator; import com.fr.form.event.Listener; import com.fr.form.ui.Widget; -import com.fr.general.FRFont; import com.fr.general.NameObject; import com.fr.report.web.util.ReportEngineEventMapping; import com.fr.stable.ArrayUtils; @@ -22,6 +22,7 @@ import com.fr.stable.StringUtils; import javax.swing.BorderFactory; import javax.swing.DefaultListModel; import javax.swing.JPanel; +import javax.swing.ListModel; import javax.swing.ListSelectionModel; import javax.swing.event.ListDataEvent; import javax.swing.event.ListDataListener; @@ -32,6 +33,7 @@ import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; +import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.MouseAdapter; @@ -47,7 +49,7 @@ import java.util.Map; /** * Created by kerry on 5/31/21 */ -public abstract class UIListGroupControlPane extends UIControlPane implements ListControlPaneProvider { +public abstract class UIListGroupControlPane extends UIControlPane implements ListControlPaneProvider { private boolean isPopulating = false; private UINameEdList selectNameEdList; @@ -142,6 +144,7 @@ public abstract class UIListGroupControlPane extends UIControlPane implements L } this.checkButtonEnabled(); refreshEventListWrapperPane(); + this.checkGroupPaneSize(); isPopulating = false; } @@ -209,6 +212,7 @@ public abstract class UIListGroupControlPane extends UIControlPane implements L nameEdList.addModNameActionListener(new ModNameActionListener() { @Override public void nameModed(int index, String oldName, String newName) { + checkGroupPaneSize(); saveSettings(); } }); @@ -262,7 +266,6 @@ public abstract class UIListGroupControlPane extends UIControlPane implements L } - private String switchLang(String eventName) { // 在 properties 文件中找到相应的 key 值 String localeKey = ReportEngineEventMapping.getLocaleName(eventName); @@ -270,7 +273,6 @@ public abstract class UIListGroupControlPane extends UIControlPane implements L } - /** * 生成不重复的名字 * @@ -300,19 +302,60 @@ public abstract class UIListGroupControlPane extends UIControlPane implements L public void onAddItem(NameableCreator creator) { updateSelectedNameList(creator); getCommonHandlers().onAddItem(creator); + checkGroupPaneSize(); } @Override public void onRemoveItem() { getCommonHandlers().onRemoveItem(); refreshEventListWrapperPane(); + checkGroupPaneSize(); } @Override public void onCopyItem() { getCommonHandlers().onCopyItem(); + checkGroupPaneSize(); + } + + + private void checkGroupPaneSize() { + int width = 180; + Iterator> iterator = nameEdListMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + ListWrapperPane wrapperPane = entry.getValue(); + UIList uiList = wrapperPane.getNameEdList(); + width = Math.max(width, calculateUIListMaxCellWidth(uiList.getModel(), uiList.getFontMetrics(uiList.getFont()))); + } + iterator = nameEdListMap.entrySet().iterator(); + width += 40; + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + ListWrapperPane wrapperPane = entry.getValue(); + UIList uiList = wrapperPane.getNameEdList(); + uiList.setFixedCellWidth(width); + } } + private int calculateUIListMaxCellWidth(ListModel model, FontMetrics fontMetrics) { + int width = 0; + for (int i = 0; i < model.getSize(); i++) { + Object element = model.getElementAt(i); + if (element != null) { + String text; + if (element instanceof ListModelElement) { + text = ((ListModelElement) element).wrapper.getName(); + } else { + text = element.toString(); + } + width = Math.max(width, fontMetrics.stringWidth(text)); + } + } + return width; + } + + @Override public void onMoveUpItem() { getCommonHandlers().onMoveUpItem(); diff --git a/designer-base/src/main/resources/com/fr/design/images/dashboard/guide.png b/designer-base/src/main/resources/com/fr/design/images/dashboard/guide.png index 411a9a29629e8ddb001e476b6491f83a1c233e61..c45c9262c51549bcf32b819ed90919c7f129b0e8 100644 GIT binary patch delta 280313 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

      f$Hymp!f{T_Ytsp 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%0DBO9Y$GCgtDqWPjD1BuB9$xc4gG7h#$Kf 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 z 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 m(n0zhI`MP(LQjcxEleqpSeMCsQ3iRm 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�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

      @ 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 DBwA-H From 733b388cfc2c520f24437f564d794c55ff78e8d0 Mon Sep 17 00:00:00 2001 From: Lanlan Date: Tue, 15 Jun 2021 16:32:43 +0800 Subject: [PATCH 148/148] =?UTF-8?q?REPORT-53711=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E7=94=A8=E6=88=B7=E7=99=BB=E5=BD=95=E7=AD=96=E7=95=A5?= =?UTF-8?q?=E8=B0=83=E6=95=B4-=E6=8F=92=E4=BB=B6=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E5=AE=89=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/extra/PluginFromStorePane.java | 3 ++- .../main/java/com/fr/design/extra/PluginOperateUtils.java | 5 +++-- .../src/main/java/com/fr/design/extra/PluginUpdatePane.java | 3 ++- .../java/com/fr/design/versioncheck/VersionCheckUtils.java | 3 ++- .../java/com/fr/design/mainframe/app/DesignerAppUtils.java | 4 +++- 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/extra/PluginFromStorePane.java b/designer-base/src/main/java/com/fr/design/extra/PluginFromStorePane.java index dbb6e3edb6..4a6d5e0dcc 100644 --- a/designer-base/src/main/java/com/fr/design/extra/PluginFromStorePane.java +++ b/designer-base/src/main/java/com/fr/design/extra/PluginFromStorePane.java @@ -9,6 +9,7 @@ import com.fr.json.JSONObject; import com.fr.log.FineLoggerFactory; import com.fr.plugin.context.PluginMarker; import com.fr.plugin.manage.PluginManager; +import com.fr.plugin.manage.control.PluginExtraInfo; import com.fr.plugin.manage.control.PluginTaskResult; import com.fr.plugin.manage.control.ProgressCallback; import com.fr.plugin.view.PluginView; @@ -206,7 +207,7 @@ public class PluginFromStorePane extends PluginAbstractLoadingViewPane uninstallPlugins = stringPluginMarkerAdapterMultimap.get(TemplateIOErrorContextHolder.NOT_INSTALLED_PLUGIN); for (PluginMarker uninstallPlugin : uninstallPlugins) { PluginTask pluginTask = PluginTask.installTask(uninstallPlugin); - PluginControllerHelper.installOnline(uninstallPlugin, new InstallOnlineCallback(pluginTask)); + PluginControllerHelper.installOnline(uninstallPlugin, new InstallOnlineCallback(pluginTask), PluginExtraInfo.newBuilder().username(DesignerEnvManager.getEnvManager().getDesignerLoginUsername()).build()); } } }

      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