Products.CMFPlone/4.3.x: Merge pull request #2101 from plone/issue_2051

GitHub <jenkins-z4DKO/[email protected]> Sat, 29 Jul 2017 14:33:33 -0700 (PDT)
Newsgroups gmane.comp.web.zope.plone.cvs
Message-ID <[email protected]>
Repository: Products.CMFPlone
Branch: refs/heads/4.3.x
Date: 2017-07-29T23:33:14+02:00
Author: Gil Forcada Codinachs (gforcada) <[email protected]>
Commit: https://github.com/plone/Products.CMFPlone/commit/a6cb121a4f48ac62753babd37f58b313869f5050

Merge pull request #2101 from plone/issue_2051

* Add data-base-url attribute in body tag closes #2051

Files changed:
M Products/CMFPlone/browser/jsvariables.py
M Products/CMFPlone/skins/plone_ecmascript/kss-bbb.js
M Products/CMFPlone/skins/plone_ecmascript/unlockOnFormUnload.js
M Products/CMFPlone/skins/plone_templates/main_template.pt
M Products/CMFPlone/tests/browser.txt
M docs/CHANGES.rst

diff --git a/Products/CMFPlone/browser/jsvariables.py b/Products/CMFPlone/browser/jsvariables.py
index a2d205aa6..7215a9189 100644
--- a/Products/CMFPlone/browser/jsvariables.py
+++ b/Products/CMFPlone/browser/jsvariables.py
@@ -7,6 +7,7 @@
 
 TEMPLATE = """\
 var portal_url = '%(portal_url)s';
+var base_url = '%(base_url)s';
 var form_modified_message = '%(form_modified)s';
 var form_resubmit_message = '%(form_resubmit)s';
 var external_links_open_new_window = '%(open_links)s';
@@ -36,6 +37,7 @@ def __call__(self, *args, **kwargs):
 
         props = getToolByName(context, 'portal_properties').site_properties
         portal_url = getToolByName(context, 'portal_url')()
+        base_url = self.request['HTTP_REFERER']
 
         # the following are flags for mark_special_links.js
         # links get the target="_blank" attribute
@@ -54,6 +56,7 @@ def __call__(self, *args, **kwargs):
 
         return TEMPLATE % dict(
             portal_url=portal_url,
+            base_url=base_url,
             open_links=open_links,
             mark_links=mark_links,
             form_modified=form_modified,
diff --git a/Products/CMFPlone/skins/plone_ecmascript/kss-bbb.js b/Products/CMFPlone/skins/plone_ecmascript/kss-bbb.js
index 305e9f715..255268cbc 100644
--- a/Products/CMFPlone/skins/plone_ecmascript/kss-bbb.js
+++ b/Products/CMFPlone/skins/plone_ecmascript/kss-bbb.js
@@ -1,17 +1,17 @@
 (function($){
 
-function createURL(view){
-    // using this method we keep the get parameters used with plone protect
-    // https://gist.github.com/jlong/2428561
-    if (typeof view === 'undefined') {
-        view = '';
+/**
+* Polyfill to add data attributes as fallback if main_template.pt is customized
+*/
+$(function(){
+    if (typeof($('body').attr('data-portal-url')) !== 'undefined' &&
+        typeof($('body').attr('data-base-url')) !== 'undefined') {
+        // Data attributes already processed by backend
+        return;
     }
-    var parser = document.createElement('a');
-    parser.href = location.href;
-    parser.pathname = parser.pathname.replace(/\/@@.*/, '');
-    parser.pathname += view;
-    return parser.href;
-}
+    $('body').attr('data-portal-url', portal_url);
+    $('body').attr('data-base-url', base_url);
+});
 
 function refreshPortlet(hash, _options){
     var options = {
@@ -22,7 +22,7 @@ function refreshPortlet(hash, _options){
     $.extend(options, _options);
     options.data.portlethash = hash;
     ajaxOptions = options.ajaxOptions;
-    ajaxOptions.url = createURL('/@@render-portlet');
+    ajaxOptions.url = $('body').attr('data-base-url') + '/@@render-portlet';
     ajaxOptions.success = function(data){
         var container = $('[data-portlethash="' + hash + '"]');
         var portlet = $(data);
@@ -116,7 +116,7 @@ $(document).ready(function(){
 
     $('#content-core').delegate('#sharing-search-button', 'click', function(){
         $.ajax({
-            url: createURL('/@@updateSharingInfo'),
+            url: $('body').attr('data-base-url') + '/@@updateSharingInfo',
             data: {
                 search_term: $('#sharing-user-group-search').val(),
                 'form.button.Search': 'Search'
@@ -135,7 +135,7 @@ $(document).ready(function(){
         var data = form.serializeArray();
         data.push({name: 'form.button.Save', value: 'Save'});
         $.ajax({
-            url: createURL('/@@updateSharingInfo'),
+            url: $('body').attr('data-base-url') + '/@@updateSharingInfo',
             data: data,
             type: 'POST',
             dataType: 'json',
diff --git a/Products/CMFPlone/skins/plone_ecmascript/unlockOnFormUnload.js b/Products/CMFPlone/skins/plone_ecmascript/unlockOnFormUnload.js
index 4498af2d7..73239273c 100644
--- a/Products/CMFPlone/skins/plone_ecmascript/unlockOnFormUnload.js
+++ b/Products/CMFPlone/skins/plone_ecmascript/unlockOnFormUnload.js
@@ -34,24 +34,15 @@ plone.UnlockHandler = {
         // form submit process. This means: no unlock needed,
         // and it also would be harmful (ConflictError)
         if (plone.UnlockHandler.submitting) {return;}
-        $.ajax({url: plone.UnlockHandler._baseUrl() + '/@@plone_lock_operations/safe_unlock', async: false});
+        $.ajax({
+            url: $('body').attr('data-base-url') + '/@@plone_lock_operations/safe_unlock',
+            async: false
+        });
     },
     
     refresh: function() {
         if (plone.UnlockHandler.submitting) {return;}
-        $.get(plone.UnlockHandler._baseUrl() + '/@@plone_lock_operations/refresh_lock');
-    },
-    
-    _baseUrl: function() {
-        var baseUrl, pieces;
-
-        baseUrl = $('base').attr('href');
-        if (!baseUrl) {
-            pieces = window.location.href.split('/');
-            pieces.pop();
-            baseUrl = pieces.join('/');
-        }
-        return baseUrl;
+        $.get($('body').attr('data-base-url') + '/@@plone_lock_operations/refresh_lock');
     }
 };
 
diff --git a/Products/CMFPlone/skins/plone_templates/main_template.pt b/Products/CMFPlone/skins/plone_templates/main_template.pt
index c637e35b2..ca538320e 100644
--- a/Products/CMFPlone/skins/plone_templates/main_template.pt
+++ b/Products/CMFPlone/skins/plone_templates/main_template.pt
@@ -63,7 +63,9 @@
                     sr python:plone_view.have_portlets('plone.rightcolumn', view);
                     body_class python:plone_view.bodyClass(template, view);"
         tal:attributes="class body_class;
-                        dir python: isRTL and 'rtl' or 'ltr'">
+                        dir python: isRTL and 'rtl' or 'ltr';
+                        data-portal-url portal_url;
+                        data-base-url context/absolute_url">
     <div id="visual-portal-wrapper">
 
       <div id="portal-top" i18n:domain="plone">
diff --git a/Products/CMFPlone/tests/browser.txt b/Products/CMFPlone/tests/browser.txt
index 2a3c64f97..d044c1cae 100644
--- a/Products/CMFPlone/tests/browser.txt
+++ b/Products/CMFPlone/tests/browser.txt
@@ -13,10 +13,10 @@ Test for "template id" in <body> tag. See tickets #9111/#8777
 
     >>> browser.open('http://nohost/plone/front-page')
     >>> browser.contents
-    '...<body class="template-document_view portaltype-document site-plone section-front-page...'
+    '...<body data-portal-url="http://nohost/plone" class="template-document_view portaltype-document site-plone section-front-page...'
     >>> browser.open('http://nohost/plone/news')
     >>> browser.contents
-    '...<body class="template-folder_summary_view portaltype-collection site-plone section-news...'
+    '...<body data-portal-url="http://nohost/plone" class="template-folder_summary_view portaltype-collection site-plone section-news...'
 
 Login
 
@@ -29,4 +29,4 @@ Test explicit browser view
 
     >>> browser.open('http://nohost/plone/@@dashboard')
     >>> browser.contents
-    '...<body class="template-dashboard portaltype-plone-site site-plone...'
+    '...<body data-portal-url="http://nohost/plone" class="template-dashboard portaltype-plone-site site-plone...'
diff --git a/docs/CHANGES.rst b/docs/CHANGES.rst
index 364b084c3..3006c4330 100644
--- a/docs/CHANGES.rst
+++ b/docs/CHANGES.rst
@@ -9,7 +9,19 @@ Changelog
 4.3.16 (unreleased)
 -------------------
 
-- Nothing changed yet.
+Bug fixes:
+
+- Add data-base-url attribute in body tag.
+  Closes `issue 2051 <https://github.com/plone/Products.CMFPlone/issues/2051>`_
+  [rodfersou]
+
+- Fix @@plone_lock_operations.
+  Fixes `issue 2061 <https://github.com/plone/Products.CMFPlone/issues/2061>`_
+  [rodfersou]
+
+- Review @@sharing
+  Fixes `issue 2053 <https://github.com/plone/Products.CMFPlone/issues/2053>`_.
+  [rodfersou]
 
 
 4.3.15 (2017-07-03)



------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot