7604 |
25 Feb 19 |
nicklas |
/* $Id $ |
7604 |
25 Feb 19 |
nicklas |
2 |
------------------------------------------------------------------ |
7604 |
25 Feb 19 |
nicklas |
Copyright (C) 2012 Nicklas Nordborg |
7604 |
25 Feb 19 |
nicklas |
4 |
|
7604 |
25 Feb 19 |
nicklas |
This file is part of BASE - BioArray Software Environment. |
7604 |
25 Feb 19 |
nicklas |
Available at http://base.thep.lu.se/ |
7604 |
25 Feb 19 |
nicklas |
7 |
|
7604 |
25 Feb 19 |
nicklas |
BASE is free software; you can redistribute it and/or |
7604 |
25 Feb 19 |
nicklas |
modify it under the terms of the GNU General Public License |
7604 |
25 Feb 19 |
nicklas |
as published by the Free Software Foundation; either version 3 |
7604 |
25 Feb 19 |
nicklas |
of the License, or (at your option) any later version. |
7604 |
25 Feb 19 |
nicklas |
12 |
|
7604 |
25 Feb 19 |
nicklas |
BASE is distributed in the hope that it will be useful, |
7604 |
25 Feb 19 |
nicklas |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
7604 |
25 Feb 19 |
nicklas |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
7604 |
25 Feb 19 |
nicklas |
GNU General Public License for more details. |
7604 |
25 Feb 19 |
nicklas |
17 |
|
7604 |
25 Feb 19 |
nicklas |
You should have received a copy of the GNU General Public License |
7604 |
25 Feb 19 |
nicklas |
along with BASE. If not, see <http://www.gnu.org/licenses/>. |
7604 |
25 Feb 19 |
nicklas |
20 |
------------------------------------------------------------------ |
7604 |
25 Feb 19 |
nicklas |
21 |
|
7604 |
25 Feb 19 |
nicklas |
@author Nicklas |
7604 |
25 Feb 19 |
nicklas |
23 |
*/ |
7604 |
25 Feb 19 |
nicklas |
'use strict'; |
7604 |
25 Feb 19 |
nicklas |
25 |
|
7604 |
25 Feb 19 |
nicklas |
var SyncFilter = function() |
7604 |
25 Feb 19 |
nicklas |
27 |
{ |
7604 |
25 Feb 19 |
nicklas |
var sf = {}; |
7604 |
25 Feb 19 |
nicklas |
29 |
|
7604 |
25 Feb 19 |
nicklas |
var allowedParentItems; |
7604 |
25 Feb 19 |
nicklas |
var allowedChildItems; |
7604 |
25 Feb 19 |
nicklas |
var filter; |
7604 |
25 Feb 19 |
nicklas |
33 |
|
7604 |
25 Feb 19 |
nicklas |
34 |
/** |
7604 |
25 Feb 19 |
nicklas |
Initialize the page. |
7604 |
25 Feb 19 |
nicklas |
36 |
*/ |
7604 |
25 Feb 19 |
nicklas |
sf.initPage = function() |
7604 |
25 Feb 19 |
nicklas |
38 |
{ |
7604 |
25 Feb 19 |
nicklas |
var pageId = Doc.getPageId(); |
7604 |
25 Feb 19 |
nicklas |
if (pageId == 'edit-page') |
7604 |
25 Feb 19 |
nicklas |
41 |
{ |
7604 |
25 Feb 19 |
nicklas |
var frm = document.forms['syncfilter']; |
7604 |
25 Feb 19 |
nicklas |
// Load info about possible parent and child items |
7604 |
25 Feb 19 |
nicklas |
allowedParentItems = Data.json('page-data', 'allowed-parent-items'); |
7604 |
25 Feb 19 |
nicklas |
allowedChildItems = Data.json('page-data', 'allowed-child-items'); |
7604 |
25 Feb 19 |
nicklas |
if (allowedChildItems.length == 0) frm.sourceItemTransform[2] = null; |
7604 |
25 Feb 19 |
nicklas |
if (allowedParentItems.length == 0) frm.sourceItemTransform[1] = null; |
7604 |
25 Feb 19 |
nicklas |
48 |
|
7604 |
25 Feb 19 |
nicklas |
// Save + Close buttons |
7604 |
25 Feb 19 |
nicklas |
Buttons.addClickHandler('btnSave', sf.save); |
7604 |
25 Feb 19 |
nicklas |
Buttons.addClickHandler('close', App.closeWindow); |
7604 |
25 Feb 19 |
nicklas |
52 |
|
7604 |
25 Feb 19 |
nicklas |
Events.addEventHandler('sourceItemTransform', 'change', sf.sourceItemTransformOnChange); |
7604 |
25 Feb 19 |
nicklas |
Events.addEventHandler('sourceItemType', 'change', sf.sourceItemTypeOnChange); |
7604 |
25 Feb 19 |
nicklas |
55 |
|
7604 |
25 Feb 19 |
nicklas |
Buttons.addClickHandler('btnModifyFilter', sf.modifyFilter); |
7604 |
25 Feb 19 |
nicklas |
Events.addEventHandler('btnModifyFilter', 'base-selected-start', sf.sourceFilterModified); |
7604 |
25 Feb 19 |
nicklas |
58 |
|
7604 |
25 Feb 19 |
nicklas |
// Tab validation |
7604 |
25 Feb 19 |
nicklas |
TabControl.addTabValidator('settings.info', sf.validateSyncFilter); |
7604 |
25 Feb 19 |
nicklas |
sf.sourceItemTransformOnChange(); |
7604 |
25 Feb 19 |
nicklas |
62 |
} |
7604 |
25 Feb 19 |
nicklas |
63 |
} |
7604 |
25 Feb 19 |
nicklas |
64 |
|
7604 |
25 Feb 19 |
nicklas |
65 |
|
7604 |
25 Feb 19 |
nicklas |
sf.validateSyncFilter = function() |
7604 |
25 Feb 19 |
nicklas |
67 |
{ |
7604 |
25 Feb 19 |
nicklas |
var frm = document.forms['syncfilter']; |
7604 |
25 Feb 19 |
nicklas |
if (Strings.trim(frm.name.value) == '') |
7604 |
25 Feb 19 |
nicklas |
70 |
{ |
7604 |
25 Feb 19 |
nicklas |
Forms.showNotification(frm.name, 'You must enter a name'); |
7604 |
25 Feb 19 |
nicklas |
return false; |
7604 |
25 Feb 19 |
nicklas |
73 |
} |
7604 |
25 Feb 19 |
nicklas |
if (!filter) |
7604 |
25 Feb 19 |
nicklas |
75 |
{ |
7604 |
25 Feb 19 |
nicklas |
Forms.showNotification('btnModifyFilter', 'You must specify a filter'); |
7604 |
25 Feb 19 |
nicklas |
return false; |
7604 |
25 Feb 19 |
nicklas |
78 |
} |
7604 |
25 Feb 19 |
nicklas |
return true; |
7604 |
25 Feb 19 |
nicklas |
80 |
} |
7604 |
25 Feb 19 |
nicklas |
81 |
|
7604 |
25 Feb 19 |
nicklas |
82 |
/** |
7604 |
25 Feb 19 |
nicklas |
When the source transform change, we must update the |
7604 |
25 Feb 19 |
nicklas |
source items selection list so that it only contains the |
7604 |
25 Feb 19 |
nicklas |
parent or child items or the source item itself. |
7604 |
25 Feb 19 |
nicklas |
86 |
*/ |
7604 |
25 Feb 19 |
nicklas |
sf.sourceItemTransformOnChange = function() |
7604 |
25 Feb 19 |
nicklas |
88 |
{ |
7604 |
25 Feb 19 |
nicklas |
var frm = document.forms['syncfilter']; |
7604 |
25 Feb 19 |
nicklas |
var transform = frm.sourceItemTransform.value; |
7604 |
25 Feb 19 |
nicklas |
if (transform == 'NONE') |
7604 |
25 Feb 19 |
nicklas |
92 |
{ |
7604 |
25 Feb 19 |
nicklas |
Doc.hide('parent-child-transform'); |
7604 |
25 Feb 19 |
nicklas |
Doc.show('none-transform', 'inline'); |
7604 |
25 Feb 19 |
nicklas |
frm.sourceItemType.length = 0; |
7604 |
25 Feb 19 |
nicklas |
var listMemberType = Data.get('page-data', 'list-member-type'); |
7604 |
25 Feb 19 |
nicklas |
frm.sourceItemType[frm.sourceItemType.length] = new Option(listMemberType, listMemberType, false, true); |
7604 |
25 Feb 19 |
nicklas |
98 |
} |
7604 |
25 Feb 19 |
nicklas |
else |
7604 |
25 Feb 19 |
nicklas |
100 |
{ |
7604 |
25 Feb 19 |
nicklas |
var allowedItems = transform == 'PARENT_TO_CHILD' ? allowedParentItems : allowedChildItems; |
7604 |
25 Feb 19 |
nicklas |
frm.sourceItemType.length = 0; |
7604 |
25 Feb 19 |
nicklas |
var sourceItemType = Data.get('page-data', 'source-item-type'); |
7604 |
25 Feb 19 |
nicklas |
for (var i = 0; i < allowedItems.length; i++) |
7604 |
25 Feb 19 |
nicklas |
105 |
{ |
7604 |
25 Feb 19 |
nicklas |
var item = allowedItems[i]; |
7604 |
25 Feb 19 |
nicklas |
frm.sourceItemType[frm.sourceItemType.length] = new Option(item.title, item.name, false, item.name == sourceItemType); |
7604 |
25 Feb 19 |
nicklas |
108 |
} |
7604 |
25 Feb 19 |
nicklas |
Doc.show('parent-child-transform', 'inline'); |
7604 |
25 Feb 19 |
nicklas |
Doc.hide('none-transform'); |
7604 |
25 Feb 19 |
nicklas |
111 |
} |
7604 |
25 Feb 19 |
nicklas |
sf.sourceItemTypeOnChange(); |
7604 |
25 Feb 19 |
nicklas |
113 |
} |
7604 |
25 Feb 19 |
nicklas |
114 |
|
7604 |
25 Feb 19 |
nicklas |
115 |
/** |
7604 |
25 Feb 19 |
nicklas |
When the source item changes, we submit an AJAX query to get |
7604 |
25 Feb 19 |
nicklas |
the current filter setting. |
7604 |
25 Feb 19 |
nicklas |
118 |
*/ |
7604 |
25 Feb 19 |
nicklas |
sf.sourceItemTypeOnChange = function() |
7604 |
25 Feb 19 |
nicklas |
120 |
{ |
7604 |
25 Feb 19 |
nicklas |
var frm = document.forms['syncfilter']; |
7604 |
25 Feb 19 |
nicklas |
var url = 'ajax.jsp?ID='+App.getSessionId(); |
7604 |
25 Feb 19 |
nicklas |
url += '&cmd=GetCurrentFilter'; |
7604 |
25 Feb 19 |
nicklas |
url += '&sourceItemType='+frm.sourceItemType.value; |
7604 |
25 Feb 19 |
nicklas |
url += '&sourceItemTransform='+frm.sourceItemTransform.value; |
7604 |
25 Feb 19 |
nicklas |
126 |
|
7604 |
25 Feb 19 |
nicklas |
var request = Ajax.getXmlHttpRequest(); |
7604 |
25 Feb 19 |
nicklas |
request.open("GET", url, true); |
7604 |
25 Feb 19 |
nicklas |
Ajax.setReadyStateHandler(request, sf.filterInfoLoaded); |
7604 |
25 Feb 19 |
nicklas |
request.send(null); |
7604 |
25 Feb 19 |
nicklas |
131 |
} |
7604 |
25 Feb 19 |
nicklas |
132 |
|
7604 |
25 Feb 19 |
nicklas |
133 |
/** |
7604 |
25 Feb 19 |
nicklas |
Display the current filter. |
7604 |
25 Feb 19 |
nicklas |
135 |
*/ |
7604 |
25 Feb 19 |
nicklas |
sf.filterInfoLoaded = function(request) |
7604 |
25 Feb 19 |
nicklas |
137 |
{ |
7604 |
25 Feb 19 |
nicklas |
var info = JSON.parse(request.responseText); |
7604 |
25 Feb 19 |
nicklas |
if (info && info.status == 'ok') |
7604 |
25 Feb 19 |
nicklas |
140 |
{ |
7604 |
25 Feb 19 |
nicklas |
filter = info.filter; |
7604 |
25 Feb 19 |
nicklas |
Doc.element('filter-info').innerHTML = filter || '<i>no filter</i>'; |
7604 |
25 Feb 19 |
nicklas |
143 |
} |
7604 |
25 Feb 19 |
nicklas |
144 |
} |
7604 |
25 Feb 19 |
nicklas |
145 |
|
7604 |
25 Feb 19 |
nicklas |
146 |
/** |
7604 |
25 Feb 19 |
nicklas |
When the modify button is clicked we start by issuing an ajax |
7604 |
25 Feb 19 |
nicklas |
request to copy the current filter to the current context. |
7604 |
25 Feb 19 |
nicklas |
149 |
|
7604 |
25 Feb 19 |
nicklas |
When the filter has been copied (sf.filterHasBeenCopied) |
7604 |
25 Feb 19 |
nicklas |
the dialog is opened. |
7604 |
25 Feb 19 |
nicklas |
152 |
*/ |
7604 |
25 Feb 19 |
nicklas |
sf.modifyFilter = function() |
7604 |
25 Feb 19 |
nicklas |
154 |
{ |
7604 |
25 Feb 19 |
nicklas |
var frm = document.forms['syncfilter']; |
7604 |
25 Feb 19 |
nicklas |
var url = 'ajax.jsp?ID='+App.getSessionId(); |
7604 |
25 Feb 19 |
nicklas |
url += '&cmd=CopySyncFilterToItemContext'; |
7604 |
25 Feb 19 |
nicklas |
url += '&sourceItemType='+frm.sourceItemType.value; |
7604 |
25 Feb 19 |
nicklas |
159 |
|
7604 |
25 Feb 19 |
nicklas |
var request = Ajax.getXmlHttpRequest(); |
7604 |
25 Feb 19 |
nicklas |
request.open("GET", url, true); |
7604 |
25 Feb 19 |
nicklas |
Ajax.setReadyStateHandler(request, sf.filterHasBeenCopied); |
7604 |
25 Feb 19 |
nicklas |
request.send(null); |
7604 |
25 Feb 19 |
nicklas |
164 |
} |
7604 |
25 Feb 19 |
nicklas |
165 |
|
7604 |
25 Feb 19 |
nicklas |
// When we are sure the current filter is in the item context, |
7604 |
25 Feb 19 |
nicklas |
// open the dialog |
7604 |
25 Feb 19 |
nicklas |
sf.filterHasBeenCopied = function(request) |
7604 |
25 Feb 19 |
nicklas |
169 |
{ |
7604 |
25 Feb 19 |
nicklas |
var frm = document.forms['syncfilter']; |
7604 |
25 Feb 19 |
nicklas |
Dialogs.selectItem(frm.sourceItemType.value, 'btnModifyFilter', 'selectfilter'); |
7604 |
25 Feb 19 |
nicklas |
172 |
} |
7604 |
25 Feb 19 |
nicklas |
173 |
|
7604 |
25 Feb 19 |
nicklas |
174 |
/** |
7604 |
25 Feb 19 |
nicklas |
When closing the dialog we react to the 'base-selected-start' |
7604 |
25 Feb 19 |
nicklas |
event and issue an ajax request to copy the current context |
7604 |
25 Feb 19 |
nicklas |
into the current filter. |
7604 |
25 Feb 19 |
nicklas |
178 |
*/ |
7604 |
25 Feb 19 |
nicklas |
sf.sourceFilterModified = function(event) |
7604 |
25 Feb 19 |
nicklas |
180 |
{ |
7604 |
25 Feb 19 |
nicklas |
var frm = document.forms['syncfilter']; |
7604 |
25 Feb 19 |
nicklas |
var url = 'ajax.jsp?ID='+App.getSessionId(); |
7604 |
25 Feb 19 |
nicklas |
url += '&cmd=CopyItemContextToSyncFilter'; |
7604 |
25 Feb 19 |
nicklas |
url += '&sourceItemType='+frm.sourceItemType.value; |
7604 |
25 Feb 19 |
nicklas |
url += '&sourceItemTransform='+frm.sourceItemTransform.value; |
7604 |
25 Feb 19 |
nicklas |
186 |
|
7604 |
25 Feb 19 |
nicklas |
var request = Ajax.getXmlHttpRequest(); |
7604 |
25 Feb 19 |
nicklas |
request.open("GET", url, true); |
7604 |
25 Feb 19 |
nicklas |
Ajax.setReadyStateHandler(request, sf.filterInfoLoaded); |
7604 |
25 Feb 19 |
nicklas |
request.send(null); |
7604 |
25 Feb 19 |
nicklas |
191 |
} |
7604 |
25 Feb 19 |
nicklas |
192 |
|
7604 |
25 Feb 19 |
nicklas |
// Submit the form |
7604 |
25 Feb 19 |
nicklas |
sf.save = function() |
7604 |
25 Feb 19 |
nicklas |
195 |
{ |
7604 |
25 Feb 19 |
nicklas |
var frm = document.forms['syncfilter']; |
7604 |
25 Feb 19 |
nicklas |
if (TabControl.validateActiveTab('settings')) |
7604 |
25 Feb 19 |
nicklas |
198 |
{ |
7604 |
25 Feb 19 |
nicklas |
frm.submit(); |
7604 |
25 Feb 19 |
nicklas |
200 |
} |
7604 |
25 Feb 19 |
nicklas |
201 |
} |
7604 |
25 Feb 19 |
nicklas |
202 |
|
7604 |
25 Feb 19 |
nicklas |
return sf; |
7604 |
25 Feb 19 |
nicklas |
204 |
}(); |
7604 |
25 Feb 19 |
nicklas |
205 |
|
7604 |
25 Feb 19 |
nicklas |
Doc.onLoad(SyncFilter.initPage); |