www/common/datafiles/datafiles.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) 2013 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 DataFiles = function()
7604 25 Feb 19 nicklas 27 {
7604 25 Feb 19 nicklas 28   var datafiles = {};
7604 25 Feb 19 nicklas 29   var internal = {};
7604 25 Feb 19 nicklas 30   
7604 25 Feb 19 nicklas 31   var fileTypes;
7604 25 Feb 19 nicklas 32   var fileActions = [];
7604 25 Feb 19 nicklas 33   var visibleRecentFilesDiv;
7604 25 Feb 19 nicklas 34   
7604 25 Feb 19 nicklas 35   var editFrameLoaded = false;
7604 25 Feb 19 nicklas 36   var lastPlatformId = null;
7604 25 Feb 19 nicklas 37   var lastVariantId = null;
7604 25 Feb 19 nicklas 38   var lastSubtypeId = null;
7604 25 Feb 19 nicklas 39   
7604 25 Feb 19 nicklas 40   datafiles.initPage = function()
7604 25 Feb 19 nicklas 41   {
7604 25 Feb 19 nicklas 42     var pageId = Doc.getPageId();
7604 25 Feb 19 nicklas 43     if (pageId == 'select-datafiles')
7604 25 Feb 19 nicklas 44     {
7604 25 Feb 19 nicklas 45       // Parse the current filetype information
7604 25 Feb 19 nicklas 46       fileTypes = Data.json('page-data', 'filetypes');
7604 25 Feb 19 nicklas 47       for (var i = 0; i < fileTypes.length; i++)
7604 25 Feb 19 nicklas 48       {
7604 25 Feb 19 nicklas 49         var fileType = fileTypes[i];
7604 25 Feb 19 nicklas 50         fileTypes['ID'+fileType.id] = fileType;
7604 25 Feb 19 nicklas 51         
7604 25 Feb 19 nicklas 52         var attributes = {'filetype-id': fileType.id};
7604 25 Feb 19 nicklas 53         // 'Browse' button, click to open file dialog, 'base-selected' to receive selected files
7604 25 Feb 19 nicklas 54         Events.addEventHandler('browsefile.'+fileType.id, 'click', datafiles.browseOnClick, attributes);
7604 25 Feb 19 nicklas 55         Events.addEventHandler('browsefile.'+fileType.id, 'base-selected', datafiles.onFileSelected);
7604 25 Feb 19 nicklas 56
7604 25 Feb 19 nicklas 57         // 'Add' button, click to open file dialog, 'base-selected' to receive selected files
7604 25 Feb 19 nicklas 58         Events.addEventHandler('addfile.'+fileType.id, 'click', datafiles.addOnClick, attributes);
7604 25 Feb 19 nicklas 59         Events.addEventHandler('addfile.'+fileType.id, 'base-selected', datafiles.onFileSelected);
7604 25 Feb 19 nicklas 60
7604 25 Feb 19 nicklas 61         // Remove file handler is attached to file list, but need target file
7604 25 Feb 19 nicklas 62         Events.addEventHandler('filelist.'+fileType.id, 'click', datafiles.removeOnClick, attributes);
7604 25 Feb 19 nicklas 63         
7604 25 Feb 19 nicklas 64         // Show recent files list, and handle recent file selection
7604 25 Feb 19 nicklas 65         Events.addEventHandler('showrecent.'+fileType.id, 'click', datafiles.showRecentFilesOnClick, attributes);
7604 25 Feb 19 nicklas 66         Events.addEventHandler('recentfiles.'+fileType.id, 'click', datafiles.recentFileOnClick, attributes);
7604 25 Feb 19 nicklas 67         
7604 25 Feb 19 nicklas 68         //Events.addEventHandler('addfile.'+fileType.id, 'click', datafiles.addOnClick, attributes);
7604 25 Feb 19 nicklas 69       }
7604 25 Feb 19 nicklas 70
7604 25 Feb 19 nicklas 71       // Hide 'recently used files' list if visible
7604 25 Feb 19 nicklas 72       Events.addEventHandler(document.body, 'click', datafiles.hideVisibleRecentFilesDiv);
7604 25 Feb 19 nicklas 73     }
7604 25 Feb 19 nicklas 74   }
7604 25 Feb 19 nicklas 75   
7604 25 Feb 19 nicklas 76   /*
7604 25 Feb 19 nicklas 77     Event handler for showing the list of recently used files for
7604 25 Feb 19 nicklas 78     a given data file type.
7604 25 Feb 19 nicklas 79   */
7604 25 Feb 19 nicklas 80   datafiles.showRecentFilesOnClick = function(event)
7604 25 Feb 19 nicklas 81   {
7604 25 Feb 19 nicklas 82     var target = event.currentTarget;
7604 25 Feb 19 nicklas 83     var fileTypeId = Data.get(target, 'filetype-id');
7604 25 Feb 19 nicklas 84     
7604 25 Feb 19 nicklas 85     var recentDiv = Doc.element('recentfiles.'+fileTypeId);
7604 25 Feb 19 nicklas 86     var currentDiv = visibleRecentFilesDiv;
7604 25 Feb 19 nicklas 87     datafiles.hideVisibleRecentFilesDiv();
7604 25 Feb 19 nicklas 88     if (currentDiv == recentDiv) return;
7604 25 Feb 19 nicklas 89     
7604 25 Feb 19 nicklas 90     var fileContainer = Doc.element('container.'+fileTypeId);
7604 25 Feb 19 nicklas 91     var pos = Doc.getElementPosition(fileContainer, true);
7604 25 Feb 19 nicklas 92     Doc.show('recentfiles.'+fileTypeId);
7604 25 Feb 19 nicklas 93       
7604 25 Feb 19 nicklas 94     recentDiv.style.top = (pos.bottom-2) + 'px';
7604 25 Feb 19 nicklas 95     recentDiv.style.left = (pos.left+2) + 'px';
7604 25 Feb 19 nicklas 96     recentDiv.style.width = (pos.width-4) + 'px';
7604 25 Feb 19 nicklas 97
7604 25 Feb 19 nicklas 98     visibleRecentFilesDiv = recentDiv;
7604 25 Feb 19 nicklas 99     event.stopPropagation();
7604 25 Feb 19 nicklas 100   }
7604 25 Feb 19 nicklas 101   
7604 25 Feb 19 nicklas 102   /*
7604 25 Feb 19 nicklas 103     Hide the currently visible 'recently used files' list.
7604 25 Feb 19 nicklas 104    */
7604 25 Feb 19 nicklas 105   datafiles.hideVisibleRecentFilesDiv = function()
7604 25 Feb 19 nicklas 106   {
7604 25 Feb 19 nicklas 107     if (visibleRecentFilesDiv)
7604 25 Feb 19 nicklas 108     {
7604 25 Feb 19 nicklas 109       visibleRecentFilesDiv.style.display = 'none';
7604 25 Feb 19 nicklas 110       visibleRecentFilesDiv = null;
7604 25 Feb 19 nicklas 111     }
7604 25 Feb 19 nicklas 112   }
7604 25 Feb 19 nicklas 113   
7604 25 Feb 19 nicklas 114   /*
7604 25 Feb 19 nicklas 115     Event handler when a user selects a recently used file. The
7604 25 Feb 19 nicklas 116     event handler is attached to the list container, but the target is
7604 25 Feb 19 nicklas 117     an individual file entry.
7604 25 Feb 19 nicklas 118    */
7604 25 Feb 19 nicklas 119   datafiles.recentFileOnClick = function(event)
7604 25 Feb 19 nicklas 120   {
7604 25 Feb 19 nicklas 121     var fileTarget = event.target;
7604 25 Feb 19 nicklas 122     var fileTypeTarget = event.currentTarget;
7604 25 Feb 19 nicklas 123     
7604 25 Feb 19 nicklas 124     var fileTypeId = Data.get(fileTypeTarget, 'filetype-id');
7604 25 Feb 19 nicklas 125     var fileType = fileTypes['ID'+fileTypeId];
7604 25 Feb 19 nicklas 126
7604 25 Feb 19 nicklas 127     var file = {};
7604 25 Feb 19 nicklas 128     file.id = Data.int(fileTarget, 'file-id');
7604 25 Feb 19 nicklas 129     file.name = file.id ? Doc.element('recentfile.'+fileTypeId+'.'+file.id).innerHTML : '';
7604 25 Feb 19 nicklas 130     
7604 25 Feb 19 nicklas 131     if (fileType.allowMultiple && file.id)
7604 25 Feb 19 nicklas 132     {
7604 25 Feb 19 nicklas 133       internal.addFile(fileType, file);
7604 25 Feb 19 nicklas 134     }
7604 25 Feb 19 nicklas 135     else
7604 25 Feb 19 nicklas 136     {
7604 25 Feb 19 nicklas 137       internal.setFile(fileType, file);
7604 25 Feb 19 nicklas 138     }
7604 25 Feb 19 nicklas 139   }
7604 25 Feb 19 nicklas 140   
7604 25 Feb 19 nicklas 141   datafiles.browseOnClick = function(event)
7604 25 Feb 19 nicklas 142   {
7604 25 Feb 19 nicklas 143     var target = event.currentTarget;
7604 25 Feb 19 nicklas 144     var fileTypeId = Data.get(target, 'filetype-id');
7604 25 Feb 19 nicklas 145     var fileType = fileTypes['ID'+fileTypeId];
7604 25 Feb 19 nicklas 146     
7604 25 Feb 19 nicklas 147     var frm = document.forms['datafiles'];
7604 25 Feb 19 nicklas 148     var url = '../../filemanager/index.jsp?ID=' + App.getSessionId();
7604 25 Feb 19 nicklas 149     url += '&cmd=SelectOne&callback='+target.id;
7604 25 Feb 19 nicklas 150     if (fileType.extension)
7604 25 Feb 19 nicklas 151     {
7604 25 Feb 19 nicklas 152       url += '&resetTemporary=1&tmpfilter:STRING:name='+escape('%.' + fileType.extension);
7604 25 Feb 19 nicklas 153     }
7604 25 Feb 19 nicklas 154     else
7604 25 Feb 19 nicklas 155     {
7604 25 Feb 19 nicklas 156       url += '&resetTemporary=1&filter:STRING:name=';
7604 25 Feb 19 nicklas 157     }
7604 25 Feb 19 nicklas 158     
7604 25 Feb 19 nicklas 159     Dialogs.openPopup(url, 'SelectFile', 1050, 700);
7604 25 Feb 19 nicklas 160     event.stopPropagation();
7604 25 Feb 19 nicklas 161   }
7604 25 Feb 19 nicklas 162   
7604 25 Feb 19 nicklas 163   datafiles.onFileSelected = function(event)
7604 25 Feb 19 nicklas 164   {
7604 25 Feb 19 nicklas 165     var target = event.currentTarget;
7604 25 Feb 19 nicklas 166     var fileTypeId = Data.get(target, 'filetype-id');
7604 25 Feb 19 nicklas 167     var fileType = fileTypes['ID'+fileTypeId];
7604 25 Feb 19 nicklas 168     var file = event.detail;
7604 25 Feb 19 nicklas 169     if (fileType.allowMultiple)
7604 25 Feb 19 nicklas 170     {
7604 25 Feb 19 nicklas 171       internal.addFile(fileType, file);
7604 25 Feb 19 nicklas 172     }
7604 25 Feb 19 nicklas 173     else
7604 25 Feb 19 nicklas 174     {
7604 25 Feb 19 nicklas 175       internal.setFile(fileType, file);
7604 25 Feb 19 nicklas 176     }
7604 25 Feb 19 nicklas 177   }
7604 25 Feb 19 nicklas 178   
7604 25 Feb 19 nicklas 179   internal.setFile = function(fileType, file)
7604 25 Feb 19 nicklas 180   {
7604 25 Feb 19 nicklas 181     var frm = document.forms['datafiles'];
7604 25 Feb 19 nicklas 182     var fileDiv = Doc.element('filelist.'+fileType.id);
7604 25 Feb 19 nicklas 183     if (file.id)
7604 25 Feb 19 nicklas 184     {
7604 25 Feb 19 nicklas 185       fileDiv.innerHTML = '<div id="filelist.'+fileType.id+'.'+file.id+'" class="file">'+file.name+'</div>';
7604 25 Feb 19 nicklas 186     }
7604 25 Feb 19 nicklas 187     else
7604 25 Feb 19 nicklas 188     {
7604 25 Feb 19 nicklas 189       fileDiv.innerHTML = '';
7604 25 Feb 19 nicklas 190     }
7604 25 Feb 19 nicklas 191     if (fileType.hasValidator) frm['datafiles.validate'].checked = true;
7604 25 Feb 19 nicklas 192     internal.registerFileAction('setfile', fileType.id, file.id);
7604 25 Feb 19 nicklas 193   }
7604 25 Feb 19 nicklas 194   
7604 25 Feb 19 nicklas 195   datafiles.addOnClick = function(event)
7604 25 Feb 19 nicklas 196   {
7604 25 Feb 19 nicklas 197     var target = event.currentTarget;
7604 25 Feb 19 nicklas 198     var fileTypeId = Data.get(target, 'filetype-id');
7604 25 Feb 19 nicklas 199     var fileType = fileTypes['ID'+fileTypeId];
7604 25 Feb 19 nicklas 200
7604 25 Feb 19 nicklas 201     var frm = document.forms['datafiles'];
7604 25 Feb 19 nicklas 202     var url = '../../filemanager/index.jsp?ID=' + App.getSessionId();
7604 25 Feb 19 nicklas 203     url += '&cmd=SelectMultiple&callback='+target.id;
7604 25 Feb 19 nicklas 204     if (fileType.extension)
7604 25 Feb 19 nicklas 205     {
7604 25 Feb 19 nicklas 206       url += '&resetTemporary=1&tmpfilter:STRING:name='+escape('%.' + fileType.extension);
7604 25 Feb 19 nicklas 207     }
7604 25 Feb 19 nicklas 208     else
7604 25 Feb 19 nicklas 209     {
7604 25 Feb 19 nicklas 210       url += '&resetTemporary=1&filter:STRING:name=';
7604 25 Feb 19 nicklas 211     }
7604 25 Feb 19 nicklas 212     Dialogs.openPopup(url, 'SelectFiles', 1050, 700);
7604 25 Feb 19 nicklas 213     event.stopPropagation();
7604 25 Feb 19 nicklas 214   }
7604 25 Feb 19 nicklas 215   
7604 25 Feb 19 nicklas 216   internal.addFile = function(fileType, file)
7604 25 Feb 19 nicklas 217   {
7604 25 Feb 19 nicklas 218     var frm = document.forms['datafiles'];
7604 25 Feb 19 nicklas 219     var fileDiv = Doc.element('filelist.'+fileType.id + '.' + file.id);
7604 25 Feb 19 nicklas 220     if (fileDiv) return; // This file has already been selected
7604 25 Feb 19 nicklas 221     
7604 25 Feb 19 nicklas 222     fileDiv = document.createElement('div');
7604 25 Feb 19 nicklas 223     fileDiv.id = 'filelist.'+fileType.id+'.'+file.id;
7604 25 Feb 19 nicklas 224     
7604 25 Feb 19 nicklas 225     var html = file.name;
7604 25 Feb 19 nicklas 226     html += ' <span id="remove.'+fileType.id+'.'+file.id +'" class="icon link" title="Remove this file"';
7604 25 Feb 19 nicklas 227     html += ' data-file-id="'+file.id+'">';
7604 25 Feb 19 nicklas 228     html += '<img src="' + App.getRoot() + 'images/remove.png"></span>';
7604 25 Feb 19 nicklas 229     
7604 25 Feb 19 nicklas 230     fileDiv.innerHTML = html;
7604 25 Feb 19 nicklas 231     Doc.element('filelist.'+fileType.id).appendChild(fileDiv);
7604 25 Feb 19 nicklas 232     if (fileType.hasValidator) frm['datafiles.validate'].checked = true;
7604 25 Feb 19 nicklas 233     internal.registerFileAction('addfile', fileType.id, file.id);
7604 25 Feb 19 nicklas 234   }
7604 25 Feb 19 nicklas 235
7604 25 Feb 19 nicklas 236   datafiles.removeOnClick = function(event)
7604 25 Feb 19 nicklas 237   {
7604 25 Feb 19 nicklas 238     var fileTarget = event.target.parentNode;
7604 25 Feb 19 nicklas 239     var fileId = Data.get(fileTarget, 'file-id');
7604 25 Feb 19 nicklas 240     if (!fileId) return;
7604 25 Feb 19 nicklas 241     
7604 25 Feb 19 nicklas 242     var fileTypeTarget = event.currentTarget;
7604 25 Feb 19 nicklas 243     var fileTypeId = Data.get(fileTypeTarget, 'filetype-id');
7604 25 Feb 19 nicklas 244     var fileType = fileTypes['ID'+fileTypeId];
7604 25 Feb 19 nicklas 245     
7604 25 Feb 19 nicklas 246     var fileDiv = Doc.element('filelist.'+fileTypeId+'.'+fileId);
7604 25 Feb 19 nicklas 247     Doc.element('filelist.'+fileTypeId).removeChild(fileDiv);
7604 25 Feb 19 nicklas 248     if (fileType.hasValidator) frm['datafiles.validate'].checked = true;
7604 25 Feb 19 nicklas 249     internal.registerFileAction('removefile', fileTypeId, fileId);
7604 25 Feb 19 nicklas 250     event.stopPropagation();
7604 25 Feb 19 nicklas 251   }
7604 25 Feb 19 nicklas 252   
7604 25 Feb 19 nicklas 253   datafiles.autoLoadEditFrame = function(platformId, variantId, subtypeId)
7604 25 Feb 19 nicklas 254   {
7604 25 Feb 19 nicklas 255     if (editFrameLoaded && lastPlatformId == platformId && lastVariantId == variantId && lastSubtypeId == subtypeId) 
7604 25 Feb 19 nicklas 256     {
7604 25 Feb 19 nicklas 257       return;
7604 25 Feb 19 nicklas 258     }
7604 25 Feb 19 nicklas 259     lastPlatformId = platformId;
7604 25 Feb 19 nicklas 260     lastVariantId = variantId;
7604 25 Feb 19 nicklas 261     lastSubtypeId = subtypeId;
7604 25 Feb 19 nicklas 262     editFrameLoaded = true;
7604 25 Feb 19 nicklas 263
7604 25 Feb 19 nicklas 264     var url = App.getRoot()+'common/datafiles/select_files.jsp?ID='+App.getSessionId();
7604 25 Feb 19 nicklas 265     url += '&item_type='+Data.get('datafiles-data', 'item-type');
7604 25 Feb 19 nicklas 266     url += '&item_id='+Data.get('datafiles-data', 'item-id');
7604 25 Feb 19 nicklas 267     if (platformId) url += '&platform_id='+platformId;
7604 25 Feb 19 nicklas 268     if (variantId) url += '&variant_id='+variantId;
7604 25 Feb 19 nicklas 269     if (subtypeId) url += '&itemsubtype_id='+subtypeId;
7604 25 Feb 19 nicklas 270     frames['datafiles'].location.replace(url);
7604 25 Feb 19 nicklas 271   }
7604 25 Feb 19 nicklas 272   
7604 25 Feb 19 nicklas 273   /*
7604 25 Feb 19 nicklas 274     Write current actions to form. If called from outside, 
7604 25 Feb 19 nicklas 275     re-direct call to 'datafiles' iframe.
7604 25 Feb 19 nicklas 276    */
7604 25 Feb 19 nicklas 277   datafiles.writeFileActionsToForm = function(toForm)
7604 25 Feb 19 nicklas 278   {
7604 25 Feb 19 nicklas 279     var pageId = Doc.getPageId();
7604 25 Feb 19 nicklas 280     if (pageId != 'select-datafiles')
7604 25 Feb 19 nicklas 281     {
7604 25 Feb 19 nicklas 282       if (!editFrameLoaded) return;
7604 25 Feb 19 nicklas 283       frames['datafiles'].DataFiles.writeFileActionsToForm(toForm);
7604 25 Feb 19 nicklas 284       return;
7604 25 Feb 19 nicklas 285     }
7604 25 Feb 19 nicklas 286     
7604 25 Feb 19 nicklas 287     var frm = document.forms['datafiles'];
7604 25 Feb 19 nicklas 288     if (frm['datafiles.validate'])
7604 25 Feb 19 nicklas 289     {
7604 25 Feb 19 nicklas 290       Forms.addHidden(toForm, 'datafiles.validate', frm['datafiles.validate'].checked ? 1 : 0);
7604 25 Feb 19 nicklas 291     }
7604 25 Feb 19 nicklas 292     for (var i = 0; i < fileActions.length; i++)
7604 25 Feb 19 nicklas 293     {
7604 25 Feb 19 nicklas 294       var action = fileActions[i];
7604 25 Feb 19 nicklas 295       Forms.addHidden(toForm, action.cmd + '.' + action.fileTypeId, action.fileId);
7604 25 Feb 19 nicklas 296     }
7604 25 Feb 19 nicklas 297   }
7604 25 Feb 19 nicklas 298   
7604 25 Feb 19 nicklas 299   /*
7604 25 Feb 19 nicklas 300     Register a new 'file action' for a given filetype and file.
7604 25 Feb 19 nicklas 301     The action cmd can be one of: 
7604 25 Feb 19 nicklas 302    */
7604 25 Feb 19 nicklas 303   internal.registerFileAction = function(cmd, fileTypeId, fileId)
7604 25 Feb 19 nicklas 304   {
7604 25 Feb 19 nicklas 305     // Check if other actions should be removed as a result of this one
7604 25 Feb 19 nicklas 306     for (var i = fileActions.length-1; i >= 0; i--)
7604 25 Feb 19 nicklas 307     {
7604 25 Feb 19 nicklas 308       var other = fileActions[i];
7604 25 Feb 19 nicklas 309       var remove = false;
7604 25 Feb 19 nicklas 310       if (cmd == 'setfile')
7604 25 Feb 19 nicklas 311       {
7604 25 Feb 19 nicklas 312         // Remove all other actions for the given file type
7604 25 Feb 19 nicklas 313         remove = other.fileTypeId == fileTypeId;
7604 25 Feb 19 nicklas 314       }
7604 25 Feb 19 nicklas 315       else
7604 25 Feb 19 nicklas 316       {
7604 25 Feb 19 nicklas 317         // Remove all other actions for the given file type+file
7604 25 Feb 19 nicklas 318         remove = other.fileTypeId == fileTypeId && other.fileId == fileId;
7604 25 Feb 19 nicklas 319       }
7604 25 Feb 19 nicklas 320       if (remove)  fileActions.splice(i, 1);
7604 25 Feb 19 nicklas 321     }
7604 25 Feb 19 nicklas 322     
7604 25 Feb 19 nicklas 323     // Create and store the action
7604 25 Feb 19 nicklas 324     var action = {};
7604 25 Feb 19 nicklas 325     action.cmd = cmd;
7604 25 Feb 19 nicklas 326     action.fileTypeId = fileTypeId,
7604 25 Feb 19 nicklas 327     action.fileId = fileId;
7604 25 Feb 19 nicklas 328     fileActions[fileActions.length] = action;
7604 25 Feb 19 nicklas 329   }
7604 25 Feb 19 nicklas 330   
7604 25 Feb 19 nicklas 331   return datafiles;
7604 25 Feb 19 nicklas 332 }();
7604 25 Feb 19 nicklas 333
7604 25 Feb 19 nicklas 334 Doc.onLoad(DataFiles.initPage);