diff options
| author | Ben Beltran <ben@nsovocal.com> | 2015-07-10 11:12:25 -0500 |
|---|---|---|
| committer | Ben Beltran <ben@nsovocal.com> | 2015-07-10 11:12:25 -0500 |
| commit | 24c7594d62d8d7fbbcdb64b11ce4adc5d8e6991a (patch) | |
| tree | ded312222bb108923da1820ba40b04d710d20e5b /atom/packages/ex-mode/node_modules/space-pen/lib | |
| parent | eb786e82d170e2abc351a432ade616d6ecdeeb6b (diff) | |
Adds atom
Diffstat (limited to 'atom/packages/ex-mode/node_modules/space-pen/lib')
| -rw-r--r-- | atom/packages/ex-mode/node_modules/space-pen/lib/space-pen.js | 634 |
1 files changed, 634 insertions, 0 deletions
diff --git a/atom/packages/ex-mode/node_modules/space-pen/lib/space-pen.js b/atom/packages/ex-mode/node_modules/space-pen/lib/space-pen.js new file mode 100644 index 0000000..f8ed4ba --- /dev/null +++ b/atom/packages/ex-mode/node_modules/space-pen/lib/space-pen.js @@ -0,0 +1,634 @@ +(function() { + var $, Builder, CustomElementPrototype, Events, Grim, JQueryEventAdd, SelfClosingTags, Tags, View, docEl, exports, idCounter, jQuery, matches, matchesSelector, registerElement, _, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + __slice = [].slice; + + if (typeof require === 'function') { + _ = require('underscore-plus'); + $ = jQuery = require('jquery'); + Grim = require('grim'); + } else { + _ = window._, jQuery = window.jQuery; + $ = jQuery; + } + + Tags = 'a abbr address article aside audio b bdi bdo blockquote body button canvas\ + caption cite code colgroup datalist dd del details dfn dialog div dl dt em\ + fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 head header html i\ + iframe ins kbd label legend li main map mark menu meter nav noscript object\ + ol optgroup option output p pre progress q rp rt ruby s samp script section\ + select small span strong style sub summary sup table tbody td textarea tfoot\ + th thead time title tr u ul var video area base br col command embed hr img\ + input keygen link meta param source track wbr'.split(/\s+/); + + SelfClosingTags = {}; + + 'area base br col command embed hr img input keygen link meta param\ + source track wbr'.split(/\s+/).forEach(function(tag) { + return SelfClosingTags[tag] = true; + }); + + Events = 'blur change click dblclick error focus input keydown\ + keypress keyup load mousedown mousemove mouseout mouseover\ + mouseup resize scroll select submit unload'.split(/\s+/); + + docEl = document.documentElement; + + matches = docEl.matchesSelector || docEl.mozMatchesSelector || docEl.webkitMatchesSelector || docEl.oMatchesSelector || docEl.msMatchesSelector; + + matchesSelector = matches ? (function(elem, selector) { + return matches.call(elem[0], selector); + }) : (function(elem, selector) { + return elem.is(selector); + }); + + idCounter = 0; + + CustomElementPrototype = Object.create(HTMLElement.prototype); + + CustomElementPrototype.attachedCallback = function() { + return typeof this.attached === "function" ? this.attached() : void 0; + }; + + CustomElementPrototype.detachedCallback = function() { + return typeof this.detached === "function" ? this.detached() : void 0; + }; + + if (window.__spacePenCustomElements == null) { + window.__spacePenCustomElements = {}; + } + + registerElement = function(tagName) { + var customTagName, _base; + customTagName = "space-pen-" + tagName; + if ((_base = window.__spacePenCustomElements)[customTagName] == null) { + _base[customTagName] = typeof document.registerElement === "function" ? document.registerElement(customTagName, { + prototype: Object.create(CustomElementPrototype), + "extends": tagName + }) : void 0; + } + return customTagName; + }; + + View = (function(_super) { + __extends(View, _super); + + View.builderStack = null; + + Tags.forEach(function(tagName) { + return View[tagName] = function() { + var args, _ref; + args = 1 <= arguments.length ? __slice.call(arguments, 0) : []; + return (_ref = this.currentBuilder).tag.apply(_ref, [tagName].concat(__slice.call(args))); + }; + }); + + View.subview = function(name, view) { + return this.currentBuilder.subview(name, view); + }; + + View.text = function(string) { + return this.currentBuilder.text(string); + }; + + View.tag = function() { + var args, tagName, _ref; + tagName = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : []; + return (_ref = this.currentBuilder).tag.apply(_ref, [tagName].concat(__slice.call(args))); + }; + + View.raw = function(string) { + return this.currentBuilder.raw(string); + }; + + View.pushBuilder = function() { + var builder; + builder = new Builder; + if (this.builderStack == null) { + this.builderStack = []; + } + this.builderStack.push(builder); + return this.currentBuilder = builder; + }; + + View.popBuilder = function() { + this.currentBuilder = this.builderStack[this.builderStack.length - 2]; + return this.builderStack.pop(); + }; + + View.buildHtml = function(fn) { + var html, postProcessingSteps, _ref; + this.pushBuilder(); + fn.call(this); + return _ref = this.popBuilder().buildHtml(), html = _ref[0], postProcessingSteps = _ref[1], _ref; + }; + + View.render = function(fn) { + var div, fragment, html, postProcessingSteps, step, _i, _len, _ref; + _ref = this.buildHtml(fn), html = _ref[0], postProcessingSteps = _ref[1]; + div = document.createElement('div'); + div.innerHTML = html; + fragment = $(div.childNodes); + for (_i = 0, _len = postProcessingSteps.length; _i < _len; _i++) { + step = postProcessingSteps[_i]; + step(fragment); + } + return fragment; + }; + + View.prototype.element = null; + + function View() { + var args, element, html, postProcessingSteps, step, treeWalker, _i, _len, _ref, + _this = this; + args = 1 <= arguments.length ? __slice.call(arguments, 0) : []; + if (typeof this.afterAttach === 'function') { + throw new Error("The ::afterAttach hook has been replaced by ::attached. See https://github.com/atom/space-pen#attacheddetached-hooks for details."); + } + if (typeof this.beforeRemove === 'function') { + throw new Error("The ::beforeRemove hook has been replaced by ::detached. See https://github.com/atom/space-pen#attacheddetached-hooks for details."); + } + if (this.element != null) { + jQuery.fn.init.call(this, this.element); + } else { + _ref = this.constructor.buildHtml(function() { + return this.content.apply(this, args); + }), html = _ref[0], postProcessingSteps = _ref[1]; + jQuery.fn.init.call(this, html); + if (this.length !== 1) { + throw new Error("View markup must have a single root element"); + } + this.element = this[0]; + this.element.attached = function() { + return typeof _this.attached === "function" ? _this.attached() : void 0; + }; + this.element.detached = function() { + return typeof _this.detached === "function" ? _this.detached() : void 0; + }; + } + this.wireOutlets(this); + this.bindEventHandlers(this); + this.element.spacePenView = this; + treeWalker = document.createTreeWalker(this.element, NodeFilter.SHOW_ELEMENT); + while (element = treeWalker.nextNode()) { + element.spacePenView = this; + } + if (postProcessingSteps != null) { + for (_i = 0, _len = postProcessingSteps.length; _i < _len; _i++) { + step = postProcessingSteps[_i]; + step(this); + } + } + if (typeof this.initialize === "function") { + this.initialize.apply(this, args); + } + } + + View.prototype.buildHtml = function(params) { + var html, postProcessingSteps, _ref; + this.constructor.builder = new Builder; + this.constructor.content(params); + _ref = this.constructor.builder.buildHtml(), html = _ref[0], postProcessingSteps = _ref[1]; + this.constructor.builder = null; + return postProcessingSteps; + }; + + View.prototype.wireOutlets = function(view) { + var element, outlet, _i, _len, _ref; + _ref = view[0].querySelectorAll('[outlet]'); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + element = _ref[_i]; + outlet = element.getAttribute('outlet'); + view[outlet] = $(element); + element.removeAttribute('outlet'); + } + return void 0; + }; + + View.prototype.bindEventHandlers = function(view) { + var element, eventName, methodName, selector, _fn, _i, _j, _len, _len1, _ref; + for (_i = 0, _len = Events.length; _i < _len; _i++) { + eventName = Events[_i]; + selector = "[" + eventName + "]"; + _ref = view[0].querySelectorAll(selector); + _fn = function(element) { + var methodName; + methodName = element.getAttribute(eventName); + element = $(element); + return element.on(eventName, function(event) { + return view[methodName](event, element); + }); + }; + for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) { + element = _ref[_j]; + _fn(element); + } + if (matchesSelector(view, selector)) { + methodName = view[0].getAttribute(eventName); + (function(methodName) { + return view.on(eventName, function(event) { + return view[methodName](event, view); + }); + })(methodName); + } + } + return void 0; + }; + + View.prototype.pushStack = function(elems) { + var ret; + ret = jQuery.merge(jQuery(), elems); + ret.prevObject = this; + ret.context = this.context; + return ret; + }; + + View.prototype.end = function() { + var _ref; + return (_ref = this.prevObject) != null ? _ref : jQuery(null); + }; + + View.prototype.preempt = function(eventName, handler) { + return View.__super__.preempt.call(this, eventName, handler); + }; + + return View; + + })(jQuery); + + Builder = (function() { + function Builder() { + this.document = []; + this.postProcessingSteps = []; + } + + Builder.prototype.buildHtml = function() { + return [this.document.join(''), this.postProcessingSteps]; + }; + + Builder.prototype.tag = function() { + var args, name, options; + name = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : []; + options = this.extractOptions(args); + this.openTag(name, options.attributes); + if (SelfClosingTags.hasOwnProperty(name)) { + if ((options.text != null) || (options.content != null)) { + throw new Error("Self-closing tag " + name + " cannot have text or content"); + } + } else { + if (typeof options.content === "function") { + options.content(); + } + if (options.text) { + this.text(options.text); + } + return this.closeTag(name); + } + }; + + Builder.prototype.openTag = function(name, attributes) { + var attributeName, attributePairs, attributesString, value; + if (this.document.length === 0) { + if (attributes == null) { + attributes = {}; + } + if (attributes.is == null) { + attributes.is = registerElement(name); + } + } + attributePairs = (function() { + var _results; + _results = []; + for (attributeName in attributes) { + value = attributes[attributeName]; + _results.push("" + attributeName + "=\"" + value + "\""); + } + return _results; + })(); + attributesString = attributePairs.length ? " " + attributePairs.join(" ") : ""; + return this.document.push("<" + name + attributesString + ">"); + }; + + Builder.prototype.closeTag = function(name) { + return this.document.push("</" + name + ">"); + }; + + Builder.prototype.text = function(string) { + var escapedString; + escapedString = string.replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, ''').replace(/</g, '<').replace(/>/g, '>'); + return this.document.push(escapedString); + }; + + Builder.prototype.raw = function(string) { + return this.document.push(string); + }; + + Builder.prototype.subview = function(outletName, subview) { + var subviewId; + subviewId = "subview-" + (++idCounter); + this.tag('div', { + id: subviewId + }); + return this.postProcessingSteps.push(function(view) { + view[outletName] = subview; + subview.parentView = view; + return view.find("div#" + subviewId).replaceWith(subview); + }); + }; + + Builder.prototype.extractOptions = function(args) { + var arg, options, _i, _len; + options = {}; + for (_i = 0, _len = args.length; _i < _len; _i++) { + arg = args[_i]; + switch (typeof arg) { + case 'function': + options.content = arg; + break; + case 'string': + case 'number': + options.text = arg.toString(); + break; + default: + options.attributes = arg; + } + } + return options; + }; + + return Builder; + + })(); + + $.fn.view = function() { + var element, viewConstructorName; + if (element = this[0]) { + if ((element.__spacePenView != null) && !element.__allowViewAccess) { + viewConstructorName = element.__spacePenView.constructor.name; + if (Grim != null) { + Grim.deprecate("Accessing `" + viewConstructorName + "` via `$::view()` is deprecated. Use the raw DOM node or underlying model object instead."); + } + } + return element.spacePenView; + } + }; + + $.fn.views = function() { + return this.toArray().map(function(elt) { + var $elt, _ref; + $elt = $(elt); + return (_ref = $elt.view()) != null ? _ref : $elt; + }); + }; + + $.fn.containingView = function() { + var element, view; + element = this[0]; + while (element != null) { + if (view = element.spacePenView) { + return view; + } + element = element.parentNode; + } + }; + + $.fn.scrollBottom = function(newValue) { + if (newValue != null) { + return this.scrollTop(newValue - this.height()); + } else { + return this.scrollTop() + this.height(); + } + }; + + $.fn.scrollDown = function() { + return this.scrollTop(this.scrollTop() + $(window).height() / 20); + }; + + $.fn.scrollUp = function() { + return this.scrollTop(this.scrollTop() - $(window).height() / 20); + }; + + $.fn.scrollToTop = function() { + return this.scrollTop(0); + }; + + $.fn.scrollToBottom = function() { + return this.scrollTop(this.prop('scrollHeight')); + }; + + $.fn.scrollRight = function(newValue) { + if (newValue != null) { + return this.scrollLeft(newValue - this.width()); + } else { + return this.scrollLeft() + this.width(); + } + }; + + $.fn.pageUp = function() { + return this.scrollTop(this.scrollTop() - this.height()); + }; + + $.fn.pageDown = function() { + return this.scrollTop(this.scrollTop() + this.height()); + }; + + $.fn.isOnDom = function() { + return this.closest(document.body).length === 1; + }; + + $.fn.isVisible = function() { + return !this.isHidden(); + }; + + $.fn.isHidden = function() { + var style; + style = this[0].style; + if (style.display === 'none' || !this.isOnDom()) { + return true; + } else if (style.display) { + return false; + } else { + return getComputedStyle(this[0]).display === 'none'; + } + }; + + $.fn.isDisabled = function() { + return !!this.attr('disabled'); + }; + + $.fn.enable = function() { + return this.removeAttr('disabled'); + }; + + $.fn.disable = function() { + return this.attr('disabled', 'disabled'); + }; + + $.fn.insertAt = function(index, element) { + var target; + target = this.children(":eq(" + index + ")"); + if (target.length) { + return $(element).insertBefore(target); + } else { + return this.append(element); + } + }; + + $.fn.removeAt = function(index) { + return this.children(":eq(" + index + ")").remove(); + }; + + $.fn.indexOf = function(child) { + return this.children().toArray().indexOf($(child)[0]); + }; + + $.fn.containsElement = function(element) { + return (element[0].compareDocumentPosition(this[0]) & 8) === 8; + }; + + $.fn.preempt = function(eventName, handler) { + var eventNameWithoutNamespace, handlers, wrappedHandler, _ref, + _this = this; + wrappedHandler = function() { + var args, e; + e = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : []; + if (handler.apply(null, [e].concat(__slice.call(args))) === false) { + return e.stopImmediatePropagation(); + } + }; + this.on(eventName, wrappedHandler); + eventNameWithoutNamespace = eventName.split('.')[0]; + handlers = (_ref = this.handlers()[eventNameWithoutNamespace]) != null ? _ref : []; + handlers.unshift(handlers.pop()); + return { + off: function() { + return _this.off(eventName, wrappedHandler); + } + }; + }; + + $.fn.handlers = function(eventName) { + var handlers, _ref, _ref1; + handlers = this.length ? (_ref = $._data(this[0], 'events')) != null ? _ref : {} : {}; + if (arguments.length === 1) { + handlers = (_ref1 = handlers[eventName]) != null ? _ref1 : []; + } + return handlers; + }; + + $.fn.hasParent = function() { + return this.parent()[0] != null; + }; + + $.fn.hasFocus = function() { + return this.is(':focus') || this.is(':has(:focus)'); + }; + + $.fn.flashError = function() { + var removeErrorClass, + _this = this; + this.addClass('error'); + removeErrorClass = function() { + return _this.removeClass('error'); + }; + return window.setTimeout(removeErrorClass, 300); + }; + + $.fn.trueHeight = function() { + return this[0].getBoundingClientRect().height; + }; + + $.fn.trueWidth = function() { + return this[0].getBoundingClientRect().width; + }; + + $.fn.iconSize = function(size) { + return this.width(size).height(size).css('font-size', size); + }; + + $.fn.intValue = function() { + return parseInt(this.text()); + }; + + $.Event.prototype.abortKeyBinding = function() {}; + + $.Event.prototype.currentTargetView = function() { + return $(this.currentTarget).containingView(); + }; + + $.Event.prototype.targetView = function() { + return $(this.target).containingView(); + }; + + View.prototype.subscribe = function() { + var message, _ref; + message = "The `::subscribe` method is no longer available on SpacePen views.\n\n"; + if (arguments.length === 1) { + message += "To store multiple subscription objects for later disposal, add them to a\n`CompositeDisposable` instance (https://atom.io/docs/api/v0.150.0/CompositeDisposable)\nand call `.dispose()` on it explicitly in this view's `::detached` hook."; + } else { + if ((_ref = arguments[0]) != null ? _ref.jquery : void 0) { + message += "To subscribe to events on a jQuery object, use the traditional `::on` and\n`::off methods`."; + } else { + message += "To subscribe to events on an Atom object, use an explicit event-subscription\nmethod (starting with ::onDid* or ::onWill*).\n\nTo collect multiple subscription objects for later disposal, add them to a\n`CompositeDisposable` instance:\nhttps://atom.io/docs/api/v0.150.0/CompositeDisposable\n\nCall `.dispose()` on your `CompositeDisposable` in this view's `::detached` hook."; + } + } + throw new Error(message); + }; + + View.prototype.subscribeToCommand = function() { + throw new Error("The `::subscribeToCommand` method is no longer available on SpacePen views.\"\n\nPlease subscribe to commands via `atom.commands.add`:\nhttps://atom.io/docs/api/latest/CommandRegistry#instance-add\n\nCollect the returned subscription objects in a CompositeDisposable:\nhttps://atom.io/docs/api/latest/CompositeDisposable\n\nCall `.dispose()` on your `CompositeDisposable` in this view's `::detached` hook."); + }; + + $.fn.command = function(eventName, handler) { + throw new Error("The `::command` method is no longer available on SpacePen views.\"\n\nPlease subscribe to commands via `atom.commands.add`:\nhttps://atom.io/docs/api/latest/CommandRegistry#instance-add\n\nCollect the returned subscription objects in a CompositeDisposable:\nhttps://atom.io/docs/api/latest/CompositeDisposable\n\nCall `.dispose()` on your `CompositeDisposable` in this view's `::detached` hook."); + }; + + JQueryEventAdd = jQuery.event.add; + + jQuery.event.add = function(elem, types, handler, data, selector) { + if (/\:/.test(types)) { + if (Grim != null) { + Grim.deprecate("Are you trying to listen for the '" + types + "' Atom command with `jQuery::on`?\n`jQuery::trigger` can no longer be used to listen for Atom commands. Please\nuse `atom.commands.add` instead. See the docs at\nhttps://atom.io/docs/api/latest/CommandRegistry#instance-add for details."); + } + } + return JQueryEventAdd.call(this, elem, types, handler, data, selector); + }; + + if ($.fn.originalTrigger == null) { + $.fn.originalTrigger = $.fn.trigger; + $.fn.trigger = function(eventName, data) { + if (typeof eventName === 'string' && /\:/.test(eventName) && (eventName !== 'cursor:moved' && eventName !== 'selection:changed' && eventName !== 'editor:display-updated')) { + if (Grim != null) { + Grim.deprecate("Are you trying to dispatch the '" + eventName + "' Atom command with `jQuery::trigger`?\n`jQuery::trigger` can no longer emit Atom commands as it will not correctly route\nthe command to its handlers. Please use `atom.commands.dispatch` instead.\nSee the docs at https://atom.io/docs/api/latest/CommandRegistry#instance-dispatch\nfor details."); + } + } + return this.originalTrigger(eventName, data); + }; + } + + $.fn.setTooltip = function() { + throw new Error("setTooltip is no longer available. Please use `atom.tooltips.add` instead.\nSee the docs at https://atom.io/docs/api/latest/TooltipManager#instance-add"); + }; + + $.fn.destroyTooltip = $.fn.hideTooltip = function() { + throw new Error("destroyTooltip is no longer available. Please dispose the object returned\nfrom `atom.tooltips.add` instead.\nSee the docs at https://atom.io/docs/api/latest/TooltipManager#instance-add"); + }; + + exports = exports != null ? exports : this; + + exports.View = View; + + exports.jQuery = jQuery; + + exports.$ = $; + + exports.$$ = function(fn) { + return View.render.call(View, fn); + }; + + exports.$$$ = function(fn) { + return View.buildHtml.call(View, fn)[0]; + }; + +}).call(this); |