Files
SCM-Manager/scm-webapp/src/main/webapp/resources/js/sonia.rest.js

246 lines
6.2 KiB
JavaScript
Raw Normal View History

/**
* 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
*
*/
Ext.ns("Sonia.rest");
Sonia.rest.JsonStore = Ext.extend( Ext.data.JsonStore, {
2011-03-05 13:07:17 +01:00
errorTitleText: 'Error',
errorMsgText: 'Could not load items. Server returned status: {0}',
constructor: function(config) {
var baseConfig = {
autoLoad: false,
listeners: {
// fix jersey empty array problem
exception: {
fn: function(proxy, type, action, options, response, arg){
var status = response.status;
if ( status == 200 && action == 'read' && response.responseText == 'null' ){
if ( debug ){
console.debug( 'empty array, clear whole store' );
}
this.removeAll();
} else {
2010-12-19 15:13:45 +01:00
Ext.MessageBox.show({
2011-03-05 13:07:17 +01:00
title: this.errorTitleText,
msg: String.format( this.errorMsgText, status ),
2010-12-19 15:13:45 +01:00
buttons: Ext.MessageBox.OK,
icon:Ext.MessageBox.ERROR
});
}
},
scope: this
}
}
};
Sonia.rest.JsonStore.superclass.constructor.call(this, Ext.apply(config, baseConfig));
}
});
2010-11-08 20:10:20 +01:00
2010-11-08 20:24:06 +01:00
// Grid
2010-11-08 20:10:20 +01:00
Sonia.rest.Grid = Ext.extend(Ext.grid.GridPanel, {
urlTemplate: '<a href="{0}" target="_blank">{0}</a>',
mailtoTemplate: '<a href="mailto: {0}">{0}</a>',
2010-11-25 18:57:21 +01:00
checkboxTemplate: '<input type="checkbox" disabled="true" {0}/>',
emptyText: 'No items available',
2010-11-08 20:10:20 +01:00
initComponent: function(){
var selectionModel = new Ext.grid.RowSelectionModel({
singleSelect: true
});
selectionModel.on({
selectionchange: {
scope: this,
fn: this.selectionChanged
}
});
var config = {
2011-04-15 19:11:36 +02:00
minHeight: 150,
2010-11-08 20:10:20 +01:00
loadMask: true,
sm: selectionModel,
viewConfig: {
deferEmptyText: false,
emptyText: this.emptyText
}
2010-11-08 20:10:20 +01:00
};
Ext.apply(this, Ext.apply(this.initialConfig, config));
Sonia.rest.Grid.superclass.initComponent.apply(this, arguments);
// load store
if ( debug ){
console.debug( 'load store' );
}
this.store.load();
},
reload: function(){
if ( debug ){
console.debug('reload store');
}
this.store.load();
},
selectionChanged: function(sm){
var selected = sm.getSelected();
if ( selected ){
this.selectItem( selected.data );
}
},
selectItem: function(item){
2010-11-29 21:06:12 +01:00
if (debug){
console.debug( item );
}
2010-11-08 20:10:20 +01:00
},
renderUrl: function(url){
2010-12-29 18:15:45 +01:00
var result = '';
if ( url != null ){
result = String.format( this.urlTemplate, url );
}
return result;
2010-11-08 20:10:20 +01:00
},
renderMailto: function(mail){
2011-01-01 21:43:14 +01:00
var result = '';
if ( mail != null ){
result = String.format( this.mailtoTemplate, mail );
}
return result;
2010-11-25 18:57:21 +01:00
},
renderCheckbox: function(value){
var param = "";
if ( value ){
param = "checked='checked' ";
}
return String.format( this.checkboxTemplate, param );
2010-11-08 20:10:20 +01:00
}
2010-11-08 20:24:06 +01:00
});
// FormPanel
Sonia.rest.FormPanel = Ext.extend(Ext.FormPanel,{
2011-03-05 13:07:17 +01:00
okText: 'Ok',
cancelText: 'Cancel',
addText: 'Add',
removeText: 'Remove',
2010-11-08 20:24:06 +01:00
item: null,
onUpdate: null,
onCreate: null,
initComponent: function(){
var config = {
2011-04-07 17:42:22 +02:00
bodyCssClass: 'x-panel-mc',
2010-11-08 20:24:06 +01:00
padding: 5,
labelWidth: 100,
defaults: {width: 240},
autoScroll: true,
monitorValid: true,
defaultType: 'textfield',
buttonAlign: 'center',
2011-04-07 17:42:22 +02:00
footerCfg: {
cls: 'x-panel-mc'
},
2010-11-08 20:24:06 +01:00
buttons: [
2011-03-05 13:07:17 +01:00
{text: this.okText, formBind: true, scope: this, handler: this.submit},
{text: this.cancelText, scope: this, handler: this.cancel}
2010-11-08 20:24:06 +01:00
]
}
Ext.apply(this, Ext.apply(this.initialConfig, config));
Sonia.rest.FormPanel.superclass.initComponent.apply(this, arguments);
if ( this.item != null ){
this.loadData(this.item);
}
},
loadData: function(item){
this.item = item;
var data = {success: true, data: item};
this.getForm().loadRecord(data);
},
submit: function(){
if ( debug ){
console.debug( 'form submitted' );
}
var item = this.getForm().getFieldValues();
if ( this.item != null ){
this.update(item);
} else {
this.create(item);
}
},
2010-11-29 21:18:22 +01:00
cancel: function(){
2010-11-08 20:24:06 +01:00
if ( debug ){
console.debug( 'reset form' );
}
this.getForm().reset();
},
execCallback: function(obj, item){
if ( Ext.isFunction( obj ) ){
obj(item);
} else if ( Ext.isObject( obj )){
obj.fn.call( obj.scope, item );
}
},
update: function(item){
2010-11-29 21:06:12 +01:00
if ( debug ){
console.debug( 'update item: ' );
console.debug( item );
}
2010-11-08 20:24:06 +01:00
},
create: function(item){
2010-11-29 21:06:12 +01:00
if (debug){
console.debug( 'create item: ' );
console.debug( item );
}
2010-11-08 20:24:06 +01:00
}
2010-11-08 20:10:20 +01:00
2010-11-08 20:24:06 +01:00
});