class CheckBoxDemo(SimplePanel): def __init__(self): SimplePanel.__init__(self) self.box = CheckBox("Print Results?") self.box.addClickListener(getattr(self, "onClick")) self.add(self.box) def onClick(self, sender=None): Window.alert("checkbox status: " + str(self.box.isChecked()))
class FileUploadPanel(SimplePanel): def __init__(self): SimplePanel.__init__(self) self.form = FormPanel() self.form.setEncoding(FormPanel.ENCODING_MULTIPART) self.form.setMethod(FormPanel.METHOD_POST) self.url = "http://localhost/pyjamas_upload_demo" self.form.setAction(self.url) self.form.setTarget("results") vPanel = VerticalPanel() hPanel = HorizontalPanel() hPanel.setSpacing(5) hPanel.add(Label("Upload file:")) self.field = FileUpload() self.field.setName("file") hPanel.add(self.field) hPanel.add(Button("Submit", getattr(self, "onBtnClick"))) vPanel.add(hPanel) self.simple = CheckBox("Simple mode? ") #self.simple.setChecked(True) vPanel.add(self.simple) self.progress = Label('0%') results = NamedFrame("results") vPanel.add(results) vPanel.add(self.progress) self.form.add(vPanel) self.add(self.form) def onBtnClick(self, event): self.progress.setText('0%') if self.simple.isChecked(): self.form.submit() else: if AsyncUpload.is_old_browser(): Window.alert("Hmmm, your browser doesn't support this.") else: el = self.field.getElement() files = getattr(el, 'files') #TODO implement loop for multiple file uploads file = JS("@{{files}}[0]") #otherwise pyjs thinks it's a string? AsyncUpload.asyncUpload(self.url, file, self) def onload(self, status): self.progress.setText('100%') def onerror(self, status): Window.alert("oh noes we got an " + str(status)) def onprogress(self, loaded, total): if self.progress.getText() == '100%': return progress = (loaded / total) p = int(progress * 100) self.progress.setText(str(p) + '%')
class FileUploadPanel(SimplePanel): def __init__(self): SimplePanel.__init__(self) self.form = FormPanel() self.form.setEncoding(FormPanel.ENCODING_MULTIPART) self.form.setMethod(FormPanel.METHOD_POST) self.url = "http://localhost/pyjamas_upload_demo" self.form.setAction(self.url) self.form.setTarget("results") vPanel = VerticalPanel() hPanel = HorizontalPanel() hPanel.setSpacing(5) hPanel.add(Label("Upload file:")) self.field = FileUpload() self.field.setName("file") hPanel.add(self.field) hPanel.add(Button("Submit", getattr(self, "onBtnClick"))) vPanel.add(hPanel) self.simple = CheckBox("Simple mode? ") #self.simple.setChecked(True) vPanel.add(self.simple) self.progress = Label('0%') results = NamedFrame("results") vPanel.add(results) vPanel.add(self.progress) self.form.add(vPanel) self.add(self.form) def onBtnClick(self, event): self.progress.setText('0%') if self.simple.isChecked(): self.form.submit() else: if AsyncUpload.is_old_browser(): Window.alert("Hmmm, your browser doesn't support this.") else: el = self.field.getElement() files = getattr(el, 'files') #TODO implement loop for multiple file uploads file = JS( "@{{files}}[0]") #otherwise pyjs thinks it's a string? AsyncUpload.asyncUpload(self.url, file, self) def onload(self, status): self.progress.setText('100%') def onerror(self, status): Window.alert("oh noes we got an " + str(status)) def onprogress(self, loaded, total): if self.progress.getText() == '100%': return progress = (loaded / total) p = int(progress * 100) self.progress.setText(str(p) + '%')
class UserTab(EntityTab): def __init__(self,app, uid): global gw EntityTab.__init__(self, app) self.table = FlexTable() self.uid = uid self.load() def load(self): global gw if self.uid == -1: self.setup(None) else: gw.getUserDetails(self.app.cookie, self.uid, self) def setup(self, x): edit = self.uid == self.app.uid or self.app.admin if not x: x = {'id': -1, 'handle': '', 'name': '' , 'admin': '', 'email': ''} self.uid = x['id'] self.name = TextBox() self.name.setText(x['name']) self.email = TextBox() self.email.setText(x['email']) self.password = PasswordTextBox() self.passwordRepeat = PasswordTextBox() self.handle = TextBox() self.admin = CheckBox() self.admin.setChecked( x['admin'] ) self.admin.setEnabled( self.app.admin ) self.table.setText(0,0, "ID"); self.table.setText(0,1, x['id']) self.table.setText(1,0, "Handle") if x['id'] == -1: self.table.setWidget(1,1, self.handle) else: self.table.setText(1,1, x['handle']) self.table.setText(2,0, "Name"); if edit: self.table.setWidget(2,1, self.name) else: self.table.setText(2,1, x['name']) self.table.setText(3,0, "Email") if edit: self.table.setWidget(3,1, self.email) else: self.table.setText(3,1, x['email']) self.table.setText(4,0, "Admin"); self.table.setWidget(4,1, self.admin) if edit: self.table.setText(5,0, "Password"); self.table.setWidget(5,1, self.password) self.table.setText(6,0, "Password Repeat"); self.table.setWidget(6,1, self.passwordRepeat) self.saveBtn = Button("Save",self.save) self.table.setWidget(7,1, self.saveBtn) if self.app.admin: self.table.setWidget(8,1, Button("Remove", self.delete)) if self.uid == -1: self.add('New user') else: self.add(x['handle']) def onUpdate(self, response, request_info): self.uid = response self.load() self.app.usersTab.reload() def save(self, _): global gw pwd="" if self.password.getText() != "" or self.passwordRepeat.getText() != "": if self.password.getText() != self.passwordRepeat.getText(): Window.alert("Passwords differ"); return pwd = pwhash(self.password.getText()) gw.updateUser(self.app.cookie, self.uid, self.handle.getText(), self.name.getText(), pwd, self.admin.isChecked(), self.email.getText(), RPCCall(self.onUpdate)) def onDelete(self, response, request_info): self.app.usersTab.reload() self.remove() def delete(self,_): global gw gw.deleteUser(self.app.cookie, self.uid, RPCCall(self.onDelete) ) def onRemoteResponse(self, response, request_info): self.setup(response)