sibilant 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/README.md +8 -4
  2. data/js/sibilant/.gitignore +4 -0
  3. data/js/sibilant/.travis.yml +6 -0
  4. data/js/sibilant/LICENSE +20 -0
  5. data/js/sibilant/README.md +70 -0
  6. data/js/sibilant/bin/sibilant +3 -0
  7. data/js/sibilant/cli-help +79 -0
  8. data/js/sibilant/include/functional.sibilant +57 -0
  9. data/js/sibilant/include/macros.sibilant +374 -0
  10. data/js/sibilant/include/node.sibilant +2 -0
  11. data/js/sibilant/lib/browser.js +685 -0
  12. data/js/sibilant/lib/cli.js +153 -0
  13. data/js/sibilant/lib/options.js +232 -0
  14. data/js/sibilant/lib/repl.js +78 -0
  15. data/js/sibilant/lib/sibilant.js +688 -0
  16. data/js/sibilant/misc/sibilant-mode.el +129 -0
  17. data/js/sibilant/package.json +19 -0
  18. data/js/sibilant/package.sibilant +16 -0
  19. data/js/sibilant/public/index.html +502 -0
  20. data/js/sibilant/public/javascripts/browser.js +685 -0
  21. data/js/sibilant/public/javascripts/jquery-ui.js +392 -0
  22. data/js/sibilant/public/javascripts/jquery.js +154 -0
  23. data/js/sibilant/public/javascripts/macros.sibilant +374 -0
  24. data/js/sibilant/public/javascripts/sibilant.info.sibilant +77 -0
  25. data/js/sibilant/public/sass/_mixins.sass +98 -0
  26. data/js/sibilant/public/sass/sibilant.sass +156 -0
  27. data/js/sibilant/public/stylesheets/Anonymous_Pro-webfont.eot +0 -0
  28. data/js/sibilant/public/stylesheets/Anonymous_Pro-webfont.svg +241 -0
  29. data/js/sibilant/public/stylesheets/Anonymous_Pro-webfont.ttf +0 -0
  30. data/js/sibilant/public/stylesheets/Anonymous_Pro-webfont.woff +0 -0
  31. data/js/sibilant/public/stylesheets/sibilant.css +166 -0
  32. data/js/sibilant/src/browser.sibilant +45 -0
  33. data/js/sibilant/src/cli.sibilant +93 -0
  34. data/js/sibilant/src/core.sibilant +338 -0
  35. data/js/sibilant/src/options.sibilant +65 -0
  36. data/js/sibilant/src/repl.sibilant +59 -0
  37. data/js/sibilant/src/sibilant.sibilant +78 -0
  38. data/js/sibilant/test/defvar.sibilant +5 -0
  39. data/js/sibilant/test/includeFile1.sibilant +1 -0
  40. data/js/sibilant/test/includeFile2.sibilant +1 -0
  41. data/js/sibilant/test/node.sibilant +10 -0
  42. data/js/sibilant/test/slice.sibilant +3 -0
  43. data/js/sibilant/test/test.sibilant +464 -0
  44. data/js/sibilant/test/testHelper.sibilant +80 -0
  45. data/lib/sibilant/version.rb +1 -1
  46. data/sibilant.gemspec +3 -1
  47. metadata +44 -1
