Skip to content

Commit b55b1d3

Browse files
committed
Add update
1 parent 82063bb commit b55b1d3

7 files changed

Lines changed: 696 additions & 656 deletions

File tree

demo/hakuintodo/index.jade

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ html
1010
.row
1111
.large-12.columns
1212
h2 Hakuin Todo
13-
p Frontend Python MVC
13+
p Frontend Python MVC Framework
1414
hr
1515
.row
1616
.large-8.columns
@@ -20,11 +20,6 @@ html
2020
.large-2.columns
2121
a#newtask.button.prefix(href="#") Add
2222
#items
23-
footer
24-
a.clear(href="#") Clear completed
25-
.count
26-
span.countVal
27-
| left
2823
.large-4.columns
2924
h4 Other Resources
3025
p Once you've exhausted the fun in this document, you should check out:
@@ -37,6 +32,10 @@ html
3732
a(href='http://foundation.zurb.com/docs') Foundation Documentation
3833
br
3934
| Everything you need to know about using the framework.
35+
li
36+
a(href='http://handlebarsjs.com/') handlebars
37+
br
38+
| ひげ
4039
li
4140
a(href='TodoMVC') TodoMVC
4241
br
@@ -53,6 +52,7 @@ html
5352
script(src='javascripts/handlebars.js')
5453
script(src='javascripts/pythonscript.js')
5554
script(src='javascripts/jquery.py.js')
55+
script(src='javascripts/hakuin.py.js')
5656
script(src='javascripts/app.py.js')
5757
script(src='javascripts/foundation/foundation.js')
5858
// script(src='javascripts/foundation/foundation.joyride.js')

demo/hakuintodo/javascripts/app.py

Lines changed: 6 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -1,114 +1,3 @@
1-
# ============================ #
2-
# Framework #
3-
# ============================ #
4-
5-
6-
class Events():
7-
def __init__(self):
8-
self.events = dict()
9-
10-
def bind(self, event, callback):
11-
var(evs, ev, lst)
12-
evs = list()
13-
evs.js_object = JS('event.split(" ")')
14-
for ev in evs:
15-
lst = self.events.get(ev, list())
16-
lst.append(callback)
17-
self.events.set(ev, lst)
18-
19-
def trigger(self, ev, args):
20-
var(lst, cb, args)
21-
print ev
22-
lst = self.events.get(ev)
23-
if lst:
24-
for cb in lst:
25-
if args:
26-
cb(args)
27-
else:
28-
cb()
29-
30-
e = Events()
31-
_counter = 0
32-
33-
34-
class Model():
35-
def __init__(self):
36-
self.id = "c-" + _counter
37-
_counter = _counter + 1
38-
39-
def to_string(self):
40-
return "<" + self.__class__.__name__ + "(" + self.id + ")>"
41-
42-
def toJSON(self):
43-
pass
44-
45-
def change(self, callback):
46-
if callback:
47-
e.bind("change", callback)
48-
else:
49-
e.trigger("change")
50-
51-
def fetch(self, callback):
52-
if callback:
53-
e.bind("fetch", callback)
54-
else:
55-
e.trigger("fetch")
56-
57-
def destroy(self):
58-
e.trigger("destroy", self)
59-
60-
61-
class Collection():
62-
def __init__(self):
63-
self.ids = dict()
64-
self.models = list()
65-
e.bind("destroy", self.remove_one)
66-
67-
def add_one(self, model):
68-
self.ids.set(model.id, model)
69-
self.models.append(model)
70-
e.trigger("add", model)
71-
72-
def add(self, models):
73-
self.add_one(models)
74-
75-
def remove(self, models):
76-
self.remove_one(models)
77-
78-
def remove_one(self, model):
79-
if model.__class__.__name__ == 'list':
80-
model = model.pop()
81-
new_ids = dict()
82-
new_models = list()
83-
ks = self.ids.keys()
84-
for k in ks:
85-
if k != model.id:
86-
m = self.ids.get(k)
87-
new_ids.set(k, m)
88-
self.ids = new_ids
89-
90-
for m in self.models:
91-
if m.id != model.id:
92-
new_models.append(m)
93-
self.models = new_models
94-
e.trigger("remove", model)
95-
96-
97-
class Controller():
98-
def __init__(self, tag, el):
99-
if el == None:
100-
el = '<div></div>'
101-
self.el = J(el)
102-
103-
def release(self):
104-
j = self.el.j
105-
JS('j.remove()')
106-
107-
108-
# ============================ #
109-
# Application #
110-
# ============================ #
111-
1121
class TaskModel(Model):
1132
def __init__(self, name):
1143
Model.__init__(self)
@@ -121,13 +10,13 @@ def __init__(self, model):
12110
Controller.__init__(self, "div", None)
12211
self.model = model
12312
self.el.addClass("item")
124-
#self.el.bind("click", false, self.say)
12513
self.el.delegate(".view", "dblclick", self.edit)
12614
self.el.delegate(".close", "click", self.close)
12715
self.el.delegate(".destroy", "click", self.remove)
12816

12917
def html(self):
130-
source = "<div class='view'>{{name}}<a href='#' class='button destroy taskbutton'>x</a></div>" + "<div class='row collapse edit'><div class='large-10 columns'><input type='text' value={{name}}></div>" + "<div class='large-2 columns'><a class='button prefix close'>ok</a></div></div>"
18+
source = "<div class='row collapse view'><div class='large-10 columns'><input type='checkbox'>{{name}}<a href='#' class='destroy'></a></div></div>" + "<div class='row collapse edit'><div class='large-10 columns'><input type='text' value={{name}}></div>"\
19+
+ "<div class='large-2 columns'><a class='button prefix close'>ok</a></div></div>"
13120
template = JS("Handlebars.compile(source)")
13221
name = self.model.name
13322
data = JS("template({name:name})")
@@ -139,7 +28,9 @@ def edit(self):
13928

14029
def close(self):
14130
self.el.removeClass("editing")
142-
print "remove editing"
31+
j = self.el.find("input[type=text]").j
32+
name = JS("j.val()")
33+
self.model.updateAttribute("name", name)
14334

14435
def remove(self):
14536
print "clicked: " + self.model.to_string()
@@ -165,6 +56,7 @@ def __init__(self, el, collection):
16556
button = J("#newtask")
16657
button.bind("click", false, self.create)
16758
e.bind("add", self.render)
59+
e.bind("update", self.render)
16860

16961
def create(self):
17062
j = J("#taskinput").j

0 commit comments

Comments
 (0)