69 public String toString() { 70 return "function edit() { [native code] }"; 71 } 72 73 @Override 74 public Set<String> keySet() { 75 return props; 76 } 77 78 @Override 79 public Object getMember(final String name) { 80 if (name.equals("editor")) { 81 return editor; 82 } 83 return UNDEFINED; 84 } 85 86 @Override 87 public void setMember(final String name, final Object value) { 88 if (name.equals("editor")) { 89 this.editor = JSType.toString(value); 90 } 91 } 92 93 // called whenever user 'saves' script in editor 94 class SaveHandler implements Consumer<String> { 95 private String lastStr; // last seen code 96 97 SaveHandler(final String str) { 98 this.lastStr = str; 99 } 100 101 @Override 102 public void accept(final String str) { 103 // ignore repeated save of the same code! 104 if (! str.equals(lastStr)) { 105 this.lastStr = str; 106 // evaluate the new code 107 evaluator.accept(str); 108 } 109 } 110 } 111 112 @Override 113 public Object call(final Object thiz, final Object... args) { 114 final String initText = args.length > 0? JSType.toString(args[0]) : ""; 115 final SaveHandler saveHandler = new SaveHandler(initText); 116 if (editor != null && !editor.isEmpty()) { 117 ExternalEditor.edit(editor, errorHandler, initText, saveHandler, console); 118 } else { 119 EditPad.edit(errorHandler, initText, saveHandler); 120 } 121 return UNDEFINED; 122 } 123 124 @Override 125 public boolean isFunction() { 126 return true; 127 } 128 } | 69 public String toString() { 70 return "function edit() { [native code] }"; 71 } 72 73 @Override 74 public Set<String> keySet() { 75 return props; 76 } 77 78 @Override 79 public Object getMember(final String name) { 80 if (name.equals("editor")) { 81 return editor; 82 } 83 return UNDEFINED; 84 } 85 86 @Override 87 public void setMember(final String name, final Object value) { 88 if (name.equals("editor")) { 89 this.editor = value != null && value != UNDEFINED? JSType.toString(value) : ""; 90 } 91 } 92 93 // called whenever user 'saves' script in editor 94 class SaveHandler implements Consumer<String> { 95 private String lastStr; // last seen code 96 97 SaveHandler(final String str) { 98 this.lastStr = str; 99 } 100 101 @Override 102 public void accept(final String str) { 103 // ignore repeated save of the same code! 104 if (! str.equals(lastStr)) { 105 this.lastStr = str; 106 // evaluate the new code 107 evaluator.accept(str); 108 } 109 } 110 } 111 112 @Override 113 public Object call(final Object thiz, final Object... args) { 114 final String initText = args.length > 0? JSType.toString(args[0]) : ""; 115 final SaveHandler saveHandler = new SaveHandler(initText); 116 if (editor != null && !editor.isEmpty()) { 117 ExternalEditor.edit(editor, errorHandler, initText, saveHandler, console); 118 } else if (! Main.HEADLESS) { 119 EditPad.edit(errorHandler, initText, saveHandler); 120 } else { 121 errorHandler.accept(Main.getMessage("no.editor")); 122 } 123 return UNDEFINED; 124 } 125 126 @Override 127 public boolean isFunction() { 128 return true; 129 } 130 } |