]> _ Git - fluidbook-html5.git/commitdiff
wait #4423 @6
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 6 May 2021 11:05:55 +0000 (13:05 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 6 May 2021 11:05:55 +0000 (13:05 +0200)
js/libs/fluidbook/fluidbook.search.js
js/libs/fluidbook/fluidbook.utils.js
js/libs/fluidbook/special/wescosales.js

index 353f6ef29abf988016143c575834c51aa41d28b5..1aed7e9bd7a13ccbb34a9f56b4d56d465109346b 100644 (file)
@@ -461,7 +461,7 @@ FluidbookSearch.prototype = {
         return source;
     },
     setHighlightTerms: function (terms) {
-        if (!this.highlightEnabled) {
+        if (!this.highlightEnabled || window.HIGHLIGHTS === undefined) {
             return;
         }
         this.termsToHighlight = terms;
@@ -714,7 +714,6 @@ FluidbookSearch.prototype = {
             if (!continueProcessingAfterPlugins) {
                 continue;
             }
-
             var plugin = this.plugins[p];
             continueProcessingAfterPlugins = plugin.submitQuery(q);
         }
index dffe061acd7c2cdded1d4903ce45728d83083c2f..0c87ea3bf351bcf69792b12dc2f6b49d777222b3 100644 (file)
@@ -119,4 +119,34 @@ function getIframeDocument(iframe) {
         doc = doc.document;
     }
     return doc;
+}
+
+function parseRange(string) {
+    let res = [];
+    let m;
+
+    for (let str of string.split(",").map((str) => str.trim())) {
+        // just a number
+        if (/^-?\d+$/.test(str)) {
+            res.push(parseInt(str, 10));
+        } else if (
+            (m = str.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/))
+        ) {
+            // 1-5 or 1..5 (equivalent) or 1...5 (doesn't include 5)
+            let [_, lhs, sep, rhs] = m;
+
+            if (lhs && rhs) {
+                lhs = parseInt(lhs);
+                rhs = parseInt(rhs);
+                const incr = lhs < rhs ? 1 : -1;
+
+                // Make it inclusive by moving the right 'stop-point' away by one.
+                if (sep === "-" || sep === ".." || sep === "\u2025") rhs += incr;
+
+                for (let i = lhs; i !== rhs; i += incr) res.push(i);
+            }
+        }
+    }
+
+    return res;
 }
\ No newline at end of file
index c516caaf343c1720058b7f6e2bad54dcb4ec21a5..f635649b601a98e22912600491821bba555301cd 100644 (file)
@@ -63,7 +63,7 @@ function wescoResize() {
     $("#wescosalesselector").css('left', sl);
 
     $(".wescosaleswindow").each(function () {
-        setInteractPanel($(this).data('ref'), true);
+        setInteractPanel($(this).data('id'), true);
     });
 }
 
@@ -71,58 +71,91 @@ function setWescoSalesPanel(ref, e, updateOnly) {
     if (updateOnly === undefined) {
         updateOnly = false;
     }
-
-    var id = "wescosaleswindow-" + normalizeRef(ref);
+    var refs = getWescoReferences(ref);
+    var rid = forge_sha256(refs.join('-')).substr(0, 10);
+    var id = "wescosaleswindow-" + rid;
     if ($("#" + id).length != 0) {
         updateOnly = true;
     }
 
-    var r = getWescoRef(ref);
-    if (r.ref === undefined) {
-        return;
-    }
-    var rref = r.ref;
     var activeCountry = $("#wescosalesselect").val();
+    var first = true;
+    var wtitle = '';
+    var wrefs = [];
+    var unique = refs.length === 1;
+    var wlines = {};
+    var suppLines = {};
+    $.each(refs, function (k, ref) {
+        var r = getWescoRef(ref);
+        if (r.ref === undefined) {
+            return;
+        }
+        if (first) {
+            first = false;
+            wtitle = r.title;
+        }
+
+        var rref = r.ref;
+        if (rref.length === 9) {
+            wrefs.push(rref.substr(0, 3) + ' ' + rref.substr(3, 3) + ' ' + rref.substr(6));
+        } else if (rref.length === 5) {
+            wrefs.push(rref.substr(0, 2) + ' ' + rref.substr(2));
+        }
+
+
+        for (var i in r.countries[activeCountry]) {
+            var d = r.countries[activeCountry][i];
+            if (d[1] === null) {
+                continue;
+            }
+            if (unique) {
+                if (d[2] === null) {
+                    suppLines[d[0]] = d[1];
+                } else {
+                    wlines[d[0]] = {ca: d[1], qte: d[2]};
+                }
+            } else {
+                if (wlines[d[0]] == null || wlines[d[0]] == undefined) {
+                    wlines[d[0]] = {ca: 0, qte: 0};
+                }
+                wlines[d[0]].ca += parseInt(d[1].toString().replace(/,/g, ''));
+                wlines[d[0]].qte += parseInt(d[2].toString().replace(/,/g, ''));
+            }
+        }
+    });
+
 
     var w = '';
     w += '<a href="#" class="close"></a>';
-    w += '<h2>' + r.title + '</h2>';
-    if (rref.length == 9) {
-        w += '<h3>' + rref.substr(0, 3) + ' ' + rref.substr(3, 3) + ' ' + rref.substr(6) + '</h3>';
-    } else if (rref.length == 5) {
-        w += '<h3>' + rref.substr(0, 2) + ' ' + rref.substr(2) + '</h3>';
-    }
+    w += '<h2>' + wtitle + '</h2>';
+    w += '<h3>' + wrefs.join(', ') + '</h3>';
     w += '<hr />';
     if (!updateOnly) {
-        $('body').append('<div id="' + id + '" class="wescosaleswindow" data-ref="' + ref + '"></div>');
+        $('body').append('<div id="' + id + '" class="wescosaleswindow" data-id="' + rid + '"></div>');
     }
 
-    var seenNotFigure = false;
-
     w += '<table>';
     w += '<tr><th></th><th>Qté</th><th>CA</th></tr>';
-    for (var i in r.countries[activeCountry]) {
-        var d = r.countries[activeCountry][i];
-        if (d[1] === null) {
-            continue;
-        }
 
-        if (d[2] == null) {
-            var cl = '';
-            if (!seenNotFigure) {
-                w += '<tr class="hr"><td colspan="3"><hr /></td></tr>';
-                seenNotFigure = true;
-            }
-            w += '<tr>';
-            w += '<td class="d">' + d[0] + '</td>';
-            w += '<td class="v t" colspan="2">' + d[1] + '</td>';
-        } else {
+    var format = new Intl.NumberFormat('en-US');
+
+    $.each(wlines, function (date, line) {
+        var ca = unique ? line.ca : format.format(line.ca);
+        var qte = unique ? line.qte : format.format(line.qte);
+        w += '<tr>';
+        w += '<td class="d">' + date + '</td>';
+        w += '<td class="v">' + ca + '</td>';
+        w += '<td class="c">' + qte + '</td>';
+        w += '</tr>';
+    });
+    if (Object.keys(suppLines).length > 0) {
+        w += '<tr class="hr"><td colspan="3"><hr /></td></tr>';
+        $.each(suppLines, function (t, line) {
             w += '<tr>';
-            w += '<td class="d">' + d[0] + '</td>';
-            w += '<td class="v">' + d[1] + '</td>';
-            w += '<td class="c">' + d[2] + '</td>';
-        }
-        w + '</tr>';
+            w += '<td class="d">' + t + '</td>';
+            w += '<td class="v t" colspan="2">' + line + '</td>';
+            w += '</tr>';
+        });
     }
     w += '<table>';
     $('#' + id).html(w);
@@ -132,7 +165,7 @@ function setWescoSalesPanel(ref, e, updateOnly) {
         $("#" + id).css({left: x, top: y}).data({x: x, y: y});
     }
 
-    setInteractPanel(ref, updateOnly);
+    setInteractPanel(id, updateOnly);
 }
 
 function getAllRefs() {
@@ -176,8 +209,10 @@ function getPagesOfRefs() {
 }
 
 function getPossibleReferences(ref) {
-    var trimmedRef = ref.toString().replace(/^0+/, "");
-    var res = [trimmedRef];
+    var nospaceref = ref.toString().replace(/\s*/g, '');
+    var spaceref = nospaceref.toString().substr(0, 2) + ' ' + nospaceref.toString().substr(2, 3);
+    var trimmedRef = nospaceref.toString().replace(/^0+/, "");
+    var res = [ref, spaceref, trimmedRef, nospaceref];
     var tr = trimmedRef;
     for (var i = 0; i < (5 - trimmedRef.length); i++) {
         tr = '0' + tr;
@@ -186,11 +221,19 @@ function getPossibleReferences(ref) {
     return res;
 }
 
-function setInteractPanel(ref, onlyRect) {
+function getWescoReferences(ref) {
+    var range = parseRange(ref.toString().replace(/\s*/g, ''));
+    var res = [];
+    $.each(range, function (k, v) {
+        res.push(normalizeRef(v));
+    });
+    return res;
+}
+
+function setInteractPanel(id, onlyRect) {
     if (onlyRect === undefined) {
         onlyRect = false;
     }
-    var id = "wescosaleswindow-" + normalizeRef(ref);
 
     var maxx = fluidbook.resize.ww - 20;
     var maxy = fluidbook.resize.hh - 70;
@@ -370,7 +413,7 @@ WescoSalesSearchPlugin.prototype = {
         q = q.replace(/\s/gm, '');
 
         if (q.length != 5) {
-            console.log('not ref (length)');
+            console.log('not ref (length)', q);
             return true;
         }
         var all = getAllRefs();