Skip to content

Commit fcb3331

Browse files
committed
remove special build version for bookmarklet
1 parent ffe22ce commit fcb3331

File tree

3 files changed

+78
-134
lines changed

3 files changed

+78
-134
lines changed

Makefile.dryice.js

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,6 @@ function main(args) {
6969
ace();
7070
} else if (type == "demo") {
7171
demo();
72-
} else if (type == "bm") {
73-
bookmarklet();
7472
} else if (type == "full") {
7573
demo(ace());
7674
bookmarklet();
@@ -98,7 +96,6 @@ function main(args) {
9896
console.log(" minimal Places necessary Ace files out in build dir; uses configuration flags below [default]");
9997
console.log(" normal Runs four Ace builds--minimal, minimal-noconflict, minimal-min, and minimal-noconflict-min");
10098
console.log(" demo Runs demo build of Ace");
101-
console.log(" bm Runs bookmarklet build of Ace");
10299
console.log(" full all of above");
103100
console.log(" highlighter ");
104101
console.log("args:");
@@ -113,30 +110,6 @@ function main(args) {
113110
console.log(" output generated in " + type + __dirname + "/" + BUILD_DIR)
114111
}
115112

116-
function bookmarklet() {
117-
var targetDir = BUILD_DIR + "/textarea";
118-
copy({
119-
source: "build_support/editor_textarea.html",
120-
dest: targetDir + '/editor.html'
121-
});
122-
copy({
123-
source: "build_support/style.css",
124-
dest: targetDir + '/style.css'
125-
});
126-
127-
buildAce({
128-
targetDir: targetDir + "/src",
129-
ns: "__ace_shadowed__",
130-
exportModule: "ace/ext/textarea",
131-
compress: false,
132-
noconflict: true,
133-
suffix: "",
134-
name: "ace-bookmarklet",
135-
workers: [],
136-
keybindings: []
137-
});
138-
}
139-
140113
function ace() {
141114
console.log('# ace ---------');
142115

build_support/editor_textarea.html renamed to build_support/bookmarklet.html

Lines changed: 33 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
var bar = true;
2121
}</textarea><br>
2222
SourceUrl: <br>
23-
<input id="srcURL" style="width:300px" value="http://ajaxorg.github.com/ace-builds/textarea/src/"></input><br>
23+
<input id="srcURL" style="width:300px" value="http://ajaxorg.github.com/ace-builds/src-noconflict"></input><br>
2424
<button id="buBuild">Build Link</button> <br> <a href="#"></a>
2525
<a href="https://github.com/ajaxorg/ace/">
2626
<div class="fork_on_github" ></div>
@@ -49,63 +49,60 @@ <h2>How to use it:</h2>
4949

5050
<script>
5151

52-
function inject(callback) {
53-
var baseUrl = "src/";
52+
function inject(options, callback) {
53+
var baseUrl = options.baseUrl || "../../src-noconflict";
5454

55-
var load = window.__ace_loader__ = function(path, module, callback) {
55+
var load = function(path, callback) {
5656
var head = document.getElementsByTagName('head')[0];
5757
var s = document.createElement('script');
58-
59-
s.src = baseUrl + path;
58+
59+
s.src = baseUrl + "/" + path;
6060
head.appendChild(s);
61-
62-
s.onload = function() {
63-
window.__ace_shadowed__.require([module], callback);
61+
62+
s.onload = s.onreadystatechange = function(_, isAbort) {
63+
if (isAbort || !s.readyState || s.readyState == "loaded" || s.readyState == "complete") {
64+
s = s.onload = s.onreadystatechange = null;
65+
if (!isAbort)
66+
callback();
67+
}
6468
};
6569
};
6670

67-
load('ace-bookmarklet.js', "ace/ext/textarea", function() {
68-
var ace = window.__ace_shadowed__;
69-
70-
ace.options.mode = "javascript";
71-
var Event = ace.require("ace/lib/event");
72-
var areas = document.getElementsByTagName("textarea");
73-
for (var i = 0; i < areas.length; i++) {
74-
Event.addListener(areas[i], "click", function(e) {
75-
if (e.detail == 3) {
76-
ace.transformTextarea(e.target, load);
77-
}
78-
});
79-
}
80-
callback && callback();
71+
load("ace.js", function() {
72+
ace.config.loadModule("ace/ext/textarea", function() {
73+
var event = ace.require("ace/lib/event");
74+
var areas = document.getElementsByTagName("textarea");
75+
for (var i = 0; i < areas.length; i++) {
76+
event.addListener(areas[i], "click", function(e) {
77+
if (e.detail == 3) {
78+
ace.transformTextarea(e.target, options.ace);
79+
}
80+
});
81+
}
82+
callback && callback();
83+
});
8184
});
8285
}
8386

8487
// Call the inject function to load the ace files.
8588
var textAce;
86-
inject(function () {
87-
// Transform the textarea on the page into an ace editor.
88-
var ace = window.__ace_shadowed__;
89+
inject({}, function () {
90+
// Transform the textarea on the page into an ace editor.
8991
var t = document.querySelector("textarea");
90-
textAce = ace.transformTextarea(t, window.__ace_loader__);
92+
textAce = ace.require("ace/ext/textarea").transformTextarea(t);
9193
setTimeout(function(){textAce.setDisplaySettings(true)});
9294
});
9395

9496

9597
document.getElementById("buBuild").onclick = function() {
9698
var injectSrc = inject.toString().split("\n").join("");
97-
injectSrc = injectSrc.replace('baseUrl = "src/"', 'baseUrl="' + document.getElementById("srcURL").value + '"');
98-
99-
var aceOptions = textAce.getOptions();
100-
var opt = [];
101-
for (var option in aceOptions) {
102-
opt.push(option + ":'" + aceOptions[option] + "'");
103-
}
104-
injectSrc = injectSrc.replace('ace.options.mode = "javascript"', 'ace.options = { ' + opt.join(",") + ' }');
10599
injectSrc = injectSrc.replace(/\s+/g, " ");
106100

101+
var options = textAce.getOptions();
102+
options.baseUrl = document.getElementById("srcURL").value;
103+
107104
var a = document.querySelector("a");
108-
a.href = "javascript:(" + injectSrc + ")()";
105+
a.href = "javascript:(" + injectSrc + ")(" + JSON.stringify(options) + ")";
109106
a.innerHTML = "Ace Bookmarklet Link";
110107
}
111108

lib/ace/ext/textarea.js

Lines changed: 45 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ function setupContainer(element, getValue) {
155155
return container;
156156
}
157157

158-
exports.transformTextarea = function(element, loader) {
158+
exports.transformTextarea = function(element, options) {
159159
var session;
160160
var container = setupContainer(element, function() {
161161
return session.getValue();
@@ -215,9 +215,8 @@ exports.transformTextarea = function(element, loader) {
215215
applyStyles(settingDiv, settingDivStyles);
216216
container.appendChild(settingDiv);
217217

218+
options = options || exports.defaultOptions;
218219
// Power up ace on the textarea:
219-
var options = {};
220-
221220
var editor = ace.edit(editorDiv);
222221
session = editor.getSession();
223222

@@ -228,10 +227,10 @@ exports.transformTextarea = function(element, loader) {
228227
container.appendChild(settingOpener);
229228

230229
// Create the API.
231-
setupApi(editor, editorDiv, settingDiv, ace, options, loader);
230+
setupApi(editor, editorDiv, settingDiv, ace, options, load);
232231

233232
// Create the setting's panel.
234-
setupSettingPanel(settingDiv, settingOpener, editor, options);
233+
setupSettingPanel(settingDiv, settingOpener, editor);
235234

236235
var state = "";
237236
event.addListener(settingOpener, "mousemove", function(e) {
@@ -296,37 +295,15 @@ function setupApi(editor, editorDiv, settingDiv, ace, options, loader) {
296295
};
297296

298297
editor.$setOption = editor.setOption;
298+
editor.$getOption = editor.getOption;
299299
editor.setOption = function(key, value) {
300-
if (options[key] == value) return;
301-
302300
switch (key) {
303301
case "mode":
304-
if (value != "text") {
305-
// Load the required mode file. Files get loaded only once.
306-
loader("mode-" + value + ".js", "ace/mode/" + value, function() {
307-
var aceMode = require("../mode/" + value).Mode;
308-
session.setMode(new aceMode());
309-
});
310-
} else {
311-
session.setMode(new (require("../mode/text").Mode));
312-
}
302+
editor.$setOption("mode", "ace/mode/" + value)
313303
break;
314-
315304
case "theme":
316-
if (value != "textmate") {
317-
// Load the required theme file. Files get loaded only once.
318-
loader("theme-" + value + ".js", "ace/theme/" + value, function() {
319-
editor.setTheme("ace/theme/" + value);
320-
});
321-
} else {
322-
editor.setTheme("ace/theme/textmate");
323-
}
324-
break;
325-
326-
case "fontSize":
327-
editorDiv.style.fontSize = value;
305+
editor.$setOption("theme", "ace/theme/" + value)
328306
break;
329-
330307
case "keybindings":
331308
switch (value) {
332309
case "vim":
@@ -341,58 +318,55 @@ function setupApi(editor, editorDiv, settingDiv, ace, options, loader) {
341318
break;
342319

343320
case "softWrap":
344-
switch (value) {
345-
case "off":
346-
session.setUseWrapMode(false);
347-
renderer.setPrintMarginColumn(80);
348-
break;
349-
case "40":
350-
session.setUseWrapMode(true);
351-
session.setWrapLimitRange(40, 40);
352-
renderer.setPrintMarginColumn(40);
353-
break;
354-
case "80":
355-
session.setUseWrapMode(true);
356-
session.setWrapLimitRange(80, 80);
357-
renderer.setPrintMarginColumn(80);
358-
break;
359-
case "free":
360-
session.setUseWrapMode(true);
361-
session.setWrapLimitRange(null, null);
362-
renderer.setPrintMarginColumn(80);
363-
break;
364-
}
321+
case "fontSize":
322+
editor.$setOption(key, value);
365323
break;
366324

367325
default:
368326
editor.$setOption(key, toBool(value));
369327
}
370-
371-
options[key] = value;
372328
};
373329

374330
editor.getOption = function(key) {
375-
return options[key];
376-
};
331+
switch (key) {
332+
case "mode":
333+
return editor.$getOption("mode").substr("ace/mode/".length)
334+
break;
377335

378-
editor.getOptions = function() {
379-
return options;
380-
};
336+
case "theme":
337+
return editor.$getOption("theme").substr("ace/theme/".length)
338+
break;
339+
340+
case "keybindings":
341+
var value = editor.getKeyboardHandler()
342+
switch (value && value.$id) {
343+
case "ace/keyboard/vim":
344+
return "vim";
345+
case "ace/keyboard/emacs":
346+
return "emacs";
347+
default:
348+
return "ace";
349+
}
350+
break;
381351

382-
editor.setOptions(exports.options);
352+
default:
353+
return editor.$getOption(key);
354+
}
355+
};
383356

357+
editor.setOptions(options);
384358
return editor;
385359
}
386360

387-
function setupSettingPanel(settingDiv, settingOpener, editor, options) {
361+
function setupSettingPanel(settingDiv, settingOpener, editor) {
388362
var BOOL = null;
389363

390364
var desc = {
391365
mode: "Mode:",
392-
gutter: "Display Gutter:",
366+
wrap: "Soft Wrap:",
393367
theme: "Theme:",
394368
fontSize: "Font Size:",
395-
softWrap: "Soft Wrap:",
369+
showGutter: "Display Gutter:",
396370
keybindings: "Keyboard",
397371
showPrintMargin: "Show Print Margin:",
398372
useSoftTabs: "Use Soft Tabs:",
@@ -445,15 +419,15 @@ function setupSettingPanel(settingDiv, settingOpener, editor, options) {
445419
twilight: "Twilight",
446420
vibrant_ink: "Vibrant Ink"
447421
},
448-
gutter: BOOL,
422+
showGutter: BOOL,
449423
fontSize: {
450424
"10px": "10px",
451425
"11px": "11px",
452426
"12px": "12px",
453427
"14px": "14px",
454428
"16px": "16px"
455429
},
456-
softWrap: {
430+
wrap: {
457431
off: "Off",
458432
40: "40",
459433
80: "80",
@@ -476,7 +450,7 @@ function setupSettingPanel(settingDiv, settingOpener, editor, options) {
476450
if (!obj) {
477451
builder.push(
478452
"<input type='checkbox' title='", option, "' ",
479-
cValue == "true" ? "checked='true'" : "",
453+
cValue + "" == "true" ? "checked='true'" : "",
480454
"'></input>"
481455
);
482456
return;
@@ -496,10 +470,10 @@ function setupSettingPanel(settingDiv, settingOpener, editor, options) {
496470
builder.push("</select>");
497471
}
498472

499-
for (var option in options) {
473+
for (var option in exports.defaultOptions) {
500474
table.push("<tr><td>", desc[option], "</td>");
501475
table.push("<td>");
502-
renderOption(table, option, optionValues[option], options[option]);
476+
renderOption(table, option, optionValues[option], editor.getOption(option));
503477
table.push("</td></tr>");
504478
}
505479
table.push("</table>");
@@ -532,12 +506,12 @@ function setupSettingPanel(settingDiv, settingOpener, editor, options) {
532506
}
533507

534508
// Default startup options.
535-
exports.options = {
536-
mode: "text",
509+
exports.defaultOptions = {
510+
mode: "javascript",
537511
theme: "textmate",
538-
gutter: "false",
512+
wrap: "off",
539513
fontSize: "12px",
540-
softWrap: "off",
514+
showGutter: "false",
541515
keybindings: "ace",
542516
showPrintMargin: "false",
543517
useSoftTabs: "true",

0 commit comments

Comments
 (0)