You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by gm...@apache.org on 2014/05/26 19:50:40 UTC

svn commit: r1597616 - in /roller/trunk/app/src/main: java/org/apache/roller/weblogger/ui/struts2/editor/ resources/ webapp/WEB-INF/jsps/editor/ webapp/theme/scripts/

Author: gmazza
Date: Mon May 26 17:50:40 2014
New Revision: 1597616

URL: http://svn.apache.org/r1597616
Log:
ROL-2005 Media File folders are now top-level only; added Select All/None button to allow for selecting/unselecting all files in a folder at once.

Modified:
    roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileView.java
    roller/trunk/app/src/main/resources/ApplicationResources.properties
    roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/Bookmarks.jsp
    roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileView.jsp
    roller/trunk/app/src/main/webapp/theme/scripts/roller.js

Modified: roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileView.java
URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileView.java?rev=1597616&r1=1597615&r2=1597616&view=diff
==============================================================================
--- roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileView.java (original)
+++ roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileView.java Mon May 26 17:50:40 2014
@@ -38,6 +38,7 @@ import org.apache.roller.weblogger.pojos
 import org.apache.roller.weblogger.pojos.MediaFileFilter;
 import org.apache.roller.weblogger.ui.struts2.pagers.MediaFilePager;
 import org.apache.roller.weblogger.ui.struts2.util.KeyValueObject;
+import org.apache.roller.weblogger.util.cache.CacheManager;
 import org.apache.struts2.interceptor.validation.SkipValidation;
 
 /**
@@ -76,6 +77,9 @@ public class MediaFileView extends Media
     // Path of new directory to be created.
     private String newDirectoryPath;
 
+    // a new directory the user wishes to view
+    private String viewDirectoryId = null;
+
     private MediaFileSearchBean bean = new MediaFileSearchBean();
 
 
@@ -120,7 +124,7 @@ public class MediaFileView extends Media
     }
 
     /**
-     * Create a new directory by name under current directory
+     * Create a new directory by name.  All folders placed at the root.
      */
     public String createNewDirectory() {
         boolean dirCreated = false;
@@ -132,7 +136,7 @@ public class MediaFileView extends Media
             try {
                 log.debug("Creating new directory - " + this.newDirectoryName);
                 MediaFileManager manager = WebloggerFactory.getWeblogger().getMediaFileManager();
-                MediaFileDirectory parentDirectory = manager.getMediaFileDirectory(this.directoryId);
+                MediaFileDirectory parentDirectory = manager.getMediaFileRootDirectory(getActionWeblog());
                 manager.createMediaFileDirectory(parentDirectory, this.newDirectoryName);
                 // flush changes
                 WebloggerFactory.getWeblogger().flush();
@@ -223,6 +227,22 @@ public class MediaFileView extends Media
     }
 
     /**
+     * View the contents of another Media folder.
+     */
+    public String view() {
+        try {
+            MediaFileManager manager = WebloggerFactory.getWeblogger().getMediaFileManager();
+            if (!StringUtils.isEmpty(viewDirectoryId)) {
+                setDirectoryId(viewDirectoryId);
+                setCurrentDirectory(manager.getMediaFileDirectory(viewDirectoryId));
+            }
+        } catch (WebloggerException ex) {
+            log.error("Error looking up directory", ex);
+        }
+        return execute();
+    }
+
+    /**
      * Save a media file.
      *
      * @return String The result of the action.
@@ -297,6 +317,43 @@ public class MediaFileView extends Media
     }
 
     /**
+     * Delete folder
+     */
+    public String deleteFolder() {
+
+        try {
+            MediaFileManager manager = WebloggerFactory.getWeblogger().getMediaFileManager();
+            if (directoryId != null) {
+                log.debug("Deleting media file folder - " + directoryId + " (" + directoryPath + ")");
+                MediaFileDirectory mediaFileDir = manager.getMediaFileDirectory(directoryId);
+                mediaFileDir.getParent().removeChildDirectory(mediaFileDir);
+                manager.removeMediaFileDirectory(mediaFileDir);
+                refreshAllDirectories();
+                WebloggerFactory.getWeblogger().getWeblogManager().saveWeblog(this.getActionWeblog());
+
+                // flush changes
+                WebloggerFactory.getWeblogger().flush();
+                WebloggerFactory.getWeblogger().release();
+                addMessage("mediaFile.deleteFolder.success");
+
+                // notify caches
+                CacheManager.invalidate(getActionWeblog());
+
+                // re-route to default folder
+                mediaFileDir = manager.getMediaFileRootDirectory(getActionWeblog());
+                setDirectoryId(mediaFileDir.getId());
+                setDirectoryPath(mediaFileDir.getPath());
+            } else {
+                log.error("(System error) No directory ID provided for media file folder delete.");
+            }
+        } catch (WebloggerException ex) {
+            log.error("Error deleting folder", ex);
+        }
+        return execute();
+    }
+
+
+    /**
      * Include selected media file in gallery
      * 
      */
@@ -420,4 +477,13 @@ public class MediaFileView extends Media
     public void setNewDirectoryPath(String newDirectoryPath) {
         this.newDirectoryPath = newDirectoryPath;
     }
+
+    public String getViewDirectoryId() {
+        return viewDirectoryId;
+    }
+
+    public void setViewDirectoryId(String viewDirectoryId) {
+        this.viewDirectoryId = viewDirectoryId;
+    }
+
 }

