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/12/19 21:09:47 UTC

[sling-org-apache-sling-app-cms] branch SLING-7900 created (now f74e7cb)

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

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


      at f74e7cb  Merging in master

This branch includes the following new commits:

     new 5d2c55a  initial changes
     new 5ca7ff2  initial refactoring of content breadcrumbs and content table
     new 3e2496b  table updates and modals
     new 4d4651e  SLING-7900 UI changes
     new 14d282f  SLING-7900 set core to java 8
     new 7ac67c6  UI Updates - Content Browsing
     new 5162054  removed additional '}'
     new f0ffbd3  SLING-7900 UI dynamic file actions
     new 3b977b1  SLING-7900 UI Updates
     new 68b45fb  side navigation
     new 99b2d39  AEM-7900 side breadcrumb example working
     new 2213872  ongoing breadcrumb changes
     new 7415cce  AEM-7900 updated package version
     new 9dc63c1  Merge remote-tracking branch 'origin/master' into SLING-7900
     new 4d532b2  Merge remote-tracking branch 'origin/master' into SLING-7900
     new e0b2b83  AEM-7900 fixed corrupted start.json
     new f74e7cb  Merging in master

The 17 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.



[sling-org-apache-sling-app-cms] 13/17: AEM-7900 updated package version

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

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

commit 7415cce0db9372b511cdead5de417d1e593ff335
Author: JE Bailey <ja...@sas.com>
AuthorDate: Mon Sep 24 09:15:39 2018 -0400

    AEM-7900 updated package version
---
 core/src/main/java/org/apache/sling/cms/core/models/package-info.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/core/src/main/java/org/apache/sling/cms/core/models/package-info.java b/core/src/main/java/org/apache/sling/cms/core/models/package-info.java
index 6579c9c..da2cdc7 100644
--- a/core/src/main/java/org/apache/sling/cms/core/models/package-info.java
+++ b/core/src/main/java/org/apache/sling/cms/core/models/package-info.java
@@ -22,7 +22,7 @@
  *
  * @version 0.9.0
  */
-@Version("1.0.0")
+@Version("1.1.0")
 package org.apache.sling.cms.core.models;
 
 import org.osgi.annotation.versioning.Version;


[sling-org-apache-sling-app-cms] 17/17: Merging in master

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

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

commit f74e7cb6e7e844335607cdfb0201edad92412d48
Merge: e0b2b83 e1374dd
Author: Dan Klco <dk...@apache.org>
AuthorDate: Thu Oct 4 12:38:23 2018 -0400

    Merging in master

 README.md                                          |   6 +-
 core/pom.xml                                       |  23 +-
 .../core/internal/filters/EditIncludeFilter.java   |  15 +-
 .../internal/operations/BulkReplaceOperation.java  | 253 +++++++++++----------
 .../apache/sling/cms/core/models/ErrorHandler.java | 195 ++++++++++++----
 .../apache/sling/cms/core/models/package-info.java |   2 -
 docs/admin-tools.md                                |   4 +-
 docs/administration.md                             |   3 +-
 docs/developers.md                                 |   3 +-
 docs/img/add-config.png                            | Bin 35261 -> 18883 bytes
 docs/img/add-taxonomy.png                          | Bin 54030 -> 22675 bytes
 docs/img/add-template.png                          | Bin 82285 -> 19221 bytes
 docs/img/bulk-replace.png                          | Bin 55838 -> 36012 bytes
 docs/img/component-configurations.png              | Bin 56299 -> 38301 bytes
 docs/img/component-editor.png                      | Bin 90386 -> 96528 bytes
 docs/img/configuration-fields.png                  | Bin 28453 -> 16335 bytes
 docs/img/configure-security-filter.png             | Bin 77137 -> 48229 bytes
 docs/img/container-add.png                         | Bin 91196 -> 37214 bytes
 docs/img/content-packages.png                      | Bin 97449 -> 60455 bytes
 docs/img/create-site-configuration.png             | Bin 64338 -> 23424 bytes
 docs/img/create-site-group.png                     | Bin 57275 -> 20512 bytes
 docs/img/create-site.png                           | Bin 58038 -> 25812 bytes
 docs/img/delete-dialog.png                         | Bin 72693 -> 53006 bytes
 docs/img/edit-file-config.png                      | Bin 74938 -> 57158 bytes
 docs/img/edit-site-configuration.png               | Bin 112002 -> 56785 bytes
 docs/img/edit-template.png                         | Bin 71898 -> 53255 bytes
 docs/img/editor-topbar.png                         | Bin 135874 -> 113918 bytes
 docs/img/internationalization.png                  | Bin 55605 -> 33725 bytes
 docs/img/load-content.png                          | Bin 49462 -> 33793 bytes
 docs/img/manage-versions.png                       | Bin 79397 -> 38901 bytes
 docs/img/mappings.png                              | Bin 76531 -> 33685 bytes
 docs/img/move-copy.png                             | Bin 70051 -> 53038 bytes
 docs/img/node-browser.png                          | Bin 67381 -> 38589 bytes
 docs/img/osgi-console.png                          | Bin 147524 -> 93708 bytes
 docs/img/sample-console.png                        | Bin 67453 -> 29716 bytes
 docs/img/select-config-component-type.png          | Bin 48785 -> 33449 bytes
 docs/img/select-field-type.png                     | Bin 47648 -> 28452 bytes
 docs/img/site-content.png                          | Bin 78605 -> 34216 bytes
 docs/img/ugc-approval.png                          | Bin 0 -> 61884 bytes
 docs/img/ugc-console.png                           | Bin 0 -> 49303 bytes
 docs/img/use-taxonomy.png                          | Bin 28360 -> 14997 bytes
 docs/img/users-groups.png                          | Bin 54151 -> 31634 bytes
 docs/intro.md                                      |  17 +-
 docs/quickstart.md                                 |   6 +-
 docs/releases.md                                   |  54 +++++
 docs/user-generated-content.md                     |  48 ++++
 pom.xml                                            |  25 +-
 ui/src/main/frontend/gulpfile.js                   |   7 +-
 ui/src/main/frontend/package.json                  |   7 +-
 ui/src/main/frontend/src/js/cms.js                 |  52 +++--
 ui/src/main/frontend/src/js/editor.js              | 202 ++++++++--------
 ui/src/main/frontend/src/scss/cms.scss             |   9 +
 .../components/cms/editconfig/editconfig.jsp       |   4 +-
 .../components/cms/searchresults/searchresults.jsp |  86 +++----
 .../components/cms/suffixswitch/suffixswitch.jsp   |   2 +-
 .../components/editor/fields/path/path.jsp         |   2 +-
 .../components/editor/scripts/finalize.jsp         |   2 +-
 .../components/general/container/container.jsp     |   2 +-
 .../libs/sling-cms/components/pages/base/nav.jsp   |  36 ++-
 .../sling-cms/components/pages/editor/body.jsp     |   2 +-
 .../pages/editor/{body.jsp => editor.jsp}          |   8 +-
 .../libs/sling-cms/content/shared/search.json      |  53 +++++
 .../libs/sling/servlet/errorhandler/default.jsp    |   3 +-
 63 files changed, 734 insertions(+), 397 deletions(-)

diff --cc core/pom.xml
index 2b20be9,640e9f2..8362b93
--- a/core/pom.xml
+++ b/core/pom.xml
@@@ -186,13 -183,8 +183,17 @@@
              <version>${project.version}</version>
          </dependency>
          <dependency>
 +            <groupId>org.apache.sling</groupId>
 +            <artifactId>org.apache.sling.xss</artifactId>
 +            <scope>provided</scope>
 +            <version>2.0.0</version>
 +        </dependency>
++        <dependency>
+             <groupId>org.apache.jackrabbit</groupId>
+             <artifactId>oak-core</artifactId>
+         </dependency>
      </dependencies>
 +    <properties>
 +        <sling.java.version>8</sling.java.version>
 +    </properties>
  </project>
diff --cc core/src/main/java/org/apache/sling/cms/core/models/package-info.java
index da2cdc7,a8c656b..1118341
--- a/core/src/main/java/org/apache/sling/cms/core/models/package-info.java
+++ b/core/src/main/java/org/apache/sling/cms/core/models/package-info.java
@@@ -19,10 -19,8 +19,8 @@@
  
  /**
   * Package with all of the core models used to support the Sling reference CMS
-  *
-  * @version 0.9.0
   */
 -@Version("2.0.0")
 +@Version("1.1.0")
  package org.apache.sling.cms.core.models;
  
  import org.osgi.annotation.versioning.Version;
diff --cc ui/src/main/frontend/src/js/cms.js
index 41cb831,3b2f306..730e823
--- a/ui/src/main/frontend/src/js/cms.js
+++ b/ui/src/main/frontend/src/js/cms.js
@@@ -19,554 -19,516 +19,566 @@@
  
  var Sling = {};
  Sling.CMS = {
 -        ext: {},
 -        decorate: function($ctx){
 -            for (var key in Sling.CMS.ext) {
 -                if(typeof Sling.CMS.ext[key].decorate == 'function'){
 -                    console.log('Invoking decorate for '+key);
 -                    Sling.CMS.ext[key].decorate($ctx);
 +  ext : {},
 +  decorate : function($ctx) {
 +    for ( var key in Sling.CMS.ext) {
 +      if (typeof Sling.CMS.ext[key].decorate == 'function') {
 +        console.log('Invoking decorate for ' + key);
 +        Sling.CMS.ext[key].decorate($ctx);
 +      }
 +    }
 +  },
 +  init : function() {
 +    for ( var key in Sling.CMS.ext) {
 +      if (typeof Sling.CMS.ext[key].init == 'function') {
 +        console.log('Invoking init for ' + key);
 +        Sling.CMS.ext[key].init();
 +      }
 +    }
 +    Sling.CMS.decorate($(document));
 +  },
 +  ui : {
 +    confirmMessage : function(title, message, complete) {
 +      var $modal = $('<div class="modal"><div class="modal-background"></div><div class="modal-card is-draggable"><header class="modal-card-head"><p class="modal-card-title">'
 +          + title
 +          + '</p></header><section class="modal-card-body">'
 +          + message
 +          + '</section><footer class="modal-card-foot"><button type="button" class="close-modal button is-primary">OK</button></footer></div>');
 +      $('body').append($modal);
 +      Sling.CMS.decorate($modal);
 +      $modal.addClass('is-active');
 +      $modal.find('.delete,.close-modal').click(function() {
 +        $modal.css('display', 'none').remove();
 +        complete();
 +      });
 +      return $modal;
 +    },
 +    fetchModal : function(title, link, path, complete) {
 +      var $modal = $('<div class="modal"><div class="modal-background"></div><div class="modal-card is-draggable"><header class="modal-card-head"><p class="modal-card-title">'
 +          + title
 +          + '</p></header><section class="modal-card-body"></section><footer class="modal-card-foot"><a class="close-modal is-danger button" aria-label="close">Cancel</a></footer></div>');
 +      $('body').append($modal);
 +      $modal.find('.modal-card-body').load(link, function() {
 +        var submitButton = $modal.find('button:submit');
 +        var closeButton = $modal.find('.close-modal');
 +        submitButton.insertBefore(closeButton);
 +        submitButton.on("click", function() {
 +          $modal.find('form').submit();
 +        })
 +        $modal.addClass('is-active');
 +        closeButton.click(function() {
 +          $modal.css('display', 'none').remove();
 +          return false;
 +        });
 +        Sling.CMS.decorate($modal);
 +        complete();
 +      });
 +      return $modal;
 +    }
 +  },
 +  utils : {
 +    form2Obj : function($form) {
 +      var data = {};
 +      $.map($form.serializeArray(), function(n, i) {
 +        data[n['name']] = n['value'];
 +      });
 +      return data;
 +    }
 +  }
 +};
 +
 +Sling.CMS.ext['ajaxform'] = {
 +  decorate : function($ctx) {
 +    $ctx
 +        .find('.Form-Ajax')
 +        .submit(
 +            function() {
 +
 +              var $form = $(this);
 +              var jcrcontent = false;
 +              $form.find('input,select,textarea').each(function(idx, inp) {
 +                if (inp.name.indexOf('jcr:content') != -1) {
 +                  jcrcontent = true;
                  }
 -            }
 -        },
 -        init: function(){
 -            for (var key in Sling.CMS.ext) {
 -                if(typeof Sling.CMS.ext[key].init == 'function'){
 -                    console.log('Invoking init for '+key);
 -                    Sling.CMS.ext[key].init();
 +              });
 +              if ($form.data('addDate')
 +                  && $form.find('input[name="jcr:content/jcr:lastModified"]').length == 0) {
 +                if (jcrcontent) {
 +                  $form
 +                      .append('<input type="hidden" name="jcr:content/jcr:lastModified" />');
 +                  $form
 +                      .append('<input type="hidden" name="jcr:content/jcr:lastModifiedBy" />');
 +                  $form
 +                      .append('<input type="hidden" name="jcr:content/jcr:created" />');
 +                  $form
 +                      .append('<input type="hidden" name="jcr:content/jcr:createdBy" />');
 +                } else {
 +                  $form
 +                      .append('<input type="hidden" name="jcr:lastModified" />');
 +                  $form
 +                      .append('<input type="hidden" name="jcr:lastModifiedBy" />');
 +                  $form.append('<input type="hidden" name="jcr:created" />');
 +                  $form.append('<input type="hidden" name="jcr:createdBy" />');
                  }
 -            }
 -            Sling.CMS.decorate($(document));
 -        },
 -        ui: {
 -            confirmMessage: function(title, message, complete){
 -                var $modal = $('<div class="modal"><div class="modal-background"></div><div class="modal-card is-draggable"><header class="modal-card-head"><p class="modal-card-title">'+title+'</p><button class="delete" aria-label="close"></button></header><section class="modal-card-body">'+message+'</section><footer class="modal-card-foot"><button type="button" class="close-modal button is-primary">OK</button></footer></div>');
 -                $('body').append($modal);
 -                Sling.CMS.decorate($modal);
 -                $modal.addClass('is-active');
 -                $modal.find('.delete,.close-modal').click(function(){
 -                    $modal.css('display','none').remove();
 -                    complete();
 -                });
 -                return $modal;
 -            },
 -            fetchModal: function(title, link, path, complete){
 -                var $modal = $('<div class="modal"><div class="modal-background"></div><div class="modal-card is-draggable"><header class="modal-card-head"><p class="modal-card-title">'+title+'</p><button class="delete" aria-label="close"></button></header><section class="modal-card-body"></section><footer class="modal-card-foot"></footer></div>');
 -                $('body').append($modal);
 -                $modal.find('.modal-card-body').load(link + " " +path,function(){
 -                    $modal.addClass('is-active');
 -                    $modal.find('.delete,.close-modal').click(function(){
 -                        $modal.css('display','none').remove();
 -                        return false;
 +              }
 +              var callback = $form.data('callback');
 +              var data = new FormData(this);
 +              $form.find('.Form-Ajax__wrapper').attr('disabled', 'disabled');
 +              $.ajax({
 +                url : $form.attr('action'),
 +                type : 'POST',
 +                data : data,
 +                processData : false,
 +                contentType : false,
 +                dataType : 'json',
 +                success : function(res, msg) {
 +                  if (callback && Sling.CMS.ext[callback]) {
 +                    Sling.CMS.ext[callback](res, msg);
 +                  } else {
 +                    Sling.CMS.ext.reload(res, msg);
 +                  }
 +                },
 +                error : function(xhr, msg, err) {
 +                  if (window.self !== window.top) {
 +                    window.top.Sling.CMS.ui.confirmMessage(msg, err,
 +                        function() {
 +                          $form.find('.Form-Ajax__wrapper').removeAttr(
 +                              'disabled');
 +                        });
 +                  } else {
 +                    Sling.CMS.ui.confirmMessage(msg, err, function() {
 +                      $form.find('.Form-Ajax__wrapper').removeAttr('disabled');
                      });
 -                    Sling.CMS.decorate($modal);
 -                    complete();
 -                });
 -                return $modal;
 -            }
 -        },
 -        utils: {
 -            form2Obj: function ($form){
 -                var data = {};
 -                $.map($form.serializeArray(), function(n, i){
 -                    data[n['name']] = n['value'];
 -                });
 -                return data;
 -            }
 -        }
 -    };
 -
 -    Sling.CMS.ext['ajaxform'] = {
 -        decorate: function($ctx){
 -            $ctx.find('.Form-Ajax').submit(function(){
 -                
 -                var $form = $(this);
 -                var jcrcontent = false;
 -                $form.find('input,select,textarea').each(function(idx,inp){
 -                    if(inp.name.indexOf('jcr:content') != -1){
 -                        jcrcontent = true;
 -                    }
 -                });
 -                if($form.data('addDate') && $form.find('input[name="jcr:content/jcr:lastModified"]').length == 0){
 -                    if(jcrcontent){
 -                        $form.append('<input type="hidden" name="jcr:content/jcr:lastModified" />');
 -                        $form.append('<input type="hidden" name="jcr:content/jcr:lastModifiedBy" />');
 -                        $form.append('<input type="hidden" name="jcr:content/jcr:created" />');
 -                        $form.append('<input type="hidden" name="jcr:content/jcr:createdBy" />');
 -                    } else {
 -                        $form.append('<input type="hidden" name="jcr:lastModified" />');
 -                        $form.append('<input type="hidden" name="jcr:lastModifiedBy" />');
 -                        $form.append('<input type="hidden" name="jcr:created" />');
 -                        $form.append('<input type="hidden" name="jcr:createdBy" />');
 -                    }
 +                  }
                  }
 -                var callback = $form.data('callback');
 -                var data = new FormData(this);
 -                $form.find('.Form-Ajax__wrapper').attr('disabled', 'disabled');
 -                $.ajax({
 -                    url: $form.attr('action'),
 -                    type: 'POST',
 -                    data: data,
 -                    processData: false,
 -                    contentType: false,
 -                    dataType: 'json',
 -                    success: function(res,msg){
 -                        if (callback && Sling.CMS.ext[callback]){
 -                            Sling.CMS.ext[callback](res, msg);
 -                        } else {
 -                            Sling.CMS.ext.reload(res, msg);
 -                        }
 -                    },
 -                    error: function(xhr, msg, err){
 -                        if(window.self !== window.top){
 -                            window.top.Sling.CMS.ui.confirmMessage(msg, err,function(){
 -                                $form.find('.Form-Ajax__wrapper').removeAttr('disabled');
 -                            });
 -                        } else {
 -                            Sling.CMS.ui.confirmMessage(msg, err,function(){
 -                                $form.find('.Form-Ajax__wrapper').removeAttr('disabled');
 -                            });
 -                        }
 -                    }
 -                });
 -                return false;
 +              });
 +              return false;
              });
 -        }
 -    };
 +  }
 +};
  
 -    Sling.CMS.ext['draggable'] = {
 -        decorate: function($ctx) {
 -            var draggable = function(){
 -                var element = this;
 -                var mouseX;
 -                var mouseY;
 -                var mouseDown = false;
 -                var elementX = 0;
 -                var elementY = 0;
 -
 -                  // mouse button down over the element
 -                element.addEventListener('mousedown', function(evt){
 -                    if(evt.target.matches('.modal-card-body *')){
 -                        return;
 -                    }
 -                    mouseX = evt.clientX;
 -                    mouseY = evt.clientY;
 -                    mouseDown = true;
 -                });
 -                
 -                var moveComplete = function(){
 -                    mouseDown = false;
 -                    elementX = parseInt(element.style.left) || 0;
 -                    elementY = parseInt(element.style.top) || 0;
 -                    return false;
 -                }
 -                
 -                element.addEventListener('mouseup', moveComplete);
 -                document.addEventListener('mouseout', moveComplete);
 -                
 -                document.addEventListener('mousemove', function(event) {
 -                    if (!mouseDown) {
 -                        return;
 -                    }
 -                    var deltaX = event.clientX - mouseX;
 -                    var deltaY = event.clientY - mouseY;
 -                    element.style.left = elementX + deltaX + 'px';
 -                    element.style.top = elementY + deltaY + 'px';
 -                    return false;
 -                });
 -                
 -            };
 -            if($ctx.is('.is-draggable')){
 -                $ctx.each(draggable)
 -            }
 -            $ctx.find('.is-draggable').each(draggable);
 -        }
 -    };
 -    
 -    Sling.CMS.ext['load-versions'] = {
 -        loaded: false,
 -        decorate: function($ctx) {
 -            if(!Sling.CMS.ext['load-versions'].loaded){
 -                $ctx.find('.load-versions').each(function(){
 -                    var $ctr = $(this);
 -                    var $table = $ctr.closest('.table');
 -                    $.getJSON($ctr.data('url'),function(res){
 -                        $table.dataTable().api().destroy();
 -                        var source   = $('#'+$ctr.data('template')).html();
 -                        var template = Handlebars.compile(source);
 -                        $ctr.append(template(res));
 -                        Sling.CMS.ext['load-versions'].loaded = true;
 -                        Sling.CMS.decorate($ctr.closest('.version-container'));
 -                    });
 -                });
 -            }
 -        }
 -    };
 +Sling.CMS.ext['draggable'] = {
 +  decorate : function($ctx) {
 +    var draggable = function() {
 +      var element = this;
 +      var mouseX;
 +      var mouseY;
 +      var mouseDown = false;
 +      var elementX = 0;
 +      var elementY = 0;
  
 -    //support links which fetch HTML and display a modal
 -    Sling.CMS.ext['fetch-modal'] = {
 -        decorate : function($ctx){
 -            $ctx.find('a.Fetch-Modal').click(function(){
 -                var $link = $(this);
 -                $link.attr('disabled', 'disabled');
 -                Sling.CMS.ui.fetchModal($link.attr('data-title'), encodeURI($link.attr('href')), $link.attr('data-path'), function(){
 -                    $link.removeAttr('disabled');
 -                });
 -                return false;
 -            });
 +      // mouse button down over the element
 +      element.addEventListener('mousedown', function(evt) {
-         if (document.querySelector('.modal-card-body').contains(evt.target)) {
++        if (evt.target.matches('.modal-card-body *')) {
 +          return;
          }
 -    };
 -    
 -    Sling.CMS.ext['file-upload'] = {
 -        decorate: function($ctx) {
 -            $ctx.find('.file').on('change', "input", function(){
 -                var node = $(this);
 -                node.parent().find('.file-name').text(this.files[0].name);
 -            });
 -        }
 -    };
 -    
 -    Sling.CMS.ext['getform'] = {
 -        decorate: function($ctx){
 -            $ctx.find('.Get-Form').submit(function(){
 -                var $form = $(this);
 -                var params = $form.serialize();
 -                $form.find('.Form-Ajax__wrapper').attr('disabled', 'disabled');
 -                
 -                $($form.data('target')).load($form.attr('action') + '?' + params +'  ' + $form.data('load'), function(){
 -                    $form.find('.Form-Ajax__wrapper').removeAttr('disabled');
 -                    Sling.CMS.decorate($($form.data('target')));
 -                });
 -                return false;
 -            });
 -        }
 -    };
 +        mouseX = evt.clientX;
 +        mouseY = evt.clientY;
 +        mouseDown = true;
 +      });
  
 -    Sling.CMS.ext['includeconfig'] = {
 -        decorate: function($ctx){
 -            $ctx.find('.sling-cms-include-config').each(function(){
 -                var $ctr = $(this);
 -                var load = function(){
 -                    var config = $($ctr.data('source')).find('option:selected').data('config');
 -                    
 -                    if(config){
 -                        $ctr.load(config + $ctr.parents('form').attr('action'), function(){
 -                            Sling.CMS.decorate($ctr.children());
 -                        });
 -                    }
 -                };
 -                $($ctr.data('source')).change(load);
 -                load();
 -            });
 -        }
 -    };
 +      var moveComplete = function() {
 +        mouseDown = false;
 +        elementX = parseInt(element.style.left) || 0;
 +        elementY = parseInt(element.style.top) || 0;
 +        return false;
 +      }
  
 -    Sling.CMS.ext['handledelete'] = function(res, msg){
 -        if(window.location.pathname.indexOf(res.path) !== -1){
 -            window.top.Sling.CMS.ui.confirmMessage(msg, res.title,function(){
 -                window.location = '/cms';
 -            });
 -        } else {
 -            Sling.CMS.ext.reload(res, msg);
 -        }
 -    }
 +      element.addEventListener('mouseup', moveComplete);
 +      document.addEventListener('mouseout', moveComplete);
  
 -    Sling.CMS.ext['handlemove'] = function(res, msg){
 -        var changes = res.changes[0];
 -        if(changes.type === 'moved' && window.location.pathname.indexOf(changes.argument[0]) !== -1){
 -            window.top.Sling.CMS.ui.confirmMessage(msg, res.title,function(){
 -                window.location = window.location.href.replace(changes.argument[0], changes.argument[1]);
 -            });
 -        } else {
 -            Sling.CMS.ext.reload(res, msg);
 +      document.addEventListener('mousemove', function(event) {
 +        if (!mouseDown) {
 +          return;
          }
 +        var deltaX = event.clientX - mouseX;
 +        var deltaY = event.clientY - mouseY;
 +        element.style.left = elementX + deltaX + 'px';
 +        element.style.top = elementY + deltaY + 'px';
 +        return false;
 +      });
 +
 +    };
 +    if ($ctx.is('.is-draggable')) {
 +      $ctx.each(draggable)
      }
 +    $ctx.find('.is-draggable').each(draggable);
 +  }
 +};
  
 -    Sling.CMS.ext['handleugc'] = function(res, msg){
 -		Sling.CMS.ui.confirmMessage(msg, res.title,function(){
 -			window.location = '/cms/usergenerated/content.html'+res.parentLocation;
 -		});
 +Sling.CMS.ext['load-versions'] = {
 +  loaded : false,
 +  decorate : function($ctx) {
 +    if (!Sling.CMS.ext['load-versions'].loaded) {
 +      $ctx.find('.load-versions').each(function() {
 +        var $ctr = $(this);
 +        var $table = $ctr.closest('.table');
 +        $.getJSON($ctr.data('url'), function(res) {
 +          $table.dataTable().api().destroy();
 +          var source = $('#' + $ctr.data('template')).html();
 +          var template = Handlebars.compile(source);
 +          $ctr.append(template(res));
 +          Sling.CMS.ext['load-versions'].loaded = true;
 +          Sling.CMS.decorate($ctr.closest('.version-container'));
 +        });
 +      });
      }
 +  }
 +};
 +
 +// support links which fetch HTML and display a modal
 +Sling.CMS.ext['fetch-modal'] = {
 +  decorate : function($ctx) {
 +    $ctx.find('a.Fetch-Modal').click(
 +        function() {
 +          var $link = $(this);
 +          $link.attr('disabled', 'disabled');
 +          Sling.CMS.ui.fetchModal($link.attr('data-title'), encodeURI($link
 +              .attr('href')), $link.attr('data-path'), function() {
 +            $link.removeAttr('disabled');
 +          });
 +          return false;
 +        });
 +  }
 +};
 +
 +Sling.CMS.ext['getform'] = {
 +  decorate : function($ctx) {
 +    $ctx.find('.Get-Form').submit(
 +        function() {
 +          var $form = $(this);
 +          var params = $form.serialize();
 +          $form.find('.Form-Ajax__wrapper').attr('disabled', 'disabled');
 +
 +          $($form.data('target')).load(
 +              $form.attr('action') + '?' + params + '  ' + $form.data('load'),
 +              function() {
 +                $form.find('.Form-Ajax__wrapper').removeAttr('disabled');
 +                Sling.CMS.decorate($($form.data('target')));
 +              });
 +          return false;
 +        });
 +  }
 +};
 +
 +Sling.CMS.ext['includeconfig'] = {
 +  decorate : function($ctx) {
 +    $ctx.find('.sling-cms-include-config').each(
 +        function() {
 +          var $ctr = $(this);
 +          var load = function() {
 +            var config = $($ctr.data('source')).find('option:selected').data(
 +                'config');
 +
 +            if (config) {
 +              $ctr.load(config + $ctr.parents('form').attr('action'),
 +                  function() {
 +                    Sling.CMS.decorate($ctr.children());
 +                  });
 +            }
 +          };
 +          $($ctr.data('source')).change(load);
 +          load();
 +        });
 +  }
 +};
 +
 +Sling.CMS.ext['handledelete'] = function(res, msg) {
 +  if (window.location.pathname.indexOf(res.path) !== -1) {
 +    window.top.Sling.CMS.ui.confirmMessage(msg, res.title, function() {
 +      window.location = '/cms';
 +    });
 +  } else {
 +    Sling.CMS.ext.reload(res, msg);
 +  }
 +}
 +
 +Sling.CMS.ext['handlemove'] = function(res, msg) {
 +  var changes = res.changes[0];
 +  if (changes.type === 'moved'
 +      && window.location.pathname.indexOf(changes.argument[0]) !== -1) {
 +    window.top.Sling.CMS.ui.confirmMessage(msg, res.title, function() {
 +      window.location = window.location.href.replace(changes.argument[0],
 +          changes.argument[1]);
 +    });
 +  } else {
 +    Sling.CMS.ext.reload(res, msg);
 +  }
 +}
 +
 +Sling.CMS.ext['handleugc'] = function(res, msg) {
 +  Sling.CMS.ui.confirmMessage(msg, res.title, function() {
 +    window.location = '/cms/usergenerated/content.html' + res.parentLocation;
 +  });
 +}
 +
 +Sling.CMS.ext['namehint'] = {
 +  decorate : function($ctx) {
 +    $ctx.find('.namehint').each(
 +        function() {
 +          var $nh = $(this);
 +          $nh.parents('.Form-Ajax').find('select[name="sling:resourceType"]')
 +              .change(function() {
 +                var resourceType = $(this).val().split("\/");
 +                $nh.val(resourceType[resourceType.length - 1]);
 +              });
 +        });
 +  }
 +};
  
 -    Sling.CMS.ext['namehint'] = {
 -        decorate: function($ctx){
 -            $ctx.find('.namehint').each(function(){
 -                var $nh = $(this);
 -                $nh.parents('.Form-Ajax').find('select[name="sling:resourceType"]').change(function(){
 -                    var resourceType = $(this).val().split("\/");
 -                    $nh.val(resourceType[resourceType.length - 1]);
 -                });
 -            });
 -        }
 -    };
+ 
+     Sling.CMS.ext['navbar'] = {
+         init: function() {
+             document.querySelectorAll('.navbar-burger').forEach(function(burger){
+                 burger.addEventListener('click', function(){
+                     var target = document.querySelector(burger.dataset.target);
+                     target.classList.toggle('is-active');
+                     burger.classList.toggle('is-active');
+                 });
+             });
+         }
+     };
 -    
 -    Sling.CMS.ext['pageproperties'] = {
 -        decorate: function($ctx){
 -            $ctx.find('.Sling-CMS__page-properties').each(function(){
 -                var $ctr = $(this);
 -                var $wrapper = $ctr.closest('.Form-Ajax__wrapper');
 -                $($ctr.data('source')).change(function(){
 -                    var config = $(this).val();
 -                    $ctr.load($ctr.data('path')+config, function(){
 -                        var source   = $('#content-template').html();
 -                        var template = Handlebars.compile(source);
 -                        var updateContent = function(){
 -                            if(!$wrapper.is(':disabled')){
 -                                var data = Sling.CMS.utils.form2Obj($ctr.parents('form'));
 -                                $('input[name=":content"]').val(template(data));
 -                            }
 -                        }
 -                        $ctr.find('input,textarea,select').change(updateContent);
 -                        $ctr.parents('form').submit(updateContent);
 -                        Sling.CMS.decorate($ctr.children());
 -                    });
 -                });
 -            });
 -        }
 -    };
+ 
 -    Sling.CMS.ext['pathfield'] = {
 -        suggest: function(field, type, base) {
 -            var xhr;
 -            new autoComplete({
 -                minChars: 1,
 -                selector: field,
 -                source: function(term, response){
 -                    try {
 -                        xhr.abort();
 -                    } catch(e){}
 -                    if(term === '/'){
 -                        term = base;
 -                    }
 -                    xhr = $.getJSON('/bin/cms/paths', { path: term, type: type }, function(data){
 -                        response(data);
 -                    });
 -                }
 -            });
 -        },
 -        decorate: function($ctx){
 -            $ctx.find('input.pathfield').each(function(){
 -                var type = $(this).data('type');
 -                var base = $(this).data('base');
 -                Sling.CMS.ext.pathfield.suggest(this, type, base);
 -            });
 -        }
 -    };
 +Sling.CMS.ext['pageproperties'] = {
 +  decorate : function($ctx) {
 +    $ctx.find('.Sling-CMS__page-properties').each(function() {
 +      var $ctr = $(this);
 +      var $wrapper = $ctr.closest('.Form-Ajax__wrapper');
 +      $($ctr.data('source')).change(function() {
 +        var config = $(this).val();
 +        $ctr.load($ctr.data('path') + config, function() {
 +          var source = $('#content-template').html();
 +          var template = Handlebars.compile(source);
 +          var updateContent = function() {
 +            if (!$wrapper.is(':disabled')) {
 +              var data = Sling.CMS.utils.form2Obj($ctr.parents('form'));
 +              $('input[name=":content"]').val(template(data));
 +            }
 +          }
 +          $ctr.find('input,textarea,select').change(updateContent);
 +          $ctr.parents('form').submit(updateContent);
 +          Sling.CMS.decorate($ctr.children());
 +        });
 +      });
 +    });
 +  }
 +};
  
 -    Sling.CMS.ext['reload'] = function(res, msg) {
 -        if(window.self !== window.top){
 -            window.top.Sling.CMS.ui.confirmMessage(msg, res.title,function(){
 -                window.top.location.reload();
 -            });
 -        } else {
 -            Sling.CMS.ui.confirmMessage(msg, res.title,function(){
 -                location.reload();
 -            });
 +Sling.CMS.ext['pathfield'] = {
 +  suggest : function(field, type, base) {
 +    var xhr;
 +    new autoComplete({
 +      minChars : 1,
 +      selector : field,
 +      source : function(term, response) {
 +        try {
 +          xhr.abort();
 +        } catch (e) {
          }
 -    }
 - 
 -    Sling.CMS.ext['repeating'] = {
 -        decorate: function($ctx){
 -            $ctx.find('.repeating').each(function(){
 -                var $rep = $(this);
 -                $rep.find('.repeating__add').click(function(){
 -                    var $div = $('<div/>').html($rep.find('.repeating__template').html());
 -                    Sling.CMS.decorate($div);
 -                    $rep.find('.repeating__container').append($div);
 -                    return false;
 -                });
 -            });
 -            $ctx.find('.repeating__remove').click(function(){
 -                var $rem = $(this);
 -                $rem.parents('.repeating__item').remove();
 -                return false;
 -            });
 +        if (term === '/') {
 +          term = base;
          }
 -    };
 -    
 -    Sling.CMS.ext['richtext'] = {
 -        decorate: function($ctx){
 -            $ctx.find('.richtext').summernote({
 -                toolbar: [
 -                    ['style', ['bold', 'italic', 'clear','strikethrough', 'superscript', 'subscript']],
 -                    ['insert', ['picture', 'link', 'table', 'hr']],
 -                    ['para', ['style','ul', 'ol', 'paragraph']],
 -                    ['misc', ['codeview', 'undo','redo','help']]
 -                ],
 -                followingToolbar: false,
 -                dialogsInBody: true,
 -                height: 200,
 -                onCreateLink: function (url) {
 -                    return url;
 -                },
 -                callbacks: {
 -                    onDialogShown: function(){
 -                        Sling.CMS.ext.pathfield.suggest($('.note-link-url')[0], 'content', '/content');
 -                        Sling.CMS.ext.pathfield.suggest($('.note-image-url')[0], 'content', '/content');
 -                    }
 -                }
 -            });
 -        }
 -    };
 -    
 +        xhr = $.getJSON('/bin/cms/paths', {
 +          path : term,
 +          type : type
 +        }, function(data) {
 +          response(data);
 +        });
 +      }
 +    });
 +  },
 +  decorate : function($ctx) {
 +    $ctx.find('input.pathfield').each(function() {
 +      var type = $(this).data('type');
 +      var base = $(this).data('base');
 +      Sling.CMS.ext.pathfield.suggest(this, type, base);
 +    });
 +  }
 +};
 +
 +Sling.CMS.ext['reload'] = function(res, msg) {
 +  if (window.self !== window.top) {
 +    window.top.Sling.CMS.ui.confirmMessage(msg, res.title, function() {
 +      window.top.location.reload();
 +    });
 +  } else {
 +    Sling.CMS.ui.confirmMessage(msg, res.title, function() {
 +      location.reload();
 +    });
 +  }
 +}
 +
 +Sling.CMS.ext['repeating'] = {
 +  decorate : function($ctx) {
 +    $ctx.find('.repeating').each(function() {
 +      var $rep = $(this);
 +      $rep.find('.repeating__add').click(function() {
 +        var $div = $('<div/>').html($rep.find('.repeating__template').html());
 +        Sling.CMS.decorate($div);
 +        $rep.find('.repeating__container').append($div);
 +        return false;
 +      });
 +    });
 +    $ctx.find('.repeating__remove').click(function() {
 +      var $rem = $(this);
 +      $rem.parents('.repeating__item').remove();
 +      return false;
 +    });
 +  }
 +};
 +
 +Sling.CMS.ext['richtext'] = {
 +  decorate : function($ctx) {
 +    $ctx.find('.richtext').summernote(
 +        {
 +          toolbar : [
 +              [
 +                  'style',
 +                  [ 'bold', 'italic', 'clear', 'strikethrough', 'superscript',
 +                      'subscript' ] ],
 +              [ 'insert', [ 'picture', 'link', 'table', 'hr' ] ],
 +              [ 'para', [ 'style', 'ul', 'ol', 'paragraph' ] ],
 +              [ 'misc', [ 'codeview', 'undo', 'redo', 'help' ] ] ],
 +          followingToolbar : false,
 +          dialogsInBody : true,
 +          height : 200,
 +          onCreateLink : function(url) {
 +            return url;
 +          },
 +          callbacks : {
 +            onDialogShown : function() {
 +              Sling.CMS.ext.pathfield.suggest($('.note-link-url')[0],
 +                  'content', '/content');
 +              Sling.CMS.ext.pathfield.suggest($('.note-image-url')[0],
 +                  'content', '/content');
 +            }
 +          }
 +        });
 +  }
 +};
 +
- Sling.CMS.ext['searchselect'] = {
-   decorate : function($ctx) {
-     $ctx.find('.Search-Select-Button').click(function(evt) {
-       var $btn = $(evt.target);
-       var $active = Sling.CMS.ext['searchbutton'].active;
-       $active.val($btn.data('path'));
-       $btn.closest('.Modal').remove();
-     });
-   }
- }
 +
- Sling.CMS.ext['searchbutton'] = {
-   active : null,
-   decorate : function($ctx) {
-     $ctx.find('.Search-Button').click(
-         function(evt) {
-           Sling.CMS.ext['searchbutton'].active = $(evt.target).closest(
-               '.Field-Input').find('.Field-Path');
-         });
-   }
+     Sling.CMS.ext['searchselect'] = {
+         decorate: function($ctx) {
+             $ctx.find('.search-select-button').click(function(evt){
+                 var $btn = $(evt.target);
+                 var $active = Sling.CMS.ext['searchbutton'].active;
+                 $active.val($btn.data('path'));
+                 $btn.closest('.modal').remove();
+             });
+         }
 -    };
++    }
+     
+     Sling.CMS.ext['searchbutton'] = {
+         active: null,
+         decorate: function($ctx) {
+             $ctx.find('.search-button').click(function(evt){
+                 Sling.CMS.ext['searchbutton'].active = $(evt.target).closest('.field').find('.pathfield');
+             });
+         }
 -    };
 +}
  
 -    Sling.CMS.ext['suffix-form'] = {
 -        init: function() {
 -            $('.suffix-form').submit(function(){
 -                var suffix = $(this).find('input[name=suffix]').val();
 -                var path = $(this).attr('action');
 -                window.location = path + suffix;
 -                return false;
 -            });
 -        }
 -    }
 -    
 -    Sling.CMS.ext['table'] = {
 -        decorate: function($ctx) {
 -            $ctx.find('table tbody tr').click(function(el){
 -                $('.actions-target > *').appendTo('tr.is-selected .cell-actions')
 -                $('tr').removeClass('is-selected');
 -                $(this).addClass('is-selected');
 -                $(this).find('.cell-actions > *').appendTo('.actions-target')
 -            });
 +Sling.CMS.ext['suffix-form'] = {
 +  init : function() {
 +    $('.suffix-form').submit(function() {
 +      var suffix = $(this).find('input[name=suffix]').val();
 +      var path = $(this).attr('action');
 +      window.location = path + suffix;
 +      return false;
 +    });
 +  }
 +}
  
 -            $ctx.find('table').each(function(){
 -                var sort = $(this).data('sort') !== 'false';
 -                var paginate = $(this).data('paginate') !== 'false';
 -                $(this).DataTable({
 -                    sort: sort,
 -                    paginate: paginate
 -                });
 -            });
 -        }
 -    };
 +Sling.CMS.ext['table'] = {
 +  decorate : function($ctx) {
 +    $ctx.find('table tbody tr').click(function(el) {
 +      $('.actions-target > *').appendTo('tr.is-selected .cell-actions')
 +      $('tr').removeClass('is-selected');
 +      $(this).addClass('is-selected');
 +      $(this).find('.cell-actions > *').appendTo('.actions-target')
 +    });
  
 -    Sling.CMS.ext['taxonomy'] = {
 -        decorate: function($ctx){
 -            $ctx.find('.taxonomy').each(function(){
 -                var $rep = $(this);
 -                $rep.find('.taxonomy__add').click(function(){
 -                    var $span = $('<span/>').html($rep.find('.taxonomy__template').html());
 -                    var val = $ctx.find('.taxonomy__field input').val();
 -                    var found = false;
 -                    $rep.find('.taxonomy__item input').each(function(idx, el){
 -                        if($(el).val() === val){
 -                            found = true;
 -                        }
 -                    });
 -                    if(found){
 -                        return false;
 -                    }
 -                    $span.find('input').val(val);
 -                    var title = $ctx.find('option[value="'+val+'"]').text();
 -                    
 -                    if(title !== ''){
 -                        $span.find('.taxonomy__title').text(title);
 -                        Sling.CMS.decorate($span);
 -                        $('.taxonomy__container').append($span);
 -                        $ctx.find('.taxonomy__field input').val('');
 -                    }
 -                    return false;
 -                });
 -            });
 -            $ctx.find('.taxonomy__item').click(function(){
 -                $(this).remove();
 -                return false;
 -            });
 -        }
 -    };
 -    
 -    Sling.CMS.ext['toggle-hidden'] = {
 -        decorate: function($ctx){
 -            $ctx.find('.toggle-hidden').click(function(){
 -                $($(this).data('target')).toggleClass('is-hidden');
 -            });
 +    $ctx.find('table').each(function() {
 +      var sort = $(this).data('sort') !== 'false';
 +      var paginate = $(this).data('paginate') !== 'false';
 +      $(this).DataTable({
 +        sort : sort,
 +        paginate : paginate
 +      });
 +    });
 +  }
 +};
 +
 +Sling.CMS.ext['taxonomy'] = {
 +  decorate : function($ctx) {
 +    $ctx.find('.taxonomy').each(function() {
 +      var $rep = $(this);
 +      $rep.find('.taxonomy__add').click(function() {
 +        var $span = $('<span/>').html($rep.find('.taxonomy__template').html());
 +        var val = $ctx.find('.taxonomy__field input').val();
 +        var found = false;
 +        $rep.find('.taxonomy__item input').each(function(idx, el) {
 +          if ($(el).val() === val) {
 +            found = true;
 +          }
 +        });
 +        if (found) {
 +          return false;
          }
 -    };
 -    
 -    Sling.CMS.ext['toggle-value'] = {
 -        decorate: function($ctx) {
 -            $ctx.find('.toggle-value').each(function(){
 -                var $tog = $(this);
 -                $('input[name="'+$tog.data('toggle-source')+'"], select[name="'+$tog.data('toggle-source')+'"]').change(function(){
 -                    if($(this).val() !== $tog.data('toggle-value')){
 -                        $tog.addClass('is-hidden');
 -                    } else {
 -                        $tog.removeClass('is-hidden');
 -                    }
 -                });
 -            })
 +        $span.find('input').val(val);
 +        var title = $ctx.find('option[value="' + val + '"]').text();
 +
 +        if (title !== '') {
 +          $span.find('.taxonomy__title').text(title);
 +          Sling.CMS.decorate($span);
 +          $('.taxonomy__container').append($span);
 +          $ctx.find('.taxonomy__field input').val('');
          }
 -    };
 +        return false;
 +      });
 +    });
 +    $ctx.find('.taxonomy__item').click(function() {
 +      $(this).remove();
 +      return false;
 +    });
 +  }
 +};
  
 -    $(document).ready(function() {
 -        Sling.CMS.init();
 +Sling.CMS.ext['toggle-hidden'] = {
 +  decorate : function($ctx) {
 +    $ctx.find('.toggle-hidden').click(function() {
 +      $($(this).data('target')).toggleClass('is-hidden');
      });
 +  }
 +};
 +
 +Sling.CMS.ext['toggle-value'] = {
 +  decorate : function($ctx) {
 +    $ctx.find('.toggle-value').each(
 +        function() {
 +          var $tog = $(this);
 +          $(
 +              'input[name="' + $tog.data('toggle-source') + '"], select[name="'
 +                  + $tog.data('toggle-source') + '"]').change(function() {
 +            if ($(this).val() !== $tog.data('toggle-value')) {
 +              $tog.addClass('is-hidden');
 +            } else {
 +              $tog.removeClass('is-hidden');
 +            }
 +          });
 +        })
 +  }
 +};
 +
 +Sling.CMS.ext['file-upload'] = {
 +  decorate : function($ctx) {
 +    $ctx.find('.file').on('change', "input", function() {
 +      var node = $(this);
 +      node.parent().find('.file-name').text(this.files[0].name);
 +    });
 +  }
 +};
 +
 +$(document).ready(function() {
 +  Sling.CMS.init();
 +});
diff --cc ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/nav.jsp
index 2e6fd9e,da5e167..7dc39b8
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/nav.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/nav.jsp
@@@ -17,23 -17,21 +17,21 @@@
   * under the License.
   */ --%>
  <%@include file="/libs/sling-cms/global.jsp"%>
 -<nav class="navbar" role="navigation" aria-label="main mavigation">
 +<nav class="navbar is-transparent" role="navigation" aria-label="main mavigation">
- <div class="navbar-brand">
- <a class="navbar-item" href="http://sling.apache.org" >
-     <img src="/static/clientlibs/sling-cms/img/sling-logo.svg" width="100" alt="Apache Sling"/>
- </a>
- <a href="/cms/start.html" class="navbar-item" title="CMS Home"><span class="icon"><i class="jam jam-home-f"></i></span></a>
- <div class="navbar-item">
- </div>
- <a role="button" class="navbar-burger" aria-label="menu" aria-expanded="false">
-   <span aria-hidden="true"></span>
-   <span aria-hidden="true"></span>
-   <span aria-hidden="true"></span>
- </a>
- </div>
- <div class="navbar-menu">
- <div class="navbar-end">
- <a class="navbar-item " href="/system/sling/logout" title="Logout of Apache Sling CMS"><span>${resourceResolver.userID} </span><i class="jam jam-log-out"></i></a>
- </div>
- </div>
- </nav>
+     <div class="navbar-brand">
+         <a class="navbar-item" href="http://sling.apache.org" >
+             <img src="/static/clientlibs/sling-cms/img/sling-logo.svg" width="100" alt="Apache Sling"/>
+         </a>
+         <a href="/cms/start.html" class="navbar-item" title="CMS Home"><span class="icon"><i class="jam jam-home-f"></i></span></a>
+         <a role="button" class="navbar-burger" aria-label="menu" aria-expanded="false" data-target="#top-navbar-menu">
+           <span aria-hidden="true"></span>
+           <span aria-hidden="true"></span>
+           <span aria-hidden="true"></span>
+         </a>
+     </div>
+     <div class="navbar-menu" id="top-navbar-menu">
+         <div class="navbar-end">
+             <a class="navbar-item " href="/system/sling/logout" title="Logout of Apache Sling CMS"><span>${resourceResolver.userID} </span><i class="jam jam-log-out"></i></a>
+         </div>
+     </div>
 -</nav>
++</nav>


[sling-org-apache-sling-app-cms] 14/17: Merge remote-tracking branch 'origin/master' into SLING-7900

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

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

commit 9dc63c13132996de55c74ec948e656a3700e547a
Merge: 7415cce fff2bcb
Author: JE Bailey <ja...@sas.com>
AuthorDate: Mon Oct 1 13:10:32 2018 -0400

    Merge remote-tracking branch 'origin/master' into SLING-7900
    
    Conflicts:
    	ui/src/main/frontend/src/js/cms.js
    	ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json

 .../usergenerated/impl/ApproveUGCOperation.java    |    3 +
 ui/src/main/frontend/src/js/cms.js                 | 1043 +++++++++++---------
 .../components/cms/suffixswitch/suffixswitch.jsp   |   45 +
 .../components/editor/fields/path/path.jsp         |    2 +-
 .../components/editor/fields/select/field.jsp      |   74 +-
 .../editor/fields/siblingselect/siblingselect.jsp  |    2 +-
 .../libs/sling-cms/content/admin/bulkreplace.json  |  145 +--
 .../libs/sling-cms/content/admin/loadcontent.json  |  198 +++-
 .../jcr_root/libs/sling-cms/content/start.json     |   14 +-
 .../sling-cms/content/usergenerated/review.json    |    2 +
 10 files changed, 880 insertions(+), 648 deletions(-)

diff --cc ui/src/main/frontend/src/js/cms.js
index 72b9474,3d56576..41cb831
--- a/ui/src/main/frontend/src/js/cms.js
+++ b/ui/src/main/frontend/src/js/cms.js
@@@ -15,497 -15,508 +15,558 @@@
   * KIND, either express or implied.  See the License for the
   * specific language governing permissions and limitations
   * under the License.
-- */ 
++ */
  
  var Sling = {};
  Sling.CMS = {
- 		ext: {},
- 		decorate: function($ctx){
- 			for (var key in Sling.CMS.ext) {
- 				if(typeof Sling.CMS.ext[key].decorate == 'function'){
- 					console.log('Invoking decorate for '+key);
- 					Sling.CMS.ext[key].decorate($ctx);
- 				}
- 			}
- 		},
- 		init: function(){
- 			for (var key in Sling.CMS.ext) {
- 				if(typeof Sling.CMS.ext[key].init == 'function'){
- 					console.log('Invoking init for '+key);
- 					Sling.CMS.ext[key].init();
- 				}
- 			}
- 			Sling.CMS.decorate($(document));
- 		},
- 		ui: {
- 			confirmMessage: function(title, message, complete){
- 				var $modal = $('<div class="modal"><div class="modal-background"></div><div class="modal-card is-draggable"><header class="modal-card-head"><p class="modal-card-title">'+title+'</p></header><section class="modal-card-body">'+message+'</section><footer class="modal-card-foot"><button type="button" class="close-modal button is-primary">OK</button></footer></div>');
- 				$('body').append($modal);
- 				Sling.CMS.decorate($modal);
- 				$modal.addClass('is-active');
- 				$modal.find('.delete,.close-modal').click(function(){
- 					$modal.css('display','none').remove();
- 					complete();
- 				});
- 				return $modal;
- 			},
- 			fetchModal: function(title, link, path, complete){
- 				var $modal = $('<div class="modal"><div class="modal-background"></div><div class="modal-card is-draggable"><header class="modal-card-head"><p class="modal-card-title">'+title+'</p></header><section class="modal-card-body"></section><footer class="modal-card-foot"><a class="close-modal is-danger button" aria-label="close">Cancel</a></footer></div>');
- 				$('body').append($modal);
- 				$modal.find('.modal-card-body').load(link,function(){
- 					var submitButton = $modal.find('button:submit');
- 					var closeButton = $modal.find('.close-modal');
- 					submitButton.insertBefore(closeButton);
- 					submitButton.on("click",function(){
- 						$modal.find('form').submit();
- 					})
- 					$modal.addClass('is-active');
- 					closeButton.click(function(){
- 						$modal.css('display','none').remove();
- 						return false;
- 					});
- 					Sling.CMS.decorate($modal);
- 					complete();
- 				});
- 				return $modal;
- 			}
- 		},
- 		utils: {
- 			form2Obj: function ($form){
- 			    var data = {};
- 			    $.map($form.serializeArray(), function(n, i){
- 			    	data[n['name']] = n['value'];
- 			    });
- 			    return data;
- 			}
- 		}
- 	};
- 
- 	Sling.CMS.ext['ajaxform'] = {
- 		decorate: function($ctx){
- 			$ctx.find('.Form-Ajax').submit(function(){
- 				
- 				var $form = $(this);
- 				var jcrcontent = false;
- 				$form.find('input,select,textarea').each(function(idx,inp){
- 					if(inp.name.indexOf('jcr:content') != -1){
- 						jcrcontent = true;
- 					}
- 				});
- 				if($form.data('addDate') && $form.find('input[name="jcr:content/jcr:lastModified"]').length == 0){
- 					if(jcrcontent){
- 						$form.append('<input type="hidden" name="jcr:content/jcr:lastModified" />');
- 						$form.append('<input type="hidden" name="jcr:content/jcr:lastModifiedBy" />');
- 						$form.append('<input type="hidden" name="jcr:content/jcr:created" />');
- 						$form.append('<input type="hidden" name="jcr:content/jcr:createdBy" />');
- 					} else {
- 						$form.append('<input type="hidden" name="jcr:lastModified" />');
- 						$form.append('<input type="hidden" name="jcr:lastModifiedBy" />');
- 						$form.append('<input type="hidden" name="jcr:created" />');
- 						$form.append('<input type="hidden" name="jcr:createdBy" />');
- 					}
- 				}
- 				var callback = $form.data('callback');
- 				var data = new FormData(this);
- 				$form.find('.Form-Ajax__wrapper').attr('disabled', 'disabled');
- 				$.ajax({
- 					url: $form.attr('action'),
- 					type: 'POST',
- 					data: data,
- 					processData: false,
- 					contentType: false,
- 					dataType: 'json',
- 					success: function(res,msg){
- 						if (callback && Sling.CMS.ext[callback]){
- 							Sling.CMS.ext[callback](res, msg);
- 						} else {
- 							Sling.CMS.ext.reload(res, msg);
- 						}
- 					},
- 					error: function(xhr, msg, err){
- 						if(window.self !== window.top){
- 							window.top.Sling.CMS.ui.confirmMessage(msg, err,function(){
- 								$form.find('.Form-Ajax__wrapper').removeAttr('disabled');
- 							});
- 						} else {
- 							Sling.CMS.ui.confirmMessage(msg, err,function(){
- 								$form.find('.Form-Ajax__wrapper').removeAttr('disabled');
- 							});
- 						}
- 					}
- 				});
- 				return false;
- 			});
- 		}
- 	};
- 
- 	Sling.CMS.ext['draggable'] = {
- 		decorate: function($ctx) {
- 			var draggable = function(){
- 				var element = this;
- 				var mouseX;
- 				var mouseY;
- 				var mouseDown = false;
- 				var elementX = 0;
- 				var elementY = 0;
- 
- 				  // mouse button down over the element
- 				element.addEventListener('mousedown', function(evt){
- 					if(document.querySelector('.modal-card-body').contains(evt.target)){
- 						return;
- 					}
- 					mouseX = evt.clientX;
- 					mouseY = evt.clientY;
- 					mouseDown = true;
- 				});
- 				
- 				var moveComplete = function(){
- 					mouseDown = false;
- 					elementX = parseInt(element.style.left) || 0;
- 					elementY = parseInt(element.style.top) || 0;
- 					return false;
- 				}
- 				
- 				element.addEventListener('mouseup', moveComplete);
- 				document.addEventListener('mouseout', moveComplete);
- 				
- 				document.addEventListener('mousemove', function(event) {
- 					if (!mouseDown) {
- 						return;
- 					}
- 				    var deltaX = event.clientX - mouseX;
- 				    var deltaY = event.clientY - mouseY;
- 				    element.style.left = elementX + deltaX + 'px';
- 				    element.style.top = elementY + deltaY + 'px';
- 				    return false;
- 				});
- 				
- 			};
- 			if($ctx.is('.is-draggable')){
- 				$ctx.each(draggable)
- 			}
- 			$ctx.find('.is-draggable').each(draggable);
- 		}
- 	};
- 	
- 	Sling.CMS.ext['load-versions'] = {
- 		loaded: false,
- 		decorate: function($ctx) {
- 			if(!Sling.CMS.ext['load-versions'].loaded){
- 				$ctx.find('.load-versions').each(function(){
- 					var $ctr = $(this);
- 					var $table = $ctr.closest('.table');
- 					$.getJSON($ctr.data('url'),function(res){
- 						$table.dataTable().api().destroy();
- 						var source   = $('#'+$ctr.data('template')).html();
- 						var template = Handlebars.compile(source);
- 						$ctr.append(template(res));
- 						Sling.CMS.ext['load-versions'].loaded = true;
- 						Sling.CMS.decorate($ctr.closest('.version-container'));
- 					});
- 				});
- 			}
- 		}
- 	};
- 
- 	//support links which fetch HTML and display a modal
- 	Sling.CMS.ext['fetch-modal'] = {
- 		decorate : function($ctx){
- 			$ctx.find('a.Fetch-Modal').click(function(){
- 				var $link = $(this);
- 				$link.attr('disabled', 'disabled');
- 				Sling.CMS.ui.fetchModal($link.attr('data-title'), encodeURI($link.attr('href')), $link.attr('data-path'), function(){
- 					$link.removeAttr('disabled');
- 				});
- 				return false;
- 			});
- 		}
- 	};
- 	
- 	Sling.CMS.ext['getform'] = {
- 		decorate: function($ctx){
- 			$ctx.find('.Get-Form').submit(function(){
- 				var $form = $(this);
- 				var params = $form.serialize();
- 				$form.find('.Form-Ajax__wrapper').attr('disabled', 'disabled');
- 				
- 				$($form.data('target')).load($form.attr('action') + '?' + params +'  ' + $form.data('load'), function(){
- 					$form.find('.Form-Ajax__wrapper').removeAttr('disabled');
- 					Sling.CMS.decorate($($form.data('target')));
- 				});
- 				return false;
- 			});
- 		}
- 	};
- 
- 	Sling.CMS.ext['includeconfig'] = {
- 		decorate: function($ctx){
- 			$ctx.find('.sling-cms-include-config').each(function(){
- 				var $ctr = $(this);
- 				var load = function(){
- 					var config = $($ctr.data('source')).find('option:selected').data('config');
- 					
- 					if(config){
- 						$ctr.load(config + $ctr.parents('form').attr('action'), function(){
- 							Sling.CMS.decorate($ctr.children());
- 						});
- 					}
- 				};
- 				$($ctr.data('source')).change(load);
- 				load();
- 			});
- 		}
- 	};
- 
- 	Sling.CMS.ext['handledelete'] = function(res, msg){
- 		if(window.location.pathname.indexOf(res.path) !== -1){
- 			window.top.Sling.CMS.ui.confirmMessage(msg, res.title,function(){
- 				window.location = '/cms';
- 			});
- 		} else {
- 			Sling.CMS.ext.reload(res, msg);
- 		}
- 	}
- 
- 	Sling.CMS.ext['handlemove'] = function(res, msg){
- 		var changes = res.changes[0];
- 		if(changes.type === 'moved' && window.location.pathname.indexOf(changes.argument[0]) !== -1){
- 			window.top.Sling.CMS.ui.confirmMessage(msg, res.title,function(){
- 				window.location = window.location.href.replace(changes.argument[0], changes.argument[1]);
- 			});
- 		} else {
- 			Sling.CMS.ext.reload(res, msg);
- 		}
- 	}
- 
- 	Sling.CMS.ext['namehint'] = {
- 		decorate: function($ctx){
- 			$ctx.find('.namehint').each(function(){
- 				var $nh = $(this);
- 				$nh.parents('.Form-Ajax').find('select[name="sling:resourceType"]').change(function(){
- 					var resourceType = $(this).val().split("\/");
- 					$nh.val(resourceType[resourceType.length - 1]);
- 				});
- 			});
- 		}
- 	};
- 	
- 	Sling.CMS.ext['pageproperties'] = {
- 		decorate: function($ctx){
- 			$ctx.find('.Sling-CMS__page-properties').each(function(){
- 				var $ctr = $(this);
- 				var $wrapper = $ctr.closest('.Form-Ajax__wrapper');
- 				$($ctr.data('source')).change(function(){
- 					var config = $(this).val();
- 					$ctr.load($ctr.data('path')+config, function(){
- 						var source   = $('#content-template').html();
- 						var template = Handlebars.compile(source);
- 						var updateContent = function(){
- 							if(!$wrapper.is(':disabled')){
- 								var data = Sling.CMS.utils.form2Obj($ctr.parents('form'));
- 								$('input[name=":content"]').val(template(data));
- 							}
- 						}
- 						$ctr.find('input,textarea,select').change(updateContent);
- 						$ctr.parents('form').submit(updateContent);
- 						Sling.CMS.decorate($ctr.children());
- 					});
- 				});
- 			});
- 		}
- 	};
- 
- 	Sling.CMS.ext['pathfield'] = {
- 		suggest: function(field, type, base) {
- 			var xhr;
- 			new autoComplete({
- 				minChars: 1,
- 			    selector: field,
- 			    source: function(term, response){
- 			        try {
- 			        	xhr.abort();
- 			        } catch(e){}
- 			        if(term === '/'){
- 			        	term = base;
- 			        }
- 			        xhr = $.getJSON('/bin/cms/paths', { path: term, type: type }, function(data){
- 			        	response(data);
- 			        });
- 			    }
- 			});
- 		},
- 		decorate: function($ctx){
- 			$ctx.find('input.pathfield').each(function(){
- 				var type = $(this).data('type');
- 				var base = $(this).data('base');
- 				Sling.CMS.ext.pathfield.suggest(this, type, base);
- 			});
- 		}
- 	};
- 
- 	Sling.CMS.ext['reload'] = function(res, msg) {
- 		if(window.self !== window.top){
- 			window.top.Sling.CMS.ui.confirmMessage(msg, res.title,function(){
- 				window.top.location.reload();
- 			});
- 		} else {
- 			Sling.CMS.ui.confirmMessage(msg, res.title,function(){
- 				location.reload();
- 			});
- 		}
- 	}
-  
- 	Sling.CMS.ext['repeating'] = {
- 		decorate: function($ctx){
- 			$ctx.find('.repeating').each(function(){
- 				var $rep = $(this);
- 				$rep.find('.repeating__add').click(function(){
- 					var $div = $('<div/>').html($rep.find('.repeating__template').html());
- 					Sling.CMS.decorate($div);
- 					$rep.find('.repeating__container').append($div);
- 					return false;
- 				});
- 			});
- 			$ctx.find('.repeating__remove').click(function(){
- 				var $rem = $(this);
- 				$rem.parents('.repeating__item').remove();
- 				return false;
- 			});
- 		}
- 	};
- 	
- 	Sling.CMS.ext['richtext'] = {
- 		decorate: function($ctx){
- 			$ctx.find('.richtext').summernote({
- 				toolbar: [
- 					['style', ['bold', 'italic', 'clear','strikethrough', 'superscript', 'subscript']],
- 				    ['insert', ['picture', 'link', 'table', 'hr']],
- 				    ['para', ['style','ul', 'ol', 'paragraph']],
- 				    ['misc', ['codeview', 'undo','redo','help']]
- 				],
- 				followingToolbar: false,
- 				dialogsInBody: true,
- 				height: 200,
- 			    onCreateLink: function (url) {
- 			        return url;
- 			    },
- 			    callbacks: {
- 		    		onDialogShown: function(){
- 						Sling.CMS.ext.pathfield.suggest($('.note-link-url')[0], 'content', '/content');
- 						Sling.CMS.ext.pathfield.suggest($('.note-image-url')[0], 'content', '/content');
- 		    		}
- 			    }
- 			});
- 		}
- 	};
- 	
- 	Sling.CMS.ext['searchselect'] = {
- 		decorate: function($ctx) {
- 			$ctx.find('.Search-Select-Button').click(function(evt){
- 				var $btn = $(evt.target);
- 				var $active = Sling.CMS.ext['searchbutton'].active;
- 				$active.val($btn.data('path'));
- 				$btn.closest('.Modal').remove();
- 			});
- 		}
- 	}
- 	
- 	Sling.CMS.ext['searchbutton'] = {
- 		active: null,
- 		decorate: function($ctx) {
- 			$ctx.find('.Search-Button').click(function(evt){
- 				Sling.CMS.ext['searchbutton'].active = $(evt.target).closest('.Field-Input').find('.Field-Path');
- 			});
- 		}
- 	}
- 	
- 	Sling.CMS.ext['table'] = {
- 		decorate: function($ctx) {
- 			$ctx.find('table tbody tr').click(function(el){
- 				$('.actions-target > *').appendTo('tr.is-selected .cell-actions')
- 				$('tr').removeClass('is-selected');
- 				$(this).addClass('is-selected');
- 				$(this).find('.cell-actions > *').appendTo('.actions-target')
- 			});
- 
- 			$ctx.find('table').each(function(){
- 				var sort = $(this).data('sort') !== 'false';
- 				var paginate = $(this).data('paginate') !== 'false';
- 				$(this).DataTable({
- 					sort: sort,
- 					paginate: paginate
- 				});
- 			});
- 		}
- 	};
- 
- 	Sling.CMS.ext['taxonomy'] = {
- 		decorate: function($ctx){
- 			$ctx.find('.taxonomy').each(function(){
- 				var $rep = $(this);
- 				$rep.find('.taxonomy__add').click(function(){
- 					var $span = $('<span/>').html($rep.find('.taxonomy__template').html());
- 					var val = $ctx.find('.taxonomy__field input').val();
- 					var found = false;
- 					$rep.find('.taxonomy__item input').each(function(idx, el){
- 						if($(el).val() === val){
- 							found = true;
- 						}
- 					});
- 					if(found){
- 						return false;
- 					}
- 					$span.find('input').val(val);
- 					var title = $ctx.find('option[value="'+val+'"]').text();
- 					
- 					if(title !== ''){
- 						$span.find('.taxonomy__title').text(title);
- 						Sling.CMS.decorate($span);
- 						$('.taxonomy__container').append($span);
- 						$ctx.find('.taxonomy__field input').val('');
- 					}
- 					return false;
- 				});
- 			});
- 			$ctx.find('.taxonomy__item').click(function(){
- 				$(this).remove();
- 				return false;
- 			});
- 		}
- 	};
- 	
- 	Sling.CMS.ext['toggle-hidden'] = {
- 		decorate: function($ctx){
- 			$ctx.find('.toggle-hidden').click(function(){
- 				$($(this).data('target')).toggleClass('is-hidden');
- 			});
- 		}
- 	};
- 	
- 	Sling.CMS.ext['toggle-value'] = {
- 		decorate: function($ctx) {
- 			$ctx.find('.toggle-value').each(function(){
- 				var $tog = $(this);
- 				$('input[name="'+$tog.data('toggle-source')+'"], select[name="'+$tog.data('toggle-source')+'"]').change(function(){
- 					if($(this).val() !== $tog.data('toggle-value')){
- 						$tog.addClass('is-hidden');
- 					} else {
- 						$tog.removeClass('is-hidden');
- 					}
- 				});
- 			})
- 		}
- 	};
- 	
- 	Sling.CMS.ext['file-upload'] = {
- 		decorate: function($ctx) {
- 			$ctx.find('.file').on('change', "input", function(){
- 				var node = $(this);
- 				node.parent().find('.file-name').text(this.files[0].name);
- 			});
- 		}
- 	};
- 
- 	$(document).ready(function() {
- 		Sling.CMS.init();
- 	});
 -        ext: {},
 -        decorate: function($ctx){
 -            for (var key in Sling.CMS.ext) {
 -                if(typeof Sling.CMS.ext[key].decorate == 'function'){
 -                    console.log('Invoking decorate for '+key);
 -                    Sling.CMS.ext[key].decorate($ctx);
++  ext : {},
++  decorate : function($ctx) {
++    for ( var key in Sling.CMS.ext) {
++      if (typeof Sling.CMS.ext[key].decorate == 'function') {
++        console.log('Invoking decorate for ' + key);
++        Sling.CMS.ext[key].decorate($ctx);
++      }
++    }
++  },
++  init : function() {
++    for ( var key in Sling.CMS.ext) {
++      if (typeof Sling.CMS.ext[key].init == 'function') {
++        console.log('Invoking init for ' + key);
++        Sling.CMS.ext[key].init();
++      }
++    }
++    Sling.CMS.decorate($(document));
++  },
++  ui : {
++    confirmMessage : function(title, message, complete) {
++      var $modal = $('<div class="modal"><div class="modal-background"></div><div class="modal-card is-draggable"><header class="modal-card-head"><p class="modal-card-title">'
++          + title
++          + '</p></header><section class="modal-card-body">'
++          + message
++          + '</section><footer class="modal-card-foot"><button type="button" class="close-modal button is-primary">OK</button></footer></div>');
++      $('body').append($modal);
++      Sling.CMS.decorate($modal);
++      $modal.addClass('is-active');
++      $modal.find('.delete,.close-modal').click(function() {
++        $modal.css('display', 'none').remove();
++        complete();
++      });
++      return $modal;
++    },
++    fetchModal : function(title, link, path, complete) {
++      var $modal = $('<div class="modal"><div class="modal-background"></div><div class="modal-card is-draggable"><header class="modal-card-head"><p class="modal-card-title">'
++          + title
++          + '</p></header><section class="modal-card-body"></section><footer class="modal-card-foot"><a class="close-modal is-danger button" aria-label="close">Cancel</a></footer></div>');
++      $('body').append($modal);
++      $modal.find('.modal-card-body').load(link, function() {
++        var submitButton = $modal.find('button:submit');
++        var closeButton = $modal.find('.close-modal');
++        submitButton.insertBefore(closeButton);
++        submitButton.on("click", function() {
++          $modal.find('form').submit();
++        })
++        $modal.addClass('is-active');
++        closeButton.click(function() {
++          $modal.css('display', 'none').remove();
++          return false;
++        });
++        Sling.CMS.decorate($modal);
++        complete();
++      });
++      return $modal;
++    }
++  },
++  utils : {
++    form2Obj : function($form) {
++      var data = {};
++      $.map($form.serializeArray(), function(n, i) {
++        data[n['name']] = n['value'];
++      });
++      return data;
++    }
++  }
++};
++
++Sling.CMS.ext['ajaxform'] = {
++  decorate : function($ctx) {
++    $ctx
++        .find('.Form-Ajax')
++        .submit(
++            function() {
++
++              var $form = $(this);
++              var jcrcontent = false;
++              $form.find('input,select,textarea').each(function(idx, inp) {
++                if (inp.name.indexOf('jcr:content') != -1) {
++                  jcrcontent = true;
+                 }
 -            }
 -        },
 -        init: function(){
 -            for (var key in Sling.CMS.ext) {
 -                if(typeof Sling.CMS.ext[key].init == 'function'){
 -                    console.log('Invoking init for '+key);
 -                    Sling.CMS.ext[key].init();
++              });
++              if ($form.data('addDate')
++                  && $form.find('input[name="jcr:content/jcr:lastModified"]').length == 0) {
++                if (jcrcontent) {
++                  $form
++                      .append('<input type="hidden" name="jcr:content/jcr:lastModified" />');
++                  $form
++                      .append('<input type="hidden" name="jcr:content/jcr:lastModifiedBy" />');
++                  $form
++                      .append('<input type="hidden" name="jcr:content/jcr:created" />');
++                  $form
++                      .append('<input type="hidden" name="jcr:content/jcr:createdBy" />');
++                } else {
++                  $form
++                      .append('<input type="hidden" name="jcr:lastModified" />');
++                  $form
++                      .append('<input type="hidden" name="jcr:lastModifiedBy" />');
++                  $form.append('<input type="hidden" name="jcr:created" />');
++                  $form.append('<input type="hidden" name="jcr:createdBy" />');
+                 }
 -            }
 -            Sling.CMS.decorate($(document));
 -        },
 -        ui: {
 -            confirmMessage: function(title, message, complete){
 -                var $modal = $('<div class="modal"><div class="modal-background"></div><div class="modal-card is-draggable"><header class="modal-card-head"><p class="modal-card-title">'+title+'</p><button class="delete" aria-label="close"></button></header><section class="modal-card-body">'+message+'</section><footer class="modal-card-foot"><button type="button" class="close-modal button is-primary">OK</button></footer></div>');
 -                $('body').append($modal);
 -                Sling.CMS.decorate($modal);
 -                $modal.addClass('is-active');
 -                $modal.find('.delete,.close-modal').click(function(){
 -                    $modal.css('display','none').remove();
 -                    complete();
 -                });
 -                return $modal;
 -            },
 -            fetchModal: function(title, link, path, complete){
 -                var $modal = $('<div class="modal"><div class="modal-background"></div><div class="modal-card is-draggable"><header class="modal-card-head"><p class="modal-card-title">'+title+'</p><button class="delete" aria-label="close"></button></header><section class="modal-card-body"></section><footer class="modal-card-foot"></footer></div>');
 -                $('body').append($modal);
 -                $modal.find('.modal-card-body').load(link + " " +path,function(){
 -                    $modal.addClass('is-active');
 -                    $modal.find('.delete,.close-modal').click(function(){
 -                        $modal.css('display','none').remove();
 -                        return false;
++              }
++              var callback = $form.data('callback');
++              var data = new FormData(this);
++              $form.find('.Form-Ajax__wrapper').attr('disabled', 'disabled');
++              $.ajax({
++                url : $form.attr('action'),
++                type : 'POST',
++                data : data,
++                processData : false,
++                contentType : false,
++                dataType : 'json',
++                success : function(res, msg) {
++                  if (callback && Sling.CMS.ext[callback]) {
++                    Sling.CMS.ext[callback](res, msg);
++                  } else {
++                    Sling.CMS.ext.reload(res, msg);
++                  }
++                },
++                error : function(xhr, msg, err) {
++                  if (window.self !== window.top) {
++                    window.top.Sling.CMS.ui.confirmMessage(msg, err,
++                        function() {
++                          $form.find('.Form-Ajax__wrapper').removeAttr(
++                              'disabled');
++                        });
++                  } else {
++                    Sling.CMS.ui.confirmMessage(msg, err, function() {
++                      $form.find('.Form-Ajax__wrapper').removeAttr('disabled');
+                     });
 -                    Sling.CMS.decorate($modal);
 -                    complete();
 -                });
 -                return $modal;
 -            }
 -        },
 -        utils: {
 -            form2Obj: function ($form){
 -                var data = {};
 -                $.map($form.serializeArray(), function(n, i){
 -                    data[n['name']] = n['value'];
 -                });
 -                return data;
 -            }
 -        }
 -    };
 -
 -    Sling.CMS.ext['ajaxform'] = {
 -        decorate: function($ctx){
 -            $ctx.find('.Form-Ajax').submit(function(){
 -                
 -                var $form = $(this);
 -                var jcrcontent = false;
 -                $form.find('input,select,textarea').each(function(idx,inp){
 -                    if(inp.name.indexOf('jcr:content') != -1){
 -                        jcrcontent = true;
 -                    }
 -                });
 -                if($form.data('addDate') && $form.find('input[name="jcr:content/jcr:lastModified"]').length == 0){
 -                    if(jcrcontent){
 -                        $form.append('<input type="hidden" name="jcr:content/jcr:lastModified" />');
 -                        $form.append('<input type="hidden" name="jcr:content/jcr:lastModifiedBy" />');
 -                        $form.append('<input type="hidden" name="jcr:content/jcr:created" />');
 -                        $form.append('<input type="hidden" name="jcr:content/jcr:createdBy" />');
 -                    } else {
 -                        $form.append('<input type="hidden" name="jcr:lastModified" />');
 -                        $form.append('<input type="hidden" name="jcr:lastModifiedBy" />');
 -                        $form.append('<input type="hidden" name="jcr:created" />');
 -                        $form.append('<input type="hidden" name="jcr:createdBy" />');
 -                    }
++                  }
+                 }
 -                var callback = $form.data('callback');
 -                var data = new FormData(this);
 -                $form.find('.Form-Ajax__wrapper').attr('disabled', 'disabled');
 -                $.ajax({
 -                    url: $form.attr('action'),
 -                    type: 'POST',
 -                    data: data,
 -                    processData: false,
 -                    contentType: false,
 -                    dataType: 'json',
 -                    success: function(res,msg){
 -                        if (callback && Sling.CMS.ext[callback]){
 -                            Sling.CMS.ext[callback](res, msg);
 -                        } else {
 -                            Sling.CMS.ext.reload(res, msg);
 -                        }
 -                    },
 -                    error: function(xhr, msg, err){
 -                        if(window.self !== window.top){
 -                            window.top.Sling.CMS.ui.confirmMessage(msg, err,function(){
 -                                $form.find('.Form-Ajax__wrapper').removeAttr('disabled');
 -                            });
 -                        } else {
 -                            Sling.CMS.ui.confirmMessage(msg, err,function(){
 -                                $form.find('.Form-Ajax__wrapper').removeAttr('disabled');
 -                            });
 -                        }
 -                    }
 -                });
 -                return false;
++              });
++              return false;
+             });
 -        }
 -    };
++  }
++};
+ 
 -    Sling.CMS.ext['draggable'] = {
 -        decorate: function($ctx) {
 -            var draggable = function(){
 -                var element = this;
 -                var mouseX;
 -                var mouseY;
 -                var mouseDown = false;
 -                var elementX = 0;
 -                var elementY = 0;
 -
 -                  // mouse button down over the element
 -                element.addEventListener('mousedown', function(evt){
 -                    if(document.querySelector('.modal-card-body').contains(evt.target)){
 -                        return;
 -                    }
 -                    mouseX = evt.clientX;
 -                    mouseY = evt.clientY;
 -                    mouseDown = true;
 -                });
 -                
 -                var moveComplete = function(){
 -                    mouseDown = false;
 -                    elementX = parseInt(element.style.left) || 0;
 -                    elementY = parseInt(element.style.top) || 0;
 -                    return false;
 -                }
 -                
 -                element.addEventListener('mouseup', moveComplete);
 -                document.addEventListener('mouseout', moveComplete);
 -                
 -                document.addEventListener('mousemove', function(event) {
 -                    if (!mouseDown) {
 -                        return;
 -                    }
 -                    var deltaX = event.clientX - mouseX;
 -                    var deltaY = event.clientY - mouseY;
 -                    element.style.left = elementX + deltaX + 'px';
 -                    element.style.top = elementY + deltaY + 'px';
 -                    return false;
 -                });
 -                
 -            };
 -            if($ctx.is('.is-draggable')){
 -                $ctx.each(draggable)
 -            }
 -            $ctx.find('.is-draggable').each(draggable);
 -        }
 -    };
 -    
 -    Sling.CMS.ext['load-versions'] = {
 -        loaded: false,
 -        decorate: function($ctx) {
 -            if(!Sling.CMS.ext['load-versions'].loaded){
 -                $ctx.find('.load-versions').each(function(){
 -                    var $ctr = $(this);
 -                    var $table = $ctr.closest('.table');
 -                    $.getJSON($ctr.data('url'),function(res){
 -                        $table.dataTable().api().destroy();
 -                        var source   = $('#'+$ctr.data('template')).html();
 -                        var template = Handlebars.compile(source);
 -                        $ctr.append(template(res));
 -                        Sling.CMS.ext['load-versions'].loaded = true;
 -                        Sling.CMS.decorate($ctr.closest('.version-container'));
 -                    });
 -                });
 -            }
 -        }
 -    };
++Sling.CMS.ext['draggable'] = {
++  decorate : function($ctx) {
++    var draggable = function() {
++      var element = this;
++      var mouseX;
++      var mouseY;
++      var mouseDown = false;
++      var elementX = 0;
++      var elementY = 0;
+ 
 -    //support links which fetch HTML and display a modal
 -    Sling.CMS.ext['fetch-modal'] = {
 -        decorate : function($ctx){
 -            $ctx.find('a.Fetch-Modal').click(function(){
 -                var $link = $(this);
 -                $link.attr('disabled', 'disabled');
 -                Sling.CMS.ui.fetchModal($link.attr('data-title'), encodeURI($link.attr('href')), $link.attr('data-path'), function(){
 -                    $link.removeAttr('disabled');
 -                });
 -                return false;
 -            });
 -        }
 -    };
 -    
 -    Sling.CMS.ext['getform'] = {
 -        decorate: function($ctx){
 -            $ctx.find('.Get-Form').submit(function(){
 -                var $form = $(this);
 -                var params = $form.serialize();
 -                $form.find('.Form-Ajax__wrapper').attr('disabled', 'disabled');
 -                
 -                $($form.data('target')).load($form.attr('action') + '?' + params +'  ' + $form.data('load'), function(){
 -                    $form.find('.Form-Ajax__wrapper').removeAttr('disabled');
 -                    Sling.CMS.decorate($($form.data('target')));
 -                });
 -                return false;
 -            });
++      // mouse button down over the element
++      element.addEventListener('mousedown', function(evt) {
++        if (document.querySelector('.modal-card-body').contains(evt.target)) {
++          return;
+         }
 -    };
++        mouseX = evt.clientX;
++        mouseY = evt.clientY;
++        mouseDown = true;
++      });
+ 
 -    Sling.CMS.ext['includeconfig'] = {
 -        decorate: function($ctx){
 -            $ctx.find('.sling-cms-include-config').each(function(){
 -                var $ctr = $(this);
 -                var load = function(){
 -                    var config = $($ctr.data('source')).find('option:selected').data('config');
 -                    
 -                    if(config){
 -                        $ctr.load(config + $ctr.parents('form').attr('action'), function(){
 -                            Sling.CMS.decorate($ctr.children());
 -                        });
 -                    }
 -                };
 -                $($ctr.data('source')).change(load);
 -                load();
 -            });
 -        }
 -    };
++      var moveComplete = function() {
++        mouseDown = false;
++        elementX = parseInt(element.style.left) || 0;
++        elementY = parseInt(element.style.top) || 0;
++        return false;
++      }
+ 
 -    Sling.CMS.ext['handledelete'] = function(res, msg){
 -        if(window.location.pathname.indexOf(res.path) !== -1){
 -            window.top.Sling.CMS.ui.confirmMessage(msg, res.title,function(){
 -                window.location = '/cms';
 -            });
 -        } else {
 -            Sling.CMS.ext.reload(res, msg);
 -        }
 -    }
++      element.addEventListener('mouseup', moveComplete);
++      document.addEventListener('mouseout', moveComplete);
+ 
 -    Sling.CMS.ext['handlemove'] = function(res, msg){
 -        var changes = res.changes[0];
 -        if(changes.type === 'moved' && window.location.pathname.indexOf(changes.argument[0]) !== -1){
 -            window.top.Sling.CMS.ui.confirmMessage(msg, res.title,function(){
 -                window.location = window.location.href.replace(changes.argument[0], changes.argument[1]);
 -            });
 -        } else {
 -            Sling.CMS.ext.reload(res, msg);
++      document.addEventListener('mousemove', function(event) {
++        if (!mouseDown) {
++          return;
+         }
++        var deltaX = event.clientX - mouseX;
++        var deltaY = event.clientY - mouseY;
++        element.style.left = elementX + deltaX + 'px';
++        element.style.top = elementY + deltaY + 'px';
++        return false;
++      });
++
++    };
++    if ($ctx.is('.is-draggable')) {
++      $ctx.each(draggable)
+     }
++    $ctx.find('.is-draggable').each(draggable);
++  }
++};
+ 
 -    Sling.CMS.ext['handleugc'] = function(res, msg){
 -		Sling.CMS.ui.confirmMessage(msg, res.title,function(){
 -			window.location = '/cms/usergenerated/content.html'+res.parentLocation;
 -		});
++Sling.CMS.ext['load-versions'] = {
++  loaded : false,
++  decorate : function($ctx) {
++    if (!Sling.CMS.ext['load-versions'].loaded) {
++      $ctx.find('.load-versions').each(function() {
++        var $ctr = $(this);
++        var $table = $ctr.closest('.table');
++        $.getJSON($ctr.data('url'), function(res) {
++          $table.dataTable().api().destroy();
++          var source = $('#' + $ctr.data('template')).html();
++          var template = Handlebars.compile(source);
++          $ctr.append(template(res));
++          Sling.CMS.ext['load-versions'].loaded = true;
++          Sling.CMS.decorate($ctr.closest('.version-container'));
++        });
++      });
+     }
++  }
++};
+ 
 -    Sling.CMS.ext['namehint'] = {
 -        decorate: function($ctx){
 -            $ctx.find('.namehint').each(function(){
 -                var $nh = $(this);
 -                $nh.parents('.Form-Ajax').find('select[name="sling:resourceType"]').change(function(){
 -                    var resourceType = $(this).val().split("\/");
 -                    $nh.val(resourceType[resourceType.length - 1]);
 -                });
 -            });
 -        }
 -    };
 -    
 -    Sling.CMS.ext['pageproperties'] = {
 -        decorate: function($ctx){
 -            $ctx.find('.Sling-CMS__page-properties').each(function(){
 -                var $ctr = $(this);
 -                var $wrapper = $ctr.closest('.Form-Ajax__wrapper');
 -                $($ctr.data('source')).change(function(){
 -                    var config = $(this).val();
 -                    $ctr.load($ctr.data('path')+config, function(){
 -                        var source   = $('#content-template').html();
 -                        var template = Handlebars.compile(source);
 -                        var updateContent = function(){
 -                            if(!$wrapper.is(':disabled')){
 -                                var data = Sling.CMS.utils.form2Obj($ctr.parents('form'));
 -                                $('input[name=":content"]').val(template(data));
 -                            }
 -                        }
 -                        $ctr.find('input,textarea,select').change(updateContent);
 -                        $ctr.parents('form').submit(updateContent);
 -                        Sling.CMS.decorate($ctr.children());
 -                    });
 -                });
 -            });
 -        }
 -    };
++// support links which fetch HTML and display a modal
++Sling.CMS.ext['fetch-modal'] = {
++  decorate : function($ctx) {
++    $ctx.find('a.Fetch-Modal').click(
++        function() {
++          var $link = $(this);
++          $link.attr('disabled', 'disabled');
++          Sling.CMS.ui.fetchModal($link.attr('data-title'), encodeURI($link
++              .attr('href')), $link.attr('data-path'), function() {
++            $link.removeAttr('disabled');
++          });
++          return false;
++        });
++  }
++};
+ 
 -    Sling.CMS.ext['pathfield'] = {
 -        suggest: function(field, type, base) {
 -            var xhr;
 -            new autoComplete({
 -                minChars: 1,
 -                selector: field,
 -                source: function(term, response){
 -                    try {
 -                        xhr.abort();
 -                    } catch(e){}
 -                    if(term === '/'){
 -                        term = base;
 -                    }
 -                    xhr = $.getJSON('/bin/cms/paths', { path: term, type: type }, function(data){
 -                        response(data);
 -                    });
 -                }
 -            });
 -        },
 -        decorate: function($ctx){
 -            $ctx.find('input.pathfield').each(function(){
 -                var type = $(this).data('type');
 -                var base = $(this).data('base');
 -                Sling.CMS.ext.pathfield.suggest(this, type, base);
 -            });
 -        }
 -    };
++Sling.CMS.ext['getform'] = {
++  decorate : function($ctx) {
++    $ctx.find('.Get-Form').submit(
++        function() {
++          var $form = $(this);
++          var params = $form.serialize();
++          $form.find('.Form-Ajax__wrapper').attr('disabled', 'disabled');
+ 
 -    Sling.CMS.ext['reload'] = function(res, msg) {
 -        if(window.self !== window.top){
 -            window.top.Sling.CMS.ui.confirmMessage(msg, res.title,function(){
 -                window.top.location.reload();
 -            });
 -        } else {
 -            Sling.CMS.ui.confirmMessage(msg, res.title,function(){
 -                location.reload();
 -            });
 -        }
 -    }
 - 
 -    Sling.CMS.ext['repeating'] = {
 -        decorate: function($ctx){
 -            $ctx.find('.repeating').each(function(){
 -                var $rep = $(this);
 -                $rep.find('.repeating__add').click(function(){
 -                    var $div = $('<div/>').html($rep.find('.repeating__template').html());
 -                    Sling.CMS.decorate($div);
 -                    $rep.find('.repeating__container').append($div);
 -                    return false;
 -                });
 -            });
 -            $ctx.find('.repeating__remove').click(function(){
 -                var $rem = $(this);
 -                $rem.parents('.repeating__item').remove();
 -                return false;
 -            });
 -        }
 -    };
 -    
 -    Sling.CMS.ext['richtext'] = {
 -        decorate: function($ctx){
 -            $ctx.find('.richtext').summernote({
 -                toolbar: [
 -                    ['style', ['bold', 'italic', 'clear','strikethrough', 'superscript', 'subscript']],
 -                    ['insert', ['picture', 'link', 'table', 'hr']],
 -                    ['para', ['style','ul', 'ol', 'paragraph']],
 -                    ['misc', ['codeview', 'undo','redo','help']]
 -                ],
 -                followingToolbar: false,
 -                dialogsInBody: true,
 -                height: 200,
 -                onCreateLink: function (url) {
 -                    return url;
 -                },
 -                callbacks: {
 -                    onDialogShown: function(){
 -                        Sling.CMS.ext.pathfield.suggest($('.note-link-url')[0], 'content', '/content');
 -                        Sling.CMS.ext.pathfield.suggest($('.note-image-url')[0], 'content', '/content');
 -                    }
 -                }
 -            });
 -        }
 -    };
 -    
 -    Sling.CMS.ext['searchselect'] = {
 -        decorate: function($ctx) {
 -            $ctx.find('.Search-Select-Button').click(function(evt){
 -                var $btn = $(evt.target);
 -                var $active = Sling.CMS.ext['searchbutton'].active;
 -                $active.val($btn.data('path'));
 -                $btn.closest('.Modal').remove();
 -            });
 -        }
 -    }
 -    
 -    Sling.CMS.ext['searchbutton'] = {
 -        active: null,
 -        decorate: function($ctx) {
 -            $ctx.find('.Search-Button').click(function(evt){
 -                Sling.CMS.ext['searchbutton'].active = $(evt.target).closest('.Field-Input').find('.Field-Path');
 -            });
 -        }
 -    }
++          $($form.data('target')).load(
++              $form.attr('action') + '?' + params + '  ' + $form.data('load'),
++              function() {
++                $form.find('.Form-Ajax__wrapper').removeAttr('disabled');
++                Sling.CMS.decorate($($form.data('target')));
++              });
++          return false;
++        });
++  }
++};
+ 
 -    Sling.CMS.ext['suffix-form'] = {
 -        init: function() {
 -            $('.suffix-form').submit(function(){
 -                var suffix = $(this).find('input[name=suffix]').val();
 -                var path = $(this).attr('action');
 -                window.location = path + suffix;
 -                return false;
 -            });
 -        }
 -    }
 -    
 -    Sling.CMS.ext['table'] = {
 -        decorate: function($ctx) {
 -            $ctx.find('table tbody tr').click(function(el){
 -                $('.actions-target > *').appendTo('tr.is-selected .cell-actions')
 -                $('tr').removeClass('is-selected');
 -                $(this).addClass('is-selected');
 -                $(this).find('.cell-actions > *').appendTo('.actions-target')
 -            });
++Sling.CMS.ext['includeconfig'] = {
++  decorate : function($ctx) {
++    $ctx.find('.sling-cms-include-config').each(
++        function() {
++          var $ctr = $(this);
++          var load = function() {
++            var config = $($ctr.data('source')).find('option:selected').data(
++                'config');
+ 
 -            $ctx.find('table').each(function(){
 -                var sort = $(this).data('sort') !== 'false';
 -                var paginate = $(this).data('paginate') !== 'false';
 -                $(this).DataTable({
 -                    sort: sort,
 -                    paginate: paginate
 -                });
 -            });
 -        }
 -    };
++            if (config) {
++              $ctr.load(config + $ctr.parents('form').attr('action'),
++                  function() {
++                    Sling.CMS.decorate($ctr.children());
++                  });
++            }
++          };
++          $($ctr.data('source')).change(load);
++          load();
++        });
++  }
++};
+ 
 -    Sling.CMS.ext['taxonomy'] = {
 -        decorate: function($ctx){
 -            $ctx.find('.taxonomy').each(function(){
 -                var $rep = $(this);
 -                $rep.find('.taxonomy__add').click(function(){
 -                    var $span = $('<span/>').html($rep.find('.taxonomy__template').html());
 -                    var val = $ctx.find('.taxonomy__field input').val();
 -                    var found = false;
 -                    $rep.find('.taxonomy__item input').each(function(idx, el){
 -                        if($(el).val() === val){
 -                            found = true;
 -                        }
 -                    });
 -                    if(found){
 -                        return false;
 -                    }
 -                    $span.find('input').val(val);
 -                    var title = $ctx.find('option[value="'+val+'"]').text();
 -                    
 -                    if(title !== ''){
 -                        $span.find('.taxonomy__title').text(title);
 -                        Sling.CMS.decorate($span);
 -                        $('.taxonomy__container').append($span);
 -                        $ctx.find('.taxonomy__field input').val('');
 -                    }
 -                    return false;
 -                });
 -            });
 -            $ctx.find('.taxonomy__item').click(function(){
 -                $(this).remove();
 -                return false;
 -            });
++Sling.CMS.ext['handledelete'] = function(res, msg) {
++  if (window.location.pathname.indexOf(res.path) !== -1) {
++    window.top.Sling.CMS.ui.confirmMessage(msg, res.title, function() {
++      window.location = '/cms';
++    });
++  } else {
++    Sling.CMS.ext.reload(res, msg);
++  }
++}
++
++Sling.CMS.ext['handlemove'] = function(res, msg) {
++  var changes = res.changes[0];
++  if (changes.type === 'moved'
++      && window.location.pathname.indexOf(changes.argument[0]) !== -1) {
++    window.top.Sling.CMS.ui.confirmMessage(msg, res.title, function() {
++      window.location = window.location.href.replace(changes.argument[0],
++          changes.argument[1]);
++    });
++  } else {
++    Sling.CMS.ext.reload(res, msg);
++  }
++}
++
++Sling.CMS.ext['handleugc'] = function(res, msg) {
++  Sling.CMS.ui.confirmMessage(msg, res.title, function() {
++    window.location = '/cms/usergenerated/content.html' + res.parentLocation;
++  });
++}
++
++Sling.CMS.ext['namehint'] = {
++  decorate : function($ctx) {
++    $ctx.find('.namehint').each(
++        function() {
++          var $nh = $(this);
++          $nh.parents('.Form-Ajax').find('select[name="sling:resourceType"]')
++              .change(function() {
++                var resourceType = $(this).val().split("\/");
++                $nh.val(resourceType[resourceType.length - 1]);
++              });
++        });
++  }
++};
++
++Sling.CMS.ext['pageproperties'] = {
++  decorate : function($ctx) {
++    $ctx.find('.Sling-CMS__page-properties').each(function() {
++      var $ctr = $(this);
++      var $wrapper = $ctr.closest('.Form-Ajax__wrapper');
++      $($ctr.data('source')).change(function() {
++        var config = $(this).val();
++        $ctr.load($ctr.data('path') + config, function() {
++          var source = $('#content-template').html();
++          var template = Handlebars.compile(source);
++          var updateContent = function() {
++            if (!$wrapper.is(':disabled')) {
++              var data = Sling.CMS.utils.form2Obj($ctr.parents('form'));
++              $('input[name=":content"]').val(template(data));
++            }
++          }
++          $ctr.find('input,textarea,select').change(updateContent);
++          $ctr.parents('form').submit(updateContent);
++          Sling.CMS.decorate($ctr.children());
++        });
++      });
++    });
++  }
++};
++
++Sling.CMS.ext['pathfield'] = {
++  suggest : function(field, type, base) {
++    var xhr;
++    new autoComplete({
++      minChars : 1,
++      selector : field,
++      source : function(term, response) {
++        try {
++          xhr.abort();
++        } catch (e) {
+         }
 -    };
 -    
 -    Sling.CMS.ext['toggle-hidden'] = {
 -        decorate: function($ctx){
 -            $ctx.find('.toggle-hidden').click(function(){
 -                $($(this).data('target')).toggleClass('is-hidden');
 -            });
++        if (term === '/') {
++          term = base;
+         }
 -    };
 -    
 -    Sling.CMS.ext['toggle-value'] = {
 -        decorate: function($ctx) {
 -            $ctx.find('.toggle-value').each(function(){
 -                var $tog = $(this);
 -                $('input[name="'+$tog.data('toggle-source')+'"], select[name="'+$tog.data('toggle-source')+'"]').change(function(){
 -                    if($(this).val() !== $tog.data('toggle-value')){
 -                        $tog.addClass('is-hidden');
 -                    } else {
 -                        $tog.removeClass('is-hidden');
 -                    }
 -                });
 -            })
++        xhr = $.getJSON('/bin/cms/paths', {
++          path : term,
++          type : type
++        }, function(data) {
++          response(data);
++        });
++      }
++    });
++  },
++  decorate : function($ctx) {
++    $ctx.find('input.pathfield').each(function() {
++      var type = $(this).data('type');
++      var base = $(this).data('base');
++      Sling.CMS.ext.pathfield.suggest(this, type, base);
++    });
++  }
++};
++
++Sling.CMS.ext['reload'] = function(res, msg) {
++  if (window.self !== window.top) {
++    window.top.Sling.CMS.ui.confirmMessage(msg, res.title, function() {
++      window.top.location.reload();
++    });
++  } else {
++    Sling.CMS.ui.confirmMessage(msg, res.title, function() {
++      location.reload();
++    });
++  }
++}
++
++Sling.CMS.ext['repeating'] = {
++  decorate : function($ctx) {
++    $ctx.find('.repeating').each(function() {
++      var $rep = $(this);
++      $rep.find('.repeating__add').click(function() {
++        var $div = $('<div/>').html($rep.find('.repeating__template').html());
++        Sling.CMS.decorate($div);
++        $rep.find('.repeating__container').append($div);
++        return false;
++      });
++    });
++    $ctx.find('.repeating__remove').click(function() {
++      var $rem = $(this);
++      $rem.parents('.repeating__item').remove();
++      return false;
++    });
++  }
++};
++
++Sling.CMS.ext['richtext'] = {
++  decorate : function($ctx) {
++    $ctx.find('.richtext').summernote(
++        {
++          toolbar : [
++              [
++                  'style',
++                  [ 'bold', 'italic', 'clear', 'strikethrough', 'superscript',
++                      'subscript' ] ],
++              [ 'insert', [ 'picture', 'link', 'table', 'hr' ] ],
++              [ 'para', [ 'style', 'ul', 'ol', 'paragraph' ] ],
++              [ 'misc', [ 'codeview', 'undo', 'redo', 'help' ] ] ],
++          followingToolbar : false,
++          dialogsInBody : true,
++          height : 200,
++          onCreateLink : function(url) {
++            return url;
++          },
++          callbacks : {
++            onDialogShown : function() {
++              Sling.CMS.ext.pathfield.suggest($('.note-link-url')[0],
++                  'content', '/content');
++              Sling.CMS.ext.pathfield.suggest($('.note-image-url')[0],
++                  'content', '/content');
++            }
++          }
++        });
++  }
++};
++
++Sling.CMS.ext['searchselect'] = {
++  decorate : function($ctx) {
++    $ctx.find('.Search-Select-Button').click(function(evt) {
++      var $btn = $(evt.target);
++      var $active = Sling.CMS.ext['searchbutton'].active;
++      $active.val($btn.data('path'));
++      $btn.closest('.Modal').remove();
++    });
++  }
++}
++
++Sling.CMS.ext['searchbutton'] = {
++  active : null,
++  decorate : function($ctx) {
++    $ctx.find('.Search-Button').click(
++        function(evt) {
++          Sling.CMS.ext['searchbutton'].active = $(evt.target).closest(
++              '.Field-Input').find('.Field-Path');
++        });
++  }
++}
++
++Sling.CMS.ext['suffix-form'] = {
++  init : function() {
++    $('.suffix-form').submit(function() {
++      var suffix = $(this).find('input[name=suffix]').val();
++      var path = $(this).attr('action');
++      window.location = path + suffix;
++      return false;
++    });
++  }
++}
++
++Sling.CMS.ext['table'] = {
++  decorate : function($ctx) {
++    $ctx.find('table tbody tr').click(function(el) {
++      $('.actions-target > *').appendTo('tr.is-selected .cell-actions')
++      $('tr').removeClass('is-selected');
++      $(this).addClass('is-selected');
++      $(this).find('.cell-actions > *').appendTo('.actions-target')
++    });
++
++    $ctx.find('table').each(function() {
++      var sort = $(this).data('sort') !== 'false';
++      var paginate = $(this).data('paginate') !== 'false';
++      $(this).DataTable({
++        sort : sort,
++        paginate : paginate
++      });
++    });
++  }
++};
++
++Sling.CMS.ext['taxonomy'] = {
++  decorate : function($ctx) {
++    $ctx.find('.taxonomy').each(function() {
++      var $rep = $(this);
++      $rep.find('.taxonomy__add').click(function() {
++        var $span = $('<span/>').html($rep.find('.taxonomy__template').html());
++        var val = $ctx.find('.taxonomy__field input').val();
++        var found = false;
++        $rep.find('.taxonomy__item input').each(function(idx, el) {
++          if ($(el).val() === val) {
++            found = true;
++          }
++        });
++        if (found) {
++          return false;
+         }
 -    };
 -    
 -    Sling.CMS.ext['file-upload'] = {
 -        decorate: function($ctx) {
 -            $ctx.find('.file').on('change', "input", function(){
 -                var node = $(this);
 -                node.parent().find('.file-name').text(this.files[0].name);
 -            });
++        $span.find('input').val(val);
++        var title = $ctx.find('option[value="' + val + '"]').text();
++
++        if (title !== '') {
++          $span.find('.taxonomy__title').text(title);
++          Sling.CMS.decorate($span);
++          $('.taxonomy__container').append($span);
++          $ctx.find('.taxonomy__field input').val('');
+         }
 -    };
++        return false;
++      });
++    });
++    $ctx.find('.taxonomy__item').click(function() {
++      $(this).remove();
++      return false;
++    });
++  }
++};
+ 
 -    $(document).ready(function() {
 -        Sling.CMS.init();
++Sling.CMS.ext['toggle-hidden'] = {
++  decorate : function($ctx) {
++    $ctx.find('.toggle-hidden').click(function() {
++      $($(this).data('target')).toggleClass('is-hidden');
+     });
++  }
++};
++
++Sling.CMS.ext['toggle-value'] = {
++  decorate : function($ctx) {
++    $ctx.find('.toggle-value').each(
++        function() {
++          var $tog = $(this);
++          $(
++              'input[name="' + $tog.data('toggle-source') + '"], select[name="'
++                  + $tog.data('toggle-source') + '"]').change(function() {
++            if ($(this).val() !== $tog.data('toggle-value')) {
++              $tog.addClass('is-hidden');
++            } else {
++              $tog.removeClass('is-hidden');
++            }
++          });
++        })
++  }
++};
++
++Sling.CMS.ext['file-upload'] = {
++  decorate : function($ctx) {
++    $ctx.find('.file').on('change', "input", function() {
++      var node = $(this);
++      node.parent().find('.file-name').text(this.files[0].name);
++    });
++  }
++};
++
++$(document).ready(function() {
++  Sling.CMS.init();
++});
diff --cc ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json
index fa03c4a,d8bce41..2e9aa72
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json
@@@ -58,6 -73,11 +58,13 @@@
                  "title": "Tools",
                  "links": {
                      "jcr:primaryType": "nt:unstructured",
++                "links": {
++                    "jcr:primaryType": "nt:unstructured",
+                     "bulkreplace": {
+                         "jcr:primaryType": "nt:unstructured",
+                         "link": "/cms/admin/bulkreplace.html",
+                         "text": "Bulk Replace"
+                     },
                      "contentpackages": {
                          "jcr:primaryType": "nt:unstructured",
                          "link": "/bin/packages.html",


[sling-org-apache-sling-app-cms] 15/17: Merge remote-tracking branch 'origin/master' into SLING-7900

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

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

commit 4d532b2777d9d9efdbf39edbf1704f8d1c66b61d
Merge: 9dc63c1 7fa94f7
Author: JE Bailey <ja...@sas.com>
AuthorDate: Mon Oct 1 13:15:26 2018 -0400

    Merge remote-tracking branch 'origin/master' into SLING-7900
    
    Conflicts:
    	ui/src/main/resources/jcr_root/conf/global.json

 docs/configure-site.md                             |   6 +-
 ui/src/main/resources/jcr_root/conf/global.json    |   2 +-
 .../components/editor/fields/repeating/field.jsp   |   2 +-
 .../components/editor/fields/taxonomy/field.jsp    |   2 +-
 .../components/editor/fields/well/well.jsp         |  48 ++++++++
 .../libs/sling-cms/content/admin/loadcontent.json  | 137 +++++++++++----------
 vagrant/Vagrantfile                                |   2 +-
 7 files changed, 128 insertions(+), 71 deletions(-)

diff --cc ui/src/main/resources/jcr_root/conf/global.json
index 12f7383,c2ea9ad..1110ed2
--- a/ui/src/main/resources/jcr_root/conf/global.json
+++ b/ui/src/main/resources/jcr_root/conf/global.json
@@@ -1,139 -1,139 +1,139 @@@
  {
 -	"jcr:primaryType": "sling:OrderedFolder",
 -	"jcr:content": {
 -		"jcr:primaryType": "nt:unstructured",
 -		"jcr:title": "Global"
 -	},
 -	"files": {
 -		"jcr:primaryType": "sling:OrderedFolder",
 -		"jcr:content": {
 -			"jcr:primaryType": "nt:unstructured",
 -			"jcr:title": "File Configurations"
 -		},
 -		"editors": {
 -			"jcr:primaryType": "sling:OrderedFolder",
 -			"jcr:content": {
 -				"jcr:primaryType": "nt:unstructured",
 -				"jcr:title": "File Editor"
 -			},
 -			"default": {
 -				"jcr:primaryType": "sling:Config",
 -				"jcr:title": "Default File Editor",
 -				"sling:resourceType": "sling-cms/components/cms/fileeditorconfig",
 -				"fields": {
 -					"jcr:primaryType": "nt:unstructured",
 -					"title": {
 -						"jcr:primaryType": "nt:unstructured",
 -						"required": false,
 -						"name": "jcr:content/jcr:title",
 -						"type": "text",
 -						"label": "Title",
 -						"sling:resourceType": "sling-cms/components/editor/fields/text"
 -					},
 -					"jcrmimeType": {
 -						"jcr:primaryType": "nt:unstructured",
 -						"required": true,
 -						"name": "jcr:content/jcr:mimeType",
 -						"type": "text",
 -						"label": "MIME Type",
 -						"sling:resourceType": "sling-cms/components/editor/fields/text"
 -					},
 -					"licensing": {
 -						"jcr:primaryType": "nt:unstructured",
 -						"required": false,
 -						"name": "jcr:content/licensing",
 -						"type": "text",
 -						"label": "Licensing",
 -						"sling:resourceType": "sling-cms/components/editor/fields/text"
 -					},
 -					"taxonomy": {
 -						"jcr:primaryType": "nt:unstructured",
 -						"name": "jcr:content/sling:taxonomy",
 -						"label": "Taxonomy",
 -						"sling:resourceType": "sling-cms/components/editor/fields/taxonomy"
 -					},
 -					"taxonomyTypeHint": {
 -						"jcr:primaryType": "nt:unstructured",
 -						"name": "jcr:content/sling:taxonomy@TypeHint",
 -						"value": "String[]",
 -						"sling:resourceType": "sling-cms/components/editor/fields/hidden"
 -					},
 -					"published": {
 -						"jcr:primaryType": "nt:unstructured",
 -						"options": "Yes=true, No=false",
 -						"name": "jcr:content/published",
 -						"label": "Published",
 -						"sling:resourceType": "sling-cms/components/editor/fields/select"
 -					},
 -					"publishedTypeHint": {
 -						"jcr:primaryType": "nt:unstructured",
 -						"name": "jcr:content/published@TypeHint",
 -						"value": "Boolean",
 -						"sling:resourceType": "sling-cms/components/editor/fields/hidden"
 -					}
 -				}
 -			}
 -		}
 -	},
 -	"site": {
 -		"jcr:primaryType": "sling:Config",
 -		"sling:resourceType": "sling-cms/components/cms/siteconfig",
 -		"jcr:title": "Default Site Configuration",
 -		"rewrite": {
 -			"jcr:primaryType": "nt:unstructured",
 -			"doctype": "<!DOCTYPE html>",
 -			"attributes": [
 -				"action",
 -				"href",
 -				"src"
 -			]
 -		},
 -		"templates": {
 -			"jcr:primaryType": "nt:unstructured",
 -			"base-page": {
 -				"jcr:primaryType": "nt:unstructured",
 -				"jcr:title": "Base Page",
 -				"template": "{\r\n  \"jcr:primaryType\": \"sling:Page\",\r\n  \"jcr:content\": {\r\n    \"jcr:primaryType\": \"nt:unstructured\",\r\n    \"jcr:title\": \"{{title}}\",\r\n    \"sling:template\": \"/conf/global/site/templates/base-page\",\r\n    \"sling:resourceType\": \"reference/components/pages/base\",\r\n    \"published\": false\r\n  }\r\n}",
 -				"availableComponentTypes": [
 -					"General"
 -				],
 -				"allowedPaths": [
 -					"/content/apache/sling-apache-org.*"
 -				],
 -				"sling:resourceType": "sling-cms/components/cms/pagetemplate",
 -				"fields": {
 -					"jcr:primaryType": "nt:unstructured",
 -					"text": {
 -						"jcr:primaryType": "nt:unstructured",
 -						"required": true,
 -						"name": "title",
 -						"type": "text",
 -						"label": "Title",
 -						"sling:resourceType": "sling-cms/components/editor/fields/text"
 -					},
 -					"text_1147023191": {
 -						"jcr:primaryType": "nt:unstructured",
 -						"required": true,
 -						"name": ":name",
 -						"type": "text",
 -						"label": "Name",
 -						"sling:resourceType": "sling-cms/components/editor/fields/text"
 -					}
 -				},
 -				"componentConfigurations": {
 -					"jcr:primaryType": "nt:unstructured",
 -					"componentconfig": {
 -						"jcr:primaryType": "nt:unstructured",
 -						"type": "reference/components/general/columncontrol",
 -						"containerclass": "container",
 -						"columns": [
 -							"50-50=col-md-6 col-md-6",
 -							"100=col-md-12"
 -						],
 -						"sling:resourceType": "sling-cms/components/cms/componentconfig"
 -					}
 -				}
 -			}
 -		}
 -	}
 +    "jcr:primaryType": "sling:OrderedFolder",
 +    "jcr:content": {
 +        "jcr:primaryType": "nt:unstructured",
 +        "jcr:title": "Global"
 +    },
 +    "files": {
 +        "jcr:primaryType": "sling:OrderedFolder",
 +        "jcr:content": {
 +            "jcr:primaryType": "nt:unstructured",
 +            "jcr:title": "File Configurations"
 +        },
 +        "editors": {
 +            "jcr:primaryType": "sling:OrderedFolder",
 +            "jcr:content": {
 +                "jcr:primaryType": "nt:unstructured",
 +                "jcr:title": "File Editor"
 +            },
 +            "default": {
 +                "jcr:primaryType": "sling:Config",
 +                "jcr:title": "Default File Editor",
 +                "sling:resourceType": "sling-cms/components/cms/fileeditorconfig",
 +                "fields": {
 +                    "jcr:primaryType": "nt:unstructured",
 +                    "title": {
 +                        "jcr:primaryType": "nt:unstructured",
 +                        "required": false,
 +                        "name": "jcr:content/jcr:title",
 +                        "type": "text",
 +                        "label": "Title",
 +                        "sling:resourceType": "sling-cms/components/editor/fields/text"
 +                    },
 +                    "jcrmimeType": {
 +                        "jcr:primaryType": "nt:unstructured",
 +                        "required": true,
 +                        "name": "jcr:content/jcr:mimeType",
 +                        "type": "text",
 +                        "label": "MIME Type",
 +                        "sling:resourceType": "sling-cms/components/editor/fields/text"
 +                    },
 +                    "licensing": {
 +                        "jcr:primaryType": "nt:unstructured",
 +                        "required": false,
 +                        "name": "jcr:content/licensing",
 +                        "type": "text",
 +                        "label": "Licensing",
 +                        "sling:resourceType": "sling-cms/components/editor/fields/text"
 +                    },
 +                    "taxonomy": {
 +                        "jcr:primaryType": "nt:unstructured",
 +                        "name": "jcr:content/sling:taxonomy",
 +                        "label": "Taxonomy",
 +                        "sling:resourceType": "sling-cms/components/editor/fields/taxonomy"
 +                    },
 +                    "taxonomyTypeHint": {
 +                        "jcr:primaryType": "nt:unstructured",
 +                        "name": "jcr:content/sling:taxonomy@TypeHint",
 +                        "value": "String[]",
 +                        "sling:resourceType": "sling-cms/components/editor/fields/hidden"
 +                    },
 +                    "published": {
 +                        "jcr:primaryType": "nt:unstructured",
 +                        "options": "Yes=true, No=false",
 +                        "name": "jcr:content/published",
 +                        "label": "Published",
 +                        "sling:resourceType": "sling-cms/components/editor/fields/select"
 +                    },
 +                    "publishedTypeHint": {
 +                        "jcr:primaryType": "nt:unstructured",
 +                        "name": "jcr:content/published@TypeHint",
 +                        "value": "Boolean",
 +                        "sling:resourceType": "sling-cms/components/editor/fields/hidden"
 +                    }
 +                }
 +            }
 +        }
 +    },
 +    "site": {
 +        "jcr:primaryType": "sling:Config",
 +        "sling:resourceType": "sling-cms/components/cms/siteconfig",
 +        "jcr:title": "Default Site Configuration",
 +        "rewrite": {
 +            "jcr:primaryType": "nt:unstructured",
 +            "doctype": "<!DOCTYPE html>",
 +            "attributes": [
 +                "action",
 +                "href",
 +                "src"
 +            ]
 +        },
 +        "templates": {
 +            "jcr:primaryType": "nt:unstructured",
 +            "base-page": {
 +                "jcr:primaryType": "nt:unstructured",
 +                "jcr:title": "Base Page",
 +                "template": "{\r\n  \"jcr:primaryType\": \"sling:Page\",\r\n  \"jcr:content\": {\r\n    \"jcr:primaryType\": \"nt:unstructured\",\r\n    \"jcr:title\": \"{{title}}\",\r\n    \"sling:template\": \"/conf/global/site/templates/base-page\",\r\n    \"sling:resourceType\": \"reference/components/pages/base\",\r\n    \"published\": false\r\n  }\r\n}",
 +                "availableComponentTypes": [
 +                    "General"
 +                ],
 +                "allowedPaths": [
-                     "/content/apache/apache-sling-org.*"
++                    "/content/apache/sling-apache-org.*"
 +                ],
 +                "sling:resourceType": "sling-cms/components/cms/pagetemplate",
 +                "fields": {
 +                    "jcr:primaryType": "nt:unstructured",
 +                    "text": {
 +                        "jcr:primaryType": "nt:unstructured",
 +                        "required": true,
 +                        "name": "title",
 +                        "type": "text",
 +                        "label": "Title",
 +                        "sling:resourceType": "sling-cms/components/editor/fields/text"
 +                    },
 +                    "text_1147023191": {
 +                        "jcr:primaryType": "nt:unstructured",
 +                        "required": true,
 +                        "name": ":name",
 +                        "type": "text",
 +                        "label": "Name",
 +                        "sling:resourceType": "sling-cms/components/editor/fields/text"
 +                    }
 +                },
 +                "componentConfigurations": {
 +                    "jcr:primaryType": "nt:unstructured",
 +                    "componentconfig": {
 +                        "jcr:primaryType": "nt:unstructured",
 +                        "type": "reference/components/general/columncontrol",
 +                        "containerclass": "container",
 +                        "columns": [
 +                            "50-50=col-md-6 col-md-6",
 +                            "100=col-md-12"
 +                        ],
 +                        "sling:resourceType": "sling-cms/components/cms/componentconfig"
 +                    }
 +                }
 +            }
 +        }
 +    }
  }


[sling-org-apache-sling-app-cms] 06/17: UI Updates - Content Browsing

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

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

commit 7ac67c636903c459ba69d9a0a1cb7b363f7469a7
Author: JE Bailey <ja...@sas.com>
AuthorDate: Thu Sep 13 10:30:08 2018 -0400

    UI Updates - Content Browsing
    
    Taxonomy & Config Updates
---
 .../create.json => actions/create/config.json}     |  23 +-
 .../editgroup.json => actions/create/page.json}    |  28 +--
 .../create.json => actions/create/taxonomy.json}   |  19 +-
 .../create.json => actions/create/template.json}   |   2 +-
 .../libs/sling-cms/content/actions/edit/file.json  |  40 ++--
 .../sling-cms/content/actions/edit/folder.json     |  66 +++---
 .../libs/sling-cms/content/actions/edit/site.json  |   2 +-
 .../editgroup.json => actions/edit/sitegroup.json} |   2 +-
 .../editgroup.json => actions/edit/taxonomy.json}  |  19 +-
 .../sling-cms/content/actions/edit/template.json   |  21 ++
 .../content/actions/optimize/optimize.json         |  21 ++
 .../content/{ => actions}/shared/delete.json       |   0
 .../content/{ => actions}/shared/movecopy.json     |   0
 .../content/{ => actions}/shared/publish.json      |   0
 .../content/{ => actions}/shared/search.json       |   0
 .../content/{ => actions}/shared/unpublish.json    |   0
 .../content/{ => actions}/shared/versions.json     |   0
 .../editgroup.json => actions/upload/file.json}    |  32 +--
 .../libs/sling-cms/content/config/create.json      |  66 ------
 .../libs/sling-cms/content/config/list.json        | 243 +++++++--------------
 .../jcr_root/libs/sling-cms/content/file/edit.json |  21 --
 .../libs/sling-cms/content/file/optimize.json      |  21 --
 .../libs/sling-cms/content/file/upload.json        |  34 ---
 .../libs/sling-cms/content/folder/edit.json        |  34 ---
 .../libs/sling-cms/content/page/create.json        |  38 ----
 .../libs/sling-cms/content/site/content.json       | 114 +++++-----
 .../libs/sling-cms/content/site/create.json        |  72 ------
 .../libs/sling-cms/content/site/creategroup.json   |  68 ------
 .../jcr_root/libs/sling-cms/content/site/edit.json |  64 ------
 .../libs/sling-cms/content/site/sites.json         |  14 +-
 .../libs/sling-cms/content/siteconfig/editor.json  | 186 ++++++++--------
 .../jcr_root/libs/sling-cms/content/start.json     |   5 -
 .../libs/sling-cms/content/static/content.json     | 231 +++++---------------
 .../libs/sling-cms/content/taxonomy/create.json    |  52 -----
 .../libs/sling-cms/content/taxonomy/edit.json      |  33 ---
 .../libs/sling-cms/content/taxonomy/list.json      | 187 ++++++++--------
 .../libs/sling-cms/content/template/edit.json      |  21 --
 .../sling-cms/content/templates/sitegroup.json     |   5 -
 38 files changed, 534 insertions(+), 1250 deletions(-)

diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/folder/create.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/config.json
similarity index 73%
copy from ui/src/main/resources/jcr_root/libs/sling-cms/content/folder/create.json
copy to ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/config.json
index 8c04f36..2d1d7ff 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/folder/create.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/config.json
@@ -2,7 +2,7 @@
     "jcr:primaryType": "sling:Page",
     "jcr:content": {
         "sling:resourceType": "sling-cms/components/pages/form",
-        "jcr:title": "Create Folder",
+        "jcr:title": "Create Site Config",
         "jcr:primaryType": "nt:unstructured",
         "container": {
             "jcr:primaryType": "nt:unstructured",
@@ -10,13 +10,13 @@
             "richtext": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/general/richtext",
-                "text": "<h3>Create Folder</h3>"
+                "text": "<h3>Create Site Config</h3>"
             },
             "slingform": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/editor/slingform",
                 "actionSuffix": "/*",
-                "button": "Create Folder",
+                "button": "Create Site Config",
                 "successPrepend": "/libs/sling-cms/content/site/content.html",
                 "fields": {
                     "jcr:primaryType": "nt:unstructured",
@@ -25,7 +25,7 @@
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/editor/fields/text",
                         "label": "Title",
-                        "name": "jcr:content/jcr:title",
+                        "name": "jcr:title",
                         "required": true
                     },
                     "name": {
@@ -38,19 +38,26 @@
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/editor/fields/hidden",
                         "name": ":nameParam",
-                        "value": "jcr:content/jcr:title"
+                        "value": "jcr:title"
                     },
                     "primaryType": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/editor/fields/hidden",
                         "name": "jcr:primaryType",
-                        "value": "sling:OrderedFolder"
+                        "value": "sling:Config"
                     },
-                    "contentPrimaryType": {
+                    "pageTemplatesPrimaryType": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/editor/fields/hidden",
-                        "name": "jcr:content/jcr:primaryType",
+                        "name": "pageTemplates/jcr:primaryType",
                         "value": "nt:unstructured"
+                    },
+                    "type": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/select",
+                        "name": "sling:resourceType",
+                        "optionsScript": "/libs/sling-cms/components/editor/scripts/configResourceTypeOptions.jsp",
+                        "required": true
                     }
                 }
             }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/page.json
similarity index 62%
copy from ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json
copy to ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/page.json
index 44c9b33..003f562 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/page.json
@@ -1,8 +1,8 @@
 {
     "jcr:primaryType": "sling:Page",
     "jcr:content": {
-        "sling:resourceType": "sling-cms/components/pages/base",
-        "jcr:title": "Edit Site Group",
+        "sling:resourceType": "sling-cms/components/pages/form",
+        "jcr:title": "Create Page",
         "jcr:primaryType": "nt:unstructured",
         "container": {
             "jcr:primaryType": "nt:unstructured",
@@ -10,32 +10,26 @@
             "richtext": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/general/richtext",
-                "text": "<h3>Edit Site Group</h3>"
+                "text": "<h3>Create Page</h3>"
             },
             "slingform": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/editor/slingform",
-                "actionSuffix": "/*",
-                "button": "Create Folder",
+                "button": "Create Page",
                 "successPrepend": "/libs/sling-cms/content/site/content.html",
                 "fields": {
                     "jcr:primaryType": "nt:unstructured",
                     "sling:resourceType": "sling-cms/components/general/container",
-                    "title": {
+                    "pageTemplate": {
                         "jcr:primaryType": "nt:unstructured",
-                        "sling:resourceType": "sling-cms/components/editor/fields/text",
-                        "label": "Title",
-                        "name": "jcr:content/jcr:title",
-                        "required": true
+                        "sling:resourceType": "sling-cms/components/editor/fields/select",
+                        "label": "Page Template",
+                        "name": "pageTemplate",
+                        "optionsScript": "/libs/sling-cms/components/editor/scripts/pageTemplateOptions.jsp"
                     },
-                    "config": {
+                    "pageproperties": {
                         "jcr:primaryType": "nt:unstructured",
-                        "sling:resourceType": "sling-cms/components/editor/fields/path",
-                        "basePath": "/conf",
-                        "label": "Config",
-                        "name": "sling:configRef",
-                        "required": false,
-                        "type": "config"
+                        "sling:resourceType": "sling-cms/components/cms/pageproperties"
                     }
                 }
             }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/folder/create.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/taxonomy.json
similarity index 73%
rename from ui/src/main/resources/jcr_root/libs/sling-cms/content/folder/create.json
rename to ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/taxonomy.json
index 8c04f36..5bb6b4f 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/folder/create.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/taxonomy.json
@@ -2,7 +2,7 @@
     "jcr:primaryType": "sling:Page",
     "jcr:content": {
         "sling:resourceType": "sling-cms/components/pages/form",
-        "jcr:title": "Create Folder",
+        "jcr:title": "Create Taxonomy",
         "jcr:primaryType": "nt:unstructured",
         "container": {
             "jcr:primaryType": "nt:unstructured",
@@ -10,14 +10,13 @@
             "richtext": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/general/richtext",
-                "text": "<h3>Create Folder</h3>"
+                "text": "<h3>Create Taxonomy</h3>"
             },
             "slingform": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/editor/slingform",
                 "actionSuffix": "/*",
-                "button": "Create Folder",
-                "successPrepend": "/libs/sling-cms/content/site/content.html",
+                "button": "Create Taxonomy",
                 "fields": {
                     "jcr:primaryType": "nt:unstructured",
                     "sling:resourceType": "sling-cms/components/general/container",
@@ -25,7 +24,7 @@
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/editor/fields/text",
                         "label": "Title",
-                        "name": "jcr:content/jcr:title",
+                        "name": "jcr:title",
                         "required": true
                     },
                     "name": {
@@ -38,19 +37,13 @@
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/editor/fields/hidden",
                         "name": ":nameParam",
-                        "value": "jcr:content/jcr:title"
+                        "value": "jcr:title"
                     },
                     "primaryType": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/editor/fields/hidden",
                         "name": "jcr:primaryType",
-                        "value": "sling:OrderedFolder"
-                    },
-                    "contentPrimaryType": {
-                        "jcr:primaryType": "nt:unstructured",
-                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
-                        "name": "jcr:content/jcr:primaryType",
-                        "value": "nt:unstructured"
+                        "value": "sling:Taxonomy"
                     }
                 }
             }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/template/create.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/template.json
similarity index 97%
rename from ui/src/main/resources/jcr_root/libs/sling-cms/content/template/create.json
rename to ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/template.json
index 9a96b51..9a33987 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/template/create.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/template.json
@@ -1,7 +1,7 @@
 {
     "jcr:primaryType": "sling:Page",
     "jcr:content": {
-        "sling:resourceType": "sling-cms/components/pages/base",
+        "sling:resourceType": "sling-cms/components/pages/form",
         "jcr:title": "Create Template",
         "jcr:primaryType": "nt:unstructured",
         "container": {
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/file.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/file.json
index f11fdf7..c454066 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/file.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/file.json
@@ -1,21 +1,21 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/form",
-		"jcr:title": "Edit File",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Edit File</h3>"
-			},
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/fileeditorinclude"
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/form",
+        "jcr:title": "Edit File",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "richtext": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<h3>Edit File</h3>"
+            },
+            "slingform": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/fileeditorinclude"
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/folder.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/folder.json
index b2092a5..bb2371b 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/folder.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/folder.json
@@ -1,34 +1,34 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Edit Folder",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Edit Folder</h3>"
-			},
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"button": "Edit Folder",
-				"successPrepend":"/libs/sling-cms/content/site/content.html",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:resourceType": "sling-cms/components/general/container",
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Title",
-						"name": "jcr:content/jcr:title",
-						"required": true
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/form",
+        "jcr:title": "Edit Folder",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "richtext": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<h3>Edit Folder</h3>"
+            },
+            "slingform": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/editor/slingform",
+                "button": "Edit Folder",
+                "successPrepend": "/libs/sling-cms/content/site/content.html",
+                "fields": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling:resourceType": "sling-cms/components/general/container",
+                    "title": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text",
+                        "label": "Title",
+                        "name": "jcr:content/jcr:title",
+                        "required": true
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/site.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/site.json
index 319e9a5..e73af63 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/site.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/site.json
@@ -1,7 +1,7 @@
 {
 	"jcr:primaryType": "sling:Page",
 	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
+		"sling:resourceType": "sling-cms/components/pages/form",
 		"jcr:title": "Edit Site",
 		"jcr:primaryType": "nt:unstructured",
 		"container": {
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/sitegroup.json
similarity index 96%
copy from ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json
copy to ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/sitegroup.json
index 44c9b33..6c29d0f 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/sitegroup.json
@@ -1,7 +1,7 @@
 {
     "jcr:primaryType": "sling:Page",
     "jcr:content": {
-        "sling:resourceType": "sling-cms/components/pages/base",
+        "sling:resourceType": "sling-cms/components/pages/form",
         "jcr:title": "Edit Site Group",
         "jcr:primaryType": "nt:unstructured",
         "container": {
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/taxonomy.json
similarity index 61%
copy from ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json
copy to ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/taxonomy.json
index 44c9b33..2f46bd1 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/taxonomy.json
@@ -2,7 +2,7 @@
     "jcr:primaryType": "sling:Page",
     "jcr:content": {
         "sling:resourceType": "sling-cms/components/pages/base",
-        "jcr:title": "Edit Site Group",
+        "jcr:title": "Edit Taxonomy Item",
         "jcr:primaryType": "nt:unstructured",
         "container": {
             "jcr:primaryType": "nt:unstructured",
@@ -10,14 +10,12 @@
             "richtext": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/general/richtext",
-                "text": "<h3>Edit Site Group</h3>"
+                "text": "<h3>Edit Taxonomy Item</h3>"
             },
             "slingform": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/editor/slingform",
-                "actionSuffix": "/*",
-                "button": "Create Folder",
-                "successPrepend": "/libs/sling-cms/content/site/content.html",
+                "button": "Update Taxonomy",
                 "fields": {
                     "jcr:primaryType": "nt:unstructured",
                     "sling:resourceType": "sling-cms/components/general/container",
@@ -25,17 +23,8 @@
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/editor/fields/text",
                         "label": "Title",
-                        "name": "jcr:content/jcr:title",
+                        "name": "jcr:title",
                         "required": true
-                    },
-                    "config": {
-                        "jcr:primaryType": "nt:unstructured",
-                        "sling:resourceType": "sling-cms/components/editor/fields/path",
-                        "basePath": "/conf",
-                        "label": "Config",
-                        "name": "sling:configRef",
-                        "required": false,
-                        "type": "config"
                     }
                 }
             }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/template.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/template.json
new file mode 100644
index 0000000..9ae587a
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/template.json
@@ -0,0 +1,21 @@
+{
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/form",
+        "jcr:title": "Configure Site",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "richtext": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<h2>Edit Template</h2>"
+            },
+            "siteconfig": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/templateeditor"
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/optimize/optimize.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/optimize/optimize.json
new file mode 100644
index 0000000..5c92acd
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/optimize/optimize.json
@@ -0,0 +1,21 @@
+{
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/base",
+        "jcr:title": "Optimize File",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "richtext": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<h3>Optimize File</h3>"
+            },
+            "slingform": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/optimizefile"
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/delete.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/delete.json
similarity index 100%
rename from ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/delete.json
rename to ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/delete.json
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/movecopy.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/movecopy.json
similarity index 100%
rename from ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/movecopy.json
rename to ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/movecopy.json
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/publish.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/publish.json
similarity index 100%
rename from ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/publish.json
rename to ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/publish.json
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/search.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/search.json
similarity index 100%
rename from ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/search.json
rename to ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/search.json
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/unpublish.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/unpublish.json
similarity index 100%
rename from ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/unpublish.json
rename to ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/unpublish.json
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/versions.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/versions.json
similarity index 100%
rename from ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/versions.json
rename to ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/versions.json
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/upload/file.json
similarity index 51%
rename from ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json
rename to ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/upload/file.json
index 44c9b33..2f0bdbb 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/upload/file.json
@@ -1,41 +1,31 @@
 {
     "jcr:primaryType": "sling:Page",
     "jcr:content": {
-        "sling:resourceType": "sling-cms/components/pages/base",
-        "jcr:title": "Edit Site Group",
+        "sling:resourceType": "sling-cms/components/pages/form",
+        "jcr:title": "Upload File",
         "jcr:primaryType": "nt:unstructured",
         "container": {
             "jcr:primaryType": "nt:unstructured",
             "sling:resourceType": "sling-cms/components/general/container",
-            "richtext": {
-                "jcr:primaryType": "nt:unstructured",
-                "sling:resourceType": "sling-cms/components/general/richtext",
-                "text": "<h3>Edit Site Group</h3>"
-            },
             "slingform": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/editor/slingform",
-                "actionSuffix": "/*",
-                "button": "Create Folder",
-                "successPrepend": "/libs/sling-cms/content/site/content.html",
+                "button": "Upload File",
                 "fields": {
                     "jcr:primaryType": "nt:unstructured",
                     "sling:resourceType": "sling-cms/components/general/container",
-                    "title": {
+                    "file": {
                         "jcr:primaryType": "nt:unstructured",
-                        "sling:resourceType": "sling-cms/components/editor/fields/text",
-                        "label": "Title",
-                        "name": "jcr:content/jcr:title",
+                        "sling:resourceType": "sling-cms/components/editor/fields/file",
+                        "label": "File",
+                        "name": "*",
                         "required": true
                     },
-                    "config": {
+                    "typeHint": {
                         "jcr:primaryType": "nt:unstructured",
-                        "sling:resourceType": "sling-cms/components/editor/fields/path",
-                        "basePath": "/conf",
-                        "label": "Config",
-                        "name": "sling:configRef",
-                        "required": false,
-                        "type": "config"
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": "*@TypeHint",
+                        "value": "sling:File"
                     }
                 }
             }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/create.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/create.json
deleted file mode 100644
index 65707c6..0000000
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/create.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Create Site Config",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Create Site Config</h3>"
-			},
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"actionSuffix": "/*",
-				"button": "Create Site Config",
-				"successPrepend": "/libs/sling-cms/content/site/content.html",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:resourceType": "sling-cms/components/general/container",
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Title",
-						"name": "jcr:title",
-						"required": true
-					},
-					"name": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Name",
-						"name": ":name"
-					},
-					"nameParam": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": ":nameParam",
-						"value": "jcr:title"
-					},
-					"primaryType": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": "jcr:primaryType",
-						"value": "sling:Config"
-					},
-					"pageTemplatesPrimaryType": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": "pageTemplates/jcr:primaryType",
-						"value": "nt:unstructured"
-					},
-					"type": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/select",
-						"name": "sling:resourceType",
-						"optionsScript": "/libs/sling-cms/components/editor/scripts/configResourceTypeOptions.jsp",
-						"required": true
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/list.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/list.json
index 71e2a81..e71a744 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/list.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/list.json
@@ -1,159 +1,86 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Site Configurations",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Configurations</h3>"
-			},
-			"contentactions": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentactions",
-				"actions": {
-					"folder": {
-						"jcr:primaryType": "nt:unstructured",
-						"label": "Folder",
-						"prefix": "/cms/folder/create.html"
-					},
-					"config": {
-						"jcr:primaryType": "nt:unstructured",
-						"label": "Config",
-						"prefix": "/cms/config/create.html"
-					}
-				}
-			},
-			"contentbreadcrumb": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentbreadcrumb",
-				"depth": 2,
-				"prefix": "/cms/config/list.html"
-			},
-			"contenttable": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contenttable",
-				"columns": {
-					"jcr:primaryType": "nt:unstructured",
-					"name": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Name"
-					},
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Title"
-					},
-					"lastModified": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Last Modified"
-					},
-					"actions": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Actions"
-					}
-				},
-				"types": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:Config": {
-						"jcr:primaryType": "nt:unstructured",
-						"columns": {
-							"jcr:primaryType": "nt:unstructured",
-							"name": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/name",
-								"prefix": "/cms/config/edit.html",
-								"link": true
-							},
-							"title": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/text",
-								"property": "jcr:title"
-							},
-							"lastModified": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
-								"subPath": ""
-							},
-							"actions": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/actions",
-								"edit": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Edit Site Config",
-									"icon": "pencil-f",
-									"prefix": "/cms/config/metadata.html"
-								},
-								"movecopy": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Move / Copy Config",
-									"icon": "move-alt",
-									"prefix": "/cms/shared/movecopy.html"
-								},
-								"delete": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Delete Site Config",
-									"icon": "trash",
-									"prefix": "/cms/shared/delete.html"
-								}
-							}
-						}
-					},
-					"sling:OrderedFolder": {
-						"jcr:primaryType": "nt:unstructured",
-						"columns": {
-							"jcr:primaryType": "nt:unstructured",
-							"name": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/name",
-								"link": true,
-								"prefix": "/cms/config/list.html"
-							},
-							"title": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/text",
-								"property": "jcr:content/jcr:title"
-							},
-							"lastModified": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
-								"subPath": "jcr:content"
-							},
-							"actions": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/actions",
-								"edit": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Edit Folder",
-									"icon": "pencil-f",
-									"prefix": "/cms/folder/edit.html"
-								},
-								"movecopy": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Move / Copy Folder",
-									"icon": "move-alt",
-									"prefix": "/cms/shared/movecopy.html"
-								},
-								"delete": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Delete Folder",
-									"icon": "trash",
-									"prefix": "/cms/shared/delete.html"
-								}
-							}
-						}
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/base",
+        "jcr:title": "Site Configurations",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "contentactions": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contentactions",
+                "actions": {
+                    "folder": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "label": "Folder",
+                        "prefix": "/cms/folder/create.html"
+                    },
+                    "config": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "label": "Config",
+                        "prefix": "/cms/config/create.html"
+                    }
+                }
+            },
+            "contentbreadcrumb": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contentbreadcrumb",
+                "depth": 2,
+                "prefix": "/cms/config/list.html"
+            },
+            "contenttable": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contenttable",
+                "columns": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "name": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/name",
+                        "jcr:title": "Name",
+                        "prefix": "/cms/config/edit.html",
+                        "link": true
+                    },
+                    "title": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/text",
+                        "jcr:title": "Title",
+                        "property": "jcr:title"
+                    },
+                    "lastModified": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
+                        "jcr:title": "Last Modified",
+                        "subPath": ""
+                    },
+                    "actions": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/actions",
+                        "edit": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "modal": true,
+                            "title": "Edit Site Config",
+                            "icon": "pencil-f",
+                            "prefix": "/cms/config/metadata.html"
+                        },
+                        "movecopy": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "modal": true,
+                            "title": "Move / Copy Config",
+                            "icon": "move-alt",
+                            "prefix": "/cms/actions/shared/movecopy.html"
+                        },
+                        "delete": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "modal": true,
+                            "title": "Delete Site Config",
+                            "icon": "trash",
+                            "prefix": "/cms/actions/shared/delete.html"
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/edit.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/edit.json
deleted file mode 100644
index f11fdf7..0000000
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/edit.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/form",
-		"jcr:title": "Edit File",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Edit File</h3>"
-			},
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/fileeditorinclude"
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/optimize.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/optimize.json
deleted file mode 100644
index 373a184..0000000
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/optimize.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Optimize File",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Optimize File</h3>"
-			},
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/optimizefile"
-			}
-		}
-	}
-}
\ No newline at end of file
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
deleted file mode 100644
index f8ae93f..0000000
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/upload.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/form",
-		"jcr:title": "Upload File",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"button": "Upload File",
-				"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
-					},
-					"typeHint": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": "*@TypeHint",
-						"value": "sling:File"
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/folder/edit.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/folder/edit.json
deleted file mode 100644
index b2092a5..0000000
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/folder/edit.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Edit Folder",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Edit Folder</h3>"
-			},
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"button": "Edit Folder",
-				"successPrepend":"/libs/sling-cms/content/site/content.html",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:resourceType": "sling-cms/components/general/container",
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Title",
-						"name": "jcr:content/jcr:title",
-						"required": true
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/create.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/create.json
deleted file mode 100644
index e04c69a..0000000
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/create.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Create Page",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Create Page</h3>"
-			},
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"button": "Create Page",
-				"successPrepend":"/libs/sling-cms/content/site/content.html",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:resourceType": "sling-cms/components/general/container",
-					"pageTemplate": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/select",
-						"label": "Page Template",
-						"name": "pageTemplate",
-						"optionsScript": "/libs/sling-cms/components/editor/scripts/pageTemplateOptions.jsp"
-					},
-					"pageproperties": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/cms/pageproperties"
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/content.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/content.json
index 9383b5d..365848c 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/content.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/content.json
@@ -1,80 +1,86 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Site Content",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"contentactions": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentactions",
-				"actions": {
-					"page": {
-						"jcr:primaryType": "nt:unstructured",
-						"label": "Page",
-						"prefix": "/cms/page/create.html"
-					},
-					"file": {
-						"jcr:primaryType": "nt:unstructured",
-						"label": "File",
-						"prefix": "/cms/file/upload.html"
-					},
-					"folder": {
-						"jcr:primaryType": "nt:unstructured",
-						"label": "Folder",
-						"prefix": "/cms/folder/create.html"
-					}
-				}
-			},
-			"contentbreadcrumb": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentbreadcrumb",
-				"depth": 2,
-				"prefix": "/cms/site/content.html",
-				"titleProp": "jcr:content/jcr:title"
-			},
-			"contenttable": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contenttable",
-				"columns": {
-				    "resourceTypes" : ["sling:Page","sling:File","sling:OrderedFolder","sling:Folder"],
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/base",
+        "jcr:title": "Site Content",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "contentactions": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contentactions",
+                "actions": {
+                    "page": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "label": "Page",
+                        "prefix": "/cms/actions/create/page.html"
+                    },
+                    "file": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "label": "File",
+                        "prefix": "/cms/actions/upload/file.html"
+                    },
+                    "folder": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "label": "Folder",
+                        "prefix": "/cms/actons/create/folder/create.html"
+                    }
+                }
+            },
+            "contentbreadcrumb": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contentbreadcrumb",
+                "depth": 2,
+                "prefix": "/cms/site/content.html",
+                "titleProp": "jcr:content/jcr:title"
+            },
+            "contenttable": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contenttable",
+                "columns": {
+                    "resourceTypes": [
+                        "sling:Page",
+                        "sling:File",
+                        "sling:Site",
+                        "sling:OrderedFolder",
+                        "sling:Folder"
+                    ],
                     "name": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/cms/columns/name",
                         "link": true,
-                        "jcr:title":"Name",
+                        "jcr:title": "Name",
                         "prefix": "/cms/site/content.html"
                     },
                     "title": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/cms/columns/text",
                         "property": "jcr:content/jcr:title",
-                        "jcr:title":"Title",
+                        "jcr:title": "Title",
                         "type": "String"
                     },
                     "publish": {
                         "jcr:primaryType": "nt:unstructured",
-                        "jcr:title":"Publish",
+                        "jcr:title": "Publish",
                         "sling:resourceType": "sling-cms/components/cms/columns/publish"
                     },
                     "type": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/cms/columns/static",
-                        "jcr:title":"Type",
+                        "jcr:title": "Type",
                         "value": "Page"
                     },
                     "lastModified": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
-                        "jcr:title":"Last Modified",
+                        "jcr:title": "Last Modified",
                         "subPath": "jcr:content/"
                     },
                     "actions": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/cms/columns/actions",
-                        "jcr:title":"Actions",
+                        "jcr:title": "Actions",
                         "edit": {
                             "jcr:primaryType": "nt:unstructured",
                             "modal": false,
@@ -94,7 +100,7 @@
                             "modal": true,
                             "title": "Move / Copy Page",
                             "icon": "move-alt",
-                            "prefix": "/cms/shared/movecopy.html"
+                            "prefix": "/cms/actions/shared/movecopy.html"
                         },
                         "version": {
                             "jcr:primaryType": "nt:unstructured",
@@ -102,18 +108,18 @@
                             "modal": true,
                             "title": "Manage Versions",
                             "icon": "history",
-                            "prefix": "/cms/shared/versions.html"
+                            "prefix": "/cms/actions/shared/versions.html"
                         },
                         "delete": {
                             "jcr:primaryType": "nt:unstructured",
                             "modal": true,
                             "title": "Delete the specified page",
                             "icon": "trash",
-                            "prefix": "/cms/shared/delete.html"
+                            "prefix": "/cms/actions/shared/delete.html"
                         }
                     }
-				}
-			}
-		}
-	}
+                }
+            }
+        }
+    }
 }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/create.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/create.json
deleted file mode 100644
index d2c64c9..0000000
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/create.json
+++ /dev/null
@@ -1,72 +0,0 @@
-{
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/form",
-		"jcr:title": "Create Site",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"actionSuffix": "/*",
-				"button": "Create Site",
-				"successPrepend": "/libs/sling-cms/content/site/content.html",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:resourceType": "sling-cms/components/general/container",
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Title",
-						"name": "jcr:title",
-						"required": true
-					},
-					"name": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Name",
-						"name": ":name"
-					},
-					"nameParam": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": ":nameParam",
-						"value": "jcr:title"
-					},
-					"url": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Primary URL",
-						"name": "sling:url",
-						"required": true
-					},
-					"locale": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/select",
-						"label": "Language",
-						"name": "jcr:language",
-						"optionsScript": "/libs/sling-cms/components/editor/scripts/localeOptions.jsp",
-						"required": true
-					},
-					"config": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/path",
-						"basePath": "/conf",
-						"label": "Config",
-						"name": "sling:configRef",
-						"required": false,
-						"type": "config"
-					},
-					"primaryType": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": "jcr:primaryType",
-						"value": "sling:Site"
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/creategroup.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/creategroup.json
deleted file mode 100644
index 353affa..0000000
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/creategroup.json
+++ /dev/null
@@ -1,68 +0,0 @@
-{
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/form",
-		"jcr:title": "Create Folder",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Create Site Group</h3>"
-			},
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"actionSuffix": "/*",
-				"button": "Create Site Group",
-				"successPrepend": "/libs/sling-cms/content/site/content.html",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:resourceType": "sling-cms/components/general/container",
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Title",
-						"name": "jcr:content/jcr:title",
-						"required": true
-					},
-					"name": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Name",
-						"name": ":name"
-					},
-					"nameParam": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": ":nameParam",
-						"value": "jcr:content/jcr:title"
-					},
-					"config": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/path",
-						"basePath": "/conf",
-						"label": "Config",
-						"name": "sling:configRef",
-						"required": false,
-						"type": "config"
-					},
-					"primaryType": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": "jcr:primaryType",
-						"value": "sling:OrderedFolder"
-					},
-					"contentPrimaryType": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": "jcr:content/jcr:primaryType",
-						"value": "nt:unstructured"
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/edit.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/edit.json
deleted file mode 100644
index 319e9a5..0000000
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/edit.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Edit Site",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Edit Site</h3>"
-			},
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"button": "Edit Site",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:resourceType": "sling-cms/components/general/container",
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Title",
-						"name": "jcr:title",
-						"required": true
-					},
-					"description": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/textarea",
-						"label": "Description",
-						"name": "jcr:description",
-						"required": false
-					},
-					"url": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Primary URL",
-						"name": "sling:url",
-						"required": true
-					},
-					"locale": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/select",
-						"label": "Language",
-						"name": "jcr:language",
-						"optionsScript": "/libs/sling-cms/components/editor/scripts/localeOptions.jsp",
-						"required": true
-					},
-					"config": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/path",
-						"basePath": "/conf",
-						"label": "Config",
-						"name": "sling:configRef",
-						"required": false,
-						"type": "config"
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/sites.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/sites.json
index 9c37266..628c6bc 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/sites.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/sites.json
@@ -39,15 +39,17 @@
                 "columns": {
                     "jcr:primaryType": "nt:unstructured",
                     "resourceTypes": [
-                        "sling:Site",
-                        "sling:OrderedFolder"
+                        "sling:Page",
+                        "sling:File",
+                        "sling:OrderedFolder",
+                        "sling:Folder"
                     ],
                     "name": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/cms/columns/name",
                         "link": true,
                         "jcr:title": "Name",
-                        "prefix": "/cms/site/sites.html"
+                        "prefix": "/cms/site/content.html"
                     },
                     "title": {
                         "jcr:primaryType": "nt:unstructured",
@@ -71,20 +73,20 @@
                             "modal": true,
                             "title": "Edit Site Group",
                             "icon": "pencil-f",
-                            "prefix": "/cms/site/editgroup.html"
+                            "prefix": "/cms/actions/edit/sitegroup.html"
                         },
                         "movecopy": {
                             "jcr:primaryType": "nt:unstructured",
                             "modal": true,
                             "title": "Move / Copy Site Group",
                             "icon": "move-alt",
-                            "prefix": "/cms/shared/movecopy.html"
+                            "prefix": "/cms/actions/shared/movecopy.html"
                         },
                         "delete": {
                             "jcr:primaryType": "nt:unstructured",
                             "title": "Delete Site Group",
                             "icon": "trash",
-                            "prefix": "/cms/shared/delete.html",
+                            "prefix": "/cms/actions/shared/delete.html",
                             "modal": true
                         }
                     }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/siteconfig/editor.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/siteconfig/editor.json
index 49ce2d8..453c58f 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/siteconfig/editor.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/siteconfig/editor.json
@@ -1,94 +1,94 @@
 {
-	"jcr:primaryType": "nt:unstructured",
-	"sling:resourceType": "sling-cms/components/general/container",
-	"richtext": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType": "sling-cms/components/general/richtext",
-		"text": "<br/><h3>Templates</h3>"
-	},
-	"contentactions": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType": "sling-cms/components/cms/contentactions",
-		"actions": {
-			"template": {
-				"jcr:primaryType": "nt:unstructured",
-				"label": "Template",
-				"prefix": "/cms/template/create.html"
-			}
-		}
-	},
-	"contenttable": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType": "sling-cms/components/cms/contenttable",
-		"appendSuffix": "/templates",
-		"columns": {
-			"jcr:primaryType": "nt:unstructured",
-			"name": {
-				"jcr:primaryType": "nt:unstructured",
-				"title": "Name"
-			},
-			"title": {
-				"jcr:primaryType": "nt:unstructured",
-				"title": "Title"
-			},
-			"lastModified": {
-				"jcr:primaryType": "nt:unstructured",
-				"title": "Last Modified"
-			},
-			"actions": {
-				"jcr:primaryType": "nt:unstructured",
-				"title": "Actions"
-			}
-		},
-		"types": {
-			"jcr:primaryType": "nt:unstructured",
-			"nt:unstructured": {
-				"jcr:primaryType": "nt:unstructured",
-				"columns": {
-					"jcr:primaryType": "nt:unstructured",
-					"name": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/cms/columns/name",
-						"link": false
-					},
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/cms/columns/text",
-						"property": "jcr:title"
-					},
-					"lastModified": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
-						"subPath": ""
-					},
-					"actions": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/cms/columns/actions",
-						"edit": {
-							"jcr:primaryType": "nt:unstructured",
-							"modal": false,
-							"new": false,
-							"title": "Edit Template",
-							"icon": "pencil-f",
-							"prefix": "/cms/template/edit.html"
-						},
-						"movecopy": {
-							"jcr:primaryType": "nt:unstructured",
-							"modal": true,
-							"title": "Move / Copy Template",
-							"icon": "move-alt",
-							"prefix": "/cms/shared/movecopy.html"
-						},
-						"delete": {
-							"jcr:primaryType": "nt:unstructured",
-							"modal": true,
-							"title": "Delete Template",
-							"icon": "trash",
-							"prefix": "/cms/shared/delete.html"
-						}
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/general/container",
+    "richtext": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/general/richtext",
+        "text": "<br/><h3>Templates</h3>"
+    },
+    "contentactions": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/cms/contentactions",
+        "actions": {
+            "template": {
+                "jcr:primaryType": "nt:unstructured",
+                "label": "Template",
+                "prefix": "/cms/template/create.html"
+            }
+        }
+    },
+    "contenttable": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/cms/contenttable",
+        "appendSuffix": "/templates",
+        "columns": {
+            "jcr:primaryType": "nt:unstructured",
+            "name": {
+                "jcr:primaryType": "nt:unstructured",
+                "title": "Name"
+            },
+            "title": {
+                "jcr:primaryType": "nt:unstructured",
+                "title": "Title"
+            },
+            "lastModified": {
+                "jcr:primaryType": "nt:unstructured",
+                "title": "Last Modified"
+            },
+            "actions": {
+                "jcr:primaryType": "nt:unstructured",
+                "title": "Actions"
+            }
+        },
+        "types": {
+            "jcr:primaryType": "nt:unstructured",
+            "nt:unstructured": {
+                "jcr:primaryType": "nt:unstructured",
+                "columns": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "name": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/name",
+                        "link": false
+                    },
+                    "title": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/text",
+                        "property": "jcr:title"
+                    },
+                    "lastModified": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
+                        "subPath": ""
+                    },
+                    "actions": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/actions",
+                        "edit": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "modal": false,
+                            "new": false,
+                            "title": "Edit Template",
+                            "icon": "pencil-f",
+                            "prefix": "/cms/template/edit.html"
+                        },
+                        "movecopy": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "modal": true,
+                            "title": "Move / Copy Template",
+                            "icon": "move-alt",
+                            "prefix": "/cms/shared/movecopy.html"
+                        },
+                        "delete": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "modal": true,
+                            "title": "Delete Template",
+                            "icon": "trash",
+                            "prefix": "/cms/shared/delete.html"
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json
index b4ec947..fa03c4a 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json
@@ -40,11 +40,6 @@
                         "link": "/cms/taxonomy/list.html/etc/taxonomy",
                         "text": "Taxonomy"
                     },
-                    "templates": {
-                        "jcr:primaryType": "nt:unstructured",
-                        "link": "/cms/taxonomy/list.html/etc/taxonomy",
-                        "text": "Templates"
-                    },
                     "config": {
                         "jcr:primaryType": "nt:unstructured",
                         "link": "/cms/config/list.html/conf",
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/static/content.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/static/content.json
index 71a2c04..3c38b2f 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/static/content.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/static/content.json
@@ -1,45 +1,51 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Static Content",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"contentactions": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentactions",
-				"actions": {
-					"file": {
-						"jcr:primaryType": "nt:unstructured",
-						"label": "File",
-						"prefix": "/cms/file/upload.html"
-					},
-					"folder": {
-						"jcr:primaryType": "nt:unstructured",
-						"label": "Folder",
-						"prefix": "/cms/folder/create.html"
-					}
-				}
-			},
-			"contentbreadcrumb": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentbreadcrumb",
-				"depth": 2,
-				"prefix": "/cms/static/content.html",
-				"titleProp": "jcr:content/jcr:title"
-			},
-			"contenttable": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contenttable",
-				"columns": {
-                     "resourceTypes":["sling:File","sling:OrderedFolder","sling:Folder","nt:file"],
-					"jcr:primaryType": "nt:unstructured",
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/base",
+        "jcr:title": "Static Content",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "contentactions": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contentactions",
+                "actions": {
+                    "file": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "label": "File",
+                        "prefix": "/cms/actions/upload/file.html"
+                    },
+                    "folder": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "label": "Folder",
+                        "prefix": "/cms/actions/create/folder.html"
+                    }
+                }
+            },
+            "contentbreadcrumb": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contentbreadcrumb",
+                "depth": 2,
+                "prefix": "/cms/static/content.html",
+                "titleProp": "jcr:content/jcr:title"
+            },
+            "contenttable": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contenttable",
+                "defaultPath": "/content",
+                "columns": {
+                    "resourceTypes": [
+                        "sling:File",
+                        "sling:OrderedFolder",
+                        "sling:Folder",
+                        "nt:file"
+                    ],
+                    "jcr:primaryType": "nt:unstructured",
                     "name": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/cms/columns/name",
-                        "jcr:title":"Name",
+                        "jcr:title": "Name",
                         "prefix": "/cms/static/content.html",
                         "link": true
                     },
@@ -47,36 +53,36 @@
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/cms/columns/text",
                         "link": false,
-                        "jcr:title":"Title",
+                        "jcr:title": "Title",
                         "type": "Name"
                     },
                     "publish": {
                         "jcr:primaryType": "nt:unstructured",
-                        "jcr:title":"Publish",
+                        "jcr:title": "Publish",
                         "sling:resourceType": "sling-cms/components/cms/columns/publish"
                     },
                     "type": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/cms/columns/static",
-                        "jcr:title":"Type",
+                        "jcr:title": "Type",
                         "value": "Folder"
                     },
                     "lastModified": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
-                        "jcr:title":"Last Modified",
+                        "jcr:title": "Last Modified",
                         "subPath": "jcr:content/"
                     },
                     "actions": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/cms/columns/actions",
-                        "jcr:title":"Actions",
+                        "jcr:title": "Actions",
                         "edit": {
                             "jcr:primaryType": "nt:unstructured",
                             "modal": true,
                             "title": "Edit File",
                             "icon": "pencil-f",
-                            "prefix": "/cms/file/edit.html"
+                            "prefix": "/cms/actions/edit/file.html"
                         },
                         "optimize": {
                             "jcr:primaryType": "nt:unstructured",
@@ -96,7 +102,7 @@
                             "modal": true,
                             "title": "Move / Copy File",
                             "icon": "move-alt",
-                            "prefix": "/cms/shared/movecopy.html"
+                            "prefix": "/cms/actions/shared/movecopy.html"
                         },
                         "version": {
                             "jcr:primaryType": "nt:unstructured",
@@ -104,141 +110,18 @@
                             "modal": true,
                             "title": "Manage Versions",
                             "icon": "history",
-                            "prefix": "/cms/shared/versions.html"
+                            "prefix": "/cms/actions/shared/versions.html"
                         },
                         "delete": {
                             "jcr:primaryType": "nt:unstructured",
                             "modal": true,
                             "title": "Delete File",
                             "icon": "trash",
-                            "prefix": "/cms/shared/delete.html"
+                            "prefix": "/cms/actions/shared/delete.html"
                         }
                     }
-				},
-				"types": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:File":{
-						"jcr:primaryType": "nt:unstructured",
-						"columns": {
-
-						}
-					},
-					"sling:OrderedFolder":{
-						"jcr:primaryType": "nt:unstructured",
-						"columns": {
-							"jcr:primaryType": "nt:unstructured",
-							"name": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/name",
-								"link": true,
-								"prefix": "/cms/static/content.html"
-							},
-							"title": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/text",
-								"property": "jcr:content/jcr:title",
-								"type": "String"
-							},
-							"publish": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/publish"
-							},
-							"type": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/static",
-								"value": "Folder"
-							},
-							"lastModified": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
-								"subPath": "jcr:content/"
-							},
-							"actions": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/actions",
-								"edit": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Edit Folder",
-									"icon": "pencil-f",
-									"prefix": "/cms/folder/edit.html"
-								},
-								"movecopy": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Move / Copy Folder",
-									"icon": "move-alt",
-									"prefix": "/cms/shared/movecopy.html"
-								},
-								"delete": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Delete Folder",
-									"icon": "trash",
-									"prefix": "/cms/shared/delete.html"
-								}
-							}
-						}
-					},
-					"sling:Folder":{
-						"jcr:primaryType": "nt:unstructured",
-						"columns": {
-							"jcr:primaryType": "nt:unstructured",
-							"name": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/name",
-								"link": true,
-								"prefix": "/cms/static/content.html"
-							},
-							"title": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/text",
-								"property": "jcr:content/jcr:title",
-								"type": "String"
-							},
-							"publish": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/publish"
-							},
-							"type": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/static",
-								"value": "Folder"
-							},
-							"lastModified": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
-								"subPath": "jcr:content/"
-							},
-							"actions": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/actions",
-								"edit": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Edit Folder",
-									"icon": "pencil-f",
-									"prefix": "/cms/folder/edit.html"
-								},
-								"movecopy": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Move / Copy Folder",
-									"icon": "move-alt",
-									"prefix": "/cms/shared/movecopy.html"
-								},
-								"delete": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Delete Folder",
-									"icon": "trash",
-									"prefix": "/cms/shared/delete.html"
-								}
-							}
-						}
-					}
-				}
-			}
-		}
-	}
+                }
+            }
+        }
+    }
 }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/taxonomy/create.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/taxonomy/create.json
deleted file mode 100644
index 88a7528..0000000
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/taxonomy/create.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Create Taxonomy",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Create Taxonomy</h3>"
-			},
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"actionSuffix": "/*",
-				"button": "Create Taxonomy",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:resourceType": "sling-cms/components/general/container",
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Title",
-						"name": "jcr:title",
-						"required": true
-					},
-					"name": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Name",
-						"name": ":name"
-					},
-					"nameParam": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": ":nameParam",
-						"value": "jcr:title"
-					},
-					"primaryType": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": "jcr:primaryType",
-						"value": "sling:Taxonomy"
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/taxonomy/edit.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/taxonomy/edit.json
deleted file mode 100644
index 3da06ed..0000000
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/taxonomy/edit.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Edit Taxonomy Item",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Edit Taxonomy Item</h3>"
-			},
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"button": "Update Taxonomy",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:resourceType": "sling-cms/components/general/container",
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Title",
-						"name": "jcr:title",
-						"required": true
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/taxonomy/list.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/taxonomy/list.json
index 5d4d4c5..0b69881 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/taxonomy/list.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/taxonomy/list.json
@@ -1,102 +1,87 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Taxonomy",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"contentactions": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentactions",
-				"actions": {
-					"taxonomy": {
-						"jcr:primaryType": "nt:unstructured",
-						"label": "Taxonomy Item",
-						"prefix": "/cms/taxonomy/create.html"
-					}
-				}
-			},
-			"contentbreadcrumb": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentbreadcrumb",
-				"depth": 2,
-				"prefix": "/cms/taxonomy/list.html"
-			},
-			"contenttable": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contenttable",
-				"columns": {
-					"jcr:primaryType": "nt:unstructured",
-					"name": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Name"
-					},
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Title"
-					},
-					"lastModified": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Last Modified"
-					},
-					"actions": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Actions"
-					}
-				},
-				"types": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:Taxonomy":{
-						"jcr:primaryType": "nt:unstructured",
-						"columns": {
-							"jcr:primaryType": "nt:unstructured",
-							"name": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/name",
-								"link": true,
-								"prefix": "/cms/taxonomy/list.html"
-							},
-							"title": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/text",
-								"property": "jcr:title"
-							},
-							"lastModified": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
-								"subPath": ""
-							},
-							"actions": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/actions",
-								"edit": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Edit Taxonomy Item",
-									"icon": "pencil-f",
-									"prefix": "/cms/taxonomy/edit.html"
-								},
-								"movecopy": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Move / Copy Taxonomy Item",
-									"icon": "move-alt",
-									"prefix": "/cms/shared/movecopy.html"
-								},
-								"delete": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Delete Taxonomy Item",
-									"icon": "trash",
-									"prefix": "/cms/shared/delete.html"
-								}
-							}
-						}
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/base",
+        "jcr:title": "Taxonomy",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "contentactions": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contentactions",
+                "actions": {
+                    "taxonomy": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "label": "Taxonomy Item",
+                        "prefix": "/cms/actions/create/taxonomy.html"
+                    }
+                }
+            },
+            "contentbreadcrumb": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contentbreadcrumb",
+                "depth": 2,
+                "prefix": "/cms/taxonomy/list.html"
+            },
+            "contenttable": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contenttable",
+                "columns": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "resourceTypes": [
+                        "sling:Page",
+                        "sling:Taxonomy",
+                        "sling:File",
+                        "sling:OrderedFolder",
+                        "sling:Folder"
+                    ],
+                    "name": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/name",
+                        "link": true,
+                        "jcr:title": "Name",
+                        "prefix": "/cms/taxonomy/list.html"
+                    },
+                    "jcr:title": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/text",
+                        "jcr:title": "Title",
+                        "property": "jcr:title"
+                    },
+                    "lastModified": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
+                        "jcr:title": "Last Modified",
+                        "subPath": ""
+                    },
+                    "actions": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/actions",
+                        "edit": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "modal": true,
+                            "jcr:title": "Edit Taxonomy Item",
+                            "icon": "pencil-f",
+                            "prefix": "/cms/actions/edit/taxonomy.html"
+                        },
+                        "movecopy": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "modal": true,
+                            "jcr:title": "Move / Copy Taxonomy Item",
+                            "icon": "move-alt",
+                            "prefix": "/cms/actions/shared/movecopy.html"
+                        },
+                        "delete": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "modal": true,
+                            "jcr:title": "Delete Taxonomy Item",
+                            "icon": "trash",
+                            "prefix": "/cms/actions/shared/delete.html"
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/template/edit.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/template/edit.json
deleted file mode 100644
index c406ac7..0000000
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/template/edit.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Configure Site",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h2>Edit Template</h2>"
-			},
-			"siteconfig": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/templateeditor"
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/templates/sitegroup.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/templates/sitegroup.json
deleted file mode 100644
index 8533f67..0000000
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/templates/sitegroup.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-    "jcr:contentType": "nt:unstructured",
-    "sling:resourceType" : "cms/template"
-    
-}


[sling-org-apache-sling-app-cms] 09/17: SLING-7900 UI Updates

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

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

commit 3b977b1fd5325d74b2a021c8f11e9848caf89e91
Author: Jason E Bailey <je...@apache.org>
AuthorDate: Fri Sep 14 16:19:46 2018 -0400

    SLING-7900 UI Updates
    
    formatting updates
    separated actions from views
    testing breadcrumb/menu integration
---
 core/pom.xml                                       |   6 +
 .../apache/sling/cms/core/models/BaseModel.java    |  86 ++++++
 .../{AvailableActions.java => Action.java}         |  62 +++--
 .../{AvailableActions.java => Actions.java}        |  95 +++----
 .../cms/core/models/components/Breadcrumbs.java    |  40 +--
 .../cms/core/models/components/ContentTable.java   |   7 +-
 .../models/components/column/LastModified.java     |  63 +++++
 .../cms/core/models/components/column/Name.java    |  37 +++
 ui/pom.xml                                         |   2 +-
 ui/src/main/resources/jcr_root/conf/global.json    | 276 +++++++++----------
 ui/src/main/resources/jcr_root/content.json        |   7 -
 .../content/sling-cms/errorhandling/401.json       |  34 +--
 .../content/sling-cms/errorhandling/403.json       |  34 +--
 .../content/sling-cms/errorhandling/404.json       |  34 +--
 .../content/sling-cms/errorhandling/default.json   |  34 +--
 .../jcr_root/libs/sling-cms/actions/nt%3Afile.json |   7 +-
 .../{sling%3ASite.json => sling%3AConfig.json}     |  10 +-
 .../libs/sling-cms/actions/sling%3AFile.json       |   7 +-
 .../libs/sling-cms/actions/sling%3AFolder.json     |   4 +-
 .../libs/sling-cms/actions/sling%3AMapping.json    |   1 +
 .../sling-cms/actions/sling%3AOrderedFolder.json   |   6 +-
 .../libs/sling-cms/actions/sling%3APage.json       |   3 +-
 .../libs/sling-cms/actions/sling%3ASite.json       |   4 +-
 .../{sling%3AFolder.json => sling%3ATaxonomy.json} |   9 +-
 .../name.jsp => breadcrumbmenu/breadcrumbmenu.jsp} |  24 +-
 .../components/cms/breadcrumbmenu/edit.json        |  31 +++
 .../components/cms/columns/actions/actions.jsp     |  35 +--
 .../cms/columns/lastmodified/lastmodified.jsp      |  10 +-
 .../sling-cms/components/cms/columns/name/name.jsp |   5 +-
 .../cms/contentactions/contentactions.jsp          |  32 ++-
 .../name/name.jsp => resource/action/action.jsp}   |  22 +-
 .../components/cms/staticnav/staticnav.jsp         |   6 +-
 .../libs/sling-cms/components/pages/base/nav.jsp   |   1 -
 .../sling-cms/content/actions/create/config.json   |   5 -
 .../content/actions/create/sitegroup.json          | 129 +++++----
 .../sling-cms/content/actions/create/taxonomy.json |   5 -
 .../sling-cms/content/actions/create/template.json |   5 -
 .../libs/sling-cms/content/actions/edit/site.json  | 121 ++++----
 .../sling-cms/content/actions/edit/sitegroup.json  |   5 -
 .../sling-cms/content/actions/edit/taxonomy.json   |   2 +-
 .../content/actions/optimize/optimize.json         |   7 +-
 .../libs/sling-cms/content/config/edit.json        |  46 ++--
 .../libs/sling-cms/content/config/list.json        |  12 +-
 .../libs/sling-cms/content/mappings/list.json      | 304 ++++++++++-----------
 .../libs/sling-cms/content/site/content.json       |  11 +-
 .../libs/sling-cms/content/site/sites.json         |  21 +-
 .../libs/sling-cms/content/siteconfig/editor.json  |  71 ++---
 .../libs/sling-cms/content/static/content.json     |   9 +-
 .../libs/sling-cms/content/taxonomy/list.json      |  24 +-
 49 files changed, 960 insertions(+), 851 deletions(-)

diff --git a/core/pom.xml b/core/pom.xml
index d936bb1..2b20be9 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -185,6 +185,12 @@
             <artifactId>org.apache.sling.cms.api</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.xss</artifactId>
+            <scope>provided</scope>
+            <version>2.0.0</version>
+        </dependency>
     </dependencies>
     <properties>
         <sling.java.version>8</sling.java.version>
diff --git a/core/src/main/java/org/apache/sling/cms/core/models/BaseModel.java b/core/src/main/java/org/apache/sling/cms/core/models/BaseModel.java
new file mode 100644
index 0000000..fa07fee
--- /dev/null
+++ b/core/src/main/java/org/apache/sling/cms/core/models/BaseModel.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.cms.core.models;
+
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.models.annotations.DefaultInjectionStrategy;
+import org.apache.sling.models.annotations.Model;
+import org.apache.sling.models.annotations.injectorspecific.OSGiService;
+import org.apache.sling.models.annotations.injectorspecific.Self;
+import org.apache.sling.xss.XSSAPI;
+
+@Model(adaptables = { SlingHttpServletRequest.class,
+        Resource.class }, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
+public class BaseModel {
+
+    @OSGiService
+    public XSSAPI xss;
+
+    @Inject
+    @Self
+    public Resource resource;
+
+    @Inject
+    @Self
+    public SlingHttpServletRequest slingRequest;
+
+    private ValueMap valueMap;
+
+    @PostConstruct
+    public void baseResourceModel() {
+        if (resource == null) {
+            resource = slingRequest.getResource();
+        }
+        valueMap = resource.getValueMap();
+    }
+
+    /**
+     * Convenience method for scripting languages such as the JSP EL.
+     * 
+     * @param key
+     * @return
+     */
+    public String get(String key) {
+        return valueMap.get(key, "");
+    }
+
+    /**
+     * Convenience method for scripting languages such as the JSP EL.
+     * 
+     * @param key
+     * @return
+     */
+    public <T> T get(String key, T def) {
+        return valueMap.get(key, def);
+    }
+    
+    /**
+     * Convenience method for scripting languages such as the JSP EL.
+     * 
+     * @param key
+     * @return
+     */
+    public <T> T get(String key, Class<T> def) {
+        return valueMap.get(key, def);
+    }
+
+}
diff --git a/core/src/main/java/org/apache/sling/cms/core/models/components/AvailableActions.java b/core/src/main/java/org/apache/sling/cms/core/models/components/Action.java
similarity index 50%
copy from core/src/main/java/org/apache/sling/cms/core/models/components/AvailableActions.java
copy to core/src/main/java/org/apache/sling/cms/core/models/components/Action.java
index 13e4770..bde08fe 100644
--- a/core/src/main/java/org/apache/sling/cms/core/models/components/AvailableActions.java
+++ b/core/src/main/java/org/apache/sling/cms/core/models/components/Action.java
@@ -16,37 +16,53 @@
  */
 package org.apache.sling.cms.core.models.components;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-
+import javax.annotation.PostConstruct;
 import javax.inject.Inject;
 
-import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;
+import org.apache.sling.cms.core.models.BaseModel;
 import org.apache.sling.models.annotations.DefaultInjectionStrategy;
 import org.apache.sling.models.annotations.Model;
-import org.apache.sling.models.annotations.injectorspecific.Self;
 
-@Model(adaptables = SlingHttpServletRequest.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
-public class AvailableActions {
+@Model(adaptables = Resource.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
+public class Action extends BaseModel {
+
+    @Inject
+    boolean modal;
 
     @Inject
-    @Self
-    SlingHttpServletRequest slingRequest;
-    
-    public List<Resource> getChildren() {
-        System.out.println(slingRequest.getContextPath());
-        System.out.println(slingRequest.getResource().getPath());
-        String type = slingRequest.getResource().getValueMap().get("jcr:primaryType", "sling:File");
-        System.out.println(type);
-        Resource resource = slingRequest.getResourceResolver().resolve("/libs/sling-cms/actions/"+type);
-        
-        List<Resource> list = new ArrayList<>();
-        resource.listChildren().forEachRemaining(list::add);
-        System.out.println(list.toString());
-        return list;
+    boolean target;
+
+    @PostConstruct
+    public void init() {
+        System.out.println("here");
+    }
+
+    public String getClasses() {
+        String response = "button";
+        if (modal) {
+            response += "  Fetch-Modal";
+        }
+        return response;
+    }
+
+    public String getTitle() {
+        return xss.encodeForHTMLAttr(get("title"));
+    }
+
+    public String getDataPath() {
+        return get("ajaxPath", ".Main-Content form");
+    }
+
+    public String getIcon() {
+        return String.format("jam jam-%s", get("icon", "file"));
+    }
+
+    public String getTarget() {
+        if (target) {
+            return "target='_blank'";
+        }
+        return "";
     }
 
 }
diff --git a/core/src/main/java/org/apache/sling/cms/core/models/components/AvailableActions.java b/core/src/main/java/org/apache/sling/cms/core/models/components/Actions.java
similarity index 68%
rename from core/src/main/java/org/apache/sling/cms/core/models/components/AvailableActions.java
rename to core/src/main/java/org/apache/sling/cms/core/models/components/Actions.java
index 13e4770..067c078 100644
--- a/core/src/main/java/org/apache/sling/cms/core/models/components/AvailableActions.java
+++ b/core/src/main/java/org/apache/sling/cms/core/models/components/Actions.java
@@ -1,52 +1,43 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.sling.cms.core.models.components;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-
-import javax.inject.Inject;
-
-import org.apache.sling.api.SlingHttpServletRequest;
-import org.apache.sling.api.resource.Resource;
-import org.apache.sling.models.annotations.DefaultInjectionStrategy;
-import org.apache.sling.models.annotations.Model;
-import org.apache.sling.models.annotations.injectorspecific.Self;
-
-@Model(adaptables = SlingHttpServletRequest.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
-public class AvailableActions {
-
-    @Inject
-    @Self
-    SlingHttpServletRequest slingRequest;
-    
-    public List<Resource> getChildren() {
-        System.out.println(slingRequest.getContextPath());
-        System.out.println(slingRequest.getResource().getPath());
-        String type = slingRequest.getResource().getValueMap().get("jcr:primaryType", "sling:File");
-        System.out.println(type);
-        Resource resource = slingRequest.getResourceResolver().resolve("/libs/sling-cms/actions/"+type);
-        
-        List<Resource> list = new ArrayList<>();
-        resource.listChildren().forEachRemaining(list::add);
-        System.out.println(list.toString());
-        return list;
-    }
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.cms.core.models.components;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.inject.Inject;
+
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.cms.core.models.BaseModel;
+import org.apache.sling.models.annotations.DefaultInjectionStrategy;
+import org.apache.sling.models.annotations.Model;
+import org.apache.sling.models.annotations.injectorspecific.Self;
+
+@Model(adaptables = SlingHttpServletRequest.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
+public class Actions extends BaseModel {
+
+    
+    public List<Resource> getChildren() {
+        String type = get("jcr:primaryType", "sling:File");
+        Resource target = slingRequest.getResourceResolver().resolve("/libs/sling-cms/actions/"+type);
+        List<Resource> list = new ArrayList<>();
+        target.listChildren().forEachRemaining(list::add);
+        return list;
+    }
+
+}
diff --git a/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java b/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java
index c4abe0c..d119638 100644
--- a/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java
+++ b/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java
@@ -25,11 +25,13 @@ import javax.inject.Inject;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.cms.core.models.BaseModel;
 import org.apache.sling.models.annotations.Default;
 import org.apache.sling.models.annotations.DefaultInjectionStrategy;
 import org.apache.sling.models.annotations.Model;
 import org.apache.sling.models.annotations.Via;
 import org.apache.sling.models.annotations.injectorspecific.Self;
+
 /**
  * Logic for the Suffix BreadCrumb Component
  * 
@@ -37,43 +39,34 @@ import org.apache.sling.models.annotations.injectorspecific.Self;
  *
  */
 @Model(adaptables = SlingHttpServletRequest.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
-public class Breadcrumbs {
+public class Breadcrumbs extends BaseModel {
 
     @Inject
     @Via("resource")
-    @Default(intValues=1)
+    @Default(intValues = 2)
     int depth;
 
-    @Inject
-    Resource resource;
-
-    @Inject
-    @Via("resource")
-    @Default(values="../..")
-    String prefix;
 
     @Inject
     @Via("resource")
     @Default(values = "jcr:title")
     String titleProp;
 
-    @Self
-    SlingHttpServletRequest servletRequest;
-
     Resource suffixResource;
 
     List<PathData> pathData = new ArrayList<>();
 
     @PostConstruct
     public void postConstruct() {
-        suffixResource = servletRequest.getRequestPathInfo().getSuffixResource();
+        suffixResource = slingRequest.getRequestPathInfo().getSuffixResource();
         if (suffixResource == null) {
             return;
         }
+        String prefix = slingRequest.getPathInfo();
         boolean first = true;
         while (suffixResource.getParent() != null) {
             String suffix = suffixResource.getPath();
-            pathData.add(0, new PathData(prefix + suffix, getTitle(suffixResource),first));
+            pathData.add(0, new PathData(suffix, prefix + getTitle(suffixResource), first));
             if (first) {
                 first = false;
             }
@@ -85,22 +78,17 @@ public class Breadcrumbs {
     }
 
     private String getTitle(Resource resource) {
-        ValueMap map = resource.getValueMap();
-        String title = map.get("jcr:title", String.class);
+        String title = get("jcr:title", String.class);
         if (title != null) {
             return title;
         }
-        title = map.get("jcr:content/jcr:title", String.class);
+        title = get("jcr:content/jcr:title", String.class);
         if (title != null) {
             return title;
         }
         return resource.getName();
     }
 
-    public String getTitle() {
-        return null;
-    }
-
     public List<PathData> getPathData() {
         return pathData;
     }
@@ -114,7 +102,7 @@ public class Breadcrumbs {
         public PathData(String href, String title, boolean first) {
             this.href = href;
             this.title = title;
-            this.first= first;
+            this.first = first;
         }
 
         public String getHref() {
@@ -126,21 +114,19 @@ public class Breadcrumbs {
         public String getTitle() {
             return title;
         }
-        
+
         public String getAria() {
             if (first) {
                 return "aria-current='page'";
             }
             return "";
         }
-        
+
         public String getClassAttr() {
             if (first) {
-                return "class='is-active'";
+                return "class='has-background-grey-lighter'";
             }
             return "";
         }
-
     }
-
 }
diff --git a/core/src/main/java/org/apache/sling/cms/core/models/components/ContentTable.java b/core/src/main/java/org/apache/sling/cms/core/models/components/ContentTable.java
index cbd611e..fb72f28 100644
--- a/core/src/main/java/org/apache/sling/cms/core/models/components/ContentTable.java
+++ b/core/src/main/java/org/apache/sling/cms/core/models/components/ContentTable.java
@@ -27,14 +27,14 @@ import javax.inject.Inject;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.cms.core.models.BaseModel;
 import org.apache.sling.models.annotations.Default;
 import org.apache.sling.models.annotations.DefaultInjectionStrategy;
 import org.apache.sling.models.annotations.Model;
 import org.apache.sling.models.annotations.Via;
-import org.apache.sling.models.annotations.injectorspecific.Self;
 
 @Model(adaptables = SlingHttpServletRequest.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
-public class ContentTable {
+public class ContentTable extends BaseModel {
 
     @Inject
     @Via("resource")
@@ -47,12 +47,9 @@ public class ContentTable {
 
     private String[] types;
 
-    @Self
-    SlingHttpServletRequest slingRequest;
 
     @PostConstruct
     public void init() {
-        Resource resource = slingRequest.getResource();
         ValueMap data = resource.getChild("columns").getValueMap();
         types = data.get("resourceTypes", new String[]{});
     }
diff --git a/core/src/main/java/org/apache/sling/cms/core/models/components/column/LastModified.java b/core/src/main/java/org/apache/sling/cms/core/models/components/column/LastModified.java
new file mode 100644
index 0000000..ab653b3
--- /dev/null
+++ b/core/src/main/java/org/apache/sling/cms/core/models/components/column/LastModified.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.cms.core.models.components.column;
+
+import java.util.Calendar;
+
+import javax.annotation.PostConstruct;
+
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.cms.core.models.BaseModel;
+import org.apache.sling.models.annotations.DefaultInjectionStrategy;
+import org.apache.sling.models.annotations.Model;
+
+@Model(adaptables = Resource.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
+public class LastModified extends BaseModel {
+    
+    private String subPath = "";
+    
+    @PostConstruct
+    private void init() {
+        if (resource.getChild("jcr:content") != null) {
+            subPath = "jcr:content/";
+        }
+    }
+    
+    public String getLastModified() {
+        Calendar cal = get(subPath +"jcr:lastModified",Calendar.class);
+        if (cal == null) {
+            cal = get(subPath +"jcr:created",Calendar.class);
+            if (cal == null) {
+                return "";
+            }
+        }
+        return xss.encodeForHTML(cal.getTime().toString());
+    }
+    
+    public String getLastModifiedBy() {
+        String name = get(subPath+"jcr:lastModifiedBy",String.class);
+        if (name == null) {
+            name = get(subPath+"jcr:createdBy","");
+        }
+        return xss.encodeForHTML(name);
+    }
+    
+    public String getTitle() {
+        return getLastModified()+" - " + getLastModifiedBy();
+    }
+
+}
diff --git a/core/src/main/java/org/apache/sling/cms/core/models/components/column/Name.java b/core/src/main/java/org/apache/sling/cms/core/models/components/column/Name.java
new file mode 100644
index 0000000..92f140f
--- /dev/null
+++ b/core/src/main/java/org/apache/sling/cms/core/models/components/column/Name.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.cms.core.models.components.column;
+
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.cms.core.models.BaseModel;
+import org.apache.sling.models.annotations.DefaultInjectionStrategy;
+import org.apache.sling.models.annotations.Model;
+
+@Model(adaptables = Resource.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
+public class Name extends BaseModel {
+    
+    public String getIcon() {
+        if (resource.isResourceType("nt:file")) {
+            return "document";
+        }
+        if (resource.isResourceType("nt:folder")) {
+            return "folder";
+        }
+        return "link";
+    }
+
+}
diff --git a/ui/pom.xml b/ui/pom.xml
index 4a031e4..662a292 100644
--- a/ui/pom.xml
+++ b/ui/pom.xml
@@ -121,7 +121,7 @@
 									<pluginExecutionFilter>
 										<groupId>com.github.eirslett</groupId>
 										<artifactId>frontend-maven-plugin</artifactId>
-										<versionRange>[1.0.0,)</versionRange>
+                                        <versionRange>[1.6.0,)</versionRange>
 										<goals>
 											<goal>install-node-and-npm</goal>
 											<goal>npm</goal>
diff --git a/ui/src/main/resources/jcr_root/conf/global.json b/ui/src/main/resources/jcr_root/conf/global.json
index 37e62ed..12f7383 100644
--- a/ui/src/main/resources/jcr_root/conf/global.json
+++ b/ui/src/main/resources/jcr_root/conf/global.json
@@ -1,139 +1,139 @@
 {
-	"jcr:primaryType": "sling:OrderedFolder",
-	"jcr:content": {
-		"jcr:primaryType": "nt:unstructured",
-		"jcr:title": "Global"
-	},
-	"files": {
-		"jcr:primaryType": "sling:OrderedFolder",
-		"jcr:content": {
-			"jcr:primaryType": "nt:unstructured",
-			"jcr:title": "File Configurations"
-		},
-		"editors": {
-			"jcr:primaryType": "sling:OrderedFolder",
-			"jcr:content": {
-				"jcr:primaryType": "nt:unstructured",
-				"jcr:title": "File Editor"
-			},
-			"default": {
-				"jcr:primaryType": "sling:Config",
-				"jcr:title": "Default File Editor",
-				"sling:resourceType": "sling-cms/components/cms/fileeditorconfig",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"required": false,
-						"name": "jcr:content/jcr:title",
-						"type": "text",
-						"label": "Title",
-						"sling:resourceType": "sling-cms/components/editor/fields/text"
-					},
-					"jcrmimeType": {
-						"jcr:primaryType": "nt:unstructured",
-						"required": true,
-						"name": "jcr:content/jcr:mimeType",
-						"type": "text",
-						"label": "MIME Type",
-						"sling:resourceType": "sling-cms/components/editor/fields/text"
-					},
-					"licensing": {
-						"jcr:primaryType": "nt:unstructured",
-						"required": false,
-						"name": "jcr:content/licensing",
-						"type": "text",
-						"label": "Licensing",
-						"sling:resourceType": "sling-cms/components/editor/fields/text"
-					},
-					"taxonomy": {
-						"jcr:primaryType": "nt:unstructured",
-						"name": "jcr:content/sling:taxonomy",
-						"label": "Taxonomy",
-						"sling:resourceType": "sling-cms/components/editor/fields/taxonomy"
-					},
-					"taxonomyTypeHint": {
-						"jcr:primaryType": "nt:unstructured",
-						"name": "jcr:content/sling:taxonomy@TypeHint",
-						"value": "String[]",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden"
-					},
-					"published": {
-						"jcr:primaryType": "nt:unstructured",
-						"options": "Yes=true, No=false",
-						"name": "jcr:content/published",
-						"label": "Published",
-						"sling:resourceType": "sling-cms/components/editor/fields/select"
-					},
-					"publishedTypeHint": {
-						"jcr:primaryType": "nt:unstructured",
-						"name": "jcr:content/published@TypeHint",
-						"value": "Boolean",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden"
-					}
-				}
-			}
-		}
-	},
-	"site": {
-		"jcr:primaryType": "sling:Config",
-		"sling:resourceType": "sling-cms/components/cms/siteconfig",
-		"jcr:title": "Default Site Configuration",
-		"rewrite": {
-			"jcr:primaryType": "nt:unstructured",
-			"doctype": "<!DOCTYPE html>",
-			"attributes": [
-				"action",
-				"href",
-				"src"
-			]
-		},
-		"templates": {
-			"jcr:primaryType": "nt:unstructured",
-			"base-page": {
-				"jcr:primaryType": "nt:unstructured",
-				"jcr:title": "Base Page",
-				"template": "{\r\n  \"jcr:primaryType\": \"sling:Page\",\r\n  \"jcr:content\": {\r\n    \"jcr:primaryType\": \"nt:unstructured\",\r\n    \"jcr:title\": \"{{title}}\",\r\n    \"sling:template\": \"/conf/global/site/templates/base-page\",\r\n    \"sling:resourceType\": \"reference/components/pages/base\",\r\n    \"published\": false\r\n  }\r\n}",
-				"availableComponentTypes": [
-					"General"
-				],
-				"allowedPaths": [
-					"/content/apache/apache-sling-org.*"
-				],
-				"sling:resourceType": "sling-cms/components/cms/pagetemplate",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"text": {
-						"jcr:primaryType": "nt:unstructured",
-						"required": true,
-						"name": "title",
-						"type": "text",
-						"label": "Title",
-						"sling:resourceType": "sling-cms/components/editor/fields/text"
-					},
-					"text_1147023191": {
-						"jcr:primaryType": "nt:unstructured",
-						"required": true,
-						"name": ":name",
-						"type": "text",
-						"label": "Name",
-						"sling:resourceType": "sling-cms/components/editor/fields/text"
-					}
-				},
-				"componentConfigurations": {
-					"jcr:primaryType": "nt:unstructured",
-					"componentconfig": {
-						"jcr:primaryType": "nt:unstructured",
-						"type": "reference/components/general/columncontrol",
-						"containerclass": "container",
-						"columns": [
-							"50-50=col-md-6 col-md-6",
-							"100=col-md-12"
-						],
-						"sling:resourceType": "sling-cms/components/cms/componentconfig"
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:OrderedFolder",
+    "jcr:content": {
+        "jcr:primaryType": "nt:unstructured",
+        "jcr:title": "Global"
+    },
+    "files": {
+        "jcr:primaryType": "sling:OrderedFolder",
+        "jcr:content": {
+            "jcr:primaryType": "nt:unstructured",
+            "jcr:title": "File Configurations"
+        },
+        "editors": {
+            "jcr:primaryType": "sling:OrderedFolder",
+            "jcr:content": {
+                "jcr:primaryType": "nt:unstructured",
+                "jcr:title": "File Editor"
+            },
+            "default": {
+                "jcr:primaryType": "sling:Config",
+                "jcr:title": "Default File Editor",
+                "sling:resourceType": "sling-cms/components/cms/fileeditorconfig",
+                "fields": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "title": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "required": false,
+                        "name": "jcr:content/jcr:title",
+                        "type": "text",
+                        "label": "Title",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text"
+                    },
+                    "jcrmimeType": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "required": true,
+                        "name": "jcr:content/jcr:mimeType",
+                        "type": "text",
+                        "label": "MIME Type",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text"
+                    },
+                    "licensing": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "required": false,
+                        "name": "jcr:content/licensing",
+                        "type": "text",
+                        "label": "Licensing",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text"
+                    },
+                    "taxonomy": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "name": "jcr:content/sling:taxonomy",
+                        "label": "Taxonomy",
+                        "sling:resourceType": "sling-cms/components/editor/fields/taxonomy"
+                    },
+                    "taxonomyTypeHint": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "name": "jcr:content/sling:taxonomy@TypeHint",
+                        "value": "String[]",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden"
+                    },
+                    "published": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "options": "Yes=true, No=false",
+                        "name": "jcr:content/published",
+                        "label": "Published",
+                        "sling:resourceType": "sling-cms/components/editor/fields/select"
+                    },
+                    "publishedTypeHint": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "name": "jcr:content/published@TypeHint",
+                        "value": "Boolean",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden"
+                    }
+                }
+            }
+        }
+    },
+    "site": {
+        "jcr:primaryType": "sling:Config",
+        "sling:resourceType": "sling-cms/components/cms/siteconfig",
+        "jcr:title": "Default Site Configuration",
+        "rewrite": {
+            "jcr:primaryType": "nt:unstructured",
+            "doctype": "<!DOCTYPE html>",
+            "attributes": [
+                "action",
+                "href",
+                "src"
+            ]
+        },
+        "templates": {
+            "jcr:primaryType": "nt:unstructured",
+            "base-page": {
+                "jcr:primaryType": "nt:unstructured",
+                "jcr:title": "Base Page",
+                "template": "{\r\n  \"jcr:primaryType\": \"sling:Page\",\r\n  \"jcr:content\": {\r\n    \"jcr:primaryType\": \"nt:unstructured\",\r\n    \"jcr:title\": \"{{title}}\",\r\n    \"sling:template\": \"/conf/global/site/templates/base-page\",\r\n    \"sling:resourceType\": \"reference/components/pages/base\",\r\n    \"published\": false\r\n  }\r\n}",
+                "availableComponentTypes": [
+                    "General"
+                ],
+                "allowedPaths": [
+                    "/content/apache/apache-sling-org.*"
+                ],
+                "sling:resourceType": "sling-cms/components/cms/pagetemplate",
+                "fields": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "text": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "required": true,
+                        "name": "title",
+                        "type": "text",
+                        "label": "Title",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text"
+                    },
+                    "text_1147023191": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "required": true,
+                        "name": ":name",
+                        "type": "text",
+                        "label": "Name",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text"
+                    }
+                },
+                "componentConfigurations": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "componentconfig": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "type": "reference/components/general/columncontrol",
+                        "containerclass": "container",
+                        "columns": [
+                            "50-50=col-md-6 col-md-6",
+                            "100=col-md-12"
+                        ],
+                        "sling:resourceType": "sling-cms/components/cms/componentconfig"
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/content.json b/ui/src/main/resources/jcr_root/content.json
deleted file mode 100644
index 0f29c12..0000000
--- a/ui/src/main/resources/jcr_root/content.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-    "jcr:primaryType": "sling:Folder",
-    "allowedResourceTypes": [
-        "sling:Site",
-        "sling:OrderedFolder"
-    ]
-}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/content/sling-cms/errorhandling/401.json b/ui/src/main/resources/jcr_root/content/sling-cms/errorhandling/401.json
index ce41d15..7ed027a 100644
--- a/ui/src/main/resources/jcr_root/content/sling-cms/errorhandling/401.json
+++ b/ui/src/main/resources/jcr_root/content/sling-cms/errorhandling/401.json
@@ -1,18 +1,18 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/error",
-		"jcr:title": "Unauthorized",
-		"jcr:primaryType": "nt:unstructured",
-		"center": true,
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Unauthorized</h3><p>You cannot access the requested resource.</p><p><a href=\"/system/sling/form/login\">Login?</a>"
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/error",
+        "jcr:title": "Unauthorized",
+        "jcr:primaryType": "nt:unstructured",
+        "center": true,
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "richtext": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<h3>Unauthorized</h3><p>You cannot access the requested resource.</p><p><a href=\"/system/sling/form/login\">Login?</a>"
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/content/sling-cms/errorhandling/403.json b/ui/src/main/resources/jcr_root/content/sling-cms/errorhandling/403.json
index e7685a3..c29719c 100644
--- a/ui/src/main/resources/jcr_root/content/sling-cms/errorhandling/403.json
+++ b/ui/src/main/resources/jcr_root/content/sling-cms/errorhandling/403.json
@@ -1,18 +1,18 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/error",
-		"jcr:title": "Forbidden",
-		"jcr:primaryType": "nt:unstructured",
-		"center": true,
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Forbidden</h3><p>You cannot access the requested resource.</p><p><a href=\"/system/sling/form/login\">Login?</a>"
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/error",
+        "jcr:title": "Forbidden",
+        "jcr:primaryType": "nt:unstructured",
+        "center": true,
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "richtext": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<h3>Forbidden</h3><p>You cannot access the requested resource.</p><p><a href=\"/system/sling/form/login\">Login?</a>"
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/content/sling-cms/errorhandling/404.json b/ui/src/main/resources/jcr_root/content/sling-cms/errorhandling/404.json
index 5faf31a..7a2acaf 100644
--- a/ui/src/main/resources/jcr_root/content/sling-cms/errorhandling/404.json
+++ b/ui/src/main/resources/jcr_root/content/sling-cms/errorhandling/404.json
@@ -1,18 +1,18 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/error",
-		"jcr:title": "Not Found",
-		"jcr:primaryType": "nt:unstructured",
-		"center": true,
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Not Found</h3><p>The requested content was not found.</p>"
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/error",
+        "jcr:title": "Not Found",
+        "jcr:primaryType": "nt:unstructured",
+        "center": true,
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "richtext": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<h3>Not Found</h3><p>The requested content was not found.</p>"
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/content/sling-cms/errorhandling/default.json b/ui/src/main/resources/jcr_root/content/sling-cms/errorhandling/default.json
index da21f25..7d25e3c 100644
--- a/ui/src/main/resources/jcr_root/content/sling-cms/errorhandling/default.json
+++ b/ui/src/main/resources/jcr_root/content/sling-cms/errorhandling/default.json
@@ -1,18 +1,18 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/error",
-		"jcr:title": "Exception",
-		"jcr:primaryType": "nt:unstructured",
-		"center": true,
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Unexpected Exception</h3><p>An unexpected exception occurred rendering the response.</p>"
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/error",
+        "jcr:title": "Exception",
+        "jcr:primaryType": "nt:unstructured",
+        "center": true,
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "richtext": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<h3>Unexpected Exception</h3><p>An unexpected exception occurred rendering the response.</p>"
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/nt%3Afile.json b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/nt%3Afile.json
index fc1963a..4f42e3f 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/nt%3Afile.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/nt%3Afile.json
@@ -1,11 +1,11 @@
 {
     "jcr:primaryType": "nt:unstructured",
-    "sling:resourceType": "sling-cms/components/cms/columns/actions",
     "edit": {
         "jcr:primaryType": "nt:unstructured",
         "modal": true,
         "title": "Edit File",
         "icon": "pencil-f",
+        "sling:resourceType": "sling-cms/components/cms/resource/action",
         "prefix": "/cms/actions/edit/file.html"
     },
     "optimize": {
@@ -13,12 +13,14 @@
         "modal": false,
         "title": "Optimize File",
         "icon": "archive",
+        "sling:resourceType": "sling-cms/components/cms/resource/action",
         "prefix": "/cms/actions/optimize/file.html"
     },
     "download": {
         "jcr:primaryType": "nt:unstructured",
         "modal": false,
         "title": "Download file",
+        "sling:resourceType": "sling-cms/components/cms/resource/action",
         "icon": "download"
     },
     "movecopy": {
@@ -26,6 +28,7 @@
         "modal": true,
         "title": "Move / Copy File",
         "icon": "move-alt",
+        "sling:resourceType": "sling-cms/components/cms/resource/action",
         "prefix": "/cms/actions/shared/movecopy.html"
     },
     "version": {
@@ -34,6 +37,7 @@
         "modal": true,
         "title": "Manage Versions",
         "icon": "history",
+        "sling:resourceType": "sling-cms/components/cms/resource/action",
         "prefix": "/cms/actions/shared/versions.html"
     },
     "delete": {
@@ -41,6 +45,7 @@
         "modal": true,
         "title": "Delete File",
         "icon": "trash",
+        "sling:resourceType": "sling-cms/components/cms/resource/action",
         "prefix": "/cms/actions/shared/delete.html"
     }
 }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3ASite.json b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AConfig.json
similarity index 69%
copy from ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3ASite.json
copy to ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AConfig.json
index 7a92041..14badd1 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3ASite.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AConfig.json
@@ -1,23 +1,23 @@
 {
-    "jcr:resourceType": "nt:unstructured",
+    "jcr:primaryType": "nt:unstructured",
     "edit": {
         "jcr:primaryType": "nt:unstructured",
         "modal": true,
-        "title": "Edit Site",
+        "title": "Edit Site Config",
         "icon": "pencil-f",
-        "prefix": "/cms/action/edit/site.html"
+        "prefix": "/cms/config/metadata.html"
     },
     "movecopy": {
         "jcr:primaryType": "nt:unstructured",
         "modal": true,
-        "title": "Move / Copy Site",
+        "title": "Move / Copy Config",
         "icon": "move-alt",
         "prefix": "/cms/actions/shared/movecopy.html"
     },
     "delete": {
         "jcr:primaryType": "nt:unstructured",
         "modal": true,
-        "title": "Delete the specified site",
+        "title": "Delete Site Config",
         "icon": "trash",
         "prefix": "/cms/actions/shared/delete.html"
     }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AFile.json b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AFile.json
index fc1963a..4f42e3f 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AFile.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AFile.json
@@ -1,11 +1,11 @@
 {
     "jcr:primaryType": "nt:unstructured",
-    "sling:resourceType": "sling-cms/components/cms/columns/actions",
     "edit": {
         "jcr:primaryType": "nt:unstructured",
         "modal": true,
         "title": "Edit File",
         "icon": "pencil-f",
+        "sling:resourceType": "sling-cms/components/cms/resource/action",
         "prefix": "/cms/actions/edit/file.html"
     },
     "optimize": {
@@ -13,12 +13,14 @@
         "modal": false,
         "title": "Optimize File",
         "icon": "archive",
+        "sling:resourceType": "sling-cms/components/cms/resource/action",
         "prefix": "/cms/actions/optimize/file.html"
     },
     "download": {
         "jcr:primaryType": "nt:unstructured",
         "modal": false,
         "title": "Download file",
+        "sling:resourceType": "sling-cms/components/cms/resource/action",
         "icon": "download"
     },
     "movecopy": {
@@ -26,6 +28,7 @@
         "modal": true,
         "title": "Move / Copy File",
         "icon": "move-alt",
+        "sling:resourceType": "sling-cms/components/cms/resource/action",
         "prefix": "/cms/actions/shared/movecopy.html"
     },
     "version": {
@@ -34,6 +37,7 @@
         "modal": true,
         "title": "Manage Versions",
         "icon": "history",
+        "sling:resourceType": "sling-cms/components/cms/resource/action",
         "prefix": "/cms/actions/shared/versions.html"
     },
     "delete": {
@@ -41,6 +45,7 @@
         "modal": true,
         "title": "Delete File",
         "icon": "trash",
+        "sling:resourceType": "sling-cms/components/cms/resource/action",
         "prefix": "/cms/actions/shared/delete.html"
     }
 }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AFolder.json b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AFolder.json
index f437acb..9067adc 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AFolder.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AFolder.json
@@ -1,11 +1,11 @@
 {
     "jcr:primaryType": "nt:unstructured",
-    "sling:resourceType": "sling-cms/components/cms/columns/actions",
     "edit": {
         "jcr:primaryType": "nt:unstructured",
         "modal": true,
         "title": "Edit Folder",
         "icon": "pencil-f",
+        "sling:resourceType": "sling-cms/components/cms/resource/action",
         "prefix": "/cms/actions/edit/folder.html"
     },
     "movecopy": {
@@ -13,6 +13,7 @@
         "modal": true,
         "title": "Move / Copy Folder",
         "icon": "move-alt",
+        "sling:resourceType": "sling-cms/components/cms/resource/action",
         "prefix": "/cms/actions/shared/movecopy.html"
     },
     "delete": {
@@ -20,6 +21,7 @@
         "modal": true,
         "title": "Delete Folder",
         "icon": "trash",
+        "sling:resourceType": "sling-cms/components/cms/resource/action",
         "prefix": "/cms/actions/shared/delete.html"
     }
 }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AMapping.json b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AMapping.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AMapping.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AOrderedFolder.json b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AOrderedFolder.json
index 6a91288..b6f64a9 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AOrderedFolder.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AOrderedFolder.json
@@ -1,11 +1,11 @@
 {
-    "jcr:primartyType": "nt:unstructured",
-    "sling:resourceType": "sling-cms/components/cms/columns/actions",
+    "jcr:primaryType": "nt:unstructured",
     "edit": {
         "jcr:primaryType": "nt:unstructured",
         "modal": true,
         "title": "Edit Site Group",
         "icon": "pencil-f",
+        "sling:resourceType": "sling-cms/components/cms/resource/action",
         "prefix": "/cms/actions/edit/sitegroup.html"
     },
     "movecopy": {
@@ -13,12 +13,14 @@
         "modal": true,
         "title": "Move / Copy Site Group",
         "icon": "move-alt",
+        "sling:resourceType": "sling-cms/components/cms/resource/action",
         "prefix": "/cms/actions/shared/movecopy.html"
     },
     "delete": {
         "jcr:primaryType": "nt:unstructured",
         "title": "Delete Site Group",
         "icon": "trash",
+        "sling:resourceType": "sling-cms/components/cms/resource/action",
         "prefix": "/cms/actions/shared/delete.html",
         "modal": true
     }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3APage.json b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3APage.json
index 356523e..369b7e5 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3APage.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3APage.json
@@ -1,4 +1,5 @@
 {
+    "jcr:primaryType": "nt:unstructured",
     "edit": {
         "jcr:primaryType": "nt:unstructured",
         "modal": false,
@@ -31,7 +32,7 @@
     "delete": {
         "jcr:primaryType": "nt:unstructured",
         "modal": true,
-        "title": "Delete the specified page",
+        "title": "Delete Page",
         "icon": "trash",
         "prefix": "/cms/shared/delete.html"
     }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3ASite.json b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3ASite.json
index 7a92041..154e16a 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3ASite.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3ASite.json
@@ -1,11 +1,11 @@
 {
-    "jcr:resourceType": "nt:unstructured",
+    "jcr:primaryType": "nt:unstructured",
     "edit": {
         "jcr:primaryType": "nt:unstructured",
         "modal": true,
         "title": "Edit Site",
         "icon": "pencil-f",
-        "prefix": "/cms/action/edit/site.html"
+        "prefix": "/cms/actions/edit/site.html"
     },
     "movecopy": {
         "jcr:primaryType": "nt:unstructured",
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AFolder.json b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3ATaxonomy.json
similarity index 69%
copy from ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AFolder.json
copy to ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3ATaxonomy.json
index f437acb..af5eec7 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AFolder.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3ATaxonomy.json
@@ -1,24 +1,23 @@
 {
     "jcr:primaryType": "nt:unstructured",
-    "sling:resourceType": "sling-cms/components/cms/columns/actions",
     "edit": {
         "jcr:primaryType": "nt:unstructured",
         "modal": true,
-        "title": "Edit Folder",
+        "jcr:title": "Edit Taxonomy Item",
         "icon": "pencil-f",
-        "prefix": "/cms/actions/edit/folder.html"
+        "prefix": "/cms/actions/edit/taxonomy.html"
     },
     "movecopy": {
         "jcr:primaryType": "nt:unstructured",
         "modal": true,
-        "title": "Move / Copy Folder",
+        "jcr:title": "Move / Copy Taxonomy Item",
         "icon": "move-alt",
         "prefix": "/cms/actions/shared/movecopy.html"
     },
     "delete": {
         "jcr:primaryType": "nt:unstructured",
         "modal": true,
-        "title": "Delete Folder",
+        "jcr:title": "Delete Taxonomy Item",
         "icon": "trash",
         "prefix": "/cms/actions/shared/delete.html"
     }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/name/name.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/breadcrumbmenu/breadcrumbmenu.jsp
similarity index 62%
copy from ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/name/name.jsp
copy to ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/breadcrumbmenu/breadcrumbmenu.jsp
index 5455d56..309308c 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/name/name.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/breadcrumbmenu/breadcrumbmenu.jsp
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */ --%>
+<%@page import="org.apache.sling.models.factory.ModelFactory"%>
+<%@page import="org.apache.sling.cms.core.models.components.Breadcrumbs"%>
 <%@include file="/libs/sling-cms/global.jsp"%>
-<td><c:set var="colValue" value="${resource.name}" /> <c:choose>
-        <c:when test="${colConfig.valueMap.link}">
-            <a class="has-text-primary"
-                href="${colConfig.valueMap.prefix}${resource.path}">
-                <span class="icon"><i class="jam jam-link"></i></span>&nbsp;
-                <sling:encode value="${colValue}" mode="HTML" />
-            </a>
-        </c:when>
-        <c:otherwise>
-            <sling:encode value="${colValue}" mode="HTML" />
-        </c:otherwise>
-    </c:choose></td>
\ No newline at end of file
+<sling:adaptTo adaptable="${slingRequest}" adaptTo="org.apache.sling.cms.core.models.components.Breadcrumbs" var="model"/>
+<ul>
+   <c:forEach var="item" items="${model.pathData}">
+       <li>
+           <a href="${item.href}" ${item.aria} ${item.classAttr} >
+               <sling:encode value="${item.title}" mode="HTML" />
+           </a>
+       </li>
+   </c:forEach>
+</ul>
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/breadcrumbmenu/edit.json b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/breadcrumbmenu/edit.json
new file mode 100644
index 0000000..e5f0709
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/breadcrumbmenu/edit.json
@@ -0,0 +1,31 @@
+ {
+	"jcr:primaryType": "nt:unstructured",
+	"sling:resourceType": "sling-cms/components/editor/slingform",
+	"title": "Suffix BreadCrumb",
+	"button": "Save Suffix Breadcrumb",
+	"fields": {
+		"jcr:primaryType": "nt:unstructured",
+		"sling:resourceType": "sling-cms/components/general/container",
+		"level": {
+			"jcr:primaryType": "nt:unstructured",
+			"sling:resourceType": "sling-cms/components/editor/fields/text",
+			"label": "Depth",
+			"name": "depth",
+			"required": true,
+			"type": "number"
+		},
+		"levelTypeHint": {
+			"jcr:primaryType": "nt:unstructured",
+			"sling:resourceType": "sling-cms/components/editor/fields/hidden",
+			"name": "level@TypeHint",
+			"value": "Long"
+		},
+		"prefix": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/text",
+            "label": "Prefix",
+            "name": "prefix",
+            "required": true
+        }
+	}
+}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/actions/actions.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/actions/actions.jsp
index 116cea6..8499f32 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/actions/actions.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/actions/actions.jsp
@@ -17,29 +17,12 @@
  * under the License.
  */ --%>
 <%@include file="/libs/sling-cms/global.jsp"%>
-<td class="is-hidden cell-actions">
-<sling:adaptTo adaptable="${slingRequest}"
-    adaptTo="org.apache.sling.cms.core.models.components.AvailableActions" var="model" />
-<c:forEach var="child" items="${model.children}">
-        <c:choose>
-            <c:when test="${child.valueMap.modal}">
-                <a class="button Fetch-Modal"
-                    data-title="${sling:encode(child.valueMap.title,'HTML_ATTR')}"
-                    data-path="${child.valueMap.ajaxPath != null ? actionConfig.valueMap.ajaxPath : '.Main-Content form'}"
-                    href="${child.valueMap.prefix}${resource.path}"
-                    title="${sling:encode(child.valueMap.title,'HTML_ATTR')}">
-                    <span class="jam jam-${child.valueMap.icon}">
-                </span>
-                </a>
-            </c:when>
-            <c:otherwise>
-                <a class="button"
-                    ${child.valueMap.new != false ? 'target="_blank"' : ''}
-                    href="${child.valueMap.prefix}${resource.path}"
-                    title="${sling:encode(child.valueMap.title,'HTML_ATTR')}">
-                    <span class="jam jam-${child.valueMap.icon}">
-                </span>
-                </a>
-            </c:otherwise>
-        </c:choose>
-    </c:forEach></td>
\ No newline at end of file
+<td class="is-hidden cell-actions"><sling:adaptTo
+        adaptable="${slingRequest}"
+        adaptTo="org.apache.sling.cms.core.models.components.Actions"
+        var="model"
+    /> <c:set var="colResource" value="${resource}" scope="request" />
+    <c:forEach var="child" items="${model.children}">
+        <sling:include resource="${child}" resourceType="sling-cms/components/cms/resource/action" />
+    </c:forEach>
+</td>
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/lastmodified/lastmodified.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/lastmodified/lastmodified.jsp
index 2811532..71d647e 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/lastmodified/lastmodified.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/lastmodified/lastmodified.jsp
@@ -17,11 +17,9 @@
  * under the License.
  */ --%>
 <%@include file="/libs/sling-cms/global.jsp"%>
-<c:set var="modifiedProperty" value="${colConfig.valueMap.subPath}jcr:lastModified" />
-<c:set var="modifiedByProperty" value="${colConfig.valueMap.subPath}jcr:lastModifiedBy" />
-<fmt:formatDate var="lastModified" type = "both"  dateStyle = "medium" timeStyle = "medium" value="${resource.valueMap[modifiedProperty].time}" />
+<sling:adaptTo adaptable="${resource}" adaptTo="org.apache.sling.cms.core.models.components.column.LastModified" var="model" />
+
 <c:set var="colValue" value="${lastModified} - ${resource.valueMap[modifiedByProperty]}" />
-<td title="${sling:encode(colValue,'HTML_ATTR')}">
-	<sling:encode value="${lastModified}" mode="HTML" /><br/>
-	<sling:encode value="${resource.valueMap[modifiedByProperty]}" mode="HTML" />
+<td title="${model.title}">
+	${model.lastModified}<br/>${model.lastModifiedBy}
 </td>
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/name/name.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/name/name.jsp
index 5455d56..41e5ae3 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/name/name.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/name/name.jsp
@@ -17,11 +17,14 @@
  * under the License.
  */ --%>
 <%@include file="/libs/sling-cms/global.jsp"%>
+<sling:adaptTo adaptable="${resource}"
+        adaptTo="org.apache.sling.cms.core.models.components.column.Name"
+        var="model" />
 <td><c:set var="colValue" value="${resource.name}" /> <c:choose>
         <c:when test="${colConfig.valueMap.link}">
             <a class="has-text-primary"
                 href="${colConfig.valueMap.prefix}${resource.path}">
-                <span class="icon"><i class="jam jam-link"></i></span>&nbsp;
+                <span class="icon"><i class="jam jam-${model.icon}"></i></span>&nbsp;
                 <sling:encode value="${colValue}" mode="HTML" />
             </a>
         </c:when>
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentactions/contentactions.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentactions/contentactions.jsp
index 5880c78..2644a3e 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentactions/contentactions.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentactions/contentactions.jsp
@@ -18,17 +18,23 @@
  */ --%>
 <%@include file="/libs/sling-cms/global.jsp"%>
 <nav class="level">
-	<div class="level-left">
-		<div class="level-item">
-			<div class="buttons has-addons">
-				<c:forEach var="action" items="${sling:listChildren(sling:getRelativeResource(resource,'actions'))}" varStatus="status">
-					<a class="button Fetch-Modal" data-title="Add ${action.valueMap.label}" data-path=".Main-Content form" href="${action.valueMap.prefix}${slingRequest.requestPathInfo.suffix}">+ ${action.valueMap.label}</a>
-				</c:forEach>
-			</div>
-		</div>
-		<div class="level-item">
-			<div class="buttons has-addons actions-target">
-			</div>
-		</div>
-	</div>
+    <div class="level-left">
+        <div class="level-item">
+            <div class="buttons has-addons">
+                <c:forEach var="action"
+                    items="${sling:listChildren(sling:getRelativeResource(resource,'actions'))}"
+                    varStatus="status"
+                >
+                    <a class="button Fetch-Modal"
+                        data-title="Add ${action.valueMap.label}"
+                        data-path=".Main-Content form"
+                        href="${action.valueMap.prefix}${slingRequest.requestPathInfo.suffix}"
+                    >+ ${action.valueMap.label}</a>
+                </c:forEach>
+            </div>
+        </div>
+        <div class="level-item">
+            <div class="buttons has-addons actions-target"></div>
+        </div>
+    </div>
 </nav>
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/name/name.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/resource/action/action.jsp
similarity index 62%
copy from ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/name/name.jsp
copy to ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/resource/action/action.jsp
index 5455d56..1bea8b5 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/name/name.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/resource/action/action.jsp
@@ -17,15 +17,13 @@
  * under the License.
  */ --%>
 <%@include file="/libs/sling-cms/global.jsp"%>
-<td><c:set var="colValue" value="${resource.name}" /> <c:choose>
-        <c:when test="${colConfig.valueMap.link}">
-            <a class="has-text-primary"
-                href="${colConfig.valueMap.prefix}${resource.path}">
-                <span class="icon"><i class="jam jam-link"></i></span>&nbsp;
-                <sling:encode value="${colValue}" mode="HTML" />
-            </a>
-        </c:when>
-        <c:otherwise>
-            <sling:encode value="${colValue}" mode="HTML" />
-        </c:otherwise>
-    </c:choose></td>
\ No newline at end of file
+<!-- modal -->
+<sling:adaptTo adaptable="${resource}"
+    adaptTo="org.apache.sling.cms.core.models.components.Action" var="model" />
+<a class="${model.classes}" data-title="${model.title}"
+    data-path="${model.dataPath}"
+    ${model.target}
+    href="${properties.prefix}${colResource.path}"
+    title="${model.title}">
+    <span class="jam jam-${model.icon}"> </span>
+</a>
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/staticnav/staticnav.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/staticnav/staticnav.jsp
index 7d6f342..7c008f7 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/staticnav/staticnav.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/staticnav/staticnav.jsp
@@ -27,7 +27,11 @@
 </c:forEach>
 <ul id="${fn:replace(properties.title,' ','-')}-nav" class="menu-list ${hidden}">
     <c:forEach var="item" items="${sling:listChildren(sling:getRelativeResource(resource,'links'))}">
-        <li class="${fn:startsWith(slingRequest.requestURI,item.valueMap.link) ? 'active' : ''}"><a href="${item.valueMap.link}">${item.valueMap.text}</a></li>
+        <li ><a href="${item.valueMap.link}"class="${fn:startsWith(slingRequest.requestURI,item.valueMap.link) ? 'is-active' : ''}">${item.valueMap.text}</a>
+        <c:if test="${fn:startsWith(slingRequest.requestURI,item.valueMap.link) }" >
+            <sling:include path="bread" resourceType="sling-cms/components/cms/breadcrumbmenu" />
+        </c:if>
+        </li>
     </c:forEach>
 </ul>
 </div>
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/nav.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/nav.jsp
index e8ee431..2a6c5c5 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/nav.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/nav.jsp
@@ -24,7 +24,6 @@
 </a>
 <a href="/cms/start.html" class="navbar-item" title="CMS Home"><span class="icon"><i class="jam jam-home-f"></i></span></a>
 <div class="navbar-item">
-<sling:include path="breadcrumb" resourceType="sling-cms/components/cms/contentbreadcrumb" />
 </div>
 <a role="button" class="navbar-burger" aria-label="menu" aria-expanded="false">
   <span aria-hidden="true"></span>
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/config.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/config.json
index e08e63d..ae5f047 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/config.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/config.json
@@ -7,11 +7,6 @@
         "container": {
             "jcr:primaryType": "nt:unstructured",
             "sling:resourceType": "sling-cms/components/general/container",
-            "richtext": {
-                "jcr:primaryType": "nt:unstructured",
-                "sling:resourceType": "sling-cms/components/general/richtext",
-                "text": "<h3>Create Site Config</h3>"
-            },
             "slingform": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/editor/slingform",
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/sitegroup.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/sitegroup.json
index 353affa..936d88a 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/sitegroup.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/sitegroup.json
@@ -1,68 +1,63 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/form",
-		"jcr:title": "Create Folder",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Create Site Group</h3>"
-			},
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"actionSuffix": "/*",
-				"button": "Create Site Group",
-				"successPrepend": "/libs/sling-cms/content/site/content.html",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:resourceType": "sling-cms/components/general/container",
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Title",
-						"name": "jcr:content/jcr:title",
-						"required": true
-					},
-					"name": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Name",
-						"name": ":name"
-					},
-					"nameParam": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": ":nameParam",
-						"value": "jcr:content/jcr:title"
-					},
-					"config": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/path",
-						"basePath": "/conf",
-						"label": "Config",
-						"name": "sling:configRef",
-						"required": false,
-						"type": "config"
-					},
-					"primaryType": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": "jcr:primaryType",
-						"value": "sling:OrderedFolder"
-					},
-					"contentPrimaryType": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": "jcr:content/jcr:primaryType",
-						"value": "nt:unstructured"
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/form",
+        "jcr:title": "Create Folder",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "slingform": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/editor/slingform",
+                "actionSuffix": "/*",
+                "button": "Create Site Group",
+                "successPrepend": "/libs/sling-cms/content/site/content.html",
+                "fields": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling:resourceType": "sling-cms/components/general/container",
+                    "title": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text",
+                        "label": "Title",
+                        "name": "jcr:content/jcr:title",
+                        "required": true
+                    },
+                    "name": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text",
+                        "label": "Name",
+                        "name": ":name"
+                    },
+                    "nameParam": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": ":nameParam",
+                        "value": "jcr:content/jcr:title"
+                    },
+                    "config": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/path",
+                        "basePath": "/conf",
+                        "label": "Config",
+                        "name": "sling:configRef",
+                        "required": false,
+                        "type": "config"
+                    },
+                    "primaryType": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": "jcr:primaryType",
+                        "value": "sling:OrderedFolder"
+                    },
+                    "contentPrimaryType": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": "jcr:content/jcr:primaryType",
+                        "value": "nt:unstructured"
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/taxonomy.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/taxonomy.json
index 5bb6b4f..49aabca 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/taxonomy.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/taxonomy.json
@@ -7,11 +7,6 @@
         "container": {
             "jcr:primaryType": "nt:unstructured",
             "sling:resourceType": "sling-cms/components/general/container",
-            "richtext": {
-                "jcr:primaryType": "nt:unstructured",
-                "sling:resourceType": "sling-cms/components/general/richtext",
-                "text": "<h3>Create Taxonomy</h3>"
-            },
             "slingform": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/editor/slingform",
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/template.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/template.json
index 9a33987..d18f3d3 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/template.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/template.json
@@ -7,11 +7,6 @@
         "container": {
             "jcr:primaryType": "nt:unstructured",
             "sling:resourceType": "sling-cms/components/general/container",
-            "richtext": {
-                "jcr:primaryType": "nt:unstructured",
-                "sling:resourceType": "sling-cms/components/general/richtext",
-                "text": "<h3>Create Template</h3>"
-            },
             "slingform": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/editor/slingform",
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/site.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/site.json
index ec528b8..e62680d 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/site.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/site.json
@@ -1,64 +1,59 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/form",
-		"jcr:title": "Edit Site",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Edit Site</h3>"
-			},
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"button": "Save Changes",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:resourceType": "sling-cms/components/general/container",
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Title",
-						"name": "jcr:title",
-						"required": true
-					},
-					"description": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/textarea",
-						"label": "Description",
-						"name": "jcr:description",
-						"required": false
-					},
-					"url": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Primary URL",
-						"name": "sling:url",
-						"required": true
-					},
-					"locale": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/select",
-						"label": "Language",
-						"name": "jcr:language",
-						"optionsScript": "/libs/sling-cms/components/editor/scripts/localeOptions.jsp",
-						"required": true
-					},
-					"config": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/path",
-						"basePath": "/conf",
-						"label": "Config",
-						"name": "sling:configRef",
-						"required": false,
-						"type": "config"
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/form",
+        "jcr:title": "Edit Site",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "slingform": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/editor/slingform",
+                "button": "Save Changes",
+                "fields": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling:resourceType": "sling-cms/components/general/container",
+                    "title": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text",
+                        "label": "Title",
+                        "name": "jcr:title",
+                        "required": true
+                    },
+                    "description": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/textarea",
+                        "label": "Description",
+                        "name": "jcr:description",
+                        "required": false
+                    },
+                    "url": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text",
+                        "label": "Primary URL",
+                        "name": "sling:url",
+                        "required": true
+                    },
+                    "locale": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/select",
+                        "label": "Language",
+                        "name": "jcr:language",
+                        "optionsScript": "/libs/sling-cms/components/editor/scripts/localeOptions.jsp",
+                        "required": true
+                    },
+                    "config": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/path",
+                        "basePath": "/conf",
+                        "label": "Config",
+                        "name": "sling:configRef",
+                        "required": false,
+                        "type": "config"
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/sitegroup.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/sitegroup.json
index 93063f6..d61c3d2 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/sitegroup.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/sitegroup.json
@@ -7,11 +7,6 @@
         "container": {
             "jcr:primaryType": "nt:unstructured",
             "sling:resourceType": "sling-cms/components/general/container",
-            "richtext": {
-                "jcr:primaryType": "nt:unstructured",
-                "sling:resourceType": "sling-cms/components/general/richtext",
-                "text": "<h3>Edit Site Group</h3>"
-            },
             "slingform": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/editor/slingform",
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/taxonomy.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/taxonomy.json
index f664ab9..59e3b47 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/taxonomy.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/taxonomy.json
@@ -1,7 +1,7 @@
 {
     "jcr:primaryType": "sling:Page",
     "jcr:content": {
-        "sling:resourceType": "sling-cms/components/pages/base",
+        "sling:resourceType": "sling-cms/components/pages/form",
         "jcr:title": "Edit Taxonomy Item",
         "jcr:primaryType": "nt:unstructured",
         "container": {
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/optimize/optimize.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/optimize/optimize.json
index 5c92acd..eded2e9 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/optimize/optimize.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/optimize/optimize.json
@@ -1,17 +1,12 @@
 {
     "jcr:primaryType": "sling:Page",
     "jcr:content": {
-        "sling:resourceType": "sling-cms/components/pages/base",
+        "sling:resourceType": "sling-cms/components/pages/form",
         "jcr:title": "Optimize File",
         "jcr:primaryType": "nt:unstructured",
         "container": {
             "jcr:primaryType": "nt:unstructured",
             "sling:resourceType": "sling-cms/components/general/container",
-            "richtext": {
-                "jcr:primaryType": "nt:unstructured",
-                "sling:resourceType": "sling-cms/components/general/richtext",
-                "text": "<h3>Optimize File</h3>"
-            },
             "slingform": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/cms/optimizefile"
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/edit.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/edit.json
index 8e475ce..29af331 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/edit.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/edit.json
@@ -1,27 +1,21 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Edit Configuration",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h2>Edit Configuration</h2>"
-			},
-			"contentbreadcrumb": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentbreadcrumb",
-				"depth": 2,
-				"prefix": "/cms/config/list.html"
-			},
-			"editconfig": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/editconfig"
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/base",
+        "jcr:title": "Edit Configuration",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "richtext": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<h2>Edit Configuration</h2>"
+            },
+            "editconfig": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/editconfig"
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/list.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/list.json
index bd7dda8..11809a1 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/list.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/list.json
@@ -14,12 +14,12 @@
                     "folder": {
                         "jcr:primaryType": "nt:unstructured",
                         "label": "Folder",
-                        "prefix": "/cms/folder/create.html"
+                        "prefix": "/cms/actions/create/folder.html"
                     },
                     "config": {
                         "jcr:primaryType": "nt:unstructured",
                         "label": "Config",
-                        "prefix": "/cms/config/create.html"
+                        "prefix": "/cms/actions/create/config.html"
                     }
                 }
             },
@@ -34,11 +34,17 @@
                 "sling:resourceType": "sling-cms/components/cms/contenttable",
                 "columns": {
                     "jcr:primaryType": "nt:unstructured",
+                    "resourceTypes": [
+                        "sling:OrderedFolder",
+                        "sling:Folder",
+                        "sling:Conf",
+                        "nt:file"
+                    ],
                     "name": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/cms/columns/name",
                         "jcr:title": "Name",
-                        "prefix": "/cms/config/edit.html",
+                        "prefix": "/cms/config/list.html",
                         "link": true
                     },
                     "title": {
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/mappings/list.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/mappings/list.json
index 01804ee..b1ba3cf 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/mappings/list.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/mappings/list.json
@@ -1,153 +1,153 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Mappings",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Mappings</h3>"
-			},
-			"contentactions": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentactions",
-				"actions": {
-					"folder": {
-						"jcr:primaryType": "nt:unstructured",
-						"label": "Folder",
-						"prefix": "/cms/folder/create.html"
-					},
-					"mappings": {
-						"jcr:primaryType": "nt:unstructured",
-						"label": "Mapping",
-						"prefix": "/cms/mappings/create.html"
-					}
-				}
-			},
-			"contenttable": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contenttable",
-				"columns": {
-					"jcr:primaryType": "nt:unstructured",
-					"name": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Name"
-					},
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Match"
-					},
-					"lastModified": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Last Modified"
-					},
-					"actions": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Actions"
-					}
-				},
-				"types": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:Mapping": {
-						"jcr:primaryType": "nt:unstructured",
-						"columns": {
-							"jcr:primaryType": "nt:unstructured",
-							"name": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/name",
-								"link": true,
-								"prefix": "/cms/mappings/list.html"
-							},
-							"title": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/text",
-								"property": "sling:match"
-							},
-							"lastModified": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
-								"subPath": ""
-							},
-							"actions": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/actions",
-								"edit": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Edit Mapping",
-									"icon": "pencil-f",
-									"prefix": "/cms/mappings/edit.html"
-								},
-								"movecopy": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Move / Copy Mapping",
-									"icon": "move-alt",
-									"prefix": "/cms/shared/movecopy.html"
-								},
-								"delete": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Delete Mapping",
-									"icon": "trash",
-									"prefix": "/cms/shared/delete.html"
-								}
-							}
-						}
-					},
-					"sling:OrderedFolder": {
-						"jcr:primaryType": "nt:unstructured",
-						"columns": {
-							"jcr:primaryType": "nt:unstructured",
-							"name": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/name",
-								"link": true,
-								"prefix": "/cms/mappings/list.html"
-							},
-							"title": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/static",
-								"value": ""
-							},
-							"lastModified": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
-								"subPath": "jcr:content/"
-							},
-							"actions": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/actions",
-								"edit": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Edit Folder",
-									"icon": "pencil-f",
-									"prefix": "/cms/folder/edit.html"
-								},
-								"movecopy": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Move / Copy Folder",
-									"icon": "move-alt",
-									"prefix": "/cms/shared/movecopy.html"
-								},
-								"delete": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Delete Folder",
-									"icon": "trash",
-									"prefix": "/cms/shared/delete.html"
-								}
-							}
-						}
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/base",
+        "jcr:title": "Mappings",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "richtext": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<h3>Mappings</h3>"
+            },
+            "contentactions": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contentactions",
+                "actions": {
+                    "folder": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "label": "Folder",
+                        "prefix": "/cms/folder/create.html"
+                    },
+                    "mappings": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "label": "Mapping",
+                        "prefix": "/cms/mappings/create.html"
+                    }
+                }
+            },
+            "contenttable": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contenttable",
+                "columns": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "name": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "title": "Name"
+                    },
+                    "title": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "title": "Match"
+                    },
+                    "lastModified": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "title": "Last Modified"
+                    },
+                    "actions": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "title": "Actions"
+                    }
+                },
+                "types": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling:Mapping": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "columns": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "name": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "sling:resourceType": "sling-cms/components/cms/columns/name",
+                                "link": true,
+                                "prefix": "/cms/mappings/list.html"
+                            },
+                            "title": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "sling:resourceType": "sling-cms/components/cms/columns/text",
+                                "property": "sling:match"
+                            },
+                            "lastModified": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
+                                "subPath": ""
+                            },
+                            "actions": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "sling:resourceType": "sling-cms/components/cms/columns/actions",
+                                "edit": {
+                                    "jcr:primaryType": "nt:unstructured",
+                                    "modal": true,
+                                    "title": "Edit Mapping",
+                                    "icon": "pencil-f",
+                                    "prefix": "/cms/mappings/edit.html"
+                                },
+                                "movecopy": {
+                                    "jcr:primaryType": "nt:unstructured",
+                                    "modal": true,
+                                    "title": "Move / Copy Mapping",
+                                    "icon": "move-alt",
+                                    "prefix": "/cms/shared/movecopy.html"
+                                },
+                                "delete": {
+                                    "jcr:primaryType": "nt:unstructured",
+                                    "modal": true,
+                                    "title": "Delete Mapping",
+                                    "icon": "trash",
+                                    "prefix": "/cms/shared/delete.html"
+                                }
+                            }
+                        }
+                    },
+                    "sling:OrderedFolder": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "columns": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "name": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "sling:resourceType": "sling-cms/components/cms/columns/name",
+                                "link": true,
+                                "prefix": "/cms/mappings/list.html"
+                            },
+                            "title": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "sling:resourceType": "sling-cms/components/cms/columns/static",
+                                "value": ""
+                            },
+                            "lastModified": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
+                                "subPath": "jcr:content/"
+                            },
+                            "actions": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "sling:resourceType": "sling-cms/components/cms/columns/actions",
+                                "edit": {
+                                    "jcr:primaryType": "nt:unstructured",
+                                    "modal": true,
+                                    "title": "Edit Folder",
+                                    "icon": "pencil-f",
+                                    "prefix": "/cms/folder/edit.html"
+                                },
+                                "movecopy": {
+                                    "jcr:primaryType": "nt:unstructured",
+                                    "modal": true,
+                                    "title": "Move / Copy Folder",
+                                    "icon": "move-alt",
+                                    "prefix": "/cms/shared/movecopy.html"
+                                },
+                                "delete": {
+                                    "jcr:primaryType": "nt:unstructured",
+                                    "modal": true,
+                                    "title": "Delete Folder",
+                                    "icon": "trash",
+                                    "prefix": "/cms/shared/delete.html"
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/content.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/content.json
index d882436..e5941cf 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/content.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/content.json
@@ -28,13 +28,6 @@
                     }
                 }
             },
-            "contentbreadcrumb": {
-                "jcr:primaryType": "nt:unstructured",
-                "sling:resourceType": "sling-cms/components/cms/contentbreadcrumb",
-                "depth": 2,
-                "prefix": "/cms/site/content.html",
-                "titleProp": "jcr:content/jcr:title"
-            },
             "contenttable": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/cms/contenttable",
@@ -76,6 +69,10 @@
                         "sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
                         "jcr:title": "Last Modified",
                         "subPath": "jcr:content/"
+                    },
+                    "actions": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/actions"
                     }
                 }
             }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/sites.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/sites.json
index 85b1f8e..0129958 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/sites.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/sites.json
@@ -25,13 +25,6 @@
                     }
                 }
             },
-            "contentbreadcrumb": {
-                "jcr:primaryType": "nt:unstructured",
-                "sling:resourceType": "sling-cms/components/cms/contentbreadcrumb",
-                "depth": 2,
-                "prefix": "/cms/site/sites.html",
-                "titleProp": "jcr:content/jcr:title"
-            },
             "contenttable": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/cms/contenttable",
@@ -39,17 +32,18 @@
                 "columns": {
                     "jcr:primaryType": "nt:unstructured",
                     "resourceTypes": [
-                        "sling:Page",
-                        "sling:File",
+                        "sling:Site",
                         "sling:OrderedFolder",
-                        "sling:Folder"
+                        "sling:Folder",
+                        "sling:Page",
+                        "nt:file"
                     ],
                     "name": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/cms/columns/name",
                         "link": true,
                         "jcr:title": "Name",
-                        "prefix": "/cms/site/content.html"
+                        "prefix": "/cms/site/sites.html"
                     },
                     "title": {
                         "jcr:primaryType": "nt:unstructured",
@@ -63,6 +57,11 @@
                         "sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
                         "jcr:title": "Last Modified",
                         "subPath": "jcr:content/"
+                    },
+                    "actions": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/actions",
+                        "jcr:title": "Actions"
                     }
                 }
             }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/siteconfig/editor.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/siteconfig/editor.json
index 453c58f..3ef82cc 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/siteconfig/editor.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/siteconfig/editor.json
@@ -23,71 +23,34 @@
         "appendSuffix": "/templates",
         "columns": {
             "jcr:primaryType": "nt:unstructured",
+            "resourceTypes": [
+                "sling:OrderedFolder",
+                "sling:Folder",
+                "sling:Conf",
+                "nt:file"
+            ],
             "name": {
                 "jcr:primaryType": "nt:unstructured",
-                "title": "Name"
+                "sling:resourceType": "sling-cms/components/cms/columns/name",
+                "jcr:title": "Name",
+                "link": false
             },
             "title": {
                 "jcr:primaryType": "nt:unstructured",
-                "title": "Title"
+                "sling:resourceType": "sling-cms/components/cms/columns/text",
+                "jcr:title": "Title",
+                "property": "jcr:title"
             },
             "lastModified": {
                 "jcr:primaryType": "nt:unstructured",
-                "title": "Last Modified"
+                "sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
+                "jcr:title": "Last Modified",
+                "subPath": ""
             },
             "actions": {
                 "jcr:primaryType": "nt:unstructured",
-                "title": "Actions"
-            }
-        },
-        "types": {
-            "jcr:primaryType": "nt:unstructured",
-            "nt:unstructured": {
-                "jcr:primaryType": "nt:unstructured",
-                "columns": {
-                    "jcr:primaryType": "nt:unstructured",
-                    "name": {
-                        "jcr:primaryType": "nt:unstructured",
-                        "sling:resourceType": "sling-cms/components/cms/columns/name",
-                        "link": false
-                    },
-                    "title": {
-                        "jcr:primaryType": "nt:unstructured",
-                        "sling:resourceType": "sling-cms/components/cms/columns/text",
-                        "property": "jcr:title"
-                    },
-                    "lastModified": {
-                        "jcr:primaryType": "nt:unstructured",
-                        "sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
-                        "subPath": ""
-                    },
-                    "actions": {
-                        "jcr:primaryType": "nt:unstructured",
-                        "sling:resourceType": "sling-cms/components/cms/columns/actions",
-                        "edit": {
-                            "jcr:primaryType": "nt:unstructured",
-                            "modal": false,
-                            "new": false,
-                            "title": "Edit Template",
-                            "icon": "pencil-f",
-                            "prefix": "/cms/template/edit.html"
-                        },
-                        "movecopy": {
-                            "jcr:primaryType": "nt:unstructured",
-                            "modal": true,
-                            "title": "Move / Copy Template",
-                            "icon": "move-alt",
-                            "prefix": "/cms/shared/movecopy.html"
-                        },
-                        "delete": {
-                            "jcr:primaryType": "nt:unstructured",
-                            "modal": true,
-                            "title": "Delete Template",
-                            "icon": "trash",
-                            "prefix": "/cms/shared/delete.html"
-                        }
-                    }
-                }
+                "jcr:title": "Actions",
+                "sling:resourceType": "sling-cms/components/cms/columns/actions"
             }
         }
     }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/static/content.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/static/content.json
index 3c38b2f..06704ba 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/static/content.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/static/content.json
@@ -23,20 +23,13 @@
                     }
                 }
             },
-            "contentbreadcrumb": {
-                "jcr:primaryType": "nt:unstructured",
-                "sling:resourceType": "sling-cms/components/cms/contentbreadcrumb",
-                "depth": 2,
-                "prefix": "/cms/static/content.html",
-                "titleProp": "jcr:content/jcr:title"
-            },
             "contenttable": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/cms/contenttable",
                 "defaultPath": "/content",
                 "columns": {
                     "resourceTypes": [
-                        "sling:File",
+                        "sling:Conf",
                         "sling:OrderedFolder",
                         "sling:Folder",
                         "nt:file"
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/taxonomy/list.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/taxonomy/list.json
index 0b69881..147c40b 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/taxonomy/list.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/taxonomy/list.json
@@ -57,28 +57,8 @@
                     },
                     "actions": {
                         "jcr:primaryType": "nt:unstructured",
-                        "sling:resourceType": "sling-cms/components/cms/columns/actions",
-                        "edit": {
-                            "jcr:primaryType": "nt:unstructured",
-                            "modal": true,
-                            "jcr:title": "Edit Taxonomy Item",
-                            "icon": "pencil-f",
-                            "prefix": "/cms/actions/edit/taxonomy.html"
-                        },
-                        "movecopy": {
-                            "jcr:primaryType": "nt:unstructured",
-                            "modal": true,
-                            "jcr:title": "Move / Copy Taxonomy Item",
-                            "icon": "move-alt",
-                            "prefix": "/cms/actions/shared/movecopy.html"
-                        },
-                        "delete": {
-                            "jcr:primaryType": "nt:unstructured",
-                            "modal": true,
-                            "jcr:title": "Delete Taxonomy Item",
-                            "icon": "trash",
-                            "prefix": "/cms/actions/shared/delete.html"
-                        }
+                        "sling:resourceType": "sling-cms/components/cms/columns/actions"
+                        
                     }
                 }
             }


[sling-org-apache-sling-app-cms] 11/17: AEM-7900 side breadcrumb example working

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

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

commit 99b2d39727c93897732bc0c6bbbb63d91aca4535
Author: JE Bailey <ja...@sas.com>
AuthorDate: Mon Sep 17 13:28:12 2018 -0400

    AEM-7900 side breadcrumb example working
---
 .../java/org/apache/sling/cms/core/models/components/Breadcrumbs.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java b/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java
index 0d2f8fa..71b7075 100644
--- a/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java
+++ b/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java
@@ -25,7 +25,6 @@ import javax.inject.Inject;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ValueMap;
-import org.apache.sling.cms.core.models.BaseModel;
 import org.apache.sling.models.annotations.Default;
 import org.apache.sling.models.annotations.DefaultInjectionStrategy;
 import org.apache.sling.models.annotations.Model;
@@ -63,10 +62,11 @@ public class Breadcrumbs {
     @PostConstruct
     public void postConstruct() {
         suffixResource = slingRequest.getRequestPathInfo().getSuffixResource();
+        String prefix = slingRequest.getRequestURI();
+        prefix = prefix.split(suffixResource.getPath())[0];
         if (suffixResource == null) {
             return;
         }
-        String prefix = slingRequest.getPathInfo();
         boolean first = true;
         while (suffixResource.getParent() != null) {
             String suffix = suffixResource.getPath();


[sling-org-apache-sling-app-cms] 07/17: removed additional '}'

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

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

commit 51620544b62e332f22a3003f1a14bcaa977f5718
Author: Jason E Bailey <je...@apache.org>
AuthorDate: Thu Sep 13 14:54:14 2018 -0400

    removed additional '}'
---
 ui/src/main/resources/jcr_root/libs/sling-cms/content/config/list.json | 1 -
 1 file changed, 1 deletion(-)

diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/list.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/list.json
index e71a744..bd7dda8 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/list.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/list.json
@@ -83,4 +83,3 @@
         }
     }
 }
-}


[sling-org-apache-sling-app-cms] 12/17: ongoing breadcrumb changes

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

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

commit 2213872beaf214a21ba111761a8d8613ead07e03
Author: JE Bailey <ja...@sas.com>
AuthorDate: Fri Sep 21 14:02:20 2018 -0400

    ongoing breadcrumb changes
---
 .../sling/cms/core/models/components/Action.java   |  6 --
 .../cms/core/models/components/Breadcrumbs.java    | 33 +++++++----
 .../cms/core/models/components/ContentAction.java  | 67 +++++++++-------------
 .../cms/core/models/components/ContentTable.java   | 26 +++------
 ui/src/main/frontend/src/scss/_overrides.scss      |  1 +
 ui/src/main/resources/jcr_root/conf/cms.json       |  2 +
 .../jcr_root/etc/taxonomy/jcr%3Acontent.json       |  1 +
 .../libs/sling-cms/actions/sling%3APage.json       |  6 +-
 .../cms/breadcrumbmenu/breadcrumbmenu.jsp          |  1 -
 .../libs/sling-cms/components/pages/base/body.jsp  | 25 ++++----
 .../libs/sling-cms/components/pages/base/nav.jsp   |  2 +-
 .../{taxonomy/list.json => browse/browse.json}     | 43 +++++++-------
 .../jcr_root/libs/sling-cms/content/page/edit.json |  6 +-
 .../sling-cms/content/page/siteeditproperties.json |  2 +-
 .../libs/sling-cms/content/taxonomy/list.json      |  1 +
 15 files changed, 102 insertions(+), 120 deletions(-)

diff --git a/core/src/main/java/org/apache/sling/cms/core/models/components/Action.java b/core/src/main/java/org/apache/sling/cms/core/models/components/Action.java
index bde08fe..a7a98cd 100644
--- a/core/src/main/java/org/apache/sling/cms/core/models/components/Action.java
+++ b/core/src/main/java/org/apache/sling/cms/core/models/components/Action.java
@@ -16,7 +16,6 @@
  */
 package org.apache.sling.cms.core.models.components;
 
-import javax.annotation.PostConstruct;
 import javax.inject.Inject;
 
 import org.apache.sling.api.resource.Resource;
@@ -33,11 +32,6 @@ public class Action extends BaseModel {
     @Inject
     boolean target;
 
-    @PostConstruct
-    public void init() {
-        System.out.println("here");
-    }
-
     public String getClasses() {
         String response = "button";
         if (modal) {
diff --git a/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java b/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java
index 71b7075..aab750c 100644
--- a/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java
+++ b/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java
@@ -21,15 +21,17 @@ import java.util.List;
 
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
 
 import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.request.RequestPathInfo;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.cms.core.models.BaseModel;
 import org.apache.sling.models.annotations.Default;
 import org.apache.sling.models.annotations.DefaultInjectionStrategy;
 import org.apache.sling.models.annotations.Model;
 import org.apache.sling.models.annotations.Via;
-import org.apache.sling.models.annotations.injectorspecific.Self;
 
 /**
  * Logic for the Suffix BreadCrumb Component
@@ -38,22 +40,13 @@ import org.apache.sling.models.annotations.injectorspecific.Self;
  *
  */
 @Model(adaptables = SlingHttpServletRequest.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
-public class Breadcrumbs {
-
-    @Inject
-    @Via("resource")
-    @Default(intValues = 2)
-    int depth;
+public class Breadcrumbs extends BaseModel {
 
 
     @Inject
     @Via("resource")
     @Default(values = "jcr:title")
     String titleProp;
-    
-    @Inject
-    @Self
-    public SlingHttpServletRequest slingRequest;
 
     Resource suffixResource;
 
@@ -63,10 +56,25 @@ public class Breadcrumbs {
     public void postConstruct() {
         suffixResource = slingRequest.getRequestPathInfo().getSuffixResource();
         String prefix = slingRequest.getRequestURI();
-        prefix = prefix.split(suffixResource.getPath())[0];
         if (suffixResource == null) {
             return;
         }
+        System.out.println("getContextPath "+slingRequest.getContextPath());
+        System.out.println("getServletPath "+slingRequest.getServletPath());
+        System.out.println("getPathInfo "+slingRequest.getPathInfo());
+        System.out.println("getPathTranslated "+slingRequest.getPathTranslated());
+        System.out.println("getContextPath "+((HttpServletRequest)slingRequest).getContextPath());
+        System.out.println("getServletPath "+((HttpServletRequest)slingRequest).getServletPath());
+        System.out.println("getResolutionPath "+ resource.getResourceMetadata().getResolutionPath());
+        System.out.println("getResolutionPathInfo "+ resource.getResourceMetadata().getResolutionPathInfo());
+        System.out.println("Request Path Info  ");
+        RequestPathInfo info = slingRequest.getRequestPathInfo();
+        System.out.println("RequestPath Info - resourcePath  " + info.getResourcePath());
+        System.out.println("RequestPath Info - resource Suffix  " + info.getSuffix());
+        System.out.println("RequestPath Info - resource Suffix  " + info.getSelectorString());
+        System.out.println("Request MetaData Info  ");
+
+        prefix = prefix.split(suffixResource.getPath())[0];
         boolean first = true;
         while (suffixResource.getParent() != null) {
             String suffix = suffixResource.getPath();
@@ -76,6 +84,7 @@ public class Breadcrumbs {
             }
             suffixResource = suffixResource.getParent();
         }
+        int depth = get("depth",2);
         while (--depth > 0) {
             pathData.remove(0);
         }
diff --git a/ui/src/main/frontend/src/scss/_overrides.scss b/core/src/main/java/org/apache/sling/cms/core/models/components/ContentAction.java
similarity index 64%
copy from ui/src/main/frontend/src/scss/_overrides.scss
copy to core/src/main/java/org/apache/sling/cms/core/models/components/ContentAction.java
index 3d718fa..f1a9aba 100644
--- a/ui/src/main/frontend/src/scss/_overrides.scss
+++ b/core/src/main/java/org/apache/sling/cms/core/models/components/ContentAction.java
@@ -1,41 +1,26 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-@charset "utf-8";
-
-// Brand Colors
-$indigo: #282661;
-$violet: #662F8F;
-$magenta: #9E2165;
-$crimson: #CB2138;
-$orange: #EA7826;
-$goldenrod: #F79A25;
-$gray: #6D6E71;
-$gray-light: lighten($gray, 50%);
-$red: #D22128;
-
-// Bulma default style overrides
-$family-sans-serif: "Open Sans",sans-serif;
-$link: $indigo;
-$primary: $magenta;
-$warning: $orange;
-$danger: $crimson;
-$navbar-height: 5rem;
-$navbar-item-img-max-height: 4rem;
-$modal-z: 2000;
\ No newline at end of file
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.cms.core.models.components;
+
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.cms.core.models.BaseModel;
+import org.apache.sling.models.annotations.DefaultInjectionStrategy;
+import org.apache.sling.models.annotations.Model;
+
+public class ContentAction extends BaseModel {
+
+}
diff --git a/core/src/main/java/org/apache/sling/cms/core/models/components/ContentTable.java b/core/src/main/java/org/apache/sling/cms/core/models/components/ContentTable.java
index fb72f28..95aaecb 100644
--- a/core/src/main/java/org/apache/sling/cms/core/models/components/ContentTable.java
+++ b/core/src/main/java/org/apache/sling/cms/core/models/components/ContentTable.java
@@ -21,12 +21,10 @@ import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 
-import javax.annotation.PostConstruct;
 import javax.inject.Inject;
 
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;
-import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.cms.core.models.BaseModel;
 import org.apache.sling.models.annotations.Default;
 import org.apache.sling.models.annotations.DefaultInjectionStrategy;
@@ -39,23 +37,15 @@ public class ContentTable extends BaseModel {
     @Inject
     @Via("resource")
     private List<Resource> columns;
-    
+
     @Inject
     @Via("resource")
-    @Default(values="/")
+    @Default(values = "/")
     private String defaultPath;
 
-    private String[] types;
-
 
-    @PostConstruct
-    public void init() {
-        ValueMap data = resource.getChild("columns").getValueMap();
-        types = data.get("resourceTypes", new String[]{});
-    }
-    
     public List<ColumnData> getColumnData() {
-        return columns.stream().map(ColumnData::new).filter(ColumnData::isEligible).collect(Collectors.toList());
+        return columns.stream().map(ColumnData::new).collect(Collectors.toList());
     }
 
     public List<ChildResourceData> getChildren() {
@@ -68,10 +58,8 @@ public class ContentTable extends BaseModel {
         }
         List<ChildResourceData> response = new ArrayList<>();
         suffix.listChildren().forEachRemaining(child -> {
-            for (String type:types) {
-                if (child.getResourceType().equals(type)) {
-                    response.add(new ChildResourceData(child));
-                }
+            if (!child.getName().contains(":")) {
+                response.add(new ChildResourceData(child));
             }
         });
         return response;
@@ -86,7 +74,7 @@ public class ContentTable extends BaseModel {
         public ColumnData(Resource resource) {
             this.resource = resource;
             this.name = resource.getName();
-            
+
         }
 
         public String getClassString() {
@@ -113,7 +101,7 @@ public class ContentTable extends BaseModel {
         public String getFieldResourceType() {
             return resource.getValueMap().get("sling:resourceType", "foo");
         }
-        
+
         public Resource getResource() {
             return resource;
         }
diff --git a/ui/src/main/frontend/src/scss/_overrides.scss b/ui/src/main/frontend/src/scss/_overrides.scss
index 3d718fa..2bdf527 100644
--- a/ui/src/main/frontend/src/scss/_overrides.scss
+++ b/ui/src/main/frontend/src/scss/_overrides.scss
@@ -38,4 +38,5 @@ $warning: $orange;
 $danger: $crimson;
 $navbar-height: 5rem;
 $navbar-item-img-max-height: 4rem;
+$section-padding : 1rem 1.5rem;
 $modal-z: 2000;
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/conf/cms.json b/ui/src/main/resources/jcr_root/conf/cms.json
new file mode 100644
index 0000000..e02aef2
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/conf/cms.json
@@ -0,0 +1,2 @@
+{
+}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/etc/taxonomy/jcr%3Acontent.json b/ui/src/main/resources/jcr_root/etc/taxonomy/jcr%3Acontent.json
index 26d6e7e..b74a78b 100644
--- a/ui/src/main/resources/jcr_root/etc/taxonomy/jcr%3Acontent.json
+++ b/ui/src/main/resources/jcr_root/etc/taxonomy/jcr%3Acontent.json
@@ -1,4 +1,5 @@
 {
 	"jcr:primaryType": "nt:unstructured",
+	"tabledepth": 2,
 	"jcr:title": "Taxonomy"
 }
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3APage.json b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3APage.json
index 369b7e5..140ed09 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3APage.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3APage.json
@@ -19,7 +19,7 @@
         "modal": true,
         "title": "Move / Copy Page",
         "icon": "move-alt",
-        "prefix": "/cms/shared/movecopy.html"
+        "prefix": "/cms/actions/shared/movecopy.html"
     },
     "version": {
         "jcr:primaryType": "nt:unstructured",
@@ -27,13 +27,13 @@
         "modal": true,
         "title": "Manage Versions",
         "icon": "history",
-        "prefix": "/cms/shared/versions.html"
+        "prefix": "/cms/actions/shared/versions.html"
     },
     "delete": {
         "jcr:primaryType": "nt:unstructured",
         "modal": true,
         "title": "Delete Page",
         "icon": "trash",
-        "prefix": "/cms/shared/delete.html"
+        "prefix": "/cms/actions/shared/delete.html"
     }
 }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/breadcrumbmenu/breadcrumbmenu.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/breadcrumbmenu/breadcrumbmenu.jsp
index 309308c..5fa4515 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/breadcrumbmenu/breadcrumbmenu.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/breadcrumbmenu/breadcrumbmenu.jsp
@@ -16,7 +16,6 @@
  * specific language governing permissions and limitations
  * under the License.
  */ --%>
-<%@page import="org.apache.sling.models.factory.ModelFactory"%>
 <%@page import="org.apache.sling.cms.core.models.components.Breadcrumbs"%>
 <%@include file="/libs/sling-cms/global.jsp"%>
 <sling:adaptTo adaptable="${slingRequest}" adaptTo="org.apache.sling.cms.core.models.components.Breadcrumbs" var="model"/>
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/body.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/body.jsp
index c7b0279..70ad807 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/body.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/body.jsp
@@ -16,23 +16,22 @@
  * specific language governing permissions and limitations
  * under the License.
  */ --%>
- <%@include file="/libs/sling-cms/global.jsp"%>
+<%@include file="/libs/sling-cms/global.jsp"%>
 <body class="cms">
-	<div class="gradient"></div>
-    <section class="container is-fluid">
+    <div class="gradient"></div>
+    <div class="container is-fluid">
     <sling:call script="nav.jsp" />
-    </section>
-    <section class="container is-fluid">
     <div class="columns">
-    <div class="column is-one-fifth">
-        <sling:include path="/mnt/overlay/sling-cms/content/start/jcr:content/nav" resourceType="sling-cms/components/general/container" />
+        <div class="column is-2">
+            <sling:include
+                path="/mnt/overlay/sling-cms/content/start/jcr:content/nav"
+                resourceType="sling-cms/components/general/container" />
+        </div>
+        <div class="column">
+            <main class="Main-Content"> <sling:call
+                script="content.jsp" /> </main>
+        </div>
     </div>
-    <div class="column">
-        <main class="Main-Content">
-            <sling:call script="content.jsp" />
-        </main>
     </div>
-    </div>
-    </section>
     <sling:call script="scripts.jsp" />
 </body>
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/nav.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/nav.jsp
index 2a6c5c5..2e6fd9e 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/nav.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/nav.jsp
@@ -17,7 +17,7 @@
  * under the License.
  */ --%>
 <%@include file="/libs/sling-cms/global.jsp"%>
-<nav class="navbar" role="navigation" aria-label="main mavigation">
+<nav class="navbar is-transparent" role="navigation" aria-label="main mavigation">
 <div class="navbar-brand">
 <a class="navbar-item" href="http://sling.apache.org" >
     <img src="/static/clientlibs/sling-cms/img/sling-logo.svg" width="100" alt="Apache Sling"/>
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/taxonomy/list.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/browse/browse.json
similarity index 67%
copy from ui/src/main/resources/jcr_root/libs/sling-cms/content/taxonomy/list.json
copy to ui/src/main/resources/jcr_root/libs/sling-cms/content/browse/browse.json
index 147c40b..0129958 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/taxonomy/list.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/browse/browse.json
@@ -2,7 +2,7 @@
     "jcr:primaryType": "sling:Page",
     "jcr:content": {
         "sling:resourceType": "sling-cms/components/pages/base",
-        "jcr:title": "Taxonomy",
+        "jcr:title": "Site Content",
         "jcr:primaryType": "nt:unstructured",
         "container": {
             "jcr:primaryType": "nt:unstructured",
@@ -11,54 +11,57 @@
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/cms/contentactions",
                 "actions": {
-                    "taxonomy": {
+                    "page": {
                         "jcr:primaryType": "nt:unstructured",
-                        "label": "Taxonomy Item",
-                        "prefix": "/cms/actions/create/taxonomy.html"
+                        "label": "Site",
+                        "icon": "jam jam-document",
+                        "prefix": "/cms/actions/create/site.html"
+                    },
+                    "folder": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "label": "Site Group",
+                        "icon": "jam jam-document-f",
+                        "prefix": "/cms/actions/create/sitegroup.html"
                     }
                 }
             },
-            "contentbreadcrumb": {
-                "jcr:primaryType": "nt:unstructured",
-                "sling:resourceType": "sling-cms/components/cms/contentbreadcrumb",
-                "depth": 2,
-                "prefix": "/cms/taxonomy/list.html"
-            },
             "contenttable": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/cms/contenttable",
+                "defaultPath": "/content",
                 "columns": {
                     "jcr:primaryType": "nt:unstructured",
                     "resourceTypes": [
-                        "sling:Page",
-                        "sling:Taxonomy",
-                        "sling:File",
+                        "sling:Site",
                         "sling:OrderedFolder",
-                        "sling:Folder"
+                        "sling:Folder",
+                        "sling:Page",
+                        "nt:file"
                     ],
                     "name": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/cms/columns/name",
                         "link": true,
                         "jcr:title": "Name",
-                        "prefix": "/cms/taxonomy/list.html"
+                        "prefix": "/cms/site/sites.html"
                     },
-                    "jcr:title": {
+                    "title": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/cms/columns/text",
+                        "property": "jcr:content/jcr:title",
                         "jcr:title": "Title",
-                        "property": "jcr:title"
+                        "type": "String"
                     },
                     "lastModified": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
                         "jcr:title": "Last Modified",
-                        "subPath": ""
+                        "subPath": "jcr:content/"
                     },
                     "actions": {
                         "jcr:primaryType": "nt:unstructured",
-                        "sling:resourceType": "sling-cms/components/cms/columns/actions"
-                        
+                        "sling:resourceType": "sling-cms/components/cms/columns/actions",
+                        "jcr:title": "Actions"
                     }
                 }
             }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/edit.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/edit.json
index 63b8a90..b320cc6 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/edit.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/edit.json
@@ -27,21 +27,21 @@
                         "modal": true,
                         "title": "Manage Versions",
                         "icon": "history",
-                        "prefix": "/cms/shared/versions.html"
+                        "prefix": "/cms/actions/shared/versions.html"
                     },
                     "movecopy": {
                         "jcr:primaryType": "nt:unstructured",
                         "modal": true,
                         "title": "Move / Copy Page",
                         "icon": "move-alt",
-                        "prefix": "/cms/shared/movecopy.html"
+                        "prefix": "/cms/actions/shared/movecopy.html"
                     },
                     "delete": {
                         "jcr:primaryType": "nt:unstructured",
                         "modal": true,
                         "title": "Delete Page",
                         "icon": "trash",
-                        "prefix": "/cms/shared/delete.html"
+                        "prefix": "/cms/actions/shared/delete.html"
                     }
                 }
             },
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/siteeditproperties.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/siteeditproperties.json
index 8b23187..285fb48 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/siteeditproperties.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/siteeditproperties.json
@@ -1,7 +1,7 @@
 {
     "jcr:primaryType": "sling:Page",
     "jcr:content": {
-        "sling:resourceType": "sling-cms/components/pages/base",
+        "sling:resourceType": "sling-cms/components/pages/form",
         "jcr:title": "Edit Page",
         "jcr:primaryType": "nt:unstructured",
         "container": {
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/taxonomy/list.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/taxonomy/list.json
index 147c40b..7651be1 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/taxonomy/list.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/taxonomy/list.json
@@ -27,6 +27,7 @@
             "contenttable": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/cms/contenttable",
+                "depth":1,
                 "columns": {
                     "jcr:primaryType": "nt:unstructured",
                     "resourceTypes": [


[sling-org-apache-sling-app-cms] 04/17: SLING-7900 UI changes

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

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

commit 4d4651e15b6797c3548227a89979ae596e1cd75d
Author: JE Bailey <ja...@sas.com>
AuthorDate: Wed Sep 12 16:20:36 2018 -0400

    SLING-7900 UI changes
    
    * new 'form' page component used to return the minimalist content for a
    modal
    * Modal dialogs now have submit and cancel buttons at the bottom
    * suffix breadcrumb is updated
    * re structured the left panel to remove inline actions
    * re structuring available actions internally
---
 .../core/models/components/AvailableActions.java   |  21 +++
 .../cms/core/models/components/Breadcrumbs.java    |   9 +-
 .../cms/core/models/components/ContentTable.java   |  11 +-
 .../sling/cms/core/models/components/SiteNav.java  |  26 +++
 ui/src/main/frontend/src/js/cms.js                 |   4 +-
 ui/src/main/resources/jcr_root/content.json        |   6 +-
 .../components/cms/contentnav/contentnav.jsp       |  32 +---
 .../libs/sling-cms/components/pages/base/nav.jsp   |   3 +
 .../libs/sling-cms/components/pages/form.json      |   4 +
 .../libs/sling-cms/components/pages/form/form.jsp  |  20 ++
 .../sling-cms/content/actions/create/folder.json   |  59 ++++++
 .../{site/create.json => actions/create/site.json} |   7 +-
 .../create/sitegroup.json}                         |   2 +-
 .../{file/edit.json => actions/edit/file.json}     |   2 +-
 .../editgroup.json => actions/edit/folder.json}    |  16 +-
 .../{site/create.json => actions/edit/site.json}   |  29 +--
 .../jcr_root/libs/sling-cms/content/file/edit.json |   2 +-
 .../libs/sling-cms/content/file/upload.json        |   7 +-
 .../libs/sling-cms/content/folder/create.json      | 116 ++++++------
 .../libs/sling-cms/content/site/create.json        |   7 +-
 .../libs/sling-cms/content/site/creategroup.json   |   2 +-
 .../libs/sling-cms/content/site/editgroup.json     |  86 ++++-----
 .../libs/sling-cms/content/site/sites.json         |  98 +++++-----
 .../jcr_root/libs/sling-cms/content/start.json     | 208 ++++++++++-----------
 .../libs/sling-cms/content/template/create.json    | 116 ++++++------
 .../sling-cms/content/templates/sitegroup.json     |   5 +
 26 files changed, 491 insertions(+), 407 deletions(-)

diff --git a/core/src/main/java/org/apache/sling/cms/core/models/components/AvailableActions.java b/core/src/main/java/org/apache/sling/cms/core/models/components/AvailableActions.java
new file mode 100644
index 0000000..767cb6f
--- /dev/null
+++ b/core/src/main/java/org/apache/sling/cms/core/models/components/AvailableActions.java
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.cms.core.models.components;
+
+public class AvailableActions {
+
+}
diff --git a/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java b/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java
index a856490..c4abe0c 100644
--- a/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java
+++ b/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java
@@ -30,12 +30,18 @@ import org.apache.sling.models.annotations.DefaultInjectionStrategy;
 import org.apache.sling.models.annotations.Model;
 import org.apache.sling.models.annotations.Via;
 import org.apache.sling.models.annotations.injectorspecific.Self;
-
+/**
+ * Logic for the Suffix BreadCrumb Component
+ * 
+ * 
+ *
+ */
 @Model(adaptables = SlingHttpServletRequest.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
 public class Breadcrumbs {
 
     @Inject
     @Via("resource")
+    @Default(intValues=1)
     int depth;
 
     @Inject
@@ -43,6 +49,7 @@ public class Breadcrumbs {
 
     @Inject
     @Via("resource")
+    @Default(values="../..")
     String prefix;
 
     @Inject
diff --git a/core/src/main/java/org/apache/sling/cms/core/models/components/ContentTable.java b/core/src/main/java/org/apache/sling/cms/core/models/components/ContentTable.java
index 21ed513..cbd611e 100644
--- a/core/src/main/java/org/apache/sling/cms/core/models/components/ContentTable.java
+++ b/core/src/main/java/org/apache/sling/cms/core/models/components/ContentTable.java
@@ -27,6 +27,7 @@ import javax.inject.Inject;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.models.annotations.Default;
 import org.apache.sling.models.annotations.DefaultInjectionStrategy;
 import org.apache.sling.models.annotations.Model;
 import org.apache.sling.models.annotations.Via;
@@ -38,6 +39,11 @@ public class ContentTable {
     @Inject
     @Via("resource")
     private List<Resource> columns;
+    
+    @Inject
+    @Via("resource")
+    @Default(values="/")
+    private String defaultPath;
 
     private String[] types;
 
@@ -58,7 +64,10 @@ public class ContentTable {
     public List<ChildResourceData> getChildren() {
         Resource suffix = slingRequest.getRequestPathInfo().getSuffixResource();
         if (suffix == null) {
-            return Collections.emptyList();
+            suffix = slingRequest.getResourceResolver().getResource(defaultPath);
+            if (suffix == null) {
+                return Collections.emptyList();
+            }
         }
         List<ChildResourceData> response = new ArrayList<>();
         suffix.listChildren().forEachRemaining(child -> {
diff --git a/core/src/main/java/org/apache/sling/cms/core/models/components/SiteNav.java b/core/src/main/java/org/apache/sling/cms/core/models/components/SiteNav.java
new file mode 100644
index 0000000..934cf3a
--- /dev/null
+++ b/core/src/main/java/org/apache/sling/cms/core/models/components/SiteNav.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.cms.core.models.components;
+
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.models.annotations.DefaultInjectionStrategy;
+import org.apache.sling.models.annotations.Model;
+
+@Model(adaptables = SlingHttpServletRequest.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
+public class SiteNav {
+
+}
diff --git a/ui/src/main/frontend/src/js/cms.js b/ui/src/main/frontend/src/js/cms.js
index d53ed3d..72b9474 100644
--- a/ui/src/main/frontend/src/js/cms.js
+++ b/ui/src/main/frontend/src/js/cms.js
@@ -50,9 +50,9 @@ Sling.CMS = {
 				return $modal;
 			},
 			fetchModal: function(title, link, path, complete){
-				var $modal = $('<div class="modal"><div class="modal-background"></div><div class="modal-card is-draggable"><header class="modal-card-head"><p class="modal-card-title">'+title+'</p></header><section class="modal-card-body"></section><footer class="modal-card-foot"><a class="close-modal is-warning button" aria-label="close">Cancel</a></footer></div>');
+				var $modal = $('<div class="modal"><div class="modal-background"></div><div class="modal-card is-draggable"><header class="modal-card-head"><p class="modal-card-title">'+title+'</p></header><section class="modal-card-body"></section><footer class="modal-card-foot"><a class="close-modal is-danger button" aria-label="close">Cancel</a></footer></div>');
 				$('body').append($modal);
-				$modal.find('.modal-card-body').load(link + " " +path,function(){
+				$modal.find('.modal-card-body').load(link,function(){
 					var submitButton = $modal.find('button:submit');
 					var closeButton = $modal.find('.close-modal');
 					submitButton.insertBefore(closeButton);
diff --git a/ui/src/main/resources/jcr_root/content.json b/ui/src/main/resources/jcr_root/content.json
index e064ab5..0f29c12 100644
--- a/ui/src/main/resources/jcr_root/content.json
+++ b/ui/src/main/resources/jcr_root/content.json
@@ -1,3 +1,7 @@
 {
-    "jcr:primaryType": "sling:Folder"
+    "jcr:primaryType": "sling:Folder",
+    "allowedResourceTypes": [
+        "sling:Site",
+        "sling:OrderedFolder"
+    ]
 }
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentnav/contentnav.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentnav/contentnav.jsp
index 17570b7..5fe486d 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentnav/contentnav.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentnav/contentnav.jsp
@@ -17,36 +17,6 @@
  * under the License.
  */ --%>
  <%@include file="/libs/sling-cms/global.jsp"%>
-<sling:findResources var="content" query="${properties.query}" language="JCR-SQL2" />
 <aside class="menu">
-<a class="menu-label toggle-hidden" data-target="#nav-${fn:replace(properties.title,' ','-')}">${properties.title}</a>
-<ul class="menu-list ${fn:startsWith(slingRequest.requestURI, properties.prefix) ? '' : 'is-hidden'}" id="nav-${fn:replace(properties.title,' ','-')}">
-    <c:forEach var="item" items="${content}">
-        <c:set var="prefixPath" value="${item.path}/" />
-        <li class="${(fn:startsWith(slingRequest.requestPathInfo.suffix, prefixPath) || slingRequest.requestPathInfo.suffix == item.path) ? 'is-active' : ''}">
-            <a href="${properties.itemPrefix}${item.path}" title="View ${item.valueMap['jcr:title']}">
-                <c:choose>
-                    <c:when test="${sling:getRelativeResource(item,'jcr:content') != null}">
-                        <sling:encode value="${sling:getRelativeResource(item,'jcr:content').valueMap['jcr:title']}" mode="HTML" />
-                    </c:when>
-                    <c:when test="${not empty item.valueMap['jcr:title']}">
-                        <sling:encode value="${item.valueMap['jcr:title']}" mode="HTML" />
-                    </c:when>
-                    <c:otherwise>
-                        <sling:encode value="${item.name}" mode="HTML" />
-                    </c:otherwise>
-                </c:choose>
-            </a>
-        </li>
-    </c:forEach>
-    <c:choose>
-        <c:when test="${not empty properties.createTitle}">
-            <c:set var="createTitle" value="${properties.createTitle}" />
-        </c:when>
-        <c:otherwise>
-            <c:set var="createTitle" value="${properties.title}" />
-        </c:otherwise>      
-    </c:choose>
-    <li><a href="${properties.createPath}" class="Fetch-Modal" title="Create a new ${createTitle}"  data-title="Create ${createTitle}" data-path=".Main-Content form"><span class="icon is-small"><i class="jam jam-plus"></i></span> ${createTitle}</a></li>
-</ul>
+<a class="menu-label toggle-hidden" href="${properties.itemPrefix}" data-target="#nav-${fn:replace(properties.title,' ','-')}">${properties.title}</a>
 </aside>
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/nav.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/nav.jsp
index 36aefb8..e8ee431 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/nav.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/nav.jsp
@@ -23,6 +23,9 @@
     <img src="/static/clientlibs/sling-cms/img/sling-logo.svg" width="100" alt="Apache Sling"/>
 </a>
 <a href="/cms/start.html" class="navbar-item" title="CMS Home"><span class="icon"><i class="jam jam-home-f"></i></span></a>
+<div class="navbar-item">
+<sling:include path="breadcrumb" resourceType="sling-cms/components/cms/contentbreadcrumb" />
+</div>
 <a role="button" class="navbar-burger" aria-label="menu" aria-expanded="false">
   <span aria-hidden="true"></span>
   <span aria-hidden="true"></span>
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/form.json b/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/form.json
new file mode 100644
index 0000000..f815a51
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/form.json
@@ -0,0 +1,4 @@
+{
+    "jcr:primaryType" : "sling:Component",
+    "jcr:title": "CMS - Form Page"
+}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/form/form.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/form/form.jsp
new file mode 100644
index 0000000..16eedf0
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/form/form.jsp
@@ -0,0 +1,20 @@
+<%-- /*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */ --%>
+ <%@include file="/libs/sling-cms/global.jsp"%>
+<sling:include path="container" resourceType="sling-cms/components/general/container" />
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/folder.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/folder.json
new file mode 100644
index 0000000..8c04f36
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/folder.json
@@ -0,0 +1,59 @@
+{
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/form",
+        "jcr:title": "Create Folder",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "richtext": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<h3>Create Folder</h3>"
+            },
+            "slingform": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/editor/slingform",
+                "actionSuffix": "/*",
+                "button": "Create Folder",
+                "successPrepend": "/libs/sling-cms/content/site/content.html",
+                "fields": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling:resourceType": "sling-cms/components/general/container",
+                    "title": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text",
+                        "label": "Title",
+                        "name": "jcr:content/jcr:title",
+                        "required": true
+                    },
+                    "name": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text",
+                        "label": "Name",
+                        "name": ":name"
+                    },
+                    "nameParam": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": ":nameParam",
+                        "value": "jcr:content/jcr:title"
+                    },
+                    "primaryType": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": "jcr:primaryType",
+                        "value": "sling:OrderedFolder"
+                    },
+                    "contentPrimaryType": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": "jcr:content/jcr:primaryType",
+                        "value": "nt:unstructured"
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/create.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/site.json
similarity index 90%
copy from ui/src/main/resources/jcr_root/libs/sling-cms/content/site/create.json
copy to ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/site.json
index 5d6c0e9..d2c64c9 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/create.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/site.json
@@ -1,17 +1,12 @@
 {
 	"jcr:primaryType": "sling:Page",
 	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
+		"sling:resourceType": "sling-cms/components/pages/form",
 		"jcr:title": "Create Site",
 		"jcr:primaryType": "nt:unstructured",
 		"container": {
 			"jcr:primaryType": "nt:unstructured",
 			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Create Site</h3>"
-			},
 			"slingform": {
 				"jcr:primaryType": "nt:unstructured",
 				"sling:resourceType": "sling-cms/components/editor/slingform",
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/creategroup.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/sitegroup.json
similarity index 97%
copy from ui/src/main/resources/jcr_root/libs/sling-cms/content/site/creategroup.json
copy to ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/sitegroup.json
index 9b434ac..353affa 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/creategroup.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/sitegroup.json
@@ -1,7 +1,7 @@
 {
 	"jcr:primaryType": "sling:Page",
 	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
+		"sling:resourceType": "sling-cms/components/pages/form",
 		"jcr:title": "Create Folder",
 		"jcr:primaryType": "nt:unstructured",
 		"container": {
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/edit.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/file.json
similarity index 90%
copy from ui/src/main/resources/jcr_root/libs/sling-cms/content/file/edit.json
copy to ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/file.json
index 6887601..f11fdf7 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/edit.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/file.json
@@ -1,7 +1,7 @@
 {
 	"jcr:primaryType": "sling:Page",
 	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
+		"sling:resourceType": "sling-cms/components/pages/form",
 		"jcr:title": "Edit File",
 		"jcr:primaryType": "nt:unstructured",
 		"container": {
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/folder.json
similarity index 70%
copy from ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json
copy to ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/folder.json
index a508fc6..b2092a5 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/folder.json
@@ -2,7 +2,7 @@
 	"jcr:primaryType": "sling:Page",
 	"jcr:content": {
 		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Edit Site Group",
+		"jcr:title": "Edit Folder",
 		"jcr:primaryType": "nt:unstructured",
 		"container": {
 			"jcr:primaryType": "nt:unstructured",
@@ -10,13 +10,12 @@
 			"richtext": {
 				"jcr:primaryType": "nt:unstructured",
 				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Edit Site Group</h3>"
+				"text": "<h3>Edit Folder</h3>"
 			},
 			"slingform": {
 				"jcr:primaryType": "nt:unstructured",
 				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"actionSuffix": "/*",
-				"button": "Create Folder",
+				"button": "Edit Folder",
 				"successPrepend":"/libs/sling-cms/content/site/content.html",
 				"fields": {
 					"jcr:primaryType": "nt:unstructured",
@@ -27,15 +26,6 @@
 						"label": "Title",
 						"name": "jcr:content/jcr:title",
 						"required": true
-					},
-					"config": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/path",
-						"basePath": "/conf",
-						"label": "Config",
-						"name": "sling:configRef",
-						"required": false,
-						"type": "config"
 					}
 				}
 			}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/create.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/site.json
similarity index 73%
copy from ui/src/main/resources/jcr_root/libs/sling-cms/content/site/create.json
copy to ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/site.json
index 5d6c0e9..319e9a5 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/create.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/site.json
@@ -2,7 +2,7 @@
 	"jcr:primaryType": "sling:Page",
 	"jcr:content": {
 		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Create Site",
+		"jcr:title": "Edit Site",
 		"jcr:primaryType": "nt:unstructured",
 		"container": {
 			"jcr:primaryType": "nt:unstructured",
@@ -10,14 +10,12 @@
 			"richtext": {
 				"jcr:primaryType": "nt:unstructured",
 				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Create Site</h3>"
+				"text": "<h3>Edit Site</h3>"
 			},
 			"slingform": {
 				"jcr:primaryType": "nt:unstructured",
 				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"actionSuffix": "/*",
-				"button": "Create Site",
-				"successPrepend": "/libs/sling-cms/content/site/content.html",
+				"button": "Edit Site",
 				"fields": {
 					"jcr:primaryType": "nt:unstructured",
 					"sling:resourceType": "sling-cms/components/general/container",
@@ -28,17 +26,12 @@
 						"name": "jcr:title",
 						"required": true
 					},
-					"name": {
+					"description": {
 						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Name",
-						"name": ":name"
-					},
-					"nameParam": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": ":nameParam",
-						"value": "jcr:title"
+						"sling:resourceType": "sling-cms/components/editor/fields/textarea",
+						"label": "Description",
+						"name": "jcr:description",
+						"required": false
 					},
 					"url": {
 						"jcr:primaryType": "nt:unstructured",
@@ -63,12 +56,6 @@
 						"name": "sling:configRef",
 						"required": false,
 						"type": "config"
-					},
-					"primaryType": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": "jcr:primaryType",
-						"value": "sling:Site"
 					}
 				}
 			}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/edit.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/edit.json
index 6887601..f11fdf7 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/edit.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/edit.json
@@ -1,7 +1,7 @@
 {
 	"jcr:primaryType": "sling:Page",
 	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
+		"sling:resourceType": "sling-cms/components/pages/form",
 		"jcr:title": "Edit File",
 		"jcr:primaryType": "nt:unstructured",
 		"container": {
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 1723c34..f8ae93f 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
@@ -1,17 +1,12 @@
 {
 	"jcr:primaryType": "sling:Page",
 	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
+		"sling:resourceType": "sling-cms/components/pages/form",
 		"jcr:title": "Upload File",
 		"jcr:primaryType": "nt:unstructured",
 		"container": {
 			"jcr:primaryType": "nt:unstructured",
 			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Upload File</h3>"
-			},
 			"slingform": {
 				"jcr:primaryType": "nt:unstructured",
 				"sling:resourceType": "sling-cms/components/editor/slingform",
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/folder/create.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/folder/create.json
index 73a0458..8c04f36 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/folder/create.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/folder/create.json
@@ -1,59 +1,59 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Create Folder",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Create Folder</h3>"
-			},
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"actionSuffix": "/*",
-				"button": "Create Folder",
-				"successPrepend":"/libs/sling-cms/content/site/content.html",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:resourceType": "sling-cms/components/general/container",
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Title",
-						"name": "jcr:content/jcr:title",
-						"required": true
-					},
-					"name": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Name",
-						"name": ":name"
-					},
-					"nameParam": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": ":nameParam",
-						"value":"jcr:content/jcr:title"
-					},
-					"primaryType": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": "jcr:primaryType",
-						"value": "sling:OrderedFolder"
-					},
-					"contentPrimaryType": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": "jcr:content/jcr:primaryType",
-						"value": "nt:unstructured"
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/form",
+        "jcr:title": "Create Folder",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "richtext": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<h3>Create Folder</h3>"
+            },
+            "slingform": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/editor/slingform",
+                "actionSuffix": "/*",
+                "button": "Create Folder",
+                "successPrepend": "/libs/sling-cms/content/site/content.html",
+                "fields": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling:resourceType": "sling-cms/components/general/container",
+                    "title": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text",
+                        "label": "Title",
+                        "name": "jcr:content/jcr:title",
+                        "required": true
+                    },
+                    "name": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text",
+                        "label": "Name",
+                        "name": ":name"
+                    },
+                    "nameParam": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": ":nameParam",
+                        "value": "jcr:content/jcr:title"
+                    },
+                    "primaryType": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": "jcr:primaryType",
+                        "value": "sling:OrderedFolder"
+                    },
+                    "contentPrimaryType": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": "jcr:content/jcr:primaryType",
+                        "value": "nt:unstructured"
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/create.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/create.json
index 5d6c0e9..d2c64c9 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/create.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/create.json
@@ -1,17 +1,12 @@
 {
 	"jcr:primaryType": "sling:Page",
 	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
+		"sling:resourceType": "sling-cms/components/pages/form",
 		"jcr:title": "Create Site",
 		"jcr:primaryType": "nt:unstructured",
 		"container": {
 			"jcr:primaryType": "nt:unstructured",
 			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Create Site</h3>"
-			},
 			"slingform": {
 				"jcr:primaryType": "nt:unstructured",
 				"sling:resourceType": "sling-cms/components/editor/slingform",
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/creategroup.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/creategroup.json
index 9b434ac..353affa 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/creategroup.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/creategroup.json
@@ -1,7 +1,7 @@
 {
 	"jcr:primaryType": "sling:Page",
 	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
+		"sling:resourceType": "sling-cms/components/pages/form",
 		"jcr:title": "Create Folder",
 		"jcr:primaryType": "nt:unstructured",
 		"container": {
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json
index a508fc6..44c9b33 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json
@@ -1,44 +1,44 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Edit Site Group",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Edit Site Group</h3>"
-			},
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"actionSuffix": "/*",
-				"button": "Create Folder",
-				"successPrepend":"/libs/sling-cms/content/site/content.html",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:resourceType": "sling-cms/components/general/container",
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Title",
-						"name": "jcr:content/jcr:title",
-						"required": true
-					},
-					"config": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/path",
-						"basePath": "/conf",
-						"label": "Config",
-						"name": "sling:configRef",
-						"required": false,
-						"type": "config"
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/base",
+        "jcr:title": "Edit Site Group",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "richtext": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<h3>Edit Site Group</h3>"
+            },
+            "slingform": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/editor/slingform",
+                "actionSuffix": "/*",
+                "button": "Create Folder",
+                "successPrepend": "/libs/sling-cms/content/site/content.html",
+                "fields": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling:resourceType": "sling-cms/components/general/container",
+                    "title": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text",
+                        "label": "Title",
+                        "name": "jcr:content/jcr:title",
+                        "required": true
+                    },
+                    "config": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/path",
+                        "basePath": "/conf",
+                        "label": "Config",
+                        "name": "sling:configRef",
+                        "required": false,
+                        "type": "config"
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/sites.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/sites.json
index 275fcc9..9c37266 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/sites.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/sites.json
@@ -1,67 +1,71 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Site Content",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"contentactions": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentactions",
-				"actions": {
-					"page": {
-						"jcr:primaryType": "nt:unstructured",
-						"label": "Site",
-						"icon" : "jam jam-document",
-						"prefix": "/cms/site/create.html"
-					},
-					"folder": {
-						"jcr:primaryType": "nt:unstructured",
-						"label": "Site Group",
-						"icon" : "jam jam-document-f",
-						"prefix": "/cms/site/creategroup.html"
-					}
-				}
-			},
-			"contentbreadcrumb": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentbreadcrumb",
-				"depth": 2,
-				"prefix": "/cms/site/sites.html",
-				"titleProp": "jcr:content/jcr:title"
-			},
-			"contenttable": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contenttable",
-				"columns": {
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/base",
+        "jcr:title": "Site Content",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "contentactions": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contentactions",
+                "actions": {
+                    "page": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "label": "Site",
+                        "icon": "jam jam-document",
+                        "prefix": "/cms/actions/create/site.html"
+                    },
+                    "folder": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "label": "Site Group",
+                        "icon": "jam jam-document-f",
+                        "prefix": "/cms/actions/create/sitegroup.html"
+                    }
+                }
+            },
+            "contentbreadcrumb": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contentbreadcrumb",
+                "depth": 2,
+                "prefix": "/cms/site/sites.html",
+                "titleProp": "jcr:content/jcr:title"
+            },
+            "contenttable": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contenttable",
+                "defaultPath": "/content",
+                "columns": {
                     "jcr:primaryType": "nt:unstructured",
-                    "resourceTypes":["sling:Site","sling:OrderedFolder"],
+                    "resourceTypes": [
+                        "sling:Site",
+                        "sling:OrderedFolder"
+                    ],
                     "name": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/cms/columns/name",
                         "link": true,
-                        "jcr:title":"Name",
-                         "prefix": "/cms/site/content.html"
+                        "jcr:title": "Name",
+                        "prefix": "/cms/site/sites.html"
                     },
                     "title": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/cms/columns/text",
                         "property": "jcr:content/jcr:title",
-                        "jcr:title":"Title",
+                        "jcr:title": "Title",
                         "type": "String"
                     },
                     "lastModified": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
-                        "jcr:title":"Last Modified",
+                        "jcr:title": "Last Modified",
                         "subPath": "jcr:content/"
                     },
                     "actions": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/cms/columns/actions",
-                        "jcr:title":"Actions",
+                        "jcr:title": "Actions",
                         "edit": {
                             "jcr:primaryType": "nt:unstructured",
                             "modal": true,
@@ -84,8 +88,8 @@
                             "modal": true
                         }
                     }
-				}
-			}
-		}
-	}
+                }
+            }
+        }
+    }
 }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json
index 2c061fa..b4ec947 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json
@@ -1,110 +1,100 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Start",
-		"jcr:primaryType": "nt:unstructured",
-		"sling:vanityPath": "/cms",
-		"sling:redirect": true,
-		"center": true,
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h2>Welcome to the Apache Sling CMS!<\/h2><p>This is a full-featured Content Management System built using the Apache Sling Framework! To begin, select Site on the left to add your first website.<\/p>"
-			}
-		},
-		"nav": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"sitenav": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentnav",
-				"createPath": "/cms/site/creategroup.html/content",
-				"createTitle": "Site Group",
-				"prefix": "/cms/site",
-				"itemPrefix": "/cms/site/sites.html",
-				"query": "SELECT * FROM [sling:OrderedFolder] AS s WHERE ISCHILDNODE(s,'/content') ORDER BY NAME()",
-				"title": "Sites"
-			},
-			"staticnav": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentnav",
-				"createPath": "/cms/folder/create.html/static",
-				"createTitle": "Folder",
-				"prefix": "/cms/static",
-				"itemPrefix": "/cms/static/content.html",
-				"query": "SELECT * FROM [sling:Folder] AS s WHERE ISCHILDNODE(s,'/static') ORDER BY NAME()",
-				"title": "Static Content"
-			},
-			"taxonomynav": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentnav",
-				"createPath": "/cms/taxonomy/create.html/etc/taxonomy",
-				"prefix": "/cms/taxonomy",
-				"itemPrefix": "/cms/taxonomy/list.html",
-				"query": "SELECT * FROM [sling:Taxonomy] AS s WHERE ISCHILDNODE(s,'/etc/taxonomy') ORDER BY NAME()",
-				"title": "Taxonomy"
-			},
-			"configurationnav": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentnav",
-				"createPath": "/cms/folder/create.html/conf",
-				"prefix": "/cms/config",
-				"itemPrefix": "/cms/config/list.html",
-				"query": "SELECT * FROM [sling:OrderedFolder] AS s WHERE ISCHILDNODE(s,'/conf') ORDER BY NAME()",
-				"title": "Configuration"
-			},
-			"usergeneratednav": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentnav",
-				"createPath": "/cms/folder/create.html/etc/usergenerated",
-				"createFolder": "Bucket",
-				"prefix": "/cms/usergenerated",
-				"itemPrefix": "/cms/usergenerated/content.html",
-				"query": "SELECT * FROM [sling:OrderedFolder] AS s WHERE ISCHILDNODE(s,'/etc/usergenerated') ORDER BY NAME()",
-				"title": "User Generated"
-			},
-			"toolsnav": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/staticnav",
-				"title": "Tools",
-				"links": {
-					"jcr:primaryType": "nt:unstructured",
-					"contentpackages": {
-						"jcr:primaryType": "nt:unstructured",
-						"link": "/bin/packages.html",
-						"text": "Content Packages"
-					},
-					"i18n": {
-						"jcr:primaryType": "nt:unstructured",
-						"link": "/cms/i18n/dictionaries.html/etc/i18n",
-						"text": "Internationalization (i18n)"
-					},
-					"mappings": {
-						"jcr:primaryType": "nt:unstructured",
-						"link": "/cms/mappings/list.html/etc/map",
-						"text": "Mappings"
-					},
-					"nodebrowser": {
-						"jcr:primaryType": "nt:unstructured",
-						"link": "/bin/browser.html",
-						"text": "Node Browser"
-					},
-					"systemconsole": {
-						"jcr:primaryType": "nt:unstructured",
-						"link": "/system/console",
-						"text": "System Console"
-					},
-					"usersgroups": {
-						"jcr:primaryType": "nt:unstructured",
-						"link": "/bin/users.html",
-						"text": "Users &amp; Groups"
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/base",
+        "jcr:title": "Start",
+        "jcr:primaryType": "nt:unstructured",
+        "sling:vanityPath": "/cms",
+        "sling:redirect": true,
+        "center": true,
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "richtext": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<h2>Welcome to the Apache Sling CMS!<\/h2><p>This is a full-featured Content Management System built using the Apache Sling Framework! To begin, select Site on the left to add your first website.<\/p>"
+            }
+        },
+        "nav": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "othernav": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/staticnav",
+                "title": "Manage",
+                "links": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sitenav": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "link": "/cms/site/sites.html/content",
+                        "text": "Sites"
+                    },
+                    "staticnav": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "link": "/cms/static/content.html/static",
+                        "text": "Static Content"
+                    },
+                    "taxonomy": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "link": "/cms/taxonomy/list.html/etc/taxonomy",
+                        "text": "Taxonomy"
+                    },
+                    "templates": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "link": "/cms/taxonomy/list.html/etc/taxonomy",
+                        "text": "Templates"
+                    },
+                    "config": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "link": "/cms/config/list.html/conf",
+                        "text": "Configuration"
+                    },
+                    "usergenerated": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "link": "/cms/usergenerated/content.html/etc/usergenerated",
+                        "text": "User Generated"
+                    }
+                }
+            },
+            "toolsnav": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/staticnav",
+                "title": "Tools",
+                "links": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "contentpackages": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "link": "/bin/packages.html",
+                        "text": "Content Packages"
+                    },
+                    "i18n": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "link": "/cms/i18n/dictionaries.html/etc/i18n",
+                        "text": "Internationalization (i18n)"
+                    },
+                    "mappings": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "link": "/cms/mappings/list.html/etc/map",
+                        "text": "Mappings"
+                    },
+                    "nodebrowser": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "link": "/bin/browser.html",
+                        "text": "Node Browser"
+                    },
+                    "systemconsole": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "link": "/system/console",
+                        "text": "System Console"
+                    },
+                    "usersgroups": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "link": "/bin/users.html",
+                        "text": "Users &amp; Groups"
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/template/create.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/template/create.json
index f5d4a73..9a96b51 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/template/create.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/template/create.json
@@ -1,59 +1,59 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Create Template",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Create Template</h3>"
-			},
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"actionSuffix": "/templates/",
-				"button": "Create Template",
-				"successPrepend": "/libs/sling-cms/content/site/content.html",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:resourceType": "sling-cms/components/general/container",
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Title",
-						"name": "jcr:title",
-						"required": true
-					},
-					"name": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Name",
-						"name": ":name"
-					},
-					"nameParam": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": ":nameParam",
-						"value": "jcr:title"
-					},
-					"primaryType": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": "jcr:primaryType",
-						"value": "nt:unstructured"
-					},
-					"resourceType": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": "sling:resourceType",
-						"value": "sling-cms/components/cms/pagetemplate"
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/base",
+        "jcr:title": "Create Template",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "richtext": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<h3>Create Template</h3>"
+            },
+            "slingform": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/editor/slingform",
+                "actionSuffix": "/templates/",
+                "button": "Create Template",
+                "successPrepend": "/libs/sling-cms/content/site/content.html",
+                "fields": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling:resourceType": "sling-cms/components/general/container",
+                    "title": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text",
+                        "label": "Title",
+                        "name": "jcr:title",
+                        "required": true
+                    },
+                    "name": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text",
+                        "label": "Name",
+                        "name": ":name"
+                    },
+                    "nameParam": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": ":nameParam",
+                        "value": "jcr:title"
+                    },
+                    "primaryType": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": "jcr:primaryType",
+                        "value": "nt:unstructured"
+                    },
+                    "resourceType": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": "sling:resourceType",
+                        "value": "sling-cms/components/cms/pagetemplate"
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/templates/sitegroup.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/templates/sitegroup.json
new file mode 100644
index 0000000..8533f67
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/templates/sitegroup.json
@@ -0,0 +1,5 @@
+{
+    "jcr:contentType": "nt:unstructured",
+    "sling:resourceType" : "cms/template"
+    
+}


[sling-org-apache-sling-app-cms] 05/17: SLING-7900 set core to java 8

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

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

commit 14d282ffadea12e2b69a907d6b8afa75949c5887
Author: JE Bailey <ja...@sas.com>
AuthorDate: Thu Sep 13 08:31:09 2018 -0400

    SLING-7900 set core to java 8
---
 core/pom.xml | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/core/pom.xml b/core/pom.xml
index f1a2568..d936bb1 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -186,4 +186,7 @@
             <version>${project.version}</version>
         </dependency>
     </dependencies>
+    <properties>
+        <sling.java.version>8</sling.java.version>
+    </properties>
 </project>
\ No newline at end of file


[sling-org-apache-sling-app-cms] 10/17: side navigation

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

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

commit 68b45fb419305b2947a3b8f4f47828f183b50729
Author: Jason E Bailey <je...@apache.org>
AuthorDate: Mon Sep 17 11:41:58 2018 -0400

    side navigation
---
 .../sling/cms/core/models/components/Breadcrumbs.java     | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java b/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java
index d119638..0d2f8fa 100644
--- a/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java
+++ b/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java
@@ -39,7 +39,7 @@ import org.apache.sling.models.annotations.injectorspecific.Self;
  *
  */
 @Model(adaptables = SlingHttpServletRequest.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
-public class Breadcrumbs extends BaseModel {
+public class Breadcrumbs {
 
     @Inject
     @Via("resource")
@@ -51,6 +51,10 @@ public class Breadcrumbs extends BaseModel {
     @Via("resource")
     @Default(values = "jcr:title")
     String titleProp;
+    
+    @Inject
+    @Self
+    public SlingHttpServletRequest slingRequest;
 
     Resource suffixResource;
 
@@ -66,7 +70,7 @@ public class Breadcrumbs extends BaseModel {
         boolean first = true;
         while (suffixResource.getParent() != null) {
             String suffix = suffixResource.getPath();
-            pathData.add(0, new PathData(suffix, prefix + getTitle(suffixResource), first));
+            pathData.add(0, new PathData(prefix + suffix, getTitle(suffixResource), first));
             if (first) {
                 first = false;
             }
@@ -78,11 +82,12 @@ public class Breadcrumbs extends BaseModel {
     }
 
     private String getTitle(Resource resource) {
-        String title = get("jcr:title", String.class);
+        ValueMap map = resource.getValueMap();
+        String title = map.get("jcr:title", String.class);
         if (title != null) {
             return title;
         }
-        title = get("jcr:content/jcr:title", String.class);
+        title = map.get("jcr:content/jcr:title", String.class);
         if (title != null) {
             return title;
         }
@@ -109,8 +114,6 @@ public class Breadcrumbs extends BaseModel {
             return href; // prefix + resource path
         }
 
-        // ${parent.valueMap['jcr:title'] != null ? parent.valueMap['jcr:title'] :
-        // parent.valueMap['jcr:content/jcr:title']}" default="${parent.name}"
         public String getTitle() {
             return title;
         }


[sling-org-apache-sling-app-cms] 08/17: SLING-7900 UI dynamic file actions

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

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

commit f0ffbd3c4c1d3768f3e5e2bf9d97436e6a044938
Author: Jason E Bailey <je...@apache.org>
AuthorDate: Thu Sep 13 20:21:48 2018 -0400

    SLING-7900 UI dynamic file actions
---
 .../core/models/components/AvailableActions.java   |  31 +++++
 .../jcr_root/libs/sling-cms/actions/nt%3Afile.json |  46 +++++++
 .../libs/sling-cms/actions/sling%3AFile.json       |  46 +++++++
 .../libs/sling-cms/actions/sling%3AFolder.json     |  25 ++++
 .../sling-cms/actions/sling%3AOrderedFolder.json   |  25 ++++
 .../libs/sling-cms/actions/sling%3APage.json       |  38 ++++++
 .../libs/sling-cms/actions/sling%3ASite.json       |  24 ++++
 .../components/cms/columns/actions/actions.jsp     |  42 +++---
 .../components/cms/columns/publish/publish.jsp     |   4 +-
 .../sling-cms/content/actions/create/config.json   |   2 +-
 .../sling-cms/content/actions/create/folder.json   |   7 +-
 .../sling-cms/content/actions/create/page.json     |   7 +-
 .../sling-cms/content/actions/create/site.json     | 142 ++++++++++-----------
 .../sling-cms/content/actions/edit/folder.json     |   7 +-
 .../libs/sling-cms/content/actions/edit/site.json  |   2 +-
 .../sling-cms/content/actions/edit/sitegroup.json  |   3 +-
 .../sling-cms/content/actions/edit/taxonomy.json   |   7 +-
 .../sling-cms/content/actions/edit/template.json   |   5 -
 .../sling-cms/content/actions/shared/delete.json   |  83 ++++++------
 .../sling-cms/content/actions/shared/movecopy.json | 121 +++++++++---------
 .../sling-cms/content/actions/shared/publish.json  |  79 ++++++------
 .../sling-cms/content/actions/shared/search.json   | 104 +++++++--------
 .../content/actions/shared/unpublish.json          |  79 ++++++------
 .../sling-cms/content/actions/shared/versions.json |  35 +++--
 .../jcr_root/libs/sling-cms/content/page/edit.json | 106 +++++++--------
 .../sling-cms/content/page/editproperties.json     |  30 ++---
 .../libs/sling-cms/content/page/pagewrapper.json   |   4 +-
 .../sling-cms/content/page/siteeditproperties.json |  35 +++--
 .../libs/sling-cms/content/site/content.json       |  41 ------
 .../libs/sling-cms/content/site/sites.json         |  26 ----
 30 files changed, 663 insertions(+), 543 deletions(-)

diff --git a/core/src/main/java/org/apache/sling/cms/core/models/components/AvailableActions.java b/core/src/main/java/org/apache/sling/cms/core/models/components/AvailableActions.java
index 767cb6f..13e4770 100644
--- a/core/src/main/java/org/apache/sling/cms/core/models/components/AvailableActions.java
+++ b/core/src/main/java/org/apache/sling/cms/core/models/components/AvailableActions.java
@@ -16,6 +16,37 @@
  */
 package org.apache.sling.cms.core.models.components;
 
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+
+import javax.inject.Inject;
+
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.models.annotations.DefaultInjectionStrategy;
+import org.apache.sling.models.annotations.Model;
+import org.apache.sling.models.annotations.injectorspecific.Self;
+
+@Model(adaptables = SlingHttpServletRequest.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
 public class AvailableActions {
 
+    @Inject
+    @Self
+    SlingHttpServletRequest slingRequest;
+    
+    public List<Resource> getChildren() {
+        System.out.println(slingRequest.getContextPath());
+        System.out.println(slingRequest.getResource().getPath());
+        String type = slingRequest.getResource().getValueMap().get("jcr:primaryType", "sling:File");
+        System.out.println(type);
+        Resource resource = slingRequest.getResourceResolver().resolve("/libs/sling-cms/actions/"+type);
+        
+        List<Resource> list = new ArrayList<>();
+        resource.listChildren().forEachRemaining(list::add);
+        System.out.println(list.toString());
+        return list;
+    }
+
 }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/nt%3Afile.json b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/nt%3Afile.json
new file mode 100644
index 0000000..fc1963a
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/nt%3Afile.json
@@ -0,0 +1,46 @@
+{
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/cms/columns/actions",
+    "edit": {
+        "jcr:primaryType": "nt:unstructured",
+        "modal": true,
+        "title": "Edit File",
+        "icon": "pencil-f",
+        "prefix": "/cms/actions/edit/file.html"
+    },
+    "optimize": {
+        "jcr:primaryType": "nt:unstructured",
+        "modal": false,
+        "title": "Optimize File",
+        "icon": "archive",
+        "prefix": "/cms/actions/optimize/file.html"
+    },
+    "download": {
+        "jcr:primaryType": "nt:unstructured",
+        "modal": false,
+        "title": "Download file",
+        "icon": "download"
+    },
+    "movecopy": {
+        "jcr:primaryType": "nt:unstructured",
+        "modal": true,
+        "title": "Move / Copy File",
+        "icon": "move-alt",
+        "prefix": "/cms/actions/shared/movecopy.html"
+    },
+    "version": {
+        "jcr:primaryType": "nt:unstructured",
+        "ajaxPath": ".versionmanager",
+        "modal": true,
+        "title": "Manage Versions",
+        "icon": "history",
+        "prefix": "/cms/actions/shared/versions.html"
+    },
+    "delete": {
+        "jcr:primaryType": "nt:unstructured",
+        "modal": true,
+        "title": "Delete File",
+        "icon": "trash",
+        "prefix": "/cms/actions/shared/delete.html"
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AFile.json b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AFile.json
new file mode 100644
index 0000000..fc1963a
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AFile.json
@@ -0,0 +1,46 @@
+{
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/cms/columns/actions",
+    "edit": {
+        "jcr:primaryType": "nt:unstructured",
+        "modal": true,
+        "title": "Edit File",
+        "icon": "pencil-f",
+        "prefix": "/cms/actions/edit/file.html"
+    },
+    "optimize": {
+        "jcr:primaryType": "nt:unstructured",
+        "modal": false,
+        "title": "Optimize File",
+        "icon": "archive",
+        "prefix": "/cms/actions/optimize/file.html"
+    },
+    "download": {
+        "jcr:primaryType": "nt:unstructured",
+        "modal": false,
+        "title": "Download file",
+        "icon": "download"
+    },
+    "movecopy": {
+        "jcr:primaryType": "nt:unstructured",
+        "modal": true,
+        "title": "Move / Copy File",
+        "icon": "move-alt",
+        "prefix": "/cms/actions/shared/movecopy.html"
+    },
+    "version": {
+        "jcr:primaryType": "nt:unstructured",
+        "ajaxPath": ".versionmanager",
+        "modal": true,
+        "title": "Manage Versions",
+        "icon": "history",
+        "prefix": "/cms/actions/shared/versions.html"
+    },
+    "delete": {
+        "jcr:primaryType": "nt:unstructured",
+        "modal": true,
+        "title": "Delete File",
+        "icon": "trash",
+        "prefix": "/cms/actions/shared/delete.html"
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AFolder.json b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AFolder.json
new file mode 100644
index 0000000..f437acb
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AFolder.json
@@ -0,0 +1,25 @@
+{
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/cms/columns/actions",
+    "edit": {
+        "jcr:primaryType": "nt:unstructured",
+        "modal": true,
+        "title": "Edit Folder",
+        "icon": "pencil-f",
+        "prefix": "/cms/actions/edit/folder.html"
+    },
+    "movecopy": {
+        "jcr:primaryType": "nt:unstructured",
+        "modal": true,
+        "title": "Move / Copy Folder",
+        "icon": "move-alt",
+        "prefix": "/cms/actions/shared/movecopy.html"
+    },
+    "delete": {
+        "jcr:primaryType": "nt:unstructured",
+        "modal": true,
+        "title": "Delete Folder",
+        "icon": "trash",
+        "prefix": "/cms/actions/shared/delete.html"
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AOrderedFolder.json b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AOrderedFolder.json
new file mode 100644
index 0000000..6a91288
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3AOrderedFolder.json
@@ -0,0 +1,25 @@
+{
+    "jcr:primartyType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/cms/columns/actions",
+    "edit": {
+        "jcr:primaryType": "nt:unstructured",
+        "modal": true,
+        "title": "Edit Site Group",
+        "icon": "pencil-f",
+        "prefix": "/cms/actions/edit/sitegroup.html"
+    },
+    "movecopy": {
+        "jcr:primaryType": "nt:unstructured",
+        "modal": true,
+        "title": "Move / Copy Site Group",
+        "icon": "move-alt",
+        "prefix": "/cms/actions/shared/movecopy.html"
+    },
+    "delete": {
+        "jcr:primaryType": "nt:unstructured",
+        "title": "Delete Site Group",
+        "icon": "trash",
+        "prefix": "/cms/actions/shared/delete.html",
+        "modal": true
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3APage.json b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3APage.json
new file mode 100644
index 0000000..356523e
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3APage.json
@@ -0,0 +1,38 @@
+{
+    "edit": {
+        "jcr:primaryType": "nt:unstructured",
+        "modal": false,
+        "title": "Edit Page",
+        "icon": "pencil-f",
+        "prefix": "/cms/page/edit.html"
+    },
+    "properties": {
+        "jcr:primaryType": "nt:unstructured",
+        "modal": true,
+        "title": "Edit Page Properties",
+        "icon": "cog",
+        "prefix": "/cms/page/siteeditproperties.html"
+    },
+    "movecopy": {
+        "jcr:primaryType": "nt:unstructured",
+        "modal": true,
+        "title": "Move / Copy Page",
+        "icon": "move-alt",
+        "prefix": "/cms/shared/movecopy.html"
+    },
+    "version": {
+        "jcr:primaryType": "nt:unstructured",
+        "ajaxPath": ".versionmanager",
+        "modal": true,
+        "title": "Manage Versions",
+        "icon": "history",
+        "prefix": "/cms/shared/versions.html"
+    },
+    "delete": {
+        "jcr:primaryType": "nt:unstructured",
+        "modal": true,
+        "title": "Delete the specified page",
+        "icon": "trash",
+        "prefix": "/cms/shared/delete.html"
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3ASite.json b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3ASite.json
new file mode 100644
index 0000000..7a92041
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/actions/sling%3ASite.json
@@ -0,0 +1,24 @@
+{
+    "jcr:resourceType": "nt:unstructured",
+    "edit": {
+        "jcr:primaryType": "nt:unstructured",
+        "modal": true,
+        "title": "Edit Site",
+        "icon": "pencil-f",
+        "prefix": "/cms/action/edit/site.html"
+    },
+    "movecopy": {
+        "jcr:primaryType": "nt:unstructured",
+        "modal": true,
+        "title": "Move / Copy Site",
+        "icon": "move-alt",
+        "prefix": "/cms/actions/shared/movecopy.html"
+    },
+    "delete": {
+        "jcr:primaryType": "nt:unstructured",
+        "modal": true,
+        "title": "Delete the specified site",
+        "icon": "trash",
+        "prefix": "/cms/actions/shared/delete.html"
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/actions/actions.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/actions/actions.jsp
index b1e51fb..116cea6 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/actions/actions.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/actions/actions.jsp
@@ -18,20 +18,28 @@
  */ --%>
 <%@include file="/libs/sling-cms/global.jsp"%>
 <td class="is-hidden cell-actions">
-	<c:forEach var="actionConfig" items="${sling:listChildren(colConfig)}">
-		<c:choose>
-			<c:when test="${actionConfig.valueMap.modal}">
-				<a class="button Fetch-Modal" data-title="${sling:encode(actionConfig.valueMap.title,'HTML_ATTR')}" data-path="${actionConfig.valueMap.ajaxPath != null ? actionConfig.valueMap.ajaxPath : '.Main-Content form'}" href="${actionConfig.valueMap.prefix}${resource.path}" title="${sling:encode(actionConfig.valueMap.title,'HTML_ATTR')}">
-					<span class="jam jam-${actionConfig.valueMap.icon}">
-					</span>
-				</a>
-			</c:when>
-			<c:otherwise>
-				<a class="button" ${actionConfig.valueMap.new != false ? 'target="_blank"' : ''} href="${actionConfig.valueMap.prefix}${resource.path}" title="${sling:encode(actionConfig.valueMap.title,'HTML_ATTR')}">
-					<span class="jam jam-${actionConfig.valueMap.icon}">
-					</span>
-				</a>
-			</c:otherwise>
-		</c:choose>
-	</c:forEach>
-</td>
\ No newline at end of file
+<sling:adaptTo adaptable="${slingRequest}"
+    adaptTo="org.apache.sling.cms.core.models.components.AvailableActions" var="model" />
+<c:forEach var="child" items="${model.children}">
+        <c:choose>
+            <c:when test="${child.valueMap.modal}">
+                <a class="button Fetch-Modal"
+                    data-title="${sling:encode(child.valueMap.title,'HTML_ATTR')}"
+                    data-path="${child.valueMap.ajaxPath != null ? actionConfig.valueMap.ajaxPath : '.Main-Content form'}"
+                    href="${child.valueMap.prefix}${resource.path}"
+                    title="${sling:encode(child.valueMap.title,'HTML_ATTR')}">
+                    <span class="jam jam-${child.valueMap.icon}">
+                </span>
+                </a>
+            </c:when>
+            <c:otherwise>
+                <a class="button"
+                    ${child.valueMap.new != false ? 'target="_blank"' : ''}
+                    href="${child.valueMap.prefix}${resource.path}"
+                    title="${sling:encode(child.valueMap.title,'HTML_ATTR')}">
+                    <span class="jam jam-${child.valueMap.icon}">
+                </span>
+                </a>
+            </c:otherwise>
+        </c:choose>
+    </c:forEach></td>
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/publish/publish.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/publish/publish.jsp
index ee55ded..e00bb7e 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/publish/publish.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/publish/publish.jsp
@@ -20,12 +20,12 @@
 <td class="has-text-centered" data-value="${sling:getRelativeResource(resource,'jcr:content').valueMap.published ? 0 : 1}">
 	<c:choose>
 		<c:when test="${sling:getRelativeResource(resource,'jcr:content').valueMap.published}">
-			<a class="button is-success is-centered  Fetch-Modal" href="/cms/shared/unpublish.html${resource.path}" title="Click to Unpublish" data-title="Unpublish" data-path=".Main-Content form">
+			<a class="button is-success is-centered  Fetch-Modal" href="/cms/actions/shared/unpublish.html${resource.path}" title="Click to Unpublish" data-title="Unpublish" data-path=".Main-Content form">
 				<i class="jam jam-download"></i>
 			</a>
 		</c:when>
 		<c:otherwise>
-			<a class="button is-danger Fetch-Modal" href="/cms/shared/publish.html${resource.path}" title="Click to Publish" data-title="Publish" data-path=".Main-Content form">
+			<a class="button is-danger Fetch-Modal" href="/cms/actions/shared/publish.html${resource.path}" title="Click to Publish" data-title="Publish" data-path=".Main-Content form">
 				<i class="jam jam-upload"></i>
 			</a>
 		</c:otherwise>
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/config.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/config.json
index 2d1d7ff..e08e63d 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/config.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/config.json
@@ -16,7 +16,7 @@
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/editor/slingform",
                 "actionSuffix": "/*",
-                "button": "Create Site Config",
+                "button": "Create",
                 "successPrepend": "/libs/sling-cms/content/site/content.html",
                 "fields": {
                     "jcr:primaryType": "nt:unstructured",
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/folder.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/folder.json
index 8c04f36..485bce9 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/folder.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/folder.json
@@ -7,16 +7,11 @@
         "container": {
             "jcr:primaryType": "nt:unstructured",
             "sling:resourceType": "sling-cms/components/general/container",
-            "richtext": {
-                "jcr:primaryType": "nt:unstructured",
-                "sling:resourceType": "sling-cms/components/general/richtext",
-                "text": "<h3>Create Folder</h3>"
-            },
             "slingform": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/editor/slingform",
                 "actionSuffix": "/*",
-                "button": "Create Folder",
+                "button": "Create",
                 "successPrepend": "/libs/sling-cms/content/site/content.html",
                 "fields": {
                     "jcr:primaryType": "nt:unstructured",
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/page.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/page.json
index 003f562..bf3e2db 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/page.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/page.json
@@ -7,15 +7,10 @@
         "container": {
             "jcr:primaryType": "nt:unstructured",
             "sling:resourceType": "sling-cms/components/general/container",
-            "richtext": {
-                "jcr:primaryType": "nt:unstructured",
-                "sling:resourceType": "sling-cms/components/general/richtext",
-                "text": "<h3>Create Page</h3>"
-            },
             "slingform": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/editor/slingform",
-                "button": "Create Page",
+                "button": "Create",
                 "successPrepend": "/libs/sling-cms/content/site/content.html",
                 "fields": {
                     "jcr:primaryType": "nt:unstructured",
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/site.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/site.json
index d2c64c9..ecb522f 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/site.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/site.json
@@ -1,72 +1,72 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/form",
-		"jcr:title": "Create Site",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"actionSuffix": "/*",
-				"button": "Create Site",
-				"successPrepend": "/libs/sling-cms/content/site/content.html",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:resourceType": "sling-cms/components/general/container",
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Title",
-						"name": "jcr:title",
-						"required": true
-					},
-					"name": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Name",
-						"name": ":name"
-					},
-					"nameParam": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": ":nameParam",
-						"value": "jcr:title"
-					},
-					"url": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Primary URL",
-						"name": "sling:url",
-						"required": true
-					},
-					"locale": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/select",
-						"label": "Language",
-						"name": "jcr:language",
-						"optionsScript": "/libs/sling-cms/components/editor/scripts/localeOptions.jsp",
-						"required": true
-					},
-					"config": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/path",
-						"basePath": "/conf",
-						"label": "Config",
-						"name": "sling:configRef",
-						"required": false,
-						"type": "config"
-					},
-					"primaryType": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": "jcr:primaryType",
-						"value": "sling:Site"
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/form",
+        "jcr:title": "Create Site",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "slingform": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/editor/slingform",
+                "actionSuffix": "/*",
+                "button": "Create Site",
+                "successPrepend": "/libs/sling-cms/content/site/content.html",
+                "fields": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling:resourceType": "sling-cms/components/general/container",
+                    "title": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text",
+                        "label": "Title",
+                        "name": "jcr:title",
+                        "required": true
+                    },
+                    "name": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text",
+                        "label": "Name",
+                        "name": ":name"
+                    },
+                    "nameParam": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": ":nameParam",
+                        "value": "jcr:title"
+                    },
+                    "url": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text",
+                        "label": "Primary URL",
+                        "name": "sling:url",
+                        "required": true
+                    },
+                    "locale": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/select",
+                        "label": "Language",
+                        "name": "jcr:language",
+                        "optionsScript": "/libs/sling-cms/components/editor/scripts/localeOptions.jsp",
+                        "required": true
+                    },
+                    "config": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/path",
+                        "basePath": "/conf",
+                        "label": "Config",
+                        "name": "sling:configRef",
+                        "required": false,
+                        "type": "config"
+                    },
+                    "primaryType": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": "jcr:primaryType",
+                        "value": "sling:Site"
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/folder.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/folder.json
index bb2371b..1e41cbe 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/folder.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/folder.json
@@ -7,15 +7,10 @@
         "container": {
             "jcr:primaryType": "nt:unstructured",
             "sling:resourceType": "sling-cms/components/general/container",
-            "richtext": {
-                "jcr:primaryType": "nt:unstructured",
-                "sling:resourceType": "sling-cms/components/general/richtext",
-                "text": "<h3>Edit Folder</h3>"
-            },
             "slingform": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/editor/slingform",
-                "button": "Edit Folder",
+                "button": "Save Changes",
                 "successPrepend": "/libs/sling-cms/content/site/content.html",
                 "fields": {
                     "jcr:primaryType": "nt:unstructured",
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/site.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/site.json
index e73af63..ec528b8 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/site.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/site.json
@@ -15,7 +15,7 @@
 			"slingform": {
 				"jcr:primaryType": "nt:unstructured",
 				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"button": "Edit Site",
+				"button": "Save Changes",
 				"fields": {
 					"jcr:primaryType": "nt:unstructured",
 					"sling:resourceType": "sling-cms/components/general/container",
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/sitegroup.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/sitegroup.json
index 6c29d0f..93063f6 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/sitegroup.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/sitegroup.json
@@ -15,8 +15,7 @@
             "slingform": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/editor/slingform",
-                "actionSuffix": "/*",
-                "button": "Create Folder",
+                "button": "Save Changes",
                 "successPrepend": "/libs/sling-cms/content/site/content.html",
                 "fields": {
                     "jcr:primaryType": "nt:unstructured",
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/taxonomy.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/taxonomy.json
index 2f46bd1..f664ab9 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/taxonomy.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/taxonomy.json
@@ -7,15 +7,10 @@
         "container": {
             "jcr:primaryType": "nt:unstructured",
             "sling:resourceType": "sling-cms/components/general/container",
-            "richtext": {
-                "jcr:primaryType": "nt:unstructured",
-                "sling:resourceType": "sling-cms/components/general/richtext",
-                "text": "<h3>Edit Taxonomy Item</h3>"
-            },
             "slingform": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/editor/slingform",
-                "button": "Update Taxonomy",
+                "button": "Save Changes",
                 "fields": {
                     "jcr:primaryType": "nt:unstructured",
                     "sling:resourceType": "sling-cms/components/general/container",
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/template.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/template.json
index 9ae587a..f02fa95 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/template.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/template.json
@@ -7,11 +7,6 @@
         "container": {
             "jcr:primaryType": "nt:unstructured",
             "sling:resourceType": "sling-cms/components/general/container",
-            "richtext": {
-                "jcr:primaryType": "nt:unstructured",
-                "sling:resourceType": "sling-cms/components/general/richtext",
-                "text": "<h2>Edit Template</h2>"
-            },
             "siteconfig": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/cms/templateeditor"
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/delete.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/delete.json
index 6b9b365..d5c30c4 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/delete.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/delete.json
@@ -1,45 +1,40 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Delete Content",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Delete Content</h3>"
-			},
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"button": "Delete",
-				"callback": "handledelete",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:resourceType": "sling-cms/components/general/container",
-					"path": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/suffixlabel",
-						"label": "Do you want to delete:"
-					},
-					"operation": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": ":operation",
-						"value": "delete"
-					},
-					"references": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/references",
-						"includeDestination": true,
-						"label": "Update references?",
-						"name": ":updateReferences"
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/form",
+        "jcr:title": "Delete Content",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "slingform": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/editor/slingform",
+                "button": "Delete",
+                "callback": "handledelete",
+                "fields": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling:resourceType": "sling-cms/components/general/container",
+                    "path": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/suffixlabel",
+                        "label": "Do you want to delete:"
+                    },
+                    "operation": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": ":operation",
+                        "value": "delete"
+                    },
+                    "references": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/references",
+                        "includeDestination": true,
+                        "label": "Update references?",
+                        "name": ":updateReferences"
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/movecopy.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/movecopy.json
index 8d6c399..0b70b80 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/movecopy.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/movecopy.json
@@ -1,64 +1,59 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Move/Copy Content",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Move/Copy Content</h3>"
-			},
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"button": "Move/Copy",
-				"callback": "handlemove",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:resourceType": "sling-cms/components/general/container",
-					"path": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType" : "sling-cms/components/editor/fields/suffixlabel",
-						"label": "Existing Path:"
-					},
-					"destination": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType" : "sling-cms/components/editor/fields/path",
-						"label": "Destination:",
-						"name": ":dest"
-					},
-					"operation": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/select",
-						"label": "Operation",
-						"name": ":operation",
-						"options": {
-							"jcr:primaryType": "nt:unstructured",
-							"copy":{
-								"jcr:primaryType": "nt:unstructured",
-								"label": "Copy",
-								"value": "copy"
-							},
-							"move":{
-								"jcr:primaryType": "nt:unstructured",
-								"label": "Move",
-								"value": "move"
-							}
-						}
-					},
-					"references": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/references",
-						"label": "Update References?",
-						"name": ":updateReferences",
-						"toggle": true
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/form",
+        "jcr:title": "Move/Copy Content",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "slingform": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/editor/slingform",
+                "button": "Move/Copy",
+                "callback": "handlemove",
+                "fields": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling:resourceType": "sling-cms/components/general/container",
+                    "path": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/suffixlabel",
+                        "label": "Existing Path:"
+                    },
+                    "destination": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/path",
+                        "label": "Destination:",
+                        "name": ":dest"
+                    },
+                    "operation": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/select",
+                        "label": "Operation",
+                        "name": ":operation",
+                        "options": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "copy": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "label": "Copy",
+                                "value": "copy"
+                            },
+                            "move": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "label": "Move",
+                                "value": "move"
+                            }
+                        }
+                    },
+                    "references": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/references",
+                        "label": "Update References?",
+                        "name": ":updateReferences",
+                        "toggle": true
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/publish.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/publish.json
index 2abc9d5..6206d21 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/publish.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/publish.json
@@ -1,43 +1,38 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Publish Content",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Publish Content</h3>"
-			},
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"button": "Publish",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:resourceType": "sling-cms/components/general/container",
-					"path": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType" : "sling-cms/components/editor/fields/suffixlabel",
-						"label": "Do you want to publish:"
-					},
-					"published": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": "jcr:content/published",
-						"value": "true"
-					},
-					"publishedTypeHint": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": "jcr:content/published@TypeHint",
-						"value": "Boolean"
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/form",
+        "jcr:title": "Publish Content",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "slingform": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/editor/slingform",
+                "button": "Publish",
+                "fields": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling:resourceType": "sling-cms/components/general/container",
+                    "path": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/suffixlabel",
+                        "label": "Do you want to publish:"
+                    },
+                    "published": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": "jcr:content/published",
+                        "value": "true"
+                    },
+                    "publishedTypeHint": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": "jcr:content/published@TypeHint",
+                        "value": "Boolean"
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/search.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/search.json
index 63655ff..7ca912a 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/search.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/search.json
@@ -1,53 +1,53 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Search",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"searchform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/getform",
-				"button": "Search",
-				"load": "#search-results",
-				"target": "#search-results",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:resourceType": "sling-cms/components/general/container",
-					"term": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Term",
-						"name": "term",
-						"required": "required"
-					},
-					"type": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/select",
-						"name": "type",
-						"label": "Content Type",
-						"options": [
-							"Page=sling:Page",
-							"File=sling:File",
-							"Folder=sling:Folder",
-							"Everything=nt:base"
-						]
-					},
-					"path": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/path",
-						"label": "Path",
-						"name": "path",
-						"hidesearch": true
-					}
-				}
-			},
-			"searchresults": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/searchresults"
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/base",
+        "jcr:title": "Search",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "searchform": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/getform",
+                "button": "Search",
+                "load": "#search-results",
+                "target": "#search-results",
+                "fields": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling:resourceType": "sling-cms/components/general/container",
+                    "term": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text",
+                        "label": "Term",
+                        "name": "term",
+                        "required": "required"
+                    },
+                    "type": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/select",
+                        "name": "type",
+                        "label": "Content Type",
+                        "options": [
+                            "Page=sling:Page",
+                            "File=sling:File",
+                            "Folder=sling:Folder",
+                            "Everything=nt:base"
+                        ]
+                    },
+                    "path": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/path",
+                        "label": "Path",
+                        "name": "path",
+                        "hidesearch": true
+                    }
+                }
+            },
+            "searchresults": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/searchresults"
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/unpublish.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/unpublish.json
index ece8b0f..3abdecd 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/unpublish.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/unpublish.json
@@ -1,43 +1,38 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Unpublish Content",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Unpublish Content</h3>"
-			},
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"button": "Unpublish",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:resourceType": "sling-cms/components/general/container",
-					"path": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType" : "sling-cms/components/editor/fields/suffixlabel",
-						"label": "Do you want to unpublish:"
-					},
-					"published": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": "jcr:content/published",
-						"value": "false"
-					},
-					"publishedTypeHint": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": "jcr:content/published@TypeHint",
-						"value": "Boolean"
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/form",
+        "jcr:title": "Unpublish Content",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "slingform": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/editor/slingform",
+                "button": "Unpublish",
+                "fields": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling:resourceType": "sling-cms/components/general/container",
+                    "path": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/suffixlabel",
+                        "label": "Do you want to unpublish:"
+                    },
+                    "published": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": "jcr:content/published",
+                        "value": "false"
+                    },
+                    "publishedTypeHint": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": "jcr:content/published@TypeHint",
+                        "value": "Boolean"
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/versions.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/versions.json
index ca321bf..9fda781 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/versions.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/shared/versions.json
@@ -1,21 +1,16 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Manage Versions",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Manage Versions</h3>"
-			},
-			"versionmanager": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/versionmanager"
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/form",
+        "jcr:title": "Manage Versions",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "versionmanager": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/versionmanager"
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/edit.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/edit.json
index 82bc782..63b8a90 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/edit.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/edit.json
@@ -1,54 +1,54 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"jcr:primaryType": "nt:unstructured",
-		"jcr:title": "Edit",
-		"sling:resourceType": "sling-cms/components/pages/editor",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"pageeditbar": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/pageeditbar",
-				"actions": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:resourceType": "sling-cms/components/cms/pageeditbar/actions",
-					"edit": {
-						"jcr:primaryType": "nt:unstructured",
-						"ajaxPath": ".Form-Ajax",
-						"modal": true,
-						"prefix": "/cms/page/editproperties.html",
-						"title": "Edit Page",
-						"icon": "pencil-f"
-					},
-					"version": {
-						"jcr:primaryType": "nt:unstructured",
-						"ajaxPath": ".versionmanager",
-						"modal": true,
-						"title": "Manage Versions",
-						"icon": "history",
-						"prefix": "/cms/shared/versions.html"
-					},
-					"movecopy": {
-						"jcr:primaryType": "nt:unstructured",
-						"modal": true,
-						"title": "Move / Copy Page",
-						"icon": "move-alt",
-						"prefix": "/cms/shared/movecopy.html"
-					},
-					"delete": {
-						"jcr:primaryType": "nt:unstructured",
-						"modal": true,
-						"title": "Delete Page",
-						"icon": "trash",
-						"prefix": "/cms/shared/delete.html"
-					}
-				}
-			},
-			"pageeditor": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/pageeditor"
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "jcr:primaryType": "nt:unstructured",
+        "jcr:title": "Edit",
+        "sling:resourceType": "sling-cms/components/pages/editor",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "pageeditbar": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/pageeditbar",
+                "actions": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling:resourceType": "sling-cms/components/cms/pageeditbar/actions",
+                    "edit": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "ajaxPath": ".Form-Ajax",
+                        "modal": true,
+                        "prefix": "/cms/page/editproperties.html",
+                        "title": "Edit Page",
+                        "icon": "pencil-f"
+                    },
+                    "version": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "ajaxPath": ".versionmanager",
+                        "modal": true,
+                        "title": "Manage Versions",
+                        "icon": "history",
+                        "prefix": "/cms/shared/versions.html"
+                    },
+                    "movecopy": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "modal": true,
+                        "title": "Move / Copy Page",
+                        "icon": "move-alt",
+                        "prefix": "/cms/shared/movecopy.html"
+                    },
+                    "delete": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "modal": true,
+                        "title": "Delete Page",
+                        "icon": "trash",
+                        "prefix": "/cms/shared/delete.html"
+                    }
+                }
+            },
+            "pageeditor": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/pageeditor"
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/editproperties.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/editproperties.json
index b6df91d..80c27e1 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/editproperties.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/editproperties.json
@@ -1,16 +1,16 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"jcr:primaryType": "nt:unstructured",
-		"jcr:title": "Edit Properties",
-		"sling:resourceType": "sling-cms/components/pages/editor",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"pageeditor": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/pageeditbar/propertieseditor"
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "jcr:primaryType": "nt:unstructured",
+        "jcr:title": "Edit Properties",
+        "sling:resourceType": "sling-cms/components/pages/editor",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "pageeditor": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/pageeditbar/propertieseditor"
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/pagewrapper.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/pagewrapper.json
index b9c1469..aefeb29 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/pagewrapper.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/pagewrapper.json
@@ -1,4 +1,4 @@
 {
     "jcr:primaryType": "nt:unstructured",
-    "sling:resourceType" : "sling-cms/components/cms/pagewrapper"
-}
\ No newline at end of file
+    "sling:resourceType": "sling-cms/components/cms/pagewrapper"
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/siteeditproperties.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/siteeditproperties.json
index 522d698..8b23187 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/siteeditproperties.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/page/siteeditproperties.json
@@ -1,21 +1,16 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Edit Page",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Edit Page</h3>"
-			},
-			"pageeditor": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/pageeditbar/propertieseditor"
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/base",
+        "jcr:title": "Edit Page",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "pageeditor": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/pageeditbar/propertieseditor"
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/content.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/content.json
index 365848c..d882436 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/content.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/content.json
@@ -76,47 +76,6 @@
                         "sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
                         "jcr:title": "Last Modified",
                         "subPath": "jcr:content/"
-                    },
-                    "actions": {
-                        "jcr:primaryType": "nt:unstructured",
-                        "sling:resourceType": "sling-cms/components/cms/columns/actions",
-                        "jcr:title": "Actions",
-                        "edit": {
-                            "jcr:primaryType": "nt:unstructured",
-                            "modal": false,
-                            "title": "Edit Page",
-                            "icon": "pencil-f",
-                            "prefix": "/cms/page/edit.html"
-                        },
-                        "properties": {
-                            "jcr:primaryType": "nt:unstructured",
-                            "modal": true,
-                            "title": "Edit Page Properties",
-                            "icon": "cog",
-                            "prefix": "/cms/page/siteeditproperties.html"
-                        },
-                        "movecopy": {
-                            "jcr:primaryType": "nt:unstructured",
-                            "modal": true,
-                            "title": "Move / Copy Page",
-                            "icon": "move-alt",
-                            "prefix": "/cms/actions/shared/movecopy.html"
-                        },
-                        "version": {
-                            "jcr:primaryType": "nt:unstructured",
-                            "ajaxPath": ".versionmanager",
-                            "modal": true,
-                            "title": "Manage Versions",
-                            "icon": "history",
-                            "prefix": "/cms/actions/shared/versions.html"
-                        },
-                        "delete": {
-                            "jcr:primaryType": "nt:unstructured",
-                            "modal": true,
-                            "title": "Delete the specified page",
-                            "icon": "trash",
-                            "prefix": "/cms/actions/shared/delete.html"
-                        }
                     }
                 }
             }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/sites.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/sites.json
index 628c6bc..85b1f8e 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/sites.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/sites.json
@@ -63,32 +63,6 @@
                         "sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
                         "jcr:title": "Last Modified",
                         "subPath": "jcr:content/"
-                    },
-                    "actions": {
-                        "jcr:primaryType": "nt:unstructured",
-                        "sling:resourceType": "sling-cms/components/cms/columns/actions",
-                        "jcr:title": "Actions",
-                        "edit": {
-                            "jcr:primaryType": "nt:unstructured",
-                            "modal": true,
-                            "title": "Edit Site Group",
-                            "icon": "pencil-f",
-                            "prefix": "/cms/actions/edit/sitegroup.html"
-                        },
-                        "movecopy": {
-                            "jcr:primaryType": "nt:unstructured",
-                            "modal": true,
-                            "title": "Move / Copy Site Group",
-                            "icon": "move-alt",
-                            "prefix": "/cms/actions/shared/movecopy.html"
-                        },
-                        "delete": {
-                            "jcr:primaryType": "nt:unstructured",
-                            "title": "Delete Site Group",
-                            "icon": "trash",
-                            "prefix": "/cms/actions/shared/delete.html",
-                            "modal": true
-                        }
                     }
                 }
             }


[sling-org-apache-sling-app-cms] 02/17: initial refactoring of content breadcrumbs and content table

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

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

commit 5ca7ff2961b3c8df002608d4b315797d4b66d04f
Author: JE Bailey <ja...@sas.com>
AuthorDate: Mon Sep 10 16:36:03 2018 -0400

    initial refactoring of content breadcrumbs and content table
---
 .../cms/core/models/components/Breadcrumbs.java    |  94 ++++--
 .../cms/core/models/components/ContentTable.java   | 141 ++++++++
 ui/pom.xml                                         |  14 +
 ui/src/main/frontend/src/js/cms.js                 |  11 +-
 .../sling-cms/components/cms/columns/name/name.jsp |   2 +-
 .../components/cms/columns/publish/publish.jsp     |  10 +-
 .../cms/contentbreadcrumb/contentbreadcrumb.jsp    |  12 +-
 .../components/cms/contenttable/contenttable.jsp   |  37 +--
 .../libs/sling-cms/content/site/content.json       | 364 +++++----------------
 .../libs/sling-cms/content/site/sites.json         | 163 +++------
 .../libs/sling-cms/content/static/content.json     | 176 +++++-----
 .../resources/jcr_root/libs/sling-cms/global.jsp   |   2 +-
 ui/src/main/resources/jcr_root/web-fragment.xml    |   5 -
 13 files changed, 458 insertions(+), 573 deletions(-)

diff --git a/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java b/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java
index 4c7da58..a856490 100644
--- a/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java
+++ b/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java
@@ -17,77 +17,123 @@
 package org.apache.sling.cms.core.models.components;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
-import javax.inject.Named;
 
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.models.annotations.Default;
 import org.apache.sling.models.annotations.DefaultInjectionStrategy;
 import org.apache.sling.models.annotations.Model;
+import org.apache.sling.models.annotations.Via;
 import org.apache.sling.models.annotations.injectorspecific.Self;
 
-@Model(adaptables = SlingHttpServletRequest.class,defaultInjectionStrategy=DefaultInjectionStrategy.OPTIONAL)
+@Model(adaptables = SlingHttpServletRequest.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
 public class Breadcrumbs {
 
     @Inject
+    @Via("resource")
     int depth;
 
     @Inject
-    @Named("jcr:title")
-    String title;
+    Resource resource;
 
     @Inject
+    @Via("resource")
     String prefix;
-    
+
     @Inject
-    Resource resource;
-    
+    @Via("resource")
+    @Default(values = "jcr:title")
+    String titleProp;
+
     @Self
     SlingHttpServletRequest servletRequest;
-    
+
     Resource suffixResource;
-    
+
     List<PathData> pathData = new ArrayList<>();
 
     @PostConstruct
     public void postConstruct() {
         suffixResource = servletRequest.getRequestPathInfo().getSuffixResource();
-        pathData.add(new PathData(prefix+resource.getPath(),title));
+        if (suffixResource == null) {
+            return;
+        }
+        boolean first = true;
+        while (suffixResource.getParent() != null) {
+            String suffix = suffixResource.getPath();
+            pathData.add(0, new PathData(prefix + suffix, getTitle(suffixResource),first));
+            if (first) {
+                first = false;
+            }
+            suffixResource = suffixResource.getParent();
+        }
+        while (--depth > 0) {
+            pathData.remove(0);
+        }
+    }
+
+    private String getTitle(Resource resource) {
+        ValueMap map = resource.getValueMap();
+        String title = map.get("jcr:title", String.class);
+        if (title != null) {
+            return title;
+        }
+        title = map.get("jcr:content/jcr:title", String.class);
+        if (title != null) {
+            return title;
+        }
+        return resource.getName();
     }
-    
+
     public String getTitle() {
         return null;
     }
-    
+
     public List<PathData> getPathData() {
         return pathData;
     }
-    
-    public String getString() {
-        return "flounder";
-    }
-    
-    public static class PathData{
-        
+
+    public static class PathData {
+
         private String href;
         private String title;
-        
-        public PathData(String href, String title) {
+        private boolean first;
+
+        public PathData(String href, String title, boolean first) {
             this.href = href;
             this.title = title;
+            this.first= first;
         }
+
         public String getHref() {
-            return href; //prefix + resource path
+            return href; // prefix + resource path
         }
-        //${parent.valueMap['jcr:title'] != null ? parent.valueMap['jcr:title'] : parent.valueMap['jcr:content/jcr:title']}" default="${parent.name}"
+
+        // ${parent.valueMap['jcr:title'] != null ? parent.valueMap['jcr:title'] :
+        // parent.valueMap['jcr:content/jcr:title']}" default="${parent.name}"
         public String getTitle() {
             return title;
         }
         
+        public String getAria() {
+            if (first) {
+                return "aria-current='page'";
+            }
+            return "";
+        }
+        
+        public String getClassAttr() {
+            if (first) {
+                return "class='is-active'";
+            }
+            return "";
+        }
+
     }
 
 }
diff --git a/core/src/main/java/org/apache/sling/cms/core/models/components/ContentTable.java b/core/src/main/java/org/apache/sling/cms/core/models/components/ContentTable.java
new file mode 100644
index 0000000..21ed513
--- /dev/null
+++ b/core/src/main/java/org/apache/sling/cms/core/models/components/ContentTable.java
@@ -0,0 +1,141 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.cms.core.models.components;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.models.annotations.DefaultInjectionStrategy;
+import org.apache.sling.models.annotations.Model;
+import org.apache.sling.models.annotations.Via;
+import org.apache.sling.models.annotations.injectorspecific.Self;
+
+@Model(adaptables = SlingHttpServletRequest.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
+public class ContentTable {
+
+    @Inject
+    @Via("resource")
+    private List<Resource> columns;
+
+    private String[] types;
+
+    @Self
+    SlingHttpServletRequest slingRequest;
+
+    @PostConstruct
+    public void init() {
+        Resource resource = slingRequest.getResource();
+        ValueMap data = resource.getChild("columns").getValueMap();
+        types = data.get("resourceTypes", new String[]{});
+    }
+    
+    public List<ColumnData> getColumnData() {
+        return columns.stream().map(ColumnData::new).filter(ColumnData::isEligible).collect(Collectors.toList());
+    }
+
+    public List<ChildResourceData> getChildren() {
+        Resource suffix = slingRequest.getRequestPathInfo().getSuffixResource();
+        if (suffix == null) {
+            return Collections.emptyList();
+        }
+        List<ChildResourceData> response = new ArrayList<>();
+        suffix.listChildren().forEachRemaining(child -> {
+            for (String type:types) {
+                if (child.getResourceType().equals(type)) {
+                    response.add(new ChildResourceData(child));
+                }
+            }
+        });
+        return response;
+    }
+
+    public class ColumnData {
+
+        private Resource resource;
+
+        private String name;
+
+        public ColumnData(Resource resource) {
+            this.resource = resource;
+            this.name = resource.getName();
+            
+        }
+
+        public String getClassString() {
+            String reply = "";
+            switch (name) {
+            case "actions":
+                reply = "is-hidden";
+                break;
+            case "publish":
+                reply = "has-text-centered";
+                break;
+            }
+            return reply;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public String getTitle() {
+            return resource.getValueMap().get("jcr:title", "foo");
+        }
+
+        public String getFieldResourceType() {
+            return resource.getValueMap().get("sling:resourceType", "foo");
+        }
+        
+        public Resource getResource() {
+            return resource;
+        }
+
+        public boolean isEligible() {
+            return true;
+        }
+    }
+
+    public class ChildResourceData {
+
+        private Resource resource;
+
+        public ChildResourceData(Resource resource) {
+            this.resource = resource;
+        }
+
+        public String getPath() {
+            return resource.getPath();
+        }
+
+        public String getDataType() {
+            return resource.getResourceType();
+        }
+
+        public boolean isEligible() {
+            return true;
+        }
+    }
+
+}
diff --git a/ui/pom.xml b/ui/pom.xml
index a5db13e..4a031e4 100644
--- a/ui/pom.xml
+++ b/ui/pom.xml
@@ -178,5 +178,19 @@
 	        <version>0.9.1-SNAPSHOT</version>
 	        <scope>provided</scope>
 	    </dependency>
+	    <dependency>
+	        <groupId>org.apache.sling</groupId>
+	        <artifactId>
+	            org.apache.sling.scripting.jsp.taglib
+	        </artifactId>
+	        <version>2.3.0</version>
+	        <scope>provided</scope>
+	    </dependency>
+	    <dependency>
+	        <groupId>org.apache.geronimo.bundles</groupId>
+	        <artifactId>jstl</artifactId>
+	        <scope>provided</scope>
+	    </dependency>
 	</dependencies>
+
 </project>
\ No newline at end of file
diff --git a/ui/src/main/frontend/src/js/cms.js b/ui/src/main/frontend/src/js/cms.js
index 97a9533..7f17092 100644
--- a/ui/src/main/frontend/src/js/cms.js
+++ b/ui/src/main/frontend/src/js/cms.js
@@ -39,7 +39,7 @@ Sling.CMS = {
 		},
 		ui: {
 			confirmMessage: function(title, message, complete){
-				var $modal = $('<div class="modal"><div class="modal-background"></div><div class="modal-card is-draggable"><header class="modal-card-head"><p class="modal-card-title">'+title+'</p><button class="delete" aria-label="close"></button></header><section class="modal-card-body">'+message+'</section><footer class="modal-card-foot"><button type="button" class="close-modal button is-primary">OK</button></footer></div>');
+				var $modal = $('<div class="modal"><div class="modal-background"></div><div class="modal-card is-draggable"><header class="modal-card-head"><p class="modal-card-title">'+title+'</p></header><section class="modal-card-body">'+message+'</section><footer class="modal-card-foot"><button type="button" class="close-modal button is-primary">OK</button></footer></div>');
 				$('body').append($modal);
 				Sling.CMS.decorate($modal);
 				$modal.addClass('is-active');
@@ -50,11 +50,16 @@ Sling.CMS = {
 				return $modal;
 			},
 			fetchModal: function(title, link, path, complete){
-				var $modal = $('<div class="modal"><div class="modal-background"></div><div class="modal-card is-draggable"><header class="modal-card-head"><p class="modal-card-title">'+title+'</p><button class="delete" aria-label="close"></button></header><section class="modal-card-body"></section><footer class="modal-card-foot"></footer></div>');
+				var $modal = $('<div class="modal"><div class="modal-background"></div><div class="modal-card is-draggable"><header class="modal-card-head"><p class="modal-card-title">'+title+'</p></header><section class="modal-card-body"></section><footer class="modal-card-foot"><a class="close-modal is-warning button" aria-label="close">Cancel</a></footer></div>');
 				$('body').append($modal);
 				$modal.find('.modal-card-body').load(link + " " +path,function(){
+					var submitButton = $modal.find('button:submit');
+					$modal.find('.modal-card-foot').append(submitButton);
+					submitButton.on("click",function(){
+						$modal.find('form').submit();
+					})
 					$modal.addClass('is-active');
-					$modal.find('.delete,.close-modal').click(function(){
+					$modal.find('.close-modal').click(function(){
 						$modal.css('display','none').remove();
 						return false;
 					});
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/name/name.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/name/name.jsp
index 67dfbd9..0245485 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/name/name.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/name/name.jsp
@@ -21,7 +21,7 @@
 	<c:set var="colValue" value="${resource.name}" />
 	<c:choose>
 		<c:when test="${colConfig.valueMap.link}">
-			<a href="${colConfig.valueMap.prefix}${resource.path}">
+			<a class="button is-outlined" href="${colConfig.valueMap.prefix}${resource.path}">
 				<sling:encode value="${colValue}" mode="HTML" />
 			</a>
 		</c:when>
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/publish/publish.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/publish/publish.jsp
index af15eb3..2005d42 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/publish/publish.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/publish/publish.jsp
@@ -17,16 +17,16 @@
  * under the License.
  */ --%>
 <%@include file="/libs/sling-cms/global.jsp"%>
-<td data-value="${sling:getRelativeResource(resource,'jcr:content').valueMap.published ? 0 : 1}">
+<td class="has-text-centered" data-value="${sling:getRelativeResource(resource,'jcr:content').valueMap.published ? 0 : 1}">
 	<c:choose>
 		<c:when test="${sling:getRelativeResource(resource,'jcr:content').valueMap.published}">
-			<a class="button is-success is-outlined Fetch-Modal" href="/cms/shared/unpublish.html${resource.path}" title="Content Published" data-title="Unpublish" data-path=".Main-Content form">
-				<i class="jam jam-check"></i>
+			<a class="button is-success is-centered  Fetch-Modal" href="/cms/shared/unpublish.html${resource.path}" title="Click to Unpublish" data-title="Unpublish" data-path=".Main-Content form">
+				<i class="jam jam-download"></i>
 			</a>
 		</c:when>
 		<c:otherwise>
-			<a class="button is-warning is-outlined Fetch-Modal" href="/cms/shared/publish.html${resource.path}" title="Content Not Published" data-title="Publish" data-path=".Main-Content form">
-				<i class="jam jam-close"></i>
+			<a class="button is-warning Fetch-Modal" href="/cms/shared/publish.html${resource.path}" title="Click to Publish" data-title="Publish" data-path=".Main-Content form">
+				<i class="jam jam-upload"></i>
 			</a>
 		</c:otherwise>
 	</c:choose>
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentbreadcrumb/contentbreadcrumb.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentbreadcrumb/contentbreadcrumb.jsp
index 9de9e1c..5eb7eaf 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentbreadcrumb/contentbreadcrumb.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentbreadcrumb/contentbreadcrumb.jsp
@@ -18,20 +18,16 @@
  */ --%>
 <%@page import="org.apache.sling.models.factory.ModelFactory"%>
 <%@page import="org.apache.sling.cms.core.models.components.Breadcrumbs"%>
-<%@include file="/libs/sling-cms/global.jsp"%><%
-
-%>
-
-<sling:adaptTo adaptable="${resource}" adaptTo="org.apache.sling.cms.core.models.components.Breadcrumbs" var="model"/><nav class="breadcrumb" aria-label="breadcrumbs">
+<%@include file="/libs/sling-cms/global.jsp"%>
+<sling:adaptTo adaptable="${slingRequest}" adaptTo="org.apache.sling.cms.core.models.components.Breadcrumbs" var="model"/>
+<nav class="breadcrumb" aria-label="Breadcrumb">
 <ul>
    <c:forEach var="item" items="${model.pathData}">
        <li>
-           <a href="${item.href}">
+           <a href="${item.href}" ${item.aria} ${item.classAttr} >
                <sling:encode value="${item.title}" mode="HTML" />
            </a>
        </li>
    </c:forEach>
-   <li>$WHY?
-   <li>${model.string}</li>
 </ul>
 </nav>
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contenttable/contenttable.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contenttable/contenttable.jsp
index f5bad46..288d921 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contenttable/contenttable.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contenttable/contenttable.jsp
@@ -16,40 +16,29 @@
  * specific language governing permissions and limitations
  * under the License.
  */ --%>
+ <%@page import="org.apache.sling.cms.core.models.components.Breadcrumbs"%>
  <%@include file="/libs/sling-cms/global.jsp"%>
+ <sling:adaptTo adaptable="${slingRequest}" adaptTo="org.apache.sling.cms.core.models.components.ContentTable" var="model"/>
+ <div class="container is-fullwidth">
 <table class="table is-fullwidth is-striped">
     <thead>
         <tr>
-            <th>
-                #
-            </th>
-            <c:forEach var="column" items="${sling:listChildren(sling:getRelativeResource(resource,'columns'))}">
-                <th class="${column.name == 'actions' ? 'is-hidden' : '' }" data-attribute="${column.name}">
-                    <sling:encode value="${column.valueMap.title}" mode="HTML" />
+            <c:forEach var="column" items="${model.columnData}">
+                <th class="${column.classString}" data-attribute="${column.name}">
+                    <sling:encode value="${column.title}" mode="HTML" />
                 </th>
             </c:forEach>
         </tr>
     </thead>
     <tbody>
-        <c:set var="parentPath" value="${slingRequest.requestPathInfo.suffix}${not empty properties.appendSuffix ? properties.appendSuffix : ''}" />
-        <c:set var="count" value="1" />
-        <c:forEach var="child" items="${sling:listChildren(sling:getResource(resourceResolver, parentPath))}">
-            <sling:getResource var="typeConfig" base="${resource}" path="types/${child.valueMap['jcr:primaryType']}" />
-            <c:if test="${typeConfig != null && !fn:contains(child.name,':')}">
-                <tr class="sortable__row" data-resource="${child.path}" data-type="${typeConfig.path}">
-                    <td class="Cell-Static" title="# ${status.index + 1}}" data-sort-value="<fmt:formatNumber pattern="0000" value="${count}" />">
-                        ${count}
-                    </td>
-                    <c:forEach var="column" items="${sling:listChildren(sling:getRelativeResource(typeConfig,'columns'))}">
-                        <c:set var="configPath" value="columns/${column.name}"/>
-                        <c:set var="colConfig" value="${sling:getRelativeResource(typeConfig,configPath)}" scope="request" />
-                        <c:if test="${colConfig != null}">
-                            <sling:include path="${child.path}" resourceType="${colConfig.valueMap['sling:resourceType']}" />
-                        </c:if>
+        <c:forEach var="child" items="${model.children}">
+                <tr class="sortable__row" data-resource="${child.path}" data-type="${child.dataType}">
+                    <c:forEach var="column" items="${model.columnData}">
+                            <c:set var="colConfig" value="${column.resource}" scope="request" />
+                            <sling:include path="${child.path}" resourceType="${column.fieldResourceType}" />
                     </c:forEach>
                 </tr>
-                <c:set var="count" value="${count + 1}" />
-            </c:if>
         </c:forEach> 
     </tbody>
-</table>
\ No newline at end of file
+</table>
+</div>
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/content.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/content.json
index 7b1cc8e..9383b5d 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/content.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/content.json
@@ -39,297 +39,79 @@
 				"jcr:primaryType": "nt:unstructured",
 				"sling:resourceType": "sling-cms/components/cms/contenttable",
 				"columns": {
-					"jcr:primaryType": "nt:unstructured",
-					"name": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Name"
-					},
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Title"
-					},
-					"published": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Published"
-					},
-					"type": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Type"
-					},
-					"lastModified": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Last Modified"
-					},
-					"actions": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Actions"
-					}
-				},
-				"types": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:Page": {
-						"jcr:primaryType": "nt:unstructured",
-						"columns": {
-							"jcr:primaryType": "nt:unstructured",
-							"name": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/name",
-								"link": true,
-								"prefix": "/cms/site/content.html"
-							},
-							"title": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/text",
-								"property": "jcr:content/jcr:title",
-								"type": "String"
-							},
-							"publish": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/publish"
-							},
-							"type": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/static",
-								"value": "Page"
-							},
-							"lastModified": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
-								"subPath": "jcr:content/"
-							},
-							"actions": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/actions",
-								"edit": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": false,
-									"title": "Edit Page",
-									"icon": "pencil-f",
-									"prefix": "/cms/page/edit.html"
-								},
-								"properties": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Edit Page Properties",
-									"icon": "cog",
-									"prefix": "/cms/page/siteeditproperties.html"
-								},
-								"movecopy": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Move / Copy Page",
-									"icon": "move-alt",
-									"prefix": "/cms/shared/movecopy.html"
-								},
-								"version": {
-									"jcr:primaryType": "nt:unstructured",
-									"ajaxPath": ".versionmanager",
-									"modal": true,
-									"title": "Manage Versions",
-									"icon": "history",
-									"prefix": "/cms/shared/versions.html"
-								},
-								"delete": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Delete the specified page",
-									"icon": "trash",
-									"prefix": "/cms/shared/delete.html"
-								}
-							}
-						}
-					},
-					"sling:File": {
-						"jcr:primaryType": "nt:unstructured",
-						"columns": {
-							"jcr:primaryType": "nt:unstructured",
-							"name": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/name",
-								"link": false
-							},
-							"title": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/text",
-								"link": false,
-								"type": "Name"
-							},
-							"publish": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/publish"
-							},
-							"type": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/static",
-								"value": "File"
-							},
-							"lastModified": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
-								"subPath": "jcr:content/"
-							},
-							"actions": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/actions",
-								"edit": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Edit File",
-									"icon": "pencil-f",
-									"prefix": "/cms/file/edit.html"
-								},
-								"optimize": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": false,
-									"title": "Optimize File",
-									"icon": "archive",
-									"prefix": "/cms/file/optimize.html"
-								},
-								"download": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": false,
-									"title": "Download file",
-									"icon": "download"
-								},
-								"movecopy": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Move / Copy File",
-									"icon": "move-alt",
-									"prefix": "/cms/shared/movecopy.html"
-								},
-								"version": {
-									"jcr:primaryType": "nt:unstructured",
-									"ajaxPath": ".versionmanager",
-									"modal": true,
-									"title": "Manage Versions",
-									"icon": "history",
-									"prefix": "/cms/shared/versions.html"
-								},
-								"delete": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Delete File",
-									"icon": "trash",
-									"prefix": "/cms/shared/delete.html"
-								}
-							}
-						}
-					},
-					"sling:OrderedFolder": {
-						"jcr:primaryType": "nt:unstructured",
-						"columns": {
-							"jcr:primaryType": "nt:unstructured",
-							"name": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/name",
-								"link": true,
-								"prefix": "/cms/site/content.html"
-							},
-							"title": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/text",
-								"property": "jcr:content/jcr:title",
-								"type": "String"
-							},
-							"publish": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/publish"
-							},
-							"type": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/static",
-								"value": "Folder"
-							},
-							"lastModified": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
-								"subPath": "jcr:content/"
-							},
-							"actions": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/actions",
-								"edit": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Edit Folder",
-									"icon": "pencil-f",
-									"prefix": "/cms/folder/edit.html"
-								},
-								"movecopy": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Move / Copy Folder",
-									"icon": "move-alt",
-									"prefix": "/cms/shared/movecopy.html"
-								},
-								"delete": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Delete Folder",
-									"icon": "trash",
-									"prefix": "/cms/shared/delete.html"
-								}
-							}
-						}
-					},
-					"sling:Folder": {
-						"jcr:primaryType": "nt:unstructured",
-						"columns": {
-							"jcr:primaryType": "nt:unstructured",
-							"name": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/name",
-								"link": true,
-								"prefix": "/cms/site/content.html"
-							},
-							"title": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/text",
-								"property": "jcr:content/jcr:title",
-								"type": "String"
-							},
-							"publish": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/publish"
-							},
-							"type": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/static",
-								"value": "Folder"
-							},
-							"lastModified": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
-								"subPath": "jcr:content/"
-							},
-							"actions": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/actions",
-								"edit": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Edit Folder",
-									"icon": "pencil-f",
-									"prefix": "/cms/folder/edit.html"
-								},
-								"movecopy": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Move / Copy Folder",
-									"icon": "move-alt",
-									"prefix": "/cms/shared/movecopy.html"
-								},
-								"delete": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Delete Folder",
-									"icon": "trash",
-									"prefix": "/cms/shared/delete.html"
-								}
-							}
-						}
-					}
+				    "resourceTypes" : ["sling:Page","sling:File","sling:OrderedFolder","sling:Folder"],
+                    "name": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/name",
+                        "link": true,
+                        "jcr:title":"Name",
+                        "prefix": "/cms/site/content.html"
+                    },
+                    "title": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/text",
+                        "property": "jcr:content/jcr:title",
+                        "jcr:title":"Title",
+                        "type": "String"
+                    },
+                    "publish": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "jcr:title":"Publish",
+                        "sling:resourceType": "sling-cms/components/cms/columns/publish"
+                    },
+                    "type": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/static",
+                        "jcr:title":"Type",
+                        "value": "Page"
+                    },
+                    "lastModified": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
+                        "jcr:title":"Last Modified",
+                        "subPath": "jcr:content/"
+                    },
+                    "actions": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/actions",
+                        "jcr:title":"Actions",
+                        "edit": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "modal": false,
+                            "title": "Edit Page",
+                            "icon": "pencil-f",
+                            "prefix": "/cms/page/edit.html"
+                        },
+                        "properties": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "modal": true,
+                            "title": "Edit Page Properties",
+                            "icon": "cog",
+                            "prefix": "/cms/page/siteeditproperties.html"
+                        },
+                        "movecopy": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "modal": true,
+                            "title": "Move / Copy Page",
+                            "icon": "move-alt",
+                            "prefix": "/cms/shared/movecopy.html"
+                        },
+                        "version": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "ajaxPath": ".versionmanager",
+                            "modal": true,
+                            "title": "Manage Versions",
+                            "icon": "history",
+                            "prefix": "/cms/shared/versions.html"
+                        },
+                        "delete": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "modal": true,
+                            "title": "Delete the specified page",
+                            "icon": "trash",
+                            "prefix": "/cms/shared/delete.html"
+                        }
+                    }
 				}
 			}
 		}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/sites.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/sites.json
index 79f34a3..275fcc9 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/sites.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/sites.json
@@ -36,121 +36,54 @@
 				"jcr:primaryType": "nt:unstructured",
 				"sling:resourceType": "sling-cms/components/cms/contenttable",
 				"columns": {
-					"jcr:primaryType": "nt:unstructured",
-					"name": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Name"
-					},
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Title"
-					},
-					"lastModified": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Last Modified"
-					},
-					"actions": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Actions"
-					}
-				},
-				"types": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:Site":{
-						"jcr:primaryType": "nt:unstructured",
-						"columns": {
-							"jcr:primaryType": "nt:unstructured",
-							"name": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/name",
-								"link": true,
-								"prefix": "/cms/site/content.html"
-							},
-							"title": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/text",
-								"property": "jcr:title",
-								"type": "String"
-							},
-							"lastModified": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/lastmodified"
-							},
-							"actions": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/actions",
-								"edit": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Edit Site",
-									"icon": "pencil-f",
-									"prefix": "/cms/site/edit.html"
-								},
-								"movecopy": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Move / Copy Site",
-									"icon": "move-alt",
-									"prefix": "/cms/shared/movecopy.html"
-								},
-								"delete": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Delete the specified site",
-									"icon": "trash",
-									"prefix": "/cms/shared/delete.html"
-								}
-							}
-						}
-					},
-					"sling:OrderedFolder":{
-						"jcr:primaryType": "nt:unstructured",
-						"columns": {
-							"jcr:primaryType": "nt:unstructured",
-							"name": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/name",
-								"link": true,
-								"prefix": "/cms/site/sites.html"
-							},
-							"title": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/text",
-								"property": "jcr:content/jcr:title",
-								"type": "String"
-							},
-							"lastModified": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
-								"subPath": "jcr:content/"
-							},
-							"actions": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/actions",
-								"edit": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Edit Site Group",
-									"icon": "pencil-f",
-									"prefix": "/cms/site/editgroup.html"
-								},
-								"movecopy": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Move / Copy Site Group",
-									"icon": "move-alt",
-									"prefix": "/cms/shared/movecopy.html"
-								},
-								"delete": {
-									"jcr:primaryType": "nt:unstructured",
-									"title": "Delete Site Group",
-									"icon": "trash",
-									"prefix": "/cms/shared/delete.html",
-									"modal": true
-								}
-							}
-						}
-					}
+                    "jcr:primaryType": "nt:unstructured",
+                    "resourceTypes":["sling:Site","sling:OrderedFolder"],
+                    "name": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/name",
+                        "link": true,
+                        "jcr:title":"Name",
+                         "prefix": "/cms/site/content.html"
+                    },
+                    "title": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/text",
+                        "property": "jcr:content/jcr:title",
+                        "jcr:title":"Title",
+                        "type": "String"
+                    },
+                    "lastModified": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
+                        "jcr:title":"Last Modified",
+                        "subPath": "jcr:content/"
+                    },
+                    "actions": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/actions",
+                        "jcr:title":"Actions",
+                        "edit": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "modal": true,
+                            "title": "Edit Site Group",
+                            "icon": "pencil-f",
+                            "prefix": "/cms/site/editgroup.html"
+                        },
+                        "movecopy": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "modal": true,
+                            "title": "Move / Copy Site Group",
+                            "icon": "move-alt",
+                            "prefix": "/cms/shared/movecopy.html"
+                        },
+                        "delete": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "title": "Delete Site Group",
+                            "icon": "trash",
+                            "prefix": "/cms/shared/delete.html",
+                            "modal": true
+                        }
+                    }
 				}
 			}
 		}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/static/content.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/static/content.json
index d7ede68..71a2c04 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/static/content.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/static/content.json
@@ -34,109 +34,93 @@
 				"jcr:primaryType": "nt:unstructured",
 				"sling:resourceType": "sling-cms/components/cms/contenttable",
 				"columns": {
+                     "resourceTypes":["sling:File","sling:OrderedFolder","sling:Folder","nt:file"],
 					"jcr:primaryType": "nt:unstructured",
-					"name": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Name"
-					},
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Title"
-					},
-					"published": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Published"
-					},
-					"type": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Type"
-					},
-					"lastModified": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Last Modified"
-					},
-					"actions": {
-						"jcr:primaryType": "nt:unstructured",
-						"title": "Actions"
-					}
+                    "name": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/name",
+                        "jcr:title":"Name",
+                        "prefix": "/cms/static/content.html",
+                        "link": true
+                    },
+                    "title": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/text",
+                        "link": false,
+                        "jcr:title":"Title",
+                        "type": "Name"
+                    },
+                    "publish": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "jcr:title":"Publish",
+                        "sling:resourceType": "sling-cms/components/cms/columns/publish"
+                    },
+                    "type": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/static",
+                        "jcr:title":"Type",
+                        "value": "Folder"
+                    },
+                    "lastModified": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
+                        "jcr:title":"Last Modified",
+                        "subPath": "jcr:content/"
+                    },
+                    "actions": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/cms/columns/actions",
+                        "jcr:title":"Actions",
+                        "edit": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "modal": true,
+                            "title": "Edit File",
+                            "icon": "pencil-f",
+                            "prefix": "/cms/file/edit.html"
+                        },
+                        "optimize": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "modal": false,
+                            "title": "Optimize File",
+                            "icon": "archive",
+                            "prefix": "/cms/file/optimize.html"
+                        },
+                        "download": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "modal": false,
+                            "title": "Download file",
+                            "icon": "download"
+                        },
+                        "movecopy": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "modal": true,
+                            "title": "Move / Copy File",
+                            "icon": "move-alt",
+                            "prefix": "/cms/shared/movecopy.html"
+                        },
+                        "version": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "ajaxPath": ".versionmanager",
+                            "modal": true,
+                            "title": "Manage Versions",
+                            "icon": "history",
+                            "prefix": "/cms/shared/versions.html"
+                        },
+                        "delete": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "modal": true,
+                            "title": "Delete File",
+                            "icon": "trash",
+                            "prefix": "/cms/shared/delete.html"
+                        }
+                    }
 				},
 				"types": {
 					"jcr:primaryType": "nt:unstructured",
 					"sling:File":{
 						"jcr:primaryType": "nt:unstructured",
 						"columns": {
-							"jcr:primaryType": "nt:unstructured",
-							"name": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/name",
-								"link": false
-							},
-							"title": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/text",
-								"link": false,
-								"type": "Name"
-							},
-							"publish": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/publish"
-							},
-							"type": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/static",
-								"value": "File"
-							},
-							"lastModified": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
-								"subPath": "jcr:content/"
-							},
-							"actions": {
-								"jcr:primaryType": "nt:unstructured",
-								"sling:resourceType": "sling-cms/components/cms/columns/actions",
-								"edit": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Edit File",
-									"icon": "pencil-f",
-									"prefix": "/cms/file/edit.html"
-								},
-								"optimize": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": false,
-									"title": "Optimize File",
-									"icon": "archive",
-									"prefix": "/cms/file/optimize.html"
-								},
-								"download": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": false,
-									"title": "Download file",
-									"icon": "download"
-								},
-								"movecopy": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Move / Copy File",
-									"icon": "move-alt",
-									"prefix": "/cms/shared/movecopy.html"
-								},
-								"version": {
-									"jcr:primaryType": "nt:unstructured",
-									"ajaxPath": ".versionmanager",
-									"modal": true,
-									"title": "Manage Versions",
-									"icon": "history",
-									"prefix": "/cms/shared/versions.html"
-								},
-								"delete": {
-									"jcr:primaryType": "nt:unstructured",
-									"modal": true,
-									"title": "Delete File",
-									"icon": "trash",
-									"prefix": "/cms/shared/delete.html"
-								}
-							}
+
 						}
 					},
 					"sling:OrderedFolder":{
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/global.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/global.jsp
index 8b34fcc..5dc580e 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/global.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/global.jsp
@@ -20,4 +20,4 @@
 %><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%
 %><%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %><%
 %><%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %><%
-%><sling:defineObjects /><sling:adaptTo var="properties" adaptable="${resource}" adaptTo="org.apache.sling.api.resource.ValueMap" />
\ No newline at end of file
+%><sling:defineObjects /><sling:adaptTo var="properties" adaptable="${resource}" adaptTo="org.apache.sling.api.resource.ValueMap" />
diff --git a/ui/src/main/resources/jcr_root/web-fragment.xml b/ui/src/main/resources/jcr_root/web-fragment.xml
deleted file mode 100644
index 78ede58..0000000
--- a/ui/src/main/resources/jcr_root/web-fragment.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<web-fragment id="WebFragment_ID" version="3.0"
-    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd">
-    <name>ui</name>
-</web-fragment>
\ No newline at end of file


[sling-org-apache-sling-app-cms] 03/17: table updates and modals

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

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

commit 3e2496b828151d4b378e88032ca170283a94db74
Author: JE Bailey <ja...@sas.com>
AuthorDate: Tue Sep 11 16:01:47 2018 -0400

    table updates and modals
---
 ui/src/main/frontend/src/js/cms.js                 |  5 +-
 .../sling-cms/components/cms/columns/name/name.jsp | 25 +++----
 .../components/cms/columns/publish/publish.jsp     |  2 +-
 .../components/cms/contentbreadcrumb/edit.json     | 31 ++++++++
 .../components/cms/contenttable/contenttable.jsp   | 33 ++++----
 .../components/editor/fields/file/field.jsp        | 87 ++++++++++------------
 .../components/editor/fields/repeating/field.jsp   | 12 +--
 7 files changed, 108 insertions(+), 87 deletions(-)

diff --git a/ui/src/main/frontend/src/js/cms.js b/ui/src/main/frontend/src/js/cms.js
index 7f17092..d53ed3d 100644
--- a/ui/src/main/frontend/src/js/cms.js
+++ b/ui/src/main/frontend/src/js/cms.js
@@ -54,12 +54,13 @@ Sling.CMS = {
 				$('body').append($modal);
 				$modal.find('.modal-card-body').load(link + " " +path,function(){
 					var submitButton = $modal.find('button:submit');
-					$modal.find('.modal-card-foot').append(submitButton);
+					var closeButton = $modal.find('.close-modal');
+					submitButton.insertBefore(closeButton);
 					submitButton.on("click",function(){
 						$modal.find('form').submit();
 					})
 					$modal.addClass('is-active');
-					$modal.find('.close-modal').click(function(){
+					closeButton.click(function(){
 						$modal.css('display','none').remove();
 						return false;
 					});
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/name/name.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/name/name.jsp
index 0245485..5455d56 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/name/name.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/name/name.jsp
@@ -17,16 +17,15 @@
  * under the License.
  */ --%>
 <%@include file="/libs/sling-cms/global.jsp"%>
-<td>
-	<c:set var="colValue" value="${resource.name}" />
-	<c:choose>
-		<c:when test="${colConfig.valueMap.link}">
-			<a class="button is-outlined" href="${colConfig.valueMap.prefix}${resource.path}">
-				<sling:encode value="${colValue}" mode="HTML" />
-			</a>
-		</c:when>
-		<c:otherwise>
-			<sling:encode value="${colValue}" mode="HTML" />
-		</c:otherwise>
-	</c:choose>
-</td>
\ No newline at end of file
+<td><c:set var="colValue" value="${resource.name}" /> <c:choose>
+        <c:when test="${colConfig.valueMap.link}">
+            <a class="has-text-primary"
+                href="${colConfig.valueMap.prefix}${resource.path}">
+                <span class="icon"><i class="jam jam-link"></i></span>&nbsp;
+                <sling:encode value="${colValue}" mode="HTML" />
+            </a>
+        </c:when>
+        <c:otherwise>
+            <sling:encode value="${colValue}" mode="HTML" />
+        </c:otherwise>
+    </c:choose></td>
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/publish/publish.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/publish/publish.jsp
index 2005d42..ee55ded 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/publish/publish.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/columns/publish/publish.jsp
@@ -25,7 +25,7 @@
 			</a>
 		</c:when>
 		<c:otherwise>
-			<a class="button is-warning Fetch-Modal" href="/cms/shared/publish.html${resource.path}" title="Click to Publish" data-title="Publish" data-path=".Main-Content form">
+			<a class="button is-danger Fetch-Modal" href="/cms/shared/publish.html${resource.path}" title="Click to Publish" data-title="Publish" data-path=".Main-Content form">
 				<i class="jam jam-upload"></i>
 			</a>
 		</c:otherwise>
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentbreadcrumb/edit.json b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentbreadcrumb/edit.json
new file mode 100644
index 0000000..e5f0709
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentbreadcrumb/edit.json
@@ -0,0 +1,31 @@
+ {
+	"jcr:primaryType": "nt:unstructured",
+	"sling:resourceType": "sling-cms/components/editor/slingform",
+	"title": "Suffix BreadCrumb",
+	"button": "Save Suffix Breadcrumb",
+	"fields": {
+		"jcr:primaryType": "nt:unstructured",
+		"sling:resourceType": "sling-cms/components/general/container",
+		"level": {
+			"jcr:primaryType": "nt:unstructured",
+			"sling:resourceType": "sling-cms/components/editor/fields/text",
+			"label": "Depth",
+			"name": "depth",
+			"required": true,
+			"type": "number"
+		},
+		"levelTypeHint": {
+			"jcr:primaryType": "nt:unstructured",
+			"sling:resourceType": "sling-cms/components/editor/fields/hidden",
+			"name": "level@TypeHint",
+			"value": "Long"
+		},
+		"prefix": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/text",
+            "label": "Prefix",
+            "name": "prefix",
+            "required": true
+        }
+	}
+}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contenttable/contenttable.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contenttable/contenttable.jsp
index 288d921..80819b1 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contenttable/contenttable.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contenttable/contenttable.jsp
@@ -16,29 +16,30 @@
  * specific language governing permissions and limitations
  * under the License.
  */ --%>
- <%@page import="org.apache.sling.cms.core.models.components.Breadcrumbs"%>
- <%@include file="/libs/sling-cms/global.jsp"%>
- <sling:adaptTo adaptable="${slingRequest}" adaptTo="org.apache.sling.cms.core.models.components.ContentTable" var="model"/>
- <div class="container is-fullwidth">
+<%@page import="org.apache.sling.cms.core.models.components.Breadcrumbs"%>
+<%@include file="/libs/sling-cms/global.jsp"%>
+<sling:adaptTo adaptable="${slingRequest}"
+    adaptTo="org.apache.sling.cms.core.models.components.ContentTable"
+    var="model" />
 <table class="table is-fullwidth is-striped">
     <thead>
         <tr>
             <c:forEach var="column" items="${model.columnData}">
-                <th class="${column.classString}" data-attribute="${column.name}">
-                    <sling:encode value="${column.title}" mode="HTML" />
-                </th>
+                <th class="${column.classString}"
+                    data-attribute="${column.name}"><sling:encode
+                        value="${column.title}" mode="HTML" /></th>
             </c:forEach>
         </tr>
     </thead>
     <tbody>
         <c:forEach var="child" items="${model.children}">
-                <tr class="sortable__row" data-resource="${child.path}" data-type="${child.dataType}">
-                    <c:forEach var="column" items="${model.columnData}">
-                            <c:set var="colConfig" value="${column.resource}" scope="request" />
-                            <sling:include path="${child.path}" resourceType="${column.fieldResourceType}" />
-                    </c:forEach>
-                </tr>
-        </c:forEach> 
+            <tr class="sortable__row" data-resource="${child.path}"
+                data-type="${child.dataType}">
+                <c:forEach var="column" items="${model.columnData}">
+                    <c:set var="colConfig" value="${column.resource}" scope="request" />
+                    <sling:include path="${child.path}" resourceType="${column.fieldResourceType}" />
+                </c:forEach>
+            </tr>
+        </c:forEach>
     </tbody>
-</table>
-</div>
\ No newline at end of file
+</table>
\ No newline at end of file
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 9817976..7b0748c 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
@@ -16,59 +16,48 @@
  * specific language governing permissions and limitations
  * under the License.
  */ --%>
- <%@include file="/libs/sling-cms/global.jsp"%>
+<%@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="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">
+    <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 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 class="repeating__add button">+</button>
+        </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>
+    <a class="repeating__add button">+</a>
 </div>
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/repeating/field.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/repeating/field.jsp
index fec99b8..bd50290 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/repeating/field.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/repeating/field.jsp
@@ -24,9 +24,9 @@
 	 			<input type="${properties.type}" value="" class="input" name="${properties.name}" ${required} ${disabled} />
 	 		</div>
 	 		<div class="control">
-		 		<button class="repeating__remove button">
+		 		<a class="repeating__remove button">
 		 			<span class="jam jam-minus"></span>
-		 		</button>
+		 		</a>
 		 	</div>
 	 	</div>
  	</fieldset>
@@ -37,14 +37,14 @@
 		 			<input type="${properties.type}" value="${value}" class="input" name="${properties.name}" ${required} ${disabled} />
 		 		</div>
 		 		<div class="control">
-			 		<button class="repeating__remove button">
+			 		<a class="repeating__remove button">
 		 				<span class="jam jam-minus"></span>
-			 		</button>
+			 		</a>
 			 	</div>
 		 	</div>
 	 	</c:forEach>
  	</div>
- 	<button class="repeating__add button">
+ 	<a class="repeating__add button">
 		 <span class="jam jam-plus"></span>
- 	</button>
+ 	</a>
  </div>
\ No newline at end of file


[sling-org-apache-sling-app-cms] 16/17: AEM-7900 fixed corrupted start.json

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

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

commit e0b2b83da3026477a60280e3566807e5f4c669fb
Author: JE Bailey <ja...@sas.com>
AuthorDate: Mon Oct 1 15:33:48 2018 -0400

    AEM-7900 fixed corrupted start.json
---
 .../jcr_root/libs/sling-cms/content/start.json     | 83 +++++++++++-----------
 1 file changed, 42 insertions(+), 41 deletions(-)

diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json
index 2e9aa72..bec8c39 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json
@@ -58,50 +58,51 @@
                 "title": "Tools",
                 "links": {
                     "jcr:primaryType": "nt:unstructured",
-                "links": {
-                    "jcr:primaryType": "nt:unstructured",
-                    "bulkreplace": {
-                        "jcr:primaryType": "nt:unstructured",
-                        "link": "/cms/admin/bulkreplace.html",
-                        "text": "Bulk Replace"
-                    },
-                    "contentpackages": {
-                        "jcr:primaryType": "nt:unstructured",
-                        "link": "/bin/packages.html",
-                        "text": "Content Packages"
-                    },
-                    "i18n": {
-                        "jcr:primaryType": "nt:unstructured",
-                        "link": "/cms/i18n/dictionaries.html/etc/i18n",
-                        "text": "Internationalization (i18n)"
-                    },
-                    "loadcontent": {
-                        "jcr:primaryType": "nt:unstructured",
-                        "link": "/cms/admin/loadcontent.html",
-                        "text": "Load Content"
-                    },
-                    "mappings": {
-                        "jcr:primaryType": "nt:unstructured",
-                        "link": "/cms/mappings/list.html/etc/map",
-                        "text": "Mappings"
-                    },
-                    "nodebrowser": {
-                        "jcr:primaryType": "nt:unstructured",
-                        "link": "/bin/browser.html",
-                        "text": "Node Browser"
-                    },
-                    "systemconsole": {
-                        "jcr:primaryType": "nt:unstructured",
-                        "link": "/system/console",
-                        "text": "System Console"
-                    },
-                    "usersgroups": {
+                    "links": {
                         "jcr:primaryType": "nt:unstructured",
-                        "link": "/bin/users.html",
-                        "text": "Users &amp; Groups"
+                        "bulkreplace": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "link": "/cms/admin/bulkreplace.html",
+                            "text": "Bulk Replace"
+                        },
+                        "contentpackages": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "link": "/bin/packages.html",
+                            "text": "Content Packages"
+                        },
+                        "i18n": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "link": "/cms/i18n/dictionaries.html/etc/i18n",
+                            "text": "Internationalization (i18n)"
+                        },
+                        "loadcontent": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "link": "/cms/admin/loadcontent.html",
+                            "text": "Load Content"
+                        },
+                        "mappings": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "link": "/cms/mappings/list.html/etc/map",
+                            "text": "Mappings"
+                        },
+                        "nodebrowser": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "link": "/bin/browser.html",
+                            "text": "Node Browser"
+                        },
+                        "systemconsole": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "link": "/system/console",
+                            "text": "System Console"
+                        },
+                        "usersgroups": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "link": "/bin/users.html",
+                            "text": "Users &amp; Groups"
+                        }
                     }
                 }
             }
         }
     }
-}
\ No newline at end of file
+}


[sling-org-apache-sling-app-cms] 01/17: initial changes

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

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

commit 5d2c55ae3c54ccceb1538c8ac6d155d6ee1e5f2c
Author: JE Bailey <ja...@sas.com>
AuthorDate: Fri Sep 7 13:25:13 2018 -0400

    initial changes
---
 .../cms/core/models/components/Breadcrumbs.java    | 93 ++++++++++++++++++++++
 ui/pom.xml                                         | 12 +++
 .../cms/contentbreadcrumb/contentbreadcrumb.jsp    | 40 ++++------
 ui/src/main/resources/jcr_root/web-fragment.xml    |  5 ++
 4 files changed, 126 insertions(+), 24 deletions(-)

diff --git a/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java b/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java
new file mode 100644
index 0000000..4c7da58
--- /dev/null
+++ b/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.cms.core.models.components;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.models.annotations.DefaultInjectionStrategy;
+import org.apache.sling.models.annotations.Model;
+import org.apache.sling.models.annotations.injectorspecific.Self;
+
+@Model(adaptables = SlingHttpServletRequest.class,defaultInjectionStrategy=DefaultInjectionStrategy.OPTIONAL)
+public class Breadcrumbs {
+
+    @Inject
+    int depth;
+
+    @Inject
+    @Named("jcr:title")
+    String title;
+
+    @Inject
+    String prefix;
+    
+    @Inject
+    Resource resource;
+    
+    @Self
+    SlingHttpServletRequest servletRequest;
+    
+    Resource suffixResource;
+    
+    List<PathData> pathData = new ArrayList<>();
+
+    @PostConstruct
+    public void postConstruct() {
+        suffixResource = servletRequest.getRequestPathInfo().getSuffixResource();
+        pathData.add(new PathData(prefix+resource.getPath(),title));
+    }
+    
+    public String getTitle() {
+        return null;
+    }
+    
+    public List<PathData> getPathData() {
+        return pathData;
+    }
+    
+    public String getString() {
+        return "flounder";
+    }
+    
+    public static class PathData{
+        
+        private String href;
+        private String title;
+        
+        public PathData(String href, String title) {
+            this.href = href;
+            this.title = title;
+        }
+        public String getHref() {
+            return href; //prefix + resource path
+        }
+        //${parent.valueMap['jcr:title'] != null ? parent.valueMap['jcr:title'] : parent.valueMap['jcr:content/jcr:title']}" default="${parent.name}"
+        public String getTitle() {
+            return title;
+        }
+        
+    }
+
+}
diff --git a/ui/pom.xml b/ui/pom.xml
index 513307e..a5db13e 100644
--- a/ui/pom.xml
+++ b/ui/pom.xml
@@ -167,4 +167,16 @@
 			</build>
 		</profile>
 	</profiles>
+	<dependencies>
+	    <dependency>
+	        <groupId>org.apache.sling</groupId>
+	        <artifactId>org.apache.sling.models.api</artifactId>
+	    </dependency>
+	    <dependency>
+	        <groupId>org.apache.sling</groupId>
+	        <artifactId>org.apache.sling.cms.core</artifactId>
+	        <version>0.9.1-SNAPSHOT</version>
+	        <scope>provided</scope>
+	    </dependency>
+	</dependencies>
 </project>
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentbreadcrumb/contentbreadcrumb.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentbreadcrumb/contentbreadcrumb.jsp
index 18212b7..9de9e1c 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentbreadcrumb/contentbreadcrumb.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentbreadcrumb/contentbreadcrumb.jsp
@@ -16,30 +16,22 @@
  * specific language governing permissions and limitations
  * under the License.
  */ --%>
- <%@include file="/libs/sling-cms/global.jsp"%>
-<sling:getParent resource="${slingRequest.requestPathInfo.suffixResource}" var="root" level="${resource.valueMap.depth}" />
-<nav class="breadcrumb" aria-label="breadcrumbs">
+<%@page import="org.apache.sling.models.factory.ModelFactory"%>
+<%@page import="org.apache.sling.cms.core.models.components.Breadcrumbs"%>
+<%@include file="/libs/sling-cms/global.jsp"%><%
+
+%>
+
+<sling:adaptTo adaptable="${resource}" adaptTo="org.apache.sling.cms.core.models.components.Breadcrumbs" var="model"/><nav class="breadcrumb" aria-label="breadcrumbs">
 <ul>
-    <li>
-        <a href="${resource.valueMap.prefix}${root.path}">
-            <sling:encode value="${root.valueMap['jcr:title'] != null ? root.valueMap['jcr:title'] : root.valueMap['jcr:content/jcr:title']}" default="${root.name}" mode="HTML" />
-        </a>
-    </li>
-    <c:if test="${site.path != slingRequest.requestPathInfo.suffix && site.path != slingRequest.requestPathInfo.suffixResource.parent.path}">
-        <c:forEach var="parent" items="${sling:getParents(slingRequest.requestPathInfo.suffixResource,(resource.valueMap.depth + 1))}">
-            <li>
-                <a href="${resource.valueMap.prefix}${parent.path}">
-                    <sling:encode value="${parent.valueMap['jcr:title'] != null ? parent.valueMap['jcr:title'] : parent.valueMap['jcr:content/jcr:title']}" default="${parent.name}" mode="HTML" />
-                </a>
-            </li>
-        </c:forEach>
-    </c:if>
-    <c:if test="${root.path != slingRequest.requestPathInfo.suffix}">
-        <li class="is-active">
-            <a href="#">
-            <sling:encode value="${slingRequest.requestPathInfo.suffixResource.valueMap['jcr:title'] != null ? slingRequest.requestPathInfo.suffixResource.valueMap['jcr:title'] : slingRequest.requestPathInfo.suffixResource.valueMap['jcr:content/jcr:title']}" default="${slingRequest.requestPathInfo.suffixResource.name}" mode="HTML" />
-            </a>
-        </li>
-    </c:if>
+   <c:forEach var="item" items="${model.pathData}">
+       <li>
+           <a href="${item.href}">
+               <sling:encode value="${item.title}" mode="HTML" />
+           </a>
+       </li>
+   </c:forEach>
+   <li>$WHY?
+   <li>${model.string}</li>
 </ul>
 </nav>
diff --git a/ui/src/main/resources/jcr_root/web-fragment.xml b/ui/src/main/resources/jcr_root/web-fragment.xml
new file mode 100644
index 0000000..78ede58
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/web-fragment.xml
@@ -0,0 +1,5 @@
+<web-fragment id="WebFragment_ID" version="3.0"
+    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd">
+    <name>ui</name>
+</web-fragment>
\ No newline at end of file