capybara-ember-inspector 1.6.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +37 -0
  6. data/Rakefile +2 -0
  7. data/capybara-ember-inspector.gemspec +26 -0
  8. data/lib/capybara/ember/inspector.rb +12 -0
  9. data/lib/capybara/ember/inspector/extension/.gitignore +0 -0
  10. data/lib/capybara/ember/inspector/extension/background-script.js +74 -0
  11. data/lib/capybara/ember/inspector/extension/content-script.js +58 -0
  12. data/lib/capybara/ember/inspector/extension/devtools.html +24 -0
  13. data/lib/capybara/ember/inspector/extension/devtools.js +5 -0
  14. data/lib/capybara/ember/inspector/extension/ember_debug/ember_debug.js +3173 -0
  15. data/lib/capybara/ember/inspector/extension/images/arrow_down.svg +52 -0
  16. data/lib/capybara/ember/inspector/extension/images/calculate.svg +15 -0
  17. data/lib/capybara/ember/inspector/extension/images/ember-icon-final.png +0 -0
  18. data/lib/capybara/ember/inspector/extension/images/fishy_tomster.png +0 -0
  19. data/lib/capybara/ember/inspector/extension/images/hamster.png +0 -0
  20. data/lib/capybara/ember/inspector/extension/images/icon128.png +0 -0
  21. data/lib/capybara/ember/inspector/extension/images/icon16.png +0 -0
  22. data/lib/capybara/ember/inspector/extension/images/icon19.png +0 -0
  23. data/lib/capybara/ember/inspector/extension/images/icon38.png +0 -0
  24. data/lib/capybara/ember/inspector/extension/images/icon48.png +0 -0
  25. data/lib/capybara/ember/inspector/extension/images/send.png +0 -0
  26. data/lib/capybara/ember/inspector/extension/images/send_arrow.png +0 -0
  27. data/lib/capybara/ember/inspector/extension/images/tomster.png +0 -0
  28. data/lib/capybara/ember/inspector/extension/in-page-script.js +14 -0
  29. data/lib/capybara/ember/inspector/extension/manifest.json +39 -0
  30. data/lib/capybara/ember/inspector/extension/options.html +62 -0
  31. data/lib/capybara/ember/inspector/extension/options.js +26 -0
  32. data/lib/capybara/ember/inspector/extension/panes/ember_extension.css +1411 -0
  33. data/lib/capybara/ember/inspector/extension/panes/ember_extension.js +4687 -0
  34. data/lib/capybara/ember/inspector/extension/panes/index.html +17 -0
  35. data/lib/capybara/ember/inspector/extension/panes/start.js +3 -0
  36. data/lib/capybara/ember/inspector/extension/vendor/chrome-bootstrap.css +636 -0
  37. data/lib/capybara/ember/inspector/extension/vendor/ember.js +46943 -0
  38. data/lib/capybara/ember/inspector/extension/vendor/ember.prod.js +46498 -0
  39. data/lib/capybara/ember/inspector/extension/vendor/handlebars.js +2278 -0
  40. data/lib/capybara/ember/inspector/extension/vendor/jquery.js +9555 -0
  41. data/lib/capybara/ember/inspector/extension/vendor/list-view.prod.js +1437 -0
  42. data/lib/capybara/ember/inspector/extension/vendor/loader.js +41 -0
  43. data/lib/capybara/ember/inspector/extension/vendor/resolver.js +188 -0
  44. data/lib/capybara/ember/inspector/version.rb +7 -0
  45. metadata +158 -0
