bpm 1.0.0.beta.4 → 1.0.0.beta.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. data/CHANGELOG.md +11 -0
  2. data/TODO.md +4 -10
  3. data/backbone/LICENSE +22 -0
  4. data/backbone/README +25 -0
  5. data/backbone/Rakefile +42 -0
  6. data/backbone/backbone-0.5.1.bpkg +0 -0
  7. data/backbone/examples/backbone-localstorage.js +84 -0
  8. data/backbone/examples/todos/destroy.png +0 -0
  9. data/backbone/examples/todos/index.html +87 -0
  10. data/backbone/examples/todos/todos.css +311 -0
  11. data/backbone/examples/todos/todos.js +258 -0
  12. data/backbone/index.html +2606 -0
  13. data/backbone/index.js +1 -0
  14. data/backbone/lib/backbone.js +1149 -0
  15. data/backbone/lib/index.js +1 -0
  16. data/backbone/package.json +14 -0
  17. data/backbone/test/collection.js +345 -0
  18. data/backbone/test/events.js +70 -0
  19. data/backbone/test/model.coffee +43 -0
  20. data/backbone/test/model.js +424 -0
  21. data/backbone/test/noconflict.js +12 -0
  22. data/backbone/test/router.js +116 -0
  23. data/backbone/test/speed.js +45 -0
  24. data/backbone/test/sync.js +133 -0
  25. data/backbone/test/test-zepto.html +30 -0
  26. data/backbone/test/test.html +31 -0
  27. data/backbone/test/vendor/jquery-1.5.js +8176 -0
  28. data/backbone/test/vendor/jslitmus.js +649 -0
  29. data/backbone/test/vendor/json2.js +481 -0
  30. data/backbone/test/vendor/qunit.css +196 -0
  31. data/backbone/test/vendor/qunit.js +1364 -0
  32. data/backbone/test/vendor/underscore-1.1.6.js +807 -0
  33. data/backbone/test/vendor/zepto-0.6.js +692 -0
  34. data/backbone/test/view.js +137 -0
  35. data/lib/bpm/cli/base.rb +22 -7
  36. data/lib/bpm/package.rb +17 -5
  37. data/lib/bpm/project.rb +49 -32
  38. data/lib/bpm/version.rb +1 -1
  39. data/spec/cli/add_spec.rb +22 -4
  40. data/spec/cli/fetch_spec.rb +0 -1
  41. data/spec/cli/init_spec.rb +25 -10
  42. data/spec/cli/list_spec.rb +103 -62
  43. data/spec/cli/pack_spec.rb +36 -4
  44. data/spec/fixtures/packages/backbone/LICENSE +22 -0
  45. data/spec/fixtures/packages/backbone/README +25 -0
  46. data/spec/fixtures/packages/backbone/Rakefile +42 -0
  47. data/spec/fixtures/packages/backbone/examples/backbone-localstorage.js +84 -0
  48. data/spec/fixtures/packages/backbone/examples/todos/destroy.png +0 -0
  49. data/spec/fixtures/packages/backbone/examples/todos/index.html +87 -0
  50. data/spec/fixtures/packages/backbone/examples/todos/todos.css +311 -0
  51. data/spec/fixtures/packages/backbone/examples/todos/todos.js +258 -0
  52. data/spec/fixtures/packages/backbone/index.html +2606 -0
  53. data/spec/fixtures/packages/backbone/lib/backbone.js +1149 -0
  54. data/spec/fixtures/packages/backbone/lib/index.js +1 -0
  55. data/spec/fixtures/packages/backbone/package.json +14 -0
  56. data/spec/fixtures/packages/backbone/test/collection.js +345 -0
  57. data/spec/fixtures/packages/backbone/test/events.js +70 -0
  58. data/spec/fixtures/packages/backbone/test/model.coffee +43 -0
  59. data/spec/fixtures/packages/backbone/test/model.js +424 -0
  60. data/spec/fixtures/packages/backbone/test/noconflict.js +12 -0
  61. data/spec/fixtures/packages/backbone/test/router.js +116 -0
  62. data/spec/fixtures/packages/backbone/test/speed.js +45 -0
  63. data/spec/fixtures/packages/backbone/test/sync.js +133 -0
  64. data/spec/fixtures/packages/backbone/test/test-zepto.html +30 -0
  65. data/spec/fixtures/packages/backbone/test/test.html +31 -0
  66. data/spec/fixtures/packages/backbone/test/vendor/jquery-1.5.js +8176 -0
  67. data/spec/fixtures/packages/backbone/test/vendor/jslitmus.js +649 -0
  68. data/spec/fixtures/packages/backbone/test/vendor/json2.js +481 -0
  69. data/spec/fixtures/packages/backbone/test/vendor/qunit.css +196 -0
  70. data/spec/fixtures/packages/backbone/test/vendor/qunit.js +1364 -0
  71. data/spec/fixtures/packages/backbone/test/vendor/underscore-1.1.6.js +807 -0
  72. data/spec/fixtures/packages/backbone/test/vendor/zepto-0.6.js +692 -0
  73. data/spec/fixtures/packages/backbone/test/view.js +137 -0
  74. data/spec/fixtures/projects/init_app/assets/bpm_libs.js +1 -1
  75. data/spec/fixtures/projects/init_app/assets/bpm_styles.css +1 -1
  76. data/spec/fixtures/projects/init_app/new_project.json +1 -10
  77. data/spec/pipeline_spec.rb +5 -5
  78. data/spec/plugins/minifier_spec.rb +1 -1
  79. data/spec/plugins/transport_spec.rb +1 -1
  80. metadata +116 -28
  81. data/spec/fixtures/projects/init_app/assets/new_project/bpm_libs.js +0 -6
  82. data/spec/fixtures/projects/init_app/assets/new_project/bpm_styles.css +0 -5
