📄 parsedhtml.java
字号:
{ 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) { getParsedHTML(pot).addToList(htmlElement); } } 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((WebTable.TableRow)htmlElement); } } static class TableCellFactory extends HTMLElementFactory { HTMLElement toHTMLElement(NodeUtils.PreOrderTraversal pot, ParsedHTML parsedHTML, Element element) { WebTable.TableRow tr = getTableRow(pot); if (tr == null) { return null; } return tr.newTableCell(element); } private WebTable.TableRow getTableRow(NodeUtils.PreOrderTraversal pot) { return (WebTable.TableRow)getClosestContext(pot, WebTable.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") && 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(); } private Button toButtonWithoutForm(Element element) { return new Button(_response, element); } private WebForm toWebForm(Element element) { return new WebForm(_response, _baseURL, element, _frame, _baseTarget, _characterSet); } private WebFrame toWebFrame(Element element) { return new WebFrame(_response, _baseURL, element, _frame); } private WebFrame toWebIFrame(Element element) { return new WebIFrame(_baseURL, element, _frame); } private WebLink toLinkAnchor(Element child) { return (!isWebLink(child)) ? null : new WebLink(_response, _baseURL, child, _frame, _baseTarget, _characterSet); } private boolean isWebLink(Node node) { return (node.getAttributes().getNamedItem("href") != null); } private WebImage toWebImage(Element child) { return new WebImage(_response, this, _baseURL, child, _frame, _baseTarget, _characterSet); } private WebApplet toWebApplet(Element element) { return new WebApplet(_response, element, _baseTarget); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -