| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- /* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of Ajax.org B.V. nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
- define(function(require, exports, module) {
- "use strict";
- var dom = require("ace/lib/dom");
- var event = require("ace/lib/event");
- var EditSession = require("ace/edit_session").EditSession;
- var UndoManager = require("ace/undomanager").UndoManager;
- var Renderer = require("ace/virtual_renderer").VirtualRenderer;
- var Editor = require("ace/editor").Editor;
- var MultiSelect = require("ace/multi_select").MultiSelect;
- exports.createEditor = function(el) {
- return new Editor(new Renderer(el));
- };
- exports.createSplitEditor = function(el) {
- if (typeof(el) == "string")
- el = document.getElementById(el);
- var e0 = document.createElement("div");
- var s = document.createElement("splitter");
- var e1 = document.createElement("div");
- el.appendChild(e0);
- el.appendChild(e1);
- el.appendChild(s);
- e0.style.position = e1.style.position = s.style.position = "absolute";
- el.style.position = "relative";
- var split = {$container: el};
- split.editor0 = split[0] = new Editor(new Renderer(e0));
- split.editor1 = split[1] = new Editor(new Renderer(e1));
- split.splitter = s;
- s.ratio = 0.5;
- split.resize = function resize(){
- var height = el.parentNode.clientHeight - el.offsetTop;
- var total = el.clientWidth;
- var w1 = total * s.ratio;
- var w2 = total * (1- s.ratio);
- s.style.left = w1 - 1 + "px";
- s.style.height = el.style.height = height + "px";
- var st0 = split[0].container.style;
- var st1 = split[1].container.style;
- st0.width = w1 + "px";
- st1.width = w2 + "px";
- st0.left = 0 + "px";
- st1.left = w1 + "px";
- st0.top = st1.top = "0px";
- st0.height = st1.height = height + "px";
- split[0].resize();
- split[1].resize();
- };
- split.onMouseDown = function(e) {
- var rect = el.getBoundingClientRect();
- var x = e.clientX;
- var y = e.clientY;
- var button = e.button;
- if (button !== 0) {
- return;
- }
- var onMouseMove = function(e) {
- x = e.clientX;
- y = e.clientY;
- };
- var onResizeEnd = function(e) {
- clearInterval(timerId);
- };
- var onResizeInterval = function() {
- s.ratio = (x - rect.left) / rect.width;
- split.resize();
- };
- event.capture(s, onMouseMove, onResizeEnd);
- var timerId = setInterval(onResizeInterval, 40);
- return e.preventDefault();
- };
- event.addListener(s, "mousedown", split.onMouseDown);
- event.addListener(window, "resize", split.resize);
- split.resize();
- return split;
- };
- /***************************/
- exports.stripLeadingComments = function(str) {
- if(str.slice(0,2)=='/*') {
- var j = str.indexOf('*/')+2;
- str = str.substr(j);
- }
- return str.trim() + "\n";
- };
- /***************************/
- exports.saveOption = function(el, val) {
- if (!el.onchange && !el.onclick)
- return;
- if ("checked" in el) {
- if (val !== undefined)
- el.checked = val;
- localStorage && localStorage.setItem(el.id, el.checked ? 1 : 0);
- }
- else {
- if (val !== undefined)
- el.value = val;
- localStorage && localStorage.setItem(el.id, el.value);
- }
- };
- exports.bindCheckbox = function(id, callback, noInit) {
- if (typeof id == "string")
- var el = document.getElementById(id);
- else {
- var el = id;
- id = el.id;
- }
- var el = document.getElementById(id);
- if (localStorage && localStorage.getItem(id))
- el.checked = localStorage.getItem(id) == "1";
- var onCheck = function() {
- callback(!!el.checked);
- exports.saveOption(el);
- };
- el.onclick = onCheck;
- noInit || onCheck();
- return el;
- };
- exports.bindDropdown = function(id, callback, noInit) {
- if (typeof id == "string")
- var el = document.getElementById(id);
- else {
- var el = id;
- id = el.id;
- }
- if (localStorage && localStorage.getItem(id))
- el.value = localStorage.getItem(id);
- var onChange = function() {
- callback(el.value);
- exports.saveOption(el);
- };
- el.onchange = onChange;
- noInit || onChange();
- };
- exports.fillDropdown = function(el, values) {
- if (typeof el == "string")
- el = document.getElementById(el);
- dropdown(values).forEach(function(e) {
- el.appendChild(e);
- });
- };
- function elt(tag, attributes, content) {
- var el = dom.createElement(tag);
- if (typeof content == "string") {
- el.appendChild(document.createTextNode(content));
- } else if (content) {
- content.forEach(function(ch) {
- el.appendChild(ch);
- });
- }
- for (var i in attributes)
- el.setAttribute(i, attributes[i]);
- return el;
- }
- function optgroup(values) {
- return values.map(function(item) {
- if (typeof item == "string")
- item = {name: item, caption: item};
- return elt("option", {value: item.value || item.name}, item.caption || item.desc);
- });
- }
- function dropdown(values) {
- if (Array.isArray(values))
- return optgroup(values);
- return Object.keys(values).map(function(i) {
- return elt("optgroup", {"label": i}, optgroup(values[i]));
- });
- }
- });
|