diff --git a/src/main/webapp/scripts/xnat/app/timeout.js b/src/main/webapp/scripts/xnat/app/timeout.js index 96315e3a682826028f12b8352e614046cd84e723..04bb9561bd3213f6d778a6169220b2e61f1bad77 100644 --- a/src/main/webapp/scripts/xnat/app/timeout.js +++ b/src/main/webapp/scripts/xnat/app/timeout.js @@ -272,7 +272,7 @@ var XNAT = getObject(XNAT); // need to wait a little longer before reloading setTimeout(function(){ window.location.reload(); - }, 120000); + }, 2000); } diff --git a/src/main/webapp/scripts/xnat/ui/panel.js b/src/main/webapp/scripts/xnat/ui/panel.js index 410aeb12a34e6f0957d271ccf597b651f9d7e332..6ef65f211c7f13beaed985ba7155821dd3614f1d 100644 --- a/src/main/webapp/scripts/xnat/ui/panel.js +++ b/src/main/webapp/scripts/xnat/ui/panel.js @@ -426,7 +426,8 @@ var XNAT = getObject(XNAT || {}); } var ajaxConfig = { - method: opts.method, + //method: opts.method, + method: $form.data('method') || opts.method || 'POST', url: this.action, success: function(){ var obj = {}; @@ -845,54 +846,10 @@ var XNAT = getObject(XNAT || {}); panel.data = {}; panel.data.table = function(opts){ + // initialize the table - opts = cloneObject(opts); - opts.element = opts.element || {}; - addClassName(opts.element, 'data-table xnat-table'); - if (opts.sortable) { - if (opts.sortable === true) { - addClassName(opts.element, 'sortable'); - } - else { - opts.sortable = opts.sortable.split(',').map(function(item){return item.trim()}); - } - } - opts.element.style = { - width: opts.width || '100%' - }; - var dataTable = XNAT.table(opts.element); - // request data for table rows - XNAT.xhr.get({ - url: XNAT.url.rootUrl(opts.load||opts.url), - dataType: opts.dataType || 'json', - success: function(data){ - var props = []; - if (opts.items) { - dataTable.tr(); - forOwn(opts.items, function(name, val){ - props.push(name); - dataTable.th(val); - if (opts.sortable === true || opts.sortable.indexOf(name) !== -1) { - addClassName(dataTable.last.th, 'sort'); - } - }); - } - else { - forOwn(data[0], function(name, val){ - props.push(name); - }); - } - data.forEach(function(item){ - dataTable.tr(); - props.forEach(function(name){ - dataTable.td({ className: name }, item[name]); - }); - }); - if (opts.container) { - $$(opts.container).append(dataTable.table); - } - } - }); + var dataTable = XNAT.table.dataTable(opts.data||[], opts); + return { element: dataTable.table, spawned: dataTable.table, @@ -900,6 +857,7 @@ var XNAT = getObject(XNAT || {}); return dataTable.table } }; + }; panel.data.list = function(opts){ diff --git a/src/main/webapp/scripts/xnat/ui/table.js b/src/main/webapp/scripts/xnat/ui/table.js index 5a645866d1561676b29942bc306b2e242645dff0..ec651f9445b3086c73c0b42e8f414aa715d4f0b4 100755 --- a/src/main/webapp/scripts/xnat/ui/table.js +++ b/src/main/webapp/scripts/xnat/ui/table.js @@ -275,6 +275,7 @@ var XNAT = getObject(XNAT); else { obj = data || {}; } + if (obj.header) { // if there's a 'header' property // set to true, pick the header from @@ -347,15 +348,103 @@ var XNAT = getObject(XNAT); // helper for future XNAT DataTable widget table.dataTable = function(data, opts){ + var tableData = data; + // tolerate reversed arguments if (Array.isArray(opts)){ tableData = opts; - opts = data; + opts = getObject(data); } - addClassName(opts, 'xnat-table data-table'); - var newTable = new Table(opts); - return newTable.init(tableData); + + // don't modify original object + opts = cloneObject(opts); + + var allItems = opts.header || (opts.items && opts.items === 'all'); + + // properties for spawned element + opts.element = opts.element || {}; + + addClassName(opts.element, 'data-table xnat-table'); + + if (opts.sortable) { + if (opts.sortable === true) { + addClassName(opts.element, 'sortable'); + } + else { + opts.sortable = opts.sortable.split(',').map(function(item){return item.trim()}); + } + } + + opts.element = extend(true, { + style: { + width: opts.width || '100%' + } + }, opts.element); + + // initialize the table + var newTable = new Table(opts.element); + + function createTable(rows){ + var props = []; + if (!allItems && (opts.items || opts.properties)) { + newTable.tr(); + forOwn(opts.items||opts.properties, function(name, val){ + props.push(name); + newTable.th(val); + if (!opts.sortable) return; + if (opts.sortable === true || opts.sortable.indexOf(name) !== -1) { + addClassName(newTable.last.th, 'sort'); + } + }); + } + else { + if (allItems) { + newTable.tr(); + } + forOwn(rows[0], function(name, val){ + if (allItems) { + newTable.th(name); + } + props.push(name); + }); + } + rows.forEach(function(item){ + newTable.tr(); + props.forEach(function(name){ + newTable.td({ className: name }, item[name]); + }); + }); + } + + // if 'tableData' is a string, use as the url + if (typeof tableData == 'string') { + opts.url = tableData; + } + + // request data for table rows + if (opts.load || opts.url) { + XNAT.xhr.get({ + url: XNAT.url.rootUrl(opts.load||opts.url), + dataType: opts.dataType || 'json', + success: function(json){ + // handle data returned in ResultSet.Result array + json = (json.ResultSet && json.ResultSet.Result) ? json.ResultSet.Result : json; + createTable(json); + } + }); + } + else { + createTable(tableData.data||tableData); + // newTable.init(tableData); + } + + if (opts.container) { + $$(opts.container).append(newTable.table); + } + + return newTable; + }; // table with <input> elements in the cells @@ -395,4 +484,3 @@ var XNAT = getObject(XNAT); XNAT.ui.inputTable = XNAT.inputTable = table.inputTable; })); - diff --git a/src/main/webapp/scripts/xnat/ui/tabs.js b/src/main/webapp/scripts/xnat/ui/tabs.js index 61bec657552be5fde90b963b8a7246cf0d4bf80d..73eaf37aa06abe936f9f260c154a195e415d0bba 100755 --- a/src/main/webapp/scripts/xnat/ui/tabs.js +++ b/src/main/webapp/scripts/xnat/ui/tabs.js @@ -171,9 +171,9 @@ var XNAT = getObject(XNAT || {}); // set container and layout before spawning: // XNAT.tabs.container = 'div.foo'; - container = tabs.container || 'div.xnat-tab-container'; + container = obj.container || tabs.container || 'div.xnat-tab-container'; - layout = tabs.layout || 'left'; + layout = obj.layout || tabs.layout || 'left'; navTabs = spawn('div.xnat-nav-tabs'); tabContent = spawn('div.xnat-tab-content');