You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by dk...@apache.org on 2019/07/02 17:07:28 UTC

[sling-org-apache-sling-app-cms] branch master updated (4396e34 -> b158fac)

This is an automated email from the ASF dual-hosted git repository.

dklco pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-app-cms.git.


    from 4396e34  Updating to latest release
     new f4baa98  Adding missing i18n keys
     new 8ae1b5f  Improving the file upload to support multiple files and ajax file uploading
     new 65604b7  Ignoring irrelevant Sonar warnings
     new 9a2dd8f  Ignoring irrelvant Sonar warnings
     new b158fac  Merge branch 'master' of git@github.com:apache/sling-org-apache-sling-app-cms.git

The 5 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../cms/core/insights/impl/InsightsWebConsole.java |  2 +-
 .../internal/servlets/DownloadFileServlet.java     | 24 ++++++
 .../main/resources/OSGI-INF/l10n/bundle.properties |  8 +-
 .../internal/TransformerWebConsole.java            |  2 +-
 ui/src/main/frontend/src/js/cms.fields.js          | 99 +++++++++++++++++++++-
 ui/src/main/frontend/src/scss/cms.scss             |  7 +-
 .../components/editor/fields/file/field.jsp        | 84 +++++++-----------
 .../libs/sling-cms/content/file/upload.json        |  3 +-
 8 files changed, 166 insertions(+), 63 deletions(-)
 create mode 100644 core/src/main/java/org/apache/sling/cms/core/internal/servlets/DownloadFileServlet.java


[sling-org-apache-sling-app-cms] 03/05: Ignoring irrelevant Sonar warnings

Posted by dk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

dklco pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-app-cms.git

commit 65604b7f31fdb581e6d81d2b4787d587f3c53b00
Author: Dan Klco <dk...@apache.org>
AuthorDate: Tue Jul 2 13:06:37 2019 -0400

    Ignoring irrelevant Sonar warnings
---
 .../cms/core/insights/impl/InsightsWebConsole.java |  2 +-
 .../internal/servlets/DownloadFileServlet.java     | 22 ++++++++++++++++++++++
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/core/src/main/java/org/apache/sling/cms/core/insights/impl/InsightsWebConsole.java b/core/src/main/java/org/apache/sling/cms/core/insights/impl/InsightsWebConsole.java
index e2895a1..26890b9 100644
--- a/core/src/main/java/org/apache/sling/cms/core/insights/impl/InsightsWebConsole.java
+++ b/core/src/main/java/org/apache/sling/cms/core/insights/impl/InsightsWebConsole.java
@@ -49,7 +49,7 @@ public class InsightsWebConsole extends AbstractWebConsolePlugin {
     public static final String CONSOLE_LABEL = "slingcms-insights";
     public static final String CONSOLE_TITLE = "Sling CMS Insights";
 
-    @SuppressWarnings("squid:S2078") // ignore since this field is is injected by OSGi
+    @SuppressWarnings({ "squid:S2078", "squid:S2226" }) // ignore since this field is is injected by OSGi
     @Reference
     private InsightFactory insightFactory;
 
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/servlets/DownloadFileServlet.java b/core/src/main/java/org/apache/sling/cms/core/internal/servlets/DownloadFileServlet.java
new file mode 100644
index 0000000..c249cc8
--- /dev/null
+++ b/core/src/main/java/org/apache/sling/cms/core/internal/servlets/DownloadFileServlet.java
@@ -0,0 +1,22 @@
+package org.apache.sling.cms.core.internal.servlets;
+
+import java.io.IOException;
+
+import javax.servlet.Servlet;
+import javax.servlet.ServletException;
+
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
+import org.osgi.service.component.annotations.Component;
+
+@Component(service = Servlet.class, property = { "sling.servlet.resourceTypes=sling-cms/file/download",
+        "sling.servlet.methods=GET", "sling.servlet.extensions=html" })
+public class DownloadFileServlet extends SlingSafeMethodsServlet {
+
+    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response)
+            throws ServletException, IOException {
+        handleMethodNotImplemented(request, response);
+    }
+
+}


[sling-org-apache-sling-app-cms] 02/05: Improving the file upload to support multiple files and ajax file uploading

Posted by dk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

dklco pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-app-cms.git

commit 8ae1b5fed86b10b844958065f8bbe2eb0525e3f3
Author: Dan Klco <dk...@apache.org>
AuthorDate: Tue Jul 2 11:14:07 2019 -0400

    Improving the file upload to support multiple files and ajax file
    uploading