data/CHANGELOG.md CHANGED
@@ -1,4 +1,15 @@
1
1
 
2
+ * bpm list now shows local dependencies by default. Use bpm list --remote
3
+ to get remote.
4
+ * better compatibility with npm - "summary" field is optional and "url" is
5
+ mapped to "homepage"
6
+ * fixed some failing unit tests
7
+ * you can now place other projects into a vendor directory and have their
8
+ packages appear in the local package. This is useful if you want to
9
+ import another project which holds multiple packages for development.
10
+
11
+ # 1.0.0.beta.4
12
+
2
13
  * Fixed issue with compile that would cause exceptions if you deleted the
3
14
  global .bpm directory
4
15
  * BPM now complains if you load a package whose directory name does not
data/TODO.md CHANGED
@@ -1,7 +1,4 @@
1
1
 
2
- * you should be able to place other projects into a vendor directory and
3
- have their packages appear.
4
-
5
2
  * Multiple format support. Format processors supplied by dependencies should
6
3
  be used to resolve formats.
7
4
 
@@ -13,15 +10,14 @@
13
10
 
14
11
  * HTML files should be able to process as templates using a template plugin
15
12
 
16
- * Should log clearly when fetching from remotes
17
-
18
13
  * Can we use YAML instead of JSON?
19
14
 
20
15
  * Changing a dependency in a package.json should rebuild all files in preview mode (in case the transport was modified)
21
16
 
22
- * Need to run bpm update before bpm preview for the first time
17
+ * make work with JS that is placed at the root of the package. (i.e. lib = .)
18
+
19
+ * figure out why requiring LibGems takes so long; really slows down launch
23
20
 
24
- * "directories" should be optional in package.json - we can infer it.
25
21
 
26
22
  ----------------
27
23
 
@@ -51,11 +47,9 @@
51
47
  # also we could publish a rails plugin that bakes in to
52
48
  # rails app
53
49
 
54
- bpm compile # generates a built app when you are ready to go to prod
50
+ bpm rebuild # generates a built app when you are ready to go to prod
55
51
  # maybe should build the entire thing into a different
56
52
  # loc?
57
-
58
- bpm update # invoke if you modify the bpm.json to update settings
59
53
 
60
54
  ## User working with unit tests in their app
61
55
 
