Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(41)

Side by Side Diff: java/org/chromium/distiller/DomUtil.java

Issue 1705123002: Add support for Schema.org/Recipe Base URL: https://github.com/chromium/dom-distiller.git@master
Patch Set: wychen's comments addressed Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.distiller; 5 package org.chromium.distiller;
6 6
7 import com.google.gwt.core.client.JsArray; 7 import com.google.gwt.core.client.JsArray;
8 import com.google.gwt.core.client.JsArrayString; 8 import com.google.gwt.core.client.JsArrayString;
9 import com.google.gwt.dom.client.AnchorElement; 9 import com.google.gwt.dom.client.AnchorElement;
10 import com.google.gwt.dom.client.Document; 10 import com.google.gwt.dom.client.Document;
11 import com.google.gwt.dom.client.Element; 11 import com.google.gwt.dom.client.Element;
12 import com.google.gwt.dom.client.ImageElement; 12 import com.google.gwt.dom.client.ImageElement;
13 import com.google.gwt.dom.client.Node; 13 import com.google.gwt.dom.client.Node;
14 import com.google.gwt.dom.client.NodeList; 14 import com.google.gwt.dom.client.NodeList;
15 import com.google.gwt.dom.client.Style; 15 import com.google.gwt.dom.client.Style;
16 import com.google.gwt.dom.client.VideoElement; 16 import com.google.gwt.dom.client.VideoElement;
17 import com.google.gwt.http.client.URL; 17 import com.google.gwt.http.client.URL;
18 import com.google.gwt.regexp.shared.MatchResult;
19 import com.google.gwt.regexp.shared.RegExp;
18 20
19 import java.util.ArrayList; 21 import java.util.ArrayList;
20 import java.util.HashMap; 22 import java.util.HashMap;
21 import java.util.List; 23 import java.util.List;
22 import java.util.Map; 24 import java.util.Map;
23 25
24 public class DomUtil { 26 public class DomUtil {
25 /** 27 /**
26 * GWT does not provide a way to get a list of all attributes that have been explicitly set on a 28 * GWT does not provide a way to get a list of all attributes that have been explicitly set on a
27 * DOM element (only a way to query the value of a particular attribute). In javascript, this 29 * DOM element (only a way to query the value of a particular attribute). In javascript, this
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 public void exit(Node n) { 490 public void exit(Node n) {
489 } 491 }
490 492
491 @Override 493 @Override
492 public void skip(Element e) { 494 public void skip(Element e) {
493 } 495 }
494 }).walk(root); 496 }).walk(root);
495 return nodes; 497 return nodes;
496 } 498 }
497 499
500 public static String formatDuration(String duration) {
501 RegExp pattern = RegExp.compile("^P(?:([0-9]+)Y)?" +
502 "(?:([0-9]+)M)?(?:([0-9]+)W)?(?:([0-9]+)D)?" +
503 "(T(?:([0-9]+)H)?(?:([0-9]+)M)?(?:([0-9]+)S)?)?$", "i");
504 MatchResult matchResult = pattern.exec(duration);
505 List<String> result = new ArrayList<>();
506 if (matchResult != null) {
507 if (matchResult.getGroup(1) != null) {
508 result.add(matchResult.getGroup(1) + " year(s)");
wychen 2016/07/24 23:06:34 Can we handle plural forms?
509 }
510 if (matchResult.getGroup(2) != null) {
511 result.add(matchResult.getGroup(2) + " month(s)");
512 }
513 if (matchResult.getGroup(3) != null) {
514 result.add(matchResult.getGroup(3) + " week(s)");
515 }
516 if (matchResult.getGroup(4) != null) {
517 result.add(matchResult.getGroup(4) + " day(s)");
518 }
519 if (matchResult.getGroup(6) != null) {
520 result.add(matchResult.getGroup(6) + " hour(s)");
521 }
522 if (matchResult.getGroup(7) != null) {
523 result.add(matchResult.getGroup(7) + " minute(s)");
524 }
525 if (matchResult.getGroup(8) != null) {
526 result.add(matchResult.getGroup(8) + " second(s)");
527 }
528 }
529 return join(result.toArray(), " ");
530 }
531
532 /**
533 * Tries to get the language of the web page. It looks for
534 * the 'lang' attribute in the HTML tag, if it doesn't find it looks
535 * the meta tags for Content-Language or Language properties.
536 *
537 * @param root The root element.
538 * @return A string containing the language(s) or empty.
539 */
540 public static String getLanguage(Element root) {
541 String language = root.getLang();
542 if (language.isEmpty()) {
543 String query = "META[HTTP-EQUIV=\"content-language\" i][CONTENT]," +
544 "META[NAME=\"language\" i][CONTENT]";
545 NodeList<Element> languages = DomUtil.querySelectorAll(root, query);
wychen 2016/07/24 23:06:34 Would it be faster if we only handle <head> instea
546 if (languages.getLength() > 0) {
547 language = languages.getItem(0).getAttribute("CONTENT");
548 }
549 }
550 return language;
551 }
552
498 public static int getArea(Element e) { 553 public static int getArea(Element e) {
499 if (e != null) { 554 if (e != null) {
500 return e.getOffsetHeight() * e.getOffsetWidth(); 555 return e.getOffsetHeight() * e.getOffsetWidth();
501 } 556 }
502 return 0; 557 return 0;
503 } 558 }
504 559
505 /** 560 /**
506 * Generate HTML/text output for a given node tree/subtree. This will ignore hidden 561 * Generate HTML/text output for a given node tree/subtree. This will ignore hidden
507 * elements. 562 * elements.
(...skipping 15 matching lines...) Expand all
523 return l.querySelectorAll(selectors); 578 return l.querySelectorAll(selectors);
524 }-*/; 579 }-*/;
525 580
526 public static native Document createHTMLDocument(Document doc) /*-{ 581 public static native Document createHTMLDocument(Document doc) /*-{
527 return doc.implementation.createHTMLDocument(); 582 return doc.implementation.createHTMLDocument();
528 }-*/; 583 }-*/;
529 584
530 public static native Element getFirstElementChild(Document document) /*-{ 585 public static native Element getFirstElementChild(Document document) /*-{
531 return document.firstElementChild; 586 return document.firstElementChild;
532 }-*/; 587 }-*/;
588
589 public static native String join(Object[] list, String conjunction) /*-{
590 return list.join(conjunction);
591 }-*/;
533 } 592 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698