]>
Commit | Line | Data |
---|---|---|
1 | (function() { | |
2 | var $, Builder, CustomElementPrototype, Events, Grim, JQueryEventAdd, SelfClosingTags, Tags, View, docEl, exports, idCounter, jQuery, matches, matchesSelector, registerElement, _, | |
3 | __hasProp = {}.hasOwnProperty, | |
4 | __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; }, | |
5 | __slice = [].slice; | |
6 | ||
7 | if (typeof require === 'function') { | |
8 | _ = require('underscore-plus'); | |
9 | $ = jQuery = require('jquery'); | |
10 | Grim = require('grim'); | |
11 | } else { | |
12 | _ = window._, jQuery = window.jQuery; | |
13 | $ = jQuery; | |
14 | } | |
15 | ||
16 | Tags = 'a abbr address article aside audio b bdi bdo blockquote body button canvas\ | |
17 | caption cite code colgroup datalist dd del details dfn dialog div dl dt em\ | |
18 | fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 head header html i\ | |
19 | iframe ins kbd label legend li main map mark menu meter nav noscript object\ | |
20 | ol optgroup option output p pre progress q rp rt ruby s samp script section\ | |
21 | select small span strong style sub summary sup table tbody td textarea tfoot\ | |
22 | th thead time title tr u ul var video area base br col command embed hr img\ | |
23 | input keygen link meta param source track wbr'.split(/\s+/); | |
24 | ||
25 | SelfClosingTags = {}; | |
26 | ||
27 | 'area base br col command embed hr img input keygen link meta param\ | |
28 | source track wbr'.split(/\s+/).forEach(function(tag) { | |
29 | return SelfClosingTags[tag] = true; | |
30 | }); | |
31 | ||
32 | Events = 'blur change click dblclick error focus input keydown\ | |
33 | keypress keyup load mousedown mousemove mouseout mouseover\ | |
34 | mouseup resize scroll select submit unload'.split(/\s+/); | |
35 | ||
36 | docEl = document.documentElement; | |
37 | ||
38 | matches = docEl.matchesSelector || docEl.mozMatchesSelector || docEl.webkitMatchesSelector || docEl.oMatchesSelector || docEl.msMatchesSelector; | |
39 | ||
40 | matchesSelector = matches ? (function(elem, selector) { | |
41 | return matches.call(elem[0], selector); | |
42 | }) : (function(elem, selector) { | |
43 | return elem.is(selector); | |
44 | }); | |
45 | ||
46 | idCounter = 0; | |
47 | ||
48 | CustomElementPrototype = Object.create(HTMLElement.prototype); | |
49 | ||
50 | CustomElementPrototype.attachedCallback = function() { | |
51 | return typeof this.attached === "function" ? this.attached() : void 0; | |
52 | }; | |
53 | ||
54 | CustomElementPrototype.detachedCallback = function() { | |
55 | return typeof this.detached === "function" ? this.detached() : void 0; | |
56 | }; | |
57 | ||
58 | if (window.__spacePenCustomElements == null) { | |
59 | window.__spacePenCustomElements = {}; | |
60 | } | |
61 | ||
62 | registerElement = function(tagName) { | |
63 | var customTagName, _base; | |
64 | customTagName = "space-pen-" + tagName; | |
65 | if ((_base = window.__spacePenCustomElements)[customTagName] == null) { | |
66 | _base[customTagName] = typeof document.registerElement === "function" ? document.registerElement(customTagName, { | |
67 | prototype: Object.create(CustomElementPrototype), | |
68 | "extends": tagName | |
69 | }) : void 0; | |
70 | } | |
71 | return customTagName; | |
72 | }; | |
73 | ||
74 | View = (function(_super) { | |
75 | __extends(View, _super); | |
76 | ||
77 | View.builderStack = null; | |
78 | ||
79 | Tags.forEach(function(tagName) { | |
80 | return View[tagName] = function() { | |
81 | var args, _ref; | |
82 | args = 1 <= arguments.length ? __slice.call(arguments, 0) : []; | |
83 | return (_ref = this.currentBuilder).tag.apply(_ref, [tagName].concat(__slice.call(args))); | |
84 | }; | |
85 | }); | |
86 | ||
87 | View.subview = function(name, view) { | |
88 | return this.currentBuilder.subview(name, view); | |
89 | }; | |
90 | ||
91 | View.text = function(string) { | |
92 | return this.currentBuilder.text(string); | |
93 | }; | |
94 | ||
95 | View.tag = function() { | |
96 | var args, tagName, _ref; | |
97 | tagName = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : []; | |
98 | return (_ref = this.currentBuilder).tag.apply(_ref, [tagName].concat(__slice.call(args))); | |
99 | }; | |
100 | ||
101 | View.raw = function(string) { | |
102 | return this.currentBuilder.raw(string); | |
103 | }; | |
104 | ||
105 | View.pushBuilder = function() { | |
106 | var builder; | |
107 | builder = new Builder; | |
108 | if (this.builderStack == null) { | |
109 | this.builderStack = []; | |
110 | } | |
111 | this.builderStack.push(builder); | |
112 | return this.currentBuilder = builder; | |
113 | }; | |
114 | ||
115 | View.popBuilder = function() { | |
116 | this.currentBuilder = this.builderStack[this.builderStack.length - 2]; | |
117 | return this.builderStack.pop(); | |
118 | }; | |
119 | ||
120 | View.buildHtml = function(fn) { | |
121 | var html, postProcessingSteps, _ref; | |
122 | this.pushBuilder(); | |
123 | fn.call(this); | |
124 | return _ref = this.popBuilder().buildHtml(), html = _ref[0], postProcessingSteps = _ref[1], _ref; | |
125 | }; | |
126 | ||
127 | View.render = function(fn) { | |
128 | var div, fragment, html, postProcessingSteps, step, _i, _len, _ref; | |
129 | _ref = this.buildHtml(fn), html = _ref[0], postProcessingSteps = _ref[1]; | |
130 | div = document.createElement('div'); | |
131 | div.innerHTML = html; | |
132 | fragment = $(div.childNodes); | |
133 | for (_i = 0, _len = postProcessingSteps.length; _i < _len; _i++) { | |
134 | step = postProcessingSteps[_i]; | |
135 | step(fragment); | |
136 | } | |
137 | return fragment; | |
138 | }; | |
139 | ||
140 | View.prototype.element = null; | |
141 | ||
142 | function View() { | |
143 | var args, element, html, postProcessingSteps, step, treeWalker, _i, _len, _ref, | |
144 | _this = this; | |
145 | args = 1 <= arguments.length ? __slice.call(arguments, 0) : []; | |
146 | if (typeof this.afterAttach === 'function') { | |
147 | throw new Error("The ::afterAttach hook has been replaced by ::attached. See https://github.com/atom/space-pen#attacheddetached-hooks for details."); | |
148 | } | |
149 | if (typeof this.beforeRemove === 'function') { | |
150 | throw new Error("The ::beforeRemove hook has been replaced by ::detached. See https://github.com/atom/space-pen#attacheddetached-hooks for details."); | |
151 | } | |
152 | if (this.element != null) { | |
153 | jQuery.fn.init.call(this, this.element); | |
154 | } else { | |
155 | _ref = this.constructor.buildHtml(function() { | |
156 | return this.content.apply(this, args); | |
157 | }), html = _ref[0], postProcessingSteps = _ref[1]; | |
158 | jQuery.fn.init.call(this, html); | |
159 | if (this.length !== 1) { | |
160 | throw new Error("View markup must have a single root element"); | |
161 | } | |
162 | this.element = this[0]; | |
163 | this.element.attached = function() { | |
164 | return typeof _this.attached === "function" ? _this.attached() : void 0; | |
165 | }; | |
166 | this.element.detached = function() { | |
167 | return typeof _this.detached === "function" ? _this.detached() : void 0; | |
168 | }; | |
169 | } | |
170 | this.wireOutlets(this); | |
171 | this.bindEventHandlers(this); | |
172 | this.element.spacePenView = this; | |
173 | treeWalker = document.createTreeWalker(this.element, NodeFilter.SHOW_ELEMENT); | |
174 | while (element = treeWalker.nextNode()) { | |
175 | element.spacePenView = this; | |
176 | } | |
177 | if (postProcessingSteps != null) { | |
178 | for (_i = 0, _len = postProcessingSteps.length; _i < _len; _i++) { | |
179 | step = postProcessingSteps[_i]; | |
180 | step(this); | |
181 | } | |
182 | } | |
183 | if (typeof this.initialize === "function") { | |
184 | this.initialize.apply(this, args); | |
185 | } | |
186 | } | |
187 | ||
188 | View.prototype.buildHtml = function(params) { | |
189 | var html, postProcessingSteps, _ref; | |
190 | this.constructor.builder = new Builder; | |
191 | this.constructor.content(params); | |
192 | _ref = this.constructor.builder.buildHtml(), html = _ref[0], postProcessingSteps = _ref[1]; | |
193 | this.constructor.builder = null; | |
194 | return postProcessingSteps; | |
195 | }; | |
196 | ||
197 | View.prototype.wireOutlets = function(view) { | |
198 | var element, outlet, _i, _len, _ref; | |
199 | _ref = view[0].querySelectorAll('[outlet]'); | |
200 | for (_i = 0, _len = _ref.length; _i < _len; _i++) { | |
201 | element = _ref[_i]; | |
202 | outlet = element.getAttribute('outlet'); | |
203 | view[outlet] = $(element); | |
204 | element.removeAttribute('outlet'); | |
205 | } | |
206 | return void 0; | |
207 | }; | |
208 | ||
209 | View.prototype.bindEventHandlers = function(view) { | |
210 | var element, eventName, methodName, selector, _fn, _i, _j, _len, _len1, _ref; | |
211 | for (_i = 0, _len = Events.length; _i < _len; _i++) { | |
212 | eventName = Events[_i]; | |
213 | selector = "[" + eventName + "]"; | |
214 | _ref = view[0].querySelectorAll(selector); | |
215 | _fn = function(element) { | |
216 | var methodName; | |
217 | methodName = element.getAttribute(eventName); | |
218 | element = $(element); | |
219 | return element.on(eventName, function(event) { | |
220 | return view[methodName](event, element); | |
221 | }); | |
222 | }; | |
223 | for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) { | |
224 | element = _ref[_j]; | |
225 | _fn(element); | |
226 | } | |
227 | if (matchesSelector(view, selector)) { | |
228 | methodName = view[0].getAttribute(eventName); | |
229 | (function(methodName) { | |
230 | return view.on(eventName, function(event) { | |
231 | return view[methodName](event, view); | |
232 | }); | |
233 | })(methodName); | |
234 | } | |
235 | } | |
236 | return void 0; | |
237 | }; | |
238 | ||
239 | View.prototype.pushStack = function(elems) { | |
240 | var ret; | |
241 | ret = jQuery.merge(jQuery(), elems); | |
242 | ret.prevObject = this; | |
243 | ret.context = this.context; | |
244 | return ret; | |
245 | }; | |
246 | ||
247 | View.prototype.end = function() { | |
248 | var _ref; | |
249 | return (_ref = this.prevObject) != null ? _ref : jQuery(null); | |
250 | }; | |
251 | ||
252 | View.prototype.preempt = function(eventName, handler) { | |
253 | return View.__super__.preempt.call(this, eventName, handler); | |
254 | }; | |
255 | ||
256 | return View; | |
257 | ||
258 | })(jQuery); | |
259 | ||
260 | Builder = (function() { | |
261 | function Builder() { | |
262 | this.document = []; | |
263 | this.postProcessingSteps = []; | |
264 | } | |
265 | ||
266 | Builder.prototype.buildHtml = function() { | |
267 | return [this.document.join(''), this.postProcessingSteps]; | |
268 | }; | |
269 | ||
270 | Builder.prototype.tag = function() { | |
271 | var args, name, options; | |
272 | name = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : []; | |
273 | options = this.extractOptions(args); | |
274 | this.openTag(name, options.attributes); | |
275 | if (SelfClosingTags.hasOwnProperty(name)) { | |
276 | if ((options.text != null) || (options.content != null)) { | |
277 | throw new Error("Self-closing tag " + name + " cannot have text or content"); | |
278 | } | |
279 | } else { | |
280 | if (typeof options.content === "function") { | |
281 | options.content(); | |
282 | } | |
283 | if (options.text) { | |
284 | this.text(options.text); | |
285 | } | |
286 | return this.closeTag(name); | |
287 | } | |
288 | }; | |
289 | ||
290 | Builder.prototype.openTag = function(name, attributes) { | |
291 | var attributeName, attributePairs, attributesString, value; | |
292 | if (this.document.length === 0) { | |
293 | if (attributes == null) { | |
294 | attributes = {}; | |
295 | } | |
296 | if (attributes.is == null) { | |
297 | attributes.is = registerElement(name); | |
298 | } | |
299 | } | |
300 | attributePairs = (function() { | |
301 | var _results; | |
302 | _results = []; | |
303 | for (attributeName in attributes) { | |
304 | value = attributes[attributeName]; | |
305 | _results.push("" + attributeName + "=\"" + value + "\""); | |
306 | } | |
307 | return _results; | |
308 | })(); | |
309 | attributesString = attributePairs.length ? " " + attributePairs.join(" ") : ""; | |
310 | return this.document.push("<" + name + attributesString + ">"); | |
311 | }; | |
312 | ||
313 | Builder.prototype.closeTag = function(name) { | |
314 | return this.document.push("</" + name + ">"); | |
315 | }; | |
316 | ||
317 | Builder.prototype.text = function(string) { | |
318 | var escapedString; | |
319 | escapedString = string.replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, ''').replace(/</g, '<').replace(/>/g, '>'); | |
320 | return this.document.push(escapedString); | |
321 | }; | |
322 | ||
323 | Builder.prototype.raw = function(string) { | |
324 | return this.document.push(string); | |
325 | }; | |
326 | ||
327 | Builder.prototype.subview = function(outletName, subview) { | |
328 | var subviewId; | |
329 | subviewId = "subview-" + (++idCounter); | |
330 | this.tag('div', { | |
331 | id: subviewId | |
332 | }); | |
333 | return this.postProcessingSteps.push(function(view) { | |
334 | view[outletName] = subview; | |
335 | subview.parentView = view; | |
336 | return view.find("div#" + subviewId).replaceWith(subview); | |
337 | }); | |
338 | }; | |
339 | ||
340 | Builder.prototype.extractOptions = function(args) { | |
341 | var arg, options, _i, _len; | |
342 | options = {}; | |
343 | for (_i = 0, _len = args.length; _i < _len; _i++) { | |
344 | arg = args[_i]; | |
345 | switch (typeof arg) { | |
346 | case 'function': | |
347 | options.content = arg; | |
348 | break; | |
349 | case 'string': | |
350 | case 'number': | |
351 | options.text = arg.toString(); | |
352 | break; | |
353 | default: | |
354 | options.attributes = arg; | |
355 | } | |
356 | } | |
357 | return options; | |
358 | }; | |
359 | ||
360 | return Builder; | |
361 | ||
362 | })(); | |
363 | ||
364 | $.fn.view = function() { | |
365 | var element, viewConstructorName; | |
366 | if (element = this[0]) { | |
367 | if ((element.__spacePenView != null) && !element.__allowViewAccess) { | |
368 | viewConstructorName = element.__spacePenView.constructor.name; | |
369 | if (Grim != null) { | |
370 | Grim.deprecate("Accessing `" + viewConstructorName + "` via `$::view()` is deprecated. Use the raw DOM node or underlying model object instead."); | |
371 | } | |
372 | } | |
373 | return element.spacePenView; | |
374 | } | |
375 | }; | |
376 | ||
377 | $.fn.views = function() { | |
378 | return this.toArray().map(function(elt) { | |
379 | var $elt, _ref; | |
380 | $elt = $(elt); | |
381 | return (_ref = $elt.view()) != null ? _ref : $elt; | |
382 | }); | |
383 | }; | |
384 | ||
385 | $.fn.containingView = function() { | |
386 | var element, view; | |
387 | element = this[0]; | |
388 | while (element != null) { | |
389 | if (view = element.spacePenView) { | |
390 | return view; | |
391 | } | |
392 | element = element.parentNode; | |
393 | } | |
394 | }; | |
395 | ||
396 | $.fn.scrollBottom = function(newValue) { | |
397 | if (newValue != null) { | |
398 | return this.scrollTop(newValue - this.height()); | |
399 | } else { | |
400 | return this.scrollTop() + this.height(); | |
401 | } | |
402 | }; | |
403 | ||
404 | $.fn.scrollDown = function() { | |
405 | return this.scrollTop(this.scrollTop() + $(window).height() / 20); | |
406 | }; | |
407 | ||
408 | $.fn.scrollUp = function() { | |
409 | return this.scrollTop(this.scrollTop() - $(window).height() / 20); | |
410 | }; | |
411 | ||
412 | $.fn.scrollToTop = function() { | |
413 | return this.scrollTop(0); | |
414 | }; | |
415 | ||
416 | $.fn.scrollToBottom = function() { | |
417 | return this.scrollTop(this.prop('scrollHeight')); | |
418 | }; | |
419 | ||
420 | $.fn.scrollRight = function(newValue) { | |
421 | if (newValue != null) { | |
422 | return this.scrollLeft(newValue - this.width()); | |
423 | } else { | |
424 | return this.scrollLeft() + this.width(); | |
425 | } | |
426 | }; | |
427 | ||
428 | $.fn.pageUp = function() { | |
429 | return this.scrollTop(this.scrollTop() - this.height()); | |
430 | }; | |
431 | ||
432 | $.fn.pageDown = function() { | |
433 | return this.scrollTop(this.scrollTop() + this.height()); | |
434 | }; | |
435 | ||
436 | $.fn.isOnDom = function() { | |
437 | return this.closest(document.body).length === 1; | |
438 | }; | |
439 | ||
440 | $.fn.isVisible = function() { | |
441 | return !this.isHidden(); | |
442 | }; | |
443 | ||
444 | $.fn.isHidden = function() { | |
445 | var style; | |
446 | style = this[0].style; | |
447 | if (style.display === 'none' || !this.isOnDom()) { | |
448 | return true; | |
449 | } else if (style.display) { | |
450 | return false; | |
451 | } else { | |
452 | return getComputedStyle(this[0]).display === 'none'; | |
453 | } | |
454 | }; | |
455 | ||
456 | $.fn.isDisabled = function() { | |
457 | return !!this.attr('disabled'); | |
458 | }; | |
459 | ||
460 | $.fn.enable = function() { | |
461 | return this.removeAttr('disabled'); | |
462 | }; | |
463 | ||
464 | $.fn.disable = function() { | |
465 | return this.attr('disabled', 'disabled'); | |
466 | }; | |
467 | ||
468 | $.fn.insertAt = function(index, element) { | |
469 | var target; | |
470 | target = this.children(":eq(" + index + ")"); | |
471 | if (target.length) { | |
472 | return $(element).insertBefore(target); | |
473 | } else { | |
474 | return this.append(element); | |
475 | } | |
476 | }; | |
477 | ||
478 | $.fn.removeAt = function(index) { | |
479 | return this.children(":eq(" + index + ")").remove(); | |
480 | }; | |
481 | ||
482 | $.fn.indexOf = function(child) { | |
483 | return this.children().toArray().indexOf($(child)[0]); | |
484 | }; | |
485 | ||
486 | $.fn.containsElement = function(element) { | |
487 | return (element[0].compareDocumentPosition(this[0]) & 8) === 8; | |
488 | }; | |
489 | ||
490 | $.fn.preempt = function(eventName, handler) { | |
491 | var eventNameWithoutNamespace, handlers, wrappedHandler, _ref, | |
492 | _this = this; | |
493 | wrappedHandler = function() { | |
494 | var args, e; | |
495 | e = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : []; | |
496 | if (handler.apply(null, [e].concat(__slice.call(args))) === false) { | |
497 | return e.stopImmediatePropagation(); | |
498 | } | |
499 | }; | |
500 | this.on(eventName, wrappedHandler); | |
501 | eventNameWithoutNamespace = eventName.split('.')[0]; | |
502 | handlers = (_ref = this.handlers()[eventNameWithoutNamespace]) != null ? _ref : []; | |
503 | handlers.unshift(handlers.pop()); | |
504 | return { | |
505 | off: function() { | |
506 | return _this.off(eventName, wrappedHandler); | |
507 | } | |
508 | }; | |
509 | }; | |
510 | ||
511 | $.fn.handlers = function(eventName) { | |
512 | var handlers, _ref, _ref1; | |
513 | handlers = this.length ? (_ref = $._data(this[0], 'events')) != null ? _ref : {} : {}; | |
514 | if (arguments.length === 1) { | |
515 | handlers = (_ref1 = handlers[eventName]) != null ? _ref1 : []; | |
516 | } | |
517 | return handlers; | |
518 | }; | |
519 | ||
520 | $.fn.hasParent = function() { | |
521 | return this.parent()[0] != null; | |
522 | }; | |
523 | ||
524 | $.fn.hasFocus = function() { | |
525 | return this.is(':focus') || this.is(':has(:focus)'); | |
526 | }; | |
527 | ||
528 | $.fn.flashError = function() { | |
529 | var removeErrorClass, | |
530 | _this = this; | |
531 | this.addClass('error'); | |
532 | removeErrorClass = function() { | |
533 | return _this.removeClass('error'); | |
534 | }; | |
535 | return window.setTimeout(removeErrorClass, 300); | |
536 | }; | |
537 | ||
538 | $.fn.trueHeight = function() { | |
539 | return this[0].getBoundingClientRect().height; | |
540 | }; | |
541 | ||
542 | $.fn.trueWidth = function() { | |
543 | return this[0].getBoundingClientRect().width; | |
544 | }; | |
545 | ||
546 | $.fn.iconSize = function(size) { | |
547 | return this.width(size).height(size).css('font-size', size); | |
548 | }; | |
549 | ||
550 | $.fn.intValue = function() { | |
551 | return parseInt(this.text()); | |
552 | }; | |
553 | ||
554 | $.Event.prototype.abortKeyBinding = function() {}; | |
555 | ||
556 | $.Event.prototype.currentTargetView = function() { | |
557 | return $(this.currentTarget).containingView(); | |
558 | }; | |
559 | ||
560 | $.Event.prototype.targetView = function() { | |
561 | return $(this.target).containingView(); | |
562 | }; | |
563 | ||
564 | View.prototype.subscribe = function() { | |
565 | var message, _ref; | |
566 | message = "The `::subscribe` method is no longer available on SpacePen views.\n\n"; | |
567 | if (arguments.length === 1) { | |
568 | 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."; | |
569 | } else { | |
570 | if ((_ref = arguments[0]) != null ? _ref.jquery : void 0) { | |
571 | message += "To subscribe to events on a jQuery object, use the traditional `::on` and\n`::off methods`."; | |
572 | } else { | |
573 | 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."; | |
574 | } | |
575 | } | |
576 | throw new Error(message); | |
577 | }; | |
578 | ||
579 | View.prototype.subscribeToCommand = function() { | |
580 | 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."); | |
581 | }; | |
582 | ||
583 | $.fn.command = function(eventName, handler) { | |
584 | 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."); | |
585 | }; | |
586 | ||
587 | JQueryEventAdd = jQuery.event.add; | |
588 | ||
589 | jQuery.event.add = function(elem, types, handler, data, selector) { | |
590 | if (/\:/.test(types)) { | |
591 | if (Grim != null) { | |
592 | 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."); | |
593 | } | |
594 | } | |
595 | return JQueryEventAdd.call(this, elem, types, handler, data, selector); | |
596 | }; | |
597 | ||
598 | if ($.fn.originalTrigger == null) { | |
599 | $.fn.originalTrigger = $.fn.trigger; | |
600 | $.fn.trigger = function(eventName, data) { | |
601 | if (typeof eventName === 'string' && /\:/.test(eventName) && (eventName !== 'cursor:moved' && eventName !== 'selection:changed' && eventName !== 'editor:display-updated')) { | |
602 | if (Grim != null) { | |
603 | 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."); | |
604 | } | |
605 | } | |
606 | return this.originalTrigger(eventName, data); | |
607 | }; | |
608 | } | |
609 | ||
610 | $.fn.setTooltip = function() { | |
611 | 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"); | |
612 | }; | |
613 | ||
614 | $.fn.destroyTooltip = $.fn.hideTooltip = function() { | |
615 | 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"); | |
616 | }; | |
617 | ||
618 | exports = exports != null ? exports : this; | |
619 | ||
620 | exports.View = View; | |
621 | ||
622 | exports.jQuery = jQuery; | |
623 | ||
624 | exports.$ = $; | |
625 | ||
626 | exports.$$ = function(fn) { | |
627 | return View.render.call(View, fn); | |
628 | }; | |
629 | ||
630 | exports.$$$ = function(fn) { | |
631 | return View.buildHtml.call(View, fn)[0]; | |
632 | }; | |
633 | ||
634 | }).call(this); |