Changeset 6308


Ignore:
Timestamp:
Aug 20, 2013, 2:54:18 PM (9 years ago)
Author:
Nicklas Nordborg
Message:

References #1729 and #1730. Fixed on most pages in the File manager section except those related to directory tree listing.

Location:
trunk/www
Files:
9 added
21 edited

Legend:

Unmodified
Added
Removed
  • trunk/www/filemanager/directories/edit_directory.jsp

    r6217 r6308  
    8080  {
    8181    directory = Directory.getById(dc, itemId);
     82    directory.checkPermission(Permission.WRITE);
    8283    parent = directory.getParent();
    8384    autoCompress = directory.getAutoCompress();
     
    8687    title = "Edit directory -- " + HTML.encodeTags(directory.getName());
    8788  }
    88   if (directory != null && !directory.hasPermission(Permission.WRITE))
    89   {
    90     throw new PermissionDeniedException(Permission.WRITE, itemType.toString());
    91   }
    92 
    93  
    9489 
    9590  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(itemType), directory);
    9691  ExtensionsInvoker invoker = EditUtil.useEditExtensions(jspContext);
    9792  %>
    98   <base:page type="popup" title="<%=title%>">
    99   <base:head scripts="tabcontrol.js" styles="tabcontrol.css">
     93  <base:page type="popup" title="<%=title%>" id="edit-page">
     94  <base:head scripts="tabcontrol-2.js,~directories.js" styles="tabcontrol.css">
    10095    <ext:scripts context="<%=jspContext%>" />
    10196    <ext:stylesheets context="<%=jspContext%>" />
    102     <script>
    103     // Validate the "Directory" tab
    104     function validateDirectory()
    105     {
    106       var frm = document.forms['directory'];
    107       if (Main.trimString(frm.name.value) == '')
    108       {
    109         Forms.showNotification(frm.name, 'You must enter a name');
    110         return false;
    111       }
    112       return true;
    113     }
    114     // Submit the form
    115     function saveSettings()
    116     {
    117       var frm = document.forms['directory'];
    118       if (TabControl.validateActiveTab('settings'))
    119       {
    120         frm.submit();
    121       }
    122     }
    123    
    124     function init()
    125     {
    126       <%
    127       if (directory == null)
    128       {
    129         %>
    130         var frm = document.forms['directory'];
    131         frm.name.focus();
    132         frm.name.select();
    133         <%
    134       }
    135       %>
    136     }
    137     </script>
    13897  </base:head>
    139   <base:body onload="init()">
     98  <base:body>
    14099    <h1><%=title%> <base:help tabcontrol="settings" /></h1>
    141100
     
    148107      position="bottom" remember="<%=directory != null%>"
    149108      extensions="<%=invoker%>">
    150     <t:tab id="info" title="Directory" validate="validateDirectory()" helpid="directory.edit">
     109    <t:tab id="info" title="Directory" helpid="directory.edit">
    151110      <table class="fullform input100">
    152111      <tr>
     
    156115      <tr>
    157116        <th>Name</th>
    158         <td><input class="text required" type="text" name="name"
     117        <td><input class="text required auto-init"
     118          data-auto-init="<%=directory == null ? "focus-select" : "focus" %>"
     119          type="text" name="name"
    159120          value="<%=HTML.encodeTags(directory == null ? Values.getString(cc.getPropertyValue("name"), "New directory") : directory.getName())%>"
    160121          maxlength="<%=Directory.MAX_NAME_LENGTH%>"></td>
     
    210171
    211172    <base:buttongroup subclass="dialogbuttons">
    212       <base:button onclick="saveSettings()" title="Save" />
    213       <base:button onclick="window.close()" title="Cancel" />
     173      <base:button id="btnSave" title="Save" />
     174      <base:button id="close" title="Cancel" />
    214175    </base:buttongroup>
    215176  </base:body>
  • trunk/www/filemanager/directories/list_directories.jsp

    r6268 r6308  
    248248    {
    249249      var frm = document.forms['directory'];
    250       top.window.opener.<%=callback%>(frm.directory_id.value, frm.path.value);
     250      var callback = '<%=callback%>';
     251      var notifyTarget = window.opener.document.getElementById(callback);
     252      var callbackMethod = window.opener[callback];
     253
     254      if (notifyTarget)
     255      {
     256        // Send event to the target in the opener window
     257        Events.sendCustomEvent(notifyTarget, 'base-selected', {'id': frm.directory_id.value, 'name': frm.path.value, 'itemType': 'DIRECTORY'});
     258      }
     259      else if (callbackMethod)
     260      {
     261        // Call the callback method in the opener window
     262        callbackMethod.call(null, frm.directory_id.value, frm.path.value);
     263      }
    251264      top.window.close();
    252265    }
  • trunk/www/filemanager/files/download_file.jsp

    r6136 r6308  
    6060try
    6161{
    62 
    6362  File file = File.getById(dc, itemId);
    6463  String path = file.getPath().toString();
     
    7372  String downloadUrl = root + "filemanager/files/download/-"+ID+"-"+HTML.urlEncode(path);
    7473  %>
    75 
    7674  <base:page type="popup" title="<%=title%>">
    77   <base:head>
    78   <script>
    79   function downloadFile()
    80   {
    81     location.href = '<%=downloadUrl%>';
    82   }
    83   </script>
    84   </base:head>
    85   <base:body onload="downloadFile()">
     75  <base:head scripts="~download_file.js" />
     76  <base:body>
    8677    <h1><%=title%></h1>
     78   
     79    <div id="page-data" class="datacontainer"
     80      data-download-url="<%=downloadUrl %>"></div>
     81   
    8782    <div class="content">
    8883 
     
    124119    </form>
    125120   
    126 
    127121    <base:buttongroup subclass="dialogbuttons">
    128       <base:button onclick="window.close()" title="Close" />
     122      <base:button id="close" title="Close" />
    129123    </base:buttongroup>
    130124   
  • trunk/www/filemanager/files/edit_file.jsp

    r6217 r6308  
    128128  subtypesQuery.include(Include.ALL);
    129129 
    130  
    131  
    132130  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(itemType), file);
    133131  ExtensionsInvoker invoker = EditUtil.useEditExtensions(jspContext);
    134132  %>
    135   <base:page type="popup" title="<%=title%>">
    136   <base:head scripts="tabcontrol.js" styles="tabcontrol.css">
     133  <base:page type="popup" title="<%=title%>" id="edit-page">
     134  <base:head scripts="tabcontrol-2.js,~files.js" styles="tabcontrol.css">
    137135    <ext:scripts context="<%=jspContext%>" />
    138136    <ext:stylesheets context="<%=jspContext%>" />
    139     <script>
    140     // Validate the "File" tab
    141     function validateFile()
    142     {
    143       var frm = document.forms['file'];
    144       if (Main.trimString(frm.name.value) == '')
    145       {
    146         Forms.showNotification(frm.name, 'You must enter a name');
    147         return false;
    148       }
    149       if (frm.url && Main.trimString(frm.url.value) == '')
    150       {
    151         Forms.showNotification(frm.url, 'You must enter a URL');
    152         return false;
    153       }
    154       return true;
    155     }
    156 
    157     // Submit the form
    158     function saveSettings()
    159     {
    160       var frm = document.forms['file'];
    161       if (TabControl.validateActiveTab('settings'))
    162       {
    163         frm.submit();
    164       }
    165     }
    166     var lastAutoChange = '';
    167     function urlOnChange()
    168     {
    169       var frm = document.forms['file'];
    170       var url = frm.url.value;
    171       if (url && (lastAutoChange == frm.name.value))
    172       {
    173         var end = url.lastIndexOf('/');
    174         if (end >= 0) url = url.substring(end+1);
    175         frm.name.value = url;
    176         lastAutoChange = url;
    177       }
    178     }
    179     function fileServerOnClick()
    180     {
    181       var frm = document.forms['file'];
    182       var url = '../fileservers/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone&callback=setFileServerCallback';
    183       if (frm.server_id.length > 1)
    184       {
    185         var id = Math.abs(parseInt(frm.server_id[1].value));       
    186         url += '&item_id='+id;
    187       }
    188       Main.openPopup(url, 'SelectFileServer', 1050, 700);
    189     }
    190     function setFileServerCallback(id, name)
    191     {
    192       var frm = document.forms['file'];
    193       var list = frm.server_id;
    194       if (list.length < 2 || list[1].value == '0') // >
    195       {
    196         Forms.addListOption(list, 1, new Option());
    197       }
    198       list[1].value = id;
    199       list[1].text = name;
    200       list.selectedIndex = 1;
    201     }   
    202     function init()
    203     {
    204       <%
    205       if (file == null)
    206       {
    207         %>
    208         var frm = document.forms['file'];
    209         var defaultActive = frm.url ? frm.url : frm.name;
    210         defaultActive.focus();
    211         defaultActive.select();
    212         <%
    213       }
    214       %>
    215     }
    216     function mimeTypeOnClick()
    217     {
    218       var frm = document.forms['file'];
    219       var url = '../../admin/mimetypes/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone&callback=setMimeTypeCallback';
    220       Main.openPopup(url, 'SelectMimeType', 1050, 700);
    221     }
    222     function setMimeTypeCallback(id, name)
    223     {
    224       var frm = document.forms['file'];
    225       frm.mime_type.value = name;
    226     }
    227     </script>
    228137  </base:head>
    229   <base:body onload="init()">
     138  <base:body>
    230139    <h1><%=title%> <base:help tabcontrol="settings" /></h1>
    231140   
     
    234143    <input type="hidden" name="directory_id" value="<%=directory.getId()%>">
    235144
    236    
    237145    <t:tabcontrol id="settings"
    238146      subclass="content dialogtabcontrol"
    239147      position="bottom" remember="<%=file != null%>"
    240148      extensions="<%=invoker%>">
    241     <t:tab id="info" title="<%=isURL ? "URL" : "File" %>" validate="validateFile()" helpid="file.edit">
     149    <t:tab id="info" title="<%=isURL ? "URL" : "File" %>" helpid="file.edit">
    242150      <table class="fullform input100">
    243151      <tr>
     
    251159        <tr class="double">
    252160          <th>URL</th>
    253           <td><input class="text required" type="text" name="url"
     161          <td><input class="text required auto-init"
     162            data-auto-init="<%=file == null ? "focus-select" : "focus" %>"
     163            type="text" name="url" id="url"
    254164            value="<%=HTML.encodeTags(file == null ? Values.getString(cc.getPropertyValue("url")) : file.getUrl())%>"
    255             size="40" maxlength="<%=File.MAX_URL_LENGTH%>"
    256             onkeyup="urlOnChange()" onchange="urlOnChange()"><br>
     165            size="40" maxlength="<%=File.MAX_URL_LENGTH%>"><br>
    257166            <span title="Issues a HEAD request to the given URL in order to find size, MIME type, etc.">
    258167            <input type="checkbox" name="loadMetadata" id="loadMetadata" value="1" <%=file == null ? "checked" : "" %>
     
    272181            recent="<%=recentFileServers%>"
    273182            newitem="<%=file == null%>"
    274             onselect="fileServerOnClick()"
    275183          />
    276184        </td>
     
    282190      <tr>
    283191        <th>Name</th>
    284         <td><input class="text required" type="text" name="name"
     192        <td><input class="text required <%=!isURL ? "auto-init" : ""%>
     193          data-auto-init="<%=file == null ? "focus-select" : "focus" %>"
     194          type="text" name="name"
    285195          value="<%=HTML.encodeTags(file == null ? Values.getString(cc.getPropertyValue("name")) : file.getName())%>"
    286196          size="40" maxlength="<%=File.MAX_NAME_LENGTH%>"></td>
     
    335245              value="<%=HTML.encodeTags(file == null ? Values.getString(cc.getPropertyValue("mimeType")) : file.getMimeType())%>"
    336246              maxlength="<%=File.MAX_MIMETYPE_LENGTH%>"></td>
    337             <td><base:button onclick="mimeTypeOnClick()" title="Select&hellip;"/></td>
     247            <td><base:button id="selectMimeType" title="Select&hellip;"/></td>
    338248          </tr>
    339249          </table>
     
    397307
    398308    <base:buttongroup subclass="dialogbuttons">
    399       <base:button onclick="saveSettings()" title="Save" />
    400       <base:button onclick="window.close()" title="Cancel" />
     309      <base:button id="btnSave" title="Save" />
     310      <base:button id="close" title="Cancel" />
    401311    </base:buttongroup>
    402312   
  • trunk/www/filemanager/files/edit_file_data.jsp

    r6199 r6308  
    6969  %>
    7070  <base:page type="popup" title="<%=title%>">
    71   <base:head styles="toolbar.css">
    72     <script>
    73     var isModified = false;
    74     var originalText;
    75     function init()
    76     {
    77       downloadFile();
    78     }
    79     function downloadFile()
    80     {
    81       var url = 'download/-<%=ID%>-<%=HTML.javaScriptEncode(path)%>?'+(new Date().getTime());
    82       var request = Ajax.getXmlHttpRequest();
    83       request.open("GET", url, true);
    84       Ajax.setReadyStateHandler(request, onFileLoaded);
    85       request.send(null);
    86     }
    87     function onFileLoaded(request)
    88     {
    89       var frm = document.forms['file'];
    90       frm.filedata.value = request.responseText;
    91       originalText = frm.filedata.value;
    92       setModified(false);
    93       updateLineNumbers();
    94     }
    95     function saveFile(closeIfSuccess)
    96     {
    97       if (!isModified) return;
    98       var frm = document.forms['file'];
    99       var url = 'ajax.jsp?ID=<%=ID%>&cmd=StoreFile&item_id=<%=itemId%>';
    100       url += '&size='+frm.filedata.value.length;
    101       var request = Ajax.getXmlHttpRequest();
    102       request.closeIfSuccess = closeIfSuccess;
    103       request.open("POST", url, true);
    104       Ajax.setReadyStateHandler(request, onFileStored);
    105       request.send(frm.filedata.value);
    106     }
    107     function onFileStored(request)
    108     {
    109       var response = JSON.parse(request.responseText);
    110       if (response.status != 'ok')
    111       {
    112         Forms.showNotification('btnSave', response.message);
    113         return;
    114       }
    115       setModified(false);
    116       if (request.closeIfSuccess)
    117       {
    118         closeWindow(true, response.message);
    119       }
    120     }
    121     function closeFile(autoSave)
    122     {
    123       if (isModified)
    124       {
    125         if (autoSave || confirm('The file has been modified. Save changes?'))
    126         {
    127           saveFile(true);
    128           return;
    129         }
    130       }
    131       closeWindow(false);
    132     }
    133     function closeWindow(refreshParent, message)
    134     {
    135       if (refreshParent)
    136       {
    137         var url = getRoot() + 'common/close_popup.jsp?refresh_opener=1';
    138         if (message) url += '&message='+encodeURIComponent(message);
    139         location.href = url;
    140       }
    141       else
    142       {
    143         window.close();
    144       }
    145     }
    146    
    147     function detectChanges()
    148     {
    149       if (!isModified)
    150       {
    151         var frm = document.forms['file'];
    152         if (frm.filedata.value != originalText) setModified(true);
    153       }
    154     }
    155     function setModified(modified)
    156     {
    157       isModified = modified;
    158     }
    159     function detectTab(event)
    160     {
    161       var key = Main.getEventKeyCode(event);
    162       if (key == 9)
    163       {
    164         var frm = document.forms['file'];
    165         replaceSelection(frm.filedata, '\t');
    166         return false;
    167       }
    168       return true;
    169     }
    170 
    171     function updateLineNumbers()
    172     {
    173       var frm = document.forms['file'];
    174       var totalScroll = frm.filedata.scrollHeight;
    175       var topScroll = frm.filedata.scrollTop;
    176       var textHeight = frm.filedata.offsetHeight;
    177       var topLine = 1;
    178       var scrollRemain = 0;
    179       if (totalScroll > textHeight || topScroll > 0)
    180       {
    181         var numLines = frm.filedata.value.split('\n').length;
    182         var scrollPerLine = totalScroll / numLines;
    183         topLine = 1 + Math.floor(topScroll / scrollPerLine);
    184         scrollRemain = topScroll - scrollPerLine * (topLine - 1);
    185       }
    186       var lineNumberHTML = '';
    187       for (var i = topLine; i < topLine + 100; i++)
    188       {
    189         lineNumberHTML += i + '<br>';
    190       }
    191       var lineNumberElem = document.getElementById('linenumbers');
    192       lineNumberElem.innerHTML = lineNumberHTML;
    193       lineNumberElem.scrollTop = scrollRemain;
    194     }
    195    
    196     /*
    197       Replace the selected text with the given text. Code based on
    198       Trac: http://projects.edgewall.com/trac/
    199     */
    200     function replaceSelection(field, text)
    201     {
    202       field.focus();
    203         var start, end, sel, scrollPos;
    204         if (typeof(document["selection"]) != "undefined")
    205         {
    206           sel = document.selection.createRange().text;
    207         }
    208         else if (typeof(field["setSelectionRange"]) != "undefined")
    209         {
    210           start = field.selectionStart;
    211           end = field.selectionEnd;
    212           scrollPos = field.scrollTop;
    213           sel = field.value.substring(start, end);
    214         }
    215         if (sel.match(/ $/))
    216         {
    217           // exclude ending space char, if any
    218             sel = sel.substring(0, sel.length - 1);
    219         }
    220         if (typeof(document["selection"]) != "undefined")
    221         {
    222           var range = document.selection.createRange().text = text;
    223         }
    224         else if (typeof(field["setSelectionRange"]) != "undefined")
    225         {
    226           field.value = field.value.substring(0, start) + text +
    227               field.value.substring(end);
    228           field.setSelectionRange(start + text.length, start + text.length);
    229           field.scrollTop = scrollPos;
    230         }
    231     }
    232     </script>
     71  <base:head styles="toolbar.css" scripts="~edit_file_data.js">
    23372    <style>
    23473    #linenumbers
     
    268107    </style>
    269108  </base:head>
    270   <base:body onload="init()">
    271     <h1><%=title%> <base:help helpid="file.edit.data" /></h1>
     109  <base:body>
     110    <h1><%=title%> <span id="modified"></span> <base:help helpid="file.edit.data" /></h1>
     111   
     112    <div id="page-data" class="datacontainer"
     113      data-path="<%=HTML.encodeTags(path) %>"
     114      data-file-id="<%=itemId %>"
     115    ></div>
    272116   
    273117    <form action="index.jsp?ID=<%=ID%>" method="post" name="file">
     
    278122      <div id="filecontainer">
    279123      <textarea id="filedata" name="filedata"
    280         wrap="off"
    281         onkeydown="return detectTab(event);"
    282         onkeyup="detectChanges()"
    283         onscroll="updateLineNumbers()"
    284         style="overflow: auto;"
     124        wrap="off" style="overflow: auto;"
    285125        >Loading file; please wait...</textarea>
    286126      </div>
     
    289129   
    290130    <base:buttongroup subclass="dialogbuttons">
    291       <base:button id="btnSave" onclick="closeFile(true)" title="Save" />
    292       <base:button onclick="closeFile(false)" title="Close" />
     131      <base:button id="btnSave" title="Save" />
     132      <base:button id="close" title="Close" />
    293133    </base:buttongroup>
    294134  </base:body>
  • trunk/www/filemanager/files/edit_multiple_file.jsp

    r6217 r6308  
    7575  fileTypeQuery.order(Orders.asc(Hql.property("name")));
    7676  fileTypeQuery.setCacheResult(true);
    77  
    78  
    79  
    8077  %>
    8178  <base:page type="popup" title="<%=title%>">
    82   <base:head scripts="tabcontrol.js" styles="tabcontrol.css">
    83     <script>
    84     // Validate the "File" tab
    85     function validateFile()
    86     {
    87       var frm = document.forms['file'];
    88 
    89       return true;
    90     }
    91 
    92     // Submit the form
    93     function saveSettings()
    94     {
    95       var frm = document.forms['file'];
    96       if (TabControl.validateActiveTab('settings'))
    97       {
    98         frm.submit();
    99       }
    100     }
    101    
    102     function keepMimeTypeOnClick()
    103     {
    104       var frm = document.forms['file'];
    105       frm.mimeType.disabled = frm.keepMimeType.checked;
    106       if (!frm.mimeType.disabled) frm.mimeType.focus();
    107     }
    108    
    109     function mimeTypeOnClick()
    110     {
    111       var frm = document.forms['file'];
    112       var url = '../../admin/mimetypes/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone&callback=setMimeTypeCallback';
    113       Main.openPopup(url, 'SelectMimeType', 1050, 700);
    114     }
    115     function setMimeTypeCallback(id, name)
    116     {
    117       var frm = document.forms['file'];
    118       frm.mimeType.value = name;
    119       frm.mimeType.disabled = false;
    120       frm.keepMimeType.checked = false;
    121     }
    122     </script>
    123   </base:head>
     79  <base:head scripts="tabcontrol-2.js,~edit_multiple_file.js" styles="tabcontrol.css" />
    12480  <base:body>
    12581    <h1><%=title%> <base:help tabcontrol="settings" /></h1>
     
    13187      subclass="content dialogtabcontrol"
    13288      position="bottom">
    133     <t:tab id="info" title="Properties" validate="validateFile()" helpid="file.edit">
     89    <t:tab id="info" title="Properties" helpid="file.edit">
    13490      <table class="fullform input100">
    13591      <tr>
     
    162118        <th>MIME type</th>
    163119        <td>
    164           <input type="checkbox" name="keepMimeType" id="keepMimeType" value="1" checked
    165             onclick="keepMimeTypeOnClick()"><label for="keepMimeType">No change</label><br>
     120          <input type="checkbox" name="keepMimeType"
     121            id="keepMimeType" value="1" checked><label for="keepMimeType">No change</label><br>
    166122          <table style="width: 100%;">
    167123          <tr>
    168124            <td style="width: 98%;"><input class="text" type="text" name="mimeType" disabled
    169125              value="" maxlength="<%=File.MAX_MIMETYPE_LENGTH%>"></td>
    170             <td><base:button onclick="mimeTypeOnClick()" title="Select&hellip;"/></td>
     126            <td><base:button id="selectMimeType" title="Select&hellip;"/></td>
    171127          </tr>
    172128          </table>
     
    203159
    204160    <base:buttongroup subclass="dialogbuttons">
    205       <base:button onclick="saveSettings()" title="Save" />
    206       <base:button onclick="window.close()" title="Cancel" />
     161      <base:button id="btnSave" title="Save" />
     162      <base:button id="close" title="Cancel" />
    207163    </base:buttongroup>
    208164  </base:body>
  • trunk/www/filemanager/files/index.jsp

    r6192 r6308  
    170170    // Display the upload page for an existing item (should be opened in a popup)
    171171    ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, subcontext, pageContext, defaultContext);
    172     redirect = "../upload/index.jsp?ID="+ID+"&directory_id="+directoryId+"&file_id=" +itemId;
     172    redirect = "../upload/index.jsp?ID="+ID+"&file_id=" +itemId;
    173173  }
    174174  else if ("UpdateItem".equals(cmd))
     
    395395    listInvoker.render(new ListColumnExportRenderer(cc));
    396396    dc.close();
    397     redirect = "../../common/export/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&subcontext="+subcontext+"&context_type=LIST&title=Export+raw+bioassays";
     397    redirect = "../../common/export/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&subcontext="+subcontext+"&context_type=LIST&title=Export+files";
    398398  }
    399399  else if ("ExportItem".equals(cmd))
     
    401401    // Run an export plugin in single-item context
    402402    ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, subcontext, pageContext, defaultContext);
    403     redirect = "../../common/export/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&subcontext="+subcontext+"&context_type=ITEM&title=Export+raw+bioassay";
     403    redirect = "../../common/export/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&subcontext="+subcontext+"&context_type=ITEM&title=Export+file";
    404404  }
    405405  else if ("ImportItems".equals(cmd))
     
    412412    dc.close();
    413413    cc.setQuery(query);
    414     redirect = "../../common/import/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&subcontext="+subcontext+"&context_type=LIST&title=Import+raw+bioassays";
     414    redirect = "../../common/import/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&subcontext="+subcontext+"&context_type=LIST&title=Import+files";
    415415  }
    416416  else if ("ImportItem".equals(cmd))
     
    418418    // Run an import plugin in single-item context
    419419    ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, subcontext, pageContext, defaultContext);
    420     redirect = "../../common/import/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&subcontext="+subcontext+"&context_type=ITEM&title=Import+raw+bioassay";
     420    redirect = "../../common/import/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&subcontext="+subcontext+"&context_type=ITEM&title=Import+file";
    421421  }
    422422  else if ("RunListPlugin".equals(cmd))
     
    442442    int numMoved = 0;
    443443    int numTotal = cc.getSelected().size();
    444     int moveTo = Values.getInt(request.getParameter("move"), -1);
    445     if (moveTo != -1)
    446     {
    447       dc = sc.newDbControl();
    448       for (Integer id : cc.getSelected())
     444    Location moveTo = Location.valueOf(request.getParameter("move"));
     445   
     446    dc = sc.newDbControl();
     447    for (Integer id : cc.getSelected())
     448    {
     449      File f = File.getById(dc, id);
     450      Location current = f.getLocation();
     451      try
    449452      {
    450         File f = File.getById(dc, id);
    451         Location current = f.getLocation();
    452         try
     453        if (moveTo == Location.OFFLINE && current != Location.OFFLINE)
    453454        {
    454           if (moveTo == 0 && current != Location.OFFLINE)
    455           {
    456             // 0 = move offline
    457             f.setLocation(Location.OFFLINE);
    458             f.setAction(File.Action.NOTHING);
    459             numMoved++;
    460           }
    461           else if (moveTo == 1)
    462           {
    463             // 1 = move to primary
    464             f.setAction(current == Location.PRIMARY ? File.Action.NOTHING : File.Action.MOVE_TO_PRIMARY);
    465             numMoved++;
    466           }
    467           else if (moveTo == 2)
    468           {
    469             // 2 = move to secondary
    470             f.setAction(current == Location.SECONDARY ? File.Action.NOTHING : File.Action.MOVE_TO_SECONDARY);
    471             numMoved++;
    472           }
     455          // 0 = move offline
     456          f.setLocation(Location.OFFLINE);
     457          f.setAction(File.Action.NOTHING);
     458          numMoved++;
    473459        }
    474         catch (PermissionDeniedException ex)
    475         {}
     460        else if (moveTo == Location.PRIMARY)
     461        {
     462          // 1 = move to primary
     463          f.setAction(current == Location.PRIMARY ? File.Action.NOTHING : File.Action.MOVE_TO_PRIMARY);
     464          numMoved++;
     465        }
     466        else if (moveTo == Location.SECONDARY)
     467        {
     468          // 2 = move to secondary
     469          f.setAction(current == Location.SECONDARY ? File.Action.NOTHING : File.Action.MOVE_TO_SECONDARY);
     470          numMoved++;
     471        }
    476472      }
     473      catch (PermissionDeniedException ex)
     474      {}
    477475      dc.commit();
    478476    }
     
    486484  {
    487485    ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, subcontext, pageContext, defaultContext);
    488     int moveTo = Values.getInt(request.getParameter("move"), -1);
    489     if (moveTo != -1)
    490     {
    491       dc = sc.newDbControl();
    492       File f = File.getById(dc, cc.getId());
    493       Location current = f.getLocation();
    494       if (moveTo == 0 && current != Location.OFFLINE)
    495       {
    496         // 0 = move offline
    497         f.setLocation(Location.OFFLINE);
    498         f.setAction(File.Action.NOTHING);
    499       }
    500       else if (moveTo == 1)
    501       {
    502         // 1 = move to primary
    503         f.setAction(current == Location.PRIMARY ? File.Action.NOTHING : File.Action.MOVE_TO_PRIMARY);
    504       }
    505       else if (moveTo == 2)
    506       {
    507         // 2 = move to secondary
    508         f.setAction(current == Location.SECONDARY ? File.Action.NOTHING : File.Action.MOVE_TO_SECONDARY);
    509       }
    510       dc.commit();
    511     }
     486    Location moveTo = Location.valueOf(request.getParameter("move"));
     487   
     488    dc = sc.newDbControl();
     489    File f = File.getById(dc, cc.getId());
     490    Location current = f.getLocation();
     491    if (moveTo == Location.OFFLINE && current != Location.OFFLINE)
     492    {
     493      // 0 = move offline
     494      f.setLocation(Location.OFFLINE);
     495      f.setAction(File.Action.NOTHING);
     496    }
     497    else if (moveTo == Location.PRIMARY)
     498    {
     499      // 1 = move to primary
     500      f.setAction(current == Location.PRIMARY ? File.Action.NOTHING : File.Action.MOVE_TO_PRIMARY);
     501    }
     502    else if (moveTo == Location.SECONDARY)
     503    {
     504      // 2 = move to secondary
     505      f.setAction(current == Location.SECONDARY ? File.Action.NOTHING : File.Action.MOVE_TO_SECONDARY);
     506    }
     507    dc.commit();
    512508    redirect = viewPage;
    513509  }
     
    572568    // Download the file contents of a file
    573569    ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, subcontext, pageContext, defaultContext);
    574     forward = root + "filemanager/files/download_file.jsp?ID="+ID;
     570    forward = "download_file.jsp?ID="+ID;
    575571  }
    576572  else if ("CompressItem".equals(cmd))
  • trunk/www/filemanager/files/list_files.jsp

    r6268 r6308  
    100100{
    101101  final Directory current = isSearch ? null : Directory.getById(dc, directoryId);
     102  final String currentPath = current == null ? null : HTML.encodeTags(current.getPath().toString());
    102103  final boolean createFilePermission = isSearch ? false : sc.hasPermission(Permission.CREATE, itemType) && current.hasPermission(Permission.USE);
    103104  final boolean createDirectoryPermission = isSearch ? false : sc.hasPermission(Permission.CREATE, Item.DIRECTORY) && current.hasPermission(Permission.USE);
     
    240241  ExtensionsInvoker columnsInvoker = ListColumnUtil.useExtensions(jspContext);
    241242  %>
    242   <base:page title="<%=title==null ? "Files" : title%>" type="iframe">
    243   <base:head scripts="table.js,menu.js,dragdrop.js" styles="table.css,toolbar.css,menu.css">
     243  <base:page title="<%=title==null ? "Files" : title%>" type="iframe" id="list-page">
     244  <base:head scripts="table.js,menu.js,dragdrop.js,~files.js" styles="table.css,toolbar.css,menu.css">
    244245    <ext:scripts context="<%=jspContext%>" />
    245246    <ext:stylesheets context="<%=jspContext%>" />
    246     <script>
    247     var submitPage = 'index.jsp';
    248     var formId = 'files';
    249     function editFile(fileId)
    250     {
    251       Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', fileId, true, '&directory_id=<%=directoryId%>');
    252     }
    253     function uploadFile(fileId)
    254     {
    255       var cmd = fileId ? 'UploadFile' : 'UploadNewFile';
    256       Main.openPopup('index.jsp?ID=<%=ID%>&cmd='+cmd+'&directory_id=<%=directoryId%>&item_id='+fileId, 'UploadFile', 600, 400);
    257     }
    258     function viewFile(fileId)
    259     {
    260       location.href = 'index.jsp?ID=<%=ID%>&cmd=ViewItem&item_id='+fileId;
    261     }
    262     function fileOnClick(evt, fileId)
    263     {
    264       Table.itemOnClick(formId, evt, fileId, '<%=mode.getName()%>', viewFile, editFile, returnSelected);
    265     }
    266    
    267     function editDirectory(directoryId)
    268     {
    269       Main.viewOrEditItem('<%=ID%>', 'DIRECTORY', directoryId, true);
    270     }
    271     function directoryOnClick(evt, directoryId)
    272     {
    273       editDirectory(directoryId);
    274     }
    275     function newDirectory()
    276     {
    277       Main.viewOrEditItem('<%=ID%>', 'DIRECTORY', 0, true, '&parent_id=<%=directoryId%>');
    278     }
    279     function editSelectedFiles()
    280     {
    281       var frm = document.forms[formId];
    282       if (Forms.numChecked(frm, /^\d+$/) == 0)
    283       {
    284         Forms.showNotification('check.uncheck', 'Please select at least one file in the list', null, 'pointer-left');
    285         return;
    286       }
    287       Table.submitToPopup(formId, 'EditMultiple', 600, 400);
    288     }
    289     function deleteItems()
    290     {
    291       var frm = document.forms[formId];
    292       if (Forms.numChecked(frm) == 0)
    293       {
    294         Forms.showNotification('check.uncheck', 'Please select at least one item in the list', null, 'pointer-left');
    295         return;
    296       }
    297       frm.action = submitPage;
    298       frm.cmd.value = 'DeleteItems';
    299       frm.submit();
    300     }
    301     function restoreItems()
    302     {
    303       var frm = document.forms[formId];
    304       if (Forms.numChecked(frm) == 0)
    305       {
    306         Forms.showNotification('check.uncheck', 'Please select at least one item in the list', null, 'pointer-left');
    307         return;
    308       }
    309       frm.action = submitPage;
    310       frm.cmd.value = 'RestoreItems';
    311       frm.submit();
    312     }
    313     function deleteFilePermanently(itemId)
    314     {
    315       Main.deleteItemPermanently('<%=ID%>', true, 'FILE', itemId);
    316     }
    317     function deleteDirectoryPermanently(itemId)
    318     {
    319       Main.deleteItemPermanently('<%=ID%>', true, 'DIRECTORY', itemId);
    320     }
    321     function setOwner()
    322     {
    323       Table.setOwnerOfItems(formId);
    324     }
    325     function shareDirectory(itemId)
    326     {
    327       Main.openPopup('../directories/index.jsp?ID=<%=ID%>&cmd=ShareItem&item_id='+itemId, 'ShareDirectory', 600, 400);
    328     }
    329     function shareFile(itemId)
    330     {
    331       Main.openPopup('index.jsp?ID=<%=ID%>&cmd=ShareItem&item_id='+itemId, 'ShareFile', 600, 400);
    332     }
    333     function shareItems()
    334     {
    335       Table.shareItems(formId);
    336     }
    337     function configureColumns()
    338     {
    339       Table.configureColumns(formId);
    340     }
    341     function runPlugin(cmd)
    342     {
    343       Table.submitToPopup(formId, cmd, 750, 500);
    344     }
    345     function returnSelected(element)
    346     {
    347       var frm = document.forms[formId];
    348       updateSelected(element);
    349       if (element.type == 'radio')
    350       {
    351         window.top.returnSelected();
    352         window.top.close();
    353       }
    354     }
    355     function updateSelected(element)
    356     {
    357       if (element.type == 'radio')
    358       {
    359         window.top.setSelected(element.value, element.title);
    360       }
    361       else if (element.type == 'checkbox')
    362       {
    363         if (element.checked)
    364         {
    365           window.top.addSelected(element.value, element.title);
    366         }
    367         else
    368         {
    369           window.top.removeSelected(element.value);
    370         }
    371       }
    372     }
    373 
    374    
    375     function moveToDirectory(directoryId, path)
    376     {
    377       var frm = document.forms[formId]
    378       numChecked = Forms.numChecked(frm);
    379       if (!directoryId)
    380       {
    381         if (numChecked == 0)
    382         {
    383           Forms.showNotification('check.uncheck', 'Please select at least one item in the list', null, 'pointer-left');
    384           return;
    385         }
    386         Main.openPopup('../directories/index.jsp?ID=<%=ID%>&mode=selectonedirectory&title=Move+to&directory_id=<%=directoryId%>&callback=moveToDirectory', 'SelectDirectory', 500, 500);
    387       }
    388       else if (numChecked > 0)
    389       {
    390         Forms.createHidden(frm, 'newdirectory_id', directoryId);
    391         frm.action = submitPage;
    392         frm.cmd.value = 'MoveToDirectory';
    393         frm.submit();
    394       }
    395     }
    396     function moveTo(location)
    397     {
    398       var frm = document.forms[formId];
    399       if (Forms.numChecked(frm) == 0)
    400       {
    401         Forms.showNotification('check.uncheck', 'Please select at least one item in the list', null, 'pointer-left');
    402         return;
    403       }
    404       if (location == <%=Location.OFFLINE.getValue()%>)
    405       {
    406         var msg = "This action will remove the file data of the selected file(s) from the server.\n";
    407         msg += "If you need the data again you have to re-upload the file(s).\n\n";
    408         msg += "Continue?";
    409         if (!confirm(msg)) return; 
    410       }
    411       Forms.createHidden(frm, 'move', location);
    412       frm.action = submitPage;
    413       frm.cmd.value = 'MoveItems';
    414       frm.submit();
    415     }
    416     function selectDirectory(subDirId)
    417     {
    418       parent.frames.directories.synchronizeTo(subDirId, <%=directoryId%>);
    419     }
    420     function updateSearchResults()
    421     {
    422       <%
    423       if (isSearch)
    424       {
    425         %>
    426         parent.frames.directories.updateSearchResults(<%=numFiles%>, <%=numDirectories%>);
    427         <%
    428       }
    429       %>
    430     }
    431     </script>
    432247  </base:head>
    433248 
    434   <base:body onload="updateSearchResults()">
     249  <base:body>
    435250  <m:menu
    436     id="move"
     251    id="moveFiles"
    437252    style="display: none;">
    438  
    439253    <m:menuitem
     254      id="mnuMoveToDirectory"
    440255      title="To another directory&hellip;"
    441       onclick="moveToDirectory()"
    442256      tooltip="Move the selected files and directories to another directory"
    443257    />
    444258    <m:menuseparator />
    445259    <m:menuitem
     260      id="mnuMoveOffline"
     261      data-location="OFFLINE"
    446262      title="Offline&hellip;"
    447       onclick="moveTo(0)"
    448263      tooltip="Remove the selected files from the server (immedately)"
    449264    />
     
    453268      %>
    454269      <m:menuitem
     270        id="mnuMoveToPrimary"
     271        data-location="PRIMARY"
    455272        title="To primary location"
    456         onclick="moveTo(1)"
    457273        tooltip="Enqueue the selected files to be moved back to primary storage"
    458274      />
    459275      <m:menuitem
     276        id="mnuMoveToSecondary"
     277        data-location="SECONDARY"
    460278        title="To secondary location"
    461         onclick="moveTo(2)"
    462279        tooltip="Enqueue the selected files to be moved to secondary storage"
    463280      />
     
    468285  </m:menu>
    469286  <div id="main" class="absolutefull auto-init" data-auto-init="drag-support">
     287    <div id="page-data" class="datacontainer"
     288      data-is-search="<%=isSearch ? 1 : 0 %>"
     289      data-files-found="<%=numFiles %>"
     290      data-directories-found="<%=numDirectories %>"
     291      data-current-path="<%=currentPath == null ? "" : currentPath %>"
     292    ></div>
     293 
    470294    <tbl:table
    471295      id="files"
     
    712536        <tbl:toolbar subclass="bottomborder">
    713537          <tbl:button
     538            id="btnNewDirectory"
     539            data-item-type="DIRECTORY"
     540            data-extra-url="<%="&parent_id="+directoryId%>"
    714541            disabled="<%=!createDirectoryPermission%>"
    715542            image="directory_new.png"
    716             onclick="newDirectory()"
    717543            title="New directory&hellip;"
    718544            visible="<%=!isSearch%>"
     
    720546          />
    721547          <tbl:button
     548            id="btnUpload"
    722549            disabled="<%=!createFilePermission%>"
    723550            image="upload.png"
    724             onclick="uploadFile(0)"
    725551            title="Upload file&hellip;"
    726552            visible="<%=!isSearch%>"
     
    728554          />
    729555          <tbl:button
     556            id="btnNewURL"
    730557            disabled="<%=!createFilePermission%>"
    731558            image="url_new.png"
    732             onclick="editFile(0)"
    733559            title="New URL&hellip;"
    734560            visible="<%=!isSearch%>"
     
    736562          />
    737563          <tbl:button
     564            id="btnEditMultipleFiles"
    738565            image="edit.png"
    739             onclick="editSelectedFiles()"
    740566            title="Edit&hellip;"
    741567            tooltip="Edit the selected files"
    742568          />
    743569          <tbl:button
     570            id="btnMoveFiles"
     571            subclass="auto-init"
     572            data-auto-init="menu-anchor"
     573            data-menu-id="moveFiles"
    744574            image="move.png"
    745             onclick="Menu.toggleTopMenu('move', event.clientX, event.clientY); event.cancelBubble = true;"
    746575            title="Move&hellip;"
    747576            tooltip="Move the selected items"
     
    749578          />
    750579          <tbl:button
     580            id="btnDeleteItems"
    751581            image="delete.png"
    752             onclick="deleteItems()"
    753582            title="Delete"
    754583            tooltip="Delete the selected items"
     
    756585          />
    757586          <tbl:button
     587            id="btnRestoreItems"
    758588            image="restore.png"
    759             onclick="restoreItems()"
    760589            title="Restore"
    761590            tooltip="Restore the selected (deleted) items"
     
    763592          />
    764593          <tbl:button
     594            id="btnShareItems"
    765595            image="share.png"
    766             onclick="shareItems()"
    767596            title="Share&hellip;"
    768597            tooltip="Share the selected items"
     
    770599          />
    771600          <tbl:button
     601            id="btnSetOwner"
    772602            image="take_ownership.png"
    773             onclick="setOwner()"
    774603            title="Set owner&hellip;"
    775604            tooltip="Change owner of the selected items"
    776605          />
    777606          <tbl:button
     607            id="btnColumns"
    778608            image="columns.png"
    779             onclick="configureColumns()"
    780609            title="Columns&hellip;"
    781610            tooltip="Show, hide and re-order columns"
     
    783612          />
    784613          <tbl:button
     614            id="btnImport"
     615            data-plugin-type="IMPORT"
    785616            image="import.png"
    786             onclick="runPlugin('ImportItems')"
    787617            title="Import&hellip;"
    788618            tooltip="Import data"
     
    790620          />
    791621          <tbl:button
     622            id="btnExport"
     623            data-plugin-type="EXPORT"
    792624            image="export.png"
    793             onclick="runPlugin('ExportItems')"
    794625            title="Export&hellip;"
    795626            tooltip="Export data"
     
    797628          />
    798629          <tbl:button
     630            id="btnRunPlugin"
     631            data-plugin-type="OTHER"
    799632            image="runplugin.png"
    800             onclick="runPlugin('RunListPlugin')"
    801633            title="Run plugin&hellip;"
    802634            tooltip="Run a plugin"
     
    808640        <tbl:panel visible="<%=!isSearch%>">
    809641          <tbl:presetselector />
    810           <%=current.getPath().toString()%>
     642          <%=currentPath%>
    811643        </tbl:panel>
    812644        <tbl:panel visible="<%=isSearch%>">
     
    870702              Directory item = directories.next();
    871703              int itemId = item.getId();
    872               String openSharePopup = "shareDirectory("+itemId+")";
    873               String deletePermanently = "deleteDirectoryPermanently("+itemId+")";
    874704              boolean deletePermission = item.hasPermission(Permission.DELETE);
    875705              boolean sharePermission = item.hasPermission(Permission.SET_PERMISSION);
     
    885715              catch (Throwable t)
    886716              {}
     717              String tooltip = mode.isSelectionMode() ?
     718                "Select this item" : "Edit this item";
    887719              %>
    888720              <tbl:row>
     
    890722                  clazz="index"
    891723                  ><base:icon
     724                    subclass="link auto-init"
     725                    data-auto-init="open-directory"
     726                    data-directory-id="<%=itemId %>"
    892727                    image="<%=icon%>"
    893728                    tooltip="<%=tagPath%>"
    894                     onclick="<%="selectDirectory(" + itemId + ")"%>"
    895729                  /></tbl:header>
    896730                <tbl:header
     
    915749                    id="<%="delete."+itemId %>"
    916750                    subclass="<%=deletePermission ? "table-delete-item" : null %>"
     751                    data-item-type="DIRECTORY"
    917752                    data-item-id="<%=itemId%>"
     753                    data-notify="reloadOnNotify"
    918754                    tooltip="This item has been scheduled for deletion"
    919755                    visible="<%=item.isRemoved()%>"
     
    922758                    id="<%="share."+itemId %>"
    923759                    subclass="<%=sharePermission ? "table-share-item" : null %>"
     760                    data-item-type="DIRECTORY"
    924761                    data-item-id="<%=itemId%>"
    925762                    tooltip="This item is shared to other users, groups and/or projects"
    926763                    visible="<%=item.isShared()%>"
    927764                  />&nbsp;</tbl:header>
    928                 <tbl:cell column="name"><div class="link" onclick="directoryOnClick(event, <%=itemId%>)" title="Edit this directory"><%=name%></div></tbl:cell>
     765                <tbl:cell column="name"><div
     766                  class="link auto-init"
     767                  data-auto-init="directory-item"
     768                  data-item-type="DIRECTORY"
     769                  data-item-id="<%=itemId%>"
     770                  data-force-edit="1"
     771                  data-path="<%=tagPath %>"
     772                  title="<%=tooltip%>"><%=name%></div></tbl:cell>
    929773                <tbl:cell column="path" style="white-space: nowrap;">
    930774                  <%
     
    932776                  {
    933777                    %>
    934                     <div class="link" onclick="selectDirectory(<%=parent.getId()%>)" title="Open this directory"><%=tagPath.substring(0, tagPath.length() - name.length())%></div>
     778                    <div class="link auto-init"
     779                      data-auto-init="open-directory"
     780                      data-directory-id="<%=parent.getId() %>"
     781                      title="Open this directory"><%=tagPath.substring(0, tagPath.length() - name.length())%></div>
    935782                    <%
    936783                  }
     
    990837              int itemId = item.getId();
    991838              Location location = item.getLocation();
    992               String openSharePopup = "shareFile("+itemId+")";
    993               String deletePermanently = "deleteFilePermanently("+itemId+")";
    994839              boolean deletePermission = item.hasPermission(Permission.DELETE);
    995840              boolean sharePermission = item.hasPermission(Permission.SET_PERMISSION);
     
    1031876                  visible="<%=mode.hasCheck()%>"
    1032877                  ><input
     878                    class="auto-init"
     879                    data-auto-init="file-check"
    1033880                    type="checkbox"
    1034881                    name="<%=itemId%>"
     
    1036883                    title="<%=tagPath%>"
    1037884                    <%=cc.getSelected().contains(itemId) ? "checked" : ""%>
    1038                     onclick="updateSelected(this)"
    1039885                  ></tbl:header>
    1040886                <tbl:header
     
    1042888                  visible="<%=mode.hasRadio()%>"
    1043889                  ><input
     890                    class="auto-init"
     891                    data-auto-init="file-check"
    1044892                    type="radio"
    1045893                    name="item_id"
     
    1047895                    title="<%=tagPath%>"
    1048896                    <%=selectedItemId == itemId ? "checked" : ""%>
    1049                     onclick="updateSelected(this)"
    1050897                  ></tbl:header>
    1051898                <tbl:header
     
    1057904                    subclass="<%=deletePermission ? "table-delete-item" : null %>"
    1058905                    data-item-id="<%=itemId%>"
     906                    data-notify="reloadOnNotify"
    1059907                    tooltip="This item has been scheduled for deletion"
    1060908                    visible="<%=item.isRemoved()%>"
     
    1067915                    visible="<%=item.isShared()%>"
    1068916                  />&nbsp;</tbl:header>
    1069                 <tbl:cell column="name"><div class="link"
    1070                   onclick="fileOnClick(<%=writePermission ? "event" : null%>, <%=itemId%>)"
     917                <tbl:cell column="name"><div
     918                  class="link auto-init"
     919                  data-auto-init="file-item"
     920                  data-item-id="<%=itemId%>"
     921                  data-path="<%=tagPath %>"
     922                  data-no-edit="<%=writePermission ? 0 : 1 %>"
     923                  tabindex="0"
    1071924                  title="<%=tooltip%>"><%=name%></div></tbl:cell>
    1072925                <tbl:cell column="path" style="white-space: nowrap;">
     
    1075928                  {
    1076929                    %>
    1077                     <div class="link" onclick="selectDirectory(<%=parent.getId()%>)" title="Open this directory"><%=tagPath.substring(0, tagPath.length() - name.length())%></div>
     930                    <div class="link auto-init"
     931                      data-auto-init="open-directory"
     932                      data-directory-id="<%=parent.getId() %>"
     933                      title="Open this directory"><%=tagPath.substring(0, tagPath.length() - name.length())%></div>
    1078934                    <%
    1079935                  }
     
    1124980                  {
    1125981                    %>
    1126                     <a href="javascript:Main.viewFile('<%=ID%>', <%=itemId%>)"><base:icon image="view.png" tooltip="<%="View the contents of this file (" + fileSize + ")"%>" /></a>
    1127                     <a href="javascript:Main.downloadFile('<%=ID%>', <%=itemId%>)"><base:icon image="download.png" tooltip="<%="Download the contents of this file (" + fileSize + ")"%>" /></a>
     982                    <base:icon
     983                      subclass="link auto-init"
     984                      data-auto-init="view-file"
     985                      data-file-id="<%=itemId %>"
     986                      image="view.png"
     987                      tooltip="<%="View the contents of this file (" + fileSize + ")"%>" />
     988                    <base:icon
     989                      subclass="link auto-init"
     990                      data-auto-init="download-file"
     991                      data-file-id="<%=itemId%>"
     992                      image="download.png"
     993                      tooltip="<%="Download the contents of this file (" + fileSize + ")"%>" />
    1128994                    <%
    1129995                  }
     
    1131997                  {
    1132998                    %>
    1133                     <a href="javascript:uploadFile(<%=itemId%>)"><base:icon image="upload.png" tooltip="Upload this file again" /></a>
     999                    <base:icon
     1000                      subclass="link auto-init"
     1001                      data-auto-init="upload-file"
     1002                      data-file-id="<%=itemId%>"
     1003                      image="upload.png" tooltip="Upload this file again"
     1004                    />
    11341005                    <%
    11351006                  }
     
    11821053    </tbl:table>
    11831054  </div>
     1055  <div id="reloadOnNotify"></div>
    11841056  </base:body>
    11851057  </base:page>
  • trunk/www/filemanager/files/view_file.jsp

    r6268 r6308  
    103103  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
    104104  %>
    105   <base:page type="iframe" title="<%=title%>">
    106   <base:head scripts="table.js,tabcontrol.js,dragdrop.js" styles="table.css,toolbar.css,headertabcontrol.css">
     105  <base:page type="iframe" title="<%=title%>" id="view-page">
     106  <base:head scripts="table.js,tabcontrol-2.js,dragdrop.js,~files.js" styles="table.css,toolbar.css,headertabcontrol.css">
    107107    <ext:scripts context="<%=jspContext%>" />
    108108    <ext:stylesheets context="<%=jspContext%>" />
    109     <script>
    110     function editItem()
    111     {
    112       Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true);
    113     }
    114     function shareItem()
    115     {
    116       Main.openPopup('index.jsp?ID=<%=ID%>&cmd=ShareItem&item_id=<%=itemId%>', 'ShareFile', 600, 400);
    117     }
    118     function deleteItem()
    119     {
    120       location.replace('index.jsp?ID=<%=ID%>&cmd=DeleteItem&item_id=<%=itemId%>');
    121     }
    122     function restoreItem()
    123     {
    124       location.replace('index.jsp?ID=<%=ID%>&cmd=RestoreItem&item_id=<%=itemId%>');
    125     }
    126     function deleteItemPermanently()
    127     {
    128       Main.deleteItemPermanently('<%=ID%>', true, '<%=itemType.name()%>', <%=itemId%>, '&callback=itemDeleted');
    129     }
    130     function itemDeleted()
    131     {
    132       location.replace(getRoot() + 'filemanager/files/index.jsp?ID=<%=ID%>');
    133     }
    134     function showUsingItems()
    135     {
    136       Main.showUsingItems('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>);
    137     }
    138     function setOwner()
    139     {
    140       Main.openPopup('index.jsp?ID=<%=ID%>&cmd=SetOwnerOfItem&item_id=<%=itemId%>', 'SetOwnerOfItem', 450, 300);
    141     }
    142     function runPlugin(cmd)
    143     {
    144       Main.openPopup('index.jsp?ID=<%=ID%>&cmd='+cmd+'&item_id=<%=itemId%>', 'RunPlugin'+cmd, 750, 500);
    145     }
    146     function uploadFile()
    147     {
    148       Main.openPopup('index.jsp?ID=<%=ID%>&cmd=UploadFile&item_id=<%=itemId%>', 'UploadFile', 600, 400);
    149     }
    150     function moveOffline()
    151     {
    152       var msg = "This action will remove the file data of the selected file from the server.\n";
    153       msg += "If you need the data again you have to re-upload the file.\n\n";
    154       msg += "Continue?";
    155       if (!confirm(msg)) return; 
    156       location.href = "index.jsp?ID=<%=ID%>&cmd=MoveItem&move=0&item_id=<%=itemId%>";
    157     }
    158     function compress()
    159     {
    160       Main.openPopup('../../common/progress_reporter.jsp?ID=<%=ID%>&progress=compress&title=Compressing file', 'CompressFile', 300, 200);
    161       location.replace('index.jsp?ID=<%=ID%>&cmd=CompressItem&item_id=<%=itemId%>');
    162     }
    163     function decompress()
    164     {
    165       Main.openPopup('../../common/progress_reporter.jsp?ID=<%=ID%>&progress=decompress&title=Decompressing file', 'UncompressFile', 300, 200);
    166       location.replace('index.jsp?ID=<%=ID%>&cmd=DecompressItem&item_id=<%=itemId%>');
    167     }
    168     function editFileData()
    169     {
    170       Main.openPopup('index.jsp?ID=<%=ID%>&cmd=EditFileData&item_id=<%=itemId%>', 'EditFileData', 800, 600);
    171     }
    172     </script>
    173109  </base:head>
    174110  <base:body>
    175111    <div class="absolutefull auto-init" data-auto-init="drag-support">
     112
     113    <div id="page-data" data-item-id="<%=itemId%>"></div>
    176114   
    177115    <t:tabcontrol
     
    190128          />
    191129          <base:icon
     130            id="btnDeletePermanently"
    192131            image="deleted.png"
    193             onclick="deleteItemPermanently()"
    194132            tooltip="This item has been flagged for deletion. Click to delete it now."
    195133            enabled="<%=deletePermanentlyPermission %>"
    196134            visible="<%=isRemoved%>"
    197135          />
    198           <base:icon image="used.png"
    199             onclick="showUsingItems()"
     136          <base:icon
     137            id="btnUsingItems"
     138            image="used.png"
    200139            tooltip="This item is used by other items and can't be permanently deleted. Show the items that are using this one"
    201140            visible="<%=isRemoved && isUsed%>" />
     
    204143          <tbl:toolbar subclass="bottomborder">
    205144            <tbl:button
     145              id="btnEdit"
    206146              disabled="<%=!writePermission%>"
    207147              image="edit.png"
    208               onclick="editItem()"
    209148              title="Edit&hellip;"
    210149              tooltip="<%=writePermission ? "Edit this file" : "You do not have permission to edit this file"%>"
    211150            />
    212151            <tbl:button
     152              id="btnEditFileData"
    213153              visible="<%=editable%>"
    214154              image="file_edit.png"
    215               onclick="editFileData()"
    216155              title="Edit file&hellip;"
    217156              tooltip="Edit the contents of this file"
    218157            />
    219158            <tbl:button
     159              id="btnDelete"
    220160              disabled="<%=!deletePermission%>"
    221161              image="delete.png"
    222               onclick="deleteItem()"
    223162              title="Delete"
    224163              visible="<%=!file.isRemoved()%>"
     
    226165            />
    227166            <tbl:button
     167              id="btnRestore"
    228168              disabled="<%=!writePermission%>"
    229169              image="restore.png"
    230               onclick="restoreItem()"
    231170              title="Restore"
    232171              visible="<%=file.isRemoved()%>"
     
    234173            />
    235174            <tbl:button
     175              id="btnShare"
    236176              disabled="<%=!sharePermission%>"
    237177              image="share.png"
    238               onclick="shareItem()"
    239178              title="Share&hellip;"
    240179              tooltip="<%=sharePermission ? "Share this file to other user, groups and projects" : "You do not have permission to share this file"%>"
    241180            />
    242181            <tbl:button
     182              id="btnSetOwner"
    243183              disabled="<%=!setOwnerPermission%>"
    244184              image="take_ownership.png"
    245               onclick="setOwner()"
    246185              title="Set owner&hellip;"
    247186              tooltip="<%=setOwnerPermission ? "Change owner of this item" : "You do not have permission to change ownership of this item"%>"
    248187            />
    249188            <tbl:button
     189              id="btnCompress"
    250190              disabled="<%=!writePermission%>"
    251191              image="compress.png"
    252               onclick="compress()"
    253192              title="Compress&hellip;"
    254193              visible="<%=!file.isCompressed() && location == Location.PRIMARY%>"
     
    256195            />
    257196            <tbl:button
     197              id="btnDecompress"
    258198              disabled="<%=!writePermission%>"
    259199              image="decompress.png"
    260               onclick="decompress()"
    261200              title="Decompress&hellip;"
    262201              visible="<%=file.isCompressed() && location == Location.PRIMARY%>"
     
    264203            />
    265204            <tbl:button
     205              id="btnImport"
    266206              image="import.png"
    267               onclick="runPlugin('ImportItem')"
     207              data-plugin-type="IMPORT"
    268208              title="Import&hellip;"
    269209              tooltip="Import data"
     
    271211            />
    272212            <tbl:button
    273               image="export.png"
    274               onclick="runPlugin('ExportItem')"
     213              id="btnExport"
     214              image="export.png"
     215              data-plugin-type="EXPORT"
    275216              title="Export&hellip;"
    276217              tooltip="Export data"
     
    278219            />
    279220            <tbl:button
    280               image="runplugin.png"
    281               onclick="runPlugin('RunPlugin')"
     221              id="btnRunPlugin"
     222              image="runplugin.png" 
     223              data-plugin-type="OTHER"
    282224              title="Run plugin&hellip;"
    283225              tooltip="Run a plugin"
     
    288230            <tbl:button
    289231              image="help.png"
    290               onclick="<%="Main.openHelp('" + ID +"', 'file.view.properties')"%>"
     232              subclass="auto-init"
     233              data-auto-init="help"
     234              data-help-id="file.view.properties"
    291235              title="Help&hellip;"
    292236              tooltip="Get help about this page"
     
    331275        {
    332276          %>
    333           [<a href="javascript:Main.viewFile('<%=ID%>', <%=itemId%>)"><base:icon image="view.png" tooltip="<%="View the contents of this file (" + bytes + ")"%>" /></a>
    334           <a href="javascript:Main.downloadFile('<%=ID%>', <%=itemId%>)"><base:icon image="download.png" tooltip="<%="Download the contents of this file (" + bytes + ")"%>" /></a>
     277          [<base:icon
     278            subclass="link auto-init"
     279            data-auto-init="view-file"
     280            data-file-id="<%=itemId%>"
     281            image="view.png"
     282            tooltip="<%="View the contents of this file (" + bytes + ")"%>" />
     283          <base:icon
     284            subclass="link auto-init"
     285            data-auto-init="download-file"
     286            data-file-id="<%=itemId%>"
     287            image="download.png"
     288            tooltip="<%="Download the contents of this file (" + bytes + ")"%>" />
    335289          <%
    336290          if (location == Location.PRIMARY && file.hasPermission(Permission.WRITE) && !file.isWriteProtected())
    337291          {
    338292            %>
    339             | <a href="javascript:moveOffline()">move offline</a>
     293            | <span class="link"
     294              id="moveOffline"
     295              data-file-id="<%=itemId %>"
     296              data-location="OFFLINE"
     297              >move offline</span>
    340298            <%
    341299            if (action == File.Action.MOVE_TO_SECONDARY)
     
    352310            }
    353311            %>
    354             | <a href="javascript:uploadFile()">replace</a>
     312            | <span class="link auto-init"
     313              data-auto-init="upload-file"
     314              data-file-id="<%=itemId%>">replace</span>
    355315            <%
    356316          }
     
    362322        {
    363323          %>
    364           [<a href="javascript:moveOffline()">move offline</a>
     324          [<span class="link"
     325              id="moveOffline"
     326              data-file-id="<%=itemId %>"
     327              data-location="OFFLINE"
     328              >move offline</span>
    365329          <%
    366330          if (action == File.Action.MOVE_TO_PRIMARY)
     
    383347        {
    384348          %>
    385           [<a href="javascript:uploadFile()"><base:icon image="upload.png" tooltip="Upload this file again" /></a>]
     349          [<base:icon
     350            subclass="link auto-init"
     351            data-auto-init="upload-file"
     352            data-file-id="<%=itemId%>"
     353            image="upload.png" tooltip="Upload this file again" />]
    386354          <%
    387355        }
     
    464432    <t:tab id="history" title="Change history"
    465433      tooltip="Displays a log of all modifications made to this item"
    466       visible="<%=ChangeHistoryUtil.showChangeHistoryTab(sc)%>"
    467       activate="History.loadOnce()">
     434      visible="<%=ChangeHistoryUtil.showChangeHistoryTab(sc)%>">
    468435      <jsp:include page="../../common/history/frameset.jsp">
    469436        <jsp:param name="item_type" value="<%=itemType.name()%>" />
  • trunk/www/filemanager/fileservers/edit_fileserver.jsp

    r6217 r6308  
    6868    title = "Edit file server -- " + HTML.encodeTags(server.getName());
    6969  }
    70  
    71  
    72  
     70   
    7371  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(itemType), server);
    7472  ExtensionsInvoker invoker = EditUtil.useEditExtensions(jspContext);
    7573  List<ConnectionManagerFactory> cmFactories = ConnectionManagerUtil.getFactories();
    7674  %>
    77   <base:page type="popup" title="<%=title%>">
    78   <base:head scripts="tabcontrol.js" styles="tabcontrol.css">
     75  <base:page type="popup" title="<%=title%>" id="edit-page">
     76  <base:head scripts="tabcontrol-2.js,~fileservers.js" styles="tabcontrol.css">
    7977    <ext:scripts context="<%=jspContext%>" />
    8078    <ext:stylesheets context="<%=jspContext%>" />
    81     <script>
    82     // Validate the "File server" tab
    83     function validateFileServer()
    84     {
    85       var frm = document.forms['server'];
    86       if (Main.trimString(frm.name.value) == '')
    87       {
    88         Forms.showNotification(frm.name, 'You must enter a name');
    89         return false;
    90       }
    91       return true;
    92     }
    93    
    94     function validateCertificates()
    95     {
    96       return true;
    97     }
    98 
    99     // Submit the form
    100     function saveSettings()
    101     {
    102       var frm = document.forms['server'];
    103       if (TabControl.validateActiveTab('settings'))
    104       {
    105         frm.submit();
    106       }
    107     }
    108    
    109     function init()
    110     {
    111       <%
    112       if (server == null)
    113       {
    114         %>
    115         var frm = document.forms['server'];
    116         frm.name.focus();
    117         frm.name.select();
    118         <%
    119       }
    120       %>
    121       connectionManagerOnChange();
    122     }
    123    
    124     var currentCMF;
    125     function connectionManagerOnChange()
    126     {
    127       var frm = document.forms['server'];
    128       if (currentCMF) Main.hide(currentCMF);
    129      
    130       var cmfId = frm.connectionManager[frm.connectionManager.selectedIndex].value;
    131       if (!cmfId) cmfId = 'auto';
    132       currentCMF = 'cmf.' + cmfId + '.description';
    133       Main.show(currentCMF);
    134     }
    135 
    136    
    137     function removeServerCertificateOnClick()
    138     {
    139       var frm = document.forms['server'];
    140       if (frm.remove_server_certificate.checked)
    141       {
    142         frm.server_certificate.value = '';
    143         frm.server_certificate.disabled = true;
    144       }
    145       else
    146       {
    147         frm.server_certificate.disabled = false;
    148       }
    149     }
    150     function removeClientCertificateOnClick()
    151     {
    152       var frm = document.forms['server'];
    153       if (frm.remove_client_certificate.checked)
    154       {
    155         frm.client_certificate.value = '';
    156         frm.client_certificate.disabled = true;
    157         frm.client_certificate_password.disabled = true;
    158       }
    159       else
    160       {
    161         frm.client_certificate.disabled = false;
    162         frm.client_certificate_password.disabled = false;
    163       }
    164     }
    165     </script>
    16679  </base:head>
    167   <base:body onload="init()">
     80  <base:body>
    16881    <h1><%=title%> <base:help tabcontrol="settings"/></h1>
    16982   
     
    17487      position="bottom"  remember="<%=server != null%>"
    17588      extensions="<%=invoker%>">
    176     <t:tab id="info" title="File server" validate="validateFileServer()" helpid="fileserver.edit">
     89    <t:tab id="info" title="File server" helpid="fileserver.edit">
    17790      <table class="fullform input100">
    17891      <tr>
    17992        <th>Name</th>
    180         <td><input class="text required" type="text" name="name"
     93        <td><input class="text required auto-init"
     94          data-auto-init="<%=server == null ? "focus-select" : "focus" %>"
     95          type="text" name="name"
    18196          value="<%=HTML.encodeTags(server == null ? Values.getString(cc.getPropertyValue("name"), "New file server") : server.getName())%>"
    18297          maxlength="<%=FileServer.MAX_NAME_LENGTH%>"></td>
     
    186101        <th>Connection manager</th>
    187102        <td>
    188           <select name="connectionManager" onchange="connectionManagerOnChange()">
     103          <select name="connectionManager" id="connectionManager">
    189104          <option value="">- auto -
    190105          <%
     
    200115          %>
    201116          </select>
    202          
    203117        </td>
    204118        <td></td>
     
    259173      </table>
    260174    </t:tab>
    261     <t:tab id="serverCertificate" title="Certificates" validate="validateCertificates()"
     175    <t:tab id="serverCertificate" title="Certificates"
    262176      helpid="fileserver.edit">
    263177     
     
    268182          <input class="text" type="file" name="server_certificate" size="40"><br>
    269183          <input type="checkbox" name="remove_server_certificate" id="removeServerCertificate" value="1"
    270             onclick="removeServerCertificateOnClick()"><label for="removeServerCertificate">Remove existing server certificate</label><br><br>
     184            ><label for="removeServerCertificate">Remove existing server certificate</label>
     185       
     186          <div class="messagecontainer help">
     187            A <b>server certificate</b> may be needed to access files with https on servers that
     188            use self-signed certificates. You may select a file containing the server's X.509 certificate
     189            in either binary or base64-encoded DER format.
     190          </div>
    271191        </td>
    272192      </tr>
     
    283203        </td>
    284204      </tr>
    285       <tr>
     205      <tr class="dynamic">
    286206        <th class="subprompt"></th>
    287207        <td>
    288208          <input type="checkbox" name="remove_client_certificate" id="removeClientCertificate" value="1"
    289             onclick="removeClientCertificateOnClick()"><label for="removeClientCertificate">Remove existing client certificate</label>
    290         </td>
    291       </tr>
    292      
    293       <tr class="dynamic">
    294         <th></th>
    295         <td>
    296             <div class="helpmessage">
    297               A <b>server certificate</b> may be needed to access files with https on servers that
    298               use self-signed certificates. You may select a file containing the server's X.509 certificate
    299               in either binary or base64-encoded DER format.
    300               <p>
    301               A <b>client certificate</b> may be needed to access files with https on servers
    302               that require client authentication using certificates. You should select a file
    303               containing your key in PKCS #12 format. If the file is password-protected you must
    304               enter the password as well.
    305             </div>
     209            ><label for="removeClientCertificate">Remove existing client certificate</label>
     210
     211          <div class="messagecontainer help">
     212            A <b>client certificate</b> may be needed to access files with https on servers
     213            that require client authentication using certificates. You should select a file
     214            containing your key in PKCS #12 format. If the file is password-protected you must
     215            enter the password as well.
     216          </div>
     217         
    306218        </td>
    307219      </tr>
     
    318230
    319231    <base:buttongroup subclass="dialogbuttons">
    320       <base:button onclick="saveSettings()" title="Save" />>
    321       <base:button onclick="window.close()" title="Cancel" />
     232      <base:button id="btnSave" title="Save" />>
     233      <base:button id="close" title="Cancel" />
    322234    </base:buttongroup>
    323235  </base:body>
  • trunk/www/filemanager/fileservers/list_fileservers.jsp

    r6221 r6308  
    9595  ExtensionsInvoker columnsInvoker = ListColumnUtil.useExtensions(jspContext);
    9696  %>
    97   <base:page title="<%=title==null ? "File servers" : title%>" type="<%=mode.getPageType()%>">
    98   <base:head scripts="table.js" styles="table.css,toolbar.css">
     97  <base:page title="<%=title==null ? "File servers" : title%>" type="<%=mode.getPageType()%>" id="list-page">
     98  <base:head scripts="table.js,~fileservers.js" styles="table.css,toolbar.css">
    9999    <ext:scripts context="<%=jspContext%>" />
    100100    <ext:stylesheets context="<%=jspContext%>" />
    101     <script>
    102     var submitPage = 'index.jsp';
    103     var formId = 'servers';
    104     function newItem()
    105     {
    106       Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', 0, true);
    107     }
    108     function editItem(itemId)
    109     {
    110       Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, true);
    111     }
    112     function viewItem(itemId)
    113     {
    114       Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, false);
    115     }
    116     function itemOnClick(evt, itemId)
    117     {
    118       Table.itemOnClick(formId, evt, itemId, '<%=mode.getName()%>', viewItem, editItem, returnSelected);
    119     }
    120     function deleteItems()
    121     {
    122       var frm = document.forms[formId];
    123       if (Forms.numChecked(frm) == 0)
    124       {
    125         Forms.showNotification('check.uncheck', 'Please select at least one item in the list', null, 'pointer-left');
    126         return;
    127       }
    128       frm.action = submitPage;
    129       frm.cmd.value = 'DeleteItems';
    130       frm.submit();
    131     }
    132     function restoreItems()
    133     {
    134       var frm = document.forms[formId];
    135       if (Forms.numChecked(frm) == 0)
    136       {
    137         Forms.showNotification('check.uncheck', 'Please select at least one item in the list', null, 'pointer-left');
    138         return;
    139       }
    140       frm.action = submitPage;
    141       frm.cmd.value = 'RestoreItems';
    142       frm.submit();
    143     }
    144     function setOwner()
    145     {
    146       Table.setOwnerOfItems(formId);
    147     }
    148     function shareItems()
    149     {
    150       Table.shareItems(formId);
    151     }
    152     function configureColumns()
    153     {
    154       Table.configureColumns(formId);
    155     }
    156     function runPlugin(cmd)
    157     {
    158       Table.submitToPopup(formId, cmd, 750, 500);
    159     }
    160     function returnSelected()
    161     {
    162       Table.returnSelected(formId, <%=callback != null ? "window.opener."+callback : "null" %>);
    163       window.close();
    164     }
    165     </script>
    166101  </base:head>
    167102 
     
    284219          >
    285220          <tbl:button
     221            id="btnNewItem"
    286222            disabled="<%=!createPermission%>"
    287223            image="new.png"
    288             onclick="newItem()"
    289224            title="New&hellip;"
    290225            tooltip="<%=createPermission ? "Create new file server" : "You do not have permission to create file servers"%>"
    291226          />
    292227          <tbl:button
     228            id="btnDeleteItems"
    293229            image="delete.png"
    294             onclick="deleteItems()"
    295230            title="Delete"
    296231            tooltip="Delete the selected items"
    297232          />
    298233          <tbl:button
     234            id="btnRestoreItems"
    299235            image="restore.png"
    300             onclick="restoreItems()"
    301236            title="Restore"
    302237            tooltip="Restore the selected (deleted) items"
    303238          />
    304239          <tbl:button
     240            id="btnShareItems"
    305241            image="share.png"
    306             onclick="shareItems()"
    307242            title="Share&hellip;"
    308243            tooltip="Share the selected items"
    309244          />
    310245          <tbl:button
     246            id="btnSetOwner"
    311247            image="take_ownership.png"
    312             onclick="setOwner()"
    313248            title="Set owner&hellip;"
    314249            tooltip="Change owner of the selected items"
    315250          />
    316251          <tbl:button
     252            id="btnColumns"
    317253            image="columns.png"
    318             onclick="configureColumns()"
    319254            title="Columns&hellip;"
    320255            tooltip="Show, hide and re-order columns"
    321256          />
    322257          <tbl:button
     258            id="btnImport"
     259            data-plugin-type="IMPORT"
    323260            image="import.png"
    324             onclick="runPlugin('ImportItems')"
    325261            title="Import&hellip;"
    326262            tooltip="Import data"
     
    328264          />
    329265          <tbl:button
     266            id="btnExport"
     267            data-plugin-type="EXPORT"
    330268            image="export.png"
    331             onclick="runPlugin('ExportItems')"
    332269            title="Export&hellip;"
    333270            tooltip="Export data"
     
    335272          />
    336273          <tbl:button
     274            id="btnRunPlugin"
     275            data-plugin-type="OTHER"
    337276            image="runplugin.png"
    338             onclick="runPlugin('RunListPlugin')"
    339277            title="Run plugin&hellip;"
    340278            tooltip="Run a plugin"
     
    456394                    visible="<%=item.isShared()%>"
    457395                  />&nbsp;</tbl:header>
    458                 <tbl:cell column="name"><div class="link"
    459                   onclick="itemOnClick(<%=writePermission ? "event" : null%>, <%=itemId%>)"
     396                <tbl:cell column="name"><div
     397                  class="link table-item"
     398                  data-item-id="<%=itemId%>"
     399                  data-no-edit="<%=writePermission ? 0 : 1 %>"
     400                  tabindex="0"
    460401                  title="<%=tooltip%>"><%=name%></div></tbl:cell>
    461402                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
     
    514455   
    515456    <base:buttongroup subclass="dialogbuttons">
    516       <base:button onclick="returnSelected();" title="Ok" visible="<%=mode.hasOkButton()%>" />
    517       <base:button onclick="window.close();" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
    518       <base:button onclick="window.close();" title="Close" visible="<%=mode.hasCloseButton()%>" />
     457      <base:button id="btnOk" title="Ok" visible="<%=mode.hasOkButton()%>" />
     458      <base:button id="close" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
     459      <base:button id="close" title="Close" visible="<%=mode.hasCloseButton()%>" />
    519460    </base:buttongroup>
    520461   
  • trunk/www/filemanager/fileservers/view_fileserver.jsp

    r6137 r6308  
    125125  ConnectionManagerFactory cmf = ConnectionManagerUtil.getFactory(server.getConnectionManagerFactoryId());
    126126  %>
    127   <base:page title="<%=title%>">
    128   <base:head scripts="table.js,tabcontrol.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css">
     127  <base:page title="<%=title%>" id="view-page">
     128  <base:head scripts="table.js,tabcontrol-2.js,~fileservers.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css">
    129129    <ext:scripts context="<%=jspContext%>" />
    130130    <ext:stylesheets context="<%=jspContext%>" />
    131     <script>
    132     function editItem()
    133     {
    134       Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true);
    135     }
    136     function shareItem()
    137     {
    138       Main.openPopup('index.jsp?ID=<%=ID%>&cmd=ShareItem&item_id=<%=itemId%>', 'ShareFileServer', 600, 400);
    139     }
    140     function deleteItem()
    141     {
    142       location.replace('index.jsp?ID=<%=ID%>&cmd=DeleteItem&item_id=<%=itemId%>');
    143     }
    144     function restoreItem()
    145     {
    146       location.replace('index.jsp?ID=<%=ID%>&cmd=RestoreItem&item_id=<%=itemId%>');
    147     }
    148     function deleteItemPermanently()
    149     {
    150       Main.deleteItemPermanently('<%=ID%>', true, '<%=itemType.name()%>', <%=itemId%>, '&callback=itemDeleted');
    151     }
    152     function itemDeleted()
    153     {
    154       Main.listItems('<%=ID%>', '<%=itemType.name()%>');
    155     }
    156     function showUsingItems()
    157     {
    158       Main.showUsingItems('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>);
    159     }
    160     function setOwner()
    161     {
    162       Main.openPopup('index.jsp?ID=<%=ID%>&cmd=SetOwnerOfItem&item_id=<%=itemId%>', 'SetOwnerOfItem', 450, 300);
    163     }
    164     function runPlugin(cmd)
    165     {
    166       Main.openPopup('index.jsp?ID=<%=ID%>&cmd='+cmd+'&item_id=<%=itemId%>', 'RunPlugin'+cmd, 750, 500);
    167     }
    168     </script>
    169131  </base:head>
    170132  <base:body>
     
    173135      /><p:pathelement title="<%=HTML.encodeTags(server.getName())%>"
    174136      /></p:path>
     137    <div id="page-data" data-item-id="<%=itemId%>"></div>
    175138   
    176139    <t:tabcontrol
     
    189152          />
    190153          <base:icon
     154            id="btnDeletePermanently"
    191155            image="deleted.png"
    192             onclick="deleteItemPermanently()"
    193156            tooltip="This item has been flagged for deletion. Click to delete it now."
    194157            enabled="<%=deletePermanentlyPermission %>"
    195158            visible="<%=isRemoved%>"
    196159          />
    197           <base:icon image="used.png"
    198             onclick="showUsingItems()"
     160          <base:icon
     161            id="btnUsingItems"
     162            image="used.png"
    199163            tooltip="This item is used by other items and can't be permanently deleted. Show the items that are using this one"
    200164            visible="<%=isRemoved && isUsed%>" />
     
    203167          <tbl:toolbar subclass="bottomborder">
    204168            <tbl:button
     169              id="btnEdit"
    205170              disabled="<%=!writePermission%>"
    206171              image="edit.png"
    207               onclick="editItem()"
    208172              title="Edit&hellip;"
    209173              tooltip="<%=writePermission ? "Edit this file server" : "You do not have permission to edit this file server"%>"
    210174            />
    211175            <tbl:button
     176              id="btnDelete"
    212177              disabled="<%=!deletePermission%>"
    213178              image="delete.png"
    214               onclick="deleteItem()"
    215179              title="Delete"
    216180              visible="<%=!server.isRemoved()%>"
     
    218182            />
    219183            <tbl:button
     184              id="btnRestore"
    220185              disabled="<%=!writePermission%>"
    221186              image="restore.png"
    222               onclick="restoreItem()"
    223187              title="Restore"
    224188              visible="<%=server.isRemoved()%>"
     
    226190            />
    227191            <tbl:button
     192              id="btnShare"
    228193              disabled="<%=!sharePermission%>"
    229194              image="share.png"
    230               onclick="shareItem()"
    231195              title="Share&hellip;"
    232196              tooltip="<%=sharePermission ? "Share this file server to other user, groups and projects" : "You do not have permission to share this file server"%>"
    233197            />
    234198            <tbl:button
     199              id="btnSetOwner"
    235200              disabled="<%=!setOwnerPermission%>"
    236201              image="take_ownership.png"
    237               onclick="setOwner()"
    238202              title="Set owner&hellip;"
    239203              tooltip="<%=setOwnerPermission ? "Change owner of this item" : "You do not have permission to change ownership of this item"%>"
    240204            />
    241205            <tbl:button
     206              id="btnImport"
    242207              image="import.png"
    243               onclick="runPlugin('ImportItem')"
     208              data-plugin-type="IMPORT"
    244209              title="Import&hellip;"
    245210              tooltip="Import data"
     
    247212            />
    248213            <tbl:button
    249               image="export.png"
    250               onclick="runPlugin('ExportItem')"
     214              id="btnExport"
     215              image="export.png"
     216              data-plugin-type="EXPORT"
    251217              title="Export&hellip;"
    252218              tooltip="Export data"
     
    254220            />
    255221            <tbl:button
    256               image="runplugin.png"
    257               onclick="runPlugin('RunPlugin')"
     222              id="btnRunPlugin"
     223              image="runplugin.png" 
     224              data-plugin-type="OTHER"
    258225              title="Run plugin&hellip;"
    259226              tooltip="Run a plugin"
     
    264231            <tbl:button
    265232              image="help.png"
    266               onclick="<%="Main.openHelp('" + ID +"', 'fileserver.view.properties')"%>"
     233              subclass="auto-init"
     234              data-auto-init="help"
     235              data-help-id="fileserver.view.properties"
    267236              title="Help&hellip;"
    268237              tooltip="Get help about this page"
  • trunk/www/filemanager/index.jsp

    r6192 r6308  
    9393    redirect = "files/index.jsp?ID="+ID+"&cmd=EditItem&item_id="+request.getParameter("item_id");
    9494  }
     95  else if ("ShareItem".equals(cmd))
     96  {
     97    redirect = "files2/index.jsp?ID="+ID+"&cmd=ShareItem&item_id="+request.getParameter("item_id");
     98  }
    9599  else if ("ViewFile".equals(cmd))
    96100  {
  • trunk/www/filemanager/manager.jsp

    r6137 r6308  
    3939%>
    4040<base:page title="Files and directories">
    41 <base:head></base:head>
     41<base:head />
    4242<base:body>
    4343  <h1>Files and directories</h1>
  • trunk/www/filemanager/save_as.jsp

    r6137 r6308  
    4141%>
    4242<base:page title="Save as" type="popup">
    43 <base:head >
    44   <script>
    45   var defaultFileName = '<%=HTML.javaScriptEncode(fileName)%>';
    46 
    47   function setSelected(fileId, path)
    48   {
    49     var frm = document.forms['file'];
    50     if (!fileId)
    51     {
    52       if (defaultFileName)
    53       {
    54         if (path.substring(path.length-1) != '/') path += '/';
    55         path += defaultFileName;
    56       }
    57     }
    58     else
    59     {
    60       var i = path.lastIndexOf('/');
    61       if (i >= 0) defaultFileName = path.substring(i+1);
    62     }
    63     frm.file_id.value = fileId;
    64     frm.path.value = path;
    65   }
    66  
    67   function returnSelected()
    68   {
    69     var frm = document.forms['file'];
    70     if (frm.path.value)
    71     {
    72       window.opener.<%=callback%>(frm.path.value);
    73     }
    74     window.close();
    75   }
    76   </script>
    77 </base:head>
     43<base:head scripts="~save_as.js" />
    7844<base:body>
    7945  <h1>Save as</h1>
     46  <div id="page-data" class="datacontainer"
     47    data-default-filename="<%=HTML.javaScriptEncode(fileName)%>"
     48    data-callback="<%=callback%>"
     49  ></div>
    8050  <form name="file">
    8151  <input type="hidden" name="file_id" value="">
     
    9868
    9969  <base:buttongroup subclass="dialogbuttons">
    100     <base:button onclick="returnSelected();" title="Ok"  />
    101     <base:button onclick="window.top.close();" title="Cancel" />
     70    <base:button id="btnOk" title="Ok"  />
     71    <base:button id="close" title="Cancel" />
    10272  </base:buttongroup>
    10373 
  • trunk/www/filemanager/select_file.jsp

    r6256 r6308  
    3939%>
    4040<base:page title="<%=requestTitle == null ? title : requestTitle%>" type="popup">
    41 <base:head >
    42   <script>
    43   var selected = new Array();
    44   function setSelected(fileId, path)
    45   {
    46     selected[0] = {'id': fileId, 'path': path};
    47     updatePath();
    48   }
    49   function addSelected(fileId, path)
    50   {
    51     if (getSelectedFileIndex(fileId) == -1)
    52     {
    53       selected[selected.length] = {'id': fileId, 'path': path};
    54     }
    55     updatePath();
    56   }
    57   function removeSelected(fileId)
    58   {
    59     var index = getSelectedFileIndex(fileId);
    60     if (index >= 0) selected.splice(index, 1);
    61     updatePath();
    62   }
    63  
    64   function getSelectedFileIndex(fileId)
    65   {
    66     for (var i = 0; i < selected.length; i++)
    67     {
    68       if (selected[i].id == fileId) return i;
    69     }
    70     return -1;
    71   }
    72  
    73   function updatePath()
    74   {
    75     var path = '';
    76     for (var i = 0; i < selected.length; i++)
    77     {
    78       if (path != '') path += ', ';
    79       path += selected[i].path;
    80     }
    81     document.getElementById('files').innerHTML = path;
    82    
    83   }
    84   function returnSelected()
    85   {
    86     var callback = '<%=callback%>';
    87     var notifyTarget = window.opener.document.getElementById(callback);
    88     var callbackMethod = window.opener[callback];
    89    
    90     for (var i = 0; i < selected.length; i++)
    91     {
    92       if (notifyTarget)
    93       {
    94         // Send event to the target in the opener window
    95         Events.sendCustomEvent(notifyTarget, 'base-selected', {'id': selected[i].id, 'name': selected[i].path});
    96       }
    97       else if (callbackMethod)
    98       {
    99         // Call the callback method in the opener window
    100         callbackMethod.call(null, selected[i].id, selected[i].path);
    101       }
    102     }
    103     window.close();
    104   }
    105   </script>
    106 </base:head>
     41<base:head scripts="~select_file.js" />
     42
    10743<base:body>
    10844  <h1><%=requestTitle == null ? title : requestTitle%></h1>
    10945  <div class="content bottomborder">
     46    <div id="page-data" class="datacontainer"
     47      data-callback="<%=callback %>"
     48    ></div>
     49 
    11050    <div id="f1" class="absolutefull" style="bottom: 5em;"><iframe
    11151      name="manager" id="idManager" src="frameset.jsp?ID=<%=ID%>&amp;mode=<%=mode.getName()%>"
     
    12363 
    12464  <base:buttongroup subclass="dialogbuttons">
    125     <base:button onclick="returnSelected();" title="Ok"  />
    126     <base:button onclick="window.top.close();" title="Cancel" />
     65    <base:button id="btnOk" title="Ok"  />
     66    <base:button id="close" title="Cancel" />
    12767  </base:buttongroup>
    12868</base:body>
  • trunk/www/filemanager/upload/index.jsp

    r6217 r6308  
    5959  import="java.util.HashSet"
    6060  import="java.nio.charset.Charset"
     61  import="org.json.simple.JSONObject"
     62  import="org.json.simple.JSONArray"
    6163%>
    6264<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
     
    124126  }
    125127 
    126  
    127128  // Query to retrieve file types
    128129  final ItemQuery<ItemSubtype> subtypesQuery = Base.getSubtypesQuery(itemType);
    129130  subtypesQuery.include(Include.ALL);
    130131 
    131   // Query to retreive FileUnpacker plugins
    132   final ItemQuery<PluginDefinition> pluginQuery = PluginDefinition.getQuery(null, "net.sf.basedb.util.zip.FileUnpacker");
    133   pluginQuery.order(Orders.asc(Hql.property("name")));
    134   pluginQuery.include(Include.MINE, Include.SHARED, Include.IN_PROJECT, Include.OTHERS);
    135   List<PluginDefinition> plugins = pluginQuery.list(dc);
    136 
    137  
    138  
     132  JSONArray jsonZipFormats = new JSONArray();
     133  if (file == null)
     134  {
     135    // Query to retreive FileUnpacker plugins (used for new uploads only)
     136    final ItemQuery<PluginDefinition> pluginQuery = PluginDefinition.getQuery(null, "net.sf.basedb.util.zip.FileUnpacker");
     137    pluginQuery.order(Orders.asc(Hql.property("name")));
     138    pluginQuery.include(Include.MINE, Include.SHARED, Include.IN_PROJECT, Include.OTHERS);
     139    List<PluginDefinition> plugins = pluginQuery.list(dc);
     140   
     141    for (PluginDefinition plugin : plugins)
     142    {
     143      FileUnpacker unpacker = plugin.newInstance(FileUnpacker.class, sc, null, null);
     144      JSONObject jsonZipFormat = new JSONObject();
     145      jsonZipFormat.put("id", plugin.getId());
     146      jsonZipFormat.put("name", unpacker.getFormatName());
     147      JSONArray jsonExtensions = new JSONArray();
     148      jsonExtensions.addAll(unpacker.getExtensions());
     149      jsonZipFormat.put("extensions", jsonExtensions);
     150      jsonZipFormats.add(jsonZipFormat);
     151    }
     152  }
    139153  %>
    140   <base:page type="popup" title="<%=title%>">
    141   <base:head scripts="tabcontrol.js" styles="tabcontrol.css,progressbar.css">
     154  <base:page type="popup" title="<%=title%>" id="select-file">
     155  <base:head scripts="~upload.js" styles="progressbar.css">
    142156    <script>
    143     // Validate the "File" tab
    144     function validateFile()
    145     {
    146       var frm = document.forms['file'];
    147       if (Main.trimString(frm.the_file.value) == '')
    148       {
    149         Forms.showNotification(frm.the_file, 'You must select a file to upload');
    150         return false;
    151       }
    152       return true;
    153     }
    154 
    155     // Submit the form
    156     function doUpload()
    157     {
    158       var frm = document.forms['file'];
    159       if (TabControl.validateActiveTab('settings'))
    160       {
    161         // Copy form values so they are sent BEFORE the file
    162         frm.check_md5.value = frm.temp_check_md5 && frm.temp_check_md5.checked ? "1" : "0";
    163         frm.write_protected.value = frm.temp_write_protected.checked ? "1" : "0";
    164         <%
    165         if (file == null)
    166         {
    167           %>
    168           frm.replace_existing.value = frm.temp_replace_existing.checked ? "1" : "0";
    169           <%
    170         }
    171         %>
    172         frm.compressed.value = frm.temp_compressed && frm.temp_compressed[frm.temp_compressed.selectedIndex].value;
    173         if (frm.temp_zip_format)
    174         {
    175           frm.zip_format.value = frm.temp_zip_format[frm.temp_zip_format.selectedIndex].value;
    176           frm.zip_unpack.value = frm.temp_zip_unpack.checked ? "1" : "0";
    177           frm.zip_overwrite.value = frm.temp_zip_overwrite.checked ? "1" : "0";
    178           frm.zip_keep.value = frm.temp_zip_keep.checked ? "1" : "0";
    179         }
    180         frm.characterSet.value = frm.temp_charset[frm.temp_charset.selectedIndex].value;
    181         frm.subtype_id.value = frm.temp_subtype_id[frm.temp_subtype_id.selectedIndex].value;
    182         frm.description.value = frm.temp_description.value;
    183         frm.submit();
    184         Main.hide('selectForm');
    185         Main.show('progressForm');
    186         sendProgressUpdateRequest();
    187       }
    188     }
    189    
    190     function sendProgressUpdateRequest()
    191     {
    192       var request = Ajax.getXmlHttpRequest();
    193       var url = 'ajax.jsp?ID=<%=ID%>&cmd=GetProgress&'+Math.random();
    194       request.open("GET", url, true);
    195       Ajax.setReadyStateHandler(request, progressUpdateCallback);
    196       request.send(null);
    197     }
    198    
    199     function progressUpdateCallback(request)
    200     {
    201       var progress = JSON.parse(request.responseText);
    202       if (progress && progress.status == 'ok' && progress.file)
    203       {
    204         var filename = progress.file;
    205         var transferredBytes = progress.transferredBytes;
    206         var totalBytes = progress.totalBytes;
    207         var timeInSeconds = progress.timeInSeconds;
    208         var message = progress.message;
    209         displayProgress(filename, transferredBytes, totalBytes, timeInSeconds, message);
    210       }
    211       setTimeout('sendProgressUpdateRequest()', 1500);
    212     }
    213    
    214     function abortUpload()
    215     {
    216       if (confirm('Are you sure you want to abort the upload? It cannot be resumed.'))
    217       {
    218         var request = Ajax.getXmlHttpRequest();
    219         var url = 'ajax.jsp?ID=<%=ID%>&cmd=Abort&'+Math.random();
    220         request.open("GET", url, true);
    221         request.send(null);
    222       }
    223     }
    224    
    225     function fileOnChange()
    226     {
    227       var frm = document.forms['file'];
    228       var filename = frm.the_file.value;
    229       var isZip = false;
    230       var zipIndex = 0;
    231       var longestMatch = 0;
    232      
    233       for (var i = 0; i < allZipFormats.length; i++)
    234       {
    235         var zf = allZipFormats[i];
    236         var matchLength = zf.matchesExtension(filename);
    237         if (matchLength > longestMatch)
    238         {
    239           isZip = true;
    240           zipIndex = zf.index;
    241           longestMatch = matchLength;
    242         }
    243       }
    244      
    245       if (frm.temp_zip_format)
    246       {
    247         frm['temp_zip_format'].disabled = !isZip;
    248         frm['temp_zip_format'].selectedIndex = zipIndex;
    249         frm['temp_zip_unpack'].disabled = !isZip;
    250         frm['temp_zip_overwrite'].disabled = !isZip || !frm['temp_zip_unpack'].checked;
    251         frm['temp_zip_keep'].disabled = !isZip || !frm['temp_zip_unpack'].checked;
    252         frm['temp_compressed'].disabled = isZip;
    253         if (isZip)
    254         {
    255           // Select '-auto-' if present, otherwise 'no'
    256           Forms.selectListOption(frm['temp_compressed'], '0');
    257           Forms.selectListOption(frm['temp_compressed'], '');
    258         }
    259       }
    260     }
    261     function unpackZipOnClick()
    262     {
    263       var frm = document.forms['file'];
    264       var checked = frm['temp_zip_unpack'].checked;
    265       if (!checked) frm['temp_zip_keep'].checked = true;
    266       frm['temp_zip_overwrite'].disabled = !checked;
    267       frm['temp_zip_keep'].disabled = !checked;
    268     }
    269    
    270     function initZipFormats()
    271     {
    272       var frm = document.forms['file'];
    273       var zipFormat = frm.temp_zip_format;
    274       if (zipFormat)
    275       {
    276       <%
    277       for (PluginDefinition plugin : plugins)
    278       {
    279         FileUnpacker unpacker = plugin.newInstance(FileUnpacker.class, sc, null, null);
    280         %>
    281           var extensions = [ '<%=Values.getString(unpacker.getExtensions(), "','", true)%>' ];
    282           var zf = new ZipFormat(zipFormat.length, <%=plugin.getId()%>, '<%=HTML.javaScriptEncode(unpacker.getFormatName())%>', extensions);
    283           zipFormat[zipFormat.length] = new Option(zf.toString(), zf.id);
    284         <%
    285       }
    286       %>
    287       }
    288     }
    289    
    290     function displayProgress(fileName, transferredBytes, totalBytes, transferTime, message)
    291     {
    292       // File name
    293       document.getElementById('fileName').innerHTML = 'Uploading ' + fileName + '...';
    294        
    295       // Percent done
    296       var percentDone = totalBytes == 0 ? 0 : Math.round(100 * transferredBytes / totalBytes);
    297       document.getElementById('percentText').innerHTML = percentDone+'%';
    298       var doneElement = document.getElementById('percentDone');
    299       doneElement.style.width = percentDone+'%';
    300       var remainElement = document.getElementById('percentRemain');
    301       remainElement.style.width = (100-percentDone)+'%';
    302       if (percentDone == 100) Main.hide('percentRemain');
    303      
    304       // Bytes
    305       document.getElementById('transferredBytes').innerHTML = Numbers.formatBytes(transferredBytes);
    306       document.getElementById('totalBytes').innerHTML = Numbers.formatBytes(totalBytes);
    307 
    308       // Times and rate
    309       document.getElementById('transferTime').innerHTML = Numbers.formatSeconds(transferTime);
    310       var transferRate = transferTime == 0 ? 0 : transferredBytes / transferTime;
    311       document.getElementById('transferRate').innerHTML = '(' + Numbers.formatBytes(transferRate) + '/s)';
    312       if (transferRate > 0)
    313       {
    314         var remainTime = parseInt((totalBytes-transferredBytes) / transferRate);
    315         document.getElementById('remainTime').innerHTML = Numbers.formatSeconds(remainTime) + ' (estimated)';
    316       }
    317      
    318       // Message
    319       if (message)
    320       {
    321         document.getElementById('message').innerHTML = message.replace(/(.*):(.*)/, '<b>$1:</b> $2');
    322       }
    323     }
    324    
    325     var allZipFormats = new Array();
    326     function ZipFormat(index, id, name, extensions)
    327     {
    328       this.index = index;
    329       this.id = id;
    330       this.name = name;
    331       this.extensions = extensions;
    332      
    333       allZipFormats[allZipFormats.length] = this;
    334      
    335       this.matchesExtension = function(filename)
    336       {
    337         var longestMatch = 0;
    338         for (var i = 0; i < this.extensions.length; i++)
    339         {
    340           var ext = '.' + this.extensions[i];
    341           var index = filename.lastIndexOf(ext);
    342           if (index > 0 && (index + ext.length == filename.length))
    343           {
    344             if (ext.length > longestMatch)
    345             {
    346               longestMatch = ext.length;
    347             }
    348           }
    349         }
    350         return longestMatch;
    351       }
    352      
    353       this.toString = function()
    354       {
    355         var s = this.name + " [";
    356         for (var i = 0; i < this.extensions.length; i++)
    357         {
    358           if (i > 0) s += ', ';
    359           s += '*.' + this.extensions[i];
    360         }
    361         s += ']';
    362         return s;
    363       }
    364     }
    365 
    366157    // Callback that shows the upload-frame in case of an error
    367158    function exceptionHandlerCallback(windowName)
     
    375166    </script>
    376167  </base:head>
    377   <base:body onload="initZipFormats()">
     168  <base:body>
    378169  <div id="selectForm" class="absolutefull">
    379     <h1><%=title%> <base:help tabcontrol="settings" /></h1>
     170    <h1><%=title%> <base:help helpid="file.upload"/></h1>
     171   
     172    <div id="page-data" class="datacontainer"
     173      data-zip-formats="<%=HTML.encodeTags(jsonZipFormats.toJSONString()) %>"
     174    ></div>
    380175   
    381176    <form action="Upload?ID=<%=ID%>&amp;directory_id=<%=directory.getId()%>"
     
    394189    <input type="hidden" name="characterSet" value="">
    395190
    396     <t:tabcontrol id="settings"
    397       subclass="content dialogtabcontrol"
    398       position="bottom" remember="false">
    399     <t:tab id="info" title="File" validate="validateFile()" helpid="file.upload">
    400       <table class="fullform input100">
     191    <div class="content">
     192      <table class="fullform input100 bottomborder">
    401193      <tr>
    402194        <th>Directory</th>
     
    406198        <th>File</th>
    407199        <td>
    408           <input class="text required" type="file" name="the_file" size="40"
    409             onchange="fileOnChange()">
     200          <input class="text required" type="file" name="the_file" id="the_file" size="40">
    410201        </td>
    411202        <td></td>
     
    533324          <td>
    534325            <select name="temp_zip_format" disabled>
    535               <option>
    536326            </select><br>
    537327         
    538328            <input type="checkbox" name="temp_zip_unpack" id="tempZipUnpack" disabled
    539               onclick="unpackZipOnClick()"><label for="tempZipUnpack">Unpack file</label><br>
     329              ><label for="tempZipUnpack">Unpack file</label><br>
    540330            <input type="checkbox" name="temp_zip_overwrite" id="tempZipOverwrite" disabled
    541331              ><label for="tempZipOverwrite">Overwrite existing files</label><br>
     
    559349      </tr>
    560350      </table>
    561     </t:tab>
    562     </t:tabcontrol>
     351    </div>
    563352    </form>
    564353
    565     <div class="legend">
     354    <div class="legend" style="height: 1.75rem;">
    566355      <base:icon image="required.png" />= required information
    567356    </div>
    568357
    569358    <base:buttongroup subclass="dialogbuttons">
    570       <base:button image="upload.png" onclick="doUpload()" title="Upload" />
    571       <base:button onclick="top.window.close()" title="Cancel" />
     359      <base:button id="btnUpload" image="upload.png" title="Upload" />
     360      <base:button id="close" title="Cancel" />
    572361    </base:buttongroup>
    573362  </div>
     
    581370          <td style="width: 2em;"></td>
    582371          <td style="">
    583             <table id="bar" style="width: 100%;">
     372            <table class="bar" style="width: 100%;">
    584373            <tr>
    585               <td style="width: 0%;" id="percentDone">&nbsp;</td>
    586               <td style="width: 100%;" id="percentRemain">&nbsp;</td>
     374              <td style="width: 0%;" class="percentDone" id="percentDone">&nbsp;</td>
     375              <td style="width: 100%;" class="percentRemain" id="percentRemain">&nbsp;</td>
    587376            </tr>
    588377            </table>
    589378          </td>
    590           <td style="width: 3em;" id="percentText">0%</td>
     379          <td style="width: 3em;" class="percentText" id="percentText">0%</td>
    591380          <td style="width: 2em;"></td>
    592381        </tr>
     
    602391        </tr>
    603392        </table>
    604       </td></tr></table>
     393      </td>
     394      </tr>
     395      </table>
    605396    </div>
    606397   
    607398    <base:buttongroup subclass="dialogbuttons">
    608       <base:button image="cancel.png" onclick="abortUpload()" title="Abort..." />
     399      <base:button id="btnAbort" image="cancel.png" title="Abort..." />
    609400    </base:buttongroup>
    610401  </div>
  • trunk/www/filemanager/upload/upload_results.jsp

    r6136 r6308  
    2727  import="net.sf.basedb.clients.web.util.HTML"
    2828%>
     29<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
    2930<%
    3031final String message = request.getParameter("message");
    3132%>
    32 <html>
    33 <head>
    34   <script>
    35   function showMessage()
    36   {
    37     window.top.location = '../../common/close_popup.jsp?refresh_opener=1&message=<%=HTML.urlEncode(message)%>';
    38   }
    39   </script>
    40 </head>
    41 <body onload="showMessage();">
    42 </body>
    43 </html>
     33<base:page type="iframe" title="Uploading..." id="upload-results">
     34<base:head scripts="~upload.js" />
     35<base:body>
     36  <div id="page-data"
     37    data-message="<%=HTML.encodeTags(message)%>"
     38  ></div>
     39</base:body>
     40</base:page>
    4441
  • trunk/www/include/scripts/main-2.js

    r6307 r6308  
    150150  {
    151151    window.top.close();
     152  }
     153 
     154  /**
     155    Reload the current window.
     156  */
     157  app.reloadWindow = function()
     158  {
     159    window.location.reload();
    152160  }
    153161 
     
    13981406    Event handler for clicking on item links. The item type and id should be stored
    13991407    as data-item-type and data-item-id attributes on the target element. If data-no-edit
    1400     is set to 1 the edit dialog is disabled. This event handler is automatically attached
     1408    is set to 1 the edit dialog is disabled. If data-force-edit is set the edit
     1409    dialog is alwasy used. This event handler is automatically attached
    14011410    to auto-init elements with data-auto-init='item-link'.
    14021411  */
     
    14071416    var itemId = Data.int(element, 'item-id');
    14081417    var noEdit = Data.int(element, 'no-edit', 0);
     1418    var forceEdit = Data.int(element, 'force-edit', 0);
    14091419    var extraUrl = Data.get(element, 'extra-url');
    14101420    var specialKey = event.altKey || event.ctrlKey || event.shiftKey;
    1411     if (noEdit || !specialKey)
    1412     {
    1413       Main.viewOrEditItem(App.getSessionId(), itemType, itemId, false, extraUrl);
    1414     }
    1415     else
    1416     {
    1417       Main.viewOrEditItem(App.getSessionId(), itemType, itemId, true, extraUrl);
    1418     }
     1421   
     1422    var editDialog = forceEdit || (specialKey && !noEdit);
     1423   
     1424    Main.viewOrEditItem(App.getSessionId(), itemType, itemId, editDialog, extraUrl);
    14191425  }
    14201426
     
    14641470    url += '?ID='+App.getSessionId();
    14651471    url += '&cmd=DownloadFile&item_id='+fileId;
    1466     Main.openPopup(url, 'DownloadFile', 450, 300);
     1472    Dialogs.openPopup(url, 'DownloadFile', 450, 300);
    14671473  }
    14681474 
  • trunk/www/include/scripts/main.js

    r6294 r6308  
    508508    this.controllers['EXTRAVALUETYPE'] = { url:'admin/extravaluetypes/index.jsp', width:600, height:400 };
    509509    this.controllers['FEATURE'] = { url:'lims/arraydesigns/features/index.jsp', width:750, height:500, popup:true, edit:false, noAnyToAny:true };
    510     this.controllers['FILE'] = { url:'filemanager/index.jsp', width:600, height:400 };
     510    this.controllers['FILE'] = { url:'filemanager/index.jsp', iframe:true, width:600, height:400 };
    511511    this.controllers['FILESERVER'] = { url:'filemanager/fileservers/index.jsp', width:600, height:400 };
    512512    this.controllers['FORMULA'] = { url:'views/formulas/index.jsp', width:750, height:500 };
     
    596596    {
    597597      var theWindow = window;
    598       var i = 0;
    599       while (theWindow.name != 'main' && i < 10)
    600       {
    601         theWindow = theWindow.parent;
    602         i++;
     598      if (!controller.iframe)
     599      {
     600        var i = 0;
     601        while (theWindow.name != 'main' && i < 10)
     602        {
     603          theWindow = theWindow.parent;
     604          i++;
     605        }
    603606      }
    604607      Main.safeSetLocation(url, theWindow);
  • trunk/www/include/scripts/table.js

    r6291 r6308  
    281281    var tableId = Data.get(target, 'table-id');
    282282    var itemId = Data.int(target, 'item-id');
     283   
    283284    var frm = document.forms[tableId];
    284285    var mode = frm.mode ? frm.mode.value : 'default';
    285    
    286286    if (mode == 'selectone')
    287287    {
     
    639639   
    640640    // Should we use 'callback method' or 'event notification'?
    641     var callback = frm.callback.value;
    642     var notifyTarget = window.opener.document.getElementById(callback);
    643     var callbackMethod = window.opener[callback];
     641    var callback = frm.callback ? frm.callback.value : null;
     642    var notifyTarget = callback ? window.top.opener.document.getElementById(callback) : null;
     643    var callbackMethod = callback ? window.top.opener[callback] : null;
     644   
     645    if (!notifyTarget && !callbackMethod)
     646    {
     647      notifyTarget = tableDiv;
     648    }
    644649   
    645650    var numSelected = 0;
     
    666671    {
    667672      // Check boxes allow multiple selections
    668       for (var i=0; i < frm.elements.length; i++) // >
     673      for (var i=0; i < frm.elements.length; i++)
    669674      {
    670675        var element = frm.elements[i];
Note: See TracChangeset for help on using the changeset viewer.