www/common/annotations/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) 2012 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 joustTree;
7604 25 Feb 19 nicklas 30
7604 25 Feb 19 nicklas 31   inherit.initPage = function()
7604 25 Feb 19 nicklas 32   {
7604 25 Feb 19 nicklas 33     // Buttons (on standalone dialog)
7604 25 Feb 19 nicklas 34     Buttons.addClickHandler('close', App.closeWindow);
7604 25 Feb 19 nicklas 35     Buttons.addClickHandler('btnInherit', inherit.save);
7604 25 Feb 19 nicklas 36     Buttons.addClickHandler('btnClone', inherit.save);
7604 25 Feb 19 nicklas 37     
7604 25 Feb 19 nicklas 38     Events.addEventHandler('quickFilter', 'keyup', inherit.quickFilter);
7604 25 Feb 19 nicklas 39   
7604 25 Feb 19 nicklas 40     IconStore.addDefaultIcons();
7604 25 Feb 19 nicklas 41     IconStore.addIconSet('Annotatable', 'item.png');
7604 25 Feb 19 nicklas 42     IconStore.addIconSet('Annotation', 'annotation.png');
7604 25 Feb 19 nicklas 43     IconStore.addIconSet('Parameter', 'parameter.png');
7604 25 Feb 19 nicklas 44     IconStore.addIconSet('NonParent', 'item-error.png');
7604 25 Feb 19 nicklas 45
7604 25 Feb 19 nicklas 46     Events.addEventHandler('joust', 'joust-select', inherit.onSelect);
7604 25 Feb 19 nicklas 47     Joust2.draw('joust');
7604 25 Feb 19 nicklas 48     joustTree = Data.json('joust', 'joust-tree');
7604 25 Feb 19 nicklas 49   }
7604 25 Feb 19 nicklas 50
7604 25 Feb 19 nicklas 51   /**
7604 25 Feb 19 nicklas 52     Display annotation values in the right frame.
7604 25 Feb 19 nicklas 53   */
7604 25 Feb 19 nicklas 54   inherit.onSelect = function(event)
7604 25 Feb 19 nicklas 55   {
7604 25 Feb 19 nicklas 56     var frm = document.forms['annotations'];
7604 25 Feb 19 nicklas 57     var menuItem = event.target.item;
7604 25 Feb 19 nicklas 58     if (menuItem.type == 'annotation')
7604 25 Feb 19 nicklas 59     {
7604 25 Feb 19 nicklas 60       Doc.element('annotationType').innerHTML = menuItem.annotationType;
7604 25 Feb 19 nicklas 61       Doc.element('annotationValues').innerHTML = menuItem.values;
7604 25 Feb 19 nicklas 62       menuItem.modified = menuItem.inherited != frm[menuItem.id].checked;
7604 25 Feb 19 nicklas 63     }
7604 25 Feb 19 nicklas 64     else if (menuItem.type == 'annotation-set')
7604 25 Feb 19 nicklas 65     {
7604 25 Feb 19 nicklas 66       if (menuItem.children)
7604 25 Feb 19 nicklas 67       {
7604 25 Feb 19 nicklas 68         var checked = frm[menuItem.id].checked;
7604 25 Feb 19 nicklas 69         // If the annotation-set is checked all child items should
7604 25 Feb 19 nicklas 70         // be checked and disabled
7604 25 Feb 19 nicklas 71         // If the annotation-set is not checked all child items should
7604 25 Feb 19 nicklas 72         // be enabled and check if they are currently inherited
7604 25 Feb 19 nicklas 73         for (var childNo = 0; childNo < menuItem.children.length; childNo++)
7604 25 Feb 19 nicklas 74         {
7604 25 Feb 19 nicklas 75           var child = menuItem.children[childNo];
7604 25 Feb 19 nicklas 76           frm[child.id].checked = checked || (child.inherited != child.modified);
7604 25 Feb 19 nicklas 77           frm[child.id].disabled = checked;
7604 25 Feb 19 nicklas 78         }
7604 25 Feb 19 nicklas 79       }
7604 25 Feb 19 nicklas 80     }
7604 25 Feb 19 nicklas 81     
7604 25 Feb 19 nicklas 82   }
7604 25 Feb 19 nicklas 83   
7604 25 Feb 19 nicklas 84   inherit.saveInheritedAnnotations = function(clone)
7604 25 Feb 19 nicklas 85   {
7604 25 Feb 19 nicklas 86     var tree = Doc.element('joust');
7604 25 Feb 19 nicklas 87     var target = window.top.opener.document.getElementById(Data.get('page-data', 'callback'));
7604 25 Feb 19 nicklas 88     
7604 25 Feb 19 nicklas 89     var frm = document.forms['annotations'];
7604 25 Feb 19 nicklas 90     var menuElements = tree.getElementsByClassName('joustitem');
7604 25 Feb 19 nicklas 91     for (var menuNo = 0; menuNo < menuElements.length; menuNo++)
7604 25 Feb 19 nicklas 92     {
7604 25 Feb 19 nicklas 93       var menuElement = menuElements[menuNo];
7604 25 Feb 19 nicklas 94       var menuItem = menuElement.item;
7604 25 Feb 19 nicklas 95       
7604 25 Feb 19 nicklas 96       var wasInherited = menuItem.inherited;
7604 25 Feb 19 nicklas 97       var isInherited = frm[menuItem.id].checked;
7604 25 Feb 19 nicklas 98       if (wasInherited != isInherited)
7604 25 Feb 19 nicklas 99       {
7604 25 Feb 19 nicklas 100         if (menuItem.type == 'annotation')
7604 25 Feb 19 nicklas 101         {
7604 25 Feb 19 nicklas 102           var detail = {};
7604 25 Feb 19 nicklas 103           detail.id = menuItem.externalId;
7604 25 Feb 19 nicklas 104           detail.clone = clone;
7604 25 Feb 19 nicklas 105           if (isInherited) 
7604 25 Feb 19 nicklas 106           {
7604 25 Feb 19 nicklas 107             Events.sendCustomEvent(target, 'inherit-annotation', detail);
7604 25 Feb 19 nicklas 108           }
7604 25 Feb 19 nicklas 109           else
7604 25 Feb 19 nicklas 110           {
7604 25 Feb 19 nicklas 111             Events.sendCustomEvent(target, 'remove-annotation', detail);  
7604 25 Feb 19 nicklas 112           }
7604 25 Feb 19 nicklas 113         }
7604 25 Feb 19 nicklas 114       }
7604 25 Feb 19 nicklas 115     }
7604 25 Feb 19 nicklas 116   }
7604 25 Feb 19 nicklas 117
7604 25 Feb 19 nicklas 118   inherit.quickFilter = function()
7604 25 Feb 19 nicklas 119   {
7604 25 Feb 19 nicklas 120     var frm = document.forms['annotations'];
7604 25 Feb 19 nicklas 121     var filter = frm.quickFilter.value.toLowerCase();
7604 25 Feb 19 nicklas 122     var totalVisible = 0;
7604 25 Feb 19 nicklas 123     for (var itemNo = 0; itemNo < joustTree.length; itemNo++)
7604 25 Feb 19 nicklas 124     {
7604 25 Feb 19 nicklas 125       var menuItem = joustTree[itemNo];
7604 25 Feb 19 nicklas 126       var childrenVisible = 0;
7604 25 Feb 19 nicklas 127       for (var childNo = 0; childNo < menuItem.children.length; childNo++)
7604 25 Feb 19 nicklas 128       {
7604 25 Feb 19 nicklas 129         var childItem = menuItem.children[childNo];
7604 25 Feb 19 nicklas 130         var visible = !filter || childItem.annotationType.toLowerCase().indexOf(filter)>=0;
7604 25 Feb 19 nicklas 131         Doc.showHide(childItem.id, visible);
7604 25 Feb 19 nicklas 132         if (visible) childrenVisible++;
7604 25 Feb 19 nicklas 133       }
7604 25 Feb 19 nicklas 134       totalVisible += childrenVisible;
7604 25 Feb 19 nicklas 135       Doc.showHide(menuItem.id, childrenVisible > 0);
7604 25 Feb 19 nicklas 136     }
7604 25 Feb 19 nicklas 137
7604 25 Feb 19 nicklas 138     Doc.showHide('noMatchingFilter', totalVisible == 0);
7604 25 Feb 19 nicklas 139   }
7604 25 Feb 19 nicklas 140     
7604 25 Feb 19 nicklas 141     
7604 25 Feb 19 nicklas 142   /**
7604 25 Feb 19 nicklas 143     Save the annotations in standalone mode.
7604 25 Feb 19 nicklas 144   */
7604 25 Feb 19 nicklas 145   inherit.save = function(event)
7604 25 Feb 19 nicklas 146   {
7604 25 Feb 19 nicklas 147     var clone = Data.int(event.currentTarget, 'clone', 0);
7604 25 Feb 19 nicklas 148     inherit.saveInheritedAnnotations(clone);
7604 25 Feb 19 nicklas 149     App.closeWindow();
7604 25 Feb 19 nicklas 150   }
7604 25 Feb 19 nicklas 151
7604 25 Feb 19 nicklas 152   return inherit;
7604 25 Feb 19 nicklas 153 }();
7604 25 Feb 19 nicklas 154
7604 25 Feb 19 nicklas 155 Doc.onLoad(Inherit.initPage);
7604 25 Feb 19 nicklas 156
7604 25 Feb 19 nicklas 157