www/filemanager/files/files.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 FileManager = function()
7604 25 Feb 19 nicklas 27 {
7604 25 Feb 19 nicklas 28   var fileManager = {};
7604 25 Feb 19 nicklas 29   var tableAttributes = {'table-id': 'files', 'item-type': 'FILE'};
7604 25 Feb 19 nicklas 30   
7604 25 Feb 19 nicklas 31   /**
7604 25 Feb 19 nicklas 32     Initialize the page.
7604 25 Feb 19 nicklas 33   */
7604 25 Feb 19 nicklas 34   fileManager.initPage = function()
7604 25 Feb 19 nicklas 35   {
7604 25 Feb 19 nicklas 36     var pageId = Doc.getPageId();
7604 25 Feb 19 nicklas 37     if (pageId == 'edit-page')
7604 25 Feb 19 nicklas 38     {
7604 25 Feb 19 nicklas 39       // Save + Close buttons
7604 25 Feb 19 nicklas 40       Buttons.addClickHandler('btnSave', fileManager.save);
7604 25 Feb 19 nicklas 41       Buttons.addClickHandler('close', App.closeWindow);
7604 25 Feb 19 nicklas 42       
7604 25 Feb 19 nicklas 43       // Tab validation
7604 25 Feb 19 nicklas 44       TabControl.addTabValidator('settings.info', fileManager.validateFile);
7857 20 Oct 20 nicklas 45       TabControl.addTabActivateListener('settings.annotations', fileManager.loadAnnotationsFrame);
7604 25 Feb 19 nicklas 46
7604 25 Feb 19 nicklas 47       // MIME type
7604 25 Feb 19 nicklas 48       Buttons.addClickHandler('selectMimeType', fileManager.selectMimeType);
7604 25 Feb 19 nicklas 49       Events.addEventHandler('selectMimeType', 'base-selected', fileManager.setMimeTypeCallback);
7604 25 Feb 19 nicklas 50
7604 25 Feb 19 nicklas 51       // Select fileserver
7604 25 Feb 19 nicklas 52       Buttons.addClickHandler('server_id.select', fileManager.selectFileServer);
7604 25 Feb 19 nicklas 53       Events.addEventHandler('server_id', 'base-selected', Items.onItemSelected);
7604 25 Feb 19 nicklas 54       
7604 25 Feb 19 nicklas 55       // URL
7604 25 Feb 19 nicklas 56       Events.addEventHandler('url', 'change', fileManager.urlOnChange);
7604 25 Feb 19 nicklas 57       Events.addEventHandler('url', 'keyup', fileManager.urlOnChange);
7604 25 Feb 19 nicklas 58       
7604 25 Feb 19 nicklas 59     }
7604 25 Feb 19 nicklas 60     else if (pageId == 'view-page')
7604 25 Feb 19 nicklas 61     {
7604 25 Feb 19 nicklas 62       var fileController = Items.getController('FILE');
7604 25 Feb 19 nicklas 63       fileController.url = 'filemanager/files/index.jsp';
7604 25 Feb 19 nicklas 64       var itemId = Data.get('page-data', 'item-id');
7604 25 Feb 19 nicklas 65       var attributes = {'item-type': 'FILE', 'item-id': itemId};
7604 25 Feb 19 nicklas 66       Buttons.addClickHandler('btnEdit', Buttons.editItem, attributes);
7604 25 Feb 19 nicklas 67       Buttons.addClickHandler('btnDelete', Buttons.deleteItem, attributes);
7604 25 Feb 19 nicklas 68       Buttons.addClickHandler('btnRestore', Buttons.restoreItem, attributes);
7604 25 Feb 19 nicklas 69       Buttons.addClickHandler('btnUsingItems', Buttons.showUsingItems, attributes);
7604 25 Feb 19 nicklas 70       Buttons.addClickHandler('btnDeletePermanently', Buttons.deleteItemPermanently, attributes);
7604 25 Feb 19 nicklas 71       Buttons.addClickHandler('btnShare', Buttons.shareItem, attributes);
7604 25 Feb 19 nicklas 72       Buttons.addClickHandler('btnSetOwner', Buttons.setOwner, attributes);
7604 25 Feb 19 nicklas 73       Buttons.addClickHandler('btnExport', Buttons.runPlugin, attributes);
7604 25 Feb 19 nicklas 74       Buttons.addClickHandler('btnImport', Buttons.runPlugin, attributes);
7604 25 Feb 19 nicklas 75       Buttons.addClickHandler('btnRunPlugin', Buttons.runPlugin, attributes);
7604 25 Feb 19 nicklas 76       
7604 25 Feb 19 nicklas 77       Buttons.addClickHandler('btnCompress', fileManager.compressFile, attributes);
7604 25 Feb 19 nicklas 78       Buttons.addClickHandler('btnDecompress', fileManager.decompressFile, attributes);
7604 25 Feb 19 nicklas 79       Buttons.addClickHandler('btnEditFileData', fileManager.editFileData, attributes);
7604 25 Feb 19 nicklas 80       Buttons.addClickHandler('moveOffline', fileManager.moveToLocation);
7604 25 Feb 19 nicklas 81       
7857 20 Oct 20 nicklas 82       TabControl.addTabActivateListener('main.annotations', AnnotationsList.loadOnce);
7604 25 Feb 19 nicklas 83       TabControl.addTabActivateListener('main.history', History.loadOnce);
7604 25 Feb 19 nicklas 84     }
7604 25 Feb 19 nicklas 85     else if (pageId == 'list-page')
7604 25 Feb 19 nicklas 86     {
7604 25 Feb 19 nicklas 87       var attributes = {'item-type': 'FILE'};
7604 25 Feb 19 nicklas 88       
7604 25 Feb 19 nicklas 89       var fileController = Items.getController('FILE');
7604 25 Feb 19 nicklas 90       fileController.url = 'filemanager/files/index.jsp';
7604 25 Feb 19 nicklas 91       
7604 25 Feb 19 nicklas 92       Buttons.addClickHandler('btnNewDirectory', Buttons.newItem);
7604 25 Feb 19 nicklas 93       Buttons.addClickHandler('btnUpload', fileManager.uploadFile);
7604 25 Feb 19 nicklas 94       Buttons.addClickHandler('btnNewURL', Buttons.newItem, attributes);
7604 25 Feb 19 nicklas 95       Buttons.addClickHandler('btnEditMultipleFiles', fileManager.editMultipleFiles);
7604 25 Feb 19 nicklas 96       Buttons.addClickHandler('btnDeleteItems', Buttons.deleteItems, tableAttributes);
7604 25 Feb 19 nicklas 97       Buttons.addClickHandler('btnRestoreItems', Buttons.restoreItems, tableAttributes);
7604 25 Feb 19 nicklas 98       Buttons.addClickHandler('btnShareItems', Buttons.shareItems, tableAttributes);
7604 25 Feb 19 nicklas 99       Buttons.addClickHandler('btnSetOwner', Buttons.setOwnerOfItems, tableAttributes);
7604 25 Feb 19 nicklas 100       Buttons.addClickHandler('btnColumns', Buttons.configureColumns, tableAttributes);
7604 25 Feb 19 nicklas 101       Buttons.addClickHandler('btnExport', Buttons.runListPlugin, tableAttributes);
7604 25 Feb 19 nicklas 102       Buttons.addClickHandler('btnImport', Buttons.runListPlugin, tableAttributes);
7604 25 Feb 19 nicklas 103       Buttons.addClickHandler('btnRunPlugin', Buttons.runListPlugin, tableAttributes);
7604 25 Feb 19 nicklas 104
7604 25 Feb 19 nicklas 105       Buttons.addClickHandler('close', App.closeWindow);
7604 25 Feb 19 nicklas 106       Buttons.addClickHandler('btnOk', Buttons.returnSelected, tableAttributes);
7604 25 Feb 19 nicklas 107       
7604 25 Feb 19 nicklas 108       Events.addEventHandler('mnuMoveToDirectory', 'click', fileManager.selectDirectory);
7604 25 Feb 19 nicklas 109       Events.addEventHandler('mnuMoveToDirectory', 'base-selected', fileManager.moveToDirectory);
7604 25 Feb 19 nicklas 110       Events.addEventHandler('mnuMoveOffline', 'click', fileManager.moveToLocation);
7604 25 Feb 19 nicklas 111       
7604 25 Feb 19 nicklas 112       Events.addEventHandler('reloadOnNotify', 'base-notify', App.reloadWindow);
7604 25 Feb 19 nicklas 113             
7604 25 Feb 19 nicklas 114       if (Data.int('page-data', 'is-search'))
7604 25 Feb 19 nicklas 115       {
7604 25 Feb 19 nicklas 116         var numFiles = Data.int('page-data', 'files-found');
7604 25 Feb 19 nicklas 117         var numDirectories = Data.int('page-data', 'directories-found');
7604 25 Feb 19 nicklas 118         parent.frames.directories.Directories.updateSearchResults(numFiles, numDirectories);
7604 25 Feb 19 nicklas 119       }
7604 25 Feb 19 nicklas 120       
7604 25 Feb 19 nicklas 121       var frm = document.forms['files'];
7604 25 Feb 19 nicklas 122       var mode = frm.mode ? frm.mode.value : 'default';
7604 25 Feb 19 nicklas 123       if (mode == 'selectone')
7604 25 Feb 19 nicklas 124       {
7604 25 Feb 19 nicklas 125         var path = Data.get('page-data', 'current-path');
7604 25 Feb 19 nicklas 126         if (path)
7604 25 Feb 19 nicklas 127         {
7604 25 Feb 19 nicklas 128           window.top.SelectFile.setSelectedDirectory(frm.directory_id.value, path);
7604 25 Feb 19 nicklas 129         }
7604 25 Feb 19 nicklas 130       }
7604 25 Feb 19 nicklas 131       
7983 22 Jun 21 nicklas 132       Events.addEventHandler('main', 'drop', fileManager.dropFiles);
7983 22 Jun 21 nicklas 133       Events.addEventHandler('main', 'dragover', fileManager.dragFiles);
7604 25 Feb 19 nicklas 134     }
7604 25 Feb 19 nicklas 135   }
7604 25 Feb 19 nicklas 136
7983 22 Jun 21 nicklas 137   var filesToUpload;
7983 22 Jun 21 nicklas 138   fileManager.dropFiles = function(event)
7983 22 Jun 21 nicklas 139   {
7983 22 Jun 21 nicklas 140     if (event.dataTransfer.types.indexOf('Files') == -1) return; // There are no files so we don't care
7983 22 Jun 21 nicklas 141     
7983 22 Jun 21 nicklas 142     // Stop all default things from happening
7983 22 Jun 21 nicklas 143     event.preventDefault();
7983 22 Jun 21 nicklas 144     event.stopPropagation();
7983 22 Jun 21 nicklas 145
7983 22 Jun 21 nicklas 146     var items = event.dataTransfer.items;
7983 22 Jun 21 nicklas 147     // Check if the dropped items are files or directories
7983 22 Jun 21 nicklas 148     filesToUpload = [];
7988 30 Jun 21 nicklas 149     for (var i = 0; i < items.length; i++)
7983 22 Jun 21 nicklas 150     {
7983 22 Jun 21 nicklas 151       var fe = items[i].webkitGetAsEntry();
7988 30 Jun 21 nicklas 152       if (fe.isFile || fe.isDirectory)
7983 22 Jun 21 nicklas 153       {
7988 30 Jun 21 nicklas 154         filesToUpload[filesToUpload.length] = fe;
7983 22 Jun 21 nicklas 155       }
7983 22 Jun 21 nicklas 156     }
7983 22 Jun 21 nicklas 157     if (filesToUpload.length == 0) return; // Only directories
7983 22 Jun 21 nicklas 158
7983 22 Jun 21 nicklas 159     // Open upload dialog
7983 22 Jun 21 nicklas 160     var toDir = Data.int(event.currentTarget, 'directory-id') || 
7983 22 Jun 21 nicklas 161       Data.int('page-data', 'current-directory-id');
7983 22 Jun 21 nicklas 162     
7983 22 Jun 21 nicklas 163     var url = '../upload/drag_drop_upload.jsp?ID='+App.getSessionId();
7983 22 Jun 21 nicklas 164     url += '&toDir='+toDir;
7988 30 Jun 21 nicklas 165     url += '&numFiles='+filesToUpload.length;
7990 01 Jul 21 nicklas 166     Dialogs.openPopup(url, 'DragDropUpload', 700, 450);
7983 22 Jun 21 nicklas 167   }
7983 22 Jun 21 nicklas 168   
7983 22 Jun 21 nicklas 169   fileManager.getFilesToUpload = function()
7983 22 Jun 21 nicklas 170   {
7983 22 Jun 21 nicklas 171     return filesToUpload;
7983 22 Jun 21 nicklas 172   }
7983 22 Jun 21 nicklas 173   
7983 22 Jun 21 nicklas 174   var highlightedSubdir = null;
7983 22 Jun 21 nicklas 175   var highlightedElement = null;
7983 22 Jun 21 nicklas 176   var hideTooltipTimer = null;
7983 22 Jun 21 nicklas 177   fileManager.dragFiles = function(event)
7983 22 Jun 21 nicklas 178   {
7983 22 Jun 21 nicklas 179     if (event.dataTransfer.types.indexOf('Files') == -1) return; // There are no files so we don't care
7983 22 Jun 21 nicklas 180     
7983 22 Jun 21 nicklas 181     // Stop all default things from happening
7983 22 Jun 21 nicklas 182     event.preventDefault();
7983 22 Jun 21 nicklas 183     event.stopPropagation();
7983 22 Jun 21 nicklas 184     
7983 22 Jun 21 nicklas 185     // Find out which directory we are uploading to
7983 22 Jun 21 nicklas 186     var subdir = Data.get(event.currentTarget, 'directory-path'); // The target is a "sub-directory" row in the listing
7983 22 Jun 21 nicklas 187     var maindir = Data.get('page-data', 'current-path'); // Main directory (is not set when searching)
7983 22 Jun 21 nicklas 188     if (!subdir && !maindir)
7983 22 Jun 21 nicklas 189     {
7983 22 Jun 21 nicklas 190       event.dataTransfer.dropEffect = "none"; // No drop here!
7983 22 Jun 21 nicklas 191       return;
7983 22 Jun 21 nicklas 192     }
7983 22 Jun 21 nicklas 193     var allowUpload = Data.int(event.currentTarget, 'upload-permission');
7983 22 Jun 21 nicklas 194     event.dataTransfer.dropEffect = allowUpload ? "copy" : "none";
7983 22 Jun 21 nicklas 195     
7983 22 Jun 21 nicklas 196     // Highlight the current directory if it is a sub-directory
7983 22 Jun 21 nicklas 197     if (subdir != highlightedSubdir)
7983 22 Jun 21 nicklas 198     {
7983 22 Jun 21 nicklas 199       if (highlightedElement) Doc.removeClass(highlightedElement, 'drop-upload');
7983 22 Jun 21 nicklas 200       if (subdir)
7983 22 Jun 21 nicklas 201       {
7983 22 Jun 21 nicklas 202         highlightedElement = event.currentTarget;
7983 22 Jun 21 nicklas 203         highlightedSubdir = subdir;
7983 22 Jun 21 nicklas 204         Doc.addClass(highlightedElement, 'drop-upload');
7983 22 Jun 21 nicklas 205       }
7983 22 Jun 21 nicklas 206       else
7983 22 Jun 21 nicklas 207       {
7983 22 Jun 21 nicklas 208         highlightedElement = null;
7983 22 Jun 21 nicklas 209         highlightedSubdir = null;
7983 22 Jun 21 nicklas 210       }
7983 22 Jun 21 nicklas 211     }
7983 22 Jun 21 nicklas 212     
7983 22 Jun 21 nicklas 213     // Display tooltip
7983 22 Jun 21 nicklas 214     var tt = Doc.element('uploadTooltip');
7983 22 Jun 21 nicklas 215     if (allowUpload)
7983 22 Jun 21 nicklas 216     {
7983 22 Jun 21 nicklas 217       Doc.removeClass(tt, 'error');
7983 22 Jun 21 nicklas 218       tt.innerHTML = 'Upload to '+(subdir || maindir).replace(/\//g, '/<wbr>');
7983 22 Jun 21 nicklas 219     }
7983 22 Jun 21 nicklas 220     else
7983 22 Jun 21 nicklas 221     {
7983 22 Jun 21 nicklas 222       Doc.addClass(tt, 'error');
7983 22 Jun 21 nicklas 223       tt.innerHTML = 'Not allowed to upload to '+(subdir || maindir).replace(/\//g, '/<wbr>');
7983 22 Jun 21 nicklas 224     }
7983 22 Jun 21 nicklas 225     tt.style.left = Math.max(0, Math.min(event.clientX-tt.clientWidth/2, window.innerWidth-tt.offsetWidth))+'px';
7983 22 Jun 21 nicklas 226     tt.style.top = event.clientY < window.innerHeight-30-tt.offsetHeight ? (event.clientY+30)+'px' : (event.clientY-100-tt.offsetHeight)+'px';
7983 22 Jun 21 nicklas 227     Doc.show(tt);
7983 22 Jun 21 nicklas 228
7983 22 Jun 21 nicklas 229     // Set a timer for hiding the tooltip since we never get any event when dragging ends
7983 22 Jun 21 nicklas 230     if (hideTooltipTimer) clearTimeout(hideTooltipTimer);
7983 22 Jun 21 nicklas 231     hideTooltipTimer = setTimeout(fileManager.hideFileUploadTooltip, 500);
7983 22 Jun 21 nicklas 232   }
7983 22 Jun 21 nicklas 233   
7983 22 Jun 21 nicklas 234   fileManager.hideFileUploadTooltip = function()
7983 22 Jun 21 nicklas 235   {
7983 22 Jun 21 nicklas 236     if (highlightedElement) 
7983 22 Jun 21 nicklas 237     {
7983 22 Jun 21 nicklas 238       Doc.removeClass(highlightedElement, 'drop-upload');
7983 22 Jun 21 nicklas 239       highlightedElement = null;
7983 22 Jun 21 nicklas 240       highlightedSubdir = null;
7983 22 Jun 21 nicklas 241     }
7983 22 Jun 21 nicklas 242     Doc.hide('uploadTooltip');
7983 22 Jun 21 nicklas 243   }
7983 22 Jun 21 nicklas 244
7604 25 Feb 19 nicklas 245   fileManager.initElements = function(element, autoInit)
7604 25 Feb 19 nicklas 246   {
7604 25 Feb 19 nicklas 247     if (autoInit == 'upload-file')
7604 25 Feb 19 nicklas 248     {
7604 25 Feb 19 nicklas 249       Buttons.addClickHandler(element, fileManager.uploadFile);
7604 25 Feb 19 nicklas 250     }
7604 25 Feb 19 nicklas 251     else if (autoInit == 'open-directory')
7604 25 Feb 19 nicklas 252     {
7604 25 Feb 19 nicklas 253       Buttons.addClickHandler(element, fileManager.openDirectory);
7604 25 Feb 19 nicklas 254     }
7604 25 Feb 19 nicklas 255     else if (autoInit == 'file-item')
7604 25 Feb 19 nicklas 256     {
7604 25 Feb 19 nicklas 257       Events.addEventHandler(element, 'click', fileManager.onFileSelected, tableAttributes);
7604 25 Feb 19 nicklas 258     }
7604 25 Feb 19 nicklas 259     else if (autoInit == 'file-check')
7604 25 Feb 19 nicklas 260     {
7604 25 Feb 19 nicklas 261       Events.addEventHandler(element, 'change', fileManager.onFileChecked);
7703 11 Apr 19 nicklas 262       if (element.checked) Events.sendChangeEvent(element);
7604 25 Feb 19 nicklas 263     }
7604 25 Feb 19 nicklas 264     else if (autoInit == 'directory-item')
7604 25 Feb 19 nicklas 265     {
7604 25 Feb 19 nicklas 266       Events.addEventHandler(element, 'click', fileManager.onDirectorySelected);
7604 25 Feb 19 nicklas 267     }
7983 22 Jun 21 nicklas 268     else if (autoInit == 'directory-row')
7983 22 Jun 21 nicklas 269     {
7983 22 Jun 21 nicklas 270       Events.addEventHandler(element, 'drop', fileManager.dropFiles);
7983 22 Jun 21 nicklas 271       Events.addEventHandler(element, 'dragover', fileManager.dragFiles);
7983 22 Jun 21 nicklas 272     }
7604 25 Feb 19 nicklas 273   }
7604 25 Feb 19 nicklas 274   
7604 25 Feb 19 nicklas 275   fileManager.uploadFile = function(event)
7604 25 Feb 19 nicklas 276   {
7604 25 Feb 19 nicklas 277     var fileId = Data.get(event.currentTarget, 'file-id');
7604 25 Feb 19 nicklas 278     
7604 25 Feb 19 nicklas 279     var url = 'index.jsp?ID='+App.getSessionId();
7604 25 Feb 19 nicklas 280     if (fileId)
7604 25 Feb 19 nicklas 281     {
7604 25 Feb 19 nicklas 282       url += '&cmd=UploadFile&item_id='+fileId;
7604 25 Feb 19 nicklas 283     }
7604 25 Feb 19 nicklas 284     else
7604 25 Feb 19 nicklas 285     {
7604 25 Feb 19 nicklas 286       url += '&cmd=UploadNewFile';
7604 25 Feb 19 nicklas 287       var frm = document.forms['files'];
7604 25 Feb 19 nicklas 288       var directoryId = frm.directory_id.value;
7604 25 Feb 19 nicklas 289       url += '&directory_id='+directoryId;
7604 25 Feb 19 nicklas 290     }
7604 25 Feb 19 nicklas 291     var controller = Items.getController('FILE');
7604 25 Feb 19 nicklas 292     Dialogs.openPopup(url, 'UploadFile', controller.width, controller.height);
7604 25 Feb 19 nicklas 293   }
7604 25 Feb 19 nicklas 294   
7604 25 Feb 19 nicklas 295   fileManager.editMultipleFiles = function()
7604 25 Feb 19 nicklas 296   {
7604 25 Feb 19 nicklas 297     if (!Table.checkIfSelected('files', /^\d+$/))
7604 25 Feb 19 nicklas 298     {
7604 25 Feb 19 nicklas 299       return;
7604 25 Feb 19 nicklas 300     }
7604 25 Feb 19 nicklas 301     Table.submitToPopup('files', 'EditMultiple', 600, 400);
7604 25 Feb 19 nicklas 302   }
7604 25 Feb 19 nicklas 303
7604 25 Feb 19 nicklas 304   fileManager.selectDirectory = function(event)
7604 25 Feb 19 nicklas 305   {
7604 25 Feb 19 nicklas 306     if (!Table.checkIfSelected('files'))
7604 25 Feb 19 nicklas 307     {
7604 25 Feb 19 nicklas 308       return;
7604 25 Feb 19 nicklas 309     }
7604 25 Feb 19 nicklas 310     var url = '../directories/index.jsp?ID=' + App.getSessionId();
7604 25 Feb 19 nicklas 311     url += '&mode=selectonedirectory&title=Move+to';
7604 25 Feb 19 nicklas 312     url += '&callback='+event.currentTarget.id;
7604 25 Feb 19 nicklas 313     Dialogs.openPopup(url, 'SelectDirectory', 500, 500);
7604 25 Feb 19 nicklas 314   }
7604 25 Feb 19 nicklas 315   
7604 25 Feb 19 nicklas 316   fileManager.moveToDirectory = function(event)
7604 25 Feb 19 nicklas 317   {
7604 25 Feb 19 nicklas 318     var frm = document.forms['files'];
7604 25 Feb 19 nicklas 319     Forms.addHidden(frm, 'newdirectory_id', event.detail.id);
7604 25 Feb 19 nicklas 320     frm.cmd.value = 'MoveToDirectory';
7604 25 Feb 19 nicklas 321     frm.submit();
7604 25 Feb 19 nicklas 322   }
7604 25 Feb 19 nicklas 323   
7604 25 Feb 19 nicklas 324   fileManager.moveToLocation = function(event)
7604 25 Feb 19 nicklas 325   {
7604 25 Feb 19 nicklas 326     var moveTo = Data.get(event.currentTarget, 'location');
7604 25 Feb 19 nicklas 327     var fileId = Data.get(event.currentTarget, 'file-id');
7604 25 Feb 19 nicklas 328     if (fileId)
7604 25 Feb 19 nicklas 329     {
7604 25 Feb 19 nicklas 330       // Single file mode
7604 25 Feb 19 nicklas 331       if (moveTo == 'OFFLINE')
7604 25 Feb 19 nicklas 332       {
7604 25 Feb 19 nicklas 333         var msg = "This action will remove the file data of the selected file from the server.\n";
7604 25 Feb 19 nicklas 334         msg += "If you need the data again you have to re-upload the file.\n\n";
7604 25 Feb 19 nicklas 335         msg += "Continue?";
7604 25 Feb 19 nicklas 336         if (!confirm(msg)) return;
7604 25 Feb 19 nicklas 337       }
7604 25 Feb 19 nicklas 338       
7604 25 Feb 19 nicklas 339       var url = 'index.jsp?ID='+App.getSessionId();
7604 25 Feb 19 nicklas 340       url += '&cmd=MoveItem&move='+moveTo;
7604 25 Feb 19 nicklas 341       url += '&item_id='+fileId;
7604 25 Feb 19 nicklas 342       location.replace(url);
7604 25 Feb 19 nicklas 343     }
7604 25 Feb 19 nicklas 344     else
7604 25 Feb 19 nicklas 345     {
7604 25 Feb 19 nicklas 346       // Table mode
7604 25 Feb 19 nicklas 347       if (!Table.checkIfSelected('files'))
7604 25 Feb 19 nicklas 348       {
7604 25 Feb 19 nicklas 349         return;
7604 25 Feb 19 nicklas 350       }
7604 25 Feb 19 nicklas 351
7604 25 Feb 19 nicklas 352       if (moveTo == 'OFFLINE')
7604 25 Feb 19 nicklas 353       {
7604 25 Feb 19 nicklas 354         var msg = "This action will remove the file data of the selected file(s) from the server.\n";
7604 25 Feb 19 nicklas 355         msg += "If you need the data again you have to re-upload the file(s).\n\n";
7604 25 Feb 19 nicklas 356         msg += "Continue?";
7604 25 Feb 19 nicklas 357         if (!confirm(msg)) return;  
7604 25 Feb 19 nicklas 358       }
7604 25 Feb 19 nicklas 359       var frm = document.forms['files'];
7604 25 Feb 19 nicklas 360       Forms.addHidden(frm, 'move', moveTo);
7604 25 Feb 19 nicklas 361       frm.cmd.value = 'MoveItems';
7604 25 Feb 19 nicklas 362       frm.submit();
7604 25 Feb 19 nicklas 363     }
7604 25 Feb 19 nicklas 364   }
7604 25 Feb 19 nicklas 365
7604 25 Feb 19 nicklas 366   fileManager.openDirectory = function(event)
7604 25 Feb 19 nicklas 367   {
7604 25 Feb 19 nicklas 368     var directoryId = Data.get(event.currentTarget, 'directory-id');
7604 25 Feb 19 nicklas 369     var frm = document.forms['files'];
7604 25 Feb 19 nicklas 370     var currentId = frm.directory_id.value;
7604 25 Feb 19 nicklas 371     parent.frames['directories'].Directories.synchronizeTo(directoryId, currentId);
7604 25 Feb 19 nicklas 372   }
7604 25 Feb 19 nicklas 373   
7604 25 Feb 19 nicklas 374   fileManager.compressFile = function(event)
7604 25 Feb 19 nicklas 375   {
7604 25 Feb 19 nicklas 376     var progress = '../../common/progress_reporter.jsp?ID='+App.getSessionId();
7604 25 Feb 19 nicklas 377     progress += '&progress=compress&title=Compressing file';
7604 25 Feb 19 nicklas 378     Dialogs.openPopup(progress, 'CompressFile', 300, 200);
7604 25 Feb 19 nicklas 379     
7604 25 Feb 19 nicklas 380     var url = 'index.jsp?ID='+App.getSessionId();
7604 25 Feb 19 nicklas 381     url += '&cmd=CompressItem&item_id='+Data.get(event.currentTarget, 'item-id');
7604 25 Feb 19 nicklas 382     location.replace(url);
7604 25 Feb 19 nicklas 383   }
7604 25 Feb 19 nicklas 384   
7604 25 Feb 19 nicklas 385   fileManager.decompressFile = function(event)
7604 25 Feb 19 nicklas 386   {
7604 25 Feb 19 nicklas 387     var progress = '../../common/progress_reporter.jsp?ID='+App.getSessionId();
7604 25 Feb 19 nicklas 388     progress += '&progress=decompress&title=Decompressing file';
7604 25 Feb 19 nicklas 389     Dialogs.openPopup(progress, 'DecompressFile', 300, 200);
7604 25 Feb 19 nicklas 390     
7604 25 Feb 19 nicklas 391     var url = 'index.jsp?ID='+App.getSessionId();
7604 25 Feb 19 nicklas 392     url += '&cmd=DecompressItem&item_id='+Data.get(event.currentTarget, 'item-id');
7604 25 Feb 19 nicklas 393     location.replace(url);
7604 25 Feb 19 nicklas 394   }
7604 25 Feb 19 nicklas 395   
7604 25 Feb 19 nicklas 396   fileManager.editFileData = function()
7604 25 Feb 19 nicklas 397   {
7604 25 Feb 19 nicklas 398     var fileId = Data.get('page-data', 'item-id');
7604 25 Feb 19 nicklas 399     var url = 'index.jsp?ID='+App.getSessionId();
7604 25 Feb 19 nicklas 400     url += '&cmd=EditFileData&item_id='+fileId;
7604 25 Feb 19 nicklas 401     Dialogs.openPopup(url, 'EditFileData', 800, 600);
7604 25 Feb 19 nicklas 402   }
7604 25 Feb 19 nicklas 403   
7604 25 Feb 19 nicklas 404   // Called when radio button or checkbox for a file is clicked
7604 25 Feb 19 nicklas 405   // Should update the text in the 'Selected files' field in the
7604 25 Feb 19 nicklas 406   // parent form
7604 25 Feb 19 nicklas 407   fileManager.onFileChecked = function(event)
7604 25 Feb 19 nicklas 408   {
7604 25 Feb 19 nicklas 409     var element = event.currentTarget;
7604 25 Feb 19 nicklas 410     var frm = document.forms['files'];
7604 25 Feb 19 nicklas 411     var mode = frm.mode ? frm.mode.value : 'default';
7604 25 Feb 19 nicklas 412     if (mode == 'selectone')
7604 25 Feb 19 nicklas 413     {
7604 25 Feb 19 nicklas 414       window.top.SelectFile.setSelectedFile(element.value, element.title);
7604 25 Feb 19 nicklas 415     }
7604 25 Feb 19 nicklas 416     else if (mode == 'selectmultiple' || mode == 'selectmultiplenobuttons')
7604 25 Feb 19 nicklas 417     {
7604 25 Feb 19 nicklas 418       if (element.checked)
7604 25 Feb 19 nicklas 419       {
7604 25 Feb 19 nicklas 420         window.top.SelectFile.addSelected(element.value, element.title);
7604 25 Feb 19 nicklas 421       }
7604 25 Feb 19 nicklas 422       else
7604 25 Feb 19 nicklas 423       {
7604 25 Feb 19 nicklas 424         window.top.SelectFile.removeSelected(element.value);
7604 25 Feb 19 nicklas 425       }
7604 25 Feb 19 nicklas 426     }
7604 25 Feb 19 nicklas 427   }
7604 25 Feb 19 nicklas 428   
7604 25 Feb 19 nicklas 429   // Called when name of file is clicked
7604 25 Feb 19 nicklas 430   // Should select/toggle radio button or checkbox and
7604 25 Feb 19 nicklas 431   // update the text in the 'Selected files' field in the
7604 25 Feb 19 nicklas 432   // parent form
7604 25 Feb 19 nicklas 433   fileManager.onFileSelected = function(event)
7604 25 Feb 19 nicklas 434   {
7604 25 Feb 19 nicklas 435     var frm = document.forms['files'];
7604 25 Feb 19 nicklas 436     var mode = frm.mode ? frm.mode.value : 'default';
7604 25 Feb 19 nicklas 437     var fileId = Data.get(event.currentTarget, 'item-id');
7604 25 Feb 19 nicklas 438     var path = Data.get(event.currentTarget, 'path');
7604 25 Feb 19 nicklas 439     
7604 25 Feb 19 nicklas 440     if (mode == 'selectone')
7604 25 Feb 19 nicklas 441     {
7604 25 Feb 19 nicklas 442       var index = Forms.checkRadio(frm.item_id, fileId);
7604 25 Feb 19 nicklas 443       window.top.SelectFile.setSelectedFile(fileId, path);
7604 25 Feb 19 nicklas 444       window.top.SelectFile.returnSelected();
7604 25 Feb 19 nicklas 445       App.closeWindow();
7604 25 Feb 19 nicklas 446     }
7604 25 Feb 19 nicklas 447     else if (mode == 'selectmultiple' || mode == 'selectmultiplenobuttons')
7604 25 Feb 19 nicklas 448     {
7604 25 Feb 19 nicklas 449       var checkbox = Table.toggleCheckBox('files', fileId);
7604 25 Feb 19 nicklas 450       if (checkbox.checked)
7604 25 Feb 19 nicklas 451       {
7604 25 Feb 19 nicklas 452         window.top.SelectFile.addSelected(fileId, path);
7604 25 Feb 19 nicklas 453       }
7604 25 Feb 19 nicklas 454       else
7604 25 Feb 19 nicklas 455       {
7604 25 Feb 19 nicklas 456         window.top.SelectFile.removeSelected(fileId);
7604 25 Feb 19 nicklas 457       }
7604 25 Feb 19 nicklas 458     }
7604 25 Feb 19 nicklas 459     else
7604 25 Feb 19 nicklas 460     {
7604 25 Feb 19 nicklas 461       Items.itemOnClick(event);
7604 25 Feb 19 nicklas 462     }
7604 25 Feb 19 nicklas 463   }
7604 25 Feb 19 nicklas 464   
7604 25 Feb 19 nicklas 465   // Called when name of directory is clicked
7604 25 Feb 19 nicklas 466   // Should select/toggle radio button or checkbox and
7604 25 Feb 19 nicklas 467   // update the text in the 'Selected files' field in the
7604 25 Feb 19 nicklas 468   // parent form
7604 25 Feb 19 nicklas 469   fileManager.onDirectorySelected = function(event)
7604 25 Feb 19 nicklas 470   {
7604 25 Feb 19 nicklas 471     var frm = document.forms['files'];
7604 25 Feb 19 nicklas 472     var mode = frm.mode ? frm.mode.value : 'default';
7604 25 Feb 19 nicklas 473     var directoryId = Data.get(event.currentTarget, 'item-id');
7604 25 Feb 19 nicklas 474     var path = Data.get(event.currentTarget, 'path');
7604 25 Feb 19 nicklas 475     if (mode == 'selectone')
7604 25 Feb 19 nicklas 476     {
7604 25 Feb 19 nicklas 477       window.top.SelectFile.setSelectedDirectory(directoryId, path);
7604 25 Feb 19 nicklas 478     }
7604 25 Feb 19 nicklas 479     else
7604 25 Feb 19 nicklas 480     {
7604 25 Feb 19 nicklas 481       Items.itemOnClick(event);
7604 25 Feb 19 nicklas 482     }
7604 25 Feb 19 nicklas 483   }
7604 25 Feb 19 nicklas 484   
7604 25 Feb 19 nicklas 485   fileManager.validateFile = function()
7604 25 Feb 19 nicklas 486   {
7604 25 Feb 19 nicklas 487     var frm = document.forms['file'];
7604 25 Feb 19 nicklas 488     if (Strings.trim(frm.name.value) == '')
7604 25 Feb 19 nicklas 489     {
7604 25 Feb 19 nicklas 490       Forms.showNotification(frm.name, 'You must enter a name');
7604 25 Feb 19 nicklas 491       return false;
7604 25 Feb 19 nicklas 492     }
7604 25 Feb 19 nicklas 493     if (frm.url && Strings.trim(frm.url.value) == '')
7604 25 Feb 19 nicklas 494     {
7604 25 Feb 19 nicklas 495       Forms.showNotification(frm.url, 'You must enter a URL');
7604 25 Feb 19 nicklas 496       return false;
7604 25 Feb 19 nicklas 497     }
7604 25 Feb 19 nicklas 498     return true;
7604 25 Feb 19 nicklas 499   }
7604 25 Feb 19 nicklas 500
7604 25 Feb 19 nicklas 501   fileManager.save = function()
7604 25 Feb 19 nicklas 502   {
7604 25 Feb 19 nicklas 503     var frm = document.forms['file'];
7604 25 Feb 19 nicklas 504     if (TabControl.validateActiveTab('settings'))
7604 25 Feb 19 nicklas 505     {
7857 20 Oct 20 nicklas 506       Annotations.saveModifiedAnnotationsToForm(frm);
7604 25 Feb 19 nicklas 507       frm.submit();
7604 25 Feb 19 nicklas 508     }
7604 25 Feb 19 nicklas 509   }
7604 25 Feb 19 nicklas 510   
7604 25 Feb 19 nicklas 511   fileManager.selectMimeType = function()
7604 25 Feb 19 nicklas 512   {
7604 25 Feb 19 nicklas 513     Dialogs.selectItem('MIMETYPE', 'selectMimeType', 0);
7604 25 Feb 19 nicklas 514   }
7604 25 Feb 19 nicklas 515   
7604 25 Feb 19 nicklas 516   fileManager.setMimeTypeCallback = function(event)
7604 25 Feb 19 nicklas 517   {
7604 25 Feb 19 nicklas 518     var frm = document.forms['file'];
7604 25 Feb 19 nicklas 519     frm.mime_type.value = event.detail.name;
7604 25 Feb 19 nicklas 520   }
7604 25 Feb 19 nicklas 521
7604 25 Feb 19 nicklas 522   fileManager.selectFileServer = function()
7604 25 Feb 19 nicklas 523   {
7604 25 Feb 19 nicklas 524     var frm = document.forms['file'];
7604 25 Feb 19 nicklas 525     var url = '';
7604 25 Feb 19 nicklas 526     if (frm.server_id.length > 1) 
7604 25 Feb 19 nicklas 527     {
7604 25 Feb 19 nicklas 528       var id = Math.abs(parseInt(frm.server_id[1].value));        
7604 25 Feb 19 nicklas 529       url += '&item_id='+id;
7604 25 Feb 19 nicklas 530     }
7604 25 Feb 19 nicklas 531     Dialogs.selectItem('FILESERVER', 'server_id', 0, url);
7604 25 Feb 19 nicklas 532   }
7604 25 Feb 19 nicklas 533   
7604 25 Feb 19 nicklas 534   fileManager.urlOnChange = function()
7604 25 Feb 19 nicklas 535   {
7604 25 Feb 19 nicklas 536     var frm = document.forms['file'];
7604 25 Feb 19 nicklas 537     var url = frm.url.value;
7604 25 Feb 19 nicklas 538     var lastAutoChange = Data.get(frm.url, 'last-auto-change', '');
7604 25 Feb 19 nicklas 539     
7604 25 Feb 19 nicklas 540     if (url && (lastAutoChange == frm.name.value))
7604 25 Feb 19 nicklas 541     {
7604 25 Feb 19 nicklas 542       var end = url.lastIndexOf('/');
7604 25 Feb 19 nicklas 543       if (end >= 0) url = url.substring(end+1);
7604 25 Feb 19 nicklas 544       frm.name.value = url;
7604 25 Feb 19 nicklas 545       Data.set(frm.url, 'last-auto-change', url);
7604 25 Feb 19 nicklas 546     }
7604 25 Feb 19 nicklas 547   }
7857 20 Oct 20 nicklas 548   
7857 20 Oct 20 nicklas 549   fileManager.loadAnnotationsFrame = function()
7857 20 Oct 20 nicklas 550   {
7857 20 Oct 20 nicklas 551     Annotations.autoLoadEditFrame(null, ItemSubtype.getSubtypeId('subtype_id'), null);
7857 20 Oct 20 nicklas 552   }
7604 25 Feb 19 nicklas 553
7857 20 Oct 20 nicklas 554
7604 25 Feb 19 nicklas 555   return fileManager;
7604 25 Feb 19 nicklas 556 }();
7604 25 Feb 19 nicklas 557
7604 25 Feb 19 nicklas 558 Doc.onLoad(FileManager.initPage);
7604 25 Feb 19 nicklas 559 Doc.addElementInitializer(FileManager.initElements);