from riot.virtual_dom import define_tag, mount sig = define_tag( "sig", """ <sig> <filler valign="top"> <pile> <edit caption="What is your name?" class="highlight" id="ask" onchange="{ answer }" /> <div div_char='-' /> <text if="{ name }" class="x">Nice to meet you, </text> <text><span class="highlight">{ name }</span></text> <div /> <button id="exit" label="Exit" onclick="{ exit }" /> </pile> </filler> <script> import urwid def init(self, opts): import urwid self.name = opts['name'] def answer(self, edit, text): self.name = text </script> </sig> """, ) style = """
todo = define_tag( 'todo', '''<todo> <pile> <text>{ title }</text> <checkbox label="{ title }" state="{ done }" onchange="{ check }" each="{ items }"></checkbox> <edit name="input"></edit> <button label="Add #{ next_count() }" onclick="{ add }" /> <button label="Remove done" onclick="{ remove_all_done }" /> <button label="Exit" onclick="{ exit }" /> </pile> <script> def init(self, opts): self.items = opts['items'] self.title = opts['title'] def check(self, e): index = e.target.loopindex item = self.items[index] item['done'] = e.data['state'] def add(self, e): input = self.el("edit[name=input]") text = input.edit_text if not text: return self.items = self.items + [dict(title=text, done=False, hidden=False)] input.edit_text = '' def remove_all_done(self, e): self.items = [item for item in self.items if not item.get('done')] def not_hidden_items(self): return [item for item in self.items if not item.get('hidden')] def count(self): return len(self.items) def next_count(self): return self.count() + 1 def toggle(self, e): e.item['done'] = not e.item.get('done') return True </script> </todo>''')
from riot.tags.tags import parse_tag_from_node from riot.tags.utils import convert_string_to_node from riot.virtual_dom import define_tag, mount question_box = define_tag('question-box', ''' <question-box> <filler keypress="{ keypress }"> <edit caption="Who is your love?\n" /> </filler> <script> def init(self, opts): self.name = opts['name'] self.enable_input = True def keypress(self, size, key): import sys, urwid print >> sys.stderr, size, key if not self.enable_input: return True if key == 'enter': self.enable_input = True self.name = self.ui.body.edit_text self.ui.body = urwid.Text('%s loves you, too. Press q to exit.' % self.name) return True return False </script> </question-box> ''') root = convert_string_to_node('<question-box></question-box>') mount(root, 'question-box', 'question-box', {'name': 'hello world'})
from riot.tags.tags import parse_tag_from_node from riot.tags.utils import convert_string_to_node from riot.virtual_dom import define_tag, mount question_box = define_tag( 'question-box', ''' <question-box> <filler keypress="{ keypress }"> <edit caption="Who is your love?\n" /> </filler> <script> def init(self, opts): self.name = opts['name'] self.enable_input = True def keypress(self, size, key): import sys, urwid print >> sys.stderr, size, key if not self.enable_input: return True if key == 'enter': self.enable_input = True self.name = self.ui.body.edit_text self.ui.body = urwid.Text('%s loves you, too. Press q to exit.' % self.name) return True return False </script> </question-box> ''') root = convert_string_to_node('<question-box></question-box>') mount(root, 'question-box', 'question-box', {'name': 'hello world'})
todo = define_tag('todo', '''<todo> <pile> <text>{ title }</text> <checkbox label="{ title }" state="{ done }" onchange="{ check }" each="{ items }"></checkbox> <edit name="input"></edit> <button label="Add #{ next_count() }" onclick="{ add }" /> <button label="Remove done" onclick="{ remove_all_done }" /> <button label="Exit" onclick="{ exit }" /> </pile> <script> def init(self, opts): self.items = opts['items'] self.title = opts['title'] def check(self, e): index = e.target.loopindex item = self.items[index] item['done'] = e.data['state'] def add(self, e): input = self.el("edit[name=input]") text = input.edit_text if not text: return self.items = self.items + [dict(title=text, done=False, hidden=False)] input.edit_text = '' def remove_all_done(self, e): self.items = [item for item in self.items if not item.get('done')] def not_hidden_items(self): return [item for item in self.items if not item.get('hidden')] def count(self): return len(self.items) def next_count(self): return self.count() + 1 def toggle(self, e): e.item['done'] = not e.item.get('done') return True </script> </todo>''')
from riot.tags.utils import convert_string_to_node from riot.virtual_dom import define_tag, mount sig = define_tag( 'sig', ''' <sig> <filler valign="top"> <pile> <edit caption="What is your name?" class="highlight" id="ask" onchange="{ answer }" /> <div div_char='-' /> <text if="{ name }" class="x">Nice to meet you, </text> <text><span class="highlight">{ name }</span></text> <div /> <button id="exit" label="Exit" onclick="{ exit }" /> </pile> </filler> <script> import urwid def init(self, opts): import urwid self.name = opts['name'] def answer(self, edit, text): self.name = text </script> </sig> ''') style = ''' .highlight {
def test_defind_and_get_tag(): vdom.define_tag('test', '<test></test>') assert vdom.get_tag('test') == { 'name': 'test', 'html': '<test></test>', }
def test_mount(): root = PyQuery('<body><div id="selector"></div></body>') vdom.define_tag('test', '<test><text>_</text></test>') doms = vdom.mount(root, '#selector', 'test') assert doms assert root('#selector').attr.__riot_tag__ == 'test'