PageRenderTime 68ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 1ms

/libs/worker-css.js

https://github.com/creesch/reddit-moderator-toolbox
JavaScript | 8376 lines | 7922 code | 454 blank | 0 comment | 607 complexity | 170bcb7b1de6526e8487aeeb15a4766a MD5 | raw file
Possible License(s): Apache-2.0

Large files files are truncated, but you can click here to view the full file

  1. "no use strict";
  2. ;(function(window) {
  3. if (typeof window.window != "undefined" && window.document) {
  4. return;
  5. }
  6. window.console = function() {
  7. var msgs = Array.prototype.slice.call(arguments, 0);
  8. postMessage({type: "log", data: msgs});
  9. };
  10. window.console.error =
  11. window.console.warn =
  12. window.console.log =
  13. window.console.trace = window.console;
  14. window.window = window;
  15. window.ace = window;
  16. window.onerror = function(message, file, line, col, err) {
  17. console.error("Worker " + (err ? err.stack : message));
  18. };
  19. window.normalizeModule = function(parentId, moduleName) {
  20. if (moduleName.indexOf("!") !== -1) {
  21. var chunks = moduleName.split("!");
  22. return window.normalizeModule(parentId, chunks[0]) + "!" + window.normalizeModule(parentId, chunks[1]);
  23. }
  24. if (moduleName.charAt(0) == ".") {
  25. var base = parentId.split("/").slice(0, -1).join("/");
  26. moduleName = (base ? base + "/" : "") + moduleName;
  27. while(moduleName.indexOf(".") !== -1 && previous != moduleName) {
  28. var previous = moduleName;
  29. moduleName = moduleName.replace(/^\.\//, "").replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, "");
  30. }
  31. }
  32. return moduleName;
  33. };
  34. window.require = function(parentId, id) {
  35. if (!id) {
  36. id = parentId;
  37. parentId = null;
  38. }
  39. if (!id.charAt)
  40. throw new Error("worker.js require() accepts only (parentId, id) as arguments");
  41. id = window.normalizeModule(parentId, id);
  42. var module = window.require.modules[id];
  43. if (module) {
  44. if (!module.initialized) {
  45. module.initialized = true;
  46. module.exports = module.factory().exports;
  47. }
  48. return module.exports;
  49. }
  50. var chunks = id.split("/");
  51. if (!window.require.tlns)
  52. return console.log("unable to load " + id);
  53. chunks[0] = window.require.tlns[chunks[0]] || chunks[0];
  54. var path = chunks.join("/") + ".js";
  55. window.require.id = id;
  56. importScripts(path);
  57. return window.require(parentId, id);
  58. };
  59. window.require.modules = {};
  60. window.require.tlns = {};
  61. window.define = function(id, deps, factory) {
  62. if (arguments.length == 2) {
  63. factory = deps;
  64. if (typeof id != "string") {
  65. deps = id;
  66. id = window.require.id;
  67. }
  68. } else if (arguments.length == 1) {
  69. factory = id;
  70. deps = [];
  71. id = window.require.id;
  72. }
  73. if (!deps.length)
  74. deps = ['require', 'exports', 'module'];
  75. if (id.indexOf("text!") === 0)
  76. return;
  77. var req = function(childId) {
  78. return window.require(id, childId);
  79. };
  80. window.require.modules[id] = {
  81. exports: {},
  82. factory: function() {
  83. var module = this;
  84. var returnExports = factory.apply(this, deps.map(function(dep) {
  85. switch(dep) {
  86. case 'require': return req;
  87. case 'exports': return module.exports;
  88. case 'module': return module;
  89. default: return req(dep);
  90. }
  91. }));
  92. if (returnExports)
  93. module.exports = returnExports;
  94. return module;
  95. }
  96. };
  97. };
  98. window.define.amd = {};
  99. window.initBaseUrls = function initBaseUrls(topLevelNamespaces) {
  100. require.tlns = topLevelNamespaces;
  101. };
  102. window.initSender = function initSender() {
  103. var EventEmitter = window.require("ace/lib/event_emitter").EventEmitter;
  104. var oop = window.require("ace/lib/oop");
  105. var Sender = function() {};
  106. (function() {
  107. oop.implement(this, EventEmitter);
  108. this.callback = function(data, callbackId) {
  109. postMessage({
  110. type: "call",
  111. id: callbackId,
  112. data: data
  113. });
  114. };
  115. this.emit = function(name, data) {
  116. postMessage({
  117. type: "event",
  118. name: name,
  119. data: data
  120. });
  121. };
  122. }).call(Sender.prototype);
  123. return new Sender();
  124. };
  125. var main = window.main = null;
  126. var sender = window.sender = null;
  127. window.onmessage = function(e) {
  128. var msg = e.data;
  129. if (msg.command) {
  130. if (main[msg.command])
  131. main[msg.command].apply(main, msg.args);
  132. else
  133. throw new Error("Unknown command:" + msg.command);
  134. }
  135. else if (msg.init) {
  136. initBaseUrls(msg.tlns);
  137. require("ace/lib/es5-shim");
  138. sender = window.sender = initSender();
  139. var clazz = require(msg.module)[msg.classname];
  140. main = window.main = new clazz(sender);
  141. }
  142. else if (msg.event && sender) {
  143. sender._signal(msg.event, msg.data);
  144. }
  145. };
  146. })(this);
  147. ace.define('ace/mode/css_worker', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/worker/mirror', 'ace/mode/css/csslint'], function(require, exports, module) {
  148. var oop = require("../lib/oop");
  149. var lang = require("../lib/lang");
  150. var Mirror = require("../worker/mirror").Mirror;
  151. var CSSLint = require("./css/csslint").CSSLint;
  152. var Worker = exports.Worker = function(sender) {
  153. Mirror.call(this, sender);
  154. this.setTimeout(400);
  155. this.ruleset = null;
  156. this.setDisabledRules("ids");
  157. this.setInfoRules("adjoining-classes|qualified-headings|zero-units|gradients|import|outline-none");
  158. };
  159. oop.inherits(Worker, Mirror);
  160. (function() {
  161. this.setInfoRules = function(ruleNames) {
  162. if (typeof ruleNames == "string")
  163. ruleNames = ruleNames.split("|");
  164. this.infoRules = lang.arrayToMap(ruleNames);
  165. this.doc.getValue() && this.deferredUpdate.schedule(100);
  166. };
  167. this.setDisabledRules = function(ruleNames) {
  168. if (!ruleNames) {
  169. this.ruleset = null;
  170. } else {
  171. if (typeof ruleNames == "string")
  172. ruleNames = ruleNames.split("|");
  173. var all = {};
  174. CSSLint.getRules().forEach(function(x){
  175. all[x.id] = true;
  176. });
  177. ruleNames.forEach(function(x) {
  178. delete all[x];
  179. });
  180. this.ruleset = all;
  181. }
  182. this.doc.getValue() && this.deferredUpdate.schedule(100);
  183. };
  184. this.onUpdate = function() {
  185. var value = this.doc.getValue();
  186. if (!value)
  187. return this.sender.emit("csslint", []);
  188. var infoRules = this.infoRules;
  189. var result = CSSLint.verify(value, this.ruleset);
  190. this.sender.emit("csslint", result.messages.map(function(msg) {
  191. return {
  192. row: msg.line - 1,
  193. column: msg.col - 1,
  194. text: msg.message,
  195. type: infoRules[msg.rule.id] ? "info" : msg.type,
  196. rule: msg.rule.name
  197. }
  198. }));
  199. };
  200. }).call(Worker.prototype);
  201. });
  202. ace.define('ace/lib/oop', ['require', 'exports', 'module' ], function(require, exports, module) {
  203. exports.inherits = function(ctor, superCtor) {
  204. ctor.super_ = superCtor;
  205. ctor.prototype = Object.create(superCtor.prototype, {
  206. constructor: {
  207. value: ctor,
  208. enumerable: false,
  209. writable: true,
  210. configurable: true
  211. }
  212. });
  213. };
  214. exports.mixin = function(obj, mixin) {
  215. for (var key in mixin) {
  216. obj[key] = mixin[key];
  217. }
  218. return obj;
  219. };
  220. exports.implement = function(proto, mixin) {
  221. exports.mixin(proto, mixin);
  222. };
  223. });
  224. ace.define('ace/lib/lang', ['require', 'exports', 'module' ], function(require, exports, module) {
  225. exports.last = function(a) {
  226. return a[a.length - 1];
  227. };
  228. exports.stringReverse = function(string) {
  229. return string.split("").reverse().join("");
  230. };
  231. exports.stringRepeat = function (string, count) {
  232. var result = '';
  233. while (count > 0) {
  234. if (count & 1)
  235. result += string;
  236. if (count >>= 1)
  237. string += string;
  238. }
  239. return result;
  240. };
  241. var trimBeginRegexp = /^\s\s*/;
  242. var trimEndRegexp = /\s\s*$/;
  243. exports.stringTrimLeft = function (string) {
  244. return string.replace(trimBeginRegexp, '');
  245. };
  246. exports.stringTrimRight = function (string) {
  247. return string.replace(trimEndRegexp, '');
  248. };
  249. exports.copyObject = function(obj) {
  250. var copy = {};
  251. for (var key in obj) {
  252. copy[key] = obj[key];
  253. }
  254. return copy;
  255. };
  256. exports.copyArray = function(array){
  257. var copy = [];
  258. for (var i=0, l=array.length; i<l; i++) {
  259. if (array[i] && typeof array[i] == "object")
  260. copy[i] = this.copyObject( array[i] );
  261. else
  262. copy[i] = array[i];
  263. }
  264. return copy;
  265. };
  266. exports.deepCopy = function (obj) {
  267. if (typeof obj !== "object" || !obj)
  268. return obj;
  269. var cons = obj.constructor;
  270. if (cons === RegExp)
  271. return obj;
  272. var copy = cons();
  273. for (var key in obj) {
  274. if (typeof obj[key] === "object") {
  275. copy[key] = exports.deepCopy(obj[key]);
  276. } else {
  277. copy[key] = obj[key];
  278. }
  279. }
  280. return copy;
  281. };
  282. exports.arrayToMap = function(arr) {
  283. var map = {};
  284. for (var i=0; i<arr.length; i++) {
  285. map[arr[i]] = 1;
  286. }
  287. return map;
  288. };
  289. exports.createMap = function(props) {
  290. var map = Object.create(null);
  291. for (var i in props) {
  292. map[i] = props[i];
  293. }
  294. return map;
  295. };
  296. exports.arrayRemove = function(array, value) {
  297. for (var i = 0; i <= array.length; i++) {
  298. if (value === array[i]) {
  299. array.splice(i, 1);
  300. }
  301. }
  302. };
  303. exports.escapeRegExp = function(str) {
  304. return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');
  305. };
  306. exports.escapeHTML = function(str) {
  307. return str.replace(/&/g, "&#38;").replace(/"/g, "&#34;").replace(/'/g, "&#39;").replace(/</g, "&#60;");
  308. };
  309. exports.getMatchOffsets = function(string, regExp) {
  310. var matches = [];
  311. string.replace(regExp, function(str) {
  312. matches.push({
  313. offset: arguments[arguments.length-2],
  314. length: str.length
  315. });
  316. });
  317. return matches;
  318. };
  319. exports.deferredCall = function(fcn) {
  320. var timer = null;
  321. var callback = function() {
  322. timer = null;
  323. fcn();
  324. };
  325. var deferred = function(timeout) {
  326. deferred.cancel();
  327. timer = setTimeout(callback, timeout || 0);
  328. return deferred;
  329. };
  330. deferred.schedule = deferred;
  331. deferred.call = function() {
  332. this.cancel();
  333. fcn();
  334. return deferred;
  335. };
  336. deferred.cancel = function() {
  337. clearTimeout(timer);
  338. timer = null;
  339. return deferred;
  340. };
  341. deferred.isPending = function() {
  342. return timer;
  343. };
  344. return deferred;
  345. };
  346. exports.delayedCall = function(fcn, defaultTimeout) {
  347. var timer = null;
  348. var callback = function() {
  349. timer = null;
  350. fcn();
  351. };
  352. var _self = function(timeout) {
  353. if (timer == null)
  354. timer = setTimeout(callback, timeout || defaultTimeout);
  355. };
  356. _self.delay = function(timeout) {
  357. timer && clearTimeout(timer);
  358. timer = setTimeout(callback, timeout || defaultTimeout);
  359. };
  360. _self.schedule = _self;
  361. _self.call = function() {
  362. this.cancel();
  363. fcn();
  364. };
  365. _self.cancel = function() {
  366. timer && clearTimeout(timer);
  367. timer = null;
  368. };
  369. _self.isPending = function() {
  370. return timer;
  371. };
  372. return _self;
  373. };
  374. });
  375. ace.define('ace/lib/es5-shim', ['require', 'exports', 'module' ], function(require, exports, module) {
  376. function Empty() {}
  377. if (!Function.prototype.bind) {
  378. Function.prototype.bind = function bind(that) { // .length is 1
  379. var target = this;
  380. if (typeof target != "function") {
  381. throw new TypeError("Function.prototype.bind called on incompatible " + target);
  382. }
  383. var args = slice.call(arguments, 1); // for normal call
  384. var bound = function () {
  385. if (this instanceof bound) {
  386. var result = target.apply(
  387. this,
  388. args.concat(slice.call(arguments))
  389. );
  390. if (Object(result) === result) {
  391. return result;
  392. }
  393. return this;
  394. } else {
  395. return target.apply(
  396. that,
  397. args.concat(slice.call(arguments))
  398. );
  399. }
  400. };
  401. if(target.prototype) {
  402. Empty.prototype = target.prototype;
  403. bound.prototype = new Empty();
  404. Empty.prototype = null;
  405. }
  406. return bound;
  407. };
  408. }
  409. var call = Function.prototype.call;
  410. var prototypeOfArray = Array.prototype;
  411. var prototypeOfObject = Object.prototype;
  412. var slice = prototypeOfArray.slice;
  413. var _toString = call.bind(prototypeOfObject.toString);
  414. var owns = call.bind(prototypeOfObject.hasOwnProperty);
  415. var defineGetter;
  416. var defineSetter;
  417. var lookupGetter;
  418. var lookupSetter;
  419. var supportsAccessors;
  420. if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) {
  421. defineGetter = call.bind(prototypeOfObject.__defineGetter__);
  422. defineSetter = call.bind(prototypeOfObject.__defineSetter__);
  423. lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);
  424. lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);
  425. }
  426. if ([1,2].splice(0).length != 2) {
  427. if(function() { // test IE < 9 to splice bug - see issue #138
  428. function makeArray(l) {
  429. var a = new Array(l+2);
  430. a[0] = a[1] = 0;
  431. return a;
  432. }
  433. var array = [], lengthBefore;
  434. array.splice.apply(array, makeArray(20));
  435. array.splice.apply(array, makeArray(26));
  436. lengthBefore = array.length; //46
  437. array.splice(5, 0, "XXX"); // add one element
  438. lengthBefore + 1 == array.length
  439. if (lengthBefore + 1 == array.length) {
  440. return true;// has right splice implementation without bugs
  441. }
  442. }()) {//IE 6/7
  443. var array_splice = Array.prototype.splice;
  444. Array.prototype.splice = function(start, deleteCount) {
  445. if (!arguments.length) {
  446. return [];
  447. } else {
  448. return array_splice.apply(this, [
  449. start === void 0 ? 0 : start,
  450. deleteCount === void 0 ? (this.length - start) : deleteCount
  451. ].concat(slice.call(arguments, 2)))
  452. }
  453. };
  454. } else {//IE8
  455. Array.prototype.splice = function(pos, removeCount){
  456. var length = this.length;
  457. if (pos > 0) {
  458. if (pos > length)
  459. pos = length;
  460. } else if (pos == void 0) {
  461. pos = 0;
  462. } else if (pos < 0) {
  463. pos = Math.max(length + pos, 0);
  464. }
  465. if (!(pos+removeCount < length))
  466. removeCount = length - pos;
  467. var removed = this.slice(pos, pos+removeCount);
  468. var insert = slice.call(arguments, 2);
  469. var add = insert.length;
  470. if (pos === length) {
  471. if (add) {
  472. this.push.apply(this, insert);
  473. }
  474. } else {
  475. var remove = Math.min(removeCount, length - pos);
  476. var tailOldPos = pos + remove;
  477. var tailNewPos = tailOldPos + add - remove;
  478. var tailCount = length - tailOldPos;
  479. var lengthAfterRemove = length - remove;
  480. if (tailNewPos < tailOldPos) { // case A
  481. for (var i = 0; i < tailCount; ++i) {
  482. this[tailNewPos+i] = this[tailOldPos+i];
  483. }
  484. } else if (tailNewPos > tailOldPos) { // case B
  485. for (i = tailCount; i--; ) {
  486. this[tailNewPos+i] = this[tailOldPos+i];
  487. }
  488. } // else, add == remove (nothing to do)
  489. if (add && pos === lengthAfterRemove) {
  490. this.length = lengthAfterRemove; // truncate array
  491. this.push.apply(this, insert);
  492. } else {
  493. this.length = lengthAfterRemove + add; // reserves space
  494. for (i = 0; i < add; ++i) {
  495. this[pos+i] = insert[i];
  496. }
  497. }
  498. }
  499. return removed;
  500. };
  501. }
  502. }
  503. if (!Array.isArray) {
  504. Array.isArray = function isArray(obj) {
  505. return _toString(obj) == "[object Array]";
  506. };
  507. }
  508. var boxedString = Object("a"),
  509. splitString = boxedString[0] != "a" || !(0 in boxedString);
  510. if (!Array.prototype.forEach) {
  511. Array.prototype.forEach = function forEach(fun /*, thisp*/) {
  512. var object = toObject(this),
  513. self = splitString && _toString(this) == "[object String]" ?
  514. this.split("") :
  515. object,
  516. thisp = arguments[1],
  517. i = -1,
  518. length = self.length >>> 0;
  519. if (_toString(fun) != "[object Function]") {
  520. throw new TypeError(); // TODO message
  521. }
  522. while (++i < length) {
  523. if (i in self) {
  524. fun.call(thisp, self[i], i, object);
  525. }
  526. }
  527. };
  528. }
  529. if (!Array.prototype.map) {
  530. Array.prototype.map = function map(fun /*, thisp*/) {
  531. var object = toObject(this),
  532. self = splitString && _toString(this) == "[object String]" ?
  533. this.split("") :
  534. object,
  535. length = self.length >>> 0,
  536. result = Array(length),
  537. thisp = arguments[1];
  538. if (_toString(fun) != "[object Function]") {
  539. throw new TypeError(fun + " is not a function");
  540. }
  541. for (var i = 0; i < length; i++) {
  542. if (i in self)
  543. result[i] = fun.call(thisp, self[i], i, object);
  544. }
  545. return result;
  546. };
  547. }
  548. if (!Array.prototype.filter) {
  549. Array.prototype.filter = function filter(fun /*, thisp */) {
  550. var object = toObject(this),
  551. self = splitString && _toString(this) == "[object String]" ?
  552. this.split("") :
  553. object,
  554. length = self.length >>> 0,
  555. result = [],
  556. value,
  557. thisp = arguments[1];
  558. if (_toString(fun) != "[object Function]") {
  559. throw new TypeError(fun + " is not a function");
  560. }
  561. for (var i = 0; i < length; i++) {
  562. if (i in self) {
  563. value = self[i];
  564. if (fun.call(thisp, value, i, object)) {
  565. result.push(value);
  566. }
  567. }
  568. }
  569. return result;
  570. };
  571. }
  572. if (!Array.prototype.every) {
  573. Array.prototype.every = function every(fun /*, thisp */) {
  574. var object = toObject(this),
  575. self = splitString && _toString(this) == "[object String]" ?
  576. this.split("") :
  577. object,
  578. length = self.length >>> 0,
  579. thisp = arguments[1];
  580. if (_toString(fun) != "[object Function]") {
  581. throw new TypeError(fun + " is not a function");
  582. }
  583. for (var i = 0; i < length; i++) {
  584. if (i in self && !fun.call(thisp, self[i], i, object)) {
  585. return false;
  586. }
  587. }
  588. return true;
  589. };
  590. }
  591. if (!Array.prototype.some) {
  592. Array.prototype.some = function some(fun /*, thisp */) {
  593. var object = toObject(this),
  594. self = splitString && _toString(this) == "[object String]" ?
  595. this.split("") :
  596. object,
  597. length = self.length >>> 0,
  598. thisp = arguments[1];
  599. if (_toString(fun) != "[object Function]") {
  600. throw new TypeError(fun + " is not a function");
  601. }
  602. for (var i = 0; i < length; i++) {
  603. if (i in self && fun.call(thisp, self[i], i, object)) {
  604. return true;
  605. }
  606. }
  607. return false;
  608. };
  609. }
  610. if (!Array.prototype.reduce) {
  611. Array.prototype.reduce = function reduce(fun /*, initial*/) {
  612. var object = toObject(this),
  613. self = splitString && _toString(this) == "[object String]" ?
  614. this.split("") :
  615. object,
  616. length = self.length >>> 0;
  617. if (_toString(fun) != "[object Function]") {
  618. throw new TypeError(fun + " is not a function");
  619. }
  620. if (!length && arguments.length == 1) {
  621. throw new TypeError("reduce of empty array with no initial value");
  622. }
  623. var i = 0;
  624. var result;
  625. if (arguments.length >= 2) {
  626. result = arguments[1];
  627. } else {
  628. do {
  629. if (i in self) {
  630. result = self[i++];
  631. break;
  632. }
  633. if (++i >= length) {
  634. throw new TypeError("reduce of empty array with no initial value");
  635. }
  636. } while (true);
  637. }
  638. for (; i < length; i++) {
  639. if (i in self) {
  640. result = fun.call(void 0, result, self[i], i, object);
  641. }
  642. }
  643. return result;
  644. };
  645. }
  646. if (!Array.prototype.reduceRight) {
  647. Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {
  648. var object = toObject(this),
  649. self = splitString && _toString(this) == "[object String]" ?
  650. this.split("") :
  651. object,
  652. length = self.length >>> 0;
  653. if (_toString(fun) != "[object Function]") {
  654. throw new TypeError(fun + " is not a function");
  655. }
  656. if (!length && arguments.length == 1) {
  657. throw new TypeError("reduceRight of empty array with no initial value");
  658. }
  659. var result, i = length - 1;
  660. if (arguments.length >= 2) {
  661. result = arguments[1];
  662. } else {
  663. do {
  664. if (i in self) {
  665. result = self[i--];
  666. break;
  667. }
  668. if (--i < 0) {
  669. throw new TypeError("reduceRight of empty array with no initial value");
  670. }
  671. } while (true);
  672. }
  673. do {
  674. if (i in this) {
  675. result = fun.call(void 0, result, self[i], i, object);
  676. }
  677. } while (i--);
  678. return result;
  679. };
  680. }
  681. if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {
  682. Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {
  683. var self = splitString && _toString(this) == "[object String]" ?
  684. this.split("") :
  685. toObject(this),
  686. length = self.length >>> 0;
  687. if (!length) {
  688. return -1;
  689. }
  690. var i = 0;
  691. if (arguments.length > 1) {
  692. i = toInteger(arguments[1]);
  693. }
  694. i = i >= 0 ? i : Math.max(0, length + i);
  695. for (; i < length; i++) {
  696. if (i in self && self[i] === sought) {
  697. return i;
  698. }
  699. }
  700. return -1;
  701. };
  702. }
  703. if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {
  704. Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {
  705. var self = splitString && _toString(this) == "[object String]" ?
  706. this.split("") :
  707. toObject(this),
  708. length = self.length >>> 0;
  709. if (!length) {
  710. return -1;
  711. }
  712. var i = length - 1;
  713. if (arguments.length > 1) {
  714. i = Math.min(i, toInteger(arguments[1]));
  715. }
  716. i = i >= 0 ? i : length - Math.abs(i);
  717. for (; i >= 0; i--) {
  718. if (i in self && sought === self[i]) {
  719. return i;
  720. }
  721. }
  722. return -1;
  723. };
  724. }
  725. if (!Object.getPrototypeOf) {
  726. Object.getPrototypeOf = function getPrototypeOf(object) {
  727. return object.__proto__ || (
  728. object.constructor ?
  729. object.constructor.prototype :
  730. prototypeOfObject
  731. );
  732. };
  733. }
  734. if (!Object.getOwnPropertyDescriptor) {
  735. var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " +
  736. "non-object: ";
  737. Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {
  738. if ((typeof object != "object" && typeof object != "function") || object === null)
  739. throw new TypeError(ERR_NON_OBJECT + object);
  740. if (!owns(object, property))
  741. return;
  742. var descriptor, getter, setter;
  743. descriptor = { enumerable: true, configurable: true };
  744. if (supportsAccessors) {
  745. var prototype = object.__proto__;
  746. object.__proto__ = prototypeOfObject;
  747. var getter = lookupGetter(object, property);
  748. var setter = lookupSetter(object, property);
  749. object.__proto__ = prototype;
  750. if (getter || setter) {
  751. if (getter) descriptor.get = getter;
  752. if (setter) descriptor.set = setter;
  753. return descriptor;
  754. }
  755. }
  756. descriptor.value = object[property];
  757. return descriptor;
  758. };
  759. }
  760. if (!Object.getOwnPropertyNames) {
  761. Object.getOwnPropertyNames = function getOwnPropertyNames(object) {
  762. return Object.keys(object);
  763. };
  764. }
  765. if (!Object.create) {
  766. var createEmpty;
  767. if (Object.prototype.__proto__ === null) {
  768. createEmpty = function () {
  769. return { "__proto__": null };
  770. };
  771. } else {
  772. createEmpty = function () {
  773. var empty = {};
  774. for (var i in empty)
  775. empty[i] = null;
  776. empty.constructor =
  777. empty.hasOwnProperty =
  778. empty.propertyIsEnumerable =
  779. empty.isPrototypeOf =
  780. empty.toLocaleString =
  781. empty.toString =
  782. empty.valueOf =
  783. empty.__proto__ = null;
  784. return empty;
  785. }
  786. }
  787. Object.create = function create(prototype, properties) {
  788. var object;
  789. if (prototype === null) {
  790. object = createEmpty();
  791. } else {
  792. if (typeof prototype != "object")
  793. throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'");
  794. var Type = function () {};
  795. Type.prototype = prototype;
  796. object = new Type();
  797. object.__proto__ = prototype;
  798. }
  799. if (properties !== void 0)
  800. Object.defineProperties(object, properties);
  801. return object;
  802. };
  803. }
  804. function doesDefinePropertyWork(object) {
  805. try {
  806. Object.defineProperty(object, "sentinel", {});
  807. return "sentinel" in object;
  808. } catch (exception) {
  809. }
  810. }
  811. if (Object.defineProperty) {
  812. var definePropertyWorksOnObject = doesDefinePropertyWork({});
  813. var definePropertyWorksOnDom = typeof document == "undefined" ||
  814. doesDefinePropertyWork(document.createElement("div"));
  815. if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {
  816. var definePropertyFallback = Object.defineProperty;
  817. }
  818. }
  819. if (!Object.defineProperty || definePropertyFallback) {
  820. var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: ";
  821. var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: "
  822. var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " +
  823. "on this javascript engine";
  824. Object.defineProperty = function defineProperty(object, property, descriptor) {
  825. if ((typeof object != "object" && typeof object != "function") || object === null)
  826. throw new TypeError(ERR_NON_OBJECT_TARGET + object);
  827. if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null)
  828. throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);
  829. if (definePropertyFallback) {
  830. try {
  831. return definePropertyFallback.call(Object, object, property, descriptor);
  832. } catch (exception) {
  833. }
  834. }
  835. if (owns(descriptor, "value")) {
  836. if (supportsAccessors && (lookupGetter(object, property) ||
  837. lookupSetter(object, property)))
  838. {
  839. var prototype = object.__proto__;
  840. object.__proto__ = prototypeOfObject;
  841. delete object[property];
  842. object[property] = descriptor.value;
  843. object.__proto__ = prototype;
  844. } else {
  845. object[property] = descriptor.value;
  846. }
  847. } else {
  848. if (!supportsAccessors)
  849. throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);
  850. if (owns(descriptor, "get"))
  851. defineGetter(object, property, descriptor.get);
  852. if (owns(descriptor, "set"))
  853. defineSetter(object, property, descriptor.set);
  854. }
  855. return object;
  856. };
  857. }
  858. if (!Object.defineProperties) {
  859. Object.defineProperties = function defineProperties(object, properties) {
  860. for (var property in properties) {
  861. if (owns(properties, property))
  862. Object.defineProperty(object, property, properties[property]);
  863. }
  864. return object;
  865. };
  866. }
  867. if (!Object.seal) {
  868. Object.seal = function seal(object) {
  869. return object;
  870. };
  871. }
  872. if (!Object.freeze) {
  873. Object.freeze = function freeze(object) {
  874. return object;
  875. };
  876. }
  877. try {
  878. Object.freeze(function () {});
  879. } catch (exception) {
  880. Object.freeze = (function freeze(freezeObject) {
  881. return function freeze(object) {
  882. if (typeof object == "function") {
  883. return object;
  884. } else {
  885. return freezeObject(object);
  886. }
  887. };
  888. })(Object.freeze);
  889. }
  890. if (!Object.preventExtensions) {
  891. Object.preventExtensions = function preventExtensions(object) {
  892. return object;
  893. };
  894. }
  895. if (!Object.isSealed) {
  896. Object.isSealed = function isSealed(object) {
  897. return false;
  898. };
  899. }
  900. if (!Object.isFrozen) {
  901. Object.isFrozen = function isFrozen(object) {
  902. return false;
  903. };
  904. }
  905. if (!Object.isExtensible) {
  906. Object.isExtensible = function isExtensible(object) {
  907. if (Object(object) === object) {
  908. throw new TypeError(); // TODO message
  909. }
  910. var name = '';
  911. while (owns(object, name)) {
  912. name += '?';
  913. }
  914. object[name] = true;
  915. var returnValue = owns(object, name);
  916. delete object[name];
  917. return returnValue;
  918. };
  919. }
  920. if (!Object.keys) {
  921. var hasDontEnumBug = true,
  922. dontEnums = [
  923. "toString",
  924. "toLocaleString",
  925. "valueOf",
  926. "hasOwnProperty",
  927. "isPrototypeOf",
  928. "propertyIsEnumerable",
  929. "constructor"
  930. ],
  931. dontEnumsLength = dontEnums.length;
  932. for (var key in {"toString": null}) {
  933. hasDontEnumBug = false;
  934. }
  935. Object.keys = function keys(object) {
  936. if (
  937. (typeof object != "object" && typeof object != "function") ||
  938. object === null
  939. ) {
  940. throw new TypeError("Object.keys called on a non-object");
  941. }
  942. var keys = [];
  943. for (var name in object) {
  944. if (owns(object, name)) {
  945. keys.push(name);
  946. }
  947. }
  948. if (hasDontEnumBug) {
  949. for (var i = 0, ii = dontEnumsLength; i < ii; i++) {
  950. var dontEnum = dontEnums[i];
  951. if (owns(object, dontEnum)) {
  952. keys.push(dontEnum);
  953. }
  954. }
  955. }
  956. return keys;
  957. };
  958. }
  959. if (!Date.now) {
  960. Date.now = function now() {
  961. return new Date().getTime();
  962. };
  963. }
  964. var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" +
  965. "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" +
  966. "\u2029\uFEFF";
  967. if (!String.prototype.trim || ws.trim()) {
  968. ws = "[" + ws + "]";
  969. var trimBeginRegexp = new RegExp("^" + ws + ws + "*"),
  970. trimEndRegexp = new RegExp(ws + ws + "*$");
  971. String.prototype.trim = function trim() {
  972. return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, "");
  973. };
  974. }
  975. function toInteger(n) {
  976. n = +n;
  977. if (n !== n) { // isNaN
  978. n = 0;
  979. } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {
  980. n = (n > 0 || -1) * Math.floor(Math.abs(n));
  981. }
  982. return n;
  983. }
  984. function isPrimitive(input) {
  985. var type = typeof input;
  986. return (
  987. input === null ||
  988. type === "undefined" ||
  989. type === "boolean" ||
  990. type === "number" ||
  991. type === "string"
  992. );
  993. }
  994. function toPrimitive(input) {
  995. var val, valueOf, toString;
  996. if (isPrimitive(input)) {
  997. return input;
  998. }
  999. valueOf = input.valueOf;
  1000. if (typeof valueOf === "function") {
  1001. val = valueOf.call(input);
  1002. if (isPrimitive(val)) {
  1003. return val;
  1004. }
  1005. }
  1006. toString = input.toString;
  1007. if (typeof toString === "function") {
  1008. val = toString.call(input);
  1009. if (isPrimitive(val)) {
  1010. return val;
  1011. }
  1012. }
  1013. throw new TypeError();
  1014. }
  1015. var toObject = function (o) {
  1016. if (o == null) { // this matches both null and undefined
  1017. throw new TypeError("can't convert "+o+" to object");
  1018. }
  1019. return Object(o);
  1020. };
  1021. });
  1022. ace.define('ace/document', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter', 'ace/range', 'ace/anchor'], function(require, exports, module) {
  1023. var oop = require("./lib/oop");
  1024. var EventEmitter = require("./lib/event_emitter").EventEmitter;
  1025. var Range = require("./range").Range;
  1026. var Anchor = require("./anchor").Anchor;
  1027. var Document = function(text) {
  1028. this.$lines = [];
  1029. if (text.length === 0) {
  1030. this.$lines = [""];
  1031. } else if (Array.isArray(text)) {
  1032. this._insertLines(0, text);
  1033. } else {
  1034. this.insert({row: 0, column:0}, text);
  1035. }
  1036. };
  1037. (function() {
  1038. oop.implement(this, EventEmitter);
  1039. this.setValue = function(text) {
  1040. var len = this.getLength();
  1041. this.remove(new Range(0, 0, len, this.getLine(len-1).length));
  1042. this.insert({row: 0, column:0}, text);
  1043. };
  1044. this.getValue = function() {
  1045. return this.getAllLines().join(this.getNewLineCharacter());
  1046. };
  1047. this.createAnchor = function(row, column) {
  1048. return new Anchor(this, row, column);
  1049. };
  1050. if ("aaa".split(/a/).length === 0)
  1051. this.$split = function(text) {
  1052. return text.replace(/\r\n|\r/g, "\n").split("\n");
  1053. };
  1054. else
  1055. this.$split = function(text) {
  1056. return text.split(/\r\n|\r|\n/);
  1057. };
  1058. this.$detectNewLine = function(text) {
  1059. var match = text.match(/^.*?(\r\n|\r|\n)/m);
  1060. this.$autoNewLine = match ? match[1] : "\n";
  1061. this._signal("changeNewLineMode");
  1062. };
  1063. this.getNewLineCharacter = function() {
  1064. switch (this.$newLineMode) {
  1065. case "windows":
  1066. return "\r\n";
  1067. case "unix":
  1068. return "\n";
  1069. default:
  1070. return this.$autoNewLine || "\n";
  1071. }
  1072. };
  1073. this.$autoNewLine = "";
  1074. this.$newLineMode = "auto";
  1075. this.setNewLineMode = function(newLineMode) {
  1076. if (this.$newLineMode === newLineMode)
  1077. return;
  1078. this.$newLineMode = newLineMode;
  1079. this._signal("changeNewLineMode");
  1080. };
  1081. this.getNewLineMode = function() {
  1082. return this.$newLineMode;
  1083. };
  1084. this.isNewLine = function(text) {
  1085. return (text == "\r\n" || text == "\r" || text == "\n");
  1086. };
  1087. this.getLine = function(row) {
  1088. return this.$lines[row] || "";
  1089. };
  1090. this.getLines = function(firstRow, lastRow) {
  1091. return this.$lines.slice(firstRow, lastRow + 1);
  1092. };
  1093. this.getAllLines = function() {
  1094. return this.getLines(0, this.getLength());
  1095. };
  1096. this.getLength = function() {
  1097. return this.$lines.length;
  1098. };
  1099. this.getTextRange = function(range) {
  1100. if (range.start.row == range.end.row) {
  1101. return this.getLine(range.start.row)
  1102. .substring(range.start.column, range.end.column);
  1103. }
  1104. var lines = this.getLines(range.start.row, range.end.row);
  1105. lines[0] = (lines[0] || "").substring(range.start.column);
  1106. var l = lines.length - 1;
  1107. if (range.end.row - range.start.row == l)
  1108. lines[l] = lines[l].substring(0, range.end.column);
  1109. return lines.join(this.getNewLineCharacter());
  1110. };
  1111. this.$clipPosition = function(position) {
  1112. var length = this.getLength();
  1113. if (position.row >= length) {
  1114. position.row = Math.max(0, length - 1);
  1115. position.column = this.getLine(length-1).length;
  1116. } else if (position.row < 0)
  1117. position.row = 0;
  1118. return position;
  1119. };
  1120. this.insert = function(position, text) {
  1121. if (!text || text.length === 0)
  1122. return position;
  1123. position = this.$clipPosition(position);
  1124. if (this.getLength() <= 1)
  1125. this.$detectNewLine(text);
  1126. var lines = this.$split(text);
  1127. var firstLine = lines.splice(0, 1)[0];
  1128. var lastLine = lines.length == 0 ? null : lines.splice(lines.length - 1, 1)[0];
  1129. position = this.insertInLine(position, firstLine);
  1130. if (lastLine !== null) {
  1131. position = this.insertNewLine(position); // terminate first line
  1132. position = this._insertLines(position.row, lines);
  1133. position = this.insertInLine(position, lastLine || "");
  1134. }
  1135. return position;
  1136. };
  1137. this.insertLines = function(row, lines) {
  1138. if (row >= this.getLength())
  1139. return this.insert({row: row, column: 0}, "\n" + lines.join("\n"));
  1140. return this._insertLines(Math.max(row, 0), lines);
  1141. };
  1142. this._insertLines = function(row, lines) {
  1143. if (lines.length == 0)
  1144. return {row: row, column: 0};
  1145. while (lines.length > 0xF000) {
  1146. var end = this._insertLines(row, lines.slice(0, 0xF000));
  1147. lines = lines.slice(0xF000);
  1148. row = end.row;
  1149. }
  1150. var args = [row, 0];
  1151. args.push.apply(args, lines);
  1152. this.$lines.splice.apply(this.$lines, args);
  1153. var range = new Range(row, 0, row + lines.length, 0);
  1154. var delta = {
  1155. action: "insertLines",
  1156. range: range,
  1157. lines: lines
  1158. };
  1159. this._signal("change", { data: delta });
  1160. return range.end;
  1161. };
  1162. this.insertNewLine = function(position) {
  1163. position = this.$clipPosition(position);
  1164. var line = this.$lines[position.row] || "";
  1165. this.$lines[position.row] = line.substring(0, position.column);
  1166. this.$lines.splice(position.row + 1, 0, line.substring(position.column, line.length));
  1167. var end = {
  1168. row : position.row + 1,
  1169. column : 0
  1170. };
  1171. var delta = {
  1172. action: "insertText",
  1173. range: Range.fromPoints(position, end),
  1174. text: this.getNewLineCharacter()
  1175. };
  1176. this._signal("change", { data: delta });
  1177. return end;
  1178. };
  1179. this.insertInLine = function(position, text) {
  1180. if (text.length == 0)
  1181. return position;
  1182. var line = this.$lines[position.row] || "";
  1183. this.$lines[position.row] = line.substring(0, position.column) + text
  1184. + line.substring(position.column);
  1185. var end = {
  1186. row : position.row,
  1187. column : position.column + text.length
  1188. };
  1189. var delta = {
  1190. action: "insertText",
  1191. range: Range.fromPoints(position, end),
  1192. text: text
  1193. };
  1194. this._signal("change", { data: delta });
  1195. return end;
  1196. };
  1197. this.remove = function(range) {
  1198. if (!(range instanceof Range))
  1199. range = Range.fromPoints(range.start, range.end);
  1200. range.start = this.$clipPosition(range.start);
  1201. range.end = this.$clipPosition(range.end);
  1202. if (range.isEmpty())
  1203. return range.start;
  1204. var firstRow = range.start.row;
  1205. var lastRow = range.end.row;
  1206. if (range.isMultiLine()) {
  1207. var firstFullRow = range.start.column == 0 ? firstRow : firstRow + 1;
  1208. var lastFullRow = lastRow - 1;
  1209. if (range.end.column > 0)
  1210. this.removeInLine(lastRow, 0, range.end.column);
  1211. if (lastFullRow >= firstFullRow)
  1212. this._removeLines(firstFullRow, lastFullRow);
  1213. if (firstFullRow != firstRow) {
  1214. this.removeInLine(firstRow, range.start.column, this.getLine(firstRow).length);
  1215. this.removeNewLine(range.start.row);
  1216. }
  1217. }
  1218. else {
  1219. this.removeInLine(firstRow, range.start.column, range.end.column);
  1220. }
  1221. return range.start;
  1222. };
  1223. this.removeInLine = function(row, startColumn, endColumn) {
  1224. if (startColumn == endColumn)
  1225. return;
  1226. var range = new Range(row, startColumn, row, endColumn);
  1227. var line = this.getLine(row);
  1228. var removed = line.substring(startColumn, endColumn);
  1229. var newLine = line.substring(0, startColumn) + line.substring(endColumn, line.length);
  1230. this.$lines.splice(row, 1, newLine);
  1231. var delta = {
  1232. action: "removeText",
  1233. range: range,
  1234. text: removed
  1235. };
  1236. this._signal("change", { data: delta });
  1237. return range.start;
  1238. };
  1239. this.removeLines = function(firstRow, lastRow) {
  1240. if (firstRow < 0 || lastRow >= this.getLength())
  1241. return this.remove(new Range(firstRow, 0, lastRow + 1, 0));
  1242. return this._removeLines(firstRow, lastRow);
  1243. };
  1244. this._removeLines = function(firstRow, lastRow) {
  1245. var range = new Range(firstRow, 0, lastRow + 1, 0);
  1246. var removed = this.$lines.splice(firstRow, lastRow - firstRow + 1);
  1247. var delta = {
  1248. action: "removeLines",
  1249. range: range,
  1250. nl: this.getNewLineCharacter(),
  1251. lines: removed
  1252. };
  1253. this._signal("change", { data: delta });
  1254. return removed;
  1255. };
  1256. this.removeNewLine = function(row) {
  1257. var firstLine = this.getLine(row);
  1258. var secondLine = this.getLine(row+1);
  1259. var range = new Range(row, firstLine.length, row+1, 0);
  1260. var line = firstLine + secondLine;
  1261. this.$lines.splice(row, 2, line);
  1262. var delta = {
  1263. action: "removeText",
  1264. range: range,
  1265. text: this.getNewLineCharacter()
  1266. };
  1267. this._signal("change", { data: delta });
  1268. };
  1269. this.replace = function(range, text) {
  1270. if (!(range instanceof Range))
  1271. range = Range.fromPoints(range.start, range.end);
  1272. if (text.length == 0 && range.isEmpty())
  1273. return range.start;
  1274. if (text == this.getTextRange(range))
  1275. return range.end;
  1276. this.remove(range);
  1277. if (text) {
  1278. var end = this.insert(range.start, text);
  1279. }
  1280. else {
  1281. end = range.start;
  1282. }
  1283. return end;
  1284. };
  1285. this.applyDeltas = function(deltas) {
  1286. for (var i=0; i<deltas.length; i++) {
  1287. var delta = deltas[i];
  1288. var range = Range.fromPoints(delta.range.start, delta.range.end);
  1289. if (delta.action == "insertLines")
  1290. this.insertLines(range.start.row, delta.lines);
  1291. else if (delta.action == "insertText")
  1292. this.insert(range.start, delta.text);
  1293. else if (delta.action == "removeLines")
  1294. this._removeLines(range.start.row, range.end.row - 1);
  1295. else if (delta.action == "removeText")
  1296. this.remove(range);
  1297. }
  1298. };
  1299. this.revertDeltas = function(deltas) {
  1300. for (var i=deltas.length-1; i>=0; i--) {
  1301. var delta = deltas[i];
  1302. var range = Range.fromPoints(delta.range.start, delta.range.end);
  1303. if (delta.action == "insertLines")
  1304. this._removeLines(range.start.row, range.end.row - 1);
  1305. else if (delta.action == "insertText")
  1306. this.remove(range);
  1307. else if (delta.action == "removeLines")
  1308. this._insertLines(range.start.row, delta.lines);
  1309. else if (delta.action == "removeText")
  1310. this.insert(range.start, delta.text);
  1311. }
  1312. };
  1313. this.indexToPosition = function(index, startRow) {
  1314. var lines = this.$lines || this.getAllLines();
  1315. var newlineLength = this.getNewLineCharacter().length;
  1316. for (var i = startRow || 0, l = lines.length; i < l; i++) {
  1317. index -= lines[i].length + newlineLength;
  1318. if (index < 0)
  1319. return {row: i, column: index + lines[i].length + newlineLength};
  1320. }
  1321. return {row: l-1, column: lines[l-1].length};
  1322. };
  1323. this.positionToIndex = function(pos, startRow) {
  1324. var lines = this.$lines || this.getAllLines();
  1325. var newlineLength = this.getNewLineCharacter().length;
  1326. var index = 0;
  1327. var row = Math.min(pos.row, lines.length);
  1328. for (var i = startRow || 0; i < row; ++i)
  1329. index += lines[i].length + newlineLength;
  1330. return index + pos.column;
  1331. };
  1332. }).call(Document.prototype);
  1333. exports.Document = Document;
  1334. });
  1335. ace.define('ace/lib/event_emitter', ['require', 'exports', 'module' ], function(require, exports, module) {
  1336. var EventEmitter = {};
  1337. var stopPropagation = function() { this.propagationStopped = true; };
  1338. var preventDefault = function() { this.defaultPrevented = true; };
  1339. EventEmitter._emit =
  1340. EventEmitter._dispatchEvent = function(eventName, e) {
  1341. this._eventRegistry || (this._eventRegistry = {});
  1342. this._defaultHandlers || (this._defaultHandlers = {});
  1343. var listeners = this._eventRegistry[eventName] || [];
  1344. var defaultHandler = this._defaultHandlers[eventName];
  1345. if (!listeners.length && !defaultHandler)
  1346. return;
  1347. if (typeof e != "object" || !e)
  1348. e = {};
  1349. if (!e.type)
  1350. e.type = eventName;
  1351. if (!e.stopPropagation)
  1352. e.stopPropagation = stopPropagation;
  1353. if (!e.preventDefault)
  1354. e.preventDefault = preventDefault;
  1355. listeners = listeners.slice();
  1356. for (var i=0; i<listeners.length; i++) {
  1357. listeners[i](e, this);
  1358. if (e.propagationStopped)
  1359. break;
  1360. }
  1361. if (defaultHandler && !e.defaultPrevented)
  1362. return defaultHandler(e, this);
  1363. };
  1364. EventEmitter._signal = function(eventName, e) {
  1365. var listeners = (this._eventRegistry || {})[eventName];
  1366. if (!listeners)
  1367. return;
  1368. listeners = listeners.slice();
  1369. for (var i=0; i<listeners.length; i++)
  1370. listeners[i](e, this);
  1371. };
  1372. EventEmitter.once = function(eventName, callback) {
  1373. var _self = this;
  1374. callback && this.addEventListener(eventName, function newCallback() {
  1375. _self.removeEventListener(eventName, newCallback);
  1376. callback.apply(null, arguments);
  1377. });
  1378. };
  1379. EventEmitter.setDefaultHandler = function(eventName, callback) {
  1380. var handlers = this._defaultHandlers
  1381. if (!handlers)
  1382. handlers = this._defaultHandlers = {_disabled_: {}};
  1383. if (handlers[eventName]) {
  1384. var old = handlers[eventName];
  1385. var disabled = handlers._disabled_[eventName];
  1386. if (!disabled)
  1387. handlers._disabled_[eventName] = disabled = [];
  1388. disabled.push(old);
  1389. var i = disabled.indexOf(callback);
  1390. if (i != -1)
  1391. disabled.splice(i, 1);
  1392. }
  1393. handlers[eventName] = callback;
  1394. };
  1395. EventEmitter.removeDefaultHandler = function(eventName, callback) {
  1396. var handlers = this._defaultHandlers
  1397. if (!handlers)
  1398. return;
  1399. var disabled = handlers._disabled_[eventName];
  1400. if (handlers[eventName] == callback) {
  1401. var old = handlers[eventName];
  1402. if (disabled)
  1403. this.setDefaultHandler(eventName, disabled.pop());
  1404. } else if (disabled) {
  1405. var i = disabled.indexOf(callback);
  1406. if (i != -1)
  1407. disabled.splice(i, 1);
  1408. }
  1409. };
  1410. EventEmitter.on =
  1411. EventEmitter.addEventListener = function(eventName, callback, capturing) {
  1412. this._eventRegistry = this._eventRegistry || {};
  1413. var listeners = this._eventRegistry[eventName];
  1414. if (!listeners)
  1415. listeners = this._eventRegistry[eventName] = [];
  1416. if (listeners.indexOf(callback) == -1)
  1417. listeners[capturing ? "unshift" : "push"](callback);
  1418. return callback;
  1419. };
  1420. EventEmitter.off =
  1421. EventEmitter.removeListener =
  1422. EventEmitter.removeEventListener = function(eventName, callback) {
  1423. this._eventRegistry = this._eventRegistry || {};
  1424. var listeners = this._eventRegistry[eventName];
  1425. if (!listeners)
  1426. return;
  1427. var index = listeners.indexOf(callback);
  1428. if (index !== -1)
  1429. listeners.splice(index, 1);
  1430. };
  1431. EventEmitter.removeAllListeners = function(eventName) {
  1432. if (this._eventRegistry) this._eventRegistry[eventName] = [];
  1433. };
  1434. exports.EventEmitter = EventEmitter;
  1435. });
  1436. ace.define('ace/range', ['require', 'exports', 'module' ], function(require, exports, module) {
  1437. var comparePoints = function(p1, p2) {
  1438. return p1.row - p2.row || p1.column - p2.column;
  1439. };
  1440. var Range = function(startRow, startColumn, endRow, endColumn) {
  1441. this.start = {
  1442. row: startRow,
  1443. column: startColumn
  1444. };
  1445. this.end = {
  1446. row: endRow,
  1447. column: endColumn
  1448. };
  1449. };
  1450. (function() {
  1451. this.isEqual = function(range) {
  1452. return this.start.row === range.start.row &&
  1453. this.end.row === range.end.row &&
  1454. this.start.column === range.start.column &&
  1455. this.end.column === range.end.

Large files files are truncated, but you can click here to view the full file