From 215bc6eef1d6afc14de35daf8bd1191ea5414afc Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 8 Jun 2011 17:11:06 +0200 Subject: [PATCH] split sonia.user.js into smaller pieces --- scm-webapp/src/main/webapp/index.html | 9 +- .../main/webapp/resources/js/sonia.user.js | 449 ------------------ .../resources/js/user/sonia.user.formpanel.js | 178 +++++++ .../resources/js/user/sonia.user.grid.js | 131 +++++ .../webapp/resources/js/user/sonia.user.js | 67 +++ .../resources/js/user/sonia.user.panel.js | 164 +++++++ 6 files changed, 547 insertions(+), 451 deletions(-) delete mode 100644 scm-webapp/src/main/webapp/resources/js/sonia.user.js create mode 100644 scm-webapp/src/main/webapp/resources/js/user/sonia.user.formpanel.js create mode 100644 scm-webapp/src/main/webapp/resources/js/user/sonia.user.grid.js create mode 100644 scm-webapp/src/main/webapp/resources/js/user/sonia.user.js create mode 100644 scm-webapp/src/main/webapp/resources/js/user/sonia.user.panel.js diff --git a/scm-webapp/src/main/webapp/index.html b/scm-webapp/src/main/webapp/index.html index 1129bace00..cacffbd1b3 100644 --- a/scm-webapp/src/main/webapp/index.html +++ b/scm-webapp/src/main/webapp/index.html @@ -83,9 +83,14 @@ - - + + + + + + + diff --git a/scm-webapp/src/main/webapp/resources/js/sonia.user.js b/scm-webapp/src/main/webapp/resources/js/sonia.user.js deleted file mode 100644 index cbbf1fe530..0000000000 --- a/scm-webapp/src/main/webapp/resources/js/sonia.user.js +++ /dev/null @@ -1,449 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - -// register namespace -Ext.ns('Sonia.user'); - - -// functions - -Sonia.user.setEditPanel = function(panel){ - var editPanel = Ext.getCmp('userEditPanel'); - editPanel.removeAll(); - editPanel.add(panel); - editPanel.doLayout(); -} - -/** - * Panels - */ -Sonia.user.DefaultPanel = { - region: 'south', - title: 'User Form', - padding: 5, - xtype: 'panel', - html: 'Add or select an User' -}; - -// UserGrid -Sonia.user.Grid = Ext.extend(Sonia.rest.Grid, { - - titleText: 'User Form', - colNameText: 'Name', - colDisplayNameText: 'Display Name', - colMailText: 'Mail', - colAdminText: 'Admin', - colCreationDateText: 'Creation Date', - colLastModifiedText: 'Last modified', - colTypeText: 'Type', - - initComponent: function(){ - - var userStore = new Sonia.rest.JsonStore({ - proxy: new Ext.data.HttpProxy({ - url: restUrl + 'users.json', - disableCaching: false - }), - fields: [ 'name', 'displayName', 'mail', 'admin', 'creationDate', 'lastModified', 'type'], - sortInfo: { - field: 'name' - } - }); - - var userColModel = new Ext.grid.ColumnModel({ - defaults: { - sortable: true, - scope: this, - width: 125 - }, - columns: [ - {id: 'name', header: this.colNameText, dataIndex: 'name'}, - {id: 'displayName', header: this.colDisplayNameText, dataIndex: 'displayName', width: 250}, - {id: 'mail', header: this.colMailText, dataIndex: 'mail', renderer: this.renderMailto, width: 200}, - {id: 'admin', header: this.colAdminText, dataIndex: 'admin', renderer: this.renderCheckbox, width: 50}, - {id: 'creationDate', header: this.colCreationDateText, dataIndex: 'creationDate', renderer: Ext.util.Format.formatTimestamp}, - {id: 'lastModified', header: this.colLastModifiedText, dataIndex: 'lastModified', renderer: Ext.util.Format.formatTimestamp}, - {id: 'type', header: this.colTypeText, dataIndex: 'type', width: 80} - ] - }); - - var config = { - store: userStore, - colModel: userColModel, - listeners: { - fallBelowMinHeight: { - fn: this.onFallBelowMinHeight, - scope: this - } - } - }; - - Ext.apply(this, Ext.apply(this.initialConfig, config)); - Sonia.user.Grid.superclass.initComponent.apply(this, arguments); - }, - - onFallBelowMinHeight: function(height, minHeight){ - var p = Ext.getCmp('userEditPanel'); - this.setHeight(minHeight); - var epHeight = p.getHeight(); - p.setHeight(epHeight - (minHeight - height)); - // rerender - this.doLayout(); - p.doLayout(); - this.ownerCt.doLayout(); - }, - - selectItem: function(item){ - if ( debug ){ - console.debug( item.name + ' selected' ); - } - var panel = new Sonia.user.FormPanel({ - item: item, - region: 'south', - title: this.titleText, - padding: 5, - onUpdate: { - fn: this.reload, - scope: this - }, - onCreate: { - fn: this.reload, - scope: this - } - }); - if ( item.type == 'xml' ){ - panel.getForm().setValues([ - {id: 'password', value: dummyPassword}, - {id: 'password-confirm', value: dummyPassword} - ]); - } - Sonia.user.setEditPanel(panel); - } - -}); - -// register xtype -Ext.reg('userGrid', Sonia.user.Grid); - -// passord validator -Ext.apply(Ext.form.VTypes, { - password: function(val, field) { - if (field.initialPassField) { - var pwd = Ext.getCmp(field.initialPassField); - return (val == pwd.getValue()); - } - return true; - }, - passwordText: 'The passwords entered do not match!' -}); - - -// UserFormPanel -Sonia.user.FormPanel = Ext.extend(Sonia.rest.FormPanel,{ - - nameText: 'Name', - displayNameText: 'Display name', - mailText: 'Mail', - passwordText: 'Password', - adminText: 'Administrator', - errorTitleText: 'Error', - updateErrorMsgText: 'User update failed', - createErrorMsgText: 'User creation failed', - passwordMinLengthText: 'Password must be at least 6 characters long', - - // help - usernameHelpText: 'Unique name of the user.', - displayNameHelpText: 'Display name of the user.', - mailHelpText: 'Email address of the user.', - passwordHelpText: 'Plain text password of the user.', - passwordConfirmHelpText: 'Repeat the password for validation.', - adminHelpText: 'An administrator is able to create, modify and delete repositories, groups and users.', - - initComponent: function(){ - - var items = [{ - fieldLabel: this.nameText, - name: 'name', - allowBlank: false, - readOnly: this.item != null, - helpText: this.usernameHelpText - },{ - fieldLabel: this.displayNameText, - name: 'displayName', - allowBlank: false, - helpText: this.displayNameHelpText - },{ - fieldLabel: this.mailText, - name: 'mail', - allowBlank: true, - vtype: 'email', - helpText: this.mailHelpText - }]; - - if ( this.item == null || this.item.type == 'xml' ){ - items.push({ - fieldLabel: this.passwordText, - id: 'pwd', - name: 'password', - inputType: 'password', - minLength: 6, - maxLength: 32, - minLengthText: this.passwordMinLengthText, - helpText: this.passwordHelpText - },{ - name: 'password-confirm', - inputType: 'password', - minLength: 6, - maxLength: 32, - minLengthText: this.passwordMinLengthText, - vtype: 'password', - initialPassField: 'pwd', - helpText: this.passwordConfirmHelpText - }); - } - - items.push({ - fieldLabel: this.adminText, - name: 'admin', - xtype: 'checkbox', - helpText: this.adminHelpText - }); - - Ext.apply(this, Ext.apply(this.initialConfig, {items: items})); - Sonia.user.FormPanel.superclass.initComponent.apply(this, arguments); - }, - - fixRequest: function(user){ - delete user['password-confirm']; - }, - - update: function(item){ - - item = Ext.apply( this.item, item ); - if ( debug ){ - console.debug( 'update user: ' + item.name ); - } - this.fixRequest(item); - var url = restUrl + 'users/' + item.name + '.json'; - Ext.Ajax.request({ - url: url, - jsonData: item, - method: 'PUT', - scope: this, - success: function(){ - if ( debug ){ - console.debug('update success'); - } - this.execCallback(this.onUpdate, item); - }, - failure: function(result){ - main.handleFailure( - result.status, - this.errorTitleText, - this.updateErrorMsgText - ); - } - }); - - }, - - create: function(user){ - if ( debug ){ - console.debug( 'create user: ' + user.name ); - } - this.fixRequest(user); - // set user type - user.type = 'xml'; - var url = restUrl + 'users.json'; - Ext.Ajax.request({ - url: url, - jsonData: user, - method: 'POST', - scope: this, - success: function(){ - if ( debug ){ - console.debug('create success'); - } - this.getForm().reset(); - this.execCallback(this.onCreate, user); - }, - failure: function(result){ - main.handleFailure( - result.status, - this.errorTitleText, - this.createErrorMsgText - ); - } - }); - }, - - cancel: function(){ - Sonia.user.setEditPanel( Sonia.user.DefaultPanel ); - } - -}); - -// register xtype -Ext.reg('userForm', Sonia.user.FormPanel); - -// UserPanel -Sonia.user.Panel = Ext.extend(Ext.Panel, { - - addText: 'Add', - removeText: 'Remove', - reloadText: 'Reload', - titleText: 'User Form', - emptyText: 'Add or select an User', - removeTitleText: 'Remove User', - removeMsgText: 'Remove User "{0}"?', - errorTitleText: 'Error', - errorMsgText: 'User deletion failed', - - initComponent: function(){ - - var config = { - layout: 'border', - hideMode: 'offsets', - bodyCssClass: 'x-panel-mc', - enableTabScroll: true, - region:'center', - autoScroll: true, - tbar: [ - {xtype: 'tbbutton', text: this.addText, scope: this, handler: this.showAddPanel}, - {xtype: 'tbbutton', text: this.removeText, scope: this, handler: this.removeUser}, - '-', - {xtype: 'tbbutton', text: this.reloadText, scope: this, handler: this.reload} - ], - items: [{ - id: 'userGrid', - xtype: 'userGrid', - region: 'center' - },{ - id: 'userEditPanel', - layout: 'fit', - items: [{ - region: 'south', - title: 'User Form', - xtype: 'panel', - padding: 5, - html: this.emptyText - }], - height: 250, - split: true, - border: false, - region: 'south' - }] - }; - - Ext.apply(this, Ext.apply(this.initialConfig, config)); - Sonia.user.Panel.superclass.initComponent.apply(this, arguments); - }, - - showAddPanel: function(){ - var editPanel = Ext.getCmp('userEditPanel'); - editPanel.removeAll(); - var panel = new Sonia.user.FormPanel({ - region: 'south', - title: this.titleText, - padding: 5, - onUpdate: { - fn: this.reload, - scope: this - }, - onCreate: { - fn: this.reload, - scope: this - } - }); - editPanel.add(panel); - editPanel.doLayout(); - }, - - resetPanel: function(){ - Sonia.user.setEditPanel( Sonia.user.DefaultPanel ); - }, - - removeUser: function(){ - - var grid = Ext.getCmp('userGrid'); - var selected = grid.getSelectionModel().getSelected(); - if ( selected ){ - var item = selected.data; - var url = restUrl + 'users/' + item.name + '.json'; - - Ext.MessageBox.show({ - title: this.removeTitleText, - msg: String.format(this.removeMsgText, item.name), - buttons: Ext.MessageBox.OKCANCEL, - icon: Ext.MessageBox.QUESTION, - fn: function(result){ - if ( result == 'ok' ){ - - if ( debug ){ - console.debug( 'remove user ' + item.name ); - } - - Ext.Ajax.request({ - url: url, - method: 'DELETE', - scope: this, - success: function(){ - this.reload(); - this.resetPanel(); - }, - failure: function(result){ - main.handleFailure( - result.status, - this.errorTitleText, - this.errorMsgText - ); - } - }); - } - - }, - scope: this - }); - - } else if ( debug ){ - console.debug( 'no user selected' ); - } - - }, - - reload: function(){ - Ext.getCmp('userGrid').reload(); - } - -}); - -// register xtype -Ext.reg('userPanel', Sonia.user.Panel); diff --git a/scm-webapp/src/main/webapp/resources/js/user/sonia.user.formpanel.js b/scm-webapp/src/main/webapp/resources/js/user/sonia.user.formpanel.js new file mode 100644 index 0000000000..d41c8e7853 --- /dev/null +++ b/scm-webapp/src/main/webapp/resources/js/user/sonia.user.formpanel.js @@ -0,0 +1,178 @@ +/* * + * Copyright (c) 2010, Sebastian Sdorra + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of SCM-Manager; nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + +Sonia.user.FormPanel = Ext.extend(Sonia.rest.FormPanel,{ + + nameText: 'Name', + displayNameText: 'Display name', + mailText: 'Mail', + passwordText: 'Password', + adminText: 'Administrator', + errorTitleText: 'Error', + updateErrorMsgText: 'User update failed', + createErrorMsgText: 'User creation failed', + passwordMinLengthText: 'Password must be at least 6 characters long', + + // help + usernameHelpText: 'Unique name of the user.', + displayNameHelpText: 'Display name of the user.', + mailHelpText: 'Email address of the user.', + passwordHelpText: 'Plain text password of the user.', + passwordConfirmHelpText: 'Repeat the password for validation.', + adminHelpText: 'An administrator is able to create, modify and delete repositories, groups and users.', + + initComponent: function(){ + + var items = [{ + fieldLabel: this.nameText, + name: 'name', + allowBlank: false, + readOnly: this.item != null, + helpText: this.usernameHelpText + },{ + fieldLabel: this.displayNameText, + name: 'displayName', + allowBlank: false, + helpText: this.displayNameHelpText + },{ + fieldLabel: this.mailText, + name: 'mail', + allowBlank: true, + vtype: 'email', + helpText: this.mailHelpText + }]; + + if ( this.item == null || this.item.type == 'xml' ){ + items.push({ + fieldLabel: this.passwordText, + id: 'pwd', + name: 'password', + inputType: 'password', + minLength: 6, + maxLength: 32, + minLengthText: this.passwordMinLengthText, + helpText: this.passwordHelpText + },{ + name: 'password-confirm', + inputType: 'password', + minLength: 6, + maxLength: 32, + minLengthText: this.passwordMinLengthText, + vtype: 'password', + initialPassField: 'pwd', + helpText: this.passwordConfirmHelpText + }); + } + + items.push({ + fieldLabel: this.adminText, + name: 'admin', + xtype: 'checkbox', + helpText: this.adminHelpText + }); + + Ext.apply(this, Ext.apply(this.initialConfig, {items: items})); + Sonia.user.FormPanel.superclass.initComponent.apply(this, arguments); + }, + + fixRequest: function(user){ + delete user['password-confirm']; + }, + + update: function(item){ + + item = Ext.apply( this.item, item ); + if ( debug ){ + console.debug( 'update user: ' + item.name ); + } + this.fixRequest(item); + var url = restUrl + 'users/' + item.name + '.json'; + Ext.Ajax.request({ + url: url, + jsonData: item, + method: 'PUT', + scope: this, + success: function(){ + if ( debug ){ + console.debug('update success'); + } + this.execCallback(this.onUpdate, item); + }, + failure: function(result){ + main.handleFailure( + result.status, + this.errorTitleText, + this.updateErrorMsgText + ); + } + }); + + }, + + create: function(user){ + if ( debug ){ + console.debug( 'create user: ' + user.name ); + } + this.fixRequest(user); + // set user type + user.type = 'xml'; + var url = restUrl + 'users.json'; + Ext.Ajax.request({ + url: url, + jsonData: user, + method: 'POST', + scope: this, + success: function(){ + if ( debug ){ + console.debug('create success'); + } + this.getForm().reset(); + this.execCallback(this.onCreate, user); + }, + failure: function(result){ + main.handleFailure( + result.status, + this.errorTitleText, + this.createErrorMsgText + ); + } + }); + }, + + cancel: function(){ + Sonia.user.setEditPanel( Sonia.user.DefaultPanel ); + } + +}); + +// register xtype +Ext.reg('userForm', Sonia.user.FormPanel); diff --git a/scm-webapp/src/main/webapp/resources/js/user/sonia.user.grid.js b/scm-webapp/src/main/webapp/resources/js/user/sonia.user.grid.js new file mode 100644 index 0000000000..536214eb0f --- /dev/null +++ b/scm-webapp/src/main/webapp/resources/js/user/sonia.user.grid.js @@ -0,0 +1,131 @@ +/* * + * Copyright (c) 2010, Sebastian Sdorra + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of SCM-Manager; nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +Sonia.user.Grid = Ext.extend(Sonia.rest.Grid, { + + titleText: 'User Form', + colNameText: 'Name', + colDisplayNameText: 'Display Name', + colMailText: 'Mail', + colAdminText: 'Admin', + colCreationDateText: 'Creation Date', + colLastModifiedText: 'Last modified', + colTypeText: 'Type', + + initComponent: function(){ + + var userStore = new Sonia.rest.JsonStore({ + proxy: new Ext.data.HttpProxy({ + url: restUrl + 'users.json', + disableCaching: false + }), + fields: [ 'name', 'displayName', 'mail', 'admin', 'creationDate', 'lastModified', 'type'], + sortInfo: { + field: 'name' + } + }); + + var userColModel = new Ext.grid.ColumnModel({ + defaults: { + sortable: true, + scope: this, + width: 125 + }, + columns: [ + {id: 'name', header: this.colNameText, dataIndex: 'name'}, + {id: 'displayName', header: this.colDisplayNameText, dataIndex: 'displayName', width: 250}, + {id: 'mail', header: this.colMailText, dataIndex: 'mail', renderer: this.renderMailto, width: 200}, + {id: 'admin', header: this.colAdminText, dataIndex: 'admin', renderer: this.renderCheckbox, width: 50}, + {id: 'creationDate', header: this.colCreationDateText, dataIndex: 'creationDate', renderer: Ext.util.Format.formatTimestamp}, + {id: 'lastModified', header: this.colLastModifiedText, dataIndex: 'lastModified', renderer: Ext.util.Format.formatTimestamp}, + {id: 'type', header: this.colTypeText, dataIndex: 'type', width: 80} + ] + }); + + var config = { + store: userStore, + colModel: userColModel, + listeners: { + fallBelowMinHeight: { + fn: this.onFallBelowMinHeight, + scope: this + } + } + }; + + Ext.apply(this, Ext.apply(this.initialConfig, config)); + Sonia.user.Grid.superclass.initComponent.apply(this, arguments); + }, + + onFallBelowMinHeight: function(height, minHeight){ + var p = Ext.getCmp('userEditPanel'); + this.setHeight(minHeight); + var epHeight = p.getHeight(); + p.setHeight(epHeight - (minHeight - height)); + // rerender + this.doLayout(); + p.doLayout(); + this.ownerCt.doLayout(); + }, + + selectItem: function(item){ + if ( debug ){ + console.debug( item.name + ' selected' ); + } + var panel = new Sonia.user.FormPanel({ + item: item, + region: 'south', + title: this.titleText, + padding: 5, + onUpdate: { + fn: this.reload, + scope: this + }, + onCreate: { + fn: this.reload, + scope: this + } + }); + if ( item.type == 'xml' ){ + panel.getForm().setValues([ + {id: 'password', value: dummyPassword}, + {id: 'password-confirm', value: dummyPassword} + ]); + } + Sonia.user.setEditPanel(panel); + } + +}); + +// register xtype +Ext.reg('userGrid', Sonia.user.Grid); diff --git a/scm-webapp/src/main/webapp/resources/js/user/sonia.user.js b/scm-webapp/src/main/webapp/resources/js/user/sonia.user.js new file mode 100644 index 0000000000..95ab1575f9 --- /dev/null +++ b/scm-webapp/src/main/webapp/resources/js/user/sonia.user.js @@ -0,0 +1,67 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of SCM-Manager; nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + +// register namespace +Ext.ns('Sonia.user'); + + +// functions + +Sonia.user.setEditPanel = function(panel){ + var editPanel = Ext.getCmp('userEditPanel'); + editPanel.removeAll(); + editPanel.add(panel); + editPanel.doLayout(); +} + +/** + * Panels + */ +Sonia.user.DefaultPanel = { + region: 'south', + title: 'User Form', + padding: 5, + xtype: 'panel', + html: 'Add or select an User' +}; + + +// passord validator +Ext.apply(Ext.form.VTypes, { + password: function(val, field) { + if (field.initialPassField) { + var pwd = Ext.getCmp(field.initialPassField); + return (val == pwd.getValue()); + } + return true; + }, + passwordText: 'The passwords entered do not match!' +}); diff --git a/scm-webapp/src/main/webapp/resources/js/user/sonia.user.panel.js b/scm-webapp/src/main/webapp/resources/js/user/sonia.user.panel.js new file mode 100644 index 0000000000..4518f12409 --- /dev/null +++ b/scm-webapp/src/main/webapp/resources/js/user/sonia.user.panel.js @@ -0,0 +1,164 @@ +/* * + * Copyright (c) 2010, Sebastian Sdorra + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of SCM-Manager; nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + +Sonia.user.Panel = Ext.extend(Ext.Panel, { + + addText: 'Add', + removeText: 'Remove', + reloadText: 'Reload', + titleText: 'User Form', + emptyText: 'Add or select an User', + removeTitleText: 'Remove User', + removeMsgText: 'Remove User "{0}"?', + errorTitleText: 'Error', + errorMsgText: 'User deletion failed', + + initComponent: function(){ + + var config = { + layout: 'border', + hideMode: 'offsets', + bodyCssClass: 'x-panel-mc', + enableTabScroll: true, + region:'center', + autoScroll: true, + tbar: [ + {xtype: 'tbbutton', text: this.addText, scope: this, handler: this.showAddPanel}, + {xtype: 'tbbutton', text: this.removeText, scope: this, handler: this.removeUser}, + '-', + {xtype: 'tbbutton', text: this.reloadText, scope: this, handler: this.reload} + ], + items: [{ + id: 'userGrid', + xtype: 'userGrid', + region: 'center' + },{ + id: 'userEditPanel', + layout: 'fit', + items: [{ + region: 'south', + title: 'User Form', + xtype: 'panel', + padding: 5, + html: this.emptyText + }], + height: 250, + split: true, + border: false, + region: 'south' + }] + }; + + Ext.apply(this, Ext.apply(this.initialConfig, config)); + Sonia.user.Panel.superclass.initComponent.apply(this, arguments); + }, + + showAddPanel: function(){ + var editPanel = Ext.getCmp('userEditPanel'); + editPanel.removeAll(); + var panel = new Sonia.user.FormPanel({ + region: 'south', + title: this.titleText, + padding: 5, + onUpdate: { + fn: this.reload, + scope: this + }, + onCreate: { + fn: this.reload, + scope: this + } + }); + editPanel.add(panel); + editPanel.doLayout(); + }, + + resetPanel: function(){ + Sonia.user.setEditPanel( Sonia.user.DefaultPanel ); + }, + + removeUser: function(){ + + var grid = Ext.getCmp('userGrid'); + var selected = grid.getSelectionModel().getSelected(); + if ( selected ){ + var item = selected.data; + var url = restUrl + 'users/' + item.name + '.json'; + + Ext.MessageBox.show({ + title: this.removeTitleText, + msg: String.format(this.removeMsgText, item.name), + buttons: Ext.MessageBox.OKCANCEL, + icon: Ext.MessageBox.QUESTION, + fn: function(result){ + if ( result == 'ok' ){ + + if ( debug ){ + console.debug( 'remove user ' + item.name ); + } + + Ext.Ajax.request({ + url: url, + method: 'DELETE', + scope: this, + success: function(){ + this.reload(); + this.resetPanel(); + }, + failure: function(result){ + main.handleFailure( + result.status, + this.errorTitleText, + this.errorMsgText + ); + } + }); + } + + }, + scope: this + }); + + } else if ( debug ){ + console.debug( 'no user selected' ); + } + + }, + + reload: function(){ + Ext.getCmp('userGrid').reload(); + } + +}); + +// register xtype +Ext.reg('userPanel', Sonia.user.Panel);