@@ -0,0 +1,374 @@
1
+ (defmacro cons (first rest)
2
+ (macros.send (macros.list first) 'concat rest))
3
+
4
+ (defmacro join (glue arr)
5
+ (concat "(" (translate arr) ").join(" (translate glue) ")"))
6
+
7
+ (defmacro list (&rest args)
8
+ (concat "[ " (join ", " (map args translate)) " ]"))
9
+
10
+ (defmacro get (arr i) (concat "(" (translate arr) ")[" (translate i) "]"))
11
+
12
+ (defmacro + (&rest args)
13
+ (concat "(" (join " + " (map args translate)) ")"))
14
+ (defmacro - (&rest args)
15
+ (concat "(" (join " - " (map args translate)) ")"))
16
+ (defmacro * (&rest args)
17
+ (concat "(" (join " * " (map args translate)) ")"))
18
+ (defmacro / (&rest args)
19
+ (concat "(" (join " / " (map args translate)) ")"))
20
+ (defmacro or (&rest args)
21
+ (concat "(" (join " || " (map args translate)) ")"))
22
+ (defmacro and (&rest args)
23
+ (concat "(" (join " && " (map args translate)) ")"))
24
+ (defmacro mod (&rest args)
25
+ (concat "(" (join " % " (map args translate)) ")"))
26
+
27
+
28
+
29
+ (defmacro infix-comparator (comparator args)
30
+ (concat "("
31
+ (join " && "
32
+ (map (args.slice 0 -1)
33
+ (lambda (item index)
34
+ (concat item
35
+ " " comparator " "
36
+ (get args (+ 1 index))))))
37
+ ")"))
38
+
39
+ (defmacro > (&rest args) (macros.infix-comparator ">" (map args translate)))
40
+ (defmacro < (&rest args) (macros.infix-comparator "<" (map args translate)))
41
+ (defmacro <= (&rest args) (macros.infix-comparator "<=" (map args translate)))
42
+ (defmacro >= (&rest args) (macros.infix-comparator ">=" (map args translate)))
43
+ (defmacro != (&rest args) (macros.infix-comparator "!==" (map args translate)))
44
+
45
+ (defmacro pow (base exponent)
46
+ (macros.call "Math.pow" base exponent))
47
+
48
+ (defmacro incr-by (item increment)
49
+ (concat (translate item) " += " (translate increment)))
50
+
51
+ (defmacro incr (item)
52
+ (concat "((" (translate item) ")++)"))
53
+
54
+ (defmacro decr (item)
55
+ (concat "((" (translate item) ")--)"))
56
+
57
+ (defmacro set (arr &rest kv-pairs)
58
+ (join "\n" (bulk-map kv-pairs
59
+ (lambda (k v)
60
+ (concat "(" (translate arr) ")"
61
+ "[" (translate k) "] = " (translate v) ";")))))
62
+
63
+ (defmacro send (object method &rest args)
64
+ (concat (translate object) "." (translate method)
65
+ "(" (join ", " (map args translate)) ")"))
66
+
67
+ (defmacro new (fn)
68
+ (concat "(new " (translate fn) ")"))
69
+
70
+ (defmacro regex (string &optional glim)
71
+ ((get macros 'new) (macros.call "RegExp" string (or glim "undefined"))))
72
+
73
+ (defmacro timestamp ()
74
+ (concat "\"" (send (new (-date)) to-string) "\""))
75
+
76
+ (defmacro comment (&rest contents)
77
+ (map contents
78
+ (lambda (item)
79
+ (join "\n" (map (send (translate item) split "\n")
80
+ (lambda (line) (concat "// " line)))))))
81
+
82
+ (defmacro meta (body)
83
+ (eval (translate body)))
84
+
85
+ (defmacro apply (fn arglist)
86
+ (macros.send fn 'apply 'undefined arglist))
87
+
88
+ (defmacro zero? (item)
89
+ ((get macros "=") (translate item) 0))
90
+
91
+ (defmacro empty? (arr)
92
+ (concat "((" (translate arr) ").length === 0)"))
93
+
94
+ (defmacro odd? (number)
95
+ ((get macros "!=") 0
96
+ (macros.mod (translate number) 2)))
97
+
98
+ (defmacro even? (number)
99
+ ((get macros "=") 0
100
+ (macros.mod (translate number) 2)))
101
+
102
+
103
+ (defmacro function? (thing)
104
+ (concat "typeof(" (translate thing) ") === 'function'"))
105
+
106
+ (defmacro undefined? (thing)
107
+ (concat "typeof(" (translate thing) ") === 'undefined'"))
108
+
109
+ (defmacro defined? (thing)
110
+ (concat "typeof(" (translate thing) ") !== 'undefined'"))
111
+
112
+ (defmacro number? (thing)
113
+ (concat "typeof(" (translate thing) ") === 'number'"))
114
+
115
+ (defmacro first (arr) (macros.get arr 0))
116
+ (defmacro second (arr) (macros.get arr 1))
117
+ (defmacro third (arr) (macros.get arr 2))
118
+ (defmacro fourth (arr) (macros.get arr 3))
119
+ (defmacro fifth (arr) (macros.get arr 4))
120
+ (defmacro sixth (arr) (macros.get arr 5))
121
+ (defmacro seventh (arr) (macros.get arr 6))
122
+ (defmacro eighth (arr) (macros.get arr 7))
123
+ (defmacro ninth (arr) (macros.get arr 8))
124
+
125
+ (defmacro rest (arr)
126
+ (macros.send arr 'slice 1))
127
+
128
+ (defmacro length (arr)
129
+ (macros.get arr "\"length\""))
130
+
131
+ (defmacro last (arr)
132
+ (macros.get (macros.send arr 'slice -1) 0))
133
+
134
+ (defmacro if (arg truebody falsebody)
135
+ (concat
136
+ "(function() {"
137
+ (indent (concat
138
+ "if (" (translate arg) ") {"
139
+ (indent (macros.progn truebody))
140
+ "} else {"
141
+ (indent (macros.progn falsebody))
142
+ "}"))
143
+ "})()"))
144
+
145
+ (defmacro defvar (&rest pairs)
146
+ (as-statement
147
+ (concat "var "
148
+ (join ",\n "
149
+ (bulk-map pairs
150
+ (lambda (name value)
151
+ (concat (translate name) " = "
152
+ (translate value)))))
153
+ ";")))
154
+
155
+ (defmacro = (first-thing &rest other-things)
156
+ (defvar translated-first-thing (translate first-thing))
157
+ (concat "("
158
+ (join " &&\n "
159
+ (map other-things
160
+ (lambda (thing)
161
+ (concat translated-first-thing
162
+ " === "
163
+ (translate thing)))))
164
+ ")"))
165
+
166
+
167
+ (defmacro string? (thing)
168
+ (concat "typeof(" (translate thing) ") === \"string\""))
169
+
170
+ (defmacro list? (thing)
171
+ (defvar translated (concat "(" (translate thing) ")"))
172
+ (concat translated " && "
173
+ translated ".constructor.name === \"Array\""))
174
+
175
+
176
+ (defmacro when (arg &rest body)
177
+ (concat
178
+ "(function() {"
179
+ (indent (concat
180
+ "if (" (translate arg) ") {"
181
+ (indent (apply macros.progn body))
182
+ "}"))
183
+ "})()"))
184
+
185
+
186
+
187
+ (defmacro not (exp)
188
+ (concat "(!" (translate exp) ")"))
189
+
190
+ (defmacro slice (arr start &optional end)
191
+ (macros.send (translate arr) "slice" start end))
192
+
193
+ (defmacro inspect (&rest args)
194
+ (join " + \"\\n\" + "
195
+ (map args
196
+ (lambda (arg)
197
+ (concat "\"" arg ":\" + " (translate arg))))))
198
+
199
+ (defmacro each (item array &rest body)
200
+ (macros.send (translate array) 'for-each
201
+ (apply macros.lambda (cons item body))))
202
+
203
+
204
+ (defmacro setf (&rest args)
205
+ (join "\n"
206
+ (bulk-map args (lambda (name value)
207
+ (as-statement (concat (translate name) " = "
208
+ (translate value)))))))
209
+
210
+
211
+ (defmacro macro-list ()
212
+ (concat "["
213
+ (indent (join ",\n"
214
+ (map (-object.keys macros)
215
+ macros.quote)))
216
+ "]"))
217
+
218
+ (defmacro macroexpand (name)
219
+ (defvar macro (get macros (translate name)))
220
+ (if macro
221
+ (concat "// macro: " name "\n" (send macro to-string))
222
+ "undefined"))
223
+
224
+ (defmacro throw (&rest string)
225
+ (concat "throw new Error (" (join " " (map string translate)) ")"))
226
+
227
+ (defmacro as-boolean (expr)
228
+ (concat "(!!(" (translate expr) "))"))
229
+
230
+ (defmacro chain (object &rest calls)
231
+ (concat (translate object) " // chain"
232
+ (indent (join "\n"
233
+ (map calls
234
+ (lambda (call, index)
235
+ (defvar method (first call))
236
+ (defvar args (rest call))
237
+ (concat "." (translate method)
238
+ "(" (join ", " (map args translate)) ")")))))))
239
+
240
+ (defmacro try (tryblock catchblock)
241
+ (concat
242
+ "(function() {"
243
+ (indent (concat
244
+ "try {"
245
+ (indent (macros.progn tryblock))
246
+ "} catch (e) {"
247
+ (indent (macros.progn catchblock))
248
+ "}"))
249
+ "})()"))
250
+
251
+
252
+ (defmacro while (condition &rest block)
253
+ (macros.scoped
254
+ (macros.defvar '**return-value**)
255
+ (concat "while (" (translate condition) ") {"
256
+ (indent (macros.setf '**return-value**
257
+ (apply macros.scoped block))))
258
+ "}"
259
+ '**return-value**))
260
+
261
+ (defmacro until (condition &rest block)
262
+ (apply (get macros 'while)
263
+ (cons ['not condition] block)))
264
+
265
+
266
+ (defmacro thunk (&rest args)
267
+ (apply macros.lambda (cons [] args)))
268
+
269
+ (defmacro keys (obj)
270
+ (macros.call "Object.keys" (translate obj)))
271
+
272
+ (defmacro delete (&rest objects)
273
+ (join "\n" (map objects (lambda (obj)
274
+ (concat "delete " (translate obj) ";")))))
275
+
276
+ (defmacro delmacro (macro-name)
277
+ (delete (get macros (translate macro-name)))
278
+ "")
279
+
280
+ (defmacro alias-macro (current-macro-name desired-macro-name)
281
+ (defvar current-macro-name (translate current-macro-name)
282
+ desired-macro-name (translate desired-macro-name))
283
+ (set macros desired-macro-name (get macros current-macro-name))
284
+ "")
285
+
286
+ (defmacro rename-macro (current-macro-name desired-macro-name)
287
+ (macros.alias-macro current-macro-name desired-macro-name)
288
+ (macros.delmacro current-macro-name)
289
+ "")
290
+
291
+ (defmacro defhash (name &rest pairs)
292
+ (macros.defvar name (apply macros.hash pairs)))
293
+
294
+ (defmacro arguments ()
295
+ "(Array.prototype.slice.apply(arguments))")
296
+
297
+ (defmacro scoped (&rest body)
298
+ (macros.call (apply macros.thunk body)))
299
+
300
+ (defmacro each-key (as obj &rest body)
301
+ (concat "(function() {"
302
+ (indent
303
+ (concat "for (var " (translate as) " in " (translate obj) ") "
304
+ (apply macros.scoped body)
305
+ ";"))
306
+ "})();"))
307
+
308
+ (defmacro match? (regexp string)
309
+ (macros.send string 'match regexp))
310
+
311
+ (defmacro switch (obj &rest cases)
312
+
313
+ ;; the complexity of this macro indicates there's a problem
314
+ ;; I'm not quite sure where to fix this, but it has to do with quoting.
315
+ (defvar lines (list (concat "switch(" (translate obj) ") {")))
316
+ (each (case-def) cases
317
+ (defvar case-name (first case-def))
318
+ (when (and (list? case-name)
319
+ (= (first case-name) 'quote))
320
+ (defvar second (second case-name))
321
+ (setf case-name (if (list? second)
322
+ (map second macros.quote)
323
+ (macros.quote second))))
324
+
325
+ (defvar case-string
326
+ (if (list? case-name)
327
+ (join "\n" (map case-name (lambda (c)
328
+ (concat "case " (translate c) ":"))))
329
+ (if (= 'default case-name) "default:"
330
+ (concat "case " (translate case-name) ":"))))
331
+
332
+ (lines.push (concat case-string
333
+ (indent (apply macros.progn (case-def.slice 1))))))
334
+
335
+ ;; the following two lines are to get the whitespace right
336
+ ;; this is necessary because switches are indented weird
337
+ (set lines (- lines.length 1)
338
+ (chain (get lines (- lines.length 1)) (concat "}")))
339
+
340
+ (concat "(function() {" (apply indent lines) "})()"))
341
+
342
+
343
+ (defmacro if-else (&rest args)
344
+ (concat "(function() {"
345
+ (indent
346
+ (join " else "
347
+ (bulk-map args
348
+ (lambda (cond val)
349
+ (if (undefined? val)
350
+ (concat "{" (indent (macros.progn cond)) "}")
351
+ (concat "if (" (translate cond) ") {"
352
+ (indent (macros.progn val))
353
+ "}"))))))
354
+ "})()"))
355
+
356
+ (defmacro let (args &optional body)
357
+ (concat "let (" (bulk-map args
358
+ (lambda (h k v)
359
+ (concat (translate k) " = " (translate v))))
360
+ (if (undefined? body) ");"
361
+ (concat ") {" (indent (translate body)) "}"))))
362
+
363
+ (defmacro instance-of? (item type)
364
+ (concat "(" (translate item) " instanceof " (translate type) ")"))
365
+
366
+ (defmacro slice (list &optional begin &optional end)
367
+ (concat "Array.prototype.slice.call(" (translate list)
368
+ ", " (or (translate begin) 0)
369
+ (if (defined? end) (concat ", " (translate end) ")") ")")))
370
+
371
+ (defmacro ternary (cond if-true if-false)
372
+ (concat "(" (translate cond) ") ? "
373
+ (translate if-true) " : "
374
+ (translate if-false)))
@@ -0,0 +1,77 @@
1
+ (defmacro trim (item)
2
+ (macros.send item 'replace "/^\\s*|\\s*$/g" "\"\""))
3
+
4
+ (defmacro contains? (item arr)
5
+ ((get macros "!=") -1 (macros.send (translate arr) 'index-of item)))
6
+
7
+
8
+ ($ (thunk
9
+ (defvar $window ($ window))
10
+
11
+ (defun check-hash ()
12
+ (when (defined? check-hash.timeout)
13
+ (clear-timeout check-hash.timeout)
14
+ (delete check-hash.timeout))
15
+
16
+
17
+ (when (!= window.location.hash ($window.data 'last-hash))
18
+ (chain $window
19
+ (data 'last-hash window.location.hash)
20
+ (trigger 'hash-change window.location.hash)))
21
+
22
+ (setf check-hash.timeout (set-timeout check-hash 500)))
23
+
24
+ (defvar items ($ "script[language=sibilant/example]"))
25
+
26
+ ($window.click (thunk (set-timeout check-hash 25)))
27
+
28
+ ($window.bind 'hash-change
29
+ (lambda (evt hash)
30
+ (defvar item (send items filter hash))
31
+ (when (< 0 item.length)
32
+ (defvar content (chain item
33
+ (text)
34
+ (replace "<![CDATA[\n", "")
35
+ (replace "]]>" "")))
36
+ (defvar title (send item attr "data-title"))
37
+ (send ($ "header h2") html title)
38
+ (defvar next (send item next items.selector))
39
+ (defvar prev (send item prev items.selector))
40
+
41
+ (if (> next.length 0)
42
+ (chain ($ "#next")
43
+ (attr 'href (concat "#" (send next attr 'id)))
44
+ (show))
45
+ (send ($ "#next") hide))
46
+
47
+ (if (> prev.length 0)
48
+ (chain ($ "#prev")
49
+ (attr 'href (concat "#" (send prev attr 'id)))
50
+ (show))
51
+ (send ($ "#prev") hide))
52
+
53
+ (chain ($ "textarea")
54
+ (val (trim content))
55
+ (keyup)))))
56
+
57
+
58
+ (switch window.location.hash
59
+ (("" "#")
60
+ (setf window.location.hash
61
+ (chain items (first) (attr 'id)))))
62
+
63
+ (defvar textarea ($ 'textarea))
64
+
65
+ (chain textarea
66
+ (focus)
67
+ (keyup (lambda (evt)
68
+ (defvar output ($ "#output"))
69
+ (try (chain output
70
+ (text (sibilant.translate-all (textarea.val)))
71
+ (remove-class 'error))
72
+ (chain output
73
+ (text e.stack)
74
+ (add-class 'error))))))
75
+ (check-hash)))
76
+
77
+
@@ -0,0 +1,98 @@
1
+ =clearfix
2
+ *display: inline-block
3
+ &:after
4
+ content: " "
5
+ display: block
6
+ height: 0
7
+ clear: both
8
+ visibility: hidden
9
+
10
+ =border_radius($radius)
11
+ -moz-border-radius: $radius
12
+ -webkit-border-radius: $radius
13
+
14
+ =border_radius_corners($top_left, $top_right, $bottom_right, $bottom_left)
15
+ +border_radius_top_left($top_left)
16
+ +border_radius_top_right($top_right)
17
+ +border_radius_bottom_right($bottom_right)
18
+ +border_radius_bottom_left($bottom_left)
19
+
20
+ =border_radius_top($radius)
21
+ +border_radius_top_left($radius)
22
+ +border_radius_top_right($radius)
23
+
24
+ =border_radius_bottom($radius)
25
+ +border_radius_bottom_left($radius)
26
+ +border_radius_bottom_right($radius)
27
+
28
+ =border_radius_right($radius)
29
+ +border_radius_bottom_right($radius)
30
+ +border_radius_top_right($radius)
31
+
32
+ =border_radius_left($radius)
33
+ +border_radius_bottom_left($radius)
34
+ +border_radius_top_left($radius)
35
+
36
+ =border_radius_top_left($radius)
37
+ -moz-border-radius-topleft: $radius
38
+ -webkit-border-top-left-radius: $radius
39
+
40
+ =border_radius_top_right($radius)
41
+ -moz-border-radius-topright: $radius
42
+ -webkit-border-top-right-radius: $radius
43
+
44
+ =border_radius_bottom_right($radius)
45
+ -moz-border-radius-bottomright: $radius
46
+ -webkit-border-bottom-right-radius: $radius
47
+
48
+ =border_radius_bottom_left($radius)
49
+ -moz-border-radius-bottomleft: $radius
50
+ -webkit-border-bottom-left-radius: $radius
51
+
52
+ =box_shadow($shadow)
53
+ -webkit-box-shadow: $shadow
54
+ -moz-box-shadow: $shadow
55
+
56
+ =button
57
+ +border_radius(4px)
58
+ color: rgba(0,0,0,0.75)
59
+ text-decoration: none
60
+ cursor: pointer
61
+ background: rgba(128,128,128,0.25)
62
+ border: 1px solid rgba(0, 0, 0, 0.25)
63
+ padding: 5px
64
+ display: inline-block
65
+ text-shadow: 1px 1px 1px rgba(255, 255, 255, 0.5)
66
+ font-weight: normal
67
+ +box_shadow(0 0 10px rgba(0,0,0,0.2))
68
+ &:hover
69
+ background: rgba(128,128,128,0.15)
70
+ +box_shadow(0 0 10px rgba(0,0,0,0.1))
71
+
72
+
73
+ =small_button
74
+ +button
75
+ line-height: 15px
76
+ height: 15px
77
+ padding: 2px 5px
78
+
79
+ =large_button
80
+ +button
81
+ font-size: 15px
82
+ display: block
83
+ text-align: center
84
+ width: 200px
85
+ height: 40px
86
+ &[href]
87
+ line-height: 40px
88
+ &[type=submit]
89
+ line-height: 30px
90
+ padding: 5px
91
+ vertical-align: middle
92
+ margin: auto
93
+
94
+
95
+ =rotate($rotation)
96
+ -webkit-transform: unquote("rotate(") $rotation unquote(")")
97
+ -moz-transform: unquote("rotate(") $rotation unquote(")")
98
+
@@ -0,0 +1,156 @@
1
+ @import _mixins.sass
2
+ @font-face
3
+ font-family: 'AnonymousProRegular'
4
+ src: url('Anonymous_Pro-webfont.eot')
5
+ src: url('Anonymous_Pro-webfont.woff') format('woff'), url('Anonymous_Pro-webfont.ttf') format('truetype'), url('Anonymous_Pro-webfont.svg#webfontqJs74pnE') format('svg')
6
+ font-weight: normal
7
+ font-style: normal
8
+
9
+ body, textarea
10
+ font-family: 'AnonymousProRegular', Arial, sans-serif
11
+
12
+
13
+ #fork-me-on-github
14
+ :text-decoration none
15
+ font: 20px 'AnonymousProRegular', Arial, sans-serif
16
+ display: block
17
+ position: absolute
18
+ top: 70px
19
+ right: -70px
20
+ +rotate(45deg)
21
+ span
22
+ :background rgba(0,0,0,0.1)
23
+ :line-height 20px
24
+ :padding 3px 60px 7px
25
+ :color rgba(0,0,0,0.5)
26
+ +box_shadow(0 0 5px rgba(0,0,0,0.4))
27
+ :text-shadow 1px 1px 2px white
28
+ background-image: -webkit-gradient(linear,left top, left bottom, color-stop(0, rgb(230,230,230)), color-stop(1, rgb(255,255,255)))
29
+ background-image: -moz-linear-gradient(center bottom, rgb(230,230,230) 0%, rgb(255,255,255) 100%)
30
+ &:hover
31
+ +box_shadow(1px 1px 10px rgba(0,0,0,0.5))
32
+
33
+ #controls
34
+ :position absolute
35
+ :bottom 0
36
+ :height 75px
37
+ :width 100%
38
+ :display block
39
+ a
40
+ :display inline-block
41
+ :margin 0 5px
42
+ +border_radius(10px)
43
+ :width 100px
44
+ :height 40px
45
+ :line-height 40px
46
+ :text-decoration none
47
+ :color rgba(0,0,0,0.6)
48
+ :text-shadow 0 1px 1px white
49
+ +box-shadow(3px 3px 3px rgba(0,0,0,0.1))
50
+ :background-color rgb(240,240,240)
51
+ :background-image -webkit-gradient(linear,left top, left bottom, color-stop(0, rgba(255,255,255,0.1)), color-stop(0.15, rgba(255,255,255,0.75)), color-stop(0.5, rgba(255,255,255,0)), color-stop(0.6, rgba(0,0,0,0)), color-stop(0.75, rgba(0,0,0,0.1)), color-stop(1, rgba(0,0,0,0.4))), -webkit-gradient(linear, left top, right top, color-stop(0, rgba(0,0,0,0.1)), color-stop(0.05, rgba(0,0,0,0)), color-stop(0.7, rgba(0,0,0,0)), color-stop(0.9, rgba(0,0,0,0.1)), color-stop(1, rgba(0,0,0,0.4)))
52
+ :background-image -moz-linear-gradient(center bottom, rgba(0,0,0,0.1) 3%, rgba(0,0,0,0.2) 5%, rgba(0,0,0,0) 40%)
53
+ :outline 0
54
+
55
+ &:hover
56
+ :background-color rgb(250,250,250)
57
+ :color rgba(0,0,0,0.75)
58
+ &:active
59
+ :background-image -webkit-gradient(linear,left bottom, left top, color-stop(0, rgba(0,0,0,0.1)), color-stop(0.1, rgba(0,0,0,0.2)), color-stop(0.5, rgba(255,255,255,0)), color-stop(0.6, rgba(0,0,0,0)), color-stop(0.75, rgba(0,0,0,0.1)), color-stop(1, rgba(0,0,0,0.4))), -webkit-gradient(linear, right top, left top, color-stop(0, rgba(0,0,0,0.1)), color-stop(0.05, rgba(0,0,0,0)), color-stop(0.7, rgba(0,0,0,0)), color-stop(0.9, rgba(0,0,0,0.1)), color-stop(1, rgba(0,0,0,0.4)))
60
+ :color rgba(0,0,0,1)
61
+ +box-shadow(3px 3px 3px rgb(255,255,255))
62
+
63
+
64
+
65
+
66
+
67
+ html
68
+ padding: 0
69
+ background: white
70
+
71
+ body
72
+ text-align: center
73
+ overflow: hidden
74
+ padding: 0
75
+ margin: 0
76
+ width: 100%
77
+ +clearfix
78
+ min-height: 500px
79
+ height: 100%
80
+ background-color: white
81
+ background-image: -webkit-gradient(linear,left top, left bottom, color-stop(0, rgb(230,230,230)), color-stop(1, rgb(255,255,255)))
82
+ background-image: -moz-linear-gradient(center bottom, rgb(255,255,255) 0%, rgb(230,230,230) 100%)
83
+
84
+
85
+
86
+ h1, textarea, #output
87
+ +border_radius(5px)
88
+ :text-shadow 1px 1px 2px white
89
+ +box_shadow(2px 2px 5px rgba(255,255,255,1))
90
+ :border 1px solid rgba(0,0,0,0.1)
91
+ bottom: none
92
+ right: none
93
+
94
+
95
+ h1
96
+ :background-color rgba(0,0,0,0.03)
97
+ +clearfix
98
+ font: 60px 'AnonymousProRegular', Arial, sans-serif
99
+ letter-spacing: 0
100
+ text-align: center
101
+ margin: 30px auto 15px
102
+ padding: 15px 25px
103
+ display: inline-block
104
+ +border_radius(10px)
105
+ :border-color rgba(0,0,0,0.2)
106
+ color: rgba(0,0,0,0.4)
107
+ background-image: -webkit-gradient(linear,left top, left bottom, color-stop(0, rgba(0,0,0,0.1)), color-stop(0.05, rgba(0,0,0,0.01)), color-stop(0.1, rgba(0,0,0,0.0))), -webkit-gradient(linear,left top, right top, color-stop(0, rgba(0,0,0,0.1)), color-stop(0.01, rgba(0,0,0,0.01)), color-stop(0.05, rgba(0,0,0,0.0)))
108
+ background-image: -moz-linear-gradient(center bottom, rgba(230,230,230, 0) 0%, rgba(255,255,255, 0.5) 10%)
109
+
110
+ h2
111
+ font: 30px 'AnonymousProRegular', Arial, sans-serif
112
+ letter-spacing: 0
113
+ margin: 10px 0
114
+ text-align: center
115
+ color: rgba(0,0,0,0.5)
116
+ :text-shadow 0 1px 1px white
117
+
118
+
119
+ textarea, #output
120
+ :background-color rgba(0,0,0,0.05)
121
+ +border_radius(5px)
122
+ :letter-spacing 2px
123
+ :text-align left
124
+ font: 16px 'AnonymousProRegular', Arial, sans-serif
125
+ :font-weight normal
126
+ :text-shadow 0 1px 0 white
127
+ :width 85%
128
+ :margin auto
129
+ :height 300px
130
+ :display block
131
+ :padding 20px
132
+ :resize none
133
+
134
+ #output
135
+ :overflow auto
136
+ :margin-left 0
137
+ &.error
138
+ :font-size 10px
139
+ :color rgba(200,0,0,0.75)
140
+ &:first-line
141
+ :font-size 18px
142
+ :color rgba(200,0,0,0.85)
143
+
144
+ #left, #right
145
+ :width 50%
146
+ :margin 0
147
+ :float left
148
+ :display block
149
+ :padding 0
150
+
151
+ textarea:focus
152
+ outline: none
153
+
154
+
155
+ .example
156
+ :display none