svn commit: r1559338 - in /ofbiz/trunk/framework: images/webapp/images/fieldlookup.js images/webapp/images/selectall.js widget/templates/htmlFormMacroLibrary.ftl

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r1559338 - in /ofbiz/trunk/framework: images/webapp/images/fieldlookup.js images/webapp/images/selectall.js widget/templates/htmlFormMacroLibrary.ftl

jleroux@apache.org
Author: jleroux
Date: Sat Jan 18 10:19:44 2014
New Revision: 1559338

URL: http://svn.apache.org/r1559338
Log:
A patch from Leon for "Form pagination fails if total length of search condition is more than about 2~3k bytes" https://issues.apache.org/jira/browse/OFBIZ-5478

Since it uses "GET" method to submit the pagination request, it's restricted by the URL max length limitation.
The patch attached changes the submit way from GET to "POST" if total length of URL > 2k.


jleroux: I also sort of (found after it was due to it) reverted r1204170, I don't see the reason for this now, and it was useless duplicating the current entry in the page size dropdown

Modified:
    ofbiz/trunk/framework/images/webapp/images/fieldlookup.js
    ofbiz/trunk/framework/images/webapp/images/selectall.js
    ofbiz/trunk/framework/widget/templates/htmlFormMacroLibrary.ftl

Modified: ofbiz/trunk/framework/images/webapp/images/fieldlookup.js
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/images/webapp/images/fieldlookup.js?rev=1559338&r1=1559337&r2=1559338&view=diff
==============================================================================
--- ofbiz/trunk/framework/images/webapp/images/fieldlookup.js (original)
+++ ofbiz/trunk/framework/images/webapp/images/fieldlookup.js Sat Jan 18 10:19:44 2014
@@ -542,55 +542,19 @@ var ButtonModifier = function(lookupDiv)
  // modify nav-pager
  var navPagers = jQuery("#" + lookupDiv + " .nav-pager a");
  jQuery.each(navPagers, function(navPager) {
- jQuery(navPagers[navPager]).attr("href",
- "javascript:lookupPaginationAjaxRequest('" + encodeURI(jQuery(navPagers[navPager]).attr("href")) + "','link')");
+    var onClickEvent = navPagers[navPager].onclick;
+    navPagers[navPager].onclick = function(){
+        this.setAttribute("data-lookupajax", "true");
+        onClickEvent.apply(this);
+    }
  });
 
  var navPagersSelect = jQuery("#" + lookupDiv + " .nav-pager select");
  jQuery.each(navPagersSelect, function(navPager) {
- var onChangeEvent = jQuery(navPagersSelect[navPager]).attr("onchange");
- if ((typeof onChangeEvent) == "function") { // IE6/7 Fix
- onChangeEvent = onChangeEvent.toString();
- var ocSub = onChangeEvent.substring((onChangeEvent.indexOf('=') + 3), (onChangeEvent.length - 4));
- // define search pattern we must seperate between IE and
- // Other Browser
- var searchPattern = /" \+ this.value \+ "/g;
- var searchPattern_IE = /'\+this.value\+'/g;
- var searchPattern2 = /" \+ this.valu/g;
- var searchPattern2_IE = /'\+this.valu/g;
-
- if (searchPattern.test(ocSub)) {
- var viewSize = navPagersSelect[navPager].value;
- var spl = ocSub.split(searchPattern);
- navPagersSelect[navPager].onchange = function() {
- lookupPaginationAjaxRequest(spl[0] + this.value + spl[1], 'select');
- };
- } else if (searchPattern_IE.test(ocSub)) {
- var viewSize = navPagersSelect[navPager].value;
- var spl = ocSub.split(searchPattern_IE);
- navPagersSelect[navPager].onchange = function() {
- lookupPaginationAjaxRequest("/" + spl[0] + this.value + spl[1], 'select');
- };
- } else if (searchPattern2.test(ocSub)) {
- ocSub = ocSub.replace(searchPattern2, "");
- if (searchPattern.test(ocSub)) {
- ocSub.replace(searchPattern, viewSize);
- }
- navPagersSelect[navPager].onchange = function() {
- lookupPaginationAjaxRequest(ocSub + this.value, 'select');
- };
- } else if (searchPattern2_IE.test(ocSub)) {
- ocSub = ocSub.replace(searchPattern2_IE, "");
- if (searchPattern_IE.test(ocSub)) {
- ocSub.replace(searchPattern_IE, viewSize);
- }
- navPagersSelect[navPager].onchange = function() {
- lookupPaginationAjaxRequest("/" + ocSub + this.value, 'select');
- };
- }
- } else {
- var ocSub = onChangeEvent.substring((onChangeEvent.indexOf('=') + 1), (onChangeEvent.length - 1));
- navPagersSelect[navPager].setAttribute("onchange", "lookupPaginationAjaxRequest(" + ocSub + ",'')");
+ var onChangeEvent = navPagersSelect[navPager].onchange;
+ navPagersSelect[navPager].onchange = function(){
+    this.setAttribute("data-lookupajax", "true");
+    onChangeEvent.apply(this);
  }
  });
  }