Modified: roller/trunk/app/src/main/resources/ApplicationResources.properties
URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/resources/ApplicationResources.properties?rev=1597616&r1=1597615&r2=1597616&view=diff
==============================================================================
--- roller/trunk/app/src/main/resources/ApplicationResources.properties (original)
+++ roller/trunk/app/src/main/resources/ApplicationResources.properties Mon May 26 17:50:40 2014
@@ -96,7 +96,7 @@ bookmarksForm.priority=Priority
 bookmarksForm.edit=Edit
 bookmarksForm.edit.tip=Click to modify this bookmark
 bookmarksForm.folder.edit.tip=Click to edit folder
-bookmarksForm.move=Move Selected To\:
+bookmarksForm.move=Move selected to:
 bookmarksForm.move.confirm=Move selected bookmarks?
 bookmarksForm.name=Name
 bookmarksForm.path=Folder
@@ -995,7 +995,7 @@ mediaFileAdd.name=Name
 mediaFileAdd.description=Description
 mediaFileAdd.tags=Tags (space separated)
 mediaFileAdd.copyright=Copyright statement
-mediaFileAdd.directory=Directory
+mediaFileAdd.directory=Folder
 mediaFileAdd.includeGallery=Include in Gallery?
 mediaFileAdd.upload=Upload
 mediaFileAdd.multipleNames=(Multiple names)
@@ -1045,7 +1045,7 @@ mediaFileEdit.name=Name
 mediaFileEdit.description=Description
 mediaFileEdit.tags=Tags (space separated)
 mediaFileEdit.copyright=Copyright statement
-mediaFileEdit.directory=Directory
+mediaFileEdit.directory=Folder
 mediaFileEdit.save=Save
 mediaFileEdit.cancel=Cancel
 mediaFileEdit.fileInfo=File info
@@ -1067,23 +1067,26 @@ mediaFileEdit.includesEnclosure=This web
 # -- Media File View
 
 mediaFileView.title=Media Files
-mediaFileView.subtitle=Media Files in weblog {0}
+mediaFileView.subtitle=Media Files in weblog <span>{0}</span>
 mediaFileView.rootPageTip=\
 This page shows the media files that you have uploaded as well as files \
-copied in when you chose to customize a theme. You can use directories \
+copied in when you chose to customize a theme. You can use folders \
 to organize your files, and you do not have to worry about "breaking \
 URLs" when you move or rename files.
 mediaFileView.dirPageTip=\
-This is a media-file directory. You can return to the main directory \
+This is a media file folder. You can return to the default folder \
 by clicking the ''root'' link above.
 
+mediaFileView.viewFolder=Switch to Folder
+
 mediaFileView.tabular=Tabular
 mediaFileView.hierarchical=Hierarchical
 mediaFileView.sortby=Sort by:
 
 mediaFileView.deleteSelected=Delete selected
-mediaFileView.moveSelected=Move selected
-
+mediaFileView.moveSelected=Move selected to:
+mediaFileView.toggleSelected=Select all/none
+mediaFileView.deleteFolder=Delete folder
 mediaFileView.delete=Delete
 mediaFileView.createPost=Create Post
 mediaFileView.includeInGallery=Include in Gallery
@@ -1109,7 +1112,7 @@ mediaFileView.tags=Tags
 mediaFileView.addMediaFile=Add Media File
 mediaFileView.actions=Actions
 
-mediaFileView.addDirectory=Add New Directory
+mediaFileView.addDirectory=Add New Folder
 mediaFileView.directoryName=Name:
 mediaFileView.create=Create
 mediaFileView.search=Search Media Files
