示例#1
0
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 = """
示例#2
0
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>''')
示例#3
0
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'})
示例#4
0
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'})
示例#5
0
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>''')
示例#6
0
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 {
示例#7
0
def test_defind_and_get_tag():
    vdom.define_tag('test', '<test></test>')
    assert vdom.get_tag('test') == {
        'name': 'test',
        'html': '<test></test>',
    }
示例#8
0
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'