]> git.nbdom.net Git - nb.git/commitdiff
dbq
authorNicolas Boisselier <nicolas.boisselier@gmail.com>
Mon, 26 Dec 2016 01:53:05 +0000 (01:53 +0000)
committerNicolas Boisselier <nicolas.boisselier@gmail.com>
Mon, 26 Dec 2016 01:53:05 +0000 (01:53 +0000)
www/dbq/dbq.php
www/dbq/html/default.js

index 09f5dd5a5499cb81b3f662e96e3104b7e0cd1f9d..9ed1b68c75572940b5581bd5143832b4033b11fd 100644 (file)
@@ -104,6 +104,7 @@ class DbQ extends nb {
 
     // Write output
 
+    $this->default_limit = $this->db->limits[0];
     if (empty($this->_nopage)) {
 
       $this->page->headers_no_cache();
@@ -111,6 +112,8 @@ class DbQ extends nb {
       $this->page->js_code = 'window._dbq = '
         . json_encode([
         'HTML_FORMAT' => self::HTML_FORMAT,
+        'default.format' => self::HTML_FORMAT,
+        'default.limit' => $this->default_limit,
         'param.format' => $this->params['format'],
         'param.db' => $this->params['db'],
         'param.table' => $this->params['table'],
index 4125e1aa810a5ce47b9e86bd42055b18f0745f26..f7a140b5af701dd9594d6edddaff9186c87ac7bc 100644 (file)
@@ -1,3 +1,5 @@
+// NB 25.12.16: TODEL 
+/*
 function form_submit_clean(form) {
   form_clean(form);
   form.submit();
@@ -12,6 +14,7 @@ function form_clean(form) {
       e.value = ""
     }
 }
+*/
 
 function form_submit_clean(f) {
   var i = 0;
@@ -28,6 +31,7 @@ function form_submit_clean(f) {
     url += (url ? "&" : "?") + encodeURI(p.name) + "=" + encodeURI(p.value);
   }
 
+  //alert(url);
   url = (action == "?" ? "" : action) + url;
 
   window.location = url;
@@ -36,31 +40,55 @@ function form_submit_clean(f) {
 
 document.addEventListener("DOMContentLoaded", function() {
 
+  // Clean when submit
   for (var e of document.querySelectorAll("form")) {
     e.onsubmit = function() {
       return form_submit_clean(this);
     };
   }
-  document.getElementById("table").removeAttribute("name");
-  document.getElementById("format").removeAttribute("name");
 
-  for (var e of document.querySelectorAll(".menu select.tables, .menu select.format, .menu select.limit")) {
-    e.onchange = function() {
-      var format = document.getElementById("format").value;
-      if (format == window._dbq["HTML_FORMAT"]) format = "html";
-      window.location =  "./" + document.getElementById("table").value + "." + format;
-      return true;
-    };
-  }
+  /*
+    Menu
+  */
+  for (var form of document.querySelectorAll("form.menu")) {
+    form.setAttribute('action',window.location.toString().replace(/\?.*$/,''));
+
+    // Format
+    for (var e of form.querySelectorAll("form.menu select.format")) {
+      e.removeAttribute('name');
+      e.onchange = function() {
+        var format = this.value;
+        if (format == window._dbq["HTML_FORMAT"]) format = "html";
+        this.form.setAttribute('action',this.form.getAttribute('action').replace(/(\/|\.\w+)$/,'.'+format));
+        this.form.onsubmit();
+        return false;
+      }
+    }
+
+    // Table
+    for (var e of form.querySelectorAll("form.menu select.tables")) {
+      e.removeAttribute('name');
+      e.onchange = function() {
+        this.form.setAttribute('action',this.form.getAttribute('action').replace(/([^\/\.]+)(\.\w+)?$/,this.value+'$2'));
+        return this.form.onsubmit();
+      }
+    }
+
+    // Limit
+    for (var e of form.querySelectorAll("form.menu select.limit option")) {
+      if (e.value == window._dbq["default.limit"]) e.setAttribute('value','');
+    }
+
+    // Auto submit
+    for (var e of form.querySelectorAll("form.menu select.limit")) {
+      e.onchange = function() {
+        return this.form.onsubmit();
+      };
+    }
 
-  for (var e of document.querySelectorAll(".menu select.limit")) {
-    e.onchange = function() {
-      this.form.submit();
-      return true;
-    };
   }
 
-  if (document.querySelector(".nav.bottom")) {
+  if (document.querySelector(".nav.bottom") && document.querySelector("table.rows")) {
     document.querySelector("table.rows").insertAdjacentHTML("beforebegin","<div class=\"nav top\">"+document.querySelector(".nav.bottom").innerHTML+"</div>");
   }