from nagare import component, presentation

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):
        if len(newValue)!=0:
            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):
    
    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(self.addItem))
                    
                    add_js="document.getElementById('myTable').insertAdjacentHTML('beforeend','<tr><td><input></input></td><td></td></tr>')"
                    h << h.td(h.input(value='Add', type="button", onclick=add_js))
        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