@@ -1123,7 +1126,7 @@ mediaFileView.filesOfSize=Files of <b>si
 mediaFileView.filesOfType=Files of type <b>{0}</b>
 mediaFileView.filesTagged=Files with tags <b>{0}</b>
 
-mediaFileView.noFiles=No files in this directory.
+mediaFileView.noFiles=No files in this folder.
 
 mediaFileView.path=Path:
 mediaFileView.reset=Reset
@@ -1138,12 +1141,14 @@ mediaFileSidebar.search=Search Uploaded 
 
 
 mediaFile.search.title=Search media files
-mediaFile.delete.confirm=Delete selected media files and/or directories?
+mediaFile.delete.confirm=Delete selected media files?
 mediaFile.move.confirm=Move selected media files?
 mediaFile.directoryCreate.success=New directory successfully created.
 mediaFile.includeInGallery.success=Media file(s) successfully included in gallery.
 mediaFile.includeInGallery.error=Error including media file {0} in gallery.
 mediaFile.delete.success=Media file(s) successfully deleted.
+mediaFile.deleteFolder.success=Media folder successfully deleted.
+mediaFile.deleteFolder.confirm=Delete entire folder including all its media files?
 mediaFile.delete.error=Error deleting media file {0}.
 mediaFile.delete.errors=Error deleting media files.
 mediaFile.move.success=Media file(s) successfully moved.

Modified: roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/Bookmarks.jsp
URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/Bookmarks.jsp?rev=1597616&r1=1597615&r2=1597616&view=diff
==============================================================================
--- roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/Bookmarks.jsp (original)
+++ roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/Bookmarks.jsp Mon May 26 17:50:40 2014
@@ -77,7 +77,6 @@ function onMove()
     <s:hidden name="folderId" /> 
     
     <s:if test="!allFolders.isEmpty">
-
         <%-- View button --%>
         <s:submit type="button" action="bookmarks!view" key="bookmarksForm.viewFolder" />
 
@@ -85,7 +84,6 @@ function onMove()
         <s:select name="viewFolderId" list="allFolders" listKey="id" listValue="name" />
 
         <br /><br />
-
     </s:if>
     <table class="rollertable">
 

Modified: roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileView.jsp
URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileView.jsp?rev=1597616&r1=1597615&r2=1597616&view=diff
==============================================================================
--- roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileView.jsp (original)
+++ roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileView.jsp Mon May 26 17:50:40 2014
@@ -68,11 +68,28 @@
 
 
 <script type="text/javascript">
+    toggleState = 'Off'
 
     function onSelectDirectory(id) {
         window.location = "<s:url action="mediaFileView" />?directoryId=" + id + "&weblog=" + '<s:property value="actionWeblog.handle" />';
     }
 
+    function onToggle() {
+        if (toggleState == 'Off') {
+            toggleState = 'On';
+            toggleFunction(true, 'selectedMediaFiles');
+            $("#deleteButton").attr('disabled',false)
+            $("#moveButton").attr('disabled',false)
+            $("#moveTargetMenu").attr('disabled',false)
+        } else {
+            toggleState = 'Off';
+            toggleFunction(false, 'selectedMediaFiles');
+            $("#deleteButton").attr('disabled',true)
+            $("#moveButton").attr('disabled',true)
+            $("#moveTargetMenu").attr('disabled',true)
+        }
+    }
+
     function onDeleteSelected() {
         if ( confirm("<s:text name='mediaFile.delete.confirm' />") ) {
             document.mediaFileViewForm.action='<s:url action="mediaFileView!deleteSelected" />';
@@ -80,6 +97,13 @@
         }
     }
 