@@ -0,0 +1,4687 @@
1
+ define("adapters/basic",
2
+ ["exports"],
3
+ function(__exports__) {
4
+ "use strict";
5
+ /**
6
+ The adapter stores logic specific to
7
+ each environment.
8
+ Extend this object with env specific
9
+ code (such as chrome/firefox/test), then
10
+ set the `adapter` property to the name
11
+ of this adapter.
12
+
13
+ example:
14
+
15
+ ```javascript
16
+ var EmberExtension = App.create({
17
+ adapter: 'chrome'
18
+ })
19
+ ```
20
+ **/
21
+ var K = Ember.K;
22
+ __exports__["default"] = Ember.Object.extend({
23
+ name: 'basic',
24
+ /**
25
+ Used to send messages to EmberDebug
26
+
27
+ @param type {Object} the message to the send
28
+ **/
29
+ sendMessage: function(options) {},
30
+
31
+ /**
32
+ Register functions to be called
33
+ when a message from EmberDebug is received
34
+ **/
35
+ onMessageReceived: function(callback) {
36
+ this.get('_messageCallbacks').pushObject(callback);
37
+ },
38
+
39
+ _messageCallbacks: function() { return []; }.property(),
40
+
41
+ _messageReceived: function(message) {
42
+ this.get('_messageCallbacks').forEach(function(callback) {
43
+ callback.call(null, message);
44
+ });
45
+ },
46
+
47
+ // Called when the "Reload" is clicked by the user
48
+ willReload: K
49
+ });
50
+ });
51
+ define("adapters/bookmarklet",
52
+ ["adapters/basic","exports"],
53
+ function(__dependency1__, __exports__) {
54
+ "use strict";
55
+ var BasicAdapter = __dependency1__["default"];
56
+
57
+ var emberDebug = null;
58
+
59
+ __exports__["default"] = BasicAdapter.extend({
60
+ name: 'bookmarklet',
61
+
62
+ inspectedWindow: function() {
63
+ return window.opener || window.parent;
64
+ }.property(),
65
+
66
+ inspectedWindowURL: function() {
67
+ return loadPageVar('inspectedWindowURL');
68
+ }.property(),
69
+
70
+ sendMessage: function(options) {
71
+ options = options || {};
72
+ this.get('inspectedWindow').postMessage(options, this.get('inspectedWindowURL'));
73
+ },
74
+
75
+ _connect: function() {
76
+ var self = this;
77
+
78
+ window.addEventListener('message', function(e) {
79
+ var message = e.data;
80
+ if (e.origin !== self.get('inspectedWindowURL')) {
81
+ return;
82
+ }
83
+ // close inspector if inspected window is unloading
84
+ if (message && message.unloading) {
85
+ window.close();
86
+ }
87
+ if (message.from === 'inspectedWindow') {
88
+ self._messageReceived(message);
89
+ }
90
+ });
91
+ }.on('init'),
92
+ });
93
+
94
+ function loadPageVar (sVar) {
95
+ return decodeURI(window.location.search.replace(new RegExp("^(?:.*[&\\?]" + encodeURI(sVar).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1"));
96
+ }
97
+ });
98
+ define("adapters/chrome",
99
+ ["adapters/basic","exports"],
100
+ function(__dependency1__, __exports__) {
101
+ "use strict";
102
+ var BasicAdapter = __dependency1__["default"];
103
+
104
+ var emberDebug = null;
105
+
106
+ __exports__["default"] = BasicAdapter.extend({
107
+ name: 'chrome',
108
+
109
+ sendMessage: function(options) {
110
+ options = options || {};
111
+ this.get('_chromePort').postMessage(options);
112
+ },
113
+
114
+ _chromePort: function() {
115
+ return chrome.extension.connect();
116
+ }.property(),
117
+
118
+ _connect: function() {
119
+ var self = this;
120
+ var chromePort = this.get('_chromePort');
121
+ chromePort.postMessage({ appId: chrome.devtools.inspectedWindow.tabId });
122
+
123
+ chromePort.onMessage.addListener(function(message) {
124
+ if (typeof message.type === 'string' && message.type === 'iframes') {
125
+ sendIframes(message.urls);
126
+ }
127
+ self._messageReceived(message);
128
+ });
129
+ }.on('init'),
130
+
131
+ _handleReload: function() {
132
+ var self = this;
133
+ chrome.devtools.network.onNavigated.addListener(function() {
134
+ self._injectDebugger();
135
+ location.reload(true);
136
+ });
137
+ }.on('init'),
138
+
139
+ _injectDebugger: function() {
140
+ loadEmberDebug();
141
+ chrome.devtools.inspectedWindow.eval(emberDebug);
142
+ var urls = [];
143
+ chrome.devtools.inspectedWindow.onResourceAdded.addListener(function(opts) {
144
+ if (opts.type === 'document') {
145
+ sendIframes([opts.url]);
146
+ }
147
+ });
148
+ }.on('init'),
149
+
150
+ willReload: function() {
151
+ this._injectDebugger();
152
+ }
153
+ });
154
+
155
+ function sendIframes(urls) {
156
+ loadEmberDebug();
157
+ urls.forEach(function(url) {
158
+ chrome.devtools.inspectedWindow.eval(emberDebug, { frameURL: url });
159
+ });
160
+ }
161
+
162
+ function loadEmberDebug() {
163
+ var xhr;
164
+ if (!emberDebug) {
165
+ xhr = new XMLHttpRequest();
166
+ xhr.open("GET", chrome.extension.getURL('/ember_debug/ember_debug.js'), false);
167
+ xhr.send();
168
+ emberDebug = xhr.responseText;
169
+ }
170
+ }
171
+ });
172
+ define("adapters/firefox",
173
+ ["adapters/basic","exports"],
174
+ function(__dependency1__, __exports__) {
175
+ "use strict";
176
+ var BasicAdapter = __dependency1__["default"];
177
+
178
+ __exports__["default"] = BasicAdapter.extend({
179
+ name: 'firefox',
180
+
181
+ sendMessage: function(options) {
182
+ options = options || {};
183
+ window.parent.postMessage(options, "*");
184
+ },
185
+
186
+ _connect: function() {
187
+ // NOTE: chrome adapter sends a appId message on connect (not needed on firefox)
188
+ //this.sendMessage({ appId: "test" });
189
+ this._onMessage = this._onMessage.bind(this);
190
+ window.addEventListener("message", this._onMessage, false);
191
+
192
+ }.on('init'),
193
+
194
+ _onMessage: function (evt) {
195
+ if (this.isDestroyed || this.isDestroying) {
196
+ window.removeEventListener("message", this._onMessage, false);
197
+ return;
198
+ }
199
+
200
+ var message = evt.data;
201
+ // check if the event is originated by our privileged ember inspector code
202
+ if (evt.isTrusted) {
203
+ if (typeof message.type === 'string' && message.type === 'iframes') {
204
+ this._sendIframes(message.urls);
205
+ } else {
206
+ // We clone the object so that Ember prototype extensions
207
+ // are applied.
208
+ this._messageReceived(Ember.$.extend(true, {}, message));
209
+ }
210
+ } else {
211
+ console.log("EMBER INSPECTOR: ignored post message", evt);
212
+ }
213
+ },
214
+
215
+ _sendIframes: function (urls) {
216
+ var self = this;
217
+ urls.forEach(function(url) {
218
+ self.sendMessage({ type: "injectEmberDebug", frameURL: url });
219
+ });
220
+ }
221
+ });
222
+ });
223
+ define("adapters/websocket",
224
+ ["adapters/basic","exports"],
225
+ function(__dependency1__, __exports__) {
226
+ "use strict";
227
+ var BasicAdapter = __dependency1__["default"];
228
+
229
+ var computed = Ember.computed;
230
+
231
+ var WebsocketAdapter = BasicAdapter.extend({
232
+ init: function() {
233
+ this._super();
234
+ this._connect();
235
+ },
236
+
237
+ sendMessage: function(options) {
238
+ options = options || {};
239
+ this.get('socket').emit('emberInspectorMessage', options);
240
+ },
241
+
242
+ socket: computed(function() {
243
+ return window.EMBER_INSPECTOR_CONFIG.remoteDebugSocket;
244
+ }).property(),
245
+
246
+ _connect: function() {
247
+ var self = this;
248
+ this.get('socket').on('emberInspectorMessage', function(message) {
249
+ Ember.run(function() {
250
+ self._messageReceived(message);
251
+ });
252
+ });
253
+ },
254
+
255
+ _disconnect: function() {
256
+ this.get('socket').removeAllListeners("emberInspectorMessage");
257
+ },
258
+
259
+ willDestroy: function() {
260
+ this._disconnect();
261
+ }
262
+ });
263
+
264
+ __exports__["default"] = WebsocketAdapter;
265
+ });
266
+ define("app",
267
+ ["resolver","port","libs/promise_assembler","helpers/ms_to_time","exports"],
268
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
269
+ "use strict";
270
+ var Resolver = __dependency1__["default"];
271
+ var Port = __dependency2__["default"];
272
+ var PromiseAssembler = __dependency3__["default"];
273
+ var msToTime = __dependency4__["default"];
274
+
275
+ var version = '1.6.2';
276
+
277
+ var App = Ember.Application.extend({
278
+ modulePrefix: '',
279
+ Resolver: Resolver,
280
+ adapter: 'basic'
281
+ });
282
+
283
+ var config = {
284
+ VERSION: version
285
+ };
286
+
287
+ // Register Helpers
288
+ Ember.Handlebars.helper('ms-to-time', msToTime);
289
+
290
+ // Inject adapter
291
+ App.initializer({
292
+ name: "extension-init",
293
+
294
+ initialize: function(container, app) {
295
+ // register and inject adapter
296
+ var Adapter;
297
+ if (Ember.typeOf(app.adapter) === 'string') {
298
+ Adapter = container.resolve('adapter:' + app.adapter);
299
+ } else {
300
+ Adapter = app.adapter;
301
+ }
302
+ container.register('adapter:main', Adapter);
303
+ container.typeInjection('port', 'adapter', 'adapter:main');
304
+ container.injection('route:application', 'adapter', 'adapter:main');
305
+
306
+ // register config
307
+ container.register('config:main', config, { instantiate: false });
308
+ container.typeInjection('route', 'config', 'config:main');
309
+
310
+ // inject port
311
+ container.register('port:main', app.Port || Port);
312
+ container.typeInjection('controller', 'port', 'port:main');
313
+ container.typeInjection('route', 'port', 'port:main');
314
+ container.typeInjection('promise-assembler', 'port', 'port:main');
315
+
316
+ // register and inject promise assembler
317
+ container.register('promise-assembler:main', PromiseAssembler);
318
+ container.injection('route:promiseTree', 'assembler', 'promise-assembler:main');
319
+ }
320
+ });
321
+
322
+ __exports__["default"] = App;
323
+ });
324
+ define("components/clear_button",
325
+ ["components/icon_button","exports"],
326
+ function(__dependency1__, __exports__) {
327
+ "use strict";
328
+ var IconButton = __dependency1__["default"];
329
+
330
+ __exports__["default"] = IconButton.extend({
331
+ title: 'Clear'
332
+ });
333
+ });
334
+ define("components/drag_handle",
335
+ ["exports"],
336
+ function(__exports__) {
337
+ "use strict";
338
+ __exports__["default"] = Ember.Component.extend({
339
+ classNames: ['drag-handle'],
340
+ classNameBindings: ['isLeft:drag-handle--left', 'isRight:drag-handle--right'],
341
+ attributeBindings: ['style'],
342
+ position: 0,
343
+ side: '',
344
+ isRight: Ember.computed.equal('side', 'right'),
345
+ isLeft: Ember.computed.equal('side', 'left'),
346
+ minWidth: 60,
347
+
348
+ startDragging: function() {
349
+ var self = this,
350
+ $container = this.$().parent(),
351
+ $containerOffsetLeft = $container.offset().left,
352
+ $containerOffsetRight = $containerOffsetLeft + $container.width(),
353
+ namespace = 'drag-' + this.get('elementId');
354
+
355
+ this.sendAction('action', true);
356
+
357
+ Ember.$('body').on('mousemove.' + namespace, function(e){
358
+ var position = self.get('isLeft') ?
359
+ e.pageX - $containerOffsetLeft :
360
+ $containerOffsetRight - e.pageX;
361
+
362
+ if (position >= self.get('minWidth')) {
363
+ self.set('position', position);
364
+ }
365
+ })
366
+ .on('mouseup.' + namespace + ' mouseleave.' + namespace, function(){
367
+ self.stopDragging();
368
+ });
369
+ },
370
+
371
+ stopDragging: function() {
372
+ this.sendAction('action', false);
373
+ Ember.$('body').off('.drag-' + this.get('elementId'));
374
+ },
375
+
376
+ willDestroyElement: function() {
377
+ this._super();
378
+ this.stopDragging();
379
+ },
380
+
381
+ mouseDown: function() {
382
+ this.startDragging();
383
+ return false;
384
+ },
385
+
386
+ style: function () {
387
+ if (this.get('side')) {
388
+ return this.get('side') + ':' + this.get('position') + 'px';
389
+ }
390
+ else {
391
+ return '';
392
+ }
393
+ }.property('side', 'position')
394
+ });
395
+ });
396
+ define("components/draggable_column",
397
+ ["exports"],
398
+ function(__exports__) {
399
+ "use strict";
400
+ // DraggableColumn
401
+ // ===============
402
+ // A wrapper for a resizable-column and a drag-handle component
403
+ var Component = Ember.Component;
404
+
405
+ __exports__["default"] = Component.extend({
406
+ tagName: '', // Prevent wrapping in a div
407
+ side: 'left',
408
+ minWidth: 60,
409
+ setIsDragging: 'setIsDragging',
410
+ actions: {
411
+ setIsDragging: function(isDragging) {
412
+ this.sendAction('setIsDragging', isDragging);
413
+ }
414
+ }
415
+ });
416
+ });
417
+ define("components/icon_button",
418
+ ["exports"],
419
+ function(__exports__) {
420
+ "use strict";
421
+ var Component = Ember.Component;
422
+ __exports__["default"] = Component.extend({
423
+ attributeBindings: ['dataLabel:data-label', 'title'],
424
+
425
+ tagName: 'button',
426
+
427
+ title: null,
428
+
429
+ click: function () {
430
+ this.sendAction();
431
+ }
432
+ });
433
+ });
434
+ define("components/property_field",
435
+ ["exports"],
436
+ function(__exports__) {
437
+ "use strict";
438
+ __exports__["default"] = Ember.TextField.extend({
439
+ attributeBindings: ['label:data-label'],
440
+
441
+ saveProperty: 'saveProperty',
442
+ finishedEditing: 'finishedEditing',
443
+
444
+ didInsertElement: function() {
445
+ this._super();
446
+ this.$().select();
447
+ },
448
+
449
+ insertNewline: function() {
450
+ this.sendAction('saveProperty');
451
+ this.sendAction('finishedEditing');
452
+ },
453
+
454
+ cancel: function() {
455
+ this.sendAction('finishedEditing');
456
+ },
457
+
458
+ focusOut: function() {
459
+ this.sendAction('finishedEditing');
460
+ }
461
+ });
462
+ });
463
+ define("components/reload_button",
464
+ ["components/icon_button","exports"],
465
+ function(__dependency1__, __exports__) {
466
+ "use strict";
467
+ var IconButton = __dependency1__["default"];
468
+
469
+ __exports__["default"] = IconButton.extend({
470
+ title: 'Reload'
471
+ });
472
+ });
473
+ define("components/resizable_column",
474
+ ["exports"],
475
+ function(__exports__) {
476
+ "use strict";
477
+ __exports__["default"] = Ember.Component.extend({
478
+ width: null,
479
+
480
+ attributeBindings: ['style'],
481
+
482
+ style: function () {
483
+ return '-webkit-flex: none; flex: none; width:' + this.get('width') + 'px;';
484
+ }.property('width'),
485
+
486
+ didInsertElement: function () {
487
+ if (!this.get('width')) {
488
+ this.set('width', this.$().width());
489
+ }
490
+ }
491
+ });
492
+ });
493
+ define("components/send_to_console",
494
+ ["exports"],
495
+ function(__exports__) {
496
+ "use strict";
497
+ __exports__["default"] = Ember.Component.extend({
498
+ tagName: 'button',
499
+ classNames: ['send-to-console'],
500
+ attributeBindings: ['dataLabel:data-label'],
501
+ dataLabel: 'send-to-console-btn',
502
+ action: 'sendValueToConsole',
503
+ click: function() {
504
+ this.sendAction('action', this.get('param'));
505
+ }
506
+ });
507
+ });
508
+ define("components/sidebar_toggle",
509
+ ["exports"],
510
+ function(__exports__) {
511
+ "use strict";
512
+ __exports__["default"] = Ember.Component.extend({
513
+
514
+ tagName: 'button',
515
+
516
+ side: 'right',
517
+
518
+ isExpanded: false,
519
+
520
+ isRight: Em.computed.equal('side', 'right'),
521
+
522
+ classNames: 'sidebar-toggle',
523
+
524
+ classNameBindings: 'isRight:sidebar-toggle--right:sidebar-toggle--left',
525
+
526
+ click: function () {
527
+ this.sendAction();
528
+ }
529
+
530
+ });
531
+ });
532
+ define("computed/custom_filter",
533
+ ["exports"],
534
+ function(__exports__) {
535
+ "use strict";
536
+ __exports__["default"] = function filterComputed() {
537
+ var dependentKeys, callback;
538
+
539
+ if (arguments.length > 1) {
540
+ var slice = [].slice;
541
+ dependentKeys = slice.call(arguments, 0, -1);
542
+ callback = slice.call(arguments, -1)[0];
543
+ }
544
+ var options = {
545
+ initialize: function (array, changeMeta, instanceMeta) {
546
+ instanceMeta.filteredArrayIndexes = new Ember.SubArray();
547
+ },
548
+
549
+ addedItem: function(array, item, changeMeta, instanceMeta) {
550
+ var match = !!callback.call(this, item),
551
+ filterIndex = instanceMeta.filteredArrayIndexes.addItem(changeMeta.index, match);
552
+
553
+ if (match) {
554
+ array.insertAt(filterIndex, item);
555
+ }
556
+
557
+ return array;
558
+ },
559
+
560
+ removedItem: function(array, item, changeMeta, instanceMeta) {
561
+ var filterIndex = instanceMeta.filteredArrayIndexes.removeItem(changeMeta.index);
562
+
563
+ if (filterIndex > -1) {
564
+ array.removeAt(filterIndex);
565
+ }
566
+
567
+ return array;
568
+ }
569
+ };
570
+ var args = dependentKeys;
571
+ args.push(options);
572
+
573
+ /*jshint validthis:true */
574
+ return Ember.arrayComputed.apply(this, args);
575
+ };
576
+ });
577
+ define("computed/debounce",
578
+ ["exports"],
579
+ function(__exports__) {
580
+ "use strict";
581
+ var debounce = Ember.run.debounce;
582
+
583
+ // Use this if you want a property to debounce
584
+ // another property with a certain delay.
585
+ // This means that every time this prop changes,
586
+ // the other prop will change to the same val after [delay]
587
+ __exports__["default"] = function(prop, delay, callback) {
588
+ var value;
589
+
590
+ var updateVal = function() {
591
+ this.set(prop, value);
592
+ if (callback) {
593
+ callback.call(this);
594
+ }
595
+ };
596
+
597
+ return function(key, val) {
598
+ if (arguments.length > 1) {
599
+ value = val;
600
+ debounce(this, updateVal, delay);
601
+ return val;
602
+ }
603
+ }.property();
604
+
605
+ };
606
+ });
607
+ define("controllers/application",
608
+ ["exports"],
609
+ function(__exports__) {
610
+ "use strict";
611
+ var oneWay = Ember.computed.oneWay,
612
+ equal = Ember.computed.equal;
613
+
614
+ __exports__["default"] = Ember.Controller.extend({
615
+ needs: ['mixin-stack', 'mixin-details'],
616
+
617
+ emberApplication: false,
618
+ navWidth: 180,
619
+ inspectorWidth: 360,
620
+ mixinStack: oneWay('controllers.mixin-stack').readOnly(),
621
+ mixinDetails: oneWay('controllers.mixin-details').readOnly(),
622
+ isChrome: equal('port.adapter.name', 'chrome'),
623
+
624
+ // Indicates that the extension window is focused,
625
+ active: true,
626
+
627
+ inspectorExpanded: false,
628
+
629
+ pushMixinDetails: function(name, property, objectId, details) {
630
+ details = {
631
+ name: name,
632
+ property: property,
633
+ objectId: objectId,
634
+ mixins: details
635
+ };
636
+
637
+ this.get('mixinStack').pushObject(details);
638
+ this.set('mixinDetails.model', details);
639
+ },
640
+
641
+ popMixinDetails: function() {
642
+ var mixinStack = this.get('controllers.mixin-stack');
643
+ var item = mixinStack.popObject();
644
+ this.set('mixinDetails.model', mixinStack.get('lastObject'));
645
+ this.get('port').send('objectInspector:releaseObject', { objectId: item.objectId });
646
+ },
647
+
648
+ activateMixinDetails: function(name, details, objectId) {
649
+ var self = this;
650
+ var objects = this.get('mixinStack').forEach(function(item) {
651
+ self.get('port').send('objectInspector:releaseObject', { objectId: item.objectId });
652
+ });
653
+
654
+ this.set('mixinStack.model', []);
655
+ this.pushMixinDetails(name, undefined, objectId, details);
656
+ },
657
+
658
+ droppedObject: function(objectId) {
659
+ var mixinStack = this.get('mixinStack.model');
660
+ var obj = mixinStack.findProperty('objectId', objectId);
661
+ if (obj) {
662
+ var index = mixinStack.indexOf(obj);
663
+ var objectsToRemove = [];
664
+ for(var i = index; i >= 0; i--) {
665
+ objectsToRemove.pushObject(mixinStack.objectAt(i));
666
+ }
667
+ objectsToRemove.forEach(function(item) {
668
+ mixinStack.removeObject(item);
669
+ });
670
+ }
671
+ if (mixinStack.get('length') > 0) {
672
+ this.set('mixinDetails.model', mixinStack.get('lastObject'));
673
+ } else {
674
+ this.set('mixinDetails.model', null);
675
+ }
676
+
677
+ }
678
+ });
679
+ });
680
+ define("controllers/container_type",
681
+ ["computed/debounce","utils/search_match","exports"],
682
+ function(__dependency1__, __dependency2__, __exports__) {
683
+ "use strict";
684
+ var debounceComputed = __dependency1__["default"];
685
+ var searchMatch = __dependency2__["default"];
686
+ var ArrayController = Ember.ArrayController;
687
+ var computed = Ember.computed;
688
+ var filter = computed.filter;
689
+ var get = Ember.get;
690
+
691
+ __exports__["default"] = ArrayController.extend({
692
+ needs: ['application'],
693
+ sortProperties: ['name'],
694
+
695
+ searchVal: debounceComputed('search', 300),
696
+
697
+ search: null,
698
+
699
+ arrangedContent: filter('model', function(item) {
700
+ return searchMatch(get(item, 'name'), this.get('search'));
701
+ }).property('model.@each.name', 'search')
702
+ });
703
+ });
704
+ define("controllers/container_types",
705
+ ["exports"],
706
+ function(__exports__) {
707
+ "use strict";
708
+ var ArrayController = Ember.ArrayController;
709
+
710
+ __exports__["default"] = ArrayController.extend({
711
+ sortProperties: ['name']
712
+ });
713
+ });
714
+ define("controllers/iframes",
715
+ ["exports"],
716
+ function(__exports__) {
717
+ "use strict";
718
+ var ArrayController = Ember.ArrayController;
719
+ var alias = Ember.computed.alias;
720
+ var mapComputed = Ember.computed.map;
721
+ var run = Ember.run;
722
+
723
+ __exports__["default"] = ArrayController.extend({
724
+ model: mapComputed('port.detectedApplications', function(item) {
725
+ var name = item.split('__');
726
+ return {
727
+ name: name[1],
728
+ val: item
729
+ };
730
+ }),
731
+
732
+ selectedApp: alias('port.applicationId'),
733
+
734
+ selectedDidChange: function() {
735
+ // Change iframe being debugged
736
+ var url = '/';
737
+ var applicationId = this.get('selectedApp');
738
+ var app = this.container.lookup('application:main');
739
+ var list = this.get('port').get('detectedApplications');
740
+
741
+ run(app, app.reset);
742
+ var router = app.__container__.lookup('router:main');
743
+ var port = app.__container__.lookup('port:main');
744
+ port.set('applicationId', applicationId);
745
+ port.set('detectedApplications', list);
746
+
747
+ // start
748
+ router.location.setURL(url);
749
+ run(app, app.handleURL, url);
750
+
751
+ }.observes('selectedApp')
752
+ });
753
+ });
754
+ define("controllers/mixin_detail",
755
+ ["exports"],
756
+ function(__exports__) {
757
+ "use strict";
758
+ var oneWay = Ember.computed.oneWay;
759
+
760
+ __exports__["default"] = Ember.ObjectController.extend({
761
+ needs: ['mixin-details'],
762
+
763
+ mixinDetails: oneWay('controllers.mixin-details').readOnly(),
764
+ objectId: oneWay('mixinDetails.objectId').readOnly(),
765
+
766
+ isExpanded: function() {
767
+ return this.get('model.expand') && this.get('model.properties.length') > 0;
768
+ }.property('model.expand', 'model.properties.length'),
769
+
770
+ actions: {
771
+ calculate: function(property) {
772
+ var objectId = this.get('objectId');
773
+ var mixinIndex = this.get('mixinDetails.mixins').indexOf(this.get('model'));
774
+
775
+ this.get('port').send('objectInspector:calculate', {
776
+ objectId: objectId,
777
+ property: property.name,
778
+ mixinIndex: mixinIndex
779
+ });
780
+ },
781
+
782
+ sendToConsole: function(property) {
783
+ var objectId = this.get('objectId');
784
+
785
+ this.get('port').send('objectInspector:sendToConsole', {
786
+ objectId: objectId,
787
+ property: property.name
788
+ });
789
+ },
790
+
791
+ toggleExpanded: function() {
792
+ this.toggleProperty('isExpanded');
793
+ },
794
+
795
+ digDeeper: function(property) {
796
+ var objectId = this.get('objectId');
797
+
798
+ this.get('port').send('objectInspector:digDeeper', {
799
+ objectId: objectId,
800
+ property: property.name
801
+ });
802
+ },
803
+
804
+ saveProperty: function(prop, val) {
805
+ var mixinIndex = this.get('mixinDetails.mixins').indexOf(this.get('model'));
806
+
807
+ this.get('port').send('objectInspector:saveProperty', {
808
+ objectId: this.get('objectId'),
809
+ property: prop,
810
+ value: val,
811
+ mixinIndex: mixinIndex
812
+ });
813
+ }
814
+ }
815
+ });
816
+ });
817
+ define("controllers/mixin_details",
818
+ ["exports"],
819
+ function(__exports__) {
820
+ "use strict";
821
+ __exports__["default"] = Ember.ObjectController.extend();
822
+ });
823
+ define("controllers/mixin_property",
824
+ ["exports"],
825
+ function(__exports__) {
826
+ "use strict";
827
+ var equal = Ember.computed.equal;
828
+ var alias = Ember.computed.alias;
829
+
830
+ __exports__["default"] = Ember.ObjectController.extend({
831
+ isEdit: false,
832
+
833
+ // Bound to editing textbox
834
+ txtValue: null,
835
+
836
+ isCalculated: function() {
837
+ return this.get('value.type') !== 'type-descriptor';
838
+ }.property('value.type'),
839
+
840
+ isEmberObject: equal('value.type', 'type-ember-object'),
841
+
842
+ isComputedProperty: alias('value.computed'),
843
+
844
+ isFunction: equal('value.type', 'type-function'),
845
+
846
+ isArray: equal('value.type', 'type-array'),
847
+
848
+ isDate: equal('value.type', 'type-date'),
849
+
850
+ actions: {
851
+ valueClick: function() {
852
+ if (this.get('isEmberObject') || this.get('isArray')) {
853
+ this.get('target').send('digDeeper', this.get('model'));
854
+ return;
855
+ }
856
+
857
+ if (this.get('isComputedProperty') && !this.get('isCalculated')) {
858
+ this.get('target').send('calculate', this.get('model'));
859
+ return;
860
+ }
861
+
862
+ if (this.get('isFunction') || this.get('overridden') || this.get('isDate') || this.get('readOnly')) {
863
+ return;
864
+ }
865
+
866
+ var value = this.get('value.inspect');
867
+ var type = this.get('value.type');
868
+ if (type === 'type-string') {
869
+ value = '"' + value + '"';
870
+ }
871
+ this.set('txtValue', value);
872
+ this.set('isEdit', true);
873
+
874
+ },
875
+
876
+ saveProperty: function() {
877
+ var txtValue = this.get('txtValue');
878
+ var realValue;
879
+ try {
880
+ realValue = JSON.parse(txtValue);
881
+ } catch(e) {
882
+ // if surrounded by quotes, remove quotes
883
+ var match = txtValue.match(/^"(.*)"$/);
884
+ if (match && match.length > 1) {
885
+ realValue = match[1];
886
+ } else {
887
+ realValue = txtValue;
888
+ }
889
+ }
890
+ this.get('target').send('saveProperty', this.get('name'), realValue);
891
+ },
892
+
893
+ finishedEditing: function() {
894
+ this.set('isEdit', false);
895
+ }
896
+ }
897
+ });
898
+ });
899
+ define("controllers/mixin_stack",
900
+ ["exports"],
901
+ function(__exports__) {
902
+ "use strict";
903
+ __exports__["default"] = Ember.ArrayController.extend({
904
+ needs: ['application'],
905
+
906
+ trail: function() {
907
+ var nested = this.slice(1);
908
+ if (nested.length === 0) { return ""; }
909
+ return "." + nested.mapProperty('property').join(".");
910
+ }.property('[]'),
911
+
912
+ isNested: function() {
913
+ return this.get('length') > 1;
914
+ }.property('[]'),
915
+
916
+
917
+ actions: {
918
+ popStack: function() {
919
+ if(this.get('isNested')) {
920
+ this.get('controllers.application').popMixinDetails();
921
+ }
922
+ },
923
+
924
+ sendObjectToConsole: function(obj) {
925
+ var objectId = Ember.get(obj, 'objectId');
926
+ this.get('port').send('objectInspector:sendToConsole', {
927
+ objectId: objectId
928
+ });
929
+ }
930
+ }
931
+ });
932
+ });
933
+ define("controllers/model_type_item",
934
+ ["exports"],
935
+ function(__exports__) {
936
+ "use strict";
937
+ var oneWay = Ember.computed.oneWay;
938
+
939
+ __exports__["default"] = Ember.ObjectController.extend({
940
+ needs: ['model-types'],
941
+
942
+ modelTypes: oneWay('controllers.model-types').readOnly(),
943
+
944
+ selected: function() {
945
+ return this.get('model') === this.get('modelTypes.selected');
946
+ }.property('modelTypes.selected')
947
+ });
948
+ });
949
+ define("controllers/model_types",
950
+ ["exports"],
951
+ function(__exports__) {
952
+ "use strict";
953
+ __exports__["default"] = Ember.ArrayController.extend({
954
+ navWidth: 180,
955
+ sortProperties: ['name']
956
+ });
957
+ });
958
+ define("controllers/promise_item",
959
+ ["exports"],
960
+ function(__exports__) {
961
+ "use strict";
962
+ var COLOR_MAP = {
963
+ red: '#ff2717',
964
+ blue: '#174fff',
965
+ green: '#006400'
966
+ };
967
+
968
+ var alias = Ember.computed.alias;
969
+ var notEmpty = Ember.computed.notEmpty;
970
+ var gt = Ember.computed.gt;
971
+ var empty = Ember.computed.empty;
972
+ var and = Ember.computed.and;
973
+ var computedEqual = Ember.computed.equal;
974
+
975
+ __exports__["default"] = Ember.ObjectProxy.extend({
976
+ promiseTreeController: function() {
977
+ return this.container.lookup('controller:promiseTree');
978
+ }.property(),
979
+
980
+ filter: alias('promiseTreeController.filter'),
981
+ effectiveSearch: alias('promiseTreeController.effectiveSearch'),
982
+
983
+ model: alias('content'),
984
+
985
+ isError: computedEqual('reason.type', 'type-error'),
986
+
987
+ style: function() {
988
+ var color = '';
989
+ if (this.get('isFulfilled')) {
990
+ color = 'green';
991
+ } else if (this.get('isRejected')) {
992
+ color = 'red';
993
+ } else {
994
+ color = 'blue';
995
+ }
996
+ return 'background-color:' + COLOR_MAP[color] + ';color:white;';
997
+ }.property('model.state'),
998
+
999
+
1000
+ nodeStyle: function() {
1001
+ var relevant;
1002
+ switch(this.get('filter')) {
1003
+ case 'pending':
1004
+ relevant = this.get('isPending');
1005
+ break;
1006
+ case 'rejected':
1007
+ relevant = this.get('isRejected');
1008
+ break;
1009
+ case 'fulfilled':
1010
+ relevant = this.get('isFulfilled');
1011
+ break;
1012
+ default:
1013
+ relevant = true;
1014
+ }
1015
+ if (relevant && !Ember.isEmpty(this.get('effectiveSearch'))) {
1016
+ relevant = this.get('model').matchesExactly(this.get('effectiveSearch'));
1017
+ }
1018
+ if (!relevant) {
1019
+ return 'opacity: 0.3';
1020
+ }
1021
+ }.property('state', 'filter', 'effectiveSearch'),
1022
+
1023
+ labelStyle: function() {
1024
+ return 'padding-left: ' + ((+this.get('level') * 20) + 5) + "px";
1025
+ }.property('level'),
1026
+
1027
+ expandedClass: function() {
1028
+ if (!this.get('hasChildren')) { return; }
1029
+
1030
+ if (this.get('isExpanded')) {
1031
+ return 'row_arrow_expanded';
1032
+ } else {
1033
+ return 'row_arrow_collapsed';
1034
+ }
1035
+ }.property('hasChildren', 'isExpanded'),
1036
+
1037
+ hasChildren: gt('children.length', 0),
1038
+
1039
+ isTopNode: empty('parent'),
1040
+
1041
+ settledValue: function() {
1042
+ if (this.get('isFulfilled')) {
1043
+ return this.get('value');
1044
+ } else if (this.get('isRejected')) {
1045
+ return this.get('reason');
1046
+ } else {
1047
+ return '--';
1048
+ }
1049
+ }.property('value'),
1050
+
1051
+ isValueInspectable: notEmpty('settledValue.objectId'),
1052
+
1053
+ hasValue: function() {
1054
+ return this.get('isSettled') && this.get('settledValue.type') !== 'type-undefined';
1055
+ }.property('settledValue', 'isSettled'),
1056
+
1057
+ label: function() {
1058
+ return this.get('model.label') || (!!this.get('model.parent') && 'Then') || '<Unknown Promise>';
1059
+ }.property('model.label'),
1060
+
1061
+ state: function() {
1062
+ var state = this.get('model.state');
1063
+ if (this.get('isFulfilled')) {
1064
+ return 'Fulfilled';
1065
+ } else if (this.get('isRejected')) {
1066
+ return 'Rejected';
1067
+ } else if (this.get('parent') && !this.get('parent.isSettled')) {
1068
+ return 'Waiting for parent';
1069
+ } else {
1070
+ return 'Pending';
1071
+ }
1072
+
1073
+ }.property('model.state'),
1074
+
1075
+
1076
+ timeToSettle: function() {
1077
+ if (!this.get('createdAt') || !this.get('settledAt')) {
1078
+ return ' -- ';
1079
+ }
1080
+ var startedAt = this.get('parent.settledAt') || this.get('createdAt');
1081
+ var remaining = this.get('settledAt').getTime() - startedAt.getTime();
1082
+ return remaining;
1083
+ }.property('createdAt', 'settledAt', 'parent.settledAt')
1084
+ });
1085
+ });
1086
+ define("controllers/promise_tree",
1087
+ ["computed/custom_filter","exports"],
1088
+ function(__dependency1__, __exports__) {
1089
+ "use strict";
1090
+ var filterComputed = __dependency1__["default"];
1091
+
1092
+ // Manual implementation of item controllers
1093
+ function itemProxyComputed(dependentKey, itemProxy) {
1094
+ var options = {
1095
+ addedItem: function(array, item, changeMeta, instanceMeta) {
1096
+ var proxy = itemProxy.create({ content: item });
1097
+ array.insertAt(changeMeta.index, proxy);
1098
+ return array;
1099
+ },
1100
+ removedItem: function(array, item, changeMeta, instanceMeta) {
1101
+ var proxy = array.objectAt(changeMeta.index);
1102
+ array.removeAt(changeMeta.index, 1);
1103
+ proxy.destroy();
1104
+ return array;
1105
+ }
1106
+ };
1107
+
1108
+ return Ember.arrayComputed(dependentKey, options);
1109
+ }
1110
+
1111
+ var equal = Ember.computed.equal;
1112
+ var bool = Ember.computed.bool;
1113
+ var and = Ember.computed.and;
1114
+ var not = Ember.computed.not;
1115
+
1116
+ __exports__["default"] = Ember.ArrayController.extend({
1117
+ needs: ['application'],
1118
+
1119
+ createdAfter: null,
1120
+
1121
+ // below used to show the "refresh" message
1122
+ isEmpty: equal('model.length', 0),
1123
+ wasCleared: bool('createdAfter'),
1124
+ neverCleared: not('wasCleared'),
1125
+ shouldRefresh: and('isEmpty', 'neverCleared'),
1126
+
1127
+ // Keep track of promise stack traces.
1128
+ // It is opt-in due to performance reasons.
1129
+ instrumentWithStack: false,
1130
+
1131
+ stackChanged: function() {
1132
+ this.port.send('promise:setInstrumentWithStack', { instrumentWithStack: this.get('instrumentWithStack') });
1133
+ }.observes('instrumentWithStack').on('init'),
1134
+
1135
+ init: function() {
1136
+ // List-view does not support item controllers
1137
+ this.reopen({
1138
+ items: itemProxyComputed('filtered', this.get('promiseItemController'))
1139
+ });
1140
+ },
1141
+
1142
+ promiseItemController: function() {
1143
+ return this.container.lookupFactory('controller:promise-item');
1144
+ }.property(),
1145
+
1146
+ // TODO: This filter can be further optimized
1147
+ filtered: filterComputed(
1148
+ 'model.@each.createdAt',
1149
+ 'model.@each.fulfilledBranch',
1150
+ 'model.@each.rejectedBranch',
1151
+ 'model.@each.pendingBranch',
1152
+ 'model.@each.isVisible', function(item) {
1153
+
1154
+ // exclude cleared promises
1155
+ if (this.get('createdAfter') && item.get('createdAt') < this.get('createdAfter')) {
1156
+ return false;
1157
+ }
1158
+
1159
+ if (!item.get('isVisible')) {
1160
+ return false;
1161
+ }
1162
+
1163
+ // Exclude non-filter complying promises
1164
+ // If at least one of their children passes the filter,
1165
+ // then they pass
1166
+ var include = true;
1167
+ if (this.get('filter') === 'pending') {
1168
+ include = item.get('pendingBranch');
1169
+ } else if (this.get('filter') === 'rejected') {
1170
+ include = item.get('rejectedBranch');
1171
+ } else if (this.get('filter') === 'fulfilled') {
1172
+ include = item.get('fulfilledBranch');
1173
+ }
1174
+ if (!include) {
1175
+ return false;
1176
+ }
1177
+
1178
+ // Search filter
1179
+ // If they or at least one of their children
1180
+ // match the search, then include them
1181
+ var search = this.get('effectiveSearch');
1182
+ if (!Ember.isEmpty(search)) {
1183
+ return item.matches(search);
1184
+ }
1185
+ return true;
1186
+
1187
+ }),
1188
+
1189
+ filter: 'all',
1190
+
1191
+ noFilter: equal('filter', 'all'),
1192
+ isRejectedFilter: equal('filter', 'rejected'),
1193
+ isPendingFilter: equal('filter', 'pending'),
1194
+ isFulfilledFilter: equal('filter', 'fulfilled'),
1195
+
1196
+ search: null,
1197
+ effectiveSearch: null,
1198
+
1199
+ searchChanged: function() {
1200
+ Ember.run.debounce(this, this.notifyChange, 500);
1201
+ }.observes('search'),
1202
+
1203
+ notifyChange: function() {
1204
+ var self = this;
1205
+ this.set('effectiveSearch', this.get('search'));
1206
+ Ember.run.next(function() {
1207
+ self.notifyPropertyChange('model');
1208
+ });
1209
+ },
1210
+
1211
+ actions: {
1212
+ setFilter: function(filter) {
1213
+ var self = this;
1214
+ this.set('filter', filter);
1215
+ Ember.run.next(function() {
1216
+ self.notifyPropertyChange('filtered');
1217
+ });
1218
+ },
1219
+ clear: function() {
1220
+ this.set('createdAfter', new Date());
1221
+ Ember.run.once(this, this.notifyChange);
1222
+ },
1223
+ tracePromise: function(promise) {
1224
+ this.get('port').send('promise:tracePromise', { promiseId: promise.get('guid') });
1225
+ }
1226
+ }
1227
+ });
1228
+ });
1229
+ define("controllers/record_filter",
1230
+ ["exports"],
1231
+ function(__exports__) {
1232
+ "use strict";
1233
+ __exports__["default"] = Ember.ObjectController.extend({
1234
+ needs: ['records'],
1235
+
1236
+ checked: function() {
1237
+ return this.get('controllers.records.filterValue') === this.get('name');
1238
+ }.property('controllers.records.filterValue')
1239
+ });
1240
+ });
1241
+ define("controllers/record_item",
1242
+ ["exports"],
1243
+ function(__exports__) {
1244
+ "use strict";
1245
+ var COLOR_MAP = {
1246
+ red: '#ff2717',
1247
+ blue: '#174fff',
1248
+ green: '#006400'
1249
+ };
1250
+
1251
+ __exports__["default"] = Ember.ObjectController.extend({
1252
+ needs: ['records'],
1253
+
1254
+ modelTypeColumns: Ember.computed.alias('controllers.records.columns'),
1255
+
1256
+ // TODO: Color record based on `color` property.
1257
+ style: function() {
1258
+ if (!Ember.isEmpty(this.get('color'))) {
1259
+ var color = COLOR_MAP[this.get('color')];
1260
+ if (color) {
1261
+ return 'color:' + color + ';';
1262
+ }
1263
+ }
1264
+ return '';
1265
+ }.property('color'),
1266
+
1267
+ columns: function() {
1268
+ var self = this;
1269
+ return this.get('modelTypeColumns').map(function(col) {
1270
+ return { name: col.name, value: self.get('columnValues.' + col.name) };
1271
+ });
1272
+ }.property('modelTypeColumns.@each', 'model.columnValues')
1273
+ });
1274
+ });
1275
+ define("controllers/records",
1276
+ ["utils/escape_reg_exp","exports"],
1277
+ function(__dependency1__, __exports__) {
1278
+ "use strict";
1279
+ var escapeRegExp = __dependency1__["default"];
1280
+ var alias = Ember.computed.alias;
1281
+ var none = Ember.computed.none;
1282
+
1283
+ __exports__["default"] = Ember.ArrayController.extend({
1284
+ init: function() {
1285
+ this._super();
1286
+ this.set('filters', []);
1287
+ this.set('filterValues', {});
1288
+ },
1289
+ needs: ['application'],
1290
+
1291
+ columns: alias('modelType.columns'),
1292
+
1293
+ search: '',
1294
+ filters: undefined,
1295
+ filterValue: undefined,
1296
+
1297
+ noFilterValue: none('filterValue'),
1298
+
1299
+ actions: {
1300
+ setFilter: function(val) {
1301
+ val = val || null;
1302
+ this.set('filterValue', val);
1303
+ }
1304
+ },
1305
+
1306
+ modelChanged: function() {
1307
+ this.setProperties({
1308
+ filterValue: null,
1309
+ search: ''
1310
+ });
1311
+ }.observes('model'),
1312
+
1313
+ recordToString: function(record) {
1314
+ var search = '';
1315
+ var searchKeywords = Ember.get(record, 'searchKeywords');
1316
+ if (searchKeywords) {
1317
+ search = Ember.get(record, 'searchKeywords').join(' ');
1318
+ }
1319
+ return search.toLowerCase();
1320
+ },
1321
+
1322
+ filtered: function() {
1323
+ var self = this, search = this.get('search'), filter = this.get('filterValue');
1324
+ var content = this.get('model').filter(function(item) {
1325
+ // check filters
1326
+ if (filter && !Ember.get(item, 'filterValues.' + filter)) {
1327
+ return false;
1328
+ }
1329
+
1330
+ // check search
1331
+ if (!Ember.isEmpty(search)) {
1332
+ var searchString = self.recordToString(item);
1333
+ return !!searchString.match(new RegExp('.*' + escapeRegExp(search.toLowerCase()) + '.*'));
1334
+ }
1335
+ return true;
1336
+ });
1337
+
1338
+ var Controller = this.container.lookupFactory('controller:array', { singleton: false});
1339
+ var controller = Controller.create({model: content, itemController: 'recordItem'});
1340
+ return controller;
1341
+ }.property('search', 'model.@each.columnValues', 'model.@each.filterValues', 'filterValue')
1342
+ });
1343
+ });
1344
+ define("controllers/render_item",
1345
+ ["utils/escape_reg_exp","exports"],
1346
+ function(__dependency1__, __exports__) {
1347
+ "use strict";
1348
+ var escapeRegExp = __dependency1__["default"];
1349
+ var ObjectController = Ember.ObjectController;
1350
+ var gt = Ember.computed.gt;
1351
+ var oneWay = Ember.computed.oneWay;
1352
+ var isEmpty = Ember.isEmpty;
1353
+ var runOnce = Ember.run.once;
1354
+
1355
+ __exports__["default"] = ObjectController.extend({
1356
+ needs: ['render-tree'],
1357
+
1358
+ search: oneWay('controllers.render-tree.search').readOnly(),
1359
+
1360
+ isExpanded: false,
1361
+
1362
+ expand: function() {
1363
+ this.set('isExpanded', true);
1364
+ },
1365
+
1366
+ searchChanged: function() {
1367
+ var search = this.get('search');
1368
+ if (!isEmpty(search)) {
1369
+ runOnce(this, 'expand');
1370
+ }
1371
+ }.observes('search').on('init'),
1372
+
1373
+ searchMatch: function() {
1374
+ var search = this.get('search');
1375
+ if (isEmpty(search)) {
1376
+ return true;
1377
+ }
1378
+ var name = this.get('name');
1379
+ var regExp = new RegExp(escapeRegExp(search.toLowerCase()));
1380
+ return !!name.toLowerCase().match(regExp);
1381
+ }.property('search', 'name'),
1382
+
1383
+ nodeStyle: function() {
1384
+ if (!this.get('searchMatch')) {
1385
+ return 'opacity: 0.5';
1386
+ }
1387
+ }.property('searchMatch'),
1388
+
1389
+ level: function() {
1390
+ var parentLevel = this.get('target.level');
1391
+ if (parentLevel === undefined) {
1392
+ parentLevel = -1;
1393
+ }
1394
+ return parentLevel + 1;
1395
+ }.property('target.level'),
1396
+
1397
+ nameStyle: function() {
1398
+ return 'padding-left: ' + ((+this.get('level') * 20) + 5) + "px";
1399
+ }.property('level'),
1400
+
1401
+ hasChildren: gt('children.length', 0),
1402
+
1403
+ expandedClass: function() {
1404
+ if (!this.get('hasChildren')) { return; }
1405
+
1406
+ if (this.get('isExpanded')) {
1407
+ return 'row_arrow_expanded';
1408
+ } else {
1409
+ return 'row_arrow_collapsed';
1410
+ }
1411
+ }.property('hasChildren', 'isExpanded'),
1412
+
1413
+ readableTime: function() {
1414
+ var d = new Date(this.get('timestamp')),
1415
+ ms = d.getMilliseconds(),
1416
+ seconds = d.getSeconds(),
1417
+ minutes = d.getMinutes().toString().length === 1 ? '0' + d.getMinutes() : d.getMinutes(),
1418
+ hours = d.getHours().toString().length === 1 ? '0' + d.getHours() : d.getHours();
1419
+
1420
+ return hours + ':' + minutes + ':' + seconds + ':' + ms;
1421
+ }.property('timestamp'),
1422
+
1423
+ actions: {
1424
+ toggleExpand: function() {
1425
+ this.toggleProperty('isExpanded');
1426
+ }
1427
+ }
1428
+
1429
+ });
1430
+ });
1431
+ define("controllers/render_tree",
1432
+ ["utils/escape_reg_exp","computed/debounce","exports"],
1433
+ function(__dependency1__, __dependency2__, __exports__) {
1434
+ "use strict";
1435
+ var escapeRegExp = __dependency1__["default"];
1436
+ var debounceComputed = __dependency2__["default"];
1437
+ var get = Ember.get;
1438
+ var isEmpty = Ember.isEmpty;
1439
+ var and = Ember.computed.and;
1440
+ var equal = Ember.computed.equal;
1441
+ var filter = Ember.computed.filter;
1442
+
1443
+ __exports__["default"] = Ember.ArrayController.extend({
1444
+ needs: ['application'],
1445
+
1446
+ initialEmpty: false,
1447
+ modelEmpty: equal('model.length', 0),
1448
+ showEmpty: and('initialEmpty', 'modelEmpty'),
1449
+
1450
+ // bound to the input field, updates the `search` property
1451
+ // 300ms after changing
1452
+ searchField: debounceComputed('search', 300, function() {
1453
+ this.notifyPropertyChange('model');
1454
+ }),
1455
+
1456
+ // model filtered based on this value
1457
+ search: '',
1458
+
1459
+ escapedSearch: function() {
1460
+ return escapeRegExp(this.get('search').toLowerCase());
1461
+ }.property('search'),
1462
+
1463
+ arrangedContent: filter('model', function(item) {
1464
+ var search = this.get('escapedSearch');
1465
+ if (isEmpty(search)) {
1466
+ return true;
1467
+ }
1468
+ var regExp = new RegExp(search);
1469
+ return !!recursiveMatch(item, regExp);
1470
+ })
1471
+ });
1472
+
1473
+ function recursiveMatch(item, regExp) {
1474
+ var children, child;
1475
+ var name = get(item, 'name');
1476
+ if (name.toLowerCase().match(regExp)) {
1477
+ return true;
1478
+ }
1479
+ children = get(item, 'children');
1480
+ for (var i = 0; i < children.length; i++) {
1481
+ child = children[i];
1482
+ if (recursiveMatch(child, regExp)) {
1483
+ return true;
1484
+ }
1485
+ }
1486
+ return false;
1487
+ }
1488
+ });
1489
+ define("controllers/route_item",
1490
+ ["utils/check_current_route","exports"],
1491
+ function(__dependency1__, __exports__) {
1492
+ "use strict";
1493
+ var checkCurrentRoute = __dependency1__["default"];
1494
+
1495
+ var get = Ember.get;
1496
+
1497
+ __exports__["default"] = Ember.ObjectController.extend({
1498
+ needs: 'routeTree',
1499
+
1500
+ details: null,
1501
+
1502
+ withDetails: false,
1503
+
1504
+ hasChildren: Ember.computed.gt('children.length', 0),
1505
+
1506
+ labelStyle: function() {
1507
+ return 'padding-left: ' + ((+this.get('model.parentCount') * 20) + 5) + "px";
1508
+ }.property('parentCount'),
1509
+
1510
+ currentRoute: Ember.computed.alias('controllers.routeTree.currentRoute'),
1511
+
1512
+ isCurrent: function() {
1513
+ var currentRoute = this.get('currentRoute');
1514
+ if (!currentRoute) {
1515
+ return false;
1516
+ }
1517
+
1518
+ return checkCurrentRoute( currentRoute, this.get('value.name') );
1519
+ }.property('currentRoute', 'value.name')
1520
+ });
1521
+ });
1522
+ define("controllers/route_tree",
1523
+ ["utils/check_current_route","exports"],
1524
+ function(__dependency1__, __exports__) {
1525
+ "use strict";
1526
+ var checkCurrentRoute = __dependency1__["default"];
1527
+
1528
+ var filter = Ember.computed.filter;
1529
+
1530
+ __exports__["default"] = Ember.ArrayController.extend({
1531
+ needs: ['application'],
1532
+ itemController: 'routeItem',
1533
+ currentRoute: null,
1534
+ options: {
1535
+ hideRoutes: false
1536
+ },
1537
+
1538
+ arrangedContent: filter('content', function(routeItem) {
1539
+ var currentRoute = this.get('currentRoute'),
1540
+ hideRoutes = this.get('options.hideRoutes');
1541
+
1542
+ if( hideRoutes && currentRoute ) {
1543
+ return checkCurrentRoute( currentRoute, routeItem.value.name );
1544
+ } else {
1545
+ return true;
1546
+ }
1547
+ }).property('content', 'options.hideRoutes'),
1548
+
1549
+ currentRouteChanged: function() {
1550
+ if (this.get('options.hideRoutes')) {
1551
+ this.propertyDidChange('content');
1552
+ }
1553
+ }.observes('currentRoute')
1554
+ });
1555
+ });
1556
+ define("controllers/view_item",
1557
+ ["exports"],
1558
+ function(__exports__) {
1559
+ "use strict";
1560
+ var not = Ember.computed.not;
1561
+ var oneWay = Ember.computed.oneWay;
1562
+ var bool = Ember.computed.bool;
1563
+
1564
+ __exports__["default"] = Ember.ObjectController.extend({
1565
+ needs: ['view-tree'],
1566
+ viewTree: oneWay('controllers.view-tree').readOnly(),
1567
+
1568
+ hasView: not('model.value.isVirtual'),
1569
+ hasElement: not('model.value.isVirtual'),
1570
+
1571
+ isCurrent: function() {
1572
+ return this.get('viewTree.pinnedObjectId') === this.get('model.value.objectId');
1573
+ }.property('viewTree.pinnedObjectId', 'model.value.objectId'),
1574
+
1575
+ hasController: bool('model.value.controller'),
1576
+
1577
+ hasModel: bool('model.value.model'),
1578
+
1579
+ modelInspectable: function() {
1580
+ return this.get('hasModel') && this.get('value.model.type') === 'type-ember-object';
1581
+ }.property('hasModel', 'value.model.type'),
1582
+
1583
+ labelStyle: function() {
1584
+ return 'padding-left: ' + ((+this.get('model.parentCount') * 20) + 5) + "px";
1585
+ }.property('model.parentCount'),
1586
+
1587
+ actions: {
1588
+ inspectView: function() {
1589
+ if (this.get('hasView')) {
1590
+ this.get('target').send('inspect', this.get('value.objectId'));
1591
+ }
1592
+ },
1593
+ inspectElement: function(objectId) {
1594
+ if (!objectId && this.get('hasElement')) {
1595
+ objectId = this.get('value.objectId');
1596
+ }
1597
+
1598
+ if (objectId) {
1599
+ this.get('target').send('inspectElement', objectId);
1600
+ }
1601
+ },
1602
+ inspectModel: function(objectId) {
1603
+ if (this.get('modelInspectable')) {
1604
+ this.get('target').send('inspect', objectId);
1605
+ }
1606
+ }
1607
+ }
1608
+
1609
+ });
1610
+ });
1611
+ define("controllers/view_tree",
1612
+ ["exports"],
1613
+ function(__exports__) {
1614
+ "use strict";
1615
+ __exports__["default"] = Ember.ArrayController.extend({
1616
+ needs: ['application'],
1617
+ itemController: 'view-item',
1618
+ pinnedObjectId: null,
1619
+ inspectingViews: false,
1620
+ options: {
1621
+ components: false,
1622
+ allViews: false
1623
+ },
1624
+
1625
+ optionsChanged: function() {
1626
+ this.port.send('view:setOptions', { options: this.get('options') });
1627
+ }.observes('options.components', 'options.allViews').on('init'),
1628
+
1629
+ actions: {
1630
+ previewLayer: function(node) {
1631
+ if (node !== this.get('pinnedNode')) {
1632
+ this.get('port').send('view:previewLayer', { objectId: node.value.objectId });
1633
+ }
1634
+ },
1635
+
1636
+ hidePreview: function(node) {
1637
+ this.get('port').send('view:hidePreview', { objectId: node.value.objectId });
1638
+ },
1639
+
1640
+ toggleViewInspection: function() {
1641
+ this.get('port').send('view:inspectViews', { inspect: !this.get('inspectingViews') });
1642
+ },
1643
+
1644
+ sendModelToConsole: function(viewId) {
1645
+ // do not use `sendObjectToConsole` because models don't have to be ember objects
1646
+ this.get('port').send('view:sendModelToConsole', { viewId: viewId });
1647
+ },
1648
+
1649
+ sendObjectToConsole: function(objectId) {
1650
+ this.get('port').send('objectInspector:sendToConsole', { objectId: objectId });
1651
+ }
1652
+ }
1653
+ });
1654
+ });
1655
+ define("helpers/ms_to_time",
1656
+ ["exports"],
1657
+ function(__exports__) {
1658
+ "use strict";
1659
+ var isEmpty = Ember.isEmpty;
1660
+ var pow = Math.pow;
1661
+ var round = Math.round;
1662
+
1663
+ __exports__["default"] = function(time) {
1664
+ if (time && !isNaN(+time)) {
1665
+ var formatted = time.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
1666
+ return formatted + 'ms';
1667
+ }
1668
+
1669
+ };
1670
+ });
1671
+ define("libs/promise_assembler",
1672
+ ["models/promise","exports"],
1673
+ function(__dependency1__, __exports__) {
1674
+ "use strict";
1675
+ var Promise = __dependency1__["default"];
1676
+
1677
+ var EventedMixin = Ember.Evented;
1678
+
1679
+ var arrayComputed = Ember.computed(function(){
1680
+ return [];
1681
+ });
1682
+
1683
+ var objectComputed = Ember.computed(function(){
1684
+ return {};
1685
+ });
1686
+
1687
+ __exports__["default"] = Ember.Object.extend(EventedMixin, {
1688
+ all: arrayComputed,
1689
+ topSort: arrayComputed,
1690
+ topSortMeta: objectComputed,
1691
+ promiseIndex: objectComputed,
1692
+
1693
+ // Used to track whether current message received
1694
+ // is the first in the request
1695
+ // Mainly helps in triggering 'firstMessageReceived' event
1696
+ firstMessageReceived: false,
1697
+
1698
+ start: function() {
1699
+ this.get('port').on('promise:promisesUpdated', this, this.addOrUpdatePromises);
1700
+ this.get('port').send('promise:getAndObservePromises');
1701
+ },
1702
+
1703
+ stop: function() {
1704
+ this.get('port').off('promise:promisesUpdated', this, this.addOrUpdatePromises);
1705
+ this.get('port').send('promise:releasePromises');
1706
+ this.reset();
1707
+ },
1708
+
1709
+ reset: function() {
1710
+ this.set('topSortMeta', {});
1711
+ this.set('promiseIndex', {});
1712
+ this.get('topSort').clear();
1713
+
1714
+ this.set('firstMessageReceived', false);
1715
+ var all = this.get('all');
1716
+ // Lazily destroy promises
1717
+ // Allows for a smooth transition on deactivate,
1718
+ // and thus providing the illusion of better perf
1719
+ Ember.run.later(this, function() {
1720
+ this.destroyPromises(all);
1721
+ }, 500);
1722
+ this.set('all', []);
1723
+ },
1724
+
1725
+ destroyPromises: function(promises) {
1726
+ promises.forEach(function(item) {
1727
+ item.destroy();
1728
+ });
1729
+ },
1730
+
1731
+ addOrUpdatePromises: function(message) {
1732
+ this.rebuildPromises(message.promises);
1733
+
1734
+ if (!this.get('firstMessageReceived')) {
1735
+ this.set('firstMessageReceived', true);
1736
+ this.trigger('firstMessageReceived');
1737
+ }
1738
+ },
1739
+
1740
+ rebuildPromises: function(promises) {
1741
+ promises.forEach(function(props) {
1742
+ props = Ember.copy(props);
1743
+ var childrenIds = props.children;
1744
+ var parentId = props.parent;
1745
+ delete props.children;
1746
+ delete props.parent;
1747
+ if (parentId && parentId !== props.guid) {
1748
+ props.parent = this.updateOrCreate({ guid: parentId });
1749
+ }
1750
+ var promise = this.updateOrCreate(props);
1751
+ if (childrenIds) {
1752
+ childrenIds.forEach(function(childId){
1753
+ // avoid infinite recursion
1754
+ if (childId === props.guid) {
1755
+ return;
1756
+ }
1757
+ var child = this.updateOrCreate({ guid: childId, parent: promise });
1758
+ promise.get('children').pushObject(child);
1759
+ }.bind(this));
1760
+ }
1761
+ }.bind(this));
1762
+ },
1763
+
1764
+ updateTopSort: function(promise) {
1765
+ var topSortMeta = this.get('topSortMeta'),
1766
+ guid = promise.get('guid'),
1767
+ meta = topSortMeta[guid],
1768
+ isNew = !meta,
1769
+ hadParent = false,
1770
+ hasParent = !!promise.get('parent'),
1771
+ topSort = this.get('topSort'),
1772
+ parentChanged = isNew;
1773
+
1774
+ if (isNew) {
1775
+ meta = topSortMeta[guid] = {};
1776
+ } else {
1777
+ hadParent = meta.hasParent;
1778
+ }
1779
+ if (!isNew && hasParent !== hadParent) {
1780
+ // todo: implement recursion to reposition children
1781
+ topSort.removeObject(promise);
1782
+ parentChanged = true;
1783
+ }
1784
+ meta.hasParent = hasParent;
1785
+ if (parentChanged) {
1786
+ this.insertInTopSort(promise);
1787
+ }
1788
+ },
1789
+
1790
+ insertInTopSort: function(promise) {
1791
+ var topSort = this.get('topSort');
1792
+ if (promise.get('parent')) {
1793
+ var parentIndex = topSort.indexOf(promise.get('parent'));
1794
+ topSort.insertAt(parentIndex + 1, promise);
1795
+ } else {
1796
+ topSort.pushObject(promise);
1797
+ }
1798
+ promise.get('children').forEach(function(child) {
1799
+ topSort.removeObject(child);
1800
+ this.insertInTopSort(child);
1801
+ }.bind(this));
1802
+ },
1803
+
1804
+ updateOrCreate: function(props) {
1805
+ var guid = props.guid;
1806
+ var parentChanged = true;
1807
+ var promise = this.findOrCreate(guid);
1808
+
1809
+ promise.setProperties(props);
1810
+
1811
+ this.updateTopSort(promise);
1812
+
1813
+ return promise;
1814
+ },
1815
+
1816
+ createPromise: function(props) {
1817
+ var promise = Promise.create(props),
1818
+ index = this.get('all.length');
1819
+
1820
+ this.get('all').pushObject(promise);
1821
+ this.get('promiseIndex')[promise.get('guid')] = index;
1822
+ return promise;
1823
+ },
1824
+
1825
+ find: function(guid) {
1826
+ if (guid) {
1827
+ var index = this.get('promiseIndex')[guid];
1828
+ if (index !== undefined) {
1829
+ return this.get('all').objectAt(index);
1830
+ }
1831
+ } else {
1832
+ return this.get('all');
1833
+ }
1834
+ },
1835
+
1836
+ findOrCreate: function(guid) {
1837
+ if (!guid) {
1838
+ Ember.assert('You have tried to findOrCreate without a guid');
1839
+ }
1840
+ return this.find(guid) || this.createPromise({
1841
+ guid: guid
1842
+ });
1843
+ }
1844
+ });
1845
+ });
1846
+ define("mixins/fake_table",
1847
+ ["exports"],
1848
+ function(__exports__) {
1849
+ "use strict";
1850
+ /* list-view comes with its own scrollbar
1851
+ * The header columns however are not inside list-view. The scrollbar will
1852
+ * cause flexbox to fail to match header and content.
1853
+ * This is a hack to allow account for scrollbar width (if any)
1854
+ */
1855
+
1856
+ function accountForScrollbar() {
1857
+ /*jshint validthis:true */
1858
+ var outside = this.$('.list-tree').innerWidth();
1859
+ var inside = this.$('.ember-list-container').innerWidth();
1860
+ this.$('.spacer').width(outside - inside);
1861
+ }
1862
+
1863
+ __exports__["default"] = Ember.Mixin.create({
1864
+ _accountForScrollbar: function() {
1865
+ Ember.run.scheduleOnce('afterRender', this, accountForScrollbar);
1866
+ }.on('didInsertElement')
1867
+ });
1868
+ });
1869
+ define("models/promise",
1870
+ ["utils/escape_reg_exp","exports"],
1871
+ function(__dependency1__, __exports__) {
1872
+ "use strict";
1873
+ var escapeRegExp = __dependency1__["default"];
1874
+ var typeOf = Ember.typeOf;
1875
+ var computed = Ember.computed;
1876
+ var or = computed.or;
1877
+ var equal = computed.equal;
1878
+ var not = computed.not;
1879
+
1880
+ var dateComputed = function() {
1881
+ return Ember.computed(
1882
+ function(key, date) {
1883
+ if (date !== undefined) {
1884
+ if (typeOf(date) === 'date') {
1885
+ return date;
1886
+ } else if (typeof date === 'number' || typeof date === 'string') {
1887
+ return new Date(date);
1888
+ }
1889
+ }
1890
+ return null;
1891
+ }).property();
1892
+ };
1893
+
1894
+ __exports__["default"] = Ember.Object.extend({
1895
+ createdAt: dateComputed(),
1896
+ settledAt: dateComputed(),
1897
+
1898
+ parent: null,
1899
+
1900
+ level: function() {
1901
+ var parent = this.get('parent');
1902
+ if (!parent) {
1903
+ return 0;
1904
+ }
1905
+ return parent.get('level') + 1;
1906
+ }.property('parent.level'),
1907
+
1908
+ isSettled: or('isFulfilled', 'isRejected'),
1909
+
1910
+ isFulfilled: equal('state', 'fulfilled'),
1911
+
1912
+ isRejected: equal('state', 'rejected'),
1913
+
1914
+ isPending: not('isSettled'),
1915
+
1916
+ children: function() {
1917
+ return [];
1918
+ }.property(),
1919
+
1920
+ pendingBranch: function() {
1921
+ return this.recursiveState('isPending', 'pendingBranch');
1922
+ }.property('isPending', 'children.@each.pendingBranch'),
1923
+
1924
+ rejectedBranch: function() {
1925
+ return this.recursiveState('isRejected', 'rejectedBranch');
1926
+ }.property('isRejected', 'children.@each.rejectedBranch'),
1927
+
1928
+ fulfilledBranch: function() {
1929
+ return this.recursiveState('isFulfilled', 'fulfilledBranch');
1930
+ }.property('isFulfilled', 'children.@each.fulfilledBranch'),
1931
+
1932
+ recursiveState: function(prop, cp) {
1933
+ if (this.get(prop)) {
1934
+ return true;
1935
+ }
1936
+ for (var i = 0; i < this.get('children.length'); i++) {
1937
+ if (this.get('children').objectAt(i).get(cp)) {
1938
+ return true;
1939
+ }
1940
+ }
1941
+ return false;
1942
+ },
1943
+
1944
+ // Need this observer because CP dependent keys do not support nested arrays
1945
+ // TODO: This can be so much better
1946
+ stateChanged: function() {
1947
+ if (!this.get('parent')) {
1948
+ return;
1949
+ }
1950
+ if (this.get('pendingBranch') && !this.get('parent.pendingBranch')) {
1951
+ this.get('parent').notifyPropertyChange('fulfilledBranch');
1952
+ this.get('parent').notifyPropertyChange('rejectedBranch');
1953
+ this.get('parent').notifyPropertyChange('pendingBranch');
1954
+ } else if (this.get('fulfilledBranch') && !this.get('parent.fulfilledBranch')) {
1955
+ this.get('parent').notifyPropertyChange('fulfilledBranch');
1956
+ this.get('parent').notifyPropertyChange('rejectedBranch');
1957
+ this.get('parent').notifyPropertyChange('pendingBranch');
1958
+ } else if (this.get('rejectedBranch') && !this.get('parent.rejectedBranch')) {
1959
+ this.get('parent').notifyPropertyChange('fulfilledBranch');
1960
+ this.get('parent').notifyPropertyChange('rejectedBranch');
1961
+ this.get('parent').notifyPropertyChange('pendingBranch');
1962
+ }
1963
+
1964
+ }.observes('pendingBranch', 'fulfilledBranch', 'rejectedBranch'),
1965
+
1966
+ updateParentLabel: function() {
1967
+ this.addBranchLabel(this.get('label'), true);
1968
+ }.observes('label', 'parent'),
1969
+
1970
+ addBranchLabel: function(label, replace) {
1971
+ if (Ember.isEmpty(label)) {
1972
+ return;
1973
+ }
1974
+ if (replace) {
1975
+ this.set('branchLabel', label);
1976
+ } else {
1977
+ this.set('branchLabel', this.get('branchLabel') + ' ' + label);
1978
+ }
1979
+
1980
+ var parent = this.get('parent');
1981
+ if (parent) {
1982
+ parent.addBranchLabel(label);
1983
+ }
1984
+ },
1985
+
1986
+ branchLabel: '',
1987
+
1988
+ matches: function(val) {
1989
+ return !!this.get('branchLabel').toLowerCase().match(new RegExp('.*' + escapeRegExp(val.toLowerCase()) + '.*'));
1990
+ },
1991
+
1992
+ matchesExactly: function(val) {
1993
+ return !!((this.get('label') || '').toLowerCase().match(new RegExp('.*' + escapeRegExp(val.toLowerCase()) + '.*')));
1994
+ },
1995
+
1996
+
1997
+
1998
+ // EXPANDED / COLLAPSED PROMISES
1999
+
2000
+ isExpanded: false,
2001
+
2002
+ isManuallyExpanded: undefined,
2003
+
2004
+ stateOrParentChanged: function() {
2005
+ var parent = this.get('parent');
2006
+ if (parent) {
2007
+ Ember.run.once(parent, 'recalculateExpanded');
2008
+ }
2009
+ }.observes('isPending', 'isFulfilled', 'isRejected', 'parent'),
2010
+
2011
+ _findTopParent: function() {
2012
+ var parent = this.get('parent');
2013
+ if(!parent) {
2014
+ return this;
2015
+ } else {
2016
+ return parent._findTopParent();
2017
+ }
2018
+ },
2019
+
2020
+ recalculateExpanded: function() {
2021
+ var isExpanded = false;
2022
+ if (this.get('isManuallyExpanded') !== undefined) {
2023
+ isExpanded = this.get('isManuallyExpanded');
2024
+ } else {
2025
+ var children = this._allChildren();
2026
+ for (var i = 0, l = children.length; i < l; i++) {
2027
+ var child = children[i];
2028
+ if (child.get('isRejected')) {
2029
+ isExpanded = true;
2030
+ }
2031
+ if (child.get('isPending') && !child.get('parent.isPending')) {
2032
+ isExpanded = true;
2033
+ }
2034
+ if (isExpanded) {
2035
+ break;
2036
+ }
2037
+ }
2038
+ var parents = this._allParents();
2039
+ if (isExpanded) {
2040
+ parents.forEach(function(parent) {
2041
+ parent.set('isExpanded', true);
2042
+ });
2043
+ } else if(this.get('parent.isExpanded')) {
2044
+ this.get('parent').recalculateExpanded();
2045
+ }
2046
+ }
2047
+ this.set('isExpanded', isExpanded);
2048
+ return isExpanded;
2049
+ },
2050
+
2051
+ isVisible: function() {
2052
+ if (this.get('parent')) {
2053
+ return this.get('parent.isExpanded') && this.get('parent.isVisible');
2054
+ }
2055
+ return true;
2056
+ }.property('parent.isExpanded', 'parent', 'parent.isVisible'),
2057
+
2058
+ _allChildren: function() {
2059
+ var children = Ember.$.extend([], this.get('children'));
2060
+ children.forEach(function(item) {
2061
+ children = Ember.$.merge(children, item._allChildren());
2062
+ });
2063
+ return children;
2064
+ },
2065
+
2066
+ _allParents: function() {
2067
+ var parent = this.get('parent');
2068
+ if (parent) {
2069
+ return Ember.$.merge([parent], parent._allParents());
2070
+ } else {
2071
+ return [];
2072
+ }
2073
+ }
2074
+ });
2075
+ });
2076
+ define("port",
2077
+ ["exports"],
2078
+ function(__exports__) {
2079
+ "use strict";
2080
+ __exports__["default"] = Ember.Object.extend(Ember.Evented, {
2081
+ applicationId: undefined,
2082
+
2083
+ detectedApplications: function() {
2084
+ return [];
2085
+ }.property(),
2086
+
2087
+ init: function() {
2088
+ var detectedApplications = this.get('detectedApplications');
2089
+ this.get('adapter').onMessageReceived(function(message) {
2090
+ if (!message.applicationId) {
2091
+ return;
2092
+ }
2093
+ if (!this.get('applicationId')) {
2094
+ this.set('applicationId', message.applicationId);
2095
+ }
2096
+ // save list of application ids
2097
+ if (detectedApplications.indexOf(message.applicationId) === -1) {
2098
+ detectedApplications.pushObject(message.applicationId);
2099
+ }
2100
+
2101
+ var applicationId = this.get('applicationId');
2102
+ if (applicationId === message.applicationId) {
2103
+ this.trigger(message.type, message, applicationId);
2104
+ }
2105
+ }.bind(this));
2106
+ },
2107
+ send: function(type, message) {
2108
+ message = message || {};
2109
+ message.type = type;
2110
+ message.from = 'devtools';
2111
+ message.applicationId = this.get('applicationId');
2112
+ this.get('adapter').sendMessage(message);
2113
+ }
2114
+ });
2115
+ });
2116
+ define("router",
2117
+ ["exports"],
2118
+ function(__exports__) {
2119
+ "use strict";
2120
+ var Router = Ember.Router.extend({
2121
+ location: 'none'
2122
+ });
2123
+
2124
+ Router.map(function() {
2125
+ this.resource('view-tree', { path: '/' });
2126
+ this.resource('route-tree');
2127
+
2128
+ this.resource('data', function() {
2129
+ this.resource('model-types', function() {
2130
+ this.resource('model-type', { path: '/:type_id'}, function() {
2131
+ this.resource('records');
2132
+ });
2133
+ });
2134
+ });
2135
+
2136
+ this.resource('promises', function() {
2137
+ this.resource('promise-tree');
2138
+ });
2139
+
2140
+ this.resource('info');
2141
+ this.resource('render-tree');
2142
+ this.resource('container-types', function() {
2143
+ this.resource('container-type', { path: '/:type_id' });
2144
+ });
2145
+ });
2146
+
2147
+ __exports__["default"] = Router;
2148
+ });
2149
+ define("routes/application",
2150
+ ["exports"],
2151
+ function(__exports__) {
2152
+ "use strict";
2153
+ __exports__["default"] = Ember.Route.extend({
2154
+ setupController: function(controller, model) {
2155
+ this.controllerFor('mixinStack').set('model', []);
2156
+
2157
+ this.get('port').on('objectInspector:updateObject', this, this.updateObject);
2158
+ this.get('port').on('objectInspector:updateProperty', this, this.updateProperty);
2159
+ this.get('port').on('objectInspector:droppedObject', this, this.droppedObject);
2160
+
2161
+ this.get('port').one('general:applicationBooted', this, function(message) {
2162
+ controller.set('emberApplication', message.booted);
2163
+ });
2164
+ this.get('port').send('general:applicationBooted');
2165
+ this._super(controller, model);
2166
+ },
2167
+
2168
+ deactivate: function() {
2169
+ this.get('port').off('objectInspector:updateObject', this, this.updateObject);
2170
+ this.get('port').off('objectInspector:updateProperty', this, this.updateProperty);
2171
+ this.get('port').off('objectInspector:droppedObject', this, this.droppedObject);
2172
+
2173
+ },
2174
+
2175
+ updateObject: function(options) {
2176
+ var details = options.details,
2177
+ name = options.name,
2178
+ property = options.property,
2179
+ objectId = options.objectId;
2180
+
2181
+ Ember.NativeArray.apply(details);
2182
+ details.forEach(arrayize);
2183
+
2184
+ var controller = this.get('controller');
2185
+
2186
+ if (options.parentObject) {
2187
+ controller.pushMixinDetails(name, property, objectId, details);
2188
+ } else {
2189
+ controller.activateMixinDetails(name, details, objectId);
2190
+ }
2191
+
2192
+ this.send('expandInspector');
2193
+ },
2194
+
2195
+ updateProperty: function(options) {
2196
+ var detail = this.controllerFor('mixinDetails').get('mixins').objectAt(options.mixinIndex);
2197
+ var property = Ember.get(detail, 'properties').findProperty('name', options.property);
2198
+ Ember.set(property, 'value', options.value);
2199
+ },
2200
+
2201
+ droppedObject: function(message) {
2202
+ var controller = this.get('controller');
2203
+ controller.droppedObject(message.objectId);
2204
+ },
2205
+
2206
+ actions: {
2207
+ expandInspector: function() {
2208
+ this.set("controller.inspectorExpanded", true);
2209
+ },
2210
+ toggleInspector: function() {
2211
+ this.toggleProperty("controller.inspectorExpanded");
2212
+ },
2213
+ inspectObject: function(objectId) {
2214
+ if (objectId) {
2215
+ this.get('port').send('objectInspector:inspectById', { objectId: objectId });
2216
+ }
2217
+ },
2218
+ setIsDragging: function (isDragging) {
2219
+ this.set('controller.isDragging', isDragging);
2220
+ },
2221
+ refreshPage: function() {
2222
+ this.get('port').send('general:refresh');
2223
+ // inject ember_debug as quickly as possible in chrome
2224
+ // so that promises created on dom ready are caught
2225
+ this.get('adapter').willReload();
2226
+ }
2227
+ }
2228
+ });
2229
+
2230
+ function arrayize(mixin) {
2231
+ Ember.NativeArray.apply(mixin.properties);
2232
+ }
2233
+ });
2234
+ define("routes/container_type",
2235
+ ["routes/tab","exports"],
2236
+ function(__dependency1__, __exports__) {
2237
+ "use strict";
2238
+ var TabRoute = __dependency1__["default"];
2239
+ var get = Ember.get;
2240
+ var Promise = Ember.RSVP.Promise;
2241
+
2242
+ __exports__["default"] = TabRoute.extend({
2243
+ setupController: function(controller) {
2244
+ controller.setProperties({
2245
+ search: '',
2246
+ searchVal: ''
2247
+ });
2248
+ this._super.apply(this, arguments);
2249
+ },
2250
+ model: function(params) {
2251
+ var type = params.type_id;
2252
+ var port = this.get('port');
2253
+ return new Promise(function(resolve) {
2254
+ port.one('container:instances', function(message) {
2255
+ resolve(message.instances);
2256
+ });
2257
+ port.send('container:getInstances', { containerType: type });
2258
+ });
2259
+ },
2260
+
2261
+ actions: {
2262
+ inspectInstance: function(obj) {
2263
+ if (!get(obj, 'inspectable')) {
2264
+ return;
2265
+ }
2266
+ this.get('port').send('objectInspector:inspectByContainerLookup', { name: get(obj, 'fullName') });
2267
+ },
2268
+ sendInstanceToConsole: function(obj) {
2269
+ this.get('port').send('container:sendInstanceToConsole', { name: get(obj, 'fullName') });
2270
+ }
2271
+ }
2272
+ });
2273
+ });
2274
+ define("routes/container_types",
2275
+ ["exports"],
2276
+ function(__exports__) {
2277
+ "use strict";
2278
+ var Route = Ember.Route;
2279
+ var Promise = Ember.RSVP.Promise;
2280
+
2281
+ __exports__["default"] = Route.extend({
2282
+ model: function() {
2283
+ var port = this.get('port');
2284
+ return new Promise(function(resolve) {
2285
+ port.one('container:types', function(message) {
2286
+ resolve(message.types);
2287
+ });
2288
+ port.send('container:getTypes');
2289
+ });
2290
+ },
2291
+ actions: {
2292
+ reload: function() {
2293
+ this.refresh();
2294
+ }
2295
+ }
2296
+ });
2297
+ });
2298
+ define("routes/container_types/index",
2299
+ ["routes/tab","exports"],
2300
+ function(__dependency1__, __exports__) {
2301
+ "use strict";
2302
+ var TabRoute = __dependency1__["default"];
2303
+ __exports__["default"] = TabRoute;
2304
+ });
2305
+ define("routes/data/index",
2306
+ ["exports"],
2307
+ function(__exports__) {
2308
+ "use strict";
2309
+ var Promise = Ember.RSVP.Promise;
2310
+
2311
+ __exports__["default"] = Ember.Route.extend({
2312
+ model: function() {
2313
+ var route = this;
2314
+ return new Promise(function(resolve) {
2315
+ route.get('port').one('data:hasAdapter', function(message) {
2316
+ resolve(message.hasAdapter);
2317
+ });
2318
+ route.get('port').send('data:checkAdapter');
2319
+ });
2320
+ },
2321
+ afterModel: function(model) {
2322
+ if (model) {
2323
+ this.transitionTo('model-types');
2324
+ }
2325
+ }
2326
+ });
2327
+ });
2328
+ define("routes/info",
2329
+ ["routes/tab","exports"],
2330
+ function(__dependency1__, __exports__) {
2331
+ "use strict";
2332
+ var TabRoute = __dependency1__["default"];
2333
+
2334
+ var Promise = Ember.RSVP.Promise;
2335
+ var oneWay = Ember.computed.oneWay;
2336
+
2337
+ __exports__["default"] = TabRoute.extend({
2338
+ version: oneWay('config.VERSION').readOnly(),
2339
+
2340
+ model: function() {
2341
+ var version = this.get('version');
2342
+ var port = this.get('port');
2343
+ return new Promise(function(resolve) {
2344
+ port.one('general:libraries', function(message) {
2345
+ message.libraries.insertAt(0, {
2346
+ name: 'Ember Inspector',
2347
+ version: version
2348
+ });
2349
+ resolve(message.libraries);
2350
+ });
2351
+ port.send('general:getLibraries');
2352
+ });
2353
+ }
2354
+ });
2355
+ });
2356
+ define("routes/model_type",
2357
+ ["exports"],
2358
+ function(__exports__) {
2359
+ "use strict";
2360
+ __exports__["default"] = Ember.Route.extend({
2361
+ setupController: function(controller, model) {
2362
+ this._super(controller, model);
2363
+ this.controllerFor('model-types').set('selected', model);
2364
+ },
2365
+
2366
+ deactivate: function() {
2367
+ this.controllerFor('model-types').set('selected', null);
2368
+ },
2369
+
2370
+ serialize: function (model) {
2371
+ return { type_id: Ember.get(model, 'name') };
2372
+ }
2373
+ });
2374
+ });
2375
+ define("routes/model_types",
2376
+ ["exports"],
2377
+ function(__exports__) {
2378
+ "use strict";
2379
+ var Promise = Ember.RSVP.Promise;
2380
+
2381
+ __exports__["default"] = Ember.Route.extend({
2382
+ setupController: function(controller, model) {
2383
+ this._super(controller, model);
2384
+ this.get('port').on('data:modelTypesAdded', this, this.addModelTypes);
2385
+ this.get('port').on('data:modelTypesUpdated', this, this.updateModelTypes);
2386
+ this.get('port').send('data:getModelTypes');
2387
+ },
2388
+
2389
+ model: function() {
2390
+ return [];
2391
+ },
2392
+
2393
+ deactivate: function() {
2394
+ this.get('port').off('data:modelTypesAdded', this, this.addModelTypes);
2395
+ this.get('port').off('data:modelTypesUpdated', this, this.updateModelTypes);
2396
+ this.get('port').send('data:releaseModelTypes');
2397
+ },
2398
+
2399
+ addModelTypes: function(message) {
2400
+ this.get('currentModel').pushObjects(message.modelTypes);
2401
+ },
2402
+
2403
+ updateModelTypes: function(message) {
2404
+ var route = this;
2405
+ message.modelTypes.forEach(function(modelType) {
2406
+ var currentType = route.get('currentModel').findProperty('objectId', modelType.objectId);
2407
+ Ember.set(currentType, 'count', modelType.count);
2408
+ });
2409
+ }
2410
+ });
2411
+ });
2412
+ define("routes/promise_tree",
2413
+ ["routes/tab","exports"],
2414
+ function(__dependency1__, __exports__) {
2415
+ "use strict";
2416
+ var TabRoute = __dependency1__["default"];
2417
+
2418
+ var Promise = Ember.RSVP.Promise;
2419
+
2420
+ __exports__["default"] = TabRoute.extend({
2421
+ model: function() {
2422
+ // block rendering until first batch arrives
2423
+ // Helps prevent flashing of "please refresh the page"
2424
+ var route = this;
2425
+ return new Promise(function(resolve) {
2426
+ route.get('assembler').one('firstMessageReceived', function() {
2427
+ resolve(route.get('assembler.topSort'));
2428
+ });
2429
+ route.get('assembler').start();
2430
+ });
2431
+
2432
+ },
2433
+
2434
+ deactivate: function() {
2435
+ this.get('assembler').stop();
2436
+ },
2437
+
2438
+ actions: {
2439
+ sendValueToConsole: function(promise) {
2440
+ this.get('port').send('promise:sendValueToConsole', { promiseId: promise.get('guid') });
2441
+ },
2442
+
2443
+ toggleExpand: function(promise) {
2444
+ var isExpanded = !promise.get('isExpanded');
2445
+ promise.set('isManuallyExpanded', isExpanded);
2446
+ promise.recalculateExpanded();
2447
+ var children = promise._allChildren();
2448
+ if (isExpanded) {
2449
+ children.forEach(function(child) {
2450
+ var isManuallyExpanded = child.get('isManuallyExpanded');
2451
+ if (isManuallyExpanded === undefined) {
2452
+ child.set('isManuallyExpanded', isExpanded);
2453
+ child.recalculateExpanded();
2454
+ }
2455
+ });
2456
+ }
2457
+
2458
+ }
2459
+ }
2460
+ });
2461
+ });
2462
+ define("routes/promises/index",
2463
+ ["exports"],
2464
+ function(__exports__) {
2465
+ "use strict";
2466
+ var Promise = Ember.RSVP.Promise;
2467
+
2468
+ __exports__["default"] = Ember.Route.extend({
2469
+ beforeModel: function() {
2470
+ var route = this;
2471
+ return new Promise(function(resolve) {
2472
+ route.get('port').one('promise:supported', this, function(message) {
2473
+ if (message.supported) {
2474
+ route.transitionTo('promise-tree');
2475
+ } else {
2476
+ resolve();
2477
+ }
2478
+ });
2479
+ route.get('port').send('promise:supported');
2480
+ });
2481
+ },
2482
+
2483
+ renderTemplate: function() {
2484
+ this.render('promises.error');
2485
+ }
2486
+ });
2487
+ });
2488
+ define("routes/records",
2489
+ ["routes/tab","exports"],
2490
+ function(__dependency1__, __exports__) {
2491
+ "use strict";
2492
+ var TabRoute = __dependency1__["default"];
2493
+
2494
+ var Promise = Ember.RSVP.Promise, set = Ember.set;
2495
+
2496
+ __exports__["default"] = TabRoute.extend({
2497
+ setupController: function(controller, model) {
2498
+ this._super(controller, model);
2499
+
2500
+ var type = this.modelFor('model_type');
2501
+
2502
+ controller.set('modelType', this.modelFor('model_type'));
2503
+
2504
+ this.get('port').on('data:recordsAdded', this, this.addRecords);
2505
+ this.get('port').on('data:recordsUpdated', this, this.updateRecords);
2506
+ this.get('port').on('data:recordsRemoved', this, this.removeRecords);
2507
+ this.get('port').one('data:filters', this, function(message) {
2508
+ this.set('controller.filters', message.filters);
2509
+ });
2510
+ this.get('port').send('data:getFilters');
2511
+ this.get('port').send('data:getRecords', { objectId: type.objectId });
2512
+ },
2513
+
2514
+ model: function() {
2515
+ return [];
2516
+ },
2517
+
2518
+ deactivate: function() {
2519
+ this.get('port').off('data:recordsAdded', this, this.addRecords);
2520
+ this.get('port').off('data:recordsUpdated', this, this.updateRecords);
2521
+ this.get('port').off('data:recordsRemoved', this, this.removeRecords);
2522
+ this.get('port').send('data:releaseRecords');
2523
+ },
2524
+
2525
+ updateRecords: function(message) {
2526
+ var route = this;
2527
+ message.records.forEach(function(record) {
2528
+ var currentRecord = route.get('currentModel').findProperty('objectId', record.objectId);
2529
+ if (currentRecord) {
2530
+ set(currentRecord, 'columnValues', record.columnValues);
2531
+ set(currentRecord, 'filterValues', record.filterValues);
2532
+ set(currentRecord, 'searchIndex', record.searchIndex);
2533
+ set(currentRecord, 'color', record.color);
2534
+ }
2535
+ });
2536
+
2537
+ },
2538
+
2539
+ addRecords: function(message) {
2540
+ this.get('currentModel').pushObjects(message.records);
2541
+ },
2542
+
2543
+ removeRecords: function(message) {
2544
+ this.get('currentModel').removeAt(message.index, message.count);
2545
+ },
2546
+
2547
+ actions: {
2548
+ inspectModel: function(model) {
2549
+ this.get('port').send('data:inspectModel', { objectId: Ember.get(model, 'objectId') });
2550
+ }
2551
+ }
2552
+ });
2553
+ });
2554
+ define("routes/render_tree",
2555
+ ["routes/tab","exports"],
2556
+ function(__dependency1__, __exports__) {
2557
+ "use strict";
2558
+ var TabRoute = __dependency1__["default"];
2559
+
2560
+ var Promise = Ember.RSVP.Promise;
2561
+
2562
+ __exports__["default"] = TabRoute.extend({
2563
+ model: function() {
2564
+ var route = this, port = this.get('port');
2565
+ return new Promise(function(resolve) {
2566
+ port.one('render:profilesAdded', function(message) {
2567
+ resolve(message.profiles);
2568
+ });
2569
+ port.send('render:watchProfiles');
2570
+ });
2571
+ },
2572
+
2573
+ setupController: function(controller, model) {
2574
+ this._super.apply(this, arguments);
2575
+ if (model.length === 0) {
2576
+ controller.set('initialEmpty', true);
2577
+ }
2578
+ var port = this.get('port');
2579
+ port.on('render:profilesUpdated', this, this.profilesUpdated);
2580
+ port.on('render:profilesAdded', this, this.profilesAdded);
2581
+ },
2582
+
2583
+ deactivate: function() {
2584
+ var port = this.get('port');
2585
+ port.off('render:profilesUpdated', this, this.profilesUpdated);
2586
+ port.off('render:profilesAdded', this, this.profilesAdded);
2587
+ port.send('render:releaseProfiles');
2588
+ },
2589
+
2590
+ profilesUpdated: function(message) {
2591
+ this.set('controller.model', message.profiles);
2592
+ },
2593
+
2594
+ profilesAdded: function(message) {
2595
+ var model = this.get('controller.model');
2596
+ var profiles = message.profiles;
2597
+
2598
+ model.pushObjects(profiles);
2599
+ },
2600
+
2601
+ actions: {
2602
+ clearProfiles: function() {
2603
+ this.get('port').send('render:clear');
2604
+ }
2605
+ }
2606
+
2607
+ });
2608
+ });
2609
+ define("routes/route_tree",
2610
+ ["routes/tab","exports"],
2611
+ function(__dependency1__, __exports__) {
2612
+ "use strict";
2613
+ var TabRoute = __dependency1__["default"];
2614
+
2615
+ __exports__["default"] = TabRoute.extend({
2616
+ setupController: function(controller, model) {
2617
+ this._super(controller, model);
2618
+ this.get('port').on('route:currentRoute', this, this.setCurrentRoute);
2619
+ this.get('port').send('route:getCurrentRoute');
2620
+ this.get('port').on('route:routeTree', this, this.setTree);
2621
+ this.get('port').send('route:getTree');
2622
+ },
2623
+
2624
+ deactivate: function() {
2625
+ this.get('port').off('route:currentRoute');
2626
+ this.get('port').off('route:routeTree', this, this.setTree);
2627
+ },
2628
+
2629
+ setCurrentRoute: function(message) {
2630
+ this.get('controller').set('currentRoute', message.name);
2631
+ },
2632
+
2633
+ setTree: function(options) {
2634
+ var routeArray = topSort(options.tree);
2635
+ this.set('controller.model', routeArray);
2636
+ },
2637
+
2638
+ actions: {
2639
+ inspectRoute: function(name) {
2640
+ this.get('port').send('objectInspector:inspectRoute', { name: name } );
2641
+ },
2642
+
2643
+ inspectController: function(controller) {
2644
+ if (!controller.exists) {
2645
+ return;
2646
+ }
2647
+ this.get('port').send('objectInspector:inspectController', { name: controller.name } );
2648
+ },
2649
+
2650
+ sendControllerToConsole: function(controllerName) {
2651
+ this.get('port').send('objectInspector:sendControllerToConsole', { name: controllerName });
2652
+ },
2653
+
2654
+ sendRouteHandlerToConsole: function(routeName) {
2655
+ this.get('port').send('objectInspector:sendRouteHandlerToConsole', { name: routeName });
2656
+ }
2657
+ }
2658
+ });
2659
+
2660
+
2661
+ function topSort(tree, list) {
2662
+ list = list || [];
2663
+ var view = $.extend({}, tree);
2664
+ view.parentCount = view.parentCount || 0;
2665
+ delete view.children;
2666
+ list.push(view);
2667
+ tree.children = tree.children || [];
2668
+ tree.children.forEach(function(child) {
2669
+ child.parentCount = view.parentCount + 1;
2670
+ topSort(child, list);
2671
+ });
2672
+ return list;
2673
+ }
2674
+ });
2675
+ define("routes/tab",
2676
+ ["exports"],
2677
+ function(__exports__) {
2678
+ "use strict";
2679
+ __exports__["default"] = Ember.Route.extend({
2680
+ renderTemplate: function () {
2681
+ this.render();
2682
+ try {
2683
+ this.render(this.get('routeName').replace(/\./g, '/') + '_toolbar', {
2684
+ into: 'application',
2685
+ outlet: 'toolbar'
2686
+ });
2687
+ } catch (e) {}
2688
+ }
2689
+ });
2690
+ });
2691
+ define("routes/view_tree",
2692
+ ["routes/tab","exports"],
2693
+ function(__dependency1__, __exports__) {
2694
+ "use strict";
2695
+ var TabRoute = __dependency1__["default"];
2696
+
2697
+ __exports__["default"] = TabRoute.extend({
2698
+ setupController: function() {
2699
+ this.get('port').on('view:viewTree', this, this.setViewTree);
2700
+ this.get('port').on('view:stopInspecting', this, this.stopInspecting);
2701
+ this.get('port').on('view:startInspecting', this, this.startInspecting);
2702
+ this.get('port').on('view:pinView', this, this.pinView);
2703
+ this.get('port').on('view:unpinView', this, this.unpinView);
2704
+ this.get('port').send('view:getTree');
2705
+ },
2706
+
2707
+ deactivate: function() {
2708
+ this.get('port').off('view:viewTree', this, this.setViewTree);
2709
+ this.get('port').off('view:stopInspecting', this, this.stopInspecting);
2710
+ this.get('port').off('view:startInspecting', this, this.startInspecting);
2711
+ this.get('port').off('view:pinView', this, this.pinView);
2712
+ this.get('port').off('view:unpinView', this, this.unpinView);
2713
+ },
2714
+
2715
+ setViewTree: function(options) {
2716
+ var viewArray = topSort(options.tree);
2717
+ this.set('controller.model', viewArray);
2718
+ },
2719
+
2720
+ startInspecting: function() {
2721
+ this.set('controller.inspectingViews', true);
2722
+ },
2723
+
2724
+ stopInspecting: function() {
2725
+ this.set('controller.inspectingViews', false);
2726
+ },
2727
+
2728
+ pinView: function(message) {
2729
+ this.set('controller.pinnedObjectId', message.objectId);
2730
+ },
2731
+
2732
+ unpinView: function() {
2733
+ this.set('controller.pinnedObjectId', null);
2734
+ },
2735
+
2736
+ actions: {
2737
+ inspect: function(objectId) {
2738
+ if (objectId) {
2739
+ this.get('port').send('objectInspector:inspectById', { objectId: objectId });
2740
+ }
2741
+ },
2742
+ inspectElement: function(objectId) {
2743
+ this.get('port').send('view:inspectElement', { objectId: objectId });
2744
+ }
2745
+ }
2746
+
2747
+ });
2748
+
2749
+ function topSort(tree, list) {
2750
+ list = list || [];
2751
+ var view = $.extend({}, tree);
2752
+ view.parentCount = view.parentCount || 0;
2753
+ delete view.children;
2754
+ list.push(view);
2755
+ tree.children.forEach(function(child) {
2756
+ child.parentCount = view.parentCount + 1;
2757
+ topSort(child, list);
2758
+ });
2759
+ return list;
2760
+ }
2761
+
2762
+ function arrayizeTree(tree) {
2763
+ Ember.NativeArray.apply(tree.children);
2764
+ tree.children.forEach(arrayizeTree);
2765
+ return tree;
2766
+ }
2767
+ });
2768
+ define('templates/application', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
2769
+ this.compilerInfo = [4,'>= 1.0.0'];
2770
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
2771
+ var buffer = '', stack1, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;
2772
+
2773
+ function program1(depth0,data) {
2774
+
2775
+ var buffer = '', stack1, helper, options;
2776
+ data.buffer.push("\n <div class=\"split\">\n <div class=\"split__panel\">\n ");
2777
+ data.buffer.push(escapeExpression((helper = helpers.partial || (depth0 && depth0.partial),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["STRING"],data:data},helper ? helper.call(depth0, "main", options) : helperMissing.call(depth0, "partial", "main", options))));
2778
+ data.buffer.push("\n </div>\n\n ");
2779
+ stack1 = helpers['if'].call(depth0, "inspectorExpanded", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0],types:["ID"],data:data});
2780
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
2781
+ data.buffer.push("\n </div>\n\n");
2782
+ return buffer;
2783
+ }
2784
+ function program2(depth0,data) {
2785
+
2786
+ var buffer = '', stack1, helper, options;
2787
+ data.buffer.push("\n ");
2788
+ stack1 = (helper = helpers['draggable-column'] || (depth0 && depth0['draggable-column']),options={hash:{
2789
+ 'side': ("right"),
2790
+ 'width': ("inspectorWidth"),
2791
+ 'classNames': ("split__panel")
2792
+ },hashTypes:{'side': "STRING",'width': "ID",'classNames': "STRING"},hashContexts:{'side': depth0,'width': depth0,'classNames': depth0},inverse:self.noop,fn:self.program(3, program3, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "draggable-column", options));
2793
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
2794
+ data.buffer.push("\n ");
2795
+ return buffer;
2796
+ }
2797
+ function program3(depth0,data) {
2798
+
2799
+ var buffer = '', helper, options;
2800
+ data.buffer.push("\n ");
2801
+ data.buffer.push(escapeExpression((helper = helpers.render || (depth0 && depth0.render),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["STRING"],data:data},helper ? helper.call(depth0, "mixinStack", options) : helperMissing.call(depth0, "render", "mixinStack", options))));
2802
+ data.buffer.push("\n ");
2803
+ return buffer;
2804
+ }
2805
+
2806
+ function program5(depth0,data) {
2807
+
2808
+ var buffer = '', stack1, helper, options;
2809
+ data.buffer.push("\n ");
2810
+ stack1 = (helper = helpers['not-detected'] || (depth0 && depth0['not-detected']),options={hash:{
2811
+ 'description': ("Ember application")
2812
+ },hashTypes:{'description': "STRING"},hashContexts:{'description': depth0},inverse:self.noop,fn:self.program(6, program6, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "not-detected", options));
2813
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
2814
+ data.buffer.push("\n");
2815
+ return buffer;
2816
+ }
2817
+ function program6(depth0,data) {
2818
+
2819
+ var buffer = '', stack1;
2820
+ data.buffer.push("\n <li>This is not an Ember application.</li>\n <li>You are using an old version of Ember (&lt; rc5).</li>\n ");
2821
+ stack1 = helpers['if'].call(depth0, "isChrome", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(7, program7, data),contexts:[depth0],types:["ID"],data:data});
2822
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
2823
+ data.buffer.push("\n ");
2824
+ return buffer;
2825
+ }
2826
+ function program7(depth0,data) {
2827
+
2828
+
2829
+ data.buffer.push("\n <li>You are using the file:// protocol (instead of http://), in which case:\n <ul>\n <li>Visit the URL: chrome://extensions.</li>\n <li>Find the Ember Inspector.</li>\n <li>Make sure \"Allow access to file URLs\" is checked.</li>\n </ul>\n </li>\n ");
2830
+ }
2831
+
2832
+ stack1 = helpers['if'].call(depth0, "emberApplication", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(5, program5, data),fn:self.program(1, program1, data),contexts:[depth0],types:["ID"],data:data});
2833
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
2834
+ data.buffer.push("\n");
2835
+ return buffer;
2836
+
2837
+ }); });
2838
+
2839
+ define('templates/components/clear-button', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
2840
+ this.compilerInfo = [4,'>= 1.0.0'];
2841
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
2842
+
2843
+
2844
+
2845
+ data.buffer.push("<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <g class=\"svg-stroke\" transform=\"translate(3.000000, 3.7500000)\" stroke=\"#000000\" stroke-width=\"2\" fill=\"none\" fill-rule=\"evenodd\">\n <circle cx=\"5.5\" cy=\"5.5\" r=\"5.5\"></circle>\n <path d=\"M1.98253524,1.98253524 L9,9\" id=\"Line\" stroke-linecap=\"square\"></path>\n </g>\n</svg>\n");
2846
+
2847
+ }); });
2848
+
2849
+ define('templates/components/drag-handle', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
2850
+ this.compilerInfo = [4,'>= 1.0.0'];
2851
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
2852
+
2853
+
2854
+
2855
+ data.buffer.push("<div class=\"drag-handle__border\"></div>\n");
2856
+
2857
+ }); });
2858
+
2859
+ define('templates/components/draggable-column', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
2860
+ this.compilerInfo = [4,'>= 1.0.0'];
2861
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
2862
+ var buffer = '', stack1, helper, options, self=this, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;
2863
+
2864
+ function program1(depth0,data) {
2865
+
2866
+ var buffer = '', stack1;
2867
+ data.buffer.push("\n ");
2868
+ stack1 = helpers._triageMustache.call(depth0, "yield", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
2869
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
2870
+ data.buffer.push("\n");
2871
+ return buffer;
2872
+ }
2873
+
2874
+ stack1 = (helper = helpers['resizable-column'] || (depth0 && depth0['resizable-column']),options={hash:{
2875
+ 'width': ("width"),
2876
+ 'classNames': ("classNames")
2877
+ },hashTypes:{'width': "ID",'classNames': "ID"},hashContexts:{'width': depth0,'classNames': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "resizable-column", options));
2878
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
2879
+ data.buffer.push("\n\n");
2880
+ data.buffer.push(escapeExpression((helper = helpers['drag-handle'] || (depth0 && depth0['drag-handle']),options={hash:{
2881
+ 'side': ("side"),
2882
+ 'position': ("width"),
2883
+ 'minWidth': ("minWidth"),
2884
+ 'action': ("setIsDragging")
2885
+ },hashTypes:{'side': "ID",'position': "ID",'minWidth': "ID",'action': "STRING"},hashContexts:{'side': depth0,'position': depth0,'minWidth': depth0,'action': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "drag-handle", options))));
2886
+ data.buffer.push("\n");
2887
+ return buffer;
2888
+
2889
+ }); });
2890
+
2891
+ define('templates/components/expandable-render', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
2892
+ this.compilerInfo = [4,'>= 1.0.0'];
2893
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
2894
+ var buffer = '', stack1, escapeExpression=this.escapeExpression, self=this;
2895
+
2896
+ function program1(depth0,data) {
2897
+
2898
+ var buffer = '', stack1;
2899
+ data.buffer.push("\n<a href='#' ");
2900
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "expand", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["STRING"],data:data})));
2901
+ data.buffer.push(" class='title'>\n <span class='expander'>");
2902
+ stack1 = helpers['if'].call(depth0, "expanded", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),contexts:[depth0],types:["ID"],data:data});
2903
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
2904
+ data.buffer.push("</span>\n ");
2905
+ data.buffer.push(escapeExpression(helpers.unbound.call(depth0, "node.name", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data})));
2906
+ data.buffer.push(" <span class='duration'>");
2907
+ data.buffer.push(escapeExpression(helpers.unbound.call(depth0, "node.duration", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data})));
2908
+ data.buffer.push("</span></a>\n");
2909
+ return buffer;
2910
+ }
2911
+ function program2(depth0,data) {
2912
+
2913
+
2914
+ data.buffer.push("-");
2915
+ }
2916
+
2917
+ function program4(depth0,data) {
2918
+
2919
+
2920
+ data.buffer.push("+");
2921
+ }
2922
+
2923
+ function program6(depth0,data) {
2924
+
2925
+ var buffer = '';
2926
+ data.buffer.push("\n <div class='title'>");
2927
+ data.buffer.push(escapeExpression(helpers.unbound.call(depth0, "node.name", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data})));
2928
+ data.buffer.push(" <span class='duration'>");
2929
+ data.buffer.push(escapeExpression(helpers.unbound.call(depth0, "node.duration", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data})));
2930
+ data.buffer.push("</span></div>\n");
2931
+ return buffer;
2932
+ }
2933
+
2934
+ stack1 = helpers['if'].call(depth0, "node.children", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(6, program6, data),fn:self.program(1, program1, data),contexts:[depth0],types:["ID"],data:data});
2935
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
2936
+ data.buffer.push("\n");
2937
+ return buffer;
2938
+
2939
+ }); });
2940
+
2941
+ define('templates/components/not-detected', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
2942
+ this.compilerInfo = [4,'>= 1.0.0'];
2943
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
2944
+ var buffer = '', stack1, self=this;
2945
+
2946
+ function program1(depth0,data) {
2947
+
2948
+ var buffer = '', stack1;
2949
+ data.buffer.push("\n ");
2950
+ stack1 = helpers._triageMustache.call(depth0, "reasonsTitle", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
2951
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
2952
+ data.buffer.push("\n ");
2953
+ return buffer;
2954
+ }
2955
+
2956
+ function program3(depth0,data) {
2957
+
2958
+
2959
+ data.buffer.push("\n Here are some common reasons this happens:\n ");
2960
+ }
2961
+
2962
+ data.buffer.push("<div class=\"error-page\" data-label=\"error-page\">\n\n <div class=\"error-page__content\">\n\n <div class=\"error-page__header\">\n <div class=\"error-page__title\" data-label=\"error-page-title\">");
2963
+ stack1 = helpers._triageMustache.call(depth0, "description", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
2964
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
2965
+ data.buffer.push(" not detected!</div>\n </div>\n\n <div class=\"error-page__reasons\">\n\n <div class=\"error-page__reasons-title\">\n ");
2966
+ stack1 = helpers['if'].call(depth0, "reasonsTitle", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(3, program3, data),fn:self.program(1, program1, data),contexts:[depth0],types:["ID"],data:data});
2967
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
2968
+ data.buffer.push("\n </div>\n\n <ul class=\"error-page__list\">\n ");
2969
+ stack1 = helpers._triageMustache.call(depth0, "yield", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
2970
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
2971
+ data.buffer.push("\n </ul>\n\n If you're still having trouble, please file an issue on the Ember Inspector's\n <a href=\"https://github.com/tildeio/ember-extension\" target=\"_blank\">GitHub page.</a>\n </div>\n\n </div>\n\n</div>\n");
2972
+ return buffer;
2973
+
2974
+ }); });
2975
+
2976
+ define('templates/components/property-field', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
2977
+ this.compilerInfo = [4,'>= 1.0.0'];
2978
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
2979
+ var buffer = '';
2980
+
2981
+
2982
+ return buffer;
2983
+
2984
+ }); });
2985
+
2986
+ define('templates/components/reload-button', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
2987
+ this.compilerInfo = [4,'>= 1.0.0'];
2988
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
2989
+
2990
+
2991
+
2992
+ data.buffer.push("<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\r\n width=\"14px\" height=\"14px\" viewBox=\"0 0 54.203 55.142\" enable-background=\"new 0 0 54.203 55.142\" xml:space=\"preserve\">\r\n<path fill=\"#797979\" d=\"M54.203,21.472l-0.101-1.042h0.101c-0.042-0.159-0.101-0.311-0.146-0.468l-1.82-18.786l-6.056,6.055\r\n C41.277,2.741,34.745,0,27.571,0C12.344,0,0,12.344,0,27.571s12.344,27.571,27.571,27.571c12.757,0,23.485-8.666,26.632-20.431\r\n h-8.512c-2.851,7.228-9.881,12.349-18.12,12.349c-10.764,0-19.49-8.726-19.49-19.489s8.727-19.489,19.49-19.489\r\n c4.942,0,9.441,1.853,12.873,4.887l-6.536,6.536L54.203,21.472z\"/>\r\n</svg>\r\n");
2993
+
2994
+ }); });
2995
+
2996
+ define('templates/components/send-to-console', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
2997
+ this.compilerInfo = [4,'>= 1.0.0'];
2998
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
2999
+
3000
+
3001
+
3002
+ data.buffer.push("<img src=\"../images/send.png\" title=\"Send to console\">\n");
3003
+
3004
+ }); });
3005
+
3006
+ define('templates/components/sidebar-toggle', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
3007
+ this.compilerInfo = [4,'>= 1.0.0'];
3008
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
3009
+ var stack1, self=this;
3010
+
3011
+ function program1(depth0,data) {
3012
+
3013
+ var buffer = '', stack1;
3014
+ data.buffer.push("\n ");
3015
+ stack1 = helpers['if'].call(depth0, "isExpanded", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),contexts:[depth0],types:["ID"],data:data});
3016
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3017
+ data.buffer.push("\n");
3018
+ return buffer;
3019
+ }
3020
+ function program2(depth0,data) {
3021
+
3022
+
3023
+ data.buffer.push("\n <svg width=\"16px\" height=\"14px\" viewBox=\"0 0 16 14\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>Collapse Right Sidebar</title>\n <g id=\"expand-sidebar-left\" stroke=\"none\" fill=\"none\" transform=\"translate(0,1)\">\n <rect class=\"svg-stroke\" stroke=\"#000000\" x=\"0.5\" y=\"0.5\" width=\"14\" height=\"12\"></rect>\n <path class=\"svg-stroke\" shape-rendering=\"crispEdges\" d=\"M10.75,0 L10.75,12\" stroke=\"#000000\"></path>\n <path class=\"svg-fill\" d=\"M6.25,4 L9.25,9.5 L3.25,9.5 L6.25,4 Z\" fill=\"#000\" transform=\"translate(6.250000, 6.500000) scale(-1, 1) rotate(-90.000000) translate(-6.250000, -6.500000) \"></path>\n </g>\n </svg>\n ");
3024
+ }
3025
+
3026
+ function program4(depth0,data) {
3027
+
3028
+
3029
+ data.buffer.push("\n <svg width=\"16px\" height=\"14px\" viewBox=\"0 0 16 14\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>Expand Right Sidebar</title>\n <g id=\"expand-sidebar-left\" stroke=\"none\" fill=\"none\" transform=\"translate(0,1)\">\n <rect class=\"svg-stroke\" stroke=\"#000000\" x=\"0.5\" y=\"0.5\" width=\"14\" height=\"12\"></rect>\n <path class=\"svg-stroke\" shape-rendering=\"crispEdges\" d=\"M10.75,0 L10.75,12\" stroke=\"#000000\"></path>\n <path class=\"svg-fill\" d=\"M5.25,4 L8.25,9.25 L2.25,9.25 L5.25,4 L5.25,4 Z\" fill=\"#000000\" transform=\"translate(5.250000, 6.500000) rotate(-90.000000) translate(-5.250000, -6.500000)\"></path>\n </g>\n </svg>\n ");
3030
+ }
3031
+
3032
+ function program6(depth0,data) {
3033
+
3034
+ var buffer = '', stack1;
3035
+ data.buffer.push("\n ");
3036
+ stack1 = helpers['if'].call(depth0, "isExpanded", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(9, program9, data),fn:self.program(7, program7, data),contexts:[depth0],types:["ID"],data:data});
3037
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3038
+ data.buffer.push("\n");
3039
+ return buffer;
3040
+ }
3041
+ function program7(depth0,data) {
3042
+
3043
+
3044
+ data.buffer.push("\n <svg width=\"16px\" height=\"14px\" viewBox=\"0 0 16 14\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>Collapse Left Sidebar</title>\n <g id=\"expand-sidebar-left\" stroke=\"none\" fill=\"none\" transform=\"translate(8.000000, 8.000000) scale(-1, 1) translate(-8.000000, -7.000000)\">\n <rect class=\"svg-stroke\" stroke=\"#000000\" x=\"0.5\" y=\"0.5\" width=\"14\" height=\"12\"></rect>\n <path class=\"svg-stroke\" shape-rendering=\"crispEdges\" d=\"M10.5,0 L10.5,12\" stroke=\"#000000\"></path>\n <path class=\"svg-fill\" d=\"M6.25,4 L9.25,9.5 L3.25,9.5 L6.25,4 Z\" fill=\"#000\" transform=\"translate(6.250000, 6.500000) scale(-1, 1) rotate(-90.000000) translate(-6.250000, -6.500000) \"></path>\n </g>\n </svg>\n ");
3045
+ }
3046
+
3047
+ function program9(depth0,data) {
3048
+
3049
+
3050
+ data.buffer.push("\n <svg width=\"16px\" height=\"14px\" viewBox=\"0 0 16 14\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>Expand Left Sidebar</title>\n <g id=\"expand-sidebar-left\" stroke=\"none\" fill=\"none\" transform=\"translate(8.000000, 8.000000) scale(-1, 1) translate(-8.000000, -7.000000)\">\n <rect class=\"svg-stroke\" stroke=\"#000000\" x=\"0.5\" y=\"0.5\" width=\"14\" height=\"12\"></rect>\n <path class=\"svg-stroke\" shape-rendering=\"crispEdges\" d=\"M10.5,0 L10.5,12\" stroke=\"#000000\"></path>\n <path class=\"svg-fill\" d=\"M5.25,4 L8.25,9.25 L2.25,9.25 L5.25,4 L5.25,4 Z\" fill=\"#000000\" transform=\"translate(5.250000, 6.500000) rotate(-90.000000) translate(-5.250000, -6.500000)\"></path>\n </g>\n </svg>\n ");
3051
+ }
3052
+
3053
+ stack1 = helpers['if'].call(depth0, "isRight", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(6, program6, data),fn:self.program(1, program1, data),contexts:[depth0],types:["ID"],data:data});
3054
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3055
+ else { data.buffer.push(''); }
3056
+
3057
+ }); });
3058
+
3059
+ define('templates/container_type', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
3060
+ this.compilerInfo = [4,'>= 1.0.0'];
3061
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
3062
+ var buffer = '', escapeExpression=this.escapeExpression;
3063
+
3064
+
3065
+ data.buffer.push("<div class=\"list-view\">\n <div class=\"list-view__header row\">\n <div class=\"cell cell_type_header\" data-label=\"column-title\">Name</div>\n\n <!-- Account for scrollbar width :'( -->\n <div class=\"cell cell_type_header spacer\"></div>\n </div>\n\n <div class=\"list-view__list-container\">\n ");
3066
+ data.buffer.push(escapeExpression(helpers.view.call(depth0, "instanceList", {hash:{
3067
+ 'content': ("")
3068
+ },hashTypes:{'content': "ID"},hashContexts:{'content': depth0},contexts:[depth0],types:["STRING"],data:data})));
3069
+ data.buffer.push("\n </div>\n</div>\n");
3070
+ return buffer;
3071
+
3072
+ }); });
3073
+
3074
+ define('templates/container_type_toolbar', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
3075
+ this.compilerInfo = [4,'>= 1.0.0'];
3076
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
3077
+ var buffer = '', helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;
3078
+
3079
+
3080
+ data.buffer.push("<div class=\"toolbar\">\n ");
3081
+ data.buffer.push(escapeExpression((helper = helpers['reload-button'] || (depth0 && depth0['reload-button']),options={hash:{
3082
+ 'action': ("reload"),
3083
+ 'classNames': ("toolbar__icon-button"),
3084
+ 'dataLabel': ("reload-container-btn")
3085
+ },hashTypes:{'action': "STRING",'classNames': "STRING",'dataLabel': "STRING"},hashContexts:{'action': depth0,'classNames': depth0,'dataLabel': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "reload-button", options))));
3086
+ data.buffer.push("\n\n <div class=\"toolbar__search toolbar__search--small\" data-label=\"container-instance-search\">\n ");
3087
+ data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{
3088
+ 'value': ("searchVal"),
3089
+ 'placeholder': ("Search")
3090
+ },hashTypes:{'value': "ID",'placeholder': "STRING"},hashContexts:{'value': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "input", options))));
3091
+ data.buffer.push("\n </div>\n</div>\n");
3092
+ return buffer;
3093
+
3094
+ }); });
3095
+
3096
+ define('templates/container_types', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
3097
+ this.compilerInfo = [4,'>= 1.0.0'];
3098
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
3099
+ var buffer = '', stack1, helper, options, self=this, helperMissing=helpers.helperMissing;
3100
+
3101
+ function program1(depth0,data) {
3102
+
3103
+ var buffer = '', stack1;
3104
+ data.buffer.push("\n\n <div class=\"split__panel__bd\">\n <div class=\"nav__title\">\n <h3>Types</h3>\n </div>\n\n <ul>\n ");
3105
+ stack1 = helpers.each.call(depth0, {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[],types:[],data:data});
3106
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3107
+ data.buffer.push("\n </ul>\n </div>\n ");
3108
+ return buffer;
3109
+ }
3110
+ function program2(depth0,data) {
3111
+
3112
+ var buffer = '', stack1, helper, options;
3113
+ data.buffer.push("\n <li data-label=\"container-type\">\n ");
3114
+ stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0,depth0],types:["STRING","ID"],data:data},helper ? helper.call(depth0, "container-type", "name", options) : helperMissing.call(depth0, "link-to", "container-type", "name", options));
3115
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3116
+ data.buffer.push("\n </li>\n ");
3117
+ return buffer;
3118
+ }
3119
+ function program3(depth0,data) {
3120
+
3121
+ var buffer = '', stack1;
3122
+ data.buffer.push("\n <span data-label=\"container-type-name\">");
3123
+ stack1 = helpers._triageMustache.call(depth0, "name", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
3124
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3125
+ data.buffer.push("</span>\n (<span data-label=\"container-type-count\">");
3126
+ stack1 = helpers._triageMustache.call(depth0, "count", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
3127
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3128
+ data.buffer.push("</span>)\n ");
3129
+ return buffer;
3130
+ }
3131
+
3132
+ data.buffer.push("<div class=\"split\">\n ");
3133
+ stack1 = (helper = helpers['draggable-column'] || (depth0 && depth0['draggable-column']),options={hash:{
3134
+ 'width': (180),
3135
+ 'classNames': ("split__panel split__panel--sidebar-2 nav")
3136
+ },hashTypes:{'width': "INTEGER",'classNames': "STRING"},hashContexts:{'width': depth0,'classNames': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "draggable-column", options));
3137
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3138
+ data.buffer.push("\n\n <div class=\"split__panel\">\n <div class=\"split__panel__bd\">\n ");
3139
+ stack1 = helpers._triageMustache.call(depth0, "outlet", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
3140
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3141
+ data.buffer.push("\n </div>\n </div>\n</div>\n");
3142
+ return buffer;
3143
+
3144
+ }); });
3145
+
3146
+ define('templates/container_types/index_toolbar', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
3147
+ this.compilerInfo = [4,'>= 1.0.0'];
3148
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
3149
+ var buffer = '', helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;
3150
+
3151
+
3152
+ data.buffer.push("<div class=\"toolbar\">\n ");
3153
+ data.buffer.push(escapeExpression((helper = helpers['reload-button'] || (depth0 && depth0['reload-button']),options={hash:{
3154
+ 'action': ("reload"),
3155
+ 'classNames': ("toolbar__icon-button"),
3156
+ 'dataLabel': ("reload-container-btn")
3157
+ },hashTypes:{'action': "STRING",'classNames': "STRING",'dataLabel': "STRING"},hashContexts:{'action': depth0,'classNames': depth0,'dataLabel': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "reload-button", options))));
3158
+ data.buffer.push("\n</div>\n");
3159
+ return buffer;
3160
+
3161
+ }); });
3162
+
3163
+ define('templates/data', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
3164
+ this.compilerInfo = [4,'>= 1.0.0'];
3165
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
3166
+ var buffer = '', stack1;
3167
+
3168
+
3169
+ stack1 = helpers._triageMustache.call(depth0, "outlet", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
3170
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3171
+ data.buffer.push("\n");
3172
+ return buffer;
3173
+
3174
+ }); });
3175
+
3176
+ define('templates/data/index', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
3177
+ this.compilerInfo = [4,'>= 1.0.0'];
3178
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
3179
+ var buffer = '', stack1, helper, options, self=this, helperMissing=helpers.helperMissing;
3180
+
3181
+ function program1(depth0,data) {
3182
+
3183
+
3184
+ data.buffer.push("\n <li>You are using an old version of Ember (&lt; rc7).</li>\n <li>You are using an old version of Ember Data (&lt; 0.14).</li>\n <li>You are using another persistence library, in which case:\n <ul>\n <li>Make sure the library has a data adapter.</li>\n </ul>\n </li>\n ");
3185
+ }
3186
+
3187
+ data.buffer.push("<div class=\"data-error-page-container\">\n ");
3188
+ stack1 = (helper = helpers['not-detected'] || (depth0 && depth0['not-detected']),options={hash:{
3189
+ 'description': ("Data adapter")
3190
+ },hashTypes:{'description': "STRING"},hashContexts:{'description': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "not-detected", options));
3191
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3192
+ data.buffer.push("\n</div>\n");
3193
+ return buffer;
3194
+
3195
+ }); });
3196
+
3197
+ define('templates/iframes', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
3198
+ this.compilerInfo = [4,'>= 1.0.0'];
3199
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
3200
+ var buffer = '', escapeExpression=this.escapeExpression;
3201
+
3202
+
3203
+ data.buffer.push("<div class=\"dropdown\">\n ");
3204
+ data.buffer.push(escapeExpression(helpers.view.call(depth0, "Ember.Select", {hash:{
3205
+ 'content': ("model"),
3206
+ 'value': ("selectedApp"),
3207
+ 'optionValuePath': ("content.val"),
3208
+ 'optionLabelPath': ("content.name"),
3209
+ 'class': ("dropdown__select")
3210
+ },hashTypes:{'content': "ID",'value': "ID",'optionValuePath': "STRING",'optionLabelPath': "STRING",'class': "STRING"},hashContexts:{'content': depth0,'value': depth0,'optionValuePath': depth0,'optionLabelPath': depth0,'class': depth0},contexts:[depth0],types:["ID"],data:data})));
3211
+ data.buffer.push("\n <div class=\"dropdown__arrow\"></div>\n</div>\n");
3212
+ return buffer;
3213
+
3214
+ }); });
3215
+
3216
+ define('templates/info', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
3217
+ this.compilerInfo = [4,'>= 1.0.0'];
3218
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
3219
+ var buffer = '', stack1, escapeExpression=this.escapeExpression, self=this;
3220
+
3221
+ function program1(depth0,data) {
3222
+
3223
+ var buffer = '';
3224
+ data.buffer.push("\n <div data-label=\"library-row\" class=\"list-tree__item-wrapper row-wrapper\">\n <div class=\"list-tree__item row\">\n <div class=\"cell_type_main cell cell_size_large\">\n <span data-label=\"lib-name\">");
3225
+ data.buffer.push(escapeExpression(helpers.unbound.call(depth0, "name", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data})));
3226
+ data.buffer.push("</span>\n </div>\n <div class=\"cell\">\n <span data-label=\"lib-version\">");
3227
+ data.buffer.push(escapeExpression(helpers.unbound.call(depth0, "version", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data})));
3228
+ data.buffer.push("</span>\n </div>\n </div>\n </div>\n ");
3229
+ return buffer;
3230
+ }
3231
+
3232
+ data.buffer.push("<div class=\"list-view\">\n <div class=\"list-view__header row\">\n <div class=\"cell cell_type_header cell_size_large\">\n Library\n </div>\n <div class=\"cell cell_type_header\">\n Version\n </div>\n <!-- Account for scrollbar width :'( -->\n <div class=\"cell cell_type_header spacer\"></div>\n </div>\n\n <div class=\"list-view__list-container\">\n <div class=\"list-tree\">\n <div class=\"ember-list-container\">\n ");
3233
+ stack1 = helpers.each.call(depth0, {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data});
3234
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3235
+ data.buffer.push("\n </div>\n </div>\n\n</div>\n");
3236
+ return buffer;
3237
+
3238
+ }); });
3239
+
3240
+ define('templates/instance_item', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
3241
+ this.compilerInfo = [4,'>= 1.0.0'];
3242
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
3243
+ var buffer = '', stack1, escapeExpression=this.escapeExpression;
3244
+
3245
+
3246
+ data.buffer.push("<div class=\"list-tree__item row\" data-label=\"instance-row\" ");
3247
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "inspectInstance", "", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:["STRING","ID"],data:data})));
3248
+ data.buffer.push(">\n <div ");
3249
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
3250
+ 'class': (":cell inspectable:cell_clickable")
3251
+ },hashTypes:{'class': "STRING"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));
3252
+ data.buffer.push(" >\n ");
3253
+ stack1 = helpers._triageMustache.call(depth0, "name", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
3254
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3255
+ data.buffer.push("\n </div>\n</div>\n");
3256
+ return buffer;
3257
+
3258
+ }); });
3259
+
3260
+ define('templates/main', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
3261
+ this.compilerInfo = [4,'>= 1.0.0'];
3262
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
3263
+ var buffer = '', stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;
3264
+
3265
+ function program1(depth0,data) {
3266
+
3267
+ var buffer = '', helper, options;
3268
+ data.buffer.push("\n <div class=\"split__panel__hd\">\n ");
3269
+ data.buffer.push(escapeExpression((helper = helpers.render || (depth0 && depth0.render),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["STRING"],data:data},helper ? helper.call(depth0, "iframes", options) : helperMissing.call(depth0, "render", "iframes", options))));
3270
+ data.buffer.push("\n </div>\n <div class=\"split__panel__bd\">\n ");
3271
+ data.buffer.push(escapeExpression((helper = helpers.partial || (depth0 && depth0.partial),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["STRING"],data:data},helper ? helper.call(depth0, "nav", options) : helperMissing.call(depth0, "partial", "nav", options))));
3272
+ data.buffer.push("\n </div>\n <div class=\"split__panel__ft\">\n <a target=\"_blank\" href=\"https://github.com/emberjs/ember-inspector/issues\">\n Submit an Issue\n </a>\n </div>\n ");
3273
+ return buffer;
3274
+ }
3275
+
3276
+ function program3(depth0,data) {
3277
+
3278
+ var buffer = '', stack1;
3279
+ data.buffer.push("\n ");
3280
+ stack1 = helpers._triageMustache.call(depth0, "outlet", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
3281
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3282
+ data.buffer.push("\n ");
3283
+ return buffer;
3284
+ }
3285
+
3286
+ data.buffer.push("<div class=\"split split--main\">\n ");
3287
+ stack1 = (helper = helpers['draggable-column'] || (depth0 && depth0['draggable-column']),options={hash:{
3288
+ 'width': ("navWidth"),
3289
+ 'classNames': ("split__panel split__panel--sidebar-1")
3290
+ },hashTypes:{'width': "ID",'classNames': "STRING"},hashContexts:{'width': depth0,'classNames': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "draggable-column", options));
3291
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3292
+ data.buffer.push("\n\n <div class=\"split__panel\">\n <div class=\"split__panel__hd\">\n ");
3293
+ data.buffer.push(escapeExpression((helper = helpers.outlet || (depth0 && depth0.outlet),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["STRING"],data:data},helper ? helper.call(depth0, "toolbar", options) : helperMissing.call(depth0, "outlet", "toolbar", options))));
3294
+ data.buffer.push("\n ");
3295
+ data.buffer.push(escapeExpression((helper = helpers['sidebar-toggle'] || (depth0 && depth0['sidebar-toggle']),options={hash:{
3296
+ 'action': ("toggleInspector"),
3297
+ 'side': ("right"),
3298
+ 'isExpanded': ("inspectorExpanded"),
3299
+ 'classNames': ("toolbar__icon-button")
3300
+ },hashTypes:{'action': "STRING",'side': "STRING",'isExpanded': "ID",'classNames': "STRING"},hashContexts:{'action': depth0,'side': depth0,'isExpanded': depth0,'classNames': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "sidebar-toggle", options))));
3301
+ data.buffer.push("\n </div>\n\n ");
3302
+ stack1 = helpers.view.call(depth0, "mainContent", {hash:{
3303
+ 'classNames': ("split__panel__bd")
3304
+ },hashTypes:{'classNames': "STRING"},hashContexts:{'classNames': depth0},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],types:["STRING"],data:data});
3305
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3306
+ data.buffer.push("\n </div>\n</div>\n");
3307
+ return buffer;
3308
+
3309
+ }); });
3310
+
3311
+ define('templates/mixin_details', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
3312
+ this.compilerInfo = [4,'>= 1.0.0'];
3313
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
3314
+ var buffer = '', stack1, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;
3315
+
3316
+ function program1(depth0,data) {
3317
+
3318
+ var buffer = '', stack1;
3319
+ data.buffer.push("\n<div ");
3320
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
3321
+ 'class': (":mixin mixin.type mixin.isExpanded:mixin_state_expanded mixin.properties.length:mixin_props_yes:mixin_props_no")
3322
+ },hashTypes:{'class': "STRING"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));
3323
+ data.buffer.push(" data-label=\"object-detail\" >\n ");
3324
+ stack1 = helpers['if'].call(depth0, "mixin.properties.length", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),contexts:[depth0],types:["ID"],data:data});
3325
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3326
+ data.buffer.push("\n ");
3327
+ stack1 = helpers['if'].call(depth0, "mixin.isExpanded", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(6, program6, data),contexts:[depth0],types:["ID"],data:data});
3328
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3329
+ data.buffer.push("\n</div>\n");
3330
+ return buffer;
3331
+ }
3332
+ function program2(depth0,data) {
3333
+
3334
+ var buffer = '', stack1;
3335
+ data.buffer.push("\n <h2 class=\"mixin__name\" ");
3336
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "toggleExpanded", {hash:{
3337
+ 'target': ("mixin")
3338
+ },hashTypes:{'target': "STRING"},hashContexts:{'target': depth0},contexts:[depth0],types:["STRING"],data:data})));
3339
+ data.buffer.push(" data-label=\"object-detail-name\">");
3340
+ stack1 = helpers._triageMustache.call(depth0, "mixin.name", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
3341
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3342
+ data.buffer.push("</h2>\n ");
3343
+ return buffer;
3344
+ }
3345
+
3346
+ function program4(depth0,data) {
3347
+
3348
+ var buffer = '', stack1;
3349
+ data.buffer.push("\n <h2 class=\"mixin__name\" data-label=\"object-detail-name\">");
3350
+ stack1 = helpers._triageMustache.call(depth0, "mixin.name", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
3351
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3352
+ data.buffer.push("</h2>\n ");
3353
+ return buffer;
3354
+ }
3355
+
3356
+ function program6(depth0,data) {
3357
+
3358
+ var buffer = '', stack1;
3359
+ data.buffer.push("\n <ul class=\"mixin__properties\">\n ");
3360
+ stack1 = helpers.each.call(depth0, "mixin.properties", {hash:{
3361
+ 'itemController': ("mixinProperty")
3362
+ },hashTypes:{'itemController': "STRING"},hashContexts:{'itemController': depth0},inverse:self.program(16, program16, data),fn:self.program(7, program7, data),contexts:[depth0],types:["ID"],data:data});
3363
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3364
+ data.buffer.push("\n </ul>\n ");
3365
+ return buffer;
3366
+ }
3367
+ function program7(depth0,data) {
3368
+
3369
+ var buffer = '', stack1;
3370
+ data.buffer.push("\n <li ");
3371
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
3372
+ 'class': ("overridden:mixin__property_state_overridden :mixin__property")
3373
+ },hashTypes:{'class': "STRING"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));
3374
+ data.buffer.push(" data-label=\"object-property\">\n ");
3375
+ stack1 = helpers['if'].call(depth0, "value.computed", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(10, program10, data),fn:self.program(8, program8, data),contexts:[depth0],types:["ID"],data:data});
3376
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3377
+ data.buffer.push("\n <span class='mixin__property-name' data-label=\"object-property-name\">");
3378
+ stack1 = helpers._triageMustache.call(depth0, "name", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
3379
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3380
+ data.buffer.push("</span><span class='mixin__property-value-separator'>: </span>\n ");
3381
+ stack1 = helpers.unless.call(depth0, "isEdit", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(14, program14, data),fn:self.program(12, program12, data),contexts:[depth0],types:["ID"],data:data});
3382
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3383
+ data.buffer.push("\n <span class='mixin__property-overridden-by'>(Overridden by ");
3384
+ stack1 = helpers._triageMustache.call(depth0, "overridden", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
3385
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3386
+ data.buffer.push(")</span>\n <button class=\"mixin__send-btn\" ");
3387
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "sendToConsole", "model", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:["STRING","ID"],data:data})));
3388
+ data.buffer.push(" data-label=\"send-to-console-btn\"><img src=\"../images/send.png\" title=\"Send to console\"></button>\n </li>\n ");
3389
+ return buffer;
3390
+ }
3391
+ function program8(depth0,data) {
3392
+
3393
+ var buffer = '';
3394
+ data.buffer.push("\n <button ");
3395
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
3396
+ 'class': (":mixin__calc-btn isCalculated:mixin__calc-btn_calculated")
3397
+ },hashTypes:{'class': "STRING"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));
3398
+ data.buffer.push(" ");
3399
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "calculate", "model", {hash:{
3400
+ 'bubbles': (false)
3401
+ },hashTypes:{'bubbles': "BOOLEAN"},hashContexts:{'bubbles': depth0},contexts:[depth0,depth0],types:["STRING","ID"],data:data})));
3402
+ data.buffer.push(" data-label=\"calculate\"><img src=\"../images/calculate.svg\"></button>\n ");
3403
+ return buffer;
3404
+ }
3405
+
3406
+ function program10(depth0,data) {
3407
+
3408
+
3409
+ data.buffer.push("\n <span class='pad'></span>\n ");
3410
+ }
3411
+
3412
+ function program12(depth0,data) {
3413
+
3414
+ var buffer = '', stack1;
3415
+ data.buffer.push("\n <span ");
3416
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "valueClick", "model", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:["STRING","ID"],data:data})));
3417
+ data.buffer.push(" ");
3418
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
3419
+ 'class': ("value.type :mixin__property-value")
3420
+ },hashTypes:{'class': "STRING"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));
3421
+ data.buffer.push(" data-label=\"object-property-value\">");
3422
+ stack1 = helpers._triageMustache.call(depth0, "value.inspect", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
3423
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3424
+ data.buffer.push("</span>\n ");
3425
+ return buffer;
3426
+ }
3427
+
3428
+ function program14(depth0,data) {
3429
+
3430
+ var buffer = '', helper, options;
3431
+ data.buffer.push("\n ");
3432
+ data.buffer.push(escapeExpression((helper = helpers['property-field'] || (depth0 && depth0['property-field']),options={hash:{
3433
+ 'class': ("mixin__property-value-txt"),
3434
+ 'value': ("txtValue"),
3435
+ 'label': ("object-property-value-txt")
3436
+ },hashTypes:{'class': "STRING",'value': "ID",'label': "STRING"},hashContexts:{'class': depth0,'value': depth0,'label': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "property-field", options))));
3437
+ data.buffer.push("\n ");
3438
+ return buffer;
3439
+ }
3440
+
3441
+ function program16(depth0,data) {
3442
+
3443
+
3444
+ data.buffer.push("\n <li class=\"mixin__property\">No Properties</li>\n ");
3445
+ }
3446
+
3447
+ stack1 = helpers.each.call(depth0, "mixin", "in", "mixins", {hash:{
3448
+ 'itemController': ("mixinDetail")
3449
+ },hashTypes:{'itemController': "STRING"},hashContexts:{'itemController': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0,depth0,depth0],types:["ID","ID","ID"],data:data});
3450
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3451
+ data.buffer.push("\n");
3452
+ return buffer;
3453
+
3454
+ }); });
3455
+
3456
+ define('templates/mixin_stack', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
3457
+ this.compilerInfo = [4,'>= 1.0.0'];
3458
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
3459
+ var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;
3460
+
3461
+ function program1(depth0,data) {
3462
+
3463
+ var buffer = '', stack1;
3464
+ data.buffer.push("\n<div class=\"split__panel__hd\">\n <div class=\"toolbar\">\n <button ");
3465
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "popStack", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["STRING"],data:data})));
3466
+ data.buffer.push(" data-label=\"object-inspector-back\" ");
3467
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
3468
+ 'class': (":toolbar__icon-button isNested:enabled:disabled")
3469
+ },hashTypes:{'class': "STRING"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));
3470
+ data.buffer.push(">\n <svg width=\"9px\" height=\"9px\" viewBox=\"0 0 9 9\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <polygon class=\"svg-fill\" fill=\"#000000\" transform=\"translate(4.500000, 4.500000) rotate(-90.000000) translate(-4.500000, -4.500000) \" points=\"4.5 0 9 9 0 9 \"></polygon>\n </g>\n </svg>\n </button>\n\n <div class=\"divider\"></div>\n\n <code data-label=\"object-name\" class=\"toolbar__title\">");
3471
+ stack1 = helpers._triageMustache.call(depth0, "firstObject.name", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
3472
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3473
+ data.buffer.push("</code>\n\n <button class=\"send-to-console\" ");
3474
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "sendObjectToConsole", "firstObject", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:["STRING","ID"],data:data})));
3475
+ data.buffer.push(" data-label=\"send-object-to-console-btn\">\n <img src=\"../images/send.png\" title=\"Send object to console\">\n </button>\n </div>\n\n ");
3476
+ stack1 = helpers['if'].call(depth0, "trail", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0],types:["ID"],data:data});
3477
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3478
+ data.buffer.push("\n</div>\n");
3479
+ return buffer;
3480
+ }
3481
+ function program2(depth0,data) {
3482
+
3483
+ var buffer = '', stack1;
3484
+ data.buffer.push("\n <code class=\"object-trail\" data-label=\"object-trail\">");
3485
+ stack1 = helpers._triageMustache.call(depth0, "trail", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
3486
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3487
+ data.buffer.push("</code>\n ");
3488
+ return buffer;
3489
+ }
3490
+
3491
+ stack1 = helpers['if'].call(depth0, "length", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:["ID"],data:data});
3492
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3493
+ data.buffer.push("\n\n<div class=\"split__panel__bd\">\n ");
3494
+ data.buffer.push(escapeExpression((helper = helpers.render || (depth0 && depth0.render),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["STRING"],data:data},helper ? helper.call(depth0, "mixinDetails", options) : helperMissing.call(depth0, "render", "mixinDetails", options))));
3495
+ data.buffer.push("\n</div>\n");
3496
+ return buffer;
3497
+
3498
+ }); });
3499
+
3500
+ define('templates/model_types', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
3501
+ this.compilerInfo = [4,'>= 1.0.0'];
3502
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
3503
+ var buffer = '', stack1, helper, options, self=this, helperMissing=helpers.helperMissing;
3504
+
3505
+ function program1(depth0,data) {
3506
+
3507
+ var buffer = '', stack1;
3508
+ data.buffer.push("\n <div class=\"split__panel__bd\">\n <div class=\"nav__title\"><h3>Model Types</h3></div>\n <ul>\n ");
3509
+ stack1 = helpers.each.call(depth0, {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[],types:[],data:data});
3510
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3511
+ data.buffer.push("\n </ul>\n </div>\n ");
3512
+ return buffer;
3513
+ }
3514
+ function program2(depth0,data) {
3515
+
3516
+ var buffer = '', stack1, helper, options;
3517
+ data.buffer.push("\n <li data-label=\"model-type\">\n ");
3518
+ stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0,depth0],types:["STRING","ID"],data:data},helper ? helper.call(depth0, "records", "", options) : helperMissing.call(depth0, "link-to", "records", "", options));
3519
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3520
+ data.buffer.push("\n </li>\n ");
3521
+ return buffer;
3522
+ }
3523
+ function program3(depth0,data) {
3524
+
3525
+ var buffer = '', stack1;
3526
+ data.buffer.push("\n <span data-label=\"model-type-name\">");
3527
+ stack1 = helpers._triageMustache.call(depth0, "name", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
3528
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3529
+ data.buffer.push("</span>\n (<span data-label=\"model-type-count\">");
3530
+ stack1 = helpers._triageMustache.call(depth0, "count", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
3531
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3532
+ data.buffer.push("</span>)\n ");
3533
+ return buffer;
3534
+ }
3535
+
3536
+ data.buffer.push("<div class=\"split\">\n ");
3537
+ stack1 = (helper = helpers['draggable-column'] || (depth0 && depth0['draggable-column']),options={hash:{
3538
+ 'width': ("navWidth"),
3539
+ 'classNames': ("split__panel split__panel--sidebar-2 nav")
3540
+ },hashTypes:{'width': "ID",'classNames': "STRING"},hashContexts:{'width': depth0,'classNames': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "draggable-column", options));
3541
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3542
+ data.buffer.push("\n\n <div class=\"split__panel\">\n <div class=\"split__panel__bd\">\n ");
3543
+ stack1 = helpers._triageMustache.call(depth0, "outlet", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
3544
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3545
+ data.buffer.push("\n </div>\n </div>\n</div>\n");
3546
+ return buffer;
3547
+
3548
+ }); });
3549
+
3550
+ define('templates/nav', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
3551
+ this.compilerInfo = [4,'>= 1.0.0'];
3552
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
3553
+ var buffer = '', stack1, helper, options, self=this, helperMissing=helpers.helperMissing;
3554
+
3555
+ function program1(depth0,data) {
3556
+
3557
+
3558
+ data.buffer.push("\n View Tree\n <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" width=\"19px\" height=\"19px\" viewBox=\"0 0 19 19\" enable-background=\"new 0 0 19 19\" xml:space=\"preserve\">\n <path fill=\"#454545\" d=\"M0,0v19h19V0H0z M6,17h-4V5h4V17z M17,17H7V5h10v12H17z M17,4H2V2h15V1z\"/>\n </svg>\n ");
3559
+ }
3560
+
3561
+ function program3(depth0,data) {
3562
+
3563
+
3564
+ data.buffer.push("\n Routes\n <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" width=\"19px\" height=\"19px\" viewBox=\"0 0 19 19\" enable-background=\"new 0 0 19 19\" xml:space=\"preserve\">\n <polygon fill=\"#454545\" points=\"0.591,17.012 2.36,17.012 6.841,2.086 5.07,2.086\"/>\n <path fill=\"#454545\" d=\"M18.117,8.495l0.292-1.494h-2.242l0.874-3.507h-1.544l-0.874,3.507h-1.88l0.874-3.507h-1.536l-0.883,3.507 H8.668L8.375,8.495h2.449l-0.616,2.474H7.875l-0.292,1.495h2.252l-0.883,3.515h1.544l0.874-3.515h1.888l-0.883,3.515h1.544 l0.874-3.515h2.53l0.303-1.495h-2.459l0.625-2.474H18.117z M14.249,8.495l-0.617,2.474h-1.888l0.625-2.474H14.249z\"/>\n </svg>\n ");
3565
+ }
3566
+
3567
+ function program5(depth0,data) {
3568
+
3569
+
3570
+ data.buffer.push("\n Data\n <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" width=\"19px\" height=\"19px\" viewBox=\"0 0 19 19\" enable-background=\"new 0 0 19 19\" xml:space=\"preserve\">\n <path d=\"M9.5,0.001C3.907,0.001,0,1.507,0,3.663v11.675C0,17.494,3.907,19,9.5,19c5.594,0,9.5-1.506,9.5-3.662V3.663 C19,1.507,15.094,0.001,9.5,0.001z M9.5,5.669c-4.768,0-7.81-1.318-7.81-2.007c0-0.689,3.042-2.008,7.81-2.008 c4.769,0,7.81,1.318,7.81,2.008C17.31,4.352,14.269,5.669,9.5,5.669z M17.31,15.338c0,0.689-3.041,2.007-7.81,2.007 c-4.768,0-7.81-1.317-7.81-2.007V5.852C3.39,6.77,6.282,7.324,9.5,7.324c3.217,0,6.108-0.554,7.81-1.472V15.338z\"/>\n </svg>\n ");
3571
+ }
3572
+
3573
+ function program7(depth0,data) {
3574
+
3575
+
3576
+ data.buffer.push("\n Info\n <svg width=\"19\" height=\"19\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect id=\"svg_3\" height=\"6.815\" width=\"3.33\" fill=\"#454545\" y=\"7.8805\" x=\"7.737\"/>\n <circle id=\"svg_4\" r=\"1.753\" cy=\"5.3775\" cx=\"9.451\" fill=\"#454545\"/>\n <path id=\"svg_6\" d=\"m9.5,19c-5.238,0 -9.5,-4.262 -9.5,-9.5c0,-5.238 4.262,-9.5 9.5,-9.5s9.5,4.262 9.5,9.5c0,5.238 -4.262,9.5 -9.5,9.5zm0,-17.434c-4.375,0 -7.933,3.559 -7.933,7.933c0,4.374 3.559,7.932 7.933,7.932c4.374,0 7.933,-3.559 7.933,-7.932c0,-4.374 -3.559,-7.933 -7.933,-7.933z\" fill=\"#454545\"/>\n </svg>\n ");
3577
+ }
3578
+
3579
+ function program9(depth0,data) {
3580
+
3581
+
3582
+ data.buffer.push("\n Promises\n <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" width=\"23px\" height=\"23px\" viewBox=\"0 0 23 23\" enable-background=\"new 0 0 23 23\" xml:space=\"preserve\">\n <path d=\"M19,0 L19,19 L-0,19 L-0,0 z M2,2 L2,17 L17,17 L17,2.832 L6.807,12.912 L5.12,12.923 L5.12,2 z M7,2 L7.12,9.863 L15.953,2 z\" />\n <path d=\"M6.066,13.643 C4.488,13.643 3.208,12.363 3.208,10.784 C3.208,9.206 4.488,7.926 6.066,7.926 C7.645,7.926 8.925,9.206 8.925,10.784 C8.925,12.363 7.645,13.643 6.066,13.643 z\" />\n </svg>\n ");
3583
+ }
3584
+
3585
+ function program11(depth0,data) {
3586
+
3587
+
3588
+ data.buffer.push("\n Container\n\n <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n width=\"19px\" height=\"19px\" viewBox=\"0 0 43 42.191\" enable-background=\"new 0 0 43 42.191\" xml:space=\"preserve\">\n <g>\n <path d=\"M20.038,42.092L18,40.691V15.687l1.07-1.437l22-6.585L43,9.102v23.138l-0.962,1.4L20.038,42.092z M21,16.804v21.704\n l19-7.299V11.116L21,16.804z\"/>\n <path d=\"M19.647,42.191c-0.224,0-0.452-0.05-0.666-0.156L0.833,33.028L0,31.685V8.01l2.075-1.386l18.507,7.677\n c0.765,0.317,1.128,1.195,0.811,1.961c-0.318,0.765-1.195,1.129-1.96,0.811L3,10.256v20.499l17.315,8.593\n c0.742,0.368,1.045,1.269,0.677,2.011C20.73,41.886,20.199,42.191,19.647,42.191z\"/>\n <path d=\"M41.414,10.602c-0.193,0-0.391-0.037-0.58-0.116L23.047,3.027L2.096,9.444C1.303,9.688,0.465,9.24,0.223,8.449\n C-0.02,7.657,0.425,6.818,1.217,6.575L22.687,0l1.02,0.051l18.288,7.667c0.764,0.32,1.124,1.2,0.804,1.964\n C42.557,10.256,42,10.602,41.414,10.602z\"/>\n </g>\n </svg>\n\n ");
3589
+ }
3590
+
3591
+ function program13(depth0,data) {
3592
+
3593
+
3594
+ data.buffer.push("\n Render Performance\n <svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n width=\"18.979px\" height=\"18.979px\" viewBox=\"0.021 -0.018 18.979 18.979\" enable-background=\"new 0.021 -0.018 18.979 18.979\"\n xml:space=\"preserve\">\n <g>\n <path d=\"M8.358,11.589c0.291,0.299,0.674,0.45,1.053,0.45c0.347,0,0.69-0.126,0.955-0.384c0.553-0.535,5.625-7.474,5.625-7.474\n s-7.089,4.864-7.641,5.4C7.798,10.12,7.803,11.017,8.358,11.589z\"/>\n <g>\n <path d=\"M16.057,2.615c-1.702-1.627-4.005-2.633-6.546-2.633c-5.237,0-9.482,4.246-9.482,9.482c0,2.816,1.233,5.336,3.182,7.073\n c-1.22-1.439-1.959-3.299-1.959-5.333c0-4.561,3.698-8.259,8.26-8.259c1.577,0,3.045,0.45,4.298,1.216\n c0.561-0.386,1.067-0.734,1.472-1.011L16.057,2.615z\"/>\n <path d=\"M17.005,4.923c-0.26,0.354-0.582,0.794-0.936,1.275c1.062,1.39,1.7,3.121,1.7,5.005c0,2.037-0.741,3.898-1.963,5.338\n c1.951-1.736,3.187-4.259,3.187-7.078c0-1.905-0.568-3.676-1.535-5.162L17.005,4.923z\"/>\n </g>\n </g>\n </svg>\n ");
3595
+ }
3596
+
3597
+ data.buffer.push("<nav class=\"nav nav--main\">\n <ul>\n <li>\n ");
3598
+ stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:["STRING"],data:data},helper ? helper.call(depth0, "view-tree", options) : helperMissing.call(depth0, "link-to", "view-tree", options));
3599
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3600
+ data.buffer.push("\n </li>\n <li>\n ");
3601
+ stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],types:["STRING"],data:data},helper ? helper.call(depth0, "route-tree", options) : helperMissing.call(depth0, "link-to", "route-tree", options));
3602
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3603
+ data.buffer.push("\n </li>\n <li>\n ");
3604
+ stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(5, program5, data),contexts:[depth0],types:["STRING"],data:data},helper ? helper.call(depth0, "data", options) : helperMissing.call(depth0, "link-to", "data", options));
3605
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3606
+ data.buffer.push("\n </li>\n <li>\n ");
3607
+ stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(7, program7, data),contexts:[depth0],types:["STRING"],data:data},helper ? helper.call(depth0, "info", options) : helperMissing.call(depth0, "link-to", "info", options));
3608
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3609
+ data.buffer.push("\n </li>\n </ul>\n <div class=\"nav__title nav__title--middle\">\n <h3>Advanced</h3>\n </div>\n <ul>\n <li>\n ");
3610
+ stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(9, program9, data),contexts:[depth0],types:["STRING"],data:data},helper ? helper.call(depth0, "promises", options) : helperMissing.call(depth0, "link-to", "promises", options));
3611
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3612
+ data.buffer.push("\n </li>\n <li>\n ");
3613
+ stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(11, program11, data),contexts:[depth0],types:["STRING"],data:data},helper ? helper.call(depth0, "container-types", options) : helperMissing.call(depth0, "link-to", "container-types", options));
3614
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3615
+ data.buffer.push("\n </li>\n <li>\n ");
3616
+ stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(13, program13, data),contexts:[depth0],types:["STRING"],data:data},helper ? helper.call(depth0, "render-tree", options) : helperMissing.call(depth0, "link-to", "render-tree", options));
3617
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3618
+ data.buffer.push("\n </li>\n </ul>\n</nav>\n");
3619
+ return buffer;
3620
+
3621
+ }); });
3622
+
3623
+ define('templates/page_refresh', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
3624
+ this.compilerInfo = [4,'>= 1.0.0'];
3625
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
3626
+ var buffer = '', escapeExpression=this.escapeExpression;
3627
+
3628
+
3629
+ data.buffer.push("<div class=\"notice\" data-label=\"page-refresh\">\n <p>Reload the page to see promises created before you opened the inspector.</p>\n <button data-label=\"page-refresh-btn\" ");
3630
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "refreshPage", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["STRING"],data:data})));
3631
+ data.buffer.push(">Reload</button>\n</div>\n");
3632
+ return buffer;
3633
+
3634
+ }); });
3635
+
3636
+ define('templates/promise_item', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
3637
+ this.compilerInfo = [4,'>= 1.0.0'];
3638
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
3639
+ var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;
3640
+
3641
+ function program1(depth0,data) {
3642
+
3643
+ var buffer = '';
3644
+ data.buffer.push("\n <div class=\"send-trace-to-console\" ");
3645
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "tracePromise", "model", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:["STRING","ID"],data:data})));
3646
+ data.buffer.push(" title=\"Trace promise in console\" data-label=\"trace-promise-btn\">\n Trace\n </div>\n ");
3647
+ return buffer;
3648
+ }
3649
+
3650
+ function program3(depth0,data) {
3651
+
3652
+ var buffer = '', stack1;
3653
+ data.buffer.push("\n <div class=\"list-tree__limited list-tree__limited_helper_very-large\" ");
3654
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
3655
+ 'title': ("settledValue.inspect")
3656
+ },hashTypes:{'title': "STRING"},hashContexts:{'title': depth0},contexts:[],types:[],data:data})));
3657
+ data.buffer.push(">\n ");
3658
+ stack1 = helpers['if'].call(depth0, "isValueInspectable", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(6, program6, data),fn:self.program(4, program4, data),contexts:[depth0],types:["ID"],data:data});
3659
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3660
+ data.buffer.push("\n </div>\n <div class=\"list-tree__right-helper\">\n ");
3661
+ stack1 = helpers['if'].call(depth0, "isError", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(10, program10, data),fn:self.program(8, program8, data),contexts:[depth0],types:["ID"],data:data});
3662
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3663
+ data.buffer.push("\n\n </div>\n ");
3664
+ return buffer;
3665
+ }
3666
+ function program4(depth0,data) {
3667
+
3668
+ var buffer = '', stack1;
3669
+ data.buffer.push("\n\n <span class=\"cell_clickable\" ");
3670
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "inspectObject", "settledValue.objectId", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:["STRING","ID"],data:data})));
3671
+ data.buffer.push(" data-label=\"promise-object-value\">");
3672
+ stack1 = helpers._triageMustache.call(depth0, "settledValue.inspect", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
3673
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3674
+ data.buffer.push("</span>\n ");
3675
+ return buffer;
3676
+ }
3677
+
3678
+ function program6(depth0,data) {
3679
+
3680
+ var buffer = '', stack1;
3681
+ data.buffer.push("\n ");
3682
+ stack1 = helpers._triageMustache.call(depth0, "settledValue.inspect", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
3683
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3684
+ data.buffer.push("\n ");
3685
+ return buffer;
3686
+ }
3687
+
3688
+ function program8(depth0,data) {
3689
+
3690
+ var buffer = '';
3691
+ data.buffer.push("\n <div class=\"send-trace-to-console\" ");
3692
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "sendValueToConsole", "model", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:["STRING","ID"],data:data})));
3693
+ data.buffer.push(" data-label=\"send-to-console-btn\" title=\"Send stack trace to the console\">\n Stack trace\n </div>\n ");
3694
+ return buffer;
3695
+ }
3696
+
3697
+ function program10(depth0,data) {
3698
+
3699
+ var buffer = '', helper, options;
3700
+ data.buffer.push("\n ");
3701
+ data.buffer.push(escapeExpression((helper = helpers['send-to-console'] || (depth0 && depth0['send-to-console']),options={hash:{
3702
+ 'action': ("sendValueToConsole"),
3703
+ 'param': ("model")
3704
+ },hashTypes:{'action': "STRING",'param': "ID"},hashContexts:{'action': depth0,'param': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "send-to-console", options))));
3705
+ data.buffer.push("\n ");
3706
+ return buffer;
3707
+ }
3708
+
3709
+ function program12(depth0,data) {
3710
+
3711
+
3712
+ data.buffer.push("\n --\n ");
3713
+ }
3714
+
3715
+ data.buffer.push("<div ");
3716
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
3717
+ 'style': ("nodeStyle"),
3718
+ 'class': (":list-tree__item :row expandedClass")
3719
+ },hashTypes:{'style': "STRING",'class': "STRING"},hashContexts:{'style': depth0,'class': depth0},contexts:[],types:[],data:data})));
3720
+ data.buffer.push(" data-label=\"promise-item\">\n <div class=\"cell_type_main cell\" ");
3721
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "toggleExpand", "model", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:["STRING","ID"],data:data})));
3722
+ data.buffer.push(" ");
3723
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
3724
+ 'style': ("labelStyle")
3725
+ },hashTypes:{'style': "STRING"},hashContexts:{'style': depth0},contexts:[],types:[],data:data})));
3726
+ data.buffer.push(">\n <div class=\"list-tree__limited list-tree__limited_helper_large\">\n <span ");
3727
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
3728
+ 'title': ("label")
3729
+ },hashTypes:{'title': "STRING"},hashContexts:{'title': depth0},contexts:[],types:[],data:data})));
3730
+ data.buffer.push(" data-label=\"promise-label\">\n <span class=\"cell__arrow\"></span>\n ");
3731
+ stack1 = helpers._triageMustache.call(depth0, "label", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
3732
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3733
+ data.buffer.push("\n </span>\n </div>\n <div class=\"list-tree__right-helper\">\n ");
3734
+ stack1 = helpers['if'].call(depth0, "hasStack", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:["ID"],data:data});
3735
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3736
+ data.buffer.push("\n </div>\n </div>\n <div class=\"cell cell_size_medium\">\n <div class=\"pill pill_text_clear\" ");
3737
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
3738
+ 'style': ("style")
3739
+ },hashTypes:{'style': "STRING"},hashContexts:{'style': depth0},contexts:[],types:[],data:data})));
3740
+ data.buffer.push(" data-label=\"promise-state\">");
3741
+ stack1 = helpers._triageMustache.call(depth0, "state", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
3742
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3743
+ data.buffer.push("</div>\n </div>\n <div class=\"cell cell_size_large\" data-label=\"promise-value\">\n ");
3744
+ stack1 = helpers['if'].call(depth0, "hasValue", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(12, program12, data),fn:self.program(3, program3, data),contexts:[depth0],types:["ID"],data:data});
3745
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3746
+ data.buffer.push("\n </div>\n <div class=\"cell cell_size_medium cell_value_numeric\" data-label=\"promise-time\">");
3747
+ data.buffer.push(escapeExpression((helper = helpers['ms-to-time'] || (depth0 && depth0['ms-to-time']),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data},helper ? helper.call(depth0, "timeToSettle", options) : helperMissing.call(depth0, "ms-to-time", "timeToSettle", options))));
3748
+ data.buffer.push("</div>\n</div>\n");
3749
+ return buffer;
3750
+
3751
+ }); });
3752
+
3753
+ define('templates/promise_tree', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
3754
+ this.compilerInfo = [4,'>= 1.0.0'];
3755
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
3756
+ var buffer = '', stack1, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;
3757
+
3758
+ function program1(depth0,data) {
3759
+
3760
+ var buffer = '', helper, options;
3761
+ data.buffer.push("\n ");
3762
+ data.buffer.push(escapeExpression((helper = helpers.partial || (depth0 && depth0.partial),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["STRING"],data:data},helper ? helper.call(depth0, "page_refresh", options) : helperMissing.call(depth0, "partial", "page_refresh", options))));
3763
+ data.buffer.push("\n");
3764
+ return buffer;
3765
+ }
3766
+
3767
+ function program3(depth0,data) {
3768
+
3769
+ var buffer = '';
3770
+ data.buffer.push("\n<div class=\"list-view\" data-label=\"promise-tree\">\n <div class=\"list-view__header row\">\n <div class=\"cell cell_type_header\">\n Label\n </div>\n <div class=\"cell cell_size_medium cell_type_header\">\n State\n </div>\n <div class=\"cell cell_size_large cell_type_header\">\n Fulfillment / Rejection value\n </div>\n <div class=\"cell cell_size_medium cell_value_numeric cell_type_header\">\n Time to settle\n </div>\n <!-- Account for scrollbar width :'( -->\n <div class=\"cell cell_type_header spacer\"></div>\n </div>\n\n <div class=\"list-view__list-container\">\n ");
3771
+ data.buffer.push(escapeExpression(helpers.view.call(depth0, "promiseList", {hash:{
3772
+ 'content': ("items")
3773
+ },hashTypes:{'content': "ID"},hashContexts:{'content': depth0},contexts:[depth0],types:["STRING"],data:data})));
3774
+ data.buffer.push("\n </div>\n</div>\n");
3775
+ return buffer;
3776
+ }
3777
+
3778
+ stack1 = helpers['if'].call(depth0, "shouldRefresh", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(3, program3, data),fn:self.program(1, program1, data),contexts:[depth0],types:["ID"],data:data});
3779
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3780
+ data.buffer.push("\n");
3781
+ return buffer;
3782
+
3783
+ }); });
3784
+
3785
+ define('templates/promise_tree_toolbar', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
3786
+ this.compilerInfo = [4,'>= 1.0.0'];
3787
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
3788
+ var buffer = '', helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;
3789
+
3790
+
3791
+ data.buffer.push("<div class=\"toolbar\">\n ");
3792
+ data.buffer.push(escapeExpression((helper = helpers['clear-button'] || (depth0 && depth0['clear-button']),options={hash:{
3793
+ 'action': ("clear"),
3794
+ 'classNames': ("toolbar__icon-button"),
3795
+ 'dataLabel': ("clear-promises-btn")
3796
+ },hashTypes:{'action': "STRING",'classNames': "STRING",'dataLabel': "STRING"},hashContexts:{'action': depth0,'classNames': depth0,'dataLabel': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "clear-button", options))));
3797
+ data.buffer.push("\n\n <div class=\"toolbar__search\" data-label=\"promise-search\">\n ");
3798
+ data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{
3799
+ 'value': ("search"),
3800
+ 'placeholder': ("Search")
3801
+ },hashTypes:{'value': "ID",'placeholder': "STRING"},hashContexts:{'value': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "input", options))));
3802
+ data.buffer.push("\n </div>\n\n <button data-label=\"filter\" ");
3803
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
3804
+ 'class': ("noFilter:active :toolbar__radio")
3805
+ },hashTypes:{'class': "STRING"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));
3806
+ data.buffer.push(" ");
3807
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "setFilter", "all", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:["STRING","STRING"],data:data})));
3808
+ data.buffer.push(">\n All\n </button>\n\n <div class=\"divider\"></div>\n\n <button data-label=\"filter\" ");
3809
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
3810
+ 'class': ("isRejectedFilter:active :toolbar__radio")
3811
+ },hashTypes:{'class': "STRING"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));
3812
+ data.buffer.push(" ");
3813
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "setFilter", "rejected", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:["STRING","STRING"],data:data})));
3814
+ data.buffer.push(" >Rejected</button>\n <button data-label=\"filter\" ");
3815
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
3816
+ 'class': ("isPendingFilter:active :toolbar__radio")
3817
+ },hashTypes:{'class': "STRING"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));
3818
+ data.buffer.push(" ");
3819
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "setFilter", "pending", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:["STRING","STRING"],data:data})));
3820
+ data.buffer.push(" >Pending</button>\n <button data-label=\"filter\" ");
3821
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
3822
+ 'class': ("isFulfilledFilter:active :toolbar__radio")
3823
+ },hashTypes:{'class': "STRING"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));
3824
+ data.buffer.push(" ");
3825
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "setFilter", "fulfilled", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:["STRING","STRING"],data:data})));
3826
+ data.buffer.push(" >Fulfilled</button>\n\n\n <div class=\"toolbar__checkbox\" data-label=\"with-stack\">\n ");
3827
+ data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{
3828
+ 'type': ("checkbox"),
3829
+ 'checked': ("instrumentWithStack"),
3830
+ 'id': ("instrument-with-stack")
3831
+ },hashTypes:{'type': "STRING",'checked': "ID",'id': "STRING"},hashContexts:{'type': depth0,'checked': depth0,'id': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "input", options))));
3832
+ data.buffer.push(" <label for=\"instrument-with-stack\">Trace promises</label>\n </div>\n</div>\n");
3833
+ return buffer;
3834
+
3835
+ }); });
3836
+
3837
+ define('templates/promises/error', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
3838
+ this.compilerInfo = [4,'>= 1.0.0'];
3839
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
3840
+ var buffer = '', stack1, helper, options, self=this, helperMissing=helpers.helperMissing;
3841
+
3842
+ function program1(depth0,data) {
3843
+
3844
+
3845
+ data.buffer.push("\n <li>You are using a version of Ember &lt; 1.3.</li>\n ");
3846
+ }
3847
+
3848
+ data.buffer.push("<div class=\"data-error-page-container\">\n ");
3849
+ stack1 = (helper = helpers['not-detected'] || (depth0 && depth0['not-detected']),options={hash:{
3850
+ 'description': ("Promises"),
3851
+ 'reasonsTitle': ("This usually happens because:")
3852
+ },hashTypes:{'description': "STRING",'reasonsTitle': "STRING"},hashContexts:{'description': depth0,'reasonsTitle': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "not-detected", options));
3853
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3854
+ data.buffer.push("\n</div>\n");
3855
+ return buffer;
3856
+
3857
+ }); });
3858
+
3859
+ define('templates/record_item', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
3860
+ this.compilerInfo = [4,'>= 1.0.0'];
3861
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
3862
+ var buffer = '', stack1, escapeExpression=this.escapeExpression, self=this;
3863
+
3864
+ function program1(depth0,data) {
3865
+
3866
+ var buffer = '', stack1;
3867
+ data.buffer.push("\n <div class=\"cell cell_clickable\" data-label=\"record-column\" ");
3868
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
3869
+ 'style': ("controller.style")
3870
+ },hashTypes:{'style': "STRING"},hashContexts:{'style': depth0},contexts:[],types:[],data:data})));
3871
+ data.buffer.push(">\n ");
3872
+ stack1 = helpers._triageMustache.call(depth0, "value", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
3873
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3874
+ data.buffer.push("\n </div>\n ");
3875
+ return buffer;
3876
+ }
3877
+
3878
+ data.buffer.push("<div ");
3879
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
3880
+ 'class': (":list-tree__item :row isCurrent:row_highlight")
3881
+ },hashTypes:{'class': "STRING"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));
3882
+ data.buffer.push(" data-label=\"record-row\" ");
3883
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "inspectModel", "model", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:["STRING","ID"],data:data})));
3884
+ data.buffer.push(">\n ");
3885
+ stack1 = helpers.each.call(depth0, "columns", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:["ID"],data:data});
3886
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3887
+ data.buffer.push("\n</div>\n");
3888
+ return buffer;
3889
+
3890
+ }); });
3891
+
3892
+ define('templates/records', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
3893
+ this.compilerInfo = [4,'>= 1.0.0'];
3894
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
3895
+ var buffer = '', stack1, self=this, escapeExpression=this.escapeExpression;
3896
+
3897
+ function program1(depth0,data) {
3898
+
3899
+ var buffer = '', stack1;
3900
+ data.buffer.push("\n <div class=\"cell cell_type_header\" data-label=\"column-title\">");
3901
+ stack1 = helpers._triageMustache.call(depth0, "desc", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
3902
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3903
+ data.buffer.push("</div>\n ");
3904
+ return buffer;
3905
+ }
3906
+
3907
+ data.buffer.push("<div class=\"list-view\">\n <div class=\"list-view__header row\">\n ");
3908
+ stack1 = helpers.each.call(depth0, "columns", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:["ID"],data:data});
3909
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3910
+ data.buffer.push("\n\n <!-- Account for scrollbar width :'( -->\n <div class=\"cell cell_type_header spacer\"></div>\n </div>\n\n <div class=\"list-view__list-container\">\n ");
3911
+ data.buffer.push(escapeExpression(helpers.view.call(depth0, "recordList", {hash:{
3912
+ 'content': ("filtered")
3913
+ },hashTypes:{'content': "ID"},hashContexts:{'content': depth0},contexts:[depth0],types:["STRING"],data:data})));
3914
+ data.buffer.push("\n </div>\n</div>\n");
3915
+ return buffer;
3916
+
3917
+ }); });
3918
+
3919
+ define('templates/records_toolbar', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
3920
+ this.compilerInfo = [4,'>= 1.0.0'];
3921
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
3922
+ var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;
3923
+
3924
+ function program1(depth0,data) {
3925
+
3926
+ var buffer = '', stack1;
3927
+ data.buffer.push("\n <button data-label=\"filter\" ");
3928
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
3929
+ 'class': ("checked:active :toolbar__radio")
3930
+ },hashTypes:{'class': "STRING"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));
3931
+ data.buffer.push(" ");
3932
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "setFilter", "name", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:["STRING","ID"],data:data})));
3933
+ data.buffer.push(" >");
3934
+ stack1 = helpers._triageMustache.call(depth0, "desc", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
3935
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3936
+ data.buffer.push("</button>\n ");
3937
+ return buffer;
3938
+ }
3939
+
3940
+ data.buffer.push("<div class=\"toolbar\">\n <div class=\"toolbar__search\" data-label=\"records-search\">\n ");
3941
+ data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{
3942
+ 'value': ("search"),
3943
+ 'placeholder': ("Search")
3944
+ },hashTypes:{'value': "ID",'placeholder': "STRING"},hashContexts:{'value': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "input", options))));
3945
+ data.buffer.push("\n </div>\n\n <button data-label=\"filter\" ");
3946
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
3947
+ 'class': ("noFilterValue:active :toolbar__radio")
3948
+ },hashTypes:{'class': "STRING"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));
3949
+ data.buffer.push(" ");
3950
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "setFilter", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["STRING"],data:data})));
3951
+ data.buffer.push(">\n All\n </button>\n\n <div class=\"divider\"></div>\n\n ");
3952
+ stack1 = helpers.each.call(depth0, "filters", {hash:{
3953
+ 'itemController': ("recordFilter")
3954
+ },hashTypes:{'itemController': "STRING"},hashContexts:{'itemController': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:["ID"],data:data});
3955
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3956
+ data.buffer.push("\n</div>");
3957
+ return buffer;
3958
+
3959
+ }); });
3960
+
3961
+ define('templates/render_item', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
3962
+ this.compilerInfo = [4,'>= 1.0.0'];
3963
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
3964
+ var buffer = '', stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;
3965
+
3966
+ function program1(depth0,data) {
3967
+
3968
+ var buffer = '', stack1;
3969
+ data.buffer.push("\n ");
3970
+ stack1 = helpers.each.call(depth0, "children", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0],types:["ID"],data:data});
3971
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
3972
+ data.buffer.push("\n");
3973
+ return buffer;
3974
+ }
3975
+ function program2(depth0,data) {
3976
+
3977
+ var buffer = '', helper, options;
3978
+ data.buffer.push("\n ");
3979
+ data.buffer.push(escapeExpression((helper = helpers.render || (depth0 && depth0.render),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:["STRING","ID"],data:data},helper ? helper.call(depth0, "render_item", "", options) : helperMissing.call(depth0, "render", "render_item", "", options))));
3980
+ data.buffer.push("\n ");
3981
+ return buffer;
3982
+ }
3983
+
3984
+ data.buffer.push("<div data-label=\"render-profile-row\" class=\"list-tree__item-wrapper row-wrapper\">\n <div ");
3985
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
3986
+ 'style': ("nodeStyle"),
3987
+ 'class': (":list-tree__item :row expandedClass")
3988
+ },hashTypes:{'style': "STRING",'class': "STRING"},hashContexts:{'style': depth0,'class': depth0},contexts:[],types:[],data:data})));
3989
+ data.buffer.push(" data-label=\"render-profile-item\">\n <div class=\"cell_type_main cell\" ");
3990
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "toggleExpand", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["STRING"],data:data})));
3991
+ data.buffer.push(" ");
3992
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
3993
+ 'style': ("nameStyle")
3994
+ },hashTypes:{'style': "STRING"},hashContexts:{'style': depth0},contexts:[],types:[],data:data})));
3995
+ data.buffer.push(" data-label=\"render-main-cell\">\n\n <span ");
3996
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
3997
+ 'title': ("name")
3998
+ },hashTypes:{'title': "STRING"},hashContexts:{'title': depth0},contexts:[],types:[],data:data})));
3999
+ data.buffer.push(">\n <span class=\"cell__arrow\"></span>\n <span data-label=\"render-profile-name\">");
4000
+ stack1 = helpers._triageMustache.call(depth0, "name", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
4001
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
4002
+ data.buffer.push("</span>\n <span class=\"pill pill_not-clickable\" data-label=\"render-profile-duration\">");
4003
+ data.buffer.push(escapeExpression((helper = helpers['ms-to-time'] || (depth0 && depth0['ms-to-time']),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data},helper ? helper.call(depth0, "duration", options) : helperMissing.call(depth0, "ms-to-time", "duration", options))));
4004
+ data.buffer.push("</span>\n </span>\n </div>\n <div class=\"cell cell_value_numeric\" data-label=\"render-profile-timestamp\">\n ");
4005
+ stack1 = helpers._triageMustache.call(depth0, "readableTime", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
4006
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
4007
+ data.buffer.push("\n </div>\n </div>\n</div>\n");
4008
+ stack1 = helpers['if'].call(depth0, "isExpanded", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:["ID"],data:data});
4009
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
4010
+ data.buffer.push("\n");
4011
+ return buffer;
4012
+
4013
+ }); });
4014
+
4015
+ define('templates/render_tree', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
4016
+ this.compilerInfo = [4,'>= 1.0.0'];
4017
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
4018
+ var buffer = '', stack1, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;
4019
+
4020
+ function program1(depth0,data) {
4021
+
4022
+ var buffer = '', stack1;
4023
+ data.buffer.push("\n<div class=\"list-view\" data-label=\"render-tree\">\n <div class=\"list-view__header row\">\n <div class=\"cell cell_type_header\">\n Name\n </div>\n <div class=\"cell cell_type_header cell_value_numeric\">\n Timestamp\n </div>\n <!-- Account for scrollbar width :'( -->\n <div class=\"cell cell_type_header spacer\"></div>\n </div>\n\n <div class=\"ember-list-container\">\n ");
4024
+ stack1 = helpers.view.call(depth0, "render_list", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0],types:["STRING"],data:data});
4025
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
4026
+ data.buffer.push("\n </div>\n</div>\n");
4027
+ return buffer;
4028
+ }
4029
+ function program2(depth0,data) {
4030
+
4031
+ var buffer = '', stack1;
4032
+ data.buffer.push("\n ");
4033
+ stack1 = helpers.each.call(depth0, {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(3, program3, data),contexts:[],types:[],data:data});
4034
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
4035
+ data.buffer.push("\n ");
4036
+ return buffer;
4037
+ }
4038
+ function program3(depth0,data) {
4039
+
4040
+ var buffer = '', helper, options;
4041
+ data.buffer.push("\n ");
4042
+ data.buffer.push(escapeExpression((helper = helpers.render || (depth0 && depth0.render),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:["STRING","ID"],data:data},helper ? helper.call(depth0, "render_item", "", options) : helperMissing.call(depth0, "render", "render_item", "", options))));
4043
+ data.buffer.push("\n ");
4044
+ return buffer;
4045
+ }
4046
+
4047
+ function program5(depth0,data) {
4048
+
4049
+
4050
+ data.buffer.push("\n <div class=\"notice\" data-label=\"render-tree-empty\">\n <p>No rendering metrics have been collected. Try navigating around your application.</p>\n <p><strong>Note:</strong> Very fast rendering times (&lt;1ms) are excluded.</p>\n </div>\n");
4051
+ }
4052
+
4053
+ stack1 = helpers.unless.call(depth0, "showEmpty", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(5, program5, data),fn:self.program(1, program1, data),contexts:[depth0],types:["ID"],data:data});
4054
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
4055
+ data.buffer.push("\n");
4056
+ return buffer;
4057
+
4058
+ }); });
4059
+
4060
+ define('templates/render_tree_toolbar', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
4061
+ this.compilerInfo = [4,'>= 1.0.0'];
4062
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
4063
+ var buffer = '', helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;
4064
+
4065
+
4066
+ data.buffer.push("<div class=\"toolbar\">\n ");
4067
+ data.buffer.push(escapeExpression((helper = helpers['clear-button'] || (depth0 && depth0['clear-button']),options={hash:{
4068
+ 'action': ("clearProfiles"),
4069
+ 'classNames': ("toolbar__icon-button")
4070
+ },hashTypes:{'action': "STRING",'classNames': "STRING"},hashContexts:{'action': depth0,'classNames': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "clear-button", options))));
4071
+ data.buffer.push("\n <div class=\"toolbar__search\" data-label=\"render-profiles-search\">\n ");
4072
+ data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{
4073
+ 'value': ("searchField"),
4074
+ 'placeholder': ("Search")
4075
+ },hashTypes:{'value': "ID",'placeholder': "STRING"},hashContexts:{'value': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "input", options))));
4076
+ data.buffer.push("\n </div>\n <div class=\"filter-bar__pills\"></div>\n</div>");
4077
+ return buffer;
4078
+
4079
+ }); });
4080
+
4081
+ define('templates/route_item', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
4082
+ this.compilerInfo = [4,'>= 1.0.0'];
4083
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
4084
+ var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;
4085
+
4086
+ function program1(depth0,data) {
4087
+
4088
+ var buffer = '', stack1, helper, options;
4089
+ data.buffer.push("\n <div class=\"list-tree__limited cell_clickable\" ");
4090
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "inspectController", "value.controller", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:["STRING","ID"],data:data})));
4091
+ data.buffer.push(" data-label=\"route-controller\">\n <span title=\"");
4092
+ data.buffer.push(escapeExpression(helpers.unbound.call(depth0, "value.controller.className", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data})));
4093
+ data.buffer.push("\">");
4094
+ stack1 = helpers._triageMustache.call(depth0, "value.controller.className", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
4095
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
4096
+ data.buffer.push("</span>\n </div>\n <div class=\"list-tree__right-helper\">\n ");
4097
+ data.buffer.push(escapeExpression((helper = helpers['send-to-console'] || (depth0 && depth0['send-to-console']),options={hash:{
4098
+ 'action': ("sendControllerToConsole"),
4099
+ 'param': ("value.controller.name")
4100
+ },hashTypes:{'action': "STRING",'param': "ID"},hashContexts:{'action': depth0,'param': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "send-to-console", options))));
4101
+ data.buffer.push("\n </div>\n\n ");
4102
+ return buffer;
4103
+ }
4104
+
4105
+ function program3(depth0,data) {
4106
+
4107
+ var buffer = '', stack1;
4108
+ data.buffer.push("\n <div data-label=\"route-controller\">\n <span title=\"");
4109
+ data.buffer.push(escapeExpression(helpers.unbound.call(depth0, "value.controller.className", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data})));
4110
+ data.buffer.push("\">");
4111
+ stack1 = helpers._triageMustache.call(depth0, "value.controller.className", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
4112
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
4113
+ data.buffer.push("</span>\n </div>\n ");
4114
+ return buffer;
4115
+ }
4116
+
4117
+ data.buffer.push("<div ");
4118
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
4119
+ 'class': (":list-tree__item :row isCurrent:row_highlight")
4120
+ },hashTypes:{'class': "STRING"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));
4121
+ data.buffer.push(" data-label=\"route-node\">\n <div class=\"cell_type_main cell\" data-label=\"route-name\">\n <div ");
4122
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
4123
+ 'style': ("labelStyle")
4124
+ },hashTypes:{'style': "STRING"},hashContexts:{'style': depth0},contexts:[],types:[],data:data})));
4125
+ data.buffer.push(">\n <span title=\"");
4126
+ data.buffer.push(escapeExpression(helpers.unbound.call(depth0, "value.name", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data})));
4127
+ data.buffer.push("\" data-label=\"view-name\">");
4128
+ stack1 = helpers._triageMustache.call(depth0, "value.name", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
4129
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
4130
+ data.buffer.push("</span>\n </div>\n </div>\n <div class=\"cell\">\n <div class=\"list-tree__limited cell_clickable\" ");
4131
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "inspectRoute", "value.routeHandler.name", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:["STRING","ID"],data:data})));
4132
+ data.buffer.push(" data-label=\"route-handler\">\n <span title=\"");
4133
+ data.buffer.push(escapeExpression(helpers.unbound.call(depth0, "value.routeHandler.className", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data})));
4134
+ data.buffer.push("\">");
4135
+ stack1 = helpers._triageMustache.call(depth0, "value.routeHandler.className", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
4136
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
4137
+ data.buffer.push("</span>\n </div>\n <div class=\"list-tree__right-helper\">\n ");
4138
+ data.buffer.push(escapeExpression((helper = helpers['send-to-console'] || (depth0 && depth0['send-to-console']),options={hash:{
4139
+ 'action': ("sendRouteHandlerToConsole"),
4140
+ 'param': ("value.routeHandler.name")
4141
+ },hashTypes:{'action': "STRING",'param': "ID"},hashContexts:{'action': depth0,'param': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "send-to-console", options))));
4142
+ data.buffer.push("\n </div>\n </div>\n <div class=\"cell\">\n ");
4143
+ stack1 = helpers['if'].call(depth0, "value.controller.exists", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(3, program3, data),fn:self.program(1, program1, data),contexts:[depth0],types:["ID"],data:data});
4144
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
4145
+ data.buffer.push("\n </div>\n <div class=\"cell\" data-label=\"route-template\">\n <span title=\"");
4146
+ data.buffer.push(escapeExpression(helpers.unbound.call(depth0, "value.template.name", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data})));
4147
+ data.buffer.push("\">");
4148
+ stack1 = helpers._triageMustache.call(depth0, "value.template.name", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
4149
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
4150
+ data.buffer.push("</span>\n </div>\n <div class=\"cell cell_size_large\" data-label=\"route-url\">\n <span title=\"");
4151
+ data.buffer.push(escapeExpression(helpers.unbound.call(depth0, "value.url", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data})));
4152
+ data.buffer.push("\">");
4153
+ stack1 = helpers._triageMustache.call(depth0, "value.url", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data});
4154
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
4155
+ data.buffer.push("</span>\n </div>\n\n</div>\n");
4156
+ return buffer;
4157
+
4158
+ }); });
4159
+
4160
+ define('templates/route_tree', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
4161
+ this.compilerInfo = [4,'>= 1.0.0'];
4162
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
4163
+ var buffer = '', escapeExpression=this.escapeExpression;
4164
+
4165
+
4166
+ data.buffer.push("<div class=\"list-view\">\n <div class=\"list-view__header row\">\n <div class=\"cell cell_type_header\">\n Route Name\n </div>\n <div class=\"cell cell_type_header\">\n Route\n </div>\n <div class=\"cell cell_type_header\">\n Controller\n </div>\n <div class=\"cell cell_type_header\">\n Template\n </div>\n <div class=\"cell cell_type_header cell_size_large\">\n URL\n </div>\n <!-- Account for scrollbar width :'( -->\n <div class=\"cell cell_type_header spacer\"></div>\n </div>\n\n <div class=\"list-view__list-container\">\n ");
4167
+ data.buffer.push(escapeExpression(helpers.view.call(depth0, "routeList", {hash:{
4168
+ 'content': ("")
4169
+ },hashTypes:{'content': "ID"},hashContexts:{'content': depth0},contexts:[depth0],types:["STRING"],data:data})));
4170
+ data.buffer.push("\n </div>\n</div>\n");
4171
+ return buffer;
4172
+
4173
+ }); });
4174
+
4175
+ define('templates/route_tree_toolbar', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
4176
+ this.compilerInfo = [4,'>= 1.0.0'];
4177
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
4178
+ var buffer = '', helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;
4179
+
4180
+
4181
+ data.buffer.push("<div class=\"toolbar\">\n <div class=\"toolbar__checkbox\" data-label=\"filter-hide-routes\">\n ");
4182
+ data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{
4183
+ 'type': ("checkbox"),
4184
+ 'checked': ("options.hideRoutes"),
4185
+ 'id': ("options-hideRoutes")
4186
+ },hashTypes:{'type': "STRING",'checked': "ID",'id': "STRING"},hashContexts:{'type': depth0,'checked': depth0,'id': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "input", options))));
4187
+ data.buffer.push(" <label for=\"options-hideRoutes\">Current Route only</label>\n </div>\n</div>");
4188
+ return buffer;
4189
+
4190
+ }); });
4191
+
4192
+ define('templates/view_item', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
4193
+ this.compilerInfo = [4,'>= 1.0.0'];
4194
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
4195
+ var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;
4196
+
4197
+ function program1(depth0,data) {
4198
+
4199
+ var buffer = '', helper, options;
4200
+ data.buffer.push("\n <div ");
4201
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
4202
+ 'class': (":list-tree__limited modelInspectable:cell_clickable")
4203
+ },hashTypes:{'class': "STRING"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));
4204
+ data.buffer.push(" ");
4205
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "inspectModel", "value.model.objectId", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:["STRING","ID"],data:data})));
4206
+ data.buffer.push(">\n <span title=\"");
4207
+ data.buffer.push(escapeExpression(helpers.unbound.call(depth0, "value.model.completeName", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data})));
4208
+ data.buffer.push("\">");
4209
+ data.buffer.push(escapeExpression(helpers.unbound.call(depth0, "value.model.name", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data})));
4210
+ data.buffer.push("</span>\n </div>\n <div class=\"list-tree__right-helper\">\n ");
4211
+ data.buffer.push(escapeExpression((helper = helpers['send-to-console'] || (depth0 && depth0['send-to-console']),options={hash:{
4212
+ 'action': ("sendModelToConsole"),
4213
+ 'param': ("value.objectId")
4214
+ },hashTypes:{'action': "STRING",'param': "ID"},hashContexts:{'action': depth0,'param': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "send-to-console", options))));
4215
+ data.buffer.push("\n </div>\n ");
4216
+ return buffer;
4217
+ }
4218
+
4219
+ function program3(depth0,data) {
4220
+
4221
+
4222
+ data.buffer.push("\n --\n ");
4223
+ }
4224
+
4225
+ function program5(depth0,data) {
4226
+
4227
+ var buffer = '', helper, options;
4228
+ data.buffer.push("\n <div ");
4229
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
4230
+ 'class': (":list-tree__limited hasController:cell_clickable")
4231
+ },hashTypes:{'class': "STRING"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));
4232
+ data.buffer.push(" ");
4233
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "inspect", "value.controller.objectId", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:["STRING","ID"],data:data})));
4234
+ data.buffer.push(" >\n <span title=\"");
4235
+ data.buffer.push(escapeExpression(helpers.unbound.call(depth0, "value.controller.completeName", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data})));
4236
+ data.buffer.push("\">");
4237
+ data.buffer.push(escapeExpression(helpers.unbound.call(depth0, "value.controller.name", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data})));
4238
+ data.buffer.push("</span>\n </div>\n <div class=\"list-tree__right-helper\">\n ");
4239
+ data.buffer.push(escapeExpression((helper = helpers['send-to-console'] || (depth0 && depth0['send-to-console']),options={hash:{
4240
+ 'action': ("sendObjectToConsole"),
4241
+ 'param': ("value.controller.objectId")
4242
+ },hashTypes:{'action': "STRING",'param': "ID"},hashContexts:{'action': depth0,'param': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "send-to-console", options))));
4243
+ data.buffer.push("\n </div>\n ");
4244
+ return buffer;
4245
+ }
4246
+
4247
+ function program7(depth0,data) {
4248
+
4249
+ var buffer = '', helper, options;
4250
+ data.buffer.push("\n <div ");
4251
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
4252
+ 'class': (":list-tree__limited hasView:cell_clickable")
4253
+ },hashTypes:{'class': "STRING"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));
4254
+ data.buffer.push(" ");
4255
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "inspectView", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["STRING"],data:data})));
4256
+ data.buffer.push(" >\n <span title=\"");
4257
+ data.buffer.push(escapeExpression(helpers.unbound.call(depth0, "value.completeViewClass", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data})));
4258
+ data.buffer.push("\">");
4259
+ data.buffer.push(escapeExpression(helpers.unbound.call(depth0, "value.viewClass", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data})));
4260
+ data.buffer.push("</span>\n </div>\n <div class=\"list-tree__right-helper\">\n ");
4261
+ data.buffer.push(escapeExpression((helper = helpers['send-to-console'] || (depth0 && depth0['send-to-console']),options={hash:{
4262
+ 'action': ("sendObjectToConsole"),
4263
+ 'param': ("value.objectId")
4264
+ },hashTypes:{'action': "STRING",'param': "ID"},hashContexts:{'action': depth0,'param': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "send-to-console", options))));
4265
+ data.buffer.push("\n </div>\n ");
4266
+ return buffer;
4267
+ }
4268
+
4269
+ data.buffer.push("<div ");
4270
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
4271
+ 'class': (":list-tree__item :row isCurrent:row_highlight")
4272
+ },hashTypes:{'class': "STRING"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));
4273
+ data.buffer.push(" >\n <div class=\"cell_type_main cell\" >\n <div ");
4274
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
4275
+ 'style': ("labelStyle")
4276
+ },hashTypes:{'style': "STRING"},hashContexts:{'style': depth0},contexts:[],types:[],data:data})));
4277
+ data.buffer.push(">\n <span ");
4278
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
4279
+ 'title': ("value.name")
4280
+ },hashTypes:{'title': "STRING"},hashContexts:{'title': depth0},contexts:[],types:[],data:data})));
4281
+ data.buffer.push(" data-label=\"view-name\">");
4282
+ data.buffer.push(escapeExpression(helpers.unbound.call(depth0, "value.name", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data})));
4283
+ data.buffer.push("</span>\n </div>\n </div>\n\n <div ");
4284
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
4285
+ 'class': (":cell hasElement:cell_clickable")
4286
+ },hashTypes:{'class': "STRING"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));
4287
+ data.buffer.push(" ");
4288
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "inspectElement", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["STRING"],data:data})));
4289
+ data.buffer.push(" data-label=\"view-template\">\n <span title=\"");
4290
+ data.buffer.push(escapeExpression(helpers.unbound.call(depth0, "value.template", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data})));
4291
+ data.buffer.push("\">");
4292
+ data.buffer.push(escapeExpression(helpers.unbound.call(depth0, "value.template", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data})));
4293
+ data.buffer.push("</span>\n </div>\n <div ");
4294
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
4295
+ 'class': (":cell")
4296
+ },hashTypes:{'class': "STRING"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));
4297
+ data.buffer.push(" data-label=\"view-model\">\n ");
4298
+ stack1 = helpers['if'].call(depth0, "hasModel", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(3, program3, data),fn:self.program(1, program1, data),contexts:[depth0],types:["ID"],data:data});
4299
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
4300
+ data.buffer.push("\n </div>\n <div ");
4301
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
4302
+ 'class': (":cell")
4303
+ },hashTypes:{'class': "STRING"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));
4304
+ data.buffer.push(" data-label=\"view-controller\">\n ");
4305
+ stack1 = helpers['if'].call(depth0, "hasController", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(5, program5, data),contexts:[depth0],types:["ID"],data:data});
4306
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
4307
+ data.buffer.push("\n </div>\n <div ");
4308
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
4309
+ 'class': (":cell")
4310
+ },hashTypes:{'class': "STRING"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));
4311
+ data.buffer.push(" data-label=\"view-class\">\n ");
4312
+ stack1 = helpers['if'].call(depth0, "hasView", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(3, program3, data),fn:self.program(7, program7, data),contexts:[depth0],types:["ID"],data:data});
4313
+ if(stack1 || stack1 === 0) { data.buffer.push(stack1); }
4314
+ data.buffer.push("\n </div>\n\n <div class=\"cell cell_size_small cell_value_numeric\" >\n <span class=\"pill pill_not-clickable pill_size_small\" data-label=\"view-duration\">");
4315
+ data.buffer.push(escapeExpression((helper = helpers['ms-to-time'] || (depth0 && depth0['ms-to-time']),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["ID"],data:data},helper ? helper.call(depth0, "value.duration", options) : helperMissing.call(depth0, "ms-to-time", "value.duration", options))));
4316
+ data.buffer.push("</span>\n </div>\n</div>\n");
4317
+ return buffer;
4318
+
4319
+ }); });
4320
+
4321
+ define('templates/view_tree', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
4322
+ this.compilerInfo = [4,'>= 1.0.0'];
4323
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
4324
+ var buffer = '', escapeExpression=this.escapeExpression;
4325
+
4326
+
4327
+ data.buffer.push("<div class=\"list-view\">\n <div class=\"list-view__header row\">\n <div class=\"cell cell_type_header\">\n Name\n </div>\n <div class=\"cell cell_type_header\">\n Template\n </div>\n <div class=\"cell cell_type_header\">\n Model\n </div>\n <div class=\"cell cell_type_header\">\n Controller\n </div>\n <div class=\"cell cell_type_header\">\n View / Component\n </div>\n <div class=\"cell cell_size_small cell_value_numeric cell_type_header\">\n Duration\n </div>\n <!-- Account for scrollbar width :'( -->\n <div class=\"cell cell_type_header spacer\"></div>\n </div>\n\n <div class=\"list-view__list-container\">\n ");
4328
+ data.buffer.push(escapeExpression(helpers.view.call(depth0, "viewList", {hash:{
4329
+ 'content': ("")
4330
+ },hashTypes:{'content': "ID"},hashContexts:{'content': depth0},contexts:[depth0],types:["STRING"],data:data})));
4331
+ data.buffer.push("\n </div>\n</div>\n");
4332
+ return buffer;
4333
+
4334
+ }); });
4335
+
4336
+ define('templates/view_tree_toolbar', ['exports'], function(__exports__){ __exports__['default'] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
4337
+ this.compilerInfo = [4,'>= 1.0.0'];
4338
+ helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
4339
+ var buffer = '', helper, options, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing;
4340
+
4341
+
4342
+ data.buffer.push("<div class=\"toolbar\">\n <button ");
4343
+ data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{
4344
+ 'class': ("inspectingViews:active :toolbar__icon-button")
4345
+ },hashTypes:{'class': "STRING"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));
4346
+ data.buffer.push(" ");
4347
+ data.buffer.push(escapeExpression(helpers.action.call(depth0, "toggleViewInspection", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:["STRING"],data:data})));
4348
+ data.buffer.push(" data-label=\"inspect-views\">\n <svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <g class=\"svg-stroke\" transform=\"translate(3.000000, 4.000000)\" stroke=\"#000000\" stroke-width=\"2\" fill=\"none\" fill-rule=\"evenodd\">\n <path d=\"M7.5,7.5 L10.5,10.5\" stroke-linecap=\"square\"></path>\n <circle cx=\"4\" cy=\"4\" r=\"4\"></circle>\n </g>\n </svg>\n </button>\n\n <div class=\"divider\"></div>\n\n <div class=\"toolbar__checkbox\" data-label=\"filter-components\">\n ");
4349
+ data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{
4350
+ 'type': ("checkbox"),
4351
+ 'checked': ("options.components"),
4352
+ 'id': ("options-components")
4353
+ },hashTypes:{'type': "STRING",'checked': "ID",'id': "STRING"},hashContexts:{'type': depth0,'checked': depth0,'id': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "input", options))));
4354
+ data.buffer.push(" <label for=\"options-components\">Components</label>\n </div>\n\n <div class=\"toolbar__checkbox\" data-label=\"filter-all-views\">\n ");
4355
+ data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{
4356
+ 'type': ("checkbox"),
4357
+ 'checked': ("options.allViews"),
4358
+ 'id': ("options-allViews")
4359
+ },hashTypes:{'type': "STRING",'checked': "ID",'id': "STRING"},hashContexts:{'type': depth0,'checked': depth0,'id': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, "input", options))));
4360
+ data.buffer.push(" <label for=\"options-allViews\">All Views</label>\n </div>\n</div>\n");
4361
+ return buffer;
4362
+
4363
+ }); });
4364
+ define("utils/check_current_route",
4365
+ ["exports"],
4366
+ function(__exports__) {
4367
+ "use strict";
4368
+ __exports__["default"] = function(currentRouteName, routeName) {
4369
+ var regName, match;
4370
+
4371
+ if (routeName === 'application') {
4372
+ return true;
4373
+ }
4374
+
4375
+ regName = routeName.replace('.', '\\.');
4376
+ match = currentRouteName.match(new RegExp('(^|\\.)' + regName + '(\\.|$)'));
4377
+ if (match && match[0].match(/^\.[^.]+$/)) {
4378
+ match = false;
4379
+ }
4380
+ return !!match;
4381
+ };
4382
+ });
4383
+ define("utils/escape_reg_exp",
4384
+ ["exports"],
4385
+ function(__exports__) {
4386
+ "use strict";
4387
+ __exports__["default"] = function(str) {
4388
+ return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
4389
+ };
4390
+ });
4391
+ define("utils/search_match",
4392
+ ["utils/escape_reg_exp","exports"],
4393
+ function(__dependency1__, __exports__) {
4394
+ "use strict";
4395
+ var escapeRegExp = __dependency1__["default"];
4396
+ var isEmpty = Ember.isEmpty;
4397
+
4398
+ __exports__["default"] = function(text, searchQuery) {
4399
+ if (isEmpty(searchQuery)) {
4400
+ return true;
4401
+ }
4402
+ var regExp = new RegExp(escapeRegExp(searchQuery.toLowerCase()));
4403
+ return !!text.toLowerCase().match(regExp);
4404
+ };
4405
+ });
4406
+ define("views/application",
4407
+ ["exports"],
4408
+ function(__exports__) {
4409
+ "use strict";
4410
+ __exports__["default"] = Ember.View.extend({
4411
+ classNames: ['app'],
4412
+
4413
+ classNameBindings: [
4414
+ 'inactive',
4415
+ 'controller.isDragging'
4416
+ ],
4417
+
4418
+ inactive: Ember.computed.not('controller.active'),
4419
+
4420
+ attributeBindings: ['tabindex'],
4421
+ tabindex: 1,
4422
+
4423
+ height: Ember.computed.alias('controller.height'),
4424
+
4425
+ didInsertElement: function() {
4426
+ this._super();
4427
+
4428
+ Ember.$(window).on('resize.application-view-' + this.get('elementId'), function() {
4429
+ Ember.run.debounce(this, 'updateHeight', 200);
4430
+ }.bind(this));
4431
+ this.updateHeight();
4432
+ },
4433
+
4434
+ updateHeight: function() {
4435
+ // could be destroyed but with debounce pending
4436
+ if (this.$()) {
4437
+ this.set('height', this.$().height());
4438
+ }
4439
+ },
4440
+
4441
+ willDestroyElement: function() {
4442
+ Ember.$(window).off('.application-view-' + this.get('elementId'));
4443
+ },
4444
+
4445
+ focusIn: function() {
4446
+ if (!this.get('controller.active')) {
4447
+ this.set('controller.active', true);
4448
+ }
4449
+ },
4450
+
4451
+ focusOut: function() {
4452
+ if (this.get('controller.active')) {
4453
+ this.set('controller.active', false);
4454
+ }
4455
+ }
4456
+ });
4457
+ });
4458
+ define("views/container_type",
4459
+ ["mixins/fake_table","exports"],
4460
+ function(__dependency1__, __exports__) {
4461
+ "use strict";
4462
+ var FakeTableMixin = __dependency1__["default"];
4463
+
4464
+ __exports__["default"] = Ember.View.extend(FakeTableMixin);
4465
+ });
4466
+ define("views/instance_list",
4467
+ ["views/list","views/list_item","exports"],
4468
+ function(__dependency1__, __dependency2__, __exports__) {
4469
+ "use strict";
4470
+ var ListView = __dependency1__["default"];
4471
+ var ListItemView = __dependency2__["default"];
4472
+
4473
+ __exports__["default"] = ListView.extend({
4474
+ itemViewClass: ListItemView.extend({
4475
+ templateName: "instance_item"
4476
+ })
4477
+
4478
+ });
4479
+ });
4480
+ define("views/list",
4481
+ ["views/list_item","exports"],
4482
+ function(__dependency1__, __exports__) {
4483
+ "use strict";
4484
+ var ListItemView = __dependency1__["default"];
4485
+
4486
+ __exports__["default"] = Ember.ListView.extend({
4487
+ classNames: ["list-tree"],
4488
+
4489
+ contentHeight: Ember.computed.alias('controller.controllers.application.contentHeight'),
4490
+
4491
+ height: function() {
4492
+ var headerHeight = 31,
4493
+ contentHeight = this.get('contentHeight');
4494
+
4495
+ // In testing list-view is created before `contentHeight` is set
4496
+ // which will trigger an exception
4497
+ if (!contentHeight) {
4498
+ return 1;
4499
+ }
4500
+ return contentHeight - headerHeight;
4501
+ }.property('contentHeight'),
4502
+ rowHeight: 30,
4503
+ itemViewClass: ListItemView
4504
+ });
4505
+ });
4506
+ define("views/list_item",
4507
+ ["exports"],
4508
+ function(__exports__) {
4509
+ "use strict";
4510
+ __exports__["default"] = Ember.ListItemView.extend({
4511
+ classNames: ["list-tree__item-wrapper", "row-wrapper"]
4512
+ });
4513
+ });
4514
+ define("views/main_content",
4515
+ ["exports"],
4516
+ function(__exports__) {
4517
+ "use strict";
4518
+ // Currently used to determine the height of list-views
4519
+ __exports__["default"] = Ember.View.extend({
4520
+ height: Ember.computed.alias('controller.contentHeight'),
4521
+
4522
+ didInsertElement: function() {
4523
+ this._super();
4524
+
4525
+ Ember.$(window).on('resize.view-' + this.get('elementId'), function() {
4526
+ Ember.run.debounce(this, 'updateHeight', 200);
4527
+ }.bind(this));
4528
+ this.updateHeight();
4529
+ },
4530
+
4531
+ updateHeight: function() {
4532
+ // could be destroyed but with debounce pending
4533
+ if (this.$()) {
4534
+ this.set('height', this.$().height());
4535
+ }
4536
+ },
4537
+
4538
+ willDestroyElement: function() {
4539
+ Ember.$(window).off('.view-' + this.get('elementId'));
4540
+ },
4541
+ });
4542
+ });
4543
+ define("views/promise_list",
4544
+ ["views/list","views/list_item","exports"],
4545
+ function(__dependency1__, __dependency2__, __exports__) {
4546
+ "use strict";
4547
+ var ListView = __dependency1__["default"];
4548
+ var ListItemView = __dependency2__["default"];
4549
+
4550
+ __exports__["default"] = ListView.extend({
4551
+ itemViewClass: ListItemView.extend({
4552
+ templateName: "promise_item"
4553
+ })
4554
+
4555
+ });
4556
+ });
4557
+ define("views/promise_tree",
4558
+ ["mixins/fake_table","exports"],
4559
+ function(__dependency1__, __exports__) {
4560
+ "use strict";
4561
+ var FakeTableMixin = __dependency1__["default"];
4562
+
4563
+ __exports__["default"] = Ember.View.extend(FakeTableMixin);
4564
+ });
4565
+ define("views/record_list",
4566
+ ["views/list","views/list_item","exports"],
4567
+ function(__dependency1__, __dependency2__, __exports__) {
4568
+ "use strict";
4569
+ var ListView = __dependency1__["default"];
4570
+ var ListItemView = __dependency2__["default"];
4571
+
4572
+ __exports__["default"] = ListView.extend({
4573
+ itemViewClass: ListItemView.extend({
4574
+ templateName: "record_item"
4575
+ })
4576
+
4577
+ });
4578
+ });
4579
+ define("views/records",
4580
+ ["mixins/fake_table","exports"],
4581
+ function(__dependency1__, __exports__) {
4582
+ "use strict";
4583
+ var FakeTableMixin = __dependency1__["default"];
4584
+
4585
+ __exports__["default"] = Ember.View.extend(FakeTableMixin);
4586
+ });
4587
+ define("views/render_list",
4588
+ ["exports"],
4589
+ function(__exports__) {
4590
+ "use strict";
4591
+ var View = Ember.View;
4592
+ __exports__["default"] = View.extend({
4593
+ attributeBindings: ['style'],
4594
+
4595
+ classNames: ["list-tree", "list-tree_scrollable"],
4596
+
4597
+ style: function() {
4598
+ return 'height:' + this.get('height') + 'px';
4599
+ }.property('height'),
4600
+
4601
+ contentHeight: Ember.computed.alias('controller.controllers.application.contentHeight'),
4602
+
4603
+ filterHeight: 22,
4604
+
4605
+ height: function() {
4606
+ var filterHeight = this.get('filterHeight'),
4607
+ headerHeight = 30,
4608
+ contentHeight = this.get('contentHeight');
4609
+
4610
+ // In testing list-view is created before `contentHeight` is set
4611
+ // which will trigger an exception
4612
+ if (!contentHeight) {
4613
+ return 1;
4614
+ }
4615
+ return contentHeight - filterHeight - headerHeight;
4616
+ }.property('contentHeight')
4617
+ });
4618
+ });
4619
+ define("views/render_tree",
4620
+ ["mixins/fake_table","exports"],
4621
+ function(__dependency1__, __exports__) {
4622
+ "use strict";
4623
+ var FakeTableMixin = __dependency1__["default"];
4624
+
4625
+ __exports__["default"] = Ember.View.extend(FakeTableMixin);
4626
+ });
4627
+ define("views/route_list",
4628
+ ["views/list","views/list_item","exports"],
4629
+ function(__dependency1__, __dependency2__, __exports__) {
4630
+ "use strict";
4631
+ var ListView = __dependency1__["default"];
4632
+ var ListItemView = __dependency2__["default"];
4633
+
4634
+ __exports__["default"] = ListView.extend({
4635
+ itemViewClass: ListItemView.extend({
4636
+ templateName: "route_item"
4637
+ })
4638
+ });
4639
+ });
4640
+ define("views/route_tree",
4641
+ ["mixins/fake_table","exports"],
4642
+ function(__dependency1__, __exports__) {
4643
+ "use strict";
4644
+ var FakeTableMixin = __dependency1__["default"];
4645
+
4646
+ __exports__["default"] = Ember.View.extend(FakeTableMixin);
4647
+ });
4648
+ define("views/view_list",
4649
+ ["views/list","views/list_item","exports"],
4650
+ function(__dependency1__, __dependency2__, __exports__) {
4651
+ "use strict";
4652
+ var ListView = __dependency1__["default"];
4653
+ var ListItemView = __dependency2__["default"];
4654
+
4655
+ __exports__["default"] = ListView.extend({
4656
+ itemViewClass: ListItemView.extend({
4657
+ templateName: "view_item",
4658
+ classNameBindings: 'isPinned',
4659
+ node: Ember.computed.alias('controller.model'),
4660
+ // for testing
4661
+ attributeBindings: ['data-label:label'],
4662
+ label: 'tree-node',
4663
+
4664
+ isPinned: function() {
4665
+ return this.get('node') === this.get('controller.pinnedNode');
4666
+ }.property('node', 'controller.pinnedNode'),
4667
+
4668
+ mouseEnter: function(e) {
4669
+ this.get('controller').send('previewLayer', this.get('node'));
4670
+ e.stopPropagation();
4671
+ },
4672
+
4673
+ mouseLeave: function(e) {
4674
+ this.get('controller').send('hidePreview', this.get('node'));
4675
+ e.stopPropagation();
4676
+ }
4677
+ })
4678
+ });
4679
+ });
4680
+ define("views/view_tree",
4681
+ ["mixins/fake_table","exports"],
4682
+ function(__dependency1__, __exports__) {
4683
+ "use strict";
4684
+ var FakeTableMixin = __dependency1__["default"];
4685
+
4686
+ __exports__["default"] = Ember.View.extend(FakeTableMixin);
4687
+ });