Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 426 public void exit(Node n) { | 428 public void exit(Node n) { |
| 427 } | 429 } |
| 428 | 430 |
| 429 @Override | 431 @Override |
| 430 public void skip(Element e) { | 432 public void skip(Element e) { |
| 431 } | 433 } |
| 432 }).walk(root); | 434 }).walk(root); |
| 433 return nodes; | 435 return nodes; |
| 434 } | 436 } |
| 435 | 437 |
| 438 public static String formatDuration(String duration) { | |
|
wychen
2016/03/14 22:58:42
I18n and l10n might be difficult. Singular/plural
| |
| 439 RegExp pattern = RegExp.compile("^P(?:([0-9]+)Y)?" + | |
| 440 "(?:([0-9]+)M)?(?:([0-9]+)W)?(?:([0-9]+)D)?" + | |
| 441 "(T(?:([0-9]+)H)?(?:([0-9]+)M)?(?:([0-9]+)S)?)?$", "i"); | |
| 442 MatchResult matchResult = pattern.exec(duration); | |
| 443 List<String> result = new ArrayList<>(); | |
| 444 if (matchResult != null) { | |
| 445 if (matchResult.getGroup(1) != null) { | |
| 446 result.add(matchResult.getGroup(1) + " year(s)"); | |
| 447 } | |
| 448 if (matchResult.getGroup(2) != null) { | |
| 449 result.add(matchResult.getGroup(2) + " month(s)"); | |
| 450 } | |
| 451 if (matchResult.getGroup(3) != null) { | |
| 452 result.add(matchResult.getGroup(3) + " week(s)"); | |
| 453 } | |
| 454 if (matchResult.getGroup(4) != null) { | |
| 455 result.add(matchResult.getGroup(4) + " day(s)"); | |
| 456 } | |
| 457 if (matchResult.getGroup(6) != null) { | |
| 458 result.add(matchResult.getGroup(6) + " hour(s)"); | |
| 459 } | |
| 460 if (matchResult.getGroup(7) != null) { | |
| 461 result.add(matchResult.getGroup(7) + " minute(s)"); | |
| 462 } | |
| 463 if (matchResult.getGroup(8) != null) { | |
| 464 result.add(matchResult.getGroup(8) + " second(s)"); | |
| 465 } | |
| 466 } | |
| 467 return join(result.toArray(), " "); | |
| 468 } | |
| 469 | |
| 436 /** | 470 /** |
| 437 * Generate HTML/text output for a given node tree/subree. This will ignore hidden | 471 * Generate HTML/text output for a given node tree/subree. This will ignore hidden |
| 438 * elements. | 472 * elements. |
| 439 * @param subtree The root of the subtree. | 473 * @param subtree The root of the subtree. |
| 440 * @param textOnly If this function should return text only and not HTML. | 474 * @param textOnly If this function should return text only and not HTML. |
| 441 * @return The output for the provided subtree. | 475 * @return The output for the provided subtree. |
| 442 */ | 476 */ |
| 443 public static String generateOutputFromTree(Node subtree, boolean textOnly) { | 477 public static String generateOutputFromTree(Node subtree, boolean textOnly) { |
| 444 return generateOutputFromList(getOutputNodes(subtree), textOnly); | 478 return generateOutputFromList(getOutputNodes(subtree), textOnly); |
| 445 } | 479 } |
| 446 | 480 |
| 447 // Returns whether querySelectorAll is available | 481 // Returns whether querySelectorAll is available |
| 448 public static native boolean supportQuerySelectorAll(Element root) /*-{ | 482 public static native boolean supportQuerySelectorAll(Element root) /*-{ |
| 449 return (typeof(root.querySelectorAll) == 'function'); | 483 return (typeof(root.querySelectorAll) == 'function'); |
| 450 }-*/; | 484 }-*/; |
| 451 | 485 |
| 452 // GWT doesn't support querySelectorAll, so testing the caller could be hard er. | 486 // GWT doesn't support querySelectorAll, so testing the caller could be hard er. |
| 453 public static native NodeList<Element> querySelectorAll(Node l, String selec tors) /*-{ | 487 public static native NodeList<Element> querySelectorAll(Node l, String selec tors) /*-{ |
| 454 return l.querySelectorAll(selectors); | 488 return l.querySelectorAll(selectors); |
| 455 }-*/; | 489 }-*/; |
| 456 | 490 |
| 457 public static native Document createHTMLDocument(Document doc) /*-{ | 491 public static native Document createHTMLDocument(Document doc) /*-{ |
| 458 return doc.implementation.createHTMLDocument(); | 492 return doc.implementation.createHTMLDocument(); |
| 459 }-*/; | 493 }-*/; |
| 460 | 494 |
| 461 public static native Element getFirstElementChild(Document document) /*-{ | 495 public static native Element getFirstElementChild(Document document) /*-{ |
| 462 return document.firstElementChild; | 496 return document.firstElementChild; |
| 463 }-*/; | 497 }-*/; |
| 498 | |
| 499 public static native String join(Object[] list, String conjunction) /*-{ | |
| 500 return list.join(conjunction); | |
| 501 }-*/; | |
| 464 } | 502 } |
| OLD | NEW |