#parse("/focus/strings_stx.vm")
var STLabels = {
TAB_TITLE4 : '$ST_TAB_TITLE',
PROJECT_COMBO : '$ST_PROJECT'
}
// ---------- STx table ----------
var storyTree = {
viewPanel: null, // split view
initialized : false, // tab initialization
selProject : null,
loadMask : null,
bFoundChild: false,
init: function() {
Ext.QuickTips.init();
storyTree.createToolbar();
storyTree.createTreePanel();
storyTree.createContextMenu();
storyTree.viewPanel = new Ext.Panel({
layout:'border',
items: [
storyTree.mainPanel
]
});
storyTree.viewPort = new Ext.Viewport({
layout:'fit',
items:[storyTree.viewPanel],
renderTo: document.body
});
storyTree.loadMask = new Ext.LoadMask(storyTree.mainPanel.getEl(), { msg:'$ST_SYNCING'});
storyTree.loadSettings();
},
// ---------- widget setup
createToolbar : function() {
var refreshButton = new Ext.Button({
text:'$ST_REFRESH',
tooltip:'$ST_REFRESH_TITLE',
iconCls:'refresh',
handler : function() {
storyTree.refreshTree();
}
});
refreshButton.setDisabled(true);
storyTree.refreshButton = refreshButton;
var syncButton = new Ext.Button({
text:'$ST_SYNC',
tooltip:'$ST_SYNC_TITLE',
iconCls:'refresh',
handler : function() {
storyTree.syncTree();
}
});
syncButton.setDisabled(true);
storyTree.syncButton = syncButton;
storyTree.projectComboRec = Ext.data.Record.create( [
{ name:'id' },
{ name:'name', sortType:'asUCString' }
]);
// project toolbar combo ds
storyTree.projectComboDS = new Ext.data.Store({
id : 0,
proxy: new Ext.data.HttpProxy({url:'pbv/PBVAsyncHandler?action=PROJECTLIST'}),
reader: new Ext.data.JsonReader({id:'id'}, storyTree.projectComboRec),
sortInfo:{field: 'name', direction: "ASC"}
});
storyTree.projectCombobox = new Ext.form.ComboBox({
id: 'storyTreeProjectCombo',
tpl: '{name}
',
store : storyTree.projectComboDS,
displayField :'name',
valueField :'id',
forceSelection : true,
mode : 'local',
emptyText :'$ST_CHOOSE',
selectOnFocus :true,
width : 220,
editable : false,
triggerAction : 'all',
listWidth: 220,
listClass :'x-combo-list-small' ,
listeners : { select : onProjectSelect, loadexception: BxtUtil.lexHandler }
});
function onProjectSelect(combo, rec, index) {
var projectId = combo.getValue();
document.location.href="../common/application/itimpact/loadpagestx.html?projectId=" + projectId;
/*if(projectId != storyTree.selProject) {
storyTree.loadTree(projectId);
}*/
}
var mainPanel = new Ext.Panel({
region: 'center',
margins: '0 0 0 0',
border: false,
header: false,
hideMode : 'offsets',
frame : false,
height: 1,
autoScroll: true,
tbar: [ new Ext.Toolbar.TextItem('' + STLabels.PROJECT_COMBO + ':') ,
new Ext.Toolbar.Spacer(),
new Ext.Toolbar.Spacer(),
storyTree.projectCombobox,
'->',
syncButton,
refreshButton
]
});
storyTree.mainPanel = mainPanel;
},
createTreePanel : function() {
var mainPanel = storyTree.mainPanel;
var Tree = Ext.tree;
var tree = new Tree.TreePanel({
renderTo: mainPanel.getEl(),
autoScroll:true,
animate:true,
enableDD:false,
containerScroll: true,
bodyBorder: false,
rootVisible:false,
loader: new Tree.TreeLoader({dataUrl:'pbv/PBVAsyncHandler?action=LOAD-STORYTREE',
listeners : {
'load' : function(loader,node,response) {
var resp = eval("(" + response.responseText + ")");
var stat = resp.success;
if((stat != undefined) && (stat == false)) {
var msg = resp.data[0].msg;
Ext.Msg.show({
title:'$SYNC_MSG_TITLE',
msg: '' + msg +'',
buttons: Ext.Msg.OK,
fn: storyTree.refreshTree,
icon: Ext.MessageBox.WARNING
});
}
}
}
}),
listeners: {click : storyTree.nodeSelected}
});
var sorter = new Ext.tree.TreeSorter(tree, {
folderSort: true,
dir: "asc",
sortType: function(node) {
// sort by a custom, typed attribute:
return node.text;
}
});
// set the root node
var root = new Tree.AsyncTreeNode({
text: 'Project',
draggable:false,
iconCls: 'reqroot-node',
id:'source'
});
root.on('load', function() {storyTree.loadMask.hide()});
tree.setRootNode(root);
storyTree.tree = tree;
mainPanel.add(tree);
},
createContextMenu : function() {
var contextMenu = new Ext.menu.Menu();
storyTree.contextMenu = contextMenu;
// handler for context menu items
function contextMenuHandler(item, e) {
var node = storyTree.selectedNode;
var el = null;
switch (item.id) {
case 'addChild':
var parentId = node.id;
storyTree.addChildStory(parentId, el);
break;
case 'editStory':
var reqId = node.id;
var parentId = node.parentNode.id;
storyTree.editStory(reqId, parentId, false, el);
break;
case 'copyStory':
var reqId = node.id;
var parentId = node.parentNode.id;
storyTree.editStory(reqId, parentId, true, el);
break;
}
}
storyTree.editStoryMenu = new Ext.menu.Item({ id: 'editStory', text: '$ST_EDIT_STORY', handler: contextMenuHandler });
storyTree.copyStoryMenu = new Ext.menu.Item({ id: 'copyStory', text: '$ST_COPY_STORY', handler: contextMenuHandler });
storyTree.addChildMenu = new Ext.menu.Item({ id: 'addChild', text: '$ST_ADD_CHILD', handler: contextMenuHandler });
contextMenu.add(storyTree.editStoryMenu);
contextMenu.add('-');
contextMenu.add(storyTree.copyStoryMenu);
contextMenu.add(storyTree.addChildMenu);
storyTree.tree.addListener('contextmenu', storyTree.showContextMenu);
},
showContextMenu : function(node, e) {
node.select();
var coords = e.getXY();
var na = node.attributes;
var disAddChild = (na.commit) || (na.tcount > 0);
var disEdit = (node.id == 'source');
#if (!$canManageStories)
//storyTree.editStoryMenu.setDisabled(true);
storyTree.copyStoryMenu.setDisabled(true);
storyTree.addChildMenu.setDisabled(true);
#else
storyTree.copyStoryMenu.setDisabled(false);
storyTree.addChildMenu.setDisabled(false);
#end
storyTree.selectedNode = node;
if(disAddChild) {
storyTree.addChildMenu.hide();
} else {
storyTree.addChildMenu.show();
}
storyTree.editStoryMenu.setDisabled(disEdit);
storyTree.contextMenu.showAt([coords[0], coords[1]]);
},
// -------- Handle settings and selections
loadSettings : function() {
if(!storyTree.initialized) {
storyTree.loadProjectList();
storyTree.initialized = true;
} else {
storyTree.loadUserSettingsProject();
}
},
loadUserSettingsProject : function() {
BxtUserSettings.load('$_FOCUS_STX_VIEW',
'$_FOCUS_PROJECT_SELECTION',
storyTree.setProjectSettingValue,
null);
},
loadProjectList : function() {
storyTree.projectComboDS.load({waitinMsg:'$ST_LOADING', params:{start:0, limit: 30},
callback:storyTree.projectLoaded });
},
projectLoaded : function(projectId) {
// Reload Story Tree
// On switching, remember the story tree as before and expand the tree ?
storyTree.loadUserSettingsProject();
},
setProjectSettingValue : function(response, options) {
var r = Ext.decode(response.responseText);
storyTree.setProjectValue(r.selection);
},
setProjectValue : function(selection) {
var ret = BxtUserSettings.setComboboxValue(storyTree.projectCombobox, selection);
if( ret === BxtUserSettings.cbNEW) {
storyTree.loadTree(selection);
}
storyTree.selProject = selection;
storyTree.refreshButton.setDisabled(selection==null);
#if (!$canManageStories)
storyTree.syncButton.setDisabled(true);
#else
storyTree.syncButton.setDisabled(selection==null);
#end
},
nodeSelected : function(node, e) {
},
// ---------- loading tree nodes
refreshTree : function() {
var projectId = storyTree.projectCombobox.getValue();
if(projectId != null) {
storyTree.loadTree(projectId);
}
},
syncTree : function() {
var projectId = storyTree.projectCombobox.getValue();
if(projectId != null) {
var msg2 = '$ST_SYNC_WARN';
Ext.Msg.show({
title:'$ST_SYNC_WARN_TITLE',
msg: '' + msg2 +'',
buttons: Ext.Msg.OKCANCEL,
fn: storyTree.onSyncBacklog,
icon: Ext.MessageBox.QUESTION
});
}
},
onSyncBacklog : function(val) {
if(val == 'ok'){
var tree = storyTree.tree;
var projectId = storyTree.projectCombobox.getValue();
var id = projectId;
var rec = storyTree.projectComboDS.getById(id);
tree.getRootNode().setText(rec.get('name'));
storyTree.selProject = projectId;
storyTree.loadRoot(projectId,true);
}
},
loadTree : function(projectId) {
var tree = storyTree.tree;
var id = projectId; //storyTree.projectCombobox.getValue();
var rec = storyTree.projectComboDS.getById(id);
tree.getRootNode().setText(rec.get('name'));
storyTree.selProject = projectId;
storyTree.refreshButton.setDisabled(projectId==null);
storyTree.loadRoot(projectId,false);
},
loadRoot : function(projectId,sync) {
var tree = storyTree.tree;
if(!sync) {
tree.loader.dataUrl = 'ajax2/Gemini?action=focus.web.ajax.LoadSTxTreeAction&userid=$currentUserId&projectid='+projectId;
storyTree.loadMask.msg = '$ST_LOADING';
} else {
tree.loader.dataUrl = 'ajax2/Gemini?action=focus.web.ajax.LoadSTxTreeAction&sync=true&userid=$currentUserId&projectid='+projectId;
storyTree.loadMask.msg = '$ST_SYNCING';
}
storyTree.loadMask.show();
tree.root.reload();
},
refreshTreeNodes : function(form, action) {
var newNodeTxt = action.response.responseText;
var newNodeObj = Ext.util.JSON.decode(newNodeTxt);
var newNode = newNodeObj.data[0];
var parentId = newNode.parentid;
if(parentId == null) {
parentId = 'source';
}
var parentNode = storyTree.tree.getNodeById(parentId);
if(parentNode != undefined)
{
if( parentNode.isExpanded())
{
if(parentId == 'source') {
storyTree.tree.root.reload();
} else {
parentNode.reload();
}
} else {
parentNode.expand();
}
}
},
// ---------- child creation and edit
addChildStory : function(parentStoryId, el) {
storyTree.setupStoryDialog(parentStoryId);
storyDialog.addNewRequirement(el, null); // loadmask set to null
},
editStory : function(reqId, parentId, copy, el) {
storyTree.setupStoryDialog(parentId);
//alert(reqId + ',' + copy + ',' + storyDialog.projectId + ',' + storyDialog.parentStoryId + ',' + storyDialog.tabx);
storyDialog.showRequirementDetails(reqId, copy, el, null);
},
setupStoryDialog : function(parentStoryId) {
storyDialog.resetDialog();
storyDialog.projectId = storyTree.projectCombobox.getValue();
storyDialog.parentStoryId = parentStoryId;
storyDialog.tabx = 'stx';
storyDialog.saveSuccessHandlerFn = storyTree.refreshTreeNodes;
},
//
//WATIR support
//
/**
* Finds the first child that has the attribute with the specified value.
* Looks recursively down the tree to find the child.
*/
findChild : function(node, value) {
var cs = node.childNodes;
for(var i = 0, len = cs.length; i < len; i++) {
if(cs[i].text == value){
return cs[i];
}
var result = storyTree.findChild( cs[i],value);
if(result !=null){
return result;
}
}
return null;
} ,
expandChildren : function(node) {
var cs = node.childNodes;
for(var i = 0, len = cs.length; i < len; i++) {
cs[i].expand(true, false, function(thisNode) {
storyTree.expandChildren(thisNode);
});
}
} ,
getChildStoryId: function(storyName)
{
var root = storyTree.tree.getRootNode();
var node = storyTree.findChild(root, storyName);
if(node != null)
{
return node.id;
}
return "";
}
}