+    function onDeleteFolder() {
+        if (confirm("<s:text name='mediaFile.deleteFolder.confirm' />")) {
+            document.bookmarks.action='<s:url action="mediaFileView!deleteFolder" />';
+            document.bookmarks.submit();
+        }
+    }
+
     function onMoveSelected() {
         if ( confirm("<s:text name='mediaFile.move.confirm' />") ) {
             document.mediaFileViewForm.action='<s:url action="mediaFileView!moveSelected" />';
@@ -295,8 +319,7 @@
     <input type="hidden" name="mediaFileId" value="" />
 
     <div class="control">
-
-        <span style="padding-left:20px">
+        <span style="padding-left:7px">
             <s:text name="mediaFileView.sortby" />
             <s:select id="sortByMenu" name="sortBy" list="sortOptions" listKey="key"
                   listValue="value"
@@ -304,18 +327,17 @@
         </span>
 
         <span style="float:right">
-            <input id="deleteButton" type="button" style="padding-right:20px"
-               value='<s:text name="mediaFileView.deleteSelected" />' onclick="onDeleteSelected()" />
+            <s:if test="!allDirectories.isEmpty">
+                <%-- View button --%>
+                <s:submit type="button" action="mediaFileView!view" key="mediaFileView.viewFolder" />
 
-            <input id="moveButton" type="button" style="padding-left:20px"
-               value=<s:text name="mediaFileView.moveSelected" /> onclick="onMoveSelected()" />
+                <%-- Folder to View combo-box --%>
+                <s:select name="viewDirectoryId" list="allDirectories" listKey="id" listValue="path" />
 
-            <s:select id="moveTargetMenu" name="selectedDirectory" list="allDirectories" listKey="id" listValue="path" />
+            </s:if>
         </span>
-
     </div>
 
-
     <%-- ***************************************************************** --%>
 
     <%-- Media file folder contents --%>
@@ -339,32 +361,11 @@
 
                 <%-- NOT SEARCH RESULTS --%>
 
-                <s:if test="childDirectories.size() == 0 && childFiles.size() ==0">
+                <s:if test="childFiles.size() ==0">
                     <p style="text-align: center"><s:text name="mediaFileView.noFiles"/></p>
                 </s:if>
 
-                <%-- List media directories first --%>
-
-                <s:iterator id="directory" value="childDirectories">
-                    <li class="align-images"
-                            onmouseover="highlight(this, true)" onmouseout="highlight(this, false)">
-                        <div class="mediaObject">
-                            <img  border="0" src='<s:url value="/images/folder.png"/>'
-                                  class="dir-image" alt="mediaFolder.png"
-                                  onclick="onSelectDirectory('<s:property value="#directory.id"/>')"/>
-                        </div>
-                        <div class="mediaObjectInfo">
-                            <input type="checkbox"
-                                   name="selectedMediaFileDirectories"
-                                   value="<s:property value="#directory.id"/>"/>
-                            <inut type="hidden" id="mediadiridentity"
-                                   value="<s:property value='#directory.id'/>">
-                            <s:property value="#directory.name" />
-                        </div>
-                    </li>
-                </s:iterator>
-
-                <%-- List media files next --%>
+                <%-- List media files --%>
 
                 <s:iterator id="mediaFile" value="childFiles">
 
@@ -475,6 +476,30 @@
 
     <div style="clear:left;"></div>
 
+        <s:if test="(!pager && childFiles.size() > 0) || (pager && pager.items.size() > 0) || (currentDirectory.name != 'root' && !pager)">
+            <div class="control">
+
+                <span style="padding-left:7px">
+                    <s:if test="(!pager && childFiles.size() > 0) || (pager && pager.items.size() > 0)">
+                        <input id="toggleButton" type="button"
+                           value='<s:text name="mediaFileView.toggleSelected" />' onclick="onToggle()" />
+
+                        <input id="deleteButton" type="button"
+                           value='<s:text name="mediaFileView.deleteSelected" />' onclick="onDeleteSelected()" />
+
+                        <input id="moveButton" type="button"
+                           value='<s:text name="mediaFileView.moveSelected" />' onclick="onMoveSelected()" />
+
+                        <s:select id="moveTargetMenu" name="selectedDirectory" list="allDirectories" listKey="id" listValue="path" />
+                    </s:if>
+
+                    <s:if test="currentDirectory.name != 'root' && !pager">
+                        <s:submit value="%{getText('mediaFileView.deleteFolder')}" action="mediaFileView!deleteFolder" onclick="onDeleteFolder();return false;"/>
+                    </s:if>
+                </span>
+            </div>
+        </s:if>
+
 </s:form>
 
 </s:if>

Modified: roller/trunk/app/src/main/webapp/theme/scripts/roller.js
URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/webapp/theme/scripts/roller.js?rev=1597616&r1=1597615&r2=1597616&view=diff
==============================================================================
--- roller/trunk/app/src/main/webapp/theme/scripts/roller.js (original)
+++ roller/trunk/app/src/main/webapp/theme/scripts/roller.js Mon May 26 17:50:40 2014
@@ -196,11 +196,7 @@ function toggleFunction(toggle,name) {;
 	var inputs = document.getElementsByName(name);
 	for(var i = 0; i < inputs.length ; i++) {
 		if(inputs[i].type == 'checkbox' && inputs[i].disabled == false) {
-			if (inputs[i].checked == true){
-				inputs[i].checked = !inputs[i].checked;
-			} else{
-				inputs[i].checked = toggle;
-			}
+           inputs[i].checked = toggle;
 		}
 	}
 };
\ No newline at end of file