data/backbone/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2010 Jeremy Ashkenas, DocumentCloud
2
+
3
+ Permission is hereby granted, free of charge, to any person
4
+ obtaining a copy of this software and associated documentation
5
+ files (the "Software"), to deal in the Software without
6
+ restriction, including without limitation the rights to use,
7
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the
9
+ Software is furnished to do so, subject to the following
10
+ conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
data/backbone/README ADDED
@@ -0,0 +1,25 @@
1
+ ____ _ _ _
2
+ | _ \ | | | | (_)
3
+ | |_) | __ _ ___| | __| |__ ___ _ __ ___ _ ___
4
+ | _ < / _` |/ __| |/ /| '_ \ / _ \| '_ \ / _ \ | / __|
5
+ | |_) | (_| | (__| < | |_) | (_) | | | | __/_| \__ \
6
+ |____/ \__,_|\___|_|\_\|_.__/ \___/|_| |_|\___(_) |___/
7
+ _/ |
8
+ |__/
9
+ (_'___________________________________________________'_)
10
+ (_.———————————————————————————————————————————————————._)
11
+
12
+
13
+ Backbone supplies structure to JavaScript-heavy applications by providing models key-value binding and custom events, collections with a rich API of enumerable functions, views with declarative event handling, and connects it all to your existing application over a RESTful JSON interface.
14
+
15
+ For Docs, License, Tests, and pre-packed downloads, see:
16
+ http://documentcloud.github.com/backbone/
17
+
18
+ To suggest a feature, report a bug, or general discussion:
19
+ http://github.com/documentcloud/backbone/issues/
20
+
21
+ All contributors are listed here:
22
+ http://github.com/documentcloud/backbone/contributors
23
+
24
+ Special thanks to Robert Kieffer for the original philosophy behind Backbone.
25
+ http://github.com/broofa
data/backbone/Rakefile ADDED
@@ -0,0 +1,42 @@
1
+ require 'rubygems'
2
+
3
+ HEADER = /((^\s*\/\/.*\n)+)/
4
+
5
+ desc "rebuild the backbone-min.js files for distribution"
6
+ task :build do
7
+ begin
8
+ require 'closure-compiler'
9
+ rescue LoadError
10
+ puts "closure-compiler not found.\nInstall it by running 'gem install closure-compiler"
11
+ exit
12
+ end
13
+ source = File.read 'backbone.js'
14
+ header = source.match(HEADER)
15
+ File.open('backbone-min.js', 'w+') do |file|
16
+ file.write header[1].squeeze(' ') + Closure::Compiler.new.compress(source)
17
+ end
18
+ end
19
+
20
+ desc "build the docco documentation"
21
+ task :doc do
22
+ check 'docco', 'docco', 'https://github.com/jashkenas/docco'
23
+ system 'docco backbone.js && docco examples/todos/todos.js examples/backbone-localstorage.js'
24
+ end
25
+
26
+ desc "run JavaScriptLint on the source"
27
+ task :lint do
28
+ system "jsl -nofilelisting -nologo -conf docs/jsl.conf -process backbone.js"
29
+ end
30
+
31
+ desc "test the CoffeeScript integration"
32
+ task :test do
33
+ check 'coffee', 'CoffeeScript', 'https://github.com/jashkenas/coffee-script.git'
34
+ system "coffee test/*.coffee"
35
+ end
36
+
37
+ # Check for the existence of an executable.
38
+ def check(exec, name, url)
39
+ return unless `which #{exec}`.empty?
40
+ puts "#{name} not found.\nInstall it from #{url}"
41
+ exit
42
+ end
Binary file
@@ -0,0 +1,84 @@
1
+ // A simple module to replace `Backbone.sync` with *localStorage*-based
2
+ // persistence. Models are given GUIDS, and saved into a JSON object. Simple
3
+ // as that.
4
+
5
+ // Generate four random hex digits.
6
+ function S4() {
7
+ return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
8
+ };
9
+
10
+ // Generate a pseudo-GUID by concatenating random hexadecimal.
11
+ function guid() {
12
+ return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
13
+ };
14
+
15
+ // Our Store is represented by a single JS object in *localStorage*. Create it
16
+ // with a meaningful name, like the name you'd give a table.
17
+ var Store = function(name) {
18
+ this.name = name;
19
+ var store = localStorage.getItem(this.name);
20
+ this.data = (store && JSON.parse(store)) || {};
21
+ };
22
+
23
+ _.extend(Store.prototype, {
24
+
25
+ // Save the current state of the **Store** to *localStorage*.
26
+ save: function() {
27
+ localStorage.setItem(this.name, JSON.stringify(this.data));
28
+ },
29
+
30
+ // Add a model, giving it a (hopefully)-unique GUID, if it doesn't already
31
+ // have an id of it's own.
32
+ create: function(model) {
33
+ if (!model.id) model.id = model.attributes.id = guid();
34
+ this.data[model.id] = model;
35
+ this.save();
36
+ return model;
37
+ },
38
+
39
+ // Update a model by replacing its copy in `this.data`.
40
+ update: function(model) {
41
+ this.data[model.id] = model;
42
+ this.save();
43
+ return model;
44
+ },
45
+
46
+ // Retrieve a model from `this.data` by id.
47
+ find: function(model) {
48
+ return this.data[model.id];
49
+ },
50
+
51
+ // Return the array of all models currently in storage.
52
+ findAll: function() {
53
+ return _.values(this.data);
54
+ },
55
+
56
+ // Delete a model from `this.data`, returning it.
57
+ destroy: function(model) {
58
+ delete this.data[model.id];
59
+ this.save();
60
+ return model;
61
+ }
62
+
63
+ });
64
+
65
+ // Override `Backbone.sync` to use delegate to the model or collection's
66
+ // *localStorage* property, which should be an instance of `Store`.
67
+ Backbone.sync = function(method, model, options) {
68
+
69
+ var resp;
70
+ var store = model.localStorage || model.collection.localStorage;
71
+
72
+ switch (method) {
73
+ case "read": resp = model.id ? store.find(model) : store.findAll(); break;
74
+ case "create": resp = store.create(model); break;
75
+ case "update": resp = store.update(model); break;
76
+ case "delete": resp = store.destroy(model); break;
77
+ }
78
+
79
+ if (resp) {
80
+ options.success(resp);
81
+ } else {
82
+ options.error("Record not found");
83
+ }
84
+ };
Binary file
@@ -0,0 +1,87 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+
4
+ <head>
5
+ <title>Backbone Demo: Todos</title>
6
+ <link href="todos.css" media="all" rel="stylesheet" type="text/css"/>
7
+ <script src="../../test/vendor/json2.js"></script>
8
+ <script src="../../test/vendor/jquery-1.5.js"></script>
9
+ <script src="../../test/vendor/underscore-1.1.6.js"></script>
10
+ <script src="../../backbone.js"></script>
11
+ <script src="../backbone-localstorage.js"></script>
12
+ <script src="todos.js"></script>
13
+ </head>
14
+
15
+ <body>
16
+
17
+ <!-- Todo App Interface -->
18
+
19
+ <div id="todoapp">
20
+
21
+ <div class="title">
22
+ <h1>Todos</h1>
23
+ </div>
24
+
25
+ <div class="content">
26
+
27
+ <div id="create-todo">
28
+ <input id="new-todo" placeholder="What needs to be done?" type="text" />
29
+ <span class="ui-tooltip-top" style="display:none;">Press Enter to save this task</span>
30
+ </div>
31
+
32
+ <div id="todos">
33
+ <ul id="todo-list"></ul>
34
+ </div>
35
+
36
+ <div id="todo-stats"></div>
37
+
38
+ </div>
39
+
40
+ </div>
41
+
42
+ <ul id="instructions">
43
+ <li>Double-click to edit a todo.</li>
44
+ <li><a href="../../docs/todos.html">View the annotated source.</a></li>
45
+ </ul>
46
+
47
+ <div id="credits">
48
+ Created by
49
+ <br />
50
+ <a href="http://jgn.me/">J&eacute;r&ocirc;me Gravel-Niquet</a>
51
+ </div>
52
+
53
+ <!-- Templates -->
54
+
55
+ <script type="text/template" id="item-template">
56
+ <div class="todo <%= done ? 'done' : '' %>">
57
+ <div class="display">
58
+ <input class="check" type="checkbox" <%= done ? 'checked="checked"' : '' %> />
59
+ <div class="todo-content"></div>
60
+ <span class="todo-destroy"></span>
61
+ </div>
62
+ <div class="edit">
63
+ <input class="todo-input" type="text" value="" />
64
+ </div>
65
+ </div>
66
+ </script>
67
+
68
+ <script type="text/template" id="stats-template">
69
+ <% if (total) { %>
70
+ <span class="todo-count">
71
+ <span class="number"><%= remaining %></span>
72
+ <span class="word"><%= remaining == 1 ? 'item' : 'items' %></span> left.
73
+ </span>
74
+ <% } %>
75
+ <% if (done) { %>
76
+ <span class="todo-clear">
77
+ <a href="#">
78
+ Clear <span class="number-done"><%= done %></span>
79
+ completed <span class="word-done"><%= done == 1 ? 'item' : 'items' %></span>
80
+ </a>
81
+ </span>
82
+ <% } %>
83
+ </script>
84
+
85
+ </body>
86
+
87
+ </html>
@@ -0,0 +1,311 @@
1
+ html, body, div, span, applet, object, iframe,
2
+ h1, h2, h3, h4, h5, h6, p, blockquote, pre,
3
+ a, abbr, acronym, address, big, cite, code,
4
+ del, dfn, em, font, img, ins, kbd, q, s, samp,
5
+ small, strike, strong, sub, sup, tt, var,
6
+ dl, dt, dd, ol, ul, li,
7
+ fieldset, form, label, legend,
8
+ table, caption, tbody, tfoot, thead, tr, th, td {
9
+ margin: 0;
10
+ padding: 0;
11
+ border: 0;
12
+ outline: 0;
13
+ font-weight: inherit;
14
+ font-style: inherit;
15
+ font-size: 100%;
16
+ font-family: inherit;
17
+ vertical-align: baseline;
18
+ }
19
+ body {
20
+ line-height: 1;
21
+ color: black;
22
+ background: white;
23
+ }
24
+ ol, ul {
25
+ list-style: none;
26
+ }
27
+ a img {
28
+ border: none;
29
+ }
30
+
31
+ html {
32
+ background: #eeeeee;
33
+ }
34
+ body {
35
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
36
+ font-size: 14px;
37
+ line-height: 1.4em;
38
+ background: #eeeeee;
39
+ color: #333333;
40
+ }
41
+
42
+ #todoapp {
43
+ width: 480px;
44
+ margin: 0 auto 40px;
45
+ background: white;
46
+ padding: 20px;
47
+ -moz-box-shadow: rgba(0, 0, 0, 0.2) 0 5px 6px 0;
48
+ -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 5px 6px 0;
49
+ -o-box-shadow: rgba(0, 0, 0, 0.2) 0 5px 6px 0;
50
+ box-shadow: rgba(0, 0, 0, 0.2) 0 5px 6px 0;
51
+ }
52
+ #todoapp h1 {
53
+ font-size: 36px;
54
+ font-weight: bold;
55
+ text-align: center;
56
+ padding: 20px 0 30px 0;
57
+ line-height: 1;
58
+ }
59
+
60
+ #create-todo {
61
+ position: relative;
62
+ }
63
+ #create-todo input {
64
+ width: 466px;
65
+ font-size: 24px;
66
+ font-family: inherit;
67
+ line-height: 1.4em;
68
+ border: 0;
69
+ outline: none;
70
+ padding: 6px;
71
+ border: 1px solid #999999;
72
+ -moz-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
73
+ -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
74
+ -o-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
75
+ box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
76
+ }
77
+ #create-todo input::-webkit-input-placeholder {
78
+ font-style: italic;
79
+ }
80
+ #create-todo span {
81
+ position: absolute;
82
+ z-index: 999;
83
+ width: 170px;
84
+ left: 50%;
85
+ margin-left: -85px;
86
+ }
87
+
88
+ #todo-list {
89
+ margin-top: 10px;
90
+ }
91
+ #todo-list li {
92
+ padding: 12px 20px 11px 0;
93
+ position: relative;
94
+ font-size: 24px;
95
+ line-height: 1.1em;
96
+ border-bottom: 1px solid #cccccc;
97
+ }
98
+ #todo-list li:after {
99
+ content: "\0020";
100
+ display: block;
101
+ height: 0;
102
+ clear: both;
103
+ overflow: hidden;
104
+ visibility: hidden;
105
+ }
106
+ #todo-list li.editing {
107
+ padding: 0;
108
+ border-bottom: 0;
109
+ }
110
+ #todo-list .editing .display,
111
+ #todo-list .edit {
112
+ display: none;
113
+ }
114
+ #todo-list .editing .edit {
115
+ display: block;
116
+ }
117
+ #todo-list .editing input {
118
+ width: 444px;
119
+ font-size: 24px;
120
+ font-family: inherit;
121
+ margin: 0;
122
+ line-height: 1.6em;
123
+ border: 0;
124
+ outline: none;
125
+ padding: 10px 7px 0px 27px;
126
+ border: 1px solid #999999;
127
+ -moz-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
128
+ -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
129
+ -o-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
130
+ box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0 inset;
131
+ }
132
+ #todo-list .check {
133
+ position: relative;
134
+ top: 9px;
135
+ margin: 0 10px 0 7px;
136
+ float: left;
137
+ }
138
+ #todo-list .done .todo-content {
139
+ text-decoration: line-through;
140
+ color: #777777;
141
+ }
142
+ #todo-list .todo-destroy {
143
+ position: absolute;
144
+ right: 5px;
145
+ top: 14px;
146
+ display: none;
147
+ cursor: pointer;
148
+ width: 20px;
149
+ height: 20px;
150
+ background: url(destroy.png) no-repeat 0 0;
151
+ }
152
+ #todo-list li:hover .todo-destroy {
153
+ display: block;
154
+ }
155
+ #todo-list .todo-destroy:hover {
156
+ background-position: 0 -20px;
157
+ }
158
+
159
+ #todo-stats {
160
+ *zoom: 1;
161
+ margin-top: 10px;
162
+ color: #777777;
163
+ }
164
+ #todo-stats:after {
165
+ content: "\0020";
166
+ display: block;
167
+ height: 0;
168
+ clear: both;
169
+ overflow: hidden;
170
+ visibility: hidden;
171
+ }
172
+ #todo-stats .todo-count {
173
+ float: left;
174
+ }
175
+ #todo-stats .todo-count .number {
176
+ font-weight: bold;
177
+ color: #333333;
178
+ }
179
+ #todo-stats .todo-clear {
180
+ float: right;
181
+ }
182
+ #todo-stats .todo-clear a {
183
+ color: #777777;
184
+ font-size: 12px;
185
+ }
186
+ #todo-stats .todo-clear a:visited {
187
+ color: #777777;
188
+ }
189
+ #todo-stats .todo-clear a:hover {
190
+ color: #336699;
191
+ }
192
+
193
+ #instructions {
194
+ width: 520px;
195
+ margin: 10px auto;
196
+ color: #777777;
197
+ text-shadow: rgba(255, 255, 255, 0.8) 0 1px 0;
198
+ text-align: center;
199
+ }
200
+ #instructions a {
201
+ color: #336699;
202
+ }
203
+
204
+ #credits {
205
+ width: 520px;
206
+ margin: 30px auto;
207
+ color: #999;
208
+ text-shadow: rgba(255, 255, 255, 0.8) 0 1px 0;
209
+ text-align: center;
210
+ }
211
+ #credits a {
212
+ color: #888;
213
+ }
214
+
215
+
216
+ /*
217
+ * François 'cahnory' Germain
218
+ */
219
+ .ui-tooltip, .ui-tooltip-top, .ui-tooltip-right, .ui-tooltip-bottom, .ui-tooltip-left {
220
+ color:#ffffff;
221
+ cursor:normal;
222
+ display:-moz-inline-stack;
223
+ display:inline-block;
224
+ font-size:12px;
225
+ font-family:arial;
226
+ padding:.5em 1em;
227
+ position:relative;
228
+ text-align:center;
229
+ text-shadow:0 -1px 1px #111111;
230
+ -webkit-border-top-left-radius:4px ;
231
+ -webkit-border-top-right-radius:4px ;
232
+ -webkit-border-bottom-right-radius:4px ;
233
+ -webkit-border-bottom-left-radius:4px ;
234
+ -khtml-border-top-left-radius:4px ;
235
+ -khtml-border-top-right-radius:4px ;
236
+ -khtml-border-bottom-right-radius:4px ;
237
+ -khtml-border-bottom-left-radius:4px ;
238
+ -moz-border-radius-topleft:4px ;
239
+ -moz-border-radius-topright:4px ;
240
+ -moz-border-radius-bottomright:4px ;
241
+ -moz-border-radius-bottomleft:4px ;
242
+ border-top-left-radius:4px ;
243
+ border-top-right-radius:4px ;
244
+ border-bottom-right-radius:4px ;
245
+ border-bottom-left-radius:4px ;
246
+ -o-box-shadow:0 1px 2px #000000, inset 0 0 0 1px #222222, inset 0 2px #666666, inset 0 -2px 2px #444444;
247
+ -moz-box-shadow:0 1px 2px #000000, inset 0 0 0 1px #222222, inset 0 2px #666666, inset 0 -2px 2px #444444;
248
+ -khtml-box-shadow:0 1px 2px #000000, inset 0 0 0 1px #222222, inset 0 2px #666666, inset 0 -2px 2px #444444;
249
+ -webkit-box-shadow:0 1px 2px #000000, inset 0 0 0 1px #222222, inset 0 2px #666666, inset 0 -2px 2px #444444;
250
+ box-shadow:0 1px 2px #000000, inset 0 0 0 1px #222222, inset 0 2px #666666, inset 0 -2px 2px #444444;
251
+ background-color:#3b3b3b;
252
+ background-image:-moz-linear-gradient(top,#555555,#222222);
253
+ background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#555555),color-stop(1,#222222));
254
+ filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#555555,EndColorStr=#222222);
255
+ -ms-filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#555555,EndColorStr=#222222);
256
+ }
257
+ .ui-tooltip:after, .ui-tooltip-top:after, .ui-tooltip-right:after, .ui-tooltip-bottom:after, .ui-tooltip-left:after {
258
+ content:"\25B8";
259
+ display:block;
260
+ font-size:2em;
261
+ height:0;
262
+ line-height:0;
263
+ position:absolute;
264
+ }
265
+ .ui-tooltip:after, .ui-tooltip-bottom:after {
266
+ color:#2a2a2a;
267
+ bottom:0;
268
+ left:1px;
269
+ text-align:center;
270
+ text-shadow:1px 0 2px #000000;
271
+ -o-transform:rotate(90deg);
272
+ -moz-transform:rotate(90deg);
273
+ -khtml-transform:rotate(90deg);
274
+ -webkit-transform:rotate(90deg);
275
+ width:100%;
276
+ }
277
+ .ui-tooltip-top:after {
278
+ bottom:auto;
279
+ color:#4f4f4f;
280
+ left:-2px;
281
+ top:0;
282
+ text-align:center;
283
+ text-shadow:none;
284
+ -o-transform:rotate(-90deg);
285
+ -moz-transform:rotate(-90deg);
286
+ -khtml-transform:rotate(-90deg);
287
+ -webkit-transform:rotate(-90deg);
288
+ width:100%;
289
+ }
290
+ .ui-tooltip-right:after {
291
+ color:#222222;
292
+ right:-0.375em;
293
+ top:50%;
294
+ margin-top:-.05em;
295
+ text-shadow:0 1px 2px #000000;
296
+ -o-transform:rotate(0);
297
+ -moz-transform:rotate(0);
298
+ -khtml-transform:rotate(0);
299
+ -webkit-transform:rotate(0);
300
+ }
301
+ .ui-tooltip-left:after {
302
+ color:#222222;
303
+ left:-0.375em;
304
+ top:50%;
305
+ margin-top:.1em;
306
+ text-shadow:0 -1px 2px #000000;
307
+ -o-transform:rotate(180deg);
308
+ -moz-transform:rotate(180deg);
309
+ -khtml-transform:rotate(180deg);
310
+ -webkit-transform:rotate(180deg);
311
+ }