-
Notifications
You must be signed in to change notification settings - Fork 7
/
demo.js
77 lines (61 loc) · 1.95 KB
/
demo.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// ==========================================================================
// Project: Hedwig.demoController
// Copyright: ©2010 My Company, Inc.
// ==========================================================================
/*globals Hedwig */
/*jslint evil:true */
/** @class
(Document Your Controller Here)
@extends SC.Object
*/
Hedwig.demoController = SC.ObjectController.create(
/** @scope Hedwig.demoController.prototype */ {
demo: null,
content: function() {
return Hedwig.articleController.demoFor(this.get("demo"));
}.property("demo").cacheable(),
nowShowing: "front",
openDemo: function() {
this.set("nowShowing", "front");
if (this._openDemoPanel) {
return; // in this case, we've done everything we need.
}
try {
var source = this.get("ex");
//err... yes, this very badly immitates CommonJS modules. Sorry. :(
var obj = {};
var res = function (exports) {
// load module
eval(source);
}(obj);
var demoPanel = Hedwig.DemoPanel.generateWithView(obj.getDemoView());
demoPanel.append();
this._openDemoPanel = demoPanel;
} catch (e) {
}
},
closeDemo: function() {
this._openDemoPanel.remove();
this._openDemoPanel = null;
},
openSource: function() {
this.set("nowShowing", "back");
},
closeSource: function() {
console.error("WHY MUST YOU INSIST ON CLOSING THE SOURCE CODE! IT IS AGAINST EVERYTHING I BELIEVE IN! I'M GONNA CRY!");
this.set("nowShowing", "front");
},
preparedSource: function() {
var h = this.get("highlighted");
var linecount = h.split("\n").length;
var output = "<div class='line-numbers'>";
for (var idx = 0; idx<linecount; idx++){
output += "<span>" + (idx+1) + "</span>";
}
output += "</div>";
output += "<div class='code'>";
output += h;
output += "</div>";
return output;
}.property("highlighted").cacheable()
}) ;