from nagare import component, presentation, var

class Table:
    def __init__(self):
        self.items=[]
        for i in range(0,2):
            curItem= Item("Value %d"%i)
            self.items.append(curItem)
    def dropItem(self,item):
        self.items.remove(item)

    def addItem(self,newValue):
        self.items.append(Item(newValue))

class Item:
    def __init__(self,value):
        self.value=value
    def setValue(self,value):
        self.value=value


@presentation.render_for(Table)
def render(self, h, *args):
    new_item = var.Var()  # The new added value

    with h.form:
        with h.table(id="myTable"):
            for curItem in self.items:
                delete = lambda i=curItem: self.dropItem(i)
                delete_js = h.a.action(delete).get('onclick')
                ondelete = "if(confirm('Delete item?')){%s;};return false;" % delete_js
                with h.tr:
                    h << h.td(h.input(type='text', value=curItem.value).action(curItem.setValue))
                    h << h.td(h.a('Delete', style="cursor:pointer;", onclick=ondelete))
            with h.tr:
                    h << h.td(h.input(type='text').action(new_item))  # Register the new value

                    with h.td:
                        # On 'Add', calls `addItem()` with the new value
                        h << h.input(value='Add', type='submit').action(lambda: self.addItem(new_item()))
        h << h.input(type='submit', value='Send')

    return h.root


class App:
    def __init__(self):
        self.table = component.Component(Table())

@presentation.render_for(App)
def render(self, h, *args):
    return self.table.render(h.AsyncRenderer())

app = App