@@ -685,7 +649,9 @@ function lookupPaginationAjaxRequest(nav
  var screenletTitleBar = jQuery("#" + lookupId + " .screenlet-title-bar :visible:first");
 
  jQuery.ajax({
- url : navAction,
+ url : navAction.substring(0, navAction.indexOf("?")),
+ type : "POST",
+ data : navAction.substring(navAction.indexOf("?")+1, navAction.length),
  beforeSend : function(jqXHR, settings) {
  // Here we append the spinner to the lookup screenlet and it will
  // shown till the ajax request is processed.

Modified: ofbiz/trunk/framework/images/webapp/images/selectall.js
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/images/webapp/images/selectall.js?rev=1559338&r1=1559337&r2=1559338&view=diff
==============================================================================
--- ofbiz/trunk/framework/images/webapp/images/selectall.js (original)
+++ ofbiz/trunk/framework/images/webapp/images/selectall.js Sat Jan 18 10:19:44 2014
@@ -942,4 +942,46 @@ function showErrorAlert(errBoxTitle, err
             }
         });
     }
+}
+
+/**
+ * Submit the pagination request
+ * @param obj The DOM object of pagination anchor or select element
+ * @param url The pagination URL
+ */
+function submitPagination(obj, url) {
+    if (obj.getAttribute("data-lookupajax") == "true" && typeof window.lookupPaginationAjaxRequest == "function") {
+        lookupPaginationAjaxRequest(url, (obj.tagName == "SELECT" ? "select" : "link"));
+        return false;
+    }
+    if (url.length > 2000) {
+        var request = url.substring(0, url.indexOf("?"));
+        var params = url.substring(url.indexOf("?")+1, url.length);
+        var paramsArray = params.split("&");
+        var form = document.createElement("form");
+        form.setAttribute("method", "post");
+        form.setAttribute("action", request);
+        for (var i = 0; i < paramsArray.length; i ++) {
+            var param = paramsArray[i];
+            if (param!= "" && param.indexOf("=") > 0) {
+                var keyValue = param.split("=");
+                var hiddenField = document.createElement("input");
+                hiddenField.setAttribute("type", "hidden");
+                hiddenField.setAttribute("name", keyValue[0]);
+                hiddenField.setAttribute("value", keyValue[1]);
+                form.appendChild(hiddenField);
+            }
+        }
+        document.body.appendChild(form);
+        form.submit();
+        return false;
+    } else {
+        if (obj.tagName == "SELECT") {
+            location.href = url;
+            return false;
+        } else {
+            obj.href = url;
+            return true;
+        }
+    }
 }
\ No newline at end of file

Modified: ofbiz/trunk/framework/widget/templates/htmlFormMacroLibrary.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/templates/htmlFormMacroLibrary.ftl?rev=1559338&r1=1559337&r2=1559338&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/templates/htmlFormMacroLibrary.ftl (original)
+++ ofbiz/trunk/framework/widget/templates/htmlFormMacroLibrary.ftl Sat Jan 18 10:19:44 2014
@@ -740,21 +740,21 @@ Parameter: lastViewName, String, optiona
   <#if listSize gt viewSize>
     <div class="${paginateStyle}">&nbsp;
       <ul>
