⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parsedhtml.java

📁 一个比较不错的java分页标签,有源代码,开发者 可以学习学习
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
        protected boolean isRecognized(ClientProperties properties)
        {
            return true;
        }

        protected boolean addToContext()
        {
            return false;
        }

        final protected ParsedHTML getParsedHTML(NodeUtils.PreOrderTraversal pot)
        {
            return (ParsedHTML) getClosestContext(pot, ParsedHTML.class);
        }

        final protected Object getClosestContext(NodeUtils.PreOrderTraversal pot, Class aClass)
        {
            return pot.getClosestContext(aClass);
        }

        protected ParsedHTML getRootContext(NodeUtils.PreOrderTraversal pot)
        {
            return (ParsedHTML) pot.getRootContext();
        }
    }

    static class DefaultElementFactory extends HTMLElementFactory
    {

        HTMLElement toHTMLElement(NodeUtils.PreOrderTraversal pot, ParsedHTML parsedHTML, Element element)
        {
            if (element.getAttribute("id").equals(""))
                return null;
            return parsedHTML.toDefaultElement(element);
        }

        protected void addToLists(NodeUtils.PreOrderTraversal pot, HTMLElement htmlElement)
        {
        }
    }

    private HTMLElement toDefaultElement(Element element)
    {
        return new HTMLElementBase(element)
        {

            protected ScriptableDelegate newScriptable()
            {
                return new HTMLElementScriptable(this);
            }

            protected ScriptableDelegate getParentDelegate()
            {
                return getResponse().getScriptableObject().getDocument();
            }
        };
    }

    static class WebFormFactory extends HTMLElementFactory
    {

        HTMLElement toHTMLElement(NodeUtils.PreOrderTraversal pot, ParsedHTML parsedHTML, Element element)
        {
            return parsedHTML.toWebForm(element);
        }

        protected void addToLists(NodeUtils.PreOrderTraversal pot, HTMLElement htmlElement)
        {
            super.addToLists(pot, htmlElement);
            getRootContext(pot)._activeForm = (WebForm) htmlElement;
        }
    }

    static class WebLinkFactory extends HTMLElementFactory
    {

        HTMLElement toHTMLElement(NodeUtils.PreOrderTraversal pot, ParsedHTML parsedHTML, Element element)
        {
            return parsedHTML.toLinkAnchor(element);
        }
    }

    static class TextBlockFactory extends HTMLElementFactory
    {

        HTMLElement toHTMLElement(NodeUtils.PreOrderTraversal pot, ParsedHTML parsedHTML, Element element)
        {
            return parsedHTML.toTextBlock(element);
        }

        protected boolean addToContext()
        {
            return true;
        }

        protected void addToLists(NodeUtils.PreOrderTraversal pot, HTMLElement htmlElement)
        {
            for (Iterator i = pot.getContexts(); i.hasNext();)
            {
                Object o = i.next();
                if (!(o instanceof ParsedHTML))
                    continue;
                ((ParsedHTML) o).addToList(htmlElement);
                break;
            }
        }

    }

    static class ScriptFactory extends HTMLElementFactory
    {

        HTMLElement toHTMLElement(NodeUtils.PreOrderTraversal pot, ParsedHTML parsedHTML, Element element)
        {
            return null;
        }

        void recordElement(NodeUtils.PreOrderTraversal pot, Element element, ParsedHTML parsedHTML)
        {
            parsedHTML.interpretScriptElement(element);
        }
    }

    static class NoScriptFactory extends HTMLElementFactory
    {

        HTMLElement toHTMLElement(NodeUtils.PreOrderTraversal pot, ParsedHTML parsedHTML, Element element)
        {
            return parsedHTML.toNoscriptElement(element);
        }

        protected boolean addToContext()
        {
            return true;
        }
    }

    static class WebFrameFactory extends HTMLElementFactory
    {

        HTMLElement toHTMLElement(NodeUtils.PreOrderTraversal pot, ParsedHTML parsedHTML, Element element)
        {
            return parsedHTML.toWebFrame(element);
        }
    }

    static class WebIFrameFactory extends HTMLElementFactory
    {

        HTMLElement toHTMLElement(NodeUtils.PreOrderTraversal pot, ParsedHTML parsedHTML, Element element)
        {
            return parsedHTML.toWebIFrame(element);
        }

        protected boolean isRecognized(ClientProperties properties)
        {
            return properties.isIframeSupported();
        }

        protected boolean addToContext()
        {
            return true;
        }
    }

    static class WebImageFactory extends HTMLElementFactory
    {

        HTMLElement toHTMLElement(NodeUtils.PreOrderTraversal pot, ParsedHTML parsedHTML, Element element)
        {
            return parsedHTML.toWebImage(element);
        }
    }

    static class WebAppletFactory extends HTMLElementFactory
    {

        HTMLElement toHTMLElement(NodeUtils.PreOrderTraversal pot, ParsedHTML parsedHTML, Element element)
        {
            return parsedHTML.toWebApplet(element);
        }

        protected boolean addToContext()
        {
            return true;
        }
    }

    static class WebTableFactory extends HTMLElementFactory
    {

        HTMLElement toHTMLElement(NodeUtils.PreOrderTraversal pot, ParsedHTML parsedHTML, Element element)
        {
            return parsedHTML.toWebTable(element);
        }

        protected boolean addToContext()
        {
            return true;
        }

        protected void addToLists(NodeUtils.PreOrderTraversal pot, HTMLElement htmlElement)
        {
            for (Iterator i = pot.getContexts(); i.hasNext();)
            {
                Object o = i.next();
                if (o instanceof ParsedHTML)
                    ((ParsedHTML) o).addToList(htmlElement);
                if (o instanceof TableCell)
                    break;
            }
        }
    }

    static class TableRowFactory extends HTMLElementFactory
    {

        HTMLElement toHTMLElement(NodeUtils.PreOrderTraversal pot, ParsedHTML parsedHTML, Element element)
        {
            WebTable wt = getWebTable(pot);
            if (wt == null)
                return null;
            return wt.newTableRow(element);
        }

        private WebTable getWebTable(NodeUtils.PreOrderTraversal pot)
        {
            return (WebTable) getClosestContext(pot, WebTable.class);
        }

        protected boolean addToContext()
        {
            return true;
        }

        protected void addToLists(NodeUtils.PreOrderTraversal pot, HTMLElement htmlElement)
        {
            getWebTable(pot).addRow((TableRow) htmlElement);
        }
    }

    static class TableCellFactory extends HTMLElementFactory
    {

        HTMLElement toHTMLElement(NodeUtils.PreOrderTraversal pot, ParsedHTML parsedHTML, Element element)
        {
            TableRow tr = getTableRow(pot);
            if (tr == null)
                return null;
            return tr.newTableCell(element);
        }

        private TableRow getTableRow(NodeUtils.PreOrderTraversal pot)
        {
            return (TableRow) getClosestContext(pot, TableRow.class);
        }

        protected boolean addToContext()
        {
            return true;
        }

        protected void addToLists(NodeUtils.PreOrderTraversal pot, HTMLElement htmlElement)
        {
            getTableRow(pot).addTableCell((TableCell) htmlElement);
        }
    }

    static class FormControlFactory extends HTMLElementFactory
    {

        HTMLElement toHTMLElement(NodeUtils.PreOrderTraversal pot, ParsedHTML parsedHTML, Element element)
        {
            final WebForm form = getForm(pot);
            return form == null ? newControlWithoutForm(parsedHTML, element) : form.newFormControl(element);
        }

        private HTMLElement newControlWithoutForm(ParsedHTML parsedHTML, Element element)
        {
            if ((element.getNodeName().equalsIgnoreCase("button") || element.getNodeName().equalsIgnoreCase("input"))
                && isValidNonFormButtonType(NodeUtils.getNodeAttribute(element, "type")))
            {
                return parsedHTML.toButtonWithoutForm(element);
            }
            else
            {
                return null;
            }
        }

        private boolean isValidNonFormButtonType(String buttonType)
        {
            return buttonType.equals("") || buttonType.equalsIgnoreCase("button");
        }

        private WebForm getForm(NodeUtils.PreOrderTraversal pot)
        {
            return getRootContext(pot)._activeForm;
        }

        protected void addToLists(NodeUtils.PreOrderTraversal pot, HTMLElement htmlElement)
        {
            WebForm form = getForm(pot);
            if (form != null)
                form.addFormControl((FormControl) htmlElement);
        }
    }

    static class WebListFactory extends HTMLElementFactory
    {

        HTMLElement toHTMLElement(NodeUtils.PreOrderTraversal pot, ParsedHTML parsedHTML, Element element)
        {
            return parsedHTML.toOrderedList(element);
        }

        protected boolean addToContext()
        {
            return true;
        }

        protected void addToLists(NodeUtils.PreOrderTraversal pot, HTMLElement htmlElement)
        {
            TextBlock textBlock = getTextBlock(pot);
            if (textBlock != null)
                textBlock.addList((WebList) htmlElement);
        }

        private TextBlock getTextBlock(NodeUtils.PreOrderTraversal pot)
        {
            return (TextBlock) getClosestContext(pot, TextBlock.class);
        }
    }

    static class ListItemFactory extends HTMLElementFactory
    {

        HTMLElement toHTMLElement(NodeUtils.PreOrderTraversal pot, ParsedHTML parsedHTML, Element element)
        {
            WebList webList = getWebList(pot);
            if (webList == null)
                return null;
            return webList.addNewItem(element);
        }

        private WebList getWebList(NodeUtils.PreOrderTraversal pot)
        {
            return (WebList) getClosestContext(pot, WebList.class);
        }

        protected boolean addToContext()
        {
            return true;
        }

        protected void addToLists(NodeUtils.PreOrderTraversal pot, HTMLElement htmlElement)
        {
        }
    }

    private static HashMap _htmlFactoryClasses = new HashMap();

    private static HTMLElementFactory _defaultFactory = new DefaultElementFactory();

    static
    {
        _htmlFactoryClasses.put("a", new WebLinkFactory());
        _htmlFactoryClasses.put("area", new WebLinkFactory());
        _htmlFactoryClasses.put("form", new WebFormFactory());
        _htmlFactoryClasses.put("img", new WebImageFactory());
        _htmlFactoryClasses.put("applet", new WebAppletFactory());
        _htmlFactoryClasses.put("table", new WebTableFactory());
        _htmlFactoryClasses.put("tr", new TableRowFactory());
        _htmlFactoryClasses.put("td", new TableCellFactory());
        _htmlFactoryClasses.put("th", new TableCellFactory());
        _htmlFactoryClasses.put("frame", new WebFrameFactory());
        _htmlFactoryClasses.put("iframe", new WebIFrameFactory());
        _htmlFactoryClasses.put("script", new ScriptFactory());
        _htmlFactoryClasses.put("noscript", new NoScriptFactory());
        _htmlFactoryClasses.put("ol", new WebListFactory());
        _htmlFactoryClasses.put("ul", new WebListFactory());
        _htmlFactoryClasses.put("li", new ListItemFactory());

        for (int i = 0; i < TEXT_ELEMENTS.length; i++)
        {
            _htmlFactoryClasses.put(TEXT_ELEMENTS[i], new TextBlockFactory());
        }

        for (Iterator i = Arrays.asList(FormControl.getControlElementTags()).iterator(); i.hasNext();)
        {
            _htmlFactoryClasses.put(i.next(), new FormControlFactory());
        }
    }

    private static HTMLElementFactory getHTMLElementFactory(String tagName)
    {
        final HTMLElementFactory factory = (HTMLElementFactory) _htmlFactoryClasses.get(tagName);
        return factory != null ? factory : _defaultFactory;
    }

    private void loadElements()
    {
        if (!_updateElements)
            return;

        NodeUtils.NodeAction action = new NodeUtils.NodeAction()
        {

            public boolean processElement(NodeUtils.PreOrderTraversal pot, Element element)
            {
                HTMLElementFactory factory = getHTMLElementFactory(element.getNodeName().toLowerCase());
                if (factory == null || !factory.isRecognized(getClientProperties()))
                    return true;
                if (pot.getClosestContext(ContentConcealer.class) != null)
                    return true;

                if (!_elements.containsKey(element))
                    factory.recordElement(pot, element, ParsedHTML.this);
                if (factory.addToContext())
                    pot.pushContext(_elements.get(element));

                return true;
            }

            public void processTextNode(NodeUtils.PreOrderTraversal pot, Node textNode)
            {
                if (textNode.getNodeValue().trim().length() == 0)
                    return;

                Node parent = textNode.getParentNode();
                if (!parent.getNodeName().equalsIgnoreCase("body"))
                    return;
                if (pot.getClosestContext(ContentConcealer.class) != null)
                    return;
                new HtmlElementRecorder().recordHtmlElement(pot, textNode, newTextBlock(textNode));
            }
        };
        NodeUtils.PreOrderTraversal nt = new NodeUtils.PreOrderTraversal(getRootNode());
        nt.pushBaseContext(this);
        nt.perform(action);

        _updateElements = false;
    }

    private ClientProperties getClientProperties()
    {
        WebWindow window = _response.getWindow();
        return window == null ? ClientProperties.getDefaultProperties() : window.getClient().getClientProperties();
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -