tinymce-rails 4.3.13 → 4.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -2
  3. data/app/assets/source/tinymce/tinymce.js +224 -51
  4. data/lib/tinymce/rails/version.rb +2 -2
  5. data/vendor/assets/javascripts/tinymce/plugins/advlist/plugin.js +1 -1
  6. data/vendor/assets/javascripts/tinymce/plugins/imagetools/plugin.js +1 -1
  7. data/vendor/assets/javascripts/tinymce/plugins/lists/plugin.js +1 -1
  8. data/vendor/assets/javascripts/tinymce/plugins/paste/plugin.js +1 -1
  9. data/vendor/assets/javascripts/tinymce/plugins/table/plugin.js +2 -2
  10. data/vendor/assets/javascripts/tinymce/skins/lightgray/skin.ie7.min.css +1 -1
  11. data/vendor/assets/javascripts/tinymce/skins/lightgray/skin.min.css +1 -1
  12. data/vendor/assets/javascripts/tinymce/themes/inlite/config/bolt/atomic.js +5 -0
  13. data/vendor/assets/javascripts/tinymce/themes/inlite/config/bolt/bootstrap-atomic.js +1491 -0
  14. data/vendor/assets/javascripts/tinymce/themes/inlite/config/bolt/bootstrap-browser.js +1491 -0
  15. data/vendor/assets/javascripts/tinymce/themes/inlite/config/bolt/bootstrap-demo.js +1491 -0
  16. data/vendor/assets/javascripts/tinymce/themes/inlite/config/bolt/bootstrap-prod.js +1491 -0
  17. data/vendor/assets/javascripts/tinymce/themes/inlite/config/bolt/browser.js +10 -0
  18. data/vendor/assets/javascripts/tinymce/themes/inlite/config/bolt/demo.js +8 -0
  19. data/vendor/assets/javascripts/tinymce/themes/inlite/config/bolt/prod.js +5 -0
  20. data/vendor/assets/javascripts/tinymce/themes/inlite/config/dent/depend.js +21 -0
  21. data/vendor/assets/javascripts/tinymce/themes/inlite/scratch/compile/bootstrap.js +1526 -0
  22. data/vendor/assets/javascripts/tinymce/themes/inlite/scratch/compile/theme.js +1589 -0
  23. data/vendor/assets/javascripts/tinymce/themes/inlite/scratch/inline/theme.js +1674 -0
  24. data/vendor/assets/javascripts/tinymce/themes/inlite/scratch/inline/theme.raw.js +1674 -0
  25. data/vendor/assets/javascripts/tinymce/themes/inlite/src/demo/css/demo.css +25 -0
  26. data/vendor/assets/javascripts/tinymce/themes/inlite/src/demo/html/demo.html +42 -0
  27. data/vendor/assets/javascripts/tinymce/themes/inlite/src/demo/js/tinymce/inlite/Demo.js +28 -0
  28. data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/Theme.js +143 -0
  29. data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/alien/Arr.js +22 -0
  30. data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/alien/Bookmark.js +130 -0
  31. data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/alien/Unlink.js +84 -0
  32. data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/alien/Uuid.js +34 -0
  33. data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/Actions.js +106 -0
  34. data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/Convert.js +37 -0
  35. data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/ElementMatcher.js +47 -0
  36. data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/Layout.js +95 -0
  37. data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/Matcher.js +39 -0
  38. data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/Measure.js +70 -0
  39. data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/PredicateId.js +32 -0
  40. data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/SelectionMatcher.js +55 -0
  41. data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/SkinLoader.js +45 -0
  42. data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/UrlType.js +22 -0
  43. data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/file/Conversions.js +31 -0
  44. data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/file/Picker.js +40 -0
  45. data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/ui/Buttons.js +80 -0
  46. data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/ui/Forms.js +102 -0
  47. data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/ui/Panel.js +216 -0
  48. data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/ui/Toolbar.js +126 -0
  49. data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/atomic/alien/ArrTest.js +9 -0
  50. data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/atomic/alien/UuidTest.js +10 -0
  51. data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/atomic/core/ConvertTest.js +12 -0
  52. data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/atomic/core/MatcherTest.js +51 -0
  53. data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/atomic/core/UrlTypeTest.js +25 -0
  54. data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/ThemeTest.js +202 -0
  55. data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/alien/BookmarkTest.js +65 -0
  56. data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/alien/UnlinkTest.js +38 -0
  57. data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/core/ActionsTest.js +177 -0
  58. data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/core/ElementMatcher.js +69 -0
  59. data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/core/LayoutTest.js +118 -0
  60. data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/core/MeasureTest.js +62 -0
  61. data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/core/PredicateIdTest.js +26 -0
  62. data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/core/SelectionMatcherTest.js +76 -0
  63. data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/file/ConversionsTest.js +41 -0
  64. data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/file/SelectionMatcher.js +55 -0
  65. data/vendor/assets/javascripts/tinymce/themes/inlite/theme.js +1 -0
  66. data/vendor/assets/javascripts/tinymce/themes/modern/theme.js +1 -1
  67. data/vendor/assets/javascripts/tinymce/tinymce.js +13 -13
  68. metadata +57 -3
