void applyDirectives() { findRemoveDirectives(true); StringBuffer buffer = new StringBuffer(); String head = "", toe = "; \n"; if (crispBox.isSelected()) buffer.append(head + "crisp=true" + toe); if (!fontField.getText().trim().equals("")) buffer.append(head + "font=\"" + fontField.getText().trim() + "\"" + toe); if (globalKeyEventsBox.isSelected()) buffer.append(head + "globalKeyEvents=true" + toe); if (pauseOnBlurBox.isSelected()) buffer.append(head + "pauseOnBlur=true" + toe); if (!preloadField.getText().trim().equals("")) buffer.append(head + "preload=\"" + preloadField.getText().trim() + "\"" + toe); /*if ( transparentBox.isSelected() ) buffer.append( head + "transparent=true" + toe );*/ Sketch sketch = editor.getSketch(); SketchCode code = sketch.getCode(0); // first tab if (buffer.length() > 0) { code.setProgram("/* @pjs " + buffer.toString() + " */\n\n" + code.getProgram()); if (sketch.getCurrentCode() == code) // update textarea if on first tab { editor.setText(sketch.getCurrentCode().getProgram()); editor.setSelection(0, 0); } sketch.setModified(false); sketch.setModified(true); } }
void findRemoveDirectives(boolean clean) { // if ( clean ) editor.startCompoundEdit(); Sketch sketch = editor.getSketch(); for (int i = 0; i < sketch.getCodeCount(); i++) { SketchCode code = sketch.getCode(i); String program = code.getProgram(); StringBuffer buffer = new StringBuffer(); Matcher m = pjsPattern.matcher(program); while (m.find()) { String mm = m.group(); // TODO this urgently needs tests .. /* remove framing */ mm = mm.replaceAll("^\\/\\*\\s*@pjs", "").replaceAll("\\s*\\*\\/\\s*$", ""); /* fix multiline nice formatting */ mm = mm.replaceAll("[\\s]*([^;\\s\\n\\r]+)[\\s]*,[\\s]*[\\n\\r]+", "$1,"); /* fix multiline version without semicolons */ mm = mm.replaceAll("[\\s]*([^;\\s\\n\\r]+)[\\s]*[\\n\\r]+", "$1;"); mm = mm.replaceAll("\n", " ").replaceAll("\r", " "); // System.out.println(mm); if (clean) { m.appendReplacement(buffer, ""); } else { String[] directives = mm.split(";"); for (String d : directives) { // System.out.println(d); parseDirective(d); } } } if (clean) { m.appendTail(buffer); // TODO: not working! code.setProgram(buffer.toString()); code.setModified(true); } } if (clean) { // editor.stopCompoundEdit(); editor.setText(sketch.getCurrentCode().getProgram()); sketch.setModified(false); sketch.setModified(true); } }
public void show() { if (editor.getSketch().isModified()) { Base.showWarning( "Directives Editor", "Please save your sketch before changing " + "the directives.", null); return; } resetInterface(); findRemoveDirectives(false); frame.setVisible(true); }
String[] scanDataFolderForFilesByType(String[] extensions) { ArrayList files = new ArrayList(); File dataFolder = editor.getSketch().getDataFolder(); if (!dataFolder.exists()) return null; // TODO no folder present .. warn? for (String ext : extensions) { String[] found = listFiles(dataFolder, true, ext); if (found == null || found.length == 0) continue; for (String f : found) { if (files.indexOf(f) == -1) files.add(f); } } return (String[]) files.toArray(new String[0]); }
private void createDetailPane() { detailPane = new TabPane(); javaScriptConsoleTab = new JavaScriptConsoleTab(webEngine); addErrorListener(javaScriptConsoleTab::handleError); addAlertListener(javaScriptConsoleTab::handleAlert); crossSiteScriptingTrackerTab = new CrossSiteScriptingTrackerTab(webEngine); addAlertListener(crossSiteScriptingTrackerTab::handleAlert); pageResourcesTab = new PageResourcesTab(webEngine); Tab javaScriptEditorTab = new Tab("BurpScript IDE"); javaScriptEditorTab .selectedProperty() .addListener( (observable, oldValue, newValue) -> { if (newValue) masterDetailPane.setDividerPositions(0.5); }); JavaScriptEditor javaScriptEditor = new JavaScriptEditor(webEngine, controller, false); javaScriptEditor.setJavaScriptConsoleTab(javaScriptConsoleTab); javaScriptEditorTab.setContent(javaScriptEditor); Tab trafficBrowserTab = new Tab("Network"); trafficBrowser = new TrafficBrowser(); trafficBrowserTab.setContent(trafficBrowser); Debugger debugger = webEngine.impl_getDebugger(); debugger.setEnabled(true); debugger.sendMessage("{\"id\": 1, \"method\":\"Network.enable\"}"); debugger.setMessageCallback( new Callback<String, Void>() { ConcurrentHashMap<String, Traffic> trafficState = new ConcurrentHashMap<>(); @Override public Void call(String param) { JsonParser parser = new JsonParser(); JsonObject object = parser.parse(param).getAsJsonObject(); String method = object.get("method").getAsString(); JsonObject params = object.getAsJsonObject("params"); JsonObject request = params.getAsJsonObject("request"); JsonObject response = params.getAsJsonObject("response"); String requestId = params.get("requestId").getAsString(); Instant timeStamp; JsonElement epochObject = params.get("timestamp"); if (epochObject != null) { double epoch = epochObject.getAsDouble(); timeStamp = Instant.ofEpochSecond( (long) Math.floor(epoch), (long) (epoch * 1000000000 % 1000000000)); } else { timeStamp = Instant.now(); } Traffic traffic = null; switch (method) { case "Network.requestWillBeSent": URL url = null; String urlString = request.get("url").getAsString(); try { url = new URL(urlString); } catch (MalformedURLException e) { // e.printStackTrace(); } trafficState.put( requestId, new Traffic( (url == null) ? urlString : url.getFile(), timeStamp, (url == null) ? "" : url.getHost(), request.get("method").getAsString(), params.get("documentURL").getAsString())); break; case "Network.responseReceived": traffic = trafficState.get(requestId); JsonObject headers = response.getAsJsonObject("headers"); JsonElement contentType = headers.get("Content-Type"); JsonElement contentLength = headers.get("Content-Length"); traffic.setType((contentType == null) ? "" : contentType.getAsString()); JsonElement requestLine = headers.get(""); if (requestLine != null) { String[] requestLineParts = requestLine.getAsString().split(" ", 3); traffic.setStatusCode(new Integer(requestLineParts[1])); traffic.setStatusText(requestLineParts[2]); traffic.setSize((contentLength == null) ? "0" : contentLength.getAsString()); } else { traffic.setStatusCode(200); traffic.setStatusText("OK"); traffic.setSize("0"); } break; case "Network.loadingFinished": traffic = trafficState.get(requestId); traffic.setEndTime(timeStamp); trafficBrowser.getTraffic().add(traffic); trafficState.remove(requestId); if (traffic.getEndTime().isAfter(trafficBrowser.getEndTime())) { trafficBrowser.setEndTime(traffic.getEndTime()); } } return null; } }); detailPane .getTabs() .addAll( javaScriptConsoleTab, crossSiteScriptingTrackerTab, pageResourcesTab, trafficBrowserTab, javaScriptEditorTab // new ImagesTab(webEngine) ); detailPane.setTabClosingPolicy(TabPane.TabClosingPolicy.UNAVAILABLE); }