-        <li class="${paginateFirstStyle}<#if viewIndex gt 0>"><a href="<#if ajaxEnabled>javascript:ajaxUpdateAreas('${ajaxFirstUrl}')<#else>${firstUrl}</#if>">${paginateFirstLabel}</a><#else>-disabled"><span>${paginateFirstLabel}</span></#if></li>
-        <li class="${paginatePreviousStyle}<#if viewIndex gt 0>"><a href="<#if ajaxEnabled>javascript:ajaxUpdateAreas('${ajaxPreviousUrl}')<#else>${previousUrl}</#if>">${paginatePreviousLabel}</a><#else>-disabled"><span>${paginatePreviousLabel}</span></#if></li>
-        <#if listSize gt 0 && javaScriptEnabled><li class="nav-page-select">${pageLabel} <select name="page" size="1" onchange="<#if ajaxEnabled>javascript:ajaxUpdateAreas('${ajaxSelectUrl}')<#else>location.href='${selectUrl}'+this.value;</#if>"><#rt/>
+        <li class="${paginateFirstStyle}<#if viewIndex gt 0>"><a href="javascript:void(0)" onclick="<#if ajaxEnabled>ajaxUpdateAreas('${ajaxFirstUrl}')<#else>submitPagination(this, '${firstUrl}')</#if>">${paginateFirstLabel}</a><#else>-disabled"><span>${paginateFirstLabel}</span></#if></li>
+        <li class="${paginatePreviousStyle}<#if viewIndex gt 0>"><a href="javascript:void(0)" onclick="<#if ajaxEnabled>ajaxUpdateAreas('${ajaxPreviousUrl}')<#else>submitPagination(this, '${previousUrl}')</#if>">${paginatePreviousLabel}</a><#else>-disabled"><span>${paginatePreviousLabel}</span></#if></li>
+        <#if listSize gt 0 && javaScriptEnabled><li class="nav-page-select">${pageLabel} <select name="page" size="1" onchange="<#if ajaxEnabled>ajaxUpdateAreas('${ajaxSelectUrl}')<#else>submitPagination(this, '${selectUrl}'+this.value)</#if>"><#rt/>
           <#assign x=(listSize/viewSize)?ceiling>
             <#list 1..x as i>
               <#if i == (viewIndex+1)><option selected="selected" value="<#else><option value="</#if>${i-1}">${i}</option>
             </#list>
           </select></li>
         </#if>
-        <li class="${paginateNextStyle}<#if highIndex lt listSize>"><a href="<#if ajaxEnabled>javascript:ajaxUpdateAreas('${ajaxNextUrl}')<#else>${nextUrl}</#if>">${paginateNextLabel}</a><#else>-disabled"><span>${paginateNextLabel}</span></#if></li>
-        <li class="${paginateLastStyle}<#if highIndex lt listSize>"><a href="<#if ajaxEnabled>javascript:ajaxUpdateAreas('${ajaxLastUrl}')<#else>${lastUrl}</#if>">${paginateLastLabel}</a><#else>-disabled"><span>${paginateLastLabel}</span></#if></li>
-        <#if javaScriptEnabled><li class="nav-pagesize"><select name="pageSize" size="1" onchange="<#if ajaxEnabled>javascript:ajaxUpdateAreas('${ajaxSelectSizeUrl}')<#else>location.href='${selectSizeUrl}';</#if>"><#rt/>
-          <#assign availPageSizes = [viewSize, 20, 30, 50, 100, 200]>
+        <li class="${paginateNextStyle}<#if highIndex lt listSize>"><a href="javascript:void(0)" onclick="<#if ajaxEnabled>ajaxUpdateAreas('${ajaxNextUrl}')<#else>submitPagination(this, '${nextUrl}')</#if>">${paginateNextLabel}</a><#else>-disabled"><span>${paginateNextLabel}</span></#if></li>
+        <li class="${paginateLastStyle}<#if highIndex lt listSize>"><a href="javascript:void(0)" onclick="<#if ajaxEnabled>ajaxUpdateAreas('${ajaxLastUrl}')<#else>submitPagination(this, '${lastUrl}')</#if>">${paginateLastLabel}</a><#else>-disabled"><span>${paginateLastLabel}</span></#if></li>
+        <#if javaScriptEnabled><li class="nav-pagesize"><select name="pageSize" size="1" onchange="<#if ajaxEnabled>ajaxUpdateAreas('${ajaxSelectSizeUrl}')<#else>submitPagination(this, '${selectSizeUrl}')</#if>"><#rt/>
+            <#assign availPageSizes = [20, 30, 50, 100, 200]>
           <#list availPageSizes as ps>
-            <option<#if viewSize == ps> selected="selected" </#if> value="${ps}">${ps}</option>
+            <option <#if viewSize == ps> selected="selected" </#if> value="${ps}">${ps}</option>
           </#list>
           </select> ${paginateViewSizeLabel}</li>
         </#if>