@@ -0,0 +1,1491 @@
1
+ (function (scope) {
2
+ var ephox = scope.ephox = scope.ephox || {};
3
+ var bolt = ephox.bolt = ephox.bolt || {};
4
+
5
+ var def = function (deps, factory) {
6
+ return factory.apply(null, deps);
7
+ };
8
+ var kernel = bolt.kernel = bolt.kernel || {};
9
+ kernel.api = kernel.api || {};
10
+ kernel.async = kernel.api || {};
11
+ kernel.fp = kernel.fp || {};
12
+ kernel.modulator = kernel.modulator || {};
13
+ kernel.module = kernel.module || {};
14
+ kernel.fp.array = def(
15
+ [
16
+ ],
17
+
18
+ function () {
19
+ var equals = function (a1, a2) {
20
+ if (a1.length !== a2.length)
21
+ return false;
22
+ for (var i = 0; i < a1.length; ++i)
23
+ if (a1[i] !== a2[i])
24
+ return false;
25
+ return true;
26
+ };
27
+
28
+ var forall = function (a, f) {
29
+ var fn = f || function (x) {
30
+ return x === true;
31
+ };
32
+ for (var i = 0; i < a.length; ++i)
33
+ if (fn(a[i]) !== true)
34
+ return false;
35
+ return true;
36
+ };
37
+
38
+ var map = function (a, f) {
39
+ var r = [];
40
+ for (var i = 0; i < a.length; ++i)
41
+ r.push(f(a[i], i));
42
+ return r;
43
+ };
44
+
45
+ var flatten = function (a) {
46
+ var r = [];
47
+ for (var i = 0; i < a.length; ++i)
48
+ r = r.concat(a[i]);
49
+ return r;
50
+ };
51
+
52
+ var flatmap = function (a, f) {
53
+ return flatten(map(a, f));
54
+ };
55
+
56
+ var filter = function (a, f) {
57
+ var r = [];
58
+ for (var i = 0; i < a.length; ++i)
59
+ if (f(a[i]))
60
+ r.push(a[i]);
61
+ return r;
62
+ };
63
+
64
+ var each = map;
65
+
66
+ var contains = function (a, x) {
67
+ return !forall(a, function (v) {
68
+ return v !== x;
69
+ });
70
+ };
71
+
72
+ var indexof = function (a, x) {
73
+ for (var i = 0; i < a.length; ++i)
74
+ if (a[i] === x)
75
+ return i;
76
+ return -1;
77
+ };
78
+
79
+ return {
80
+ equals: equals,
81
+ forall: forall,
82
+ map: map,
83
+ flatten: flatten,
84
+ flatmap: flatmap,
85
+ filter: filter,
86
+ each: each,
87
+ contains: contains,
88
+ indexof: indexof
89
+ };
90
+ }
91
+ );
92
+ kernel.fp.object = def(
93
+ [
94
+ ],
95
+
96
+ function () {
97
+ var map = function (o, f) {
98
+ var r = {};
99
+ for (var i in o)
100
+ if (o.hasOwnProperty(i))
101
+ r[i] = f(i, o[i]);
102
+ return r;
103
+ };
104
+
105
+ var each = map;
106
+
107
+ var merge = function (d, s) {
108
+ each(s, function (k, v) {
109
+ d[k] = v;
110
+ });
111
+ };
112
+
113
+ var keys = function (o) {
114
+ var r = [];
115
+ each(o, function (k) {
116
+ r.push(k);
117
+ });
118
+ return r;
119
+ };
120
+
121
+ return {
122
+ each: each,
123
+ keys: keys,
124
+ map: map,
125
+ merge: merge
126
+ };
127
+ }
128
+ );
129
+ kernel.fp.functions = def(
130
+ [
131
+ ],
132
+
133
+ function () {
134
+ var curry = function (f) {
135
+ var slice = Array.prototype.slice;
136
+ var args = slice.call(arguments, 1);
137
+ return function () {
138
+ var all = args.concat(slice.call(arguments, 0));
139
+ return f.apply(null, all);
140
+ };
141
+ };
142
+
143
+ var not = function (z) {
144
+ return function () {
145
+ var slice = Array.prototype.slice;
146
+ return !z.apply(null, slice.call(arguments, 0));
147
+ };
148
+ };
149
+
150
+ var apply = function (f) {
151
+ var slice = Array.prototype.slice;
152
+ return f.apply(null, slice.call(arguments, 0));
153
+ };
154
+
155
+ return {
156
+ curry: curry,
157
+ not: not,
158
+ apply: apply
159
+ };
160
+ }
161
+ );kernel.async.map = def(
162
+ [
163
+ kernel.fp.array
164
+ ],
165
+
166
+ function (ar) {
167
+ var amap = function (data, f, oncomplete) {
168
+ var total = data.length;
169
+ var count = 0;
170
+ var results = [];
171
+
172
+ ar.each(data, function (datum, i) {
173
+ f(datum, function (result) {
174
+ ++count;
175
+ results[i] = result;
176
+ if (count === total)
177
+ oncomplete(results);
178
+ });
179
+ });
180
+ };
181
+
182
+ return {
183
+ amap: amap
184
+ };
185
+ }
186
+ );
187
+ /**
188
+ * This module has a dual responsibility:
189
+ * 1. Ensures that asynchronous function calls, 'f', that share the same
190
+ * 'key' are not executed in parallel.
191
+ * 2. In the case where an attempt to call in parallel is prevented,
192
+ * the 'action' callbacks are executed when the asynchronous call is
193
+ * completed.
194
+ *
195
+ * Example:
196
+ * When we async-map to remotely fetch module definition, it is
197
+ * important that only a single define is evaluated, but the
198
+ * notification that the definition has completed is propagated
199
+ * to all interested parties.
200
+ *
201
+ * 1. we require dependencies 'x' and 'y'
202
+ *
203
+ * 2. both x and y are defined in the same file (i.e. compiled together), 'a.js'.
204
+ *
205
+ * 3. we resolve x and y, to their load spec using a modulator
206
+ * x_spec = {load: function () { -- load a.js -- }, url: a.js, serial: false};
207
+ * y_spec = {load: function () { -- load a.js -- }, url: a.js, serial: false};
208
+ *
209
+ * 4. we make the piggyback call for x:
210
+ * piggybacker.piggyback(x_spec.url, x_spec.load, xdone);
211
+ *
212
+ * this will register the 'xdone' action, and actually
213
+ * trigger the load call, with a synthetic callback
214
+ * responsible for triggering all registered actions.
215
+ *
216
+ * 5. we make the piggyback call for y:
217
+ * piggybacker.piggyback(y_spec.url, y_spec.load, ydone);
218
+ *
219
+ * this will register the 'ydone' action, but NOT trigger
220
+ * the load call.
221
+ *
222
+ * 6. the load call completes, and calls the synthetic callback,
223
+ * which is responsible for triggering both 'xdone' and 'ydone'.
224
+ *
225
+ * 7. something else happens that means we have to load 'a.js' again,
226
+ * the piggybacker DOES NOT prevent this call, and will follow
227
+ * the above process.
228
+ */
229
+ kernel.async.piggybacker = def(
230
+ [
231
+ kernel.fp.array,
232
+ kernel.fp.functions
233
+ ],
234
+
235
+ function (ar, fn) {
236
+ var create = function () {
237
+ var queue = {}; // key -> [actions]
238
+
239
+ var process = function (key) {
240
+ var actions = queue[key];
241
+ delete queue[key];
242
+ ar.each(actions, fn.apply);
243
+ };
244
+
245
+ var piggyback = function (key, f, action) {
246
+ if (queue[key] === undefined) {
247
+ queue[key] = [ action ];
248
+ f(fn.curry(process, key));
249
+ } else {
250
+ queue[key].push(action);
251
+ }
252
+ };
253
+
254
+ return {
255
+ piggyback: piggyback
256
+ };
257
+ };
258
+
259
+ return {
260
+ create: create
261
+ };
262
+ }
263
+ );
264
+ kernel.modulator.globalator = def(
265
+ [
266
+ ],
267
+
268
+ function () {
269
+ var create = function () {
270
+ // FIX pull out
271
+ var resolve = function (name, scope) {
272
+ var parts = name.split('.');
273
+ var r = scope;
274
+ for (var i = 0; i < parts.length && r !== undefined; ++i)
275
+ r = r[parts[i]];
276
+ return r;
277
+ };
278
+
279
+ var global = Function('return this')();
280
+
281
+ var can = function (id) {
282
+ return id.indexOf('global!') === 0;
283
+ };
284
+
285
+ var get = function (id, define, require) {
286
+ var name = id.substring('global!'.length);
287
+
288
+ var load = function (onsuccess, onfailure) {
289
+ var instance = resolve(name, global);
290
+ if (instance !== undefined) {
291
+ define(id, [], function () { return instance; });
292
+ onsuccess();
293
+ } else {
294
+ onfailure('Modulator error: could not resolve global [' + name + ']');
295
+ }
296
+ };
297
+
298
+ return {
299
+ url: id, // this just needs to be unique, no download required.
300
+ load: load,
301
+ serial: true
302
+ };
303
+ };
304
+
305
+ return {
306
+ can: can,
307
+ get: get
308
+ }
309
+ };
310
+ return {
311
+ create: create
312
+ };
313
+ }
314
+ );
315
+ kernel.modulator.bolt = def(
316
+ [
317
+ kernel.fp.functions
318
+ ],
319
+
320
+ function (fn) {
321
+ var create = function (loader, pather, namespace, path, idTransformer, options) {
322
+ var can = function (id) {
323
+ return id === namespace || id.indexOf(namespace + '.') === 0 || id.indexOf(namespace + '/') === 0;
324
+ };
325
+
326
+ var get = function (id) {
327
+ var before = options !== undefined && options.absolute === true ? path : pather(path);
328
+ var after = options !== undefined && options.fresh === true ? '?cachebuster=' + new Date().getTime() : '';
329
+ var url = before + "/" + idTransformer(id) + '.js' + after;
330
+ var load = fn.curry(loader.load, url);
331
+
332
+ return {
333
+ url: url,
334
+ load: load,
335
+ serial: false
336
+ };
337
+ };
338
+
339
+ return {
340
+ can: can,
341
+ get: get
342
+ };
343
+ };
344
+
345
+ return {
346
+ create: create
347
+ };
348
+ }
349
+ );kernel.module.stratifier = def(
350
+ [
351
+ kernel.fp.array
352
+ ],
353
+
354
+ function (ar) {
355
+ var stratify = function (specs) {
356
+ var parallels = ar.filter(specs, function (spec) {
357
+ return !spec.serial;
358
+ });
359
+ return parallels.length > 0 ? parallels : specs.slice(0, 1);
360
+ };
361
+
362
+ return {
363
+ stratify: stratify
364
+ };
365
+ }
366
+ );
367
+ /**
368
+ * This module performs dependency analysis of strings that depend on sets of
369
+ * strings.
370
+ *
371
+ * The input is an array of root strings to start analysis from, and an object
372
+ * that contains a mapping of each string to the strings it depends on.
373
+ *
374
+ * Performing an analysis results in either:
375
+ * 1. an empty array, indicating that all dependencies are satisfied,
376
+ * 2. an array of strings that are, at the minimum, still needed in order to
377
+ * satisfy the given dependency trees, or
378
+ * 3. an array of strings that form a dependency cycle.
379
+ */
380
+ kernel.module.analyser = def(
381
+ [
382
+ kernel.fp.array
383
+ ],
384
+
385
+ function (array) {
386
+ var collect = function (path, name) {
387
+ var i = array.indexof(path, name);
388
+ var p = path.slice(i);
389
+ return p.concat([name]);
390
+ };
391
+
392
+ /**
393
+ * @param {array} roots Contains a list of root ids
394
+ * @param {object} modules Contains dependency information in format: { id: [ 'id1', 'id2' ] }
395
+ */
396
+ var analyse = function (roots, modules) {
397
+ var done = {};
398
+ var path = [];
399
+ var missing = [];
400
+ var cycle;
401
+
402
+ var children = function (name) {
403
+ array.each(modules[name], attempt);
404
+ };
405
+
406
+ var examine = function (name) {
407
+ if (modules[name])
408
+ children(name);
409
+ else
410
+ missing.push(name);
411
+ };
412
+
413
+ var descend = function (name) {
414
+ path.push(name);
415
+ examine(name);
416
+ path.pop();
417
+ };
418
+
419
+ var decycle = function (name) {
420
+ if (array.contains(path, name))
421
+ cycle = collect(path, name);
422
+ else
423
+ descend(name);
424
+ };
425
+
426
+ var attempt = function (name) {
427
+ if (!done[name]) {
428
+ decycle(name);
429
+ done[name] = true;
430
+ }
431
+ };
432
+
433
+ array.each(roots, attempt);
434
+
435
+ return cycle ? { cycle: cycle } : { load: missing };
436
+ };
437
+
438
+ return {
439
+ analyse: analyse
440
+ };
441
+ }
442
+ );
443
+ kernel.module.fetcher = def(
444
+ [
445
+ kernel.fp.array,
446
+ kernel.fp.functions,
447
+ kernel.async.map,
448
+ kernel.async.piggybacker,
449
+ kernel.module.stratifier
450
+ ],
451
+
452
+ function (ar, fn, map, piggybacker, stratifier) {
453
+ var create = function (regulator, validator, onerror, define, require, demand) {
454
+ var piggyback = piggybacker.create();
455
+
456
+ var validate = function (onsuccess, results) {
457
+ var failed = ar.filter(results, fn.not(validator));
458
+ if (failed.length > 0)
459
+ onerror('Fetcher error: modules were not defined: ' + failed.join(', '));
460
+ else
461
+ onsuccess();
462
+ };
463
+
464
+ var mapper = function (spec, onresult) {
465
+ var action = fn.curry(onresult, spec.id);
466
+ var load = function (callback) {
467
+ spec.load(callback, onerror);
468
+ };
469
+ piggyback.piggyback(spec.url, load, action);
470
+ };
471
+
472
+ var asyncfetch = function (specs, onsuccess) {
473
+ var oncomplete = fn.curry(validate, onsuccess);
474
+ var strata = stratifier.stratify(specs);
475
+ map.amap(strata, mapper, oncomplete);
476
+ };
477
+
478
+ var fetch = function (ids, onsuccess) {
479
+ regulator.regulate(ids, define, require, demand, function (specs) {
480
+ asyncfetch(specs, onsuccess);
481
+ }, onerror);
482
+ };
483
+
484
+ return {
485
+ fetch: fetch
486
+ };
487
+ };
488
+
489
+ return {
490
+ create: create
491
+ };
492
+ }
493
+ );
494
+ kernel.module.loader = def(
495
+ [
496
+ kernel.module.analyser
497
+ ],
498
+
499
+ function (analyser) {
500
+ var load = function (roots, deps, fetcher, oncontinue, onsuccess, onerror) {
501
+ var result = analyser.analyse(roots, deps);
502
+
503
+ if (result.cycle)
504
+ onerror('Dependency error: a circular module dependency exists from ' + result.cycle.join(' ~> '));
505
+ else if (result.load.length === 0)
506
+ onsuccess();
507
+ else
508
+ fetcher.fetch(result.load, oncontinue);
509
+ };
510
+
511
+ return {
512
+ load: load
513
+ };
514
+ }
515
+ );
516
+ kernel.module.manager = def(
517
+ [
518
+ kernel.fp.array,
519
+ kernel.fp.object,
520
+ kernel.module.loader,
521
+ kernel.module.fetcher
522
+ ],
523
+
524
+ function (ar, obj, loader, fetcher) {
525
+ var create = function (regulator, onerror) {
526
+ var blueprints = {}; // id -> { id: string, dependencies: [ string ], definition: function }
527
+ var modules = {}; // id -> module
528
+
529
+ // Adds a module to the system.
530
+ var define = function (id, dependencies, definition) {
531
+ if (id === undefined)
532
+ onerror("Define error: module id can not be undefined");
533
+ else if (blueprints[id] !== undefined)
534
+ onerror("Define error: module '" + id + "' is already defined");
535
+ else
536
+ blueprints[id] = { id: id, dependencies: dependencies, definition: definition };
537
+ };
538
+
539
+ // Loads a set of modules asynchronously.
540
+ var require = function (ids, callback) {
541
+ var onsuccess = function () {
542
+ var instances = ar.map(ids, demand);
543
+ callback.apply(null, instances);
544
+ };
545
+
546
+ var oncontinue = function () {
547
+ var deps = obj.map(blueprints, function (k, v) {
548
+ return v.dependencies;
549
+ });
550
+ loader.load(ids, deps, fetch, oncontinue, onsuccess, onerror);
551
+ };
552
+
553
+ oncontinue();
554
+ };
555
+
556
+ // Instantiates a module and all of its dependencies.
557
+ var demand = function (id) {
558
+ if (modules[id] !== undefined)
559
+ return modules[id];
560
+ if (blueprints[id] === undefined)
561
+ throw "module '" + id + "' is not defined";
562
+ var result = instantiate(id);
563
+ if (result === undefined)
564
+ throw "module '" + id + "' returned undefined from definition function";
565
+ modules[id] = result;
566
+ return result;
567
+ };
568
+
569
+ var instantiate = function (id) {
570
+ var blueprint = blueprints[id];
571
+ var args = ar.map(blueprint.dependencies, demand); // Instantiate dependencies
572
+ return blueprint.definition.apply(null, args); // Instantiate self
573
+ };
574
+
575
+ var validator = function (id) { return blueprints[id] !== undefined; };
576
+ var fetch = fetcher.create(regulator, validator, onerror, define, require, demand);
577
+
578
+ return {
579
+ define: define,
580
+ require: require,
581
+ demand: demand
582
+ };
583
+ };
584
+
585
+ return {
586
+ create: create
587
+ };
588
+ }
589
+ );
590
+ kernel.api.sources = def(
591
+ [
592
+ kernel.fp.array,
593
+ kernel.fp.object,
594
+ kernel.modulator.globalator
595
+ ],
596
+
597
+ function (ar, obj, globalator) {
598
+ var create = function (builtins, configuration) {
599
+ var data = {
600
+ 'global': { instance: globalator }
601
+ };
602
+ obj.each(builtins, function (key, value) {
603
+ data[key] = { instance: value };
604
+ });
605
+ ar.each(configuration.types, function (spec) {
606
+ data[spec.type] = { id: spec.modulator };
607
+ });
608
+ var sourcespecs = configuration.sources.slice(0);
609
+ var sources = [ globalator.create() ];
610
+
611
+ var guard = function (type) {
612
+ if (data[type] === undefined)
613
+ throw 'Unknown modulator type [' + type + '].';
614
+ };
615
+
616
+ var isResolved = function (type) {
617
+ guard(type);
618
+ return data[type].instance !== undefined;
619
+ };
620
+
621
+ var idOf = function (type) {
622
+ guard(type);
623
+ return data[type].id;
624
+ };
625
+
626
+ var instanceOf = function (type) {
627
+ guard(type);
628
+ return data[type].instance;
629
+ };
630
+
631
+ var register = function (type, instance) {
632
+ guard(type);
633
+ data[type].instance = instance;
634
+ };
635
+
636
+ var find = function (id) {
637
+ for (var i = 0; i < sources.length; ++i)
638
+ if (sources[i].can(id))
639
+ return { found: sources[i] };
640
+ return { notfound: true };
641
+ };
642
+
643
+ var crank = function () {
644
+ var left = [];
645
+ ar.each(sourcespecs, function (spec) {
646
+ if (isResolved(spec.type)) {
647
+ var instance = instanceOf(spec.type);
648
+ var source = instance.create.apply(null, spec.args);
649
+ sources.push(source);
650
+ } else
651
+ left.push(spec);
652
+ });
653
+ sourcespecs = left;
654
+ };
655
+
656
+ return {
657
+ isResolved: isResolved,
658
+ idOf: idOf,
659
+ instanceOf: instanceOf,
660
+ register: register,
661
+ find: find,
662
+ crank: crank
663
+ };
664
+ };
665
+
666
+ return {
667
+ create: create
668
+ };
669
+ }
670
+ );
671
+ kernel.api.regulator = def(
672
+ [
673
+ kernel.fp.array,
674
+ kernel.fp.functions
675
+ ],
676
+
677
+ function (ar, fn) {
678
+ var create = function (sources) {
679
+ /*
680
+ * 1. Resolve configuration as much as possible
681
+ * 2. Check for unresolved modulator types that are required to continue.
682
+ * a) Go ahead and resolve, if we have everything we need.
683
+ * b) Delay, requiring the modulators, then retry.
684
+ */
685
+ var regulate = function (ids, define, require, demand, onsuccess, onerror) {
686
+ sources.crank();
687
+ var required = ar.map(ids, determinetype);
688
+ var unresolved = ar.filter(required, fn.not(sources.isResolved));
689
+ if (unresolved.length === 0)
690
+ resolve(ids, define, require, demand, onsuccess, onerror);
691
+ else
692
+ delay(unresolved, ids, define, require, demand, onsuccess, onerror);
693
+ };
694
+
695
+ var resolve = function (ids, define, require, demand, onsuccess, onerror) {
696
+ var r = [];
697
+ for (var i = 0; i < ids.length; ++i) {
698
+ var id = ids[i];
699
+ var source = sources.find(id);
700
+ if (source.notfound) {
701
+ onerror('Could not find source for module [' + id + ']');
702
+ return;
703
+ }
704
+ var spec = source.found.get(id, define, require, demand);
705
+ r[i] = build(id, spec);
706
+ }
707
+ onsuccess(r);
708
+ };
709
+
710
+ var build = function (id, spec) {
711
+ return {
712
+ id: id,
713
+ url: spec.url,
714
+ load: spec.load,
715
+ serial: spec.serial
716
+ };
717
+ };
718
+
719
+ var delay = function (types, ids, define, require, demand, onsuccess, onerror) {
720
+ var modulatorids = ar.map(types, sources.idOf);
721
+ require(modulatorids, function (/* modulators */) {
722
+ var modulators = arguments;
723
+ ar.each(types, function (type, i) {
724
+ sources.register(type, modulators[i]);
725
+ });
726
+ regulate(ids, define, require, demand, onsuccess, onerror);
727
+ });
728
+ };
729
+
730
+ var determinetype = function (id) {
731
+ var index = id.indexOf('!');
732
+ return index === -1 ? 'bolt' : id.substring(0, index);
733
+ };
734
+
735
+ return {
736
+ regulate: regulate
737
+ };
738
+ };
739
+
740
+ return {
741
+ create: create
742
+ };
743
+ }
744
+ );
745
+ kernel.api.config = def(
746
+ [
747
+ kernel.module.manager,
748
+ kernel.api.regulator,
749
+ kernel.api.sources
750
+ ],
751
+
752
+ function (manager, regulator, sources) {
753
+ var configure = function (configuration, builtins, onerror) {
754
+ var s = sources.create(builtins, configuration);
755
+ var r = regulator.create(s);
756
+ var engine = manager.create(r, onerror);
757
+
758
+ return {
759
+ define: engine.define,
760
+ require: engine.require,
761
+ demand: engine.demand
762
+ };
763
+ };
764
+
765
+ return {
766
+ configure: configure
767
+ };
768
+ }
769
+ );
770
+ })(Function('return this')());
771
+
772
+ (function (scope) {
773
+ var ephox = scope.ephox = scope.ephox || {};
774
+ var bolt = ephox.bolt = ephox.bolt || {};
775
+
776
+ var def = function (deps, factory) {
777
+ return factory.apply(null, deps);
778
+ };
779
+ var loader = bolt.loader = bolt.loader || {};
780
+ loader.executor = loader.executor || {};
781
+ loader.api = loader.api || {};
782
+ loader.transporter = loader.transporter || {};
783
+ loader.tag = loader.tag || {};
784
+ loader.tag.script = def(
785
+ [
786
+ ],
787
+
788
+ function () {
789
+ var guard = function (callback) {
790
+ return function (evt) {
791
+ if (evt.srcElement.readyState === "loaded" || evt.srcElement.readyState === "complete")
792
+ callback();
793
+ };
794
+ };
795
+
796
+ var ie = function (el) {
797
+ return el.attachEvent && !window.opera;
798
+ };
799
+
800
+ var onload = function (el, callback) {
801
+ if (ie(el))
802
+ el.attachEvent("onreadystatechange", guard(callback));
803
+ else
804
+ el.addEventListener("load", callback, false);
805
+ };
806
+
807
+ var createtag = function (callback) {
808
+ var el = document.createElement("script");
809
+ el.type = "text/javascript";
810
+ onload(el, callback);
811
+ return el;
812
+ };
813
+
814
+ var insert = function (decorator, callback) {
815
+ var el = createtag(callback);
816
+ decorator(el);
817
+ var head = document.getElementsByTagName("head")[0];
818
+ head.appendChild(el);
819
+ };
820
+
821
+ return {
822
+ insert: insert
823
+ };
824
+ }
825
+ );
826
+ loader.transporter.commonjs = def(
827
+ [
828
+ ],
829
+
830
+ function () {
831
+ var read = function (url, success, error) {
832
+ var fs = require('fs');
833
+ fs.exists(url, function (exists) {
834
+ if (exists)
835
+ fs.readFile(url, 'UTF-8', function (err, data) {
836
+ if (err)
837
+ error('Error reading file [' + url + '], error [' + err + ']');
838
+ else
839
+ success(data);
840
+ });
841
+ else
842
+ error('File does not exist [' + url + ']');
843
+ });
844
+ };
845
+
846
+ return {
847
+ read: read
848
+ };
849
+ }
850
+ );
851
+ loader.transporter.xhr = def(
852
+ [
853
+ ],
854
+
855
+ function () {
856
+ var requestObject = function () {
857
+ // Correct way to use XMLHttpRequest in IE:
858
+ // http://blogs.msdn.com/b/ie/archive/2006/01/23/516393.aspx
859
+ var factories = [
860
+ function () { return new XMLHttpRequest() },
861
+ function () { return new ActiveXObject("Microsoft.XMLHTTP") }
862
+ ];
863
+
864
+ return fallback(factories);
865
+ };
866
+
867
+ var fallback = function (items) {
868
+ for (var i = 0; i < items.length; ++i) {
869
+ try {
870
+ return items[i]();
871
+ } catch (e) {
872
+ }
873
+ }
874
+ };
875
+
876
+ var handler = function (req, url, success, error) {
877
+ return function () {
878
+ if (req.readyState === 4)
879
+ done(req, url, success, error);
880
+ };
881
+ };
882
+
883
+ var done = function (req, url, success, error) {
884
+ if (req.status === 200 || req.status === 304)
885
+ success(req.responseText);
886
+ else
887
+ error('Transport error: ' + req.status + ' ' + req.statusText + ' for resource: "' + url + '"');
888
+ };
889
+
890
+ var getUrl = function (req, url, success, error) {
891
+ req.open('GET', url, true);
892
+ req.onreadystatechange = handler(req, url, success, error);
893
+ req.send();
894
+ };
895
+
896
+ var request = function (url, success, error) {
897
+ var req = requestObject();
898
+ if (req)
899
+ getUrl(req, url, success, error);
900
+ else
901
+ error('Transport error: browser does not support XMLHttpRequest.');
902
+ };
903
+
904
+ return {
905
+ request: request
906
+ };
907
+ }
908
+ );
909
+ loader.executor.evaller = def(
910
+ [
911
+ ],
912
+
913
+ function () {
914
+ var execute = function (data, onsuccess, onfailure) {
915
+ try {
916
+ eval(data);
917
+ } catch(e) {
918
+ onfailure(e);
919
+ return;
920
+ }
921
+
922
+ onsuccess();
923
+ };
924
+
925
+ return {
926
+ execute: execute
927
+ };
928
+ }
929
+ );
930
+ loader.executor.injector = def(
931
+ [
932
+ loader.tag.script
933
+ ],
934
+
935
+ function (script) {
936
+ var execute = function (data, onsuccess, onfailure) {
937
+ var inject = function (tag) {
938
+ tag.text = data;
939
+ };
940
+
941
+ var noop = function () {};
942
+
943
+ // Injection does not fire events, but execution happens synchronously,
944
+ // so we just make an explicit callback
945
+ script.insert(inject, noop);
946
+ onsuccess();
947
+ };
948
+
949
+ return {
950
+ execute: execute
951
+ };
952
+ }
953
+ );
954
+ loader.api.commonjsevaller = def(
955
+ [
956
+ loader.transporter.commonjs,
957
+ loader.executor.evaller
958
+ ],
959
+
960
+ function (commonjs, evaller) {
961
+ var load = function (url, onsuccess, onfailure) {
962
+ var inject = function (data) {
963
+ evaller.execute(data, onsuccess, onfailure);
964
+ };
965
+
966
+ commonjs.read(url, inject, onfailure);
967
+ };
968
+
969
+ return {
970
+ load: load
971
+ };
972
+ }
973
+ );
974
+ loader.api.scripttag = def(
975
+ [
976
+ loader.tag.script
977
+ ],
978
+
979
+ function (script) {
980
+ var load = function (url, onsuccess, onfailure) {
981
+ var sourcer = function (tag) {
982
+ tag.src = url;
983
+ };
984
+
985
+ script.insert(sourcer, onsuccess);
986
+ };
987
+
988
+ return {
989
+ load: load
990
+ };
991
+ }
992
+ );
993
+ loader.api.xhrevaller = def(
994
+ [
995
+ loader.transporter.xhr,
996
+ loader.executor.evaller
997
+ ],
998
+
999
+ function (xhr, evaller) {
1000
+ var load = function (url, onsuccess, onfailure) {
1001
+ var inject = function (data) {
1002
+ evaller.execute(data, onsuccess, onfailure);
1003
+ };
1004
+
1005
+ xhr.request(url, inject, onfailure);
1006
+ };
1007
+
1008
+ return {
1009
+ load: load
1010
+ };
1011
+ }
1012
+ );
1013
+ loader.api.xhrinjector = def(
1014
+ [
1015
+ loader.transporter.xhr,
1016
+ loader.executor.injector
1017
+ ],
1018
+
1019
+ function (xhr, injector) {
1020
+ var load = function (url, onsuccess, onfailure) {
1021
+ var inject = function (data) {
1022
+ injector.execute(data, onsuccess);
1023
+ };
1024
+
1025
+ xhr.request(url, inject, onfailure);
1026
+ };
1027
+
1028
+ return {
1029
+ load: load
1030
+ };
1031
+ }
1032
+ );
1033
+ })(Function('return this')());
1034
+
1035
+ (function (scope) {
1036
+ var ephox = scope.ephox = scope.ephox || {};
1037
+ var bolt = ephox.bolt = ephox.bolt || {};
1038
+
1039
+ var def = function (deps, factory) {
1040
+ return factory.apply(null, deps);
1041
+ };
1042
+ var module = bolt.module = bolt.module || {};
1043
+ module.bootstrap = module.bootstrap || {};
1044
+ module.config = module.config || {};
1045
+ module.error = module.error || {};
1046
+ module.modulator = module.modulator || {};
1047
+ module.reader = module.reader || {};
1048
+ module.runtime = module.runtime || {};
1049
+ module.util = module.util || {};
1050
+ module.error.error = def(
1051
+ [
1052
+ ],
1053
+
1054
+ function () {
1055
+ var die = function (msg) {
1056
+ throw msg || new Error('unknown error');
1057
+ };
1058
+
1059
+ return {
1060
+ die: die
1061
+ };
1062
+ }
1063
+ );
1064
+ module.config.mapper = def(
1065
+ [
1066
+ ],
1067
+
1068
+ function () {
1069
+ var flat = function (id) {
1070
+ return id;
1071
+ };
1072
+
1073
+ var hierarchical = function (id) {
1074
+ return id.replace(/\./g, '/');
1075
+ };
1076
+
1077
+ var constant = function (name) {
1078
+ return function () {
1079
+ return name;
1080
+ };
1081
+ };
1082
+
1083
+ return {
1084
+ flat: flat,
1085
+ hierarchical: hierarchical,
1086
+ constant: constant
1087
+ };
1088
+ }
1089
+ );
1090
+ module.api = def(
1091
+ [
1092
+ module.runtime
1093
+ ],
1094
+
1095
+ function (runtime) {
1096
+ var delegate = function (method) {
1097
+ return function () {
1098
+ return runtime[method].apply(null, arguments);
1099
+ };
1100
+ };
1101
+
1102
+ return {
1103
+ define: delegate('define'),
1104
+ require: delegate('require'),
1105
+ demand: delegate('demand'),
1106
+ main: delegate('main'),
1107
+ load: delegate('load'),
1108
+ loadscript: delegate('loadscript')
1109
+ };
1110
+ }
1111
+ );
1112
+ module.util.path = def(
1113
+ [
1114
+ ],
1115
+
1116
+ function () {
1117
+ var dirname = function (file) {
1118
+ var normalized = file.replace(/\\/g, '/');
1119
+ var end = normalized.lastIndexOf('/');
1120
+ return normalized.substring(0, end);
1121
+ };
1122
+
1123
+ var basename = function (file) {
1124
+ var normalized = file.replace(/\\/g, '/');
1125
+ var end = normalized.lastIndexOf('/');
1126
+ return normalized.substring(end + 1);
1127
+ };
1128
+
1129
+ return {
1130
+ basename: basename,
1131
+ dirname: dirname
1132
+ };
1133
+ }
1134
+ );
1135
+ module.util.locator = def(
1136
+ [
1137
+ ],
1138
+
1139
+ function () {
1140
+ var browser = function () {
1141
+ var scripts = document.getElementsByTagName("script");
1142
+ return scripts[scripts.length - 1].src;
1143
+ };
1144
+
1145
+ var runtime = module.runtime.locate;
1146
+
1147
+ var locate = function () {
1148
+ var f = runtime || browser;
1149
+ return f();
1150
+ };
1151
+
1152
+ return {
1153
+ locate: locate
1154
+ };
1155
+ }
1156
+ );
1157
+ module.util.pather = def(
1158
+ [
1159
+ module.util.path
1160
+ ],
1161
+
1162
+ function (path) {
1163
+ var create = function (relativeto) {
1164
+ var base = path.dirname(relativeto);
1165
+ return function (path) {
1166
+ return base + '/' + path;
1167
+ };
1168
+ };
1169
+
1170
+ return {
1171
+ create: create
1172
+ };
1173
+ }
1174
+ );module.modulator.modulators = def(
1175
+ [
1176
+ ephox.bolt.kernel.fp.functions,
1177
+ ephox.bolt.kernel.modulator.bolt,
1178
+ ephox.bolt.loader.api.commonjsevaller,
1179
+ ephox.bolt.loader.api.scripttag,
1180
+ ephox.bolt.loader.api.xhrevaller,
1181
+ ephox.bolt.loader.api.xhrinjector
1182
+ ],
1183
+
1184
+ function (fn, bolt, commonjsevaller, scripttag, xhrevaller, xhrinjector) {
1185
+ var wrap = function (modulator, loader) {
1186
+ var create = fn.curry(modulator.create, loader);
1187
+
1188
+ return {
1189
+ create: create
1190
+ }
1191
+ };
1192
+
1193
+ return {
1194
+ boltcommonjs: wrap(bolt, commonjsevaller),
1195
+ boltscripttag: wrap(bolt, scripttag),
1196
+ boltxhreval: wrap(bolt, xhrevaller),
1197
+ boltxhrinjector: wrap(bolt, xhrinjector)
1198
+ };
1199
+ }
1200
+ );
1201
+ module.config.builtins = def(
1202
+ [
1203
+ ephox.bolt.module.modulator.modulators.boltscripttag,
1204
+ ephox.bolt.module.modulator.modulators.boltcommonjs
1205
+ ],
1206
+
1207
+ function (boltscripttag, boltcommonjs) {
1208
+ return {
1209
+ // TODO: 'amd' is maintained for backwards compatibility, will be removed
1210
+ // at some point.
1211
+ browser: { bolt: boltscripttag, amd: boltscripttag },
1212
+ commonjs: { bolt: boltcommonjs, amd: boltcommonjs }
1213
+ };
1214
+ }
1215
+ );
1216
+ module.config.specs = def(
1217
+ [
1218
+ module.util.pather
1219
+ ],
1220
+
1221
+ function (pather) {
1222
+ var type = function (type, implementation) {
1223
+ return {
1224
+ type: type,
1225
+ implementation: implementation,
1226
+ modulator: implementation + '.Modulator',
1227
+ compiler: implementation + '.Compiler'
1228
+ };
1229
+ };
1230
+
1231
+ var source = function (relativeto) {
1232
+ return function (type /*, args */) {
1233
+ return {
1234
+ type: type,
1235
+ relativeto: relativeto,
1236
+ args: [ pather.create(relativeto) ].concat(Array.prototype.slice.call(arguments, 1))
1237
+ };
1238
+ }
1239
+ };
1240
+
1241
+ return {
1242
+ type: type,
1243
+ source: source
1244
+ };
1245
+ }
1246
+ );
1247
+ module.reader.bouncing = def(
1248
+ [
1249
+ ephox.bolt.kernel.fp.array,
1250
+ module.error.error,
1251
+ module.config.specs
1252
+ ],
1253
+
1254
+ function (ar, error, specs) {
1255
+ var bounce = function (done, read, acc) {
1256
+ var next = acc.configs.shift();
1257
+ read(next.relativeto, next.config, done, acc);
1258
+ };
1259
+
1260
+ var tick = function (file, cfg, done, read, acc) {
1261
+ var munged = ar.map(cfg.configs || [], function (config) {
1262
+ return { relativeto: file, config: config };
1263
+ });
1264
+ var accumulated = {
1265
+ sources: acc.sources.concat(cfg.sources || []),
1266
+ types: acc.types.concat(cfg.types || []),
1267
+ configs: munged.concat(acc.configs)
1268
+ };
1269
+ if (accumulated.configs.length > 0)
1270
+ bounce(done, read, accumulated);
1271
+ else
1272
+ done({ sources: accumulated.sources, types: accumulated.types });
1273
+ };
1274
+
1275
+ /*
1276
+ * All precedence is depth-first, pre-order. Example:
1277
+ *
1278
+ * A
1279
+ * /-\
1280
+ * B C
1281
+ * /| |\
1282
+ * D E F G
1283
+ *
1284
+ * Configs are read in A, B, D, E, C, F, G.
1285
+ *
1286
+ * If configs mixed delegation and sources, the
1287
+ * sources would be ordered the same: A, B, D, E, C, F, G.
1288
+ */
1289
+
1290
+ var evaluate = function (file, payload, done, read, acc) {
1291
+ var result = {};
1292
+ /* eval scope */
1293
+ var mapper = module.config.mapper;
1294
+ var type = specs.type;
1295
+ var source = specs.source(file);
1296
+ var configure = function (configuration) {
1297
+ result = configuration;
1298
+ };
1299
+ try {
1300
+ eval(payload);
1301
+ } catch (e) {
1302
+ throw 'Could not load configuration [' + file + '], with: ' + e;
1303
+ }
1304
+ tick(file, result, done, read, acc);
1305
+ };
1306
+
1307
+ return {
1308
+ evaluate: evaluate
1309
+ };
1310
+ }
1311
+ );
1312
+ module.reader.browser = def(
1313
+ [
1314
+ module.error.error,
1315
+ module.reader.bouncing,
1316
+ module.util.path,
1317
+ ephox.bolt.loader.transporter.xhr
1318
+ ],
1319
+
1320
+ function (error, bouncing, path, xhr) {
1321
+ var read = function (relativeto, file, done, acc) {
1322
+ var accumulated = acc || { sources: [], types: [], configs: [] };
1323
+ var base = path.dirname(relativeto);
1324
+ var absolute = base + '/' + file;
1325
+ xhr.request(absolute, function (payload) {
1326
+ bouncing.evaluate(absolute, payload, done, read, accumulated);
1327
+ }, error.die);
1328
+ };
1329
+
1330
+ return {
1331
+ read: read
1332
+ };
1333
+ }
1334
+ );
1335
+ module.reader.node = def(
1336
+ [
1337
+ module.reader.bouncing
1338
+ ],
1339
+
1340
+ function (bouncing, path, fs) {
1341
+ var read = function (relativeto, file, done, acc) {
1342
+ var fs = require('fs');
1343
+ var path = require('path');
1344
+ var accumulated = acc || { sources: [], types: [], configs: [] };
1345
+ var base = path.dirname(relativeto);
1346
+ var absolute = path.resolve(base, file);
1347
+ var payload = fs.readFileSync(absolute, 'UTF-8');
1348
+ bouncing.evaluate(absolute, payload, done, read, accumulated);
1349
+ };
1350
+
1351
+ return {
1352
+ read: read
1353
+ };
1354
+ }
1355
+ );
1356
+ module.reader.direct = def(
1357
+ [
1358
+ ],
1359
+
1360
+ function () {
1361
+ var create = function (configuration) {
1362
+ return function (done) {
1363
+ done({
1364
+ sources: configuration.sources || [],
1365
+ types: configuration.types || [],
1366
+ configs: configuration.configs || []
1367
+ });
1368
+ };
1369
+ };
1370
+
1371
+ return {
1372
+ create: create
1373
+ };
1374
+ }
1375
+ );
1376
+ module.bootstrap.configloader = def(
1377
+ [
1378
+ module.util.locator,
1379
+ module.reader.browser
1380
+ ],
1381
+
1382
+ function (locator, browser) {
1383
+ var create = function (file) {
1384
+ var script = locator.locate();
1385
+ return function (done) {
1386
+ browser.read(script, file, done);
1387
+ };
1388
+ };
1389
+
1390
+ return {
1391
+ create: create
1392
+ };
1393
+ }
1394
+ );module.bootstrap.deferred = def(
1395
+ [
1396
+ ephox.bolt.kernel.fp.array
1397
+ ],
1398
+
1399
+ function (ar) {
1400
+ var deferred = [];
1401
+
1402
+ var require = function (ids, fn) {
1403
+ var r = function (real) {
1404
+ real(ids, fn);
1405
+ };
1406
+ deferred.push(r);
1407
+ };
1408
+
1409
+ var configured = function (require) {
1410
+ ar.each(deferred, function (action) {
1411
+ action(require);
1412
+ });
1413
+ deferred = [];
1414
+ };
1415
+
1416
+ return {
1417
+ require: require,
1418
+ configured: configured
1419
+ };
1420
+ }
1421
+ );
1422
+ module.bootstrap.main = def(
1423
+ [
1424
+ ephox.bolt.kernel.api.config,
1425
+ module.bootstrap.deferred,
1426
+ module.runtime
1427
+ ],
1428
+
1429
+ function (config, deferred, runtime) {
1430
+ var main = function (id, args, configids, callback) {
1431
+ runtime.require(configids || [], function () {
1432
+ callback && callback.apply(null, arguments);
1433
+ runtime.require([ id ], function (module) {
1434
+ module.apply(null, args || []);
1435
+ });
1436
+ });
1437
+ };
1438
+
1439
+ return {
1440
+ main: main
1441
+ };
1442
+ }
1443
+ );
1444
+ module.bootstrap.install = def(
1445
+ [
1446
+ ephox.bolt.kernel.api.config,
1447
+ module.bootstrap.deferred,
1448
+ module.bootstrap.main,
1449
+ module.runtime,
1450
+ module.error.error
1451
+ ],
1452
+
1453
+ function (config, deferred, main, runtime, error) {
1454
+ var notready = function () { throw 'bolt not initialised, can not call define or demand, did you mean to use require or main?'; };
1455
+
1456
+ var install = function (reader, builtins, load, loadscript) {
1457
+ runtime.define = notready;
1458
+ runtime.demand = notready;
1459
+ runtime.require = deferred.require;
1460
+ runtime.main = main.main;
1461
+ runtime.load = load;
1462
+ runtime.loadscript = loadscript;
1463
+
1464
+ reader(function (configuration) {
1465
+ var bolt = config.configure(configuration, builtins, error.die);
1466
+ runtime.define = bolt.define;
1467
+ runtime.require = bolt.require;
1468
+ runtime.demand = bolt.demand;
1469
+
1470
+ deferred.configured(runtime.require);
1471
+ });
1472
+ };
1473
+
1474
+ return {
1475
+ install: install
1476
+ };
1477
+ }
1478
+ );
1479
+
1480
+ })(Function('return this')());
1481
+ (function (global) {
1482
+ var obj = ephox.bolt.kernel.fp.object;
1483
+ var api = ephox.bolt.module.api;
1484
+ var builtins = ephox.bolt.module.config.builtins.browser;
1485
+ var install = ephox.bolt.module.bootstrap.install;
1486
+ var reader = ephox.bolt.module.bootstrap.configloader.create("browser.js");
1487
+ var transport = ephox.bolt.loader.transporter.xhr.request;
1488
+ var script = ephox.bolt.loader.api.scripttag.load;
1489
+ install.install(reader, builtins, transport, script);
1490
+ obj.merge(global, api);
1491
+ })(Function("return this;")());