www/common/annotations/batch_inherit.js

Code
Comments
Other
Rev Date Author Line
7604 25 Feb 19 nicklas 1 /* $Id $
7604 25 Feb 19 nicklas 2   ------------------------------------------------------------------
7604 25 Feb 19 nicklas 3   Copyright (C) 2015 Nicklas Nordborg
7604 25 Feb 19 nicklas 4
7604 25 Feb 19 nicklas 5   This file is part of BASE - BioArray Software Environment.
7604 25 Feb 19 nicklas 6   Available at http://base.thep.lu.se/
7604 25 Feb 19 nicklas 7
7604 25 Feb 19 nicklas 8   BASE is free software; you can redistribute it and/or
7604 25 Feb 19 nicklas 9   modify it under the terms of the GNU General Public License
7604 25 Feb 19 nicklas 10   as published by the Free Software Foundation; either version 3
7604 25 Feb 19 nicklas 11   of the License, or (at your option) any later version.
7604 25 Feb 19 nicklas 12
7604 25 Feb 19 nicklas 13   BASE is distributed in the hope that it will be useful,
7604 25 Feb 19 nicklas 14   but WITHOUT ANY WARRANTY; without even the implied warranty of
7604 25 Feb 19 nicklas 15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
7604 25 Feb 19 nicklas 16   GNU General Public License for more details.
7604 25 Feb 19 nicklas 17
7604 25 Feb 19 nicklas 18   You should have received a copy of the GNU General Public License
7604 25 Feb 19 nicklas 19   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 22   @author Nicklas
7604 25 Feb 19 nicklas 23 */
7604 25 Feb 19 nicklas 24 'use strict';
7604 25 Feb 19 nicklas 25
7604 25 Feb 19 nicklas 26 var Inherit = function()
7604 25 Feb 19 nicklas 27 {
7604 25 Feb 19 nicklas 28   var inherit = {};
7604 25 Feb 19 nicklas 29   var noneSelectedRow;
7604 25 Feb 19 nicklas 30   
7604 25 Feb 19 nicklas 31   var selectedAnnotationTypes = [];
7604 25 Feb 19 nicklas 32   var allowedAnnotationTypes = [];
7604 25 Feb 19 nicklas 33
7604 25 Feb 19 nicklas 34   inherit.initPage = function()
7604 25 Feb 19 nicklas 35   {
7604 25 Feb 19 nicklas 36     // Buttons
7604 25 Feb 19 nicklas 37     Buttons.addClickHandler('close', App.closeWindow);
7604 25 Feb 19 nicklas 38     Buttons.addClickHandler('btnSave', inherit.save);
7604 25 Feb 19 nicklas 39     
7604 25 Feb 19 nicklas 40     Buttons.addClickHandler('btnSelectAnnotationTypes', inherit.selectAnnotationTypes);
7604 25 Feb 19 nicklas 41     Events.addEventHandler('btnSelectAnnotationTypes', 'base-selected', inherit.annotationTypeSelected);
7604 25 Feb 19 nicklas 42     
7604 25 Feb 19 nicklas 43     noneSelectedRow = Doc.element('none-selected').parentNode.parentNode;
7604 25 Feb 19 nicklas 44     
7604 25 Feb 19 nicklas 45     var annotationTypes = Data.json('page-data', 'annotation-types');
7604 25 Feb 19 nicklas 46     if (annotationTypes)
7604 25 Feb 19 nicklas 47     {
7604 25 Feb 19 nicklas 48       for (var i = 0; i < annotationTypes.length; i++)
7604 25 Feb 19 nicklas 49       {
7604 25 Feb 19 nicklas 50         var at = annotationTypes[i];
7604 25 Feb 19 nicklas 51         inherit.addAnnotationType(at);
7604 25 Feb 19 nicklas 52         inherit.addMoreAnnotationTypeInfo(at);
7604 25 Feb 19 nicklas 53       }
7604 25 Feb 19 nicklas 54     }
7604 25 Feb 19 nicklas 55   }
7604 25 Feb 19 nicklas 56   
7604 25 Feb 19 nicklas 57   
7604 25 Feb 19 nicklas 58   inherit.selectAnnotationTypes = function(event)
7604 25 Feb 19 nicklas 59   {
7604 25 Feb 19 nicklas 60     var url = '&resetTemporary=1&tmpfilter:BOOLEAN:disableInheritance=false';
7604 25 Feb 19 nicklas 61     url += '&exclude='+selectedAnnotationTypes.join(',');
7604 25 Feb 19 nicklas 62     Dialogs.selectItem('ANNOTATIONTYPE', event.currentTarget.id, 1, url);
7604 25 Feb 19 nicklas 63   }
7604 25 Feb 19 nicklas 64
7604 25 Feb 19 nicklas 65   inherit.annotationTypeSelected = function(event)
7604 25 Feb 19 nicklas 66   {
7604 25 Feb 19 nicklas 67     var item = event.detail;
7604 25 Feb 19 nicklas 68     if (Doc.element('at-'+item.id)) return;
7604 25 Feb 19 nicklas 69     
7604 25 Feb 19 nicklas 70     inherit.addAnnotationType(item);
7604 25 Feb 19 nicklas 71     
7604 25 Feb 19 nicklas 72     var request = Ajax.getXmlHttpRequest();
7604 25 Feb 19 nicklas 73     var url = 'ajax.jsp?ID='+App.getSessionId();
7604 25 Feb 19 nicklas 74     url += '&cmd=GetAnnotationTypeInfo&item_id=' + item.id;
7604 25 Feb 19 nicklas 75     request.open("GET", url, true);
7604 25 Feb 19 nicklas 76     request.send(null);
7604 25 Feb 19 nicklas 77     Ajax.setReadyStateHandler(request, inherit.annotationTypeInfoLoaded, inherit.annotationTypeInfoLoaded);
7604 25 Feb 19 nicklas 78   }
7604 25 Feb 19 nicklas 79   
7604 25 Feb 19 nicklas 80   inherit.annotationTypeInfoLoaded = function(request)
7604 25 Feb 19 nicklas 81   {
7604 25 Feb 19 nicklas 82     var response = JSON.parse(request.responseText);
7604 25 Feb 19 nicklas 83     if (response.status != 'ok')
7604 25 Feb 19 nicklas 84     {
7604 25 Feb 19 nicklas 85       App.debug(request.responseText);
7604 25 Feb 19 nicklas 86       return;
7604 25 Feb 19 nicklas 87     }
7604 25 Feb 19 nicklas 88     
7604 25 Feb 19 nicklas 89     inherit.addMoreAnnotationTypeInfo(response.annotationType);
7604 25 Feb 19 nicklas 90   }
7604 25 Feb 19 nicklas 91   
7604 25 Feb 19 nicklas 92   inherit.addAnnotationType = function(item)
7604 25 Feb 19 nicklas 93   {
7604 25 Feb 19 nicklas 94     var frm = document.forms['annotations'];
7604 25 Feb 19 nicklas 95     selectedAnnotationTypes[selectedAnnotationTypes.length] = item.id;
7604 25 Feb 19 nicklas 96     
7604 25 Feb 19 nicklas 97     var tr = document.createElement('tr');
8013 13 Aug 21 nicklas 98     tr.className = 'row highlight ' + (selectedAnnotationTypes.length % 2 == 0 ? 'bg-evenrow' : 'bg-oddrow');
7604 25 Feb 19 nicklas 99     tr.id = 'at-'+item.id;
7604 25 Feb 19 nicklas 100
7604 25 Feb 19 nicklas 101     var html = '<td class="cell">'+Strings.encodeTags(item.name)+'</td>';
7604 25 Feb 19 nicklas 102     html += '<td class="cell">';
7604 25 Feb 19 nicklas 103     html += '<select name="action_'+item.id+'" data-item-id="'+item.id+'">';
7604 25 Feb 19 nicklas 104     html += '<option value="inherit" selected>Inherit from: ';
7604 25 Feb 19 nicklas 105     html += '<option value="clone">Clone from: ';
7604 25 Feb 19 nicklas 106     html += '<option value="resync">Re-sync cloned';
7604 25 Feb 19 nicklas 107     html += '<option value="remove">Remove';
7604 25 Feb 19 nicklas 108     html += '</select>';
7604 25 Feb 19 nicklas 109     html += '</td>';
7604 25 Feb 19 nicklas 110     html += '<td class="cell">';
7604 25 Feb 19 nicklas 111     html += '<select name="from_'+item.id+'" id="from_'+item.id+'">';
7604 25 Feb 19 nicklas 112     html += '<option value="">- any parent -';
7604 25 Feb 19 nicklas 113     html += '</select>';
7604 25 Feb 19 nicklas 114     html += '</td>'
7604 25 Feb 19 nicklas 115     html += '<td class="cell">';
7604 25 Feb 19 nicklas 116     html += '<label><input type="checkbox" name="nodup_'+item.id+'" checked>No duplicates</label> ';
7604 25 Feb 19 nicklas 117     html += '<label><input type="checkbox" name="replace_'+item.id+'" checked>Replace existing</label>';
7604 25 Feb 19 nicklas 118     html += '</td>';
7604 25 Feb 19 nicklas 119     tr.innerHTML = html;
7604 25 Feb 19 nicklas 120     
7604 25 Feb 19 nicklas 121     var section = Doc.element('selectedAnnotationTypes');
7604 25 Feb 19 nicklas 122     section.insertBefore(tr, noneSelectedRow);
7604 25 Feb 19 nicklas 123     Doc.hide(noneSelectedRow);
7604 25 Feb 19 nicklas 124
7604 25 Feb 19 nicklas 125     Forms.linkCheckboxesWithLabels(tr);
7604 25 Feb 19 nicklas 126     Events.addEventHandler(frm['action_'+item.id], 'change', inherit.actionOnChange);
7604 25 Feb 19 nicklas 127   }
7604 25 Feb 19 nicklas 128   
7604 25 Feb 19 nicklas 129   inherit.addMoreAnnotationTypeInfo = function(item)
7604 25 Feb 19 nicklas 130   {
7604 25 Feb 19 nicklas 131     if (item.disableInheritance)
7604 25 Feb 19 nicklas 132     {
7604 25 Feb 19 nicklas 133       var frm = document.forms['annotations'];
7604 25 Feb 19 nicklas 134       var action = frm['action_'+item.id];
7604 25 Feb 19 nicklas 135       action.length = 0;
7604 25 Feb 19 nicklas 136       action[0] = new Option('Inheritance disabled');
7604 25 Feb 19 nicklas 137       action.disabled = true;
7604 25 Feb 19 nicklas 138       frm['from_'+item.id].disabled = true;
7604 25 Feb 19 nicklas 139       frm['nodup_'+item.id].disabled = true;
7604 25 Feb 19 nicklas 140       frm['replace_'+item.id].disabled = true;
7604 25 Feb 19 nicklas 141       return;
7604 25 Feb 19 nicklas 142     }
7604 25 Feb 19 nicklas 143     
7604 25 Feb 19 nicklas 144     allowedAnnotationTypes[allowedAnnotationTypes.length] = item.id;
7604 25 Feb 19 nicklas 145     var selection = Doc.element('from_'+item.id);
7604 25 Feb 19 nicklas 146     for (var i = 0; i < item.subtypes.length; i++)
7604 25 Feb 19 nicklas 147     {
7604 25 Feb 19 nicklas 148       var subtype = item.subtypes[i];
7604 25 Feb 19 nicklas 149       selection[selection.length] = new Option(subtype.name + ' ('+subtype.itemType.toLowerCase()+')', subtype.id, false, subtype.selected);
7604 25 Feb 19 nicklas 150     }
7604 25 Feb 19 nicklas 151     
7604 25 Feb 19 nicklas 152     if (item.plateTypes)
7604 25 Feb 19 nicklas 153     {
7604 25 Feb 19 nicklas 154       for (var i = 0; i < item.plateTypes.length; i++)
7604 25 Feb 19 nicklas 155       {
7604 25 Feb 19 nicklas 156         var plateType = atInfo.plateTypes[i];
7604 25 Feb 19 nicklas 157         selection[selection.length] = new Option(plateType.name + ' (bioplate)', plateType.subtype.id);
7604 25 Feb 19 nicklas 158       }
7604 25 Feb 19 nicklas 159       if (selection.selectedIndex == 0) selection.selectedIndex = 1;
7604 25 Feb 19 nicklas 160     }
7604 25 Feb 19 nicklas 161   }
7604 25 Feb 19 nicklas 162   
7604 25 Feb 19 nicklas 163
7604 25 Feb 19 nicklas 164   inherit.actionOnChange = function(event)
7604 25 Feb 19 nicklas 165   {
7604 25 Feb 19 nicklas 166     var frm = document.forms['annotations'];
7604 25 Feb 19 nicklas 167     
7604 25 Feb 19 nicklas 168     var target = event.currentTarget;
7604 25 Feb 19 nicklas 169     var itemId = Data.get(target, 'item-id');
7604 25 Feb 19 nicklas 170     var disabled = target.value == 'remove' || target.value == 'resync';
7604 25 Feb 19 nicklas 171
7604 25 Feb 19 nicklas 172     frm['from_'+itemId].disabled = disabled;
7604 25 Feb 19 nicklas 173     frm['nodup_'+itemId].disabled = disabled;
7604 25 Feb 19 nicklas 174     frm['replace_'+itemId].disabled = disabled;
7604 25 Feb 19 nicklas 175   }
7604 25 Feb 19 nicklas 176   
7604 25 Feb 19 nicklas 177   inherit.save = function()
7604 25 Feb 19 nicklas 178   {
7604 25 Feb 19 nicklas 179     if (allowedAnnotationTypes.length == 0)
7604 25 Feb 19 nicklas 180     {
7604 25 Feb 19 nicklas 181       Forms.showNotification('btnSelectAnnotationTypes', 'Please select annotation types to inherit!');
7604 25 Feb 19 nicklas 182       return;
7604 25 Feb 19 nicklas 183     }
7604 25 Feb 19 nicklas 184     var frm = document.forms['annotations'];
7604 25 Feb 19 nicklas 185     frm.cmd.value = 'BatchInherit';
7604 25 Feb 19 nicklas 186     Forms.addHidden(frm, 'annotationTypes', allowedAnnotationTypes.join(','));
7604 25 Feb 19 nicklas 187     frm.submit();
7604 25 Feb 19 nicklas 188   }
7604 25 Feb 19 nicklas 189   
7604 25 Feb 19 nicklas 190   return inherit;
7604 25 Feb 19 nicklas 191 }();
7604 25 Feb 19 nicklas 192
7604 25 Feb 19 nicklas 193 Doc.onLoad(Inherit.initPage);
7604 25 Feb 19 nicklas 194
7604 25 Feb 19 nicklas 195