#set ($TEMPLATE_TEXT = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "BacklogTable", "backlogtable.templatetext"))) #set ($ADD_STORY_TITLE = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "BacklogTable", "backlogtable.addstorytitle"))) #set ($ADD_CHILD_STORY_TITLE = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "BacklogTable", "backlogtable.addchildstorytitle"))) #if ($canManageStories) #set ($EDIT_STORY_TITLE = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "BacklogTable", "backlogtable.editstorytitle"))) #else #set ($EDIT_STORY_TITLE = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "BacklogTable", "backlogtable.viewstorytitle"))) #end #set ($STORY_DLG_SAVE_ERROR_TITLE = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "GStoryDialog", "storydialog.save.error.dialog.title"))) #set ($DLG_NAME = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "GStoryDialog", "dialog.label.name"))) #set ($DLG_DESC = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "GStoryDialog", "dialog.label.desc"))) #set ($DLG_SAVE = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "GStoryDialog", "dialog.button.save"))) #set ($DLG_SAVE_WAIT = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "GStoryDialog", "dialog.save.wait"))) #set ($DLG_CANCEL = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "GStoryDialog", "dialog.button.cancel"))) #set ($STORY_SUBMITTEDBY = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "GStoryDialog", "storydialog.label.submittedby"))) #set ($STORY_ACCEPTEDBY = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "GStoryDialog", "storydialog.label.acceptedby"))) #set ($STORY_CATEGORY = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "GStoryDialog", "storydialog.label.category"))) #set ($STORY_ACCPTCRI = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "GStoryDialog", "storydialog.label.acceptcriteria"))) #set ($STORY_EXTID = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "GStoryDialog", "storydialog.label.externalid"))) #set ($STORY_STATUS = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "GStoryDialog", "storydialog.label.status"))) #set ($STORY_SIZE = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "GStoryDialog", "storydialog.label.size"))) #set ($STORY_CONFID = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "GStoryDialog", "storydialog.label.confidence"))) #set ($STORY_BUSIVAL = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "GStoryDialog", "storydialog.label.busivalue"))) #set ($STORY_EXTREF = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "GStoryDialog", "storydialog.label.extref"))) #set ($STORY_NOTES = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "GStoryDialog", "storydialog.label.notes"))) #set ($STORY_INFO = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "GStoryDialog", "storydialog.label.storyinfo"))) #set ($STORY_CUSTOM = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "GStoryDialog", "storydialog.label.custom"))) #set ($FORM_REQUIRED_FIELD_ERROR= $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "FocusCommon", "form.required.field.error"))) #set ($REQUIRED_FIELD = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "FocusCommon", "requiredfield.error"))) #set ($DESCRIPTION_TOO_LONG = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "GStoryDialog", "storydialog.label.desctoolong", "{0}", "{1}"))) #set ($ACCPTCRIT_TOO_LONG = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "GStoryDialog", "storydialog.label.accptcrittoolong", "{0}", "{1}"))) #set ($NOTES_TOO_LONG = $CommonFunctions.encodeJavaScriptString($CommonFunctions.getTermFromResourceBundle($currentUserId, "GStoryDialog", "storydialog.label.notestoolong", "{0}", "{1}"))) var storyFieldId = { NAME: 'Name', BACKLOGID: 'reqbacklogid', REQID: 'reqId', RANK: 'rank', CATEGORY: 'category', NOTES: 'notes', ACCEPTANCECRITERIA: 'AcceptanceCtiteria', ACCEPTEDBY: 'AcceptedBy', BUSINESSVALUE: 'BusinessValue', CONFIDENCE: 'Confidence', DESCRIPTION: 'Description', EXTERNALREFERENCE: 'ExternalReference', SIZE: 'Size', STATUS: 'Status', SUBMITTEDBY: 'SubmittedBy', PARENT_ID: 'parentid' }; // ---------- story Dialog --------- /* * StoryDialog object implements dialog for new and edit story. * Main entry from external callers: * AddNewRequirement * ShowRequirementDetails * Followings need to be set by the caller before calling the entries: * 1. productBacklog - backlogId for which the story is associated with or launched on behalf or * projectId,sprintId - projectId,sprintId for which the story is associated with or launched on behalf * 2. saveSuccessHandlerFn - call back when save story is successfull, provided by the caller * 3.(updaterdlgBklogComboByRec and updaterdlgBklogComboByDS) are called to update the backlog combo list on the story dialog. */ var storyDialog = { // linkages to panel which launches it tabx: 'pbx', //tab view or not? must be set before launching it productBacklog : null, // must be set before launching it if projectId is not set projectId:null,//must be set before launching it if productBacklog is not set sprintId:null,//must be set before launching it if productBacklog is not set saveSuccessHandlerFn : null, // must be set before launching it saveFailureHandlerFn : null, // handler for failure or when the returned data is different from form record data. loadSuccessHandlerFn : null, // must be set before launching it // local properties blComboRec : null, requirementDialog : null, rdlgFormCtrl : null, rdlgFormRec: null, // add/edit Story form data record rdlgNewFormRec: null, // cached copy of the new Story data record to load the form rdlgReqTitle : null, rdlgBklogCombo : null, // Requirement dialog backlog combo rdlgBklogCombods : null, // Requirement dialog backlog combo ds. rdlgRankField:null, storyDescription: null, storyAccptCrit: null, storyNotes: null, demandArtifactId: null, hiddenParentReqId: null, loadMask:null, init : function() { Ext.QuickTips.init(); storyDialog.blComboRec = Ext.data.Record.create( [ { name:'id' }, { name:'name', sortType:'asUCString' } ]); storyDialog.rdlgBklogCombods = new Ext.data.Store({ id : 0, proxy: new Ext.data.HttpProxy({url:'pbv/PBVAsyncHandler?action=BACKLOGLIST'}), reader: new Ext.data.JsonReader({ totalProperty: 'backlogCount', root: 'backlogs' }, storyDialog.blComboRec), sortInfo:{field: 'name', direction: "ASC"} }); // backlog combo on form if( storyDialog.rdlgBklogCombo == null ) { storyDialog.rdlgBklogCombo = new Ext.form.ComboBox({ id: storyFieldId.BACKLOGID, fieldLabel: 'Backlog', hiddenName: 'reqbacklogid', name: 'reqbacklogid', store: storyDialog.rdlgBklogCombods, displayField: 'name', valueField: 'id', selectOnFocus: true, forceSelection : true, listClass: 'x-combo-list-small', mode: 'local', triggerAction: 'all', editable: false, autoWidth: false, anchor: '93%', tpl: '
{[Ext.util.Format.htmlEncode(values.name)]}
' }); } // status combo storyDialog.statusComboDS = new Ext.data.Store({ proxy:new Ext.data.HttpProxy({url:'focus/FocusAdminHandler?action=GET-STATUS-ENUM'}), reader: new Ext.data.JsonReader( { id:'id', totalCount: 'storyStatusCount', root: 'storyStatuses' }, Bxt.EnumRecordType), sortInfo:{field: 'seq', direction: "ASC"} } ); storyDialog.statusCombo = new Ext.form.ComboBox ({ autoCreate: {tag: "input", type: "combo", id: "storyDlgStatus"}, id: storyFieldId.STATUS, fieldLabel: '$STORY_STATUS', hiddenName: 'status', name: 'status', store: storyDialog.statusComboDS, displayField: 'value', valueField: 'id', //value: 'Not Started', selectOnFocus: true, forceSelection : true, listClass: 'x-combo-list-small', mode: 'local', triggerAction: 'all', editable: false, autoWidth: false, anchor: '100%', tpl: '
{[Ext.util.Format.htmlEncode(values.value)]}
' }); // confidence combo storyDialog.confidComboDS = new Ext.data.Store({ proxy:new Ext.data.HttpProxy({url:'focus/FocusAdminHandler?action=GET-CONFD-ENUM'}), reader: new Ext.data.JsonReader( { id:'id', totalProperty: 'storyConfidCount', root: 'storyConfids' }, Bxt.EnumRecordType), sortInfo:{field: 'seq', direction: "ASC"} } ); storyDialog.confidCombo = new Ext.form.ComboBox({ autoCreate: {tag: "input", type: "combo", id: "storyDlgConfidence"}, id: storyFieldId.CONFIDENCE, fieldLabel: '$STORY_CONFID', hiddenName: 'confid', store: storyDialog.confidComboDS, displayField: 'value', valueField: 'id', value: '', selectOnFocus: true, forceSelection : true, listClass: 'x-combo-list-small', mode: 'local', triggerAction: 'all', editable: false, autoWidth: false, width: 200, tpl: '
{[Ext.util.Format.htmlEncode(values.value)]}
' }); // form record storyDialog.rdlgFormRec = Ext.data.Record.create( [ { name:'reqId' }, { name:'name' }, { name:'reqbacklogid' }, { name:'submittedby' }, { name:'acceptedby' }, { name:'category' }, { name:'desc' }, { name:'acceptcrit' }, { name:'status' }, { name:'rank' }, { name:'size' }, { name:'businessvalue' }, { name:'confid' }, { name:'externalref' }, { name:'notes' } ]); //---------------------------------------------------------------------------------------------------------- #parse("/focus/storydialogcontrols.vm") storyDialog.rdlgReqTitle = titleField; storyDialog.rdlgReqDesc = descField; storyDialog.rdlgRankField = rankField; //---------------------------------------------------------------------------------------------------------- var bPanel = new Ext.Panel({ layout: 'column', anchor: '95%', border: false, items: [{ columnWidth: .5, border: false, layout: 'form', items: [ businessValueField, sizeField ] },{ columnWidth: .5, border: false, layout: 'form', items: [ storyDialog.statusCombo, categoryField ] }] }); storyDialog.storyInfoPanel = new Ext.Panel({ title:'$STORY_INFO', layout:'form', items: [ storyIdField, storyDialog.hiddenParentReqId, storyDialog.rdlgRankField, titleField, descField, descHTMLField, bPanel ], id: 'StoryTab' }); storyDialog.tabPanel = new Ext.TabPanel({ id: 'sdlg-id', height: 428, activeTab: 0, bodyStyle:'padding:10px', items:[ storyDialog.storyInfoPanel, { title:'$STORY_ACCPTCRI', layout:'form', items: [ acceptanceCriteriaField, acceptanceCriteriaHTMLField ], id: 'ACTab' },{ title:'$STORY_NOTES', layout:'form', items: [ notesHTMLField, notesField ], id: 'NotesTab' }, { title: '$STORY_CUSTOM', layout: 'form', items: [ storyDialog.confidCombo, submittedByField, acceptedByField, externalRefField ], id: 'CustomTab' }] }); try { storyDialog.rdlgFormCtrl = new Ext.FormPanel({ id: 'sdlg-form', labelWidth: 90, border:false, width: 550, layout: 'fit', buttonAlign: 'right', labelAlign: 'right', renderTo: document.body, reader: new Ext.data.JsonReader({}, storyDialog.rdlgFormRec), items: [ storyDialog.tabPanel ] }); } catch (error) {} // form dialog if(!storyDialog.requirementDialog){ storyDialog.requirementDialog = new Bxt.BMSWindow({ id : 'sdlg-win', layout:'fit', width:700, height:450, closeAction:'hide', plain: true, items: storyDialog.rdlgFormCtrl, modal: true, resizable : false, closable: true, renderTo: document.body, saveFunc: storyDialog.saveHandler, formCtrl: storyDialog.rdlgFormCtrl, buttons: [{ id: 'storyDlgSaveButton', #if (!$canManageStories) disabled: true, #end text: '$DLG_SAVE', handler: function(){ storyDialog.saveHandler(); } }, { text: '$DLG_CANCEL', handler: function() { storyDialog.requirementDialog.hide(); } }] }); }; // Intercept backspace key on dialog var keymap = new Ext.KeyMap('sdlg-win', { key: Ext.EventObject.BACKSPACE, fn : function(k, e) { if(!BxtUtil.handleBACKSPACEKey(k,e)) { var tid = e.getTarget().id; if( tid === 'storyDlgStatus' || tid === 'storyDlgConfidence') { e.preventDefault(); } } } }); storyDialog.requirementDialog.on('show', function(){ hideField(storyFieldId.RANK); storyDialog.rdlgReqTitle.getEl().dom.focus(); }, null, {delay: 100}); storyDialog.requirementDialog.on('beforeshow', function(){ storyDialog.tabPanel.setActiveTab(storyDialog.storyInfoPanel); }); }, saveHandler : function(){ if(!storyDialog.rdlgFormCtrl.form.isValid()) { var valid = true; var invalidForm = null; storyDialog.tabPanel.items.each( function(item) { var formGroup = item; formGroup.items.each( function(item2) { try { if (valid && !item2.validate()) { valid = false; invalidForm = formGroup; } } catch (e) { } }); }); if(invalidForm != null) { storyDialog.tabPanel.setActiveTab(invalidForm); } BxtUtil.showErrorMsg('$FORM_REQUIRED_FIELD_ERROR'); return; } storyDialog.requirementDialog.confirmHide = true; // reqbacklogId not in the form submit values , // so post them explicitly. var rblogid = storyDialog.rdlgBklogCombo.getValue(); // get text area values var descVal = ''; var isDescRichText = false; if (storyDialog.storyDescription) { descVal = storyDialog.storyDescription.getValue(); var maxLength = storyDialog.storyDescription.maxLength; if (undefined != maxLength && null != maxLength) { if (undefined != descVal && null != descVal) { if (descVal.length > maxLength) { var msg = '$DESCRIPTION_TOO_LONG'; msg = msg.replace(/\{0\}/, maxLength); msg = msg.replace(/\{1\}/, descVal.length); BxtUtil.showErrorMsg(msg); return; } } } } if (storyDialog.storyDescription.id.search(/_html/) > -1) { isDescRichText = true; } var accptCritVal = ''; var isAccCritRichText = false; if (storyDialog.storyAccptCrit) { accptCritVal = storyDialog.storyAccptCrit.getValue(); var maxLength = storyDialog.storyAccptCrit.maxLength; if (undefined != maxLength && null != maxLength) { if (undefined != accptCritVal && null != accptCritVal) { if (accptCritVal.length > maxLength) { var msg = '$ACCPTCRIT_TOO_LONG'; msg = msg.replace(/\{0\}/, maxLength); msg = msg.replace(/\{1\}/, accptCritVal.length); BxtUtil.showErrorMsg(msg); return; } } } } if (storyDialog.storyAccptCrit.id.search(/_html/) > -1) { isAccCritRichText = true; } var notesVal = ''; var isNotesRichText = false; if (storyDialog.storyNotes) { notesVal = storyDialog.storyNotes.getValue(); var maxLength = storyDialog.storyNotes.maxLength; if (undefined != maxLength && null != maxLength) { if (undefined != notesVal && null != notesVal) { if (notesVal.length > maxLength) { var msg = '$NOTES_TOO_LONG'; msg = msg.replace(/\{0\}/, maxLength); msg = msg.replace(/\{1\}/, notesVal.length); BxtUtil.showErrorMsg(msg); return; } } } } if (storyDialog.storyNotes.id.search(/_html/) > -1) { isNotesRichText = true; } if (storyDialog.parentStoryId != null) { storyDialog.hiddenParentReqId.setValue(storyDialog.parentStoryId); } storyDialog.rdlgFormCtrl.form.submit({url:'pbv/PBVAsyncHandler', waitMsg : ' ', waitTitle : '$DLG_SAVE_WAIT', params:{action:'SAVE-REQ', demandArtifactId: storyDialog.demandArtifactId, backlogid: storyDialog.productBacklog, projectid:storyDialog.projectId,sprintid:storyDialog.sprintId, reqbacklogid: rblogid, reqbacklogid:storyDialog.productBacklog, tabx:storyDialog.tabx, descVal: descVal, accptCritVal: accptCritVal, notesVal: notesVal, isDescRichText: isDescRichText, isAccCritRichText: isAccCritRichText, isNotesRichText: isNotesRichText}, settings: {show: true, title:'$STORY_DLG_SAVE_ERROR_TITLE'}, success:function(form, action) { storyDialog.requirementDialog.hide(); if(storyDialog.saveSuccessHandlerFn) { storyDialog.saveSuccessHandlerFn(form, action); } }, failure : function(form, action){ //BxtUtil.showActionError(action); storyDialog.requirementDialog.confirmHide = false; ErrorHandlerLib.onFormFailure(form, action); } }); }, setupRankField:function() { storyDialog.rdlgRankField.hide();//always hide because we are moving towards positional }, // ---------- Edit Requirement ---------- showRequirementDetails : function(reqId, copy, el, loadMask) { storyDialog.requirementDialog.confirmHide = false; storyDialog.loadMask = loadMask; var currBacklogId = storyDialog.productBacklog; var currProjectId = storyDialog.projectId; var currSprintId = storyDialog.sprintId; var parentStoryId = storyDialog.parentStoryId; storyDialog.rdlgFormCtrl.form.reset(); BxtLoadUtil.loadWidget( 'pbv/PBVAsyncHandler?action=LOAD-REQ', { reqId: reqId, backlogId: currBacklogId, projectId: currProjectId, sprintId: currSprintId, parentstoryId: parentStoryId, isNew: false, isCopy: copy }, { el: el }, null,//loadMask is casing scrolling issues, so use progress bar storyDialog.loadDlgCallback, true //showProgress ); }, // ---------- Add Requirement ---------- addNewRequirement : function(el, loadMask) { storyDialog.requirementDialog.confirmHide = false; storyDialog.loadMask = loadMask; var currBacklogId = storyDialog.productBacklog; var currProjectId = storyDialog.projectId; var currSprintId = storyDialog.sprintId; var parentStoryId = storyDialog.parentStoryId; storyDialog.rdlgFormCtrl.form.reset(); BxtLoadUtil.loadWidget( 'pbv/PBVAsyncHandler?action=LOAD-REQ', { backlogId: currBacklogId, projectId: currProjectId, sprintId: currSprintId, parentstoryId: parentStoryId, isNew: true }, { el: el }, null, storyDialog.loadDlgCallback, true//showProgress ); }, loadDlgCallback : function(formJSON, action) { storyDialog.loadDlgComponents(formJSON.fields, false); if (action && action.params && action.params.isNew) { storyDialog.rdlgBklogCombo.enable(); if(storyDialog.parentStoryId == null) { storyDialog.requirementDialog.setTitle('$ADD_STORY_TITLE'); } else { storyDialog.requirementDialog.setTitle('$ADD_CHILD_STORY_TITLE' + " - " + BxtUtil.formatId(storyDialog.parentStoryId)); } } else if (action && action.params) { storyDialog.rdlgBklogCombo.setDisabled(!action.params.isCopy); var title = (!action.params.isCopy) ? '$EDIT_STORY_TITLE' : '$ADD_STORY_TITLE'; // do not show the story id in the title if it is a copy story var titleId = (action.params.isCopy) ? "" : ": " + BxtUtil.formatId(action.params.reqId); storyDialog.requirementDialog.setTitle(title + titleId); } storyDialog.setupRankField(); storyDialog.requirementDialog.show(action.settings.el); // make a call back once the story dialog is loaded try { storyDialog.loadSuccessHandlerFn(); } catch (e) { } }, loadDlgComponents : function(fields, reload, reloadDesc, reloadAccptCrit, reloadNotes) { //********************* // Set Field Values //********************* if (fields) { for (var i = 0; i < fields.length; i++) { // get form component var fieldId = fields[i].fieldId; var cmp = Ext.getCmp(fieldId); //if(cmp)??? why is this not working?? { // create text area for description, acceptance criteria, and notes if (storyFieldId.DESCRIPTION == fieldId || storyFieldId.ACCEPTANCECRITERIA == fieldId || storyFieldId.NOTES == fieldId ) { if (storyFieldId.NOTES == fieldId || fields[i].HTMLText) { hideField(fieldId); showField(fieldId + "_html"); cmp = Ext.getCmp(fieldId + "_html"); } else { showField(fieldId); hideField(fieldId + "_html"); } } // set handles to the text areas so we can get the value on save if (storyFieldId.DESCRIPTION == fieldId) { storyDialog.storyDescription = cmp; if (reload) { cmp.setValue(reloadDesc); } } else if (storyFieldId.ACCEPTANCECRITERIA == fieldId) { storyDialog.storyAccptCrit = cmp; if (reload) { cmp.setValue(reloadAccptCrit); } } else if (storyFieldId.NOTES == fieldId) { storyDialog.storyNotes = cmp; if (reload) { cmp.setValue(reloadNotes); } } // clear field if (!reload) { if (cmp.store) { cmp.store.removeAll(); } cmp.reset(); } // check for component data and load if (null != fields[i].data && !reload) { cmp.store.loadData(fields[i].data); } //localize blank text cmp.blankText = '$REQUIRED_FIELD'; // st field validation if (null != fields[i].required) { cmp.allowBlank = !fields[i].required; } if (null != fields[i].maxLength && -1 != fields[i].maxLength) { cmp.maxLength = fields[i].maxLength; } else { cmp.maxLength = undefined; } // set component value if (!reload) { if(null != fields[i].value) { cmp.setValue(fields[i].value); }else { cmp.setValue(); } } } } } }, reloadValidation : function(combo, record, index) { var currBacklogId = storyDialog.productBacklog; var currProjectId = storyDialog.projectId; var currSprintId = storyDialog.sprintId; var desc = ''; if (storyDialog.storyDescription) { desc = storyDialog.storyDescription.getValue(); } var accptCrit = ''; if (storyDialog.storyAccptCrit) { accptCrit = storyDialog.storyAccptCrit.getValue(); } var notes = ''; if (storyDialog.storyNotes) { notes = storyDialog.storyNotes.getValue(); } BxtLoadUtil.loadWidget( 'pbv/PBVAsyncHandler?action=LOAD-REQ', { backlogId: currBacklogId, projectId: currProjectId, sprintId: currSprintId, isNew: true }, { reloadDesc: desc, reloadAccptCrit: accptCrit, reloadNotes: notes }, null,//loadMask is casing scrolling issues, so use progress bar storyDialog.reloadValidationCallback, true ); }, reloadValidationCallback : function(formJSON, action) { storyDialog.loadDlgComponents(formJSON.fields, true, action.settings.reloadDesc, action.settings.reloadAccptCrit, action.settings.reloadNotes); // make a call back once the story dialog is loaded try { storyDialog.loadSuccessHandlerFn(); } catch (e) { } }, // ------ update storyDialog backlog combo ---------- updaterdlgBklogCombodsByRec: function(rec){ var ds = storyDialog.rdlgBklogCombods; ds.removeAll(); for (var i = 0; i < rec.length; i++) { var r = rec[i]; ds.add(new storyDialog.blComboRec({'id': r.get('id'), 'name': r.get('name')})); } ds.sort('name', 'ASC'); }, updaterdlgBklogCombodsByDS: function(srcds){ var ds = storyDialog.rdlgBklogCombods; ds.removeAll(); var len = srcds.getCount(); for (var i = 0; i < len; i++) { var r = srcds.getAt(i); ds.add(new storyDialog.blComboRec({ 'id': r.get('id'), 'name': r.get('name') })); } ds.sort('name', 'ASC'); }, resetDialog : function() { storyDialog.productBacklog = null; storyDialog.projectId = null; storyDialog.sprintId = null; storyDialog.parentStoryId = null; storyDialog.tabx = null; storyDialog.saveSuccessHandlerFn = null; }, //watir support setDescription:function(description){ if (storyDialog.storyDescription) { storyDialog.storyDescription.setValue(description); } }, setAC:function(value){ if (storyDialog.storyAccptCrit) { storyDialog.storyAccptCrit.setValue(value); } }, setNotes:function(value){ if (storyDialog.storyNotes) { storyDialog.storyNotes.setValue(value); } } }; hideField = function(fieldName) { var field = storyDialog.rdlgFormCtrl.findById(fieldName); if (field != null) { field.hide(); if (field.getEl()) { field.getEl().up('.x-form-item').setDisplayed(false); } } else { alert("Field could not be found"); } } showField = function(fieldName) { var field = storyDialog.rdlgFormCtrl.findById(fieldName); if (field != null) { field.show(); if (field.getEl()){ field.getEl().up('.x-form-item').setDisplayed(true); } } else { alert("Field could not be found"); } }