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.
- data/CHANGELOG.md +11 -0
- data/TODO.md +4 -10
- data/backbone/LICENSE +22 -0
- data/backbone/README +25 -0
- data/backbone/Rakefile +42 -0
- data/backbone/backbone-0.5.1.bpkg +0 -0
- data/backbone/examples/backbone-localstorage.js +84 -0
- data/backbone/examples/todos/destroy.png +0 -0
- data/backbone/examples/todos/index.html +87 -0
- data/backbone/examples/todos/todos.css +311 -0
- data/backbone/examples/todos/todos.js +258 -0
- data/backbone/index.html +2606 -0
- data/backbone/index.js +1 -0
- data/backbone/lib/backbone.js +1149 -0
- data/backbone/lib/index.js +1 -0
- data/backbone/package.json +14 -0
- data/backbone/test/collection.js +345 -0
- data/backbone/test/events.js +70 -0
- data/backbone/test/model.coffee +43 -0
- data/backbone/test/model.js +424 -0
- data/backbone/test/noconflict.js +12 -0
- data/backbone/test/router.js +116 -0
- data/backbone/test/speed.js +45 -0
- data/backbone/test/sync.js +133 -0
- data/backbone/test/test-zepto.html +30 -0
- data/backbone/test/test.html +31 -0
- data/backbone/test/vendor/jquery-1.5.js +8176 -0
- data/backbone/test/vendor/jslitmus.js +649 -0
- data/backbone/test/vendor/json2.js +481 -0
- data/backbone/test/vendor/qunit.css +196 -0
- data/backbone/test/vendor/qunit.js +1364 -0
- data/backbone/test/vendor/underscore-1.1.6.js +807 -0
- data/backbone/test/vendor/zepto-0.6.js +692 -0
- data/backbone/test/view.js +137 -0
- data/lib/bpm/cli/base.rb +22 -7
- data/lib/bpm/package.rb +17 -5
- data/lib/bpm/project.rb +49 -32
- data/lib/bpm/version.rb +1 -1
- data/spec/cli/add_spec.rb +22 -4
- data/spec/cli/fetch_spec.rb +0 -1
- data/spec/cli/init_spec.rb +25 -10
- data/spec/cli/list_spec.rb +103 -62
- data/spec/cli/pack_spec.rb +36 -4
- data/spec/fixtures/packages/backbone/LICENSE +22 -0
- data/spec/fixtures/packages/backbone/README +25 -0
- data/spec/fixtures/packages/backbone/Rakefile +42 -0
- data/spec/fixtures/packages/backbone/examples/backbone-localstorage.js +84 -0
- data/spec/fixtures/packages/backbone/examples/todos/destroy.png +0 -0
- data/spec/fixtures/packages/backbone/examples/todos/index.html +87 -0
- data/spec/fixtures/packages/backbone/examples/todos/todos.css +311 -0
- data/spec/fixtures/packages/backbone/examples/todos/todos.js +258 -0
- data/spec/fixtures/packages/backbone/index.html +2606 -0
- data/spec/fixtures/packages/backbone/lib/backbone.js +1149 -0
- data/spec/fixtures/packages/backbone/lib/index.js +1 -0
- data/spec/fixtures/packages/backbone/package.json +14 -0
- data/spec/fixtures/packages/backbone/test/collection.js +345 -0
- data/spec/fixtures/packages/backbone/test/events.js +70 -0
- data/spec/fixtures/packages/backbone/test/model.coffee +43 -0
- data/spec/fixtures/packages/backbone/test/model.js +424 -0
- data/spec/fixtures/packages/backbone/test/noconflict.js +12 -0
- data/spec/fixtures/packages/backbone/test/router.js +116 -0
- data/spec/fixtures/packages/backbone/test/speed.js +45 -0
- data/spec/fixtures/packages/backbone/test/sync.js +133 -0
- data/spec/fixtures/packages/backbone/test/test-zepto.html +30 -0
- data/spec/fixtures/packages/backbone/test/test.html +31 -0
- data/spec/fixtures/packages/backbone/test/vendor/jquery-1.5.js +8176 -0
- data/spec/fixtures/packages/backbone/test/vendor/jslitmus.js +649 -0
- data/spec/fixtures/packages/backbone/test/vendor/json2.js +481 -0
- data/spec/fixtures/packages/backbone/test/vendor/qunit.css +196 -0
- data/spec/fixtures/packages/backbone/test/vendor/qunit.js +1364 -0
- data/spec/fixtures/packages/backbone/test/vendor/underscore-1.1.6.js +807 -0
- data/spec/fixtures/packages/backbone/test/vendor/zepto-0.6.js +692 -0
- data/spec/fixtures/packages/backbone/test/view.js +137 -0
- data/spec/fixtures/projects/init_app/assets/bpm_libs.js +1 -1
- data/spec/fixtures/projects/init_app/assets/bpm_styles.css +1 -1
- data/spec/fixtures/projects/init_app/new_project.json +1 -10
- data/spec/pipeline_spec.rb +5 -5
- data/spec/plugins/minifier_spec.rb +1 -1
- data/spec/plugins/transport_spec.rb +1 -1
- metadata +116 -28
- data/spec/fixtures/projects/init_app/assets/new_project/bpm_libs.js +0 -6
- 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
|
-
*
|
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
|
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érô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
|
+
}
|