Changeset 886
- Timestamp:
- 02/13/14 17:39:22 (10 years ago)
- Location:
- trunk/src/org/expeditee
- Files:
-
- 6 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/expeditee/io/WebParser.java
r884 r886 365 365 webEngine.executeScript("" 366 366 // Setting all text to be hidden before taking the screenshot 367 + "var style = 'WordSpan { visibility: hidden !important;}';" 368 + "cssHide.appendChild(document.createTextNode(style));"); 367 + "cssHide.appendChild(document.createTextNode(wordSpanHiddenStyle));"); 369 368 370 369 WritableImage img = new WritableImage((int)webView.getWidth(), (int)webView.getHeight()); … … 434 433 + "var scrollCounterHorizontal = 0;"); 435 434 436 // Setting up the element that contains the CSS to hide all text. 435 // Setting up the element that contains the CSS to hide all text. Also hiding readability mode buttons. 437 436 // This is wiped before the text is converted, then re-added before taking the screenshot 438 437 webEngine.executeScript("" 439 438 + "var cssHide = document.createElement('style');" 440 439 + "cssHide.type = 'text/css';" 441 + "var style = 'WordSpan { visibility: hidden !important;}';" 442 + "cssHide.appendChild(document.createTextNode(style));" 443 + "document.getElementsByTagName('head')[0].appendChild(cssHide);"); 440 + "var wordSpanHiddenStyle = 'WordSpan, #readOverlay #readTools { visibility: hidden !important;}';" 441 + "cssHide.appendChild(document.createTextNode(wordSpanHiddenStyle));" 442 + "document.getElementsByTagName('head')[0].appendChild(cssHide);" 443 ); 444 445 // Replacing line breaks in all <pre> tags with <br> tags, otherwise they are lost during the conversion 446 webEngine.executeScript("" 447 + "var pres = document.getElementsByTagName ('pre');" 448 + "for(var i = 0; i < pres.length; i++){" 449 + " pres[i].innerHTML = pres[i].innerHTML.replace(/\\n|\\r/g, '<br />');" 450 + "}"); 444 451 445 452 // Functions to be used later in JavaScript -
trunk/src/org/expeditee/items/widgets/JfxBrowser.java
r883 r886 10 10 */ 11 11 import java.awt.Point; 12 import java.io.BufferedReader; 13 import java.io.IOException; 14 import java.io.InputStreamReader; 12 15 import java.lang.reflect.Field; 13 16 … … 33 36 import javafx.scene.control.ProgressIndicator; 34 37 import javafx.scene.control.TextField; 38 import javafx.scene.control.ToggleButton; 39 import javafx.scene.control.Tooltip; 40 import javafx.scene.image.Image; 41 import javafx.scene.image.ImageView; 35 42 import javafx.scene.input.KeyEvent; 36 43 import javafx.scene.input.MouseButton; … … 83 90 private Button _backButton; 84 91 private Button _convertButton; 92 private ToggleButton _readableModeButton; 85 93 86 94 private TextField _urlField; … … 192 200 goButton.setMinWidth(Button.USE_PREF_SIZE); 193 201 goButton.setFocusTraversable(false); 194 202 203 this._readableModeButton = new ToggleButton(); 204 this._readableModeButton.setMinWidth(Button.USE_PREF_SIZE); 205 this._readableModeButton.setFocusTraversable(false); 206 this._readableModeButton.setTooltip(new Tooltip("Switch to an easy-to-read view of the page")); 207 208 Image readableModeIcon = new Image(ClassLoader.getSystemResourceAsStream("org/expeditee/assets/images/readableModeIcon.png")); 209 this._readableModeButton.setGraphic(new ImageView(readableModeIcon)); 210 195 211 this._convertButton = new Button("Convert"); 196 212 this._convertButton.setMinWidth(Button.USE_PREF_SIZE); … … 204 220 urlbar.getChildren().addAll(_urlProgressBar, this._urlField); 205 221 206 horizontal.getChildren().addAll(this._backButton, this._forwardButton, urlbar, goButton, this._ convertButton);222 horizontal.getChildren().addAll(this._backButton, this._forwardButton, urlbar, goButton, this._readableModeButton, this._convertButton); 207 223 208 224 HBox.setHgrow(this._backButton, Priority.NEVER); … … 210 226 HBox.setHgrow(this._convertButton, Priority.NEVER); 211 227 HBox.setHgrow(goButton, Priority.NEVER); 228 HBox.setHgrow(this._readableModeButton, Priority.NEVER); 212 229 HBox.setHgrow(urlbar, Priority.ALWAYS); 213 230 214 231 HBox.setMargin(goButton, new Insets(0, 5, 0, 0)); 232 HBox.setMargin(this._readableModeButton, new Insets(0, 5, 0, 0)); 215 233 HBox.setMargin(this._forwardButton, new Insets(0, 5, 0, 0)); 216 234 … … 274 292 275 293 final String cssPath = ClassLoader.getSystemResource("org/expeditee/assets/style/jfx.css").toString(); 294 276 295 scene.getStylesheets().add(cssPath); 277 296 … … 314 333 public void handle(ActionEvent arg0) { 315 334 navigate(JfxBrowser.this._urlField.getText()); 335 } 336 }); 337 338 this._readableModeButton.setOnAction(new EventHandler<ActionEvent>() { 339 340 @Override 341 public void handle(ActionEvent arg0) { 342 if (arg0.getSource() instanceof ToggleButton) { 343 ToggleButton source = (ToggleButton) arg0.getSource(); 344 345 // This seems backwards, but because the button's just been clicked, its state has already changed 346 if(!source.isSelected()) { 347 // Disable readable mode by refreshing the page 348 JfxBrowser.this._webEngine.reload(); 349 } else { 350 JfxBrowser.this.enableReadableMode(); 351 } 352 } 316 353 } 317 354 }); … … 472 509 473 510 JfxBrowser.this._convertButton.setDisable(true); 511 JfxBrowser.this._readableModeButton.setDisable(true); 474 512 475 513 break; … … 477 515 MessageBay.displayMessage("Finished loading page"); 478 516 JfxBrowser.this._urlProgressBar.getStyleClass().add("completed"); 517 518 if(JfxBrowser.this._readableModeButton.isSelected()) { 519 JfxBrowser.this.enableReadableMode(); 520 } 479 521 480 522 case CANCELLED: // CANCELLED 481 523 JfxBrowser.this._convertButton.setDisable(false); 524 JfxBrowser.this._readableModeButton.setDisable(false); 482 525 break; 483 526 case FAILED: // FAILED … … 858 901 return r; 859 902 } 903 904 private void enableReadableMode() { 905 String readabilityJs; 906 String readabilityCss; 907 908 readabilityJs = readResourceFile("org/expeditee/assets/scripts/browserreadablemode/readability.min.js"); 909 readabilityCss = readResourceFile("org/expeditee/assets/scripts/browserreadablemode/readability.css"); 910 911 JSObject window = (JSObject)JfxBrowser.this._webEngine.executeScript("window"); 912 window.setMember("readabilityJs", readabilityJs); 913 window.setMember("readabilityCss", readabilityCss); 914 915 JfxBrowser.this._webEngine.executeScript("" 916 + "javascript:(" 917 + "function(){ " 918 + "readStyle = '';" 919 + "readSize = 'size-medium';" 920 + "readMargin = 'margin-medium';" 921 + "_readability_script = document.createElement('SCRIPT');" 922 + "_readability_script.type = 'text/javascript';" 923 + "_readability_script.appendChild(document.createTextNode(readabilityJs));" 924 + "document.head.appendChild(_readability_script);" 925 + "readability.init();" 926 927 // readability.init() removes all css, so have to add the stylesheet after init 928 + "_readability_css = document.createElement('STYLE');" 929 + "_readability_css.type='text/css';" 930 + "_readability_css.appendChild(document.createTextNode(readabilityCss));" 931 + "document.head.appendChild(_readability_css);" 932 933 // Font Awesome CSS from the Bootstrap CDN 934 + "_fontawesome_css = document.createElement('LINK');" 935 + "_fontawesome_css.rel = 'stylesheet'; " 936 + "_fontawesome_css.href = '//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css';" 937 + "_fontawesome_css.type = 'text/css';" 938 + "document.head.appendChild(_fontawesome_css);" 939 + "}" 940 + ")();" 941 ); 942 } 943 944 /** 945 * Reads a resource file into a string 946 * @return The contents of the specified file as a string 947 */ 948 private static String readResourceFile(String path) { 949 BufferedReader bufferedReader = null; 950 StringBuilder stringBuilder = new StringBuilder(); 951 952 String line; 953 954 try { 955 bufferedReader = new BufferedReader(new InputStreamReader(ClassLoader.getSystemResourceAsStream(path))); 956 957 while ((line = bufferedReader.readLine()) != null) { 958 stringBuilder.append(line + "\n"); 959 } 960 961 } catch (IOException e) { 962 e.printStackTrace(); 963 } finally { 964 if (bufferedReader != null) { 965 try { 966 bufferedReader.close(); 967 } catch (IOException e) { 968 e.printStackTrace(); 969 } 970 } 971 } 972 973 return stringBuilder.toString(); 974 } 860 975 }
Note:
See TracChangeset
for help on using the changeset viewer.