---
 ui/src/main/frontend/src/js/cms.fields.js          | 99 +++++++++++++++++++++-
 ui/src/main/frontend/src/scss/cms.scss             |  7 +-
 .../components/editor/fields/file/field.jsp        | 84 +++++++-----------
 .../libs/sling-cms/content/file/upload.json        |  3 +-
 4 files changed, 133 insertions(+), 60 deletions(-)

diff --git a/ui/src/main/frontend/src/js/cms.fields.js b/ui/src/main/frontend/src/js/cms.fields.js
index 19249cb..612ddc4 100644
--- a/ui/src/main/frontend/src/js/cms.fields.js
+++ b/ui/src/main/frontend/src/js/cms.fields.js
@@ -24,14 +24,105 @@
 (function (rava, wysihtml, wysihtmlParserRules) {
     'use strict';
     
-    /* Update the name on file selection */
+    /* Support for file uploads */
+    var setProgress = function(meter, progress){
+        meter.innerText = Math.round(progress)+'%';
+        meter.value = Math.round(progress);
+    }
+    var uploadFile = function(meter, action, file) {
+        var formData = new FormData();
+        
+        formData.append('*', file);
+        formData.append("*@TypeHint", "sling:File");
+        
+        var xhr = new XMLHttpRequest();
+        xhr.upload.addEventListener('loadstart', function(){
+            setProgress(meter, 0);
+        }, false);
+        xhr.upload.addEventListener('progress', function(event) {
+            var percent = event.loaded / event.total * 100;
+            setProgress(meter, percent);
+        }, false);
+        xhr.upload.addEventListener('load', function(){
+            meter.classList.add('is-info');
+        }, false);
+        xhr.addEventListener('readystatechange', function(event) {
+            var status, text, readyState;
+            try {
+                readyState = event.target.readyState;
+                text = event.target.responseText;
+                status = event.target.status;
+            }catch(e) {
+            }
+            if (readyState == 4){
+                meter.classList.remove('is-info');
+                if(status == '200' && text) {
+                    meter.classList.add('is-success');
+                } else {
+                    meter.classList.add('is-danger');
+                    console.warn('Failed to upload %s, recieved message %s', file.name, text);
+                }
+            }
+        }, false);
+        xhr.open('POST', action, true);
+        xhr.send(formData);
+    }
+    var handleFile = function(scope, file){
+        var it = document.createElement('div'),
+            ctr = scope.closest('.control').querySelector('.file-item-container'),
+            meter = null;
+        it.innerHTML = document.querySelector('.file-item-template').innerHTML;
+        meter = it.querySelector('.progress');
+        it.querySelector('.file-item-name').innerText = file.name;
+        ctr.classList.remove('is-hidden');
+        ctr.appendChild(it);
+        
+        uploadFile(meter,scope.closest('form').action, file);
+    }
     rava.bind(".file", {
+        callbacks: {
+            created : function () {
+                var field = this,
+                    close = field.closest('form').querySelector('a.close');
+
+                field.addEventListener("dragover", function(event) {
+                    event.preventDefault();
+                }, false);
+                field.addEventListener("dragenter", function(event) {
+                    event.preventDefault();
+                    field.classList.add('is-primary');
+                }, false);
+                field.addEventListener("dragleave", function(event) {
+                    event.preventDefault();
+                    field.classList.remove('is-primary');
+                }, false);
+                field.addEventListener("drop", function(event) {
+                    event.preventDefault();
+                    field.classList.remove('is-primary');
+                    if (event.dataTransfer.items) {
+                        for (var i = 0; i < event.dataTransfer.items.length; i++) {
+                            if (event.dataTransfer.items[i].kind === 'file') {
+                                handleFile(field, event.dataTransfer.items[i].getAsFile());
+                            }
+                        }
+                    } else {
+                        for (var i = 0; i < event.dataTransfer.files.length; i++) {
+                            handleFile(field, event.dataTransfer.files[i]);
+                        }
+                    }
+                }, false);
+                field.closest('form').querySelector('button[type=submit]').remove();
+                close.innerText = 'Done';
+                close.addEventListener('click', function(event){
+                    window.Sling.CMS.ui.reloadContext();
+                });
+            }
+        },
         events: {
             input: {
                 change : function (event) {
-                    var nameField = event.target.closest('.file').querySelector('.file-name');
-                    if (nameField) {
-                        nameField.textContent = event.target.files[0].name;
+                    for(var i = 0; i < event.target.files.length; i++){
+                        handleFile(event.target, event.target.files[i]);
                     }
                 }
             }
diff --git a/ui/src/main/frontend/src/scss/cms.scss b/ui/src/main/frontend/src/scss/cms.scss
index 24feb38..f0ed379 100644
--- a/ui/src/main/frontend/src/scss/cms.scss
+++ b/ui/src/main/frontend/src/scss/cms.scss
@@ -70,7 +70,12 @@ h5 {
 .editor-page {
     overflow-y: auto;
 }
-
+.file-icon {
+    font-size: xx-large;
+}
+.file-label {
+    text-align: center;
+}
 .form-wrapper {
     border: none;
 }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/file/field.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/file/field.jsp
index 6187388..647eb81 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/file/field.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/file/field.jsp
@@ -18,57 +18,35 @@
  */ --%>
  <%@include file="/libs/sling-cms/global.jsp"%>
 <c:choose>
-	<c:when test="${properties.accepts}">
-		<c:set var="accepts" value="${properties.accepts}" />
-	</c:when>
-	<c:otherwise>
-		<c:set var="accepts" value="image/*,audio/*,video/*,application/json,text/css,application/pdf" />
-	</c:otherwise>
+    <c:when test="${properties.accepts}">
+        <c:set var="accepts" value="${properties.accepts}" />
+    </c:when>
+    <c:otherwise>
+        <c:set var="accepts" value=".doc,.docx,.ppt,.pptx,.xls,.xlsx,image/*,audio/*,video/*,application/json,text/css,application/pdf" />
+    </c:otherwise>
 </c:choose>
-<div class="repeating">
- 	<fieldset disabled="disabled" class="repeating__template is-hidden">
- 		<div class="repeating__item Grid">
-            <div class="file has-name is-fullwidth">
-                <label class="file-label">
-                   <input type="file" class="file-input" name="${properties.name}" ${required} accept="${accepts}" />
-                   <span class="file-cta">
-                      <span class="file-icon">
-                        <i class="jam jam-upload"></i>
-                      </span>
-                      <span class="file-label">
-                        Browse
-                      </span>
-                   </span>
-                   <span class="file-name">
-                        No File Selected
-                    </span>
-                    <span class='control'>
-                        <span class="button repeating__remove button">-</span>
-                    </span>
-                </label>
-            </div>
-	 	</div>
- 	</fieldset>
- 	<div class="repeating__container">
-	 	<div class="repeating__item Grid">
- 			<div class="file has-name is-fullwidth">
- 			    <label class="file-label">
-	 			   <input type="file" class="file-input" name="${properties.name}" ${required} accept="${accepts}" />
-	 			   <span class="file-cta">
-				      <span class="file-icon">
-				        <i class="jam jam-upload"></i>
-				      </span>
-				      <span class="file-label">
-				        Browse
-				      </span>
-                   </span>
-				   <span class="file-name">
-                        No File Selected
-                    </span>
-	                    <span class="button repeating__remove button">-</span>
-	 			</label>
-	 		</div>
-	 	</div>
-	</div>
-	<button type="button" class="repeating__add button">+</button>
-</div>
\ No newline at end of file
+<div class="is-hidden file-item-template">
+    <div class="columns">
+        <div class="column file-item-name">
+        </div>
+        <div class="column">
+            <progress class="progress file-item-progress" max="100">0%</progress>
+        </div>
+    </div>
+</div>
+<div class="file is-fullwidth is-boxed">
+    <label class="file-label">
+        <input type="file" class="file-input" name="${properties.name}" ${required} accept="${accepts}" multiple="multiple" />
+        <span class="file-cta">
+            <span class="file-icon">
+                <i class="jam jam-upload"></i>
+            </span>
+            <span class="file-label">
+                Browse / Drag File(s)
+            </span>
+        </span>
+    </label>
+</div>
+<div class="file-item-container is-hidden">
+    <hr/>
+</div>
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/upload.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/upload.json
index be0b14a..fd0f0cc 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/upload.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/upload.json
@@ -10,14 +10,13 @@
             "slingform": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/editor/slingform",
-                "button": "Upload File",
+                "button": "Done",
                 "fields": {
                     "jcr:primaryType": "nt:unstructured",
                     "sling:resourceType": "sling-cms/components/general/container",
                     "file": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/editor/fields/file",
-                        "label": "File",
                         "name": "*",
                         "required": true
                     },


[sling-org-apache-sling-app-cms] 05/05: Merge branch 'master' of git@github.com:apache/sling-org-apache-sling-app-cms.git

Posted by dk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

dklco pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-app-cms.git

commit b158fac19c24e13377790469ebaa6eec5858fd6a
Merge: 9a2dd8f 4396e34
Author: Dan Klco <dk...@apache.org>
AuthorDate: Tue Jul 2 13:07:20 2019 -0400

    Merge branch 'master' of git@github.com:apache/sling-org-apache-sling-app-cms.git

 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)


[sling-org-apache-sling-app-cms] 01/05: Adding missing i18n keys

Posted by dk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

dklco pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-app-cms.git

commit f4baa980e9412257a05ebf21628870e75bf682de
Author: Dan Klco <dk...@apache.org>
AuthorDate: Tue Jul 2 11:13:13 2019 -0400

    Adding missing i18n keys
---
 core/src/main/resources/OSGI-INF/l10n/bundle.properties | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/core/src/main/resources/OSGI-INF/l10n/bundle.properties b/core/src/main/resources/OSGI-INF/l10n/bundle.properties
index 1b9cefc..5d53bf0 100644
--- a/core/src/main/resources/OSGI-INF/l10n/bundle.properties
+++ b/core/src/main/resources/OSGI-INF/l10n/bundle.properties
@@ -88,7 +88,7 @@ cms.autoversioning.enabled.name=Enabled
 cms.autoversioning.enabled.description=Enable or disable the AutoVersioning, if not \
 enabled the autoversioning will not occur
 
-cms.autoversioning.max.name=Cutoff
+cms.autoversioning.cutoff.name=Cutoff
 cms.autoversioning.cutoff.description=The cutoff for determine if the page should be \
 auto-versioned. If the page has was last versioned before the cutoff, the page will be \
 versioned.
@@ -104,6 +104,12 @@ suggestion servlet. Each filter is provided in the format [name]=[type1],[type2]
 Each child node of the parent resource to the provided path will be checked to see \
 if the node is one of the provided types (or a sub-type) for the filter. 
 
+htmlvalidator.param.enabled.name=Apache Sling CMS - Insights HTML Validator Service
+htmlvalidator.config.description=Service for validating page HTML via the W3C HTML Validator
+
+htmlvalidator.param.enabled.name=Enabled
+htmlvalidator.param.enabled.description=If checked, this insight service will be enabled.
+
 readability.config.name=Apache Sling CMS - Insights Readability Service
 readability.config.description=A service for calculating the readability of text using a number of different readability \
 algorithms


[sling-org-apache-sling-app-cms] 04/05: Ignoring irrelvant Sonar warnings

Posted by dk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

dklco pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-app-cms.git

commit 9a2dd8fdd42b7486ef941eaf1103e1e9cdff1d3d
Author: Dan Klco <dk...@apache.org>
AuthorDate: Tue Jul 2 13:07:01 2019 -0400

    Ignoring irrelvant Sonar warnings
---
 .../apache/sling/cms/core/internal/servlets/DownloadFileServlet.java    | 2 ++
 .../apache/sling/cms/transformer/internal/TransformerWebConsole.java    | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/servlets/DownloadFileServlet.java b/core/src/main/java/org/apache/sling/cms/core/internal/servlets/DownloadFileServlet.java
index c249cc8..124060c 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/servlets/DownloadFileServlet.java
+++ b/core/src/main/java/org/apache/sling/cms/core/internal/servlets/DownloadFileServlet.java
@@ -14,6 +14,8 @@ import org.osgi.service.component.annotations.Component;
         "sling.servlet.methods=GET", "sling.servlet.extensions=html" })
 public class DownloadFileServlet extends SlingSafeMethodsServlet {
 
+    private static final long serialVersionUID = 6234007100684499058L;
+
     protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response)
             throws ServletException, IOException {
         handleMethodNotImplemented(request, response);
diff --git a/transformer/src/main/java/org/apache/sling/cms/transformer/internal/TransformerWebConsole.java b/transformer/src/main/java/org/apache/sling/cms/transformer/internal/TransformerWebConsole.java
index ca9706d..4fb47a6 100644
--- a/transformer/src/main/java/org/apache/sling/cms/transformer/internal/TransformerWebConsole.java
+++ b/transformer/src/main/java/org/apache/sling/cms/transformer/internal/TransformerWebConsole.java
@@ -53,7 +53,7 @@ public class TransformerWebConsole extends AbstractWebConsolePlugin {
     public static final String CONSOLE_LABEL = "slingcms-transformer";
     public static final String CONSOLE_TITLE = "Sling CMS Transformer";
 
-    @SuppressWarnings("squid:S2078") // ignore since this field is is injected by OSGi
+    @SuppressWarnings({ "squid:S2078", "squid:S2226" }) // ignore since this field is is injected by OSGi
     @Reference
     private transient FileThumbnailTransformer fileThumbnailTransformer;