From fcbf11ab61a3d56b7f1a1fae6bc43abd52294f1b Mon Sep 17 00:00:00 2001
From: wactbprot <thsteinbock@web.de>
Date: Wed, 22 May 2013 16:21:59 +0200
Subject: [PATCH] 
 http://a73434.berlin.ptb.de/mediawiki/index.php/Konstanten#Tabelle table of
 constatns list
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

	neue Datei:   lib/mustache.js
	neue Datei:   lib/share.js
	neue Datei:   lists/table_of.js
	geändert:   lists/up.js
	neue Datei:   templates/table.html
	neue Datei:   views/constants/map.js
	neue Datei:   views/reduceStandard/map.js
	neue Datei:   views/reduceStandard/reduce.js
	neue Datei:   views/reduceType/map.js
	neue Datei:   views/reduceType/reduce.js
	neue Datei:   views/reduceYear/map.js
	neue Datei:   views/reduceYear/reduce.js
	neue Datei:   views/sign-sign/map.js
	neue Datei:   views/standard-sign/map.js
	neue Datei:   views/standard-year/map.js
	neue Datei:   views/standard_type-sign/map.js
	neue Datei:   views/standard_year-sign/map.js
	neue Datei:   views/standard_year-type/map.js
	neue Datei:   views/standard_year_type-sign/map.js
	neue Datei:   views/standard_year_type_sign-doc/map.js
	neue Datei:   views/standard_year_type_sign/map.js
	neue Datei:   views/translations/map.js
	neue Datei:   views/type-sign/map.js
	gelöscht:    views/views.js
	neue Datei:   views/year-sign/map.js
---
 lib/mustache.js                          | 452 +++++++++++++++++++++++
 lib/share.js                             | 157 ++++++++
 lists/table_of.js                        |  13 +
 lists/up.js                              |  10 +-
 templates/table.html                     |  41 ++
 views/constants/map.js                   |  90 +++++
 views/reduceStandard/map.js              |   6 +
 views/reduceStandard/reduce.js           |   3 +
 views/reduceType/map.js                  |   6 +
 views/reduceType/reduce.js               |   3 +
 views/reduceYear/map.js                  |   6 +
 views/reduceYear/reduce.js               |   3 +
 views/sign-sign/map.js                   |   6 +
 views/standard-sign/map.js               |   7 +
 views/standard-year/map.js               |   7 +
 views/standard_type-sign/map.js          |  11 +
 views/standard_year-sign/map.js          |  12 +
 views/standard_year-type/map.js          |  11 +
 views/standard_year_type-sign/map.js     |  14 +
 views/standard_year_type_sign-doc/map.js |  14 +
 views/standard_year_type_sign/map.js     |  14 +
 views/translations/map.js                |  11 +
 views/type-sign/map.js                   |   9 +
 views/views.js                           | 329 -----------------
 views/year-sign/map.js                   |   9 +
 25 files changed, 910 insertions(+), 334 deletions(-)
 create mode 100644 lib/mustache.js
 create mode 100644 lib/share.js
 create mode 100644 lists/table_of.js
 create mode 100644 templates/table.html
 create mode 100644 views/constants/map.js
 create mode 100644 views/reduceStandard/map.js
 create mode 100644 views/reduceStandard/reduce.js
 create mode 100644 views/reduceType/map.js
 create mode 100644 views/reduceType/reduce.js
 create mode 100644 views/reduceYear/map.js
 create mode 100644 views/reduceYear/reduce.js
 create mode 100644 views/sign-sign/map.js
 create mode 100644 views/standard-sign/map.js
 create mode 100644 views/standard-year/map.js
 create mode 100644 views/standard_type-sign/map.js
 create mode 100644 views/standard_year-sign/map.js
 create mode 100644 views/standard_year-type/map.js
 create mode 100644 views/standard_year_type-sign/map.js
 create mode 100644 views/standard_year_type_sign-doc/map.js
 create mode 100644 views/standard_year_type_sign/map.js
 create mode 100644 views/translations/map.js
 create mode 100644 views/type-sign/map.js
 delete mode 100644 views/views.js
 create mode 100644 views/year-sign/map.js

diff --git a/lib/mustache.js b/lib/mustache.js
new file mode 100644
index 0000000..b49c62a
--- /dev/null
+++ b/lib/mustache.js
@@ -0,0 +1,452 @@
+/*
+ * CommonJS-compatible mustache.js module
+ *
+ * See http://github.com/janl/mustache.js for more info.
+ */
+
+/*
+  mustache.js — Logic-less templates in JavaScript
+
+  See http://mustache.github.com/ for more info.
+*/
+
+var Mustache = function () {
+  var _toString = Object.prototype.toString;
+
+  Array.isArray = Array.isArray || function (obj) {
+    return _toString.call(obj) == "[object Array]";
+  }
+
+  var _trim = String.prototype.trim, trim;
+
+  if (_trim) {
+    trim = function (text) {
+      return text == null ? "" : _trim.call(text);
+    }
+  } else {
+    var trimLeft, trimRight;
+
+    // IE doesn't match non-breaking spaces with \s.
+    if ((/\S/).test("\xA0")) {
+      trimLeft = /^[\s\xA0]+/;
+      trimRight = /[\s\xA0]+$/;
+    } else {
+      trimLeft = /^\s+/;
+      trimRight = /\s+$/;
+    }
+
+    trim = function (text) {
+      return text == null ? "" :
+        text.toString().replace(trimLeft, "").replace(trimRight, "");
+    }
+  }
+
+  var escapeMap = {
+    "&": "&amp;",
+    "<": "&lt;",
+    ">": "&gt;",
+    '"': '&quot;',
+    "'": '&#39;'
+  };
+
+  function escapeHTML(string) {
+    return String(string).replace(/&(?!#?\w+;)|[<>"']/g, function (s) {
+      return escapeMap[s] || s;
+    });
+  }
+
+  var regexCache = {};
+  var Renderer = function () {};
+
+  Renderer.prototype = {
+    otag: "{{",
+    ctag: "}}",
+    pragmas: {},
+    buffer: [],
+    pragmas_implemented: {
+      "IMPLICIT-ITERATOR": true
+    },
+    context: {},
+
+    render: function (template, context, partials, in_recursion) {
+      // reset buffer & set context
+      if (!in_recursion) {
+        this.context = context;
+        this.buffer = []; // TODO: make this non-lazy
+      }
+
+      // fail fast
+      if (!this.includes("", template)) {
+        if (in_recursion) {
+          return template;
+        } else {
+          this.send(template);
+          return;
+        }
+      }
+
+      // get the pragmas together
+      template = this.render_pragmas(template);
+
+      // render the template
+      var html = this.render_section(template, context, partials);
+
+      // render_section did not find any sections, we still need to render the tags
+      if (html === false) {
+        html = this.render_tags(template, context, partials, in_recursion);
+      }
+
+      if (in_recursion) {
+        return html;
+      } else {
+        this.sendLines(html);
+      }
+    },
+
+    /*
+      Sends parsed lines
+    */
+    send: function (line) {
+      if (line !== "") {
+        this.buffer.push(line);
+      }
+    },
+
+    sendLines: function (text) {
+      if (text) {
+        var lines = text.split("\n");
+        for (var i = 0; i < lines.length; i++) {
+          this.send(lines[i]);
+        }
+      }
+    },
+
+    /*
+      Looks for %PRAGMAS
+    */
+    render_pragmas: function (template) {
+      // no pragmas
+      if (!this.includes("%", template)) {
+        return template;
+      }
+
+      var that = this;
+      var regex = this.getCachedRegex("render_pragmas", function (otag, ctag) {
+        return new RegExp(otag + "%([\\w-]+) ?([\\w]+=[\\w]+)?" + ctag, "g");
+      });
+
+      return template.replace(regex, function (match, pragma, options) {
+        if (!that.pragmas_implemented[pragma]) {
+          throw({message:
+            "This implementation of mustache doesn't understand the '" +
+            pragma + "' pragma"});
+        }
+        that.pragmas[pragma] = {};
+        if (options) {
+          var opts = options.split("=");
+          that.pragmas[pragma][opts[0]] = opts[1];
+        }
+        return "";
+        // ignore unknown pragmas silently
+      });
+    },
+
+    /*
+      Tries to find a partial in the curent scope and render it
+    */
+    render_partial: function (name, context, partials) {
+      name = trim(name);
+      if (!partials || partials[name] === undefined) {
+        throw({message: "unknown_partial '" + name + "'"});
+      }
+      if (!context || typeof context[name] != "object") {
+        return this.render(partials[name], context, partials, true);
+      }
+      return this.render(partials[name], context[name], partials, true);
+    },
+
+    /*
+      Renders inverted (^) and normal (#) sections
+    */
+    render_section: function (template, context, partials) {
+      if (!this.includes("#", template) && !this.includes("^", template)) {
+        // did not render anything, there were no sections
+        return false;
+      }
+
+      var that = this;
+
+      var regex = this.getCachedRegex("render_section", function (otag, ctag) {
+        // This regex matches _the first_ section ({{#foo}}{{/foo}}), and captures the remainder
+        return new RegExp(
+          "^([\\s\\S]*?)" +         // all the crap at the beginning that is not {{*}} ($1)
+
+          otag +                    // {{
+          "(\\^|\\#)\\s*(.+?)\\s*" +//  #foo (# == $2, foo == $3), not greedy
+          ctag +                    // }}
+
+          "\n*([\\s\\S]*?)" +       // between the tag ($2). leading newlines are dropped
+
+          otag +                    // {{
+          "\\/\\s*\\3\\s*" +        //  /foo (backreference to the opening tag).
+          ctag +                    // }}
+
+          "\\s*([\\s\\S]*)$",       // everything else in the string ($4). leading whitespace is dropped.
+
+        "g");
+      });
+
+
+      // for each {{#foo}}{{/foo}} section do...
+      return template.replace(regex, function (match, before, type, name, content, after) {
+        // before contains only tags, no sections
+        var renderedBefore = before ? that.render_tags(before, context, partials, true) : "",
+
+        // after may contain both sections and tags, so use full rendering function
+            renderedAfter = after ? that.render(after, context, partials, true) : "",
+
+        // will be computed below
+            renderedContent,
+
+            value = that.find(name, context);
+
+        if (type === "^") { // inverted section
+          if (!value || Array.isArray(value) && value.length === 0) {
+            // false or empty list, render it
+            renderedContent = that.render(content, context, partials, true);
+          } else {
+            renderedContent = "";
+          }
+        } else if (type === "#") { // normal section
+          if (Array.isArray(value)) { // Enumerable, Let's loop!
+            renderedContent = that.map(value, function (row) {
+              return that.render(content, that.create_context(row), partials, true);
+            }).join("");
+          } else if (that.is_object(value)) { // Object, Use it as subcontext!
+            renderedContent = that.render(content, that.create_context(value),
+              partials, true);
+          } else if (typeof value == "function") {
+            // higher order section
+            renderedContent = value.call(context, content, function (text) {
+              return that.render(text, context, partials, true);
+            });
+          } else if (value) { // boolean section
+            renderedContent = that.render(content, context, partials, true);
+          } else {
+            renderedContent = "";
+          }
+        }
+
+        return renderedBefore + renderedContent + renderedAfter;
+      });
+    },
+
+    /*
+      Replace {{foo}} and friends with values from our view
+    */
+    render_tags: function (template, context, partials, in_recursion) {
+      // tit for tat
+      var that = this;
+
+      var new_regex = function () {
+        return that.getCachedRegex("render_tags", function (otag, ctag) {
+          return new RegExp(otag + "(=|!|>|&|\\{|%)?([^#\\^]+?)\\1?" + ctag + "+", "g");
+        });
+      };
+
+      var regex = new_regex();
+      var tag_replace_callback = function (match, operator, name) {
+        switch(operator) {
+        case "!": // ignore comments
+          return "";
+        case "=": // set new delimiters, rebuild the replace regexp
+          that.set_delimiters(name);
+          regex = new_regex();
+          return "";
+        case ">": // render partial
+          return that.render_partial(name, context, partials);
+        case "{": // the triple mustache is unescaped
+        case "&": // & operator is an alternative unescape method
+          return that.find(name, context);
+        default: // escape the value
+          return escapeHTML(that.find(name, context));
+        }
+      };
+      var lines = template.split("\n");
+      for(var i = 0; i < lines.length; i++) {
+        lines[i] = lines[i].replace(regex, tag_replace_callback, this);
+        if (!in_recursion) {
+          this.send(lines[i]);
+        }
+      }
+
+      if (in_recursion) {
+        return lines.join("\n");
+      }
+    },
+
+    set_delimiters: function (delimiters) {
+      var dels = delimiters.split(" ");
+      this.otag = this.escape_regex(dels[0]);
+      this.ctag = this.escape_regex(dels[1]);
+    },
+
+    escape_regex: function (text) {
+      // thank you Simon Willison
+      if (!arguments.callee.sRE) {
+        var specials = [
+          '/', '.', '*', '+', '?', '|',
+          '(', ')', '[', ']', '{', '}', '\\'
+        ];
+        arguments.callee.sRE = new RegExp(
+          '(\\' + specials.join('|\\') + ')', 'g'
+        );
+      }
+      return text.replace(arguments.callee.sRE, '\\$1');
+    },
+
+    /*
+      find `name` in current `context`. That is find me a value
+      from the view object
+    */
+    find: function (name, context) {
+      name = trim(name);
+
+      // Checks whether a value is thruthy or false or 0
+      function is_kinda_truthy(bool) {
+        return bool === false || bool === 0 || bool;
+      }
+
+      var value;
+
+      // check for dot notation eg. foo.bar
+      if (name.match(/([a-z_]+)\./ig)) {
+        var childValue = this.walk_context(name, context);
+        if (is_kinda_truthy(childValue)) {
+          value = childValue;
+        }
+      } else {
+        if (is_kinda_truthy(context[name])) {
+          value = context[name];
+        } else if (is_kinda_truthy(this.context[name])) {
+          value = this.context[name];
+        }
+      }
+
+      if (typeof value == "function") {
+        return value.apply(context);
+      }
+      if (value !== undefined) {
+        return value;
+      }
+      // silently ignore unkown variables
+      return "";
+    },
+
+    walk_context: function (name, context) {
+      var path = name.split('.');
+      // if the var doesn't exist in current context, check the top level context
+      var value_context = (context[path[0]] != undefined) ? context : this.context;
+      var value = value_context[path.shift()];
+      while (value != undefined && path.length > 0) {
+        value_context = value;
+        value = value[path.shift()];
+      }
+      // if the value is a function, call it, binding the correct context
+      if (typeof value == "function") {
+        return value.apply(value_context);
+      }
+      return value;
+    },
+
+    // Utility methods
+
+    /* includes tag */
+    includes: function (needle, haystack) {
+      return haystack.indexOf(this.otag + needle) != -1;
+    },
+
+    // by @langalex, support for arrays of strings
+    create_context: function (_context) {
+      if (this.is_object(_context)) {
+        return _context;
+      } else {
+        var iterator = ".";
+        if (this.pragmas["IMPLICIT-ITERATOR"]) {
+          iterator = this.pragmas["IMPLICIT-ITERATOR"].iterator;
+        }
+        var ctx = {};
+        ctx[iterator] = _context;
+        return ctx;
+      }
+    },
+
+    is_object: function (a) {
+      return a && typeof a == "object";
+    },
+
+    /*
+      Why, why, why? Because IE. Cry, cry cry.
+    */
+    map: function (array, fn) {
+      if (typeof array.map == "function") {
+        return array.map(fn);
+      } else {
+        var r = [];
+        var l = array.length;
+        for(var i = 0; i < l; i++) {
+          r.push(fn(array[i]));
+        }
+        return r;
+      }
+    },
+
+    getCachedRegex: function (name, generator) {
+      var byOtag = regexCache[this.otag];
+      if (!byOtag) {
+        byOtag = regexCache[this.otag] = {};
+      }
+
+      var byCtag = byOtag[this.ctag];
+      if (!byCtag) {
+        byCtag = byOtag[this.ctag] = {};
+      }
+
+      var regex = byCtag[name];
+      if (!regex) {
+        regex = byCtag[name] = generator(this.otag, this.ctag);
+      }
+
+      return regex;
+    }
+  };
+
+  return({
+    name: "mustache.js",
+    version: "0.4.2",
+
+    /*
+      Turns a template and view into HTML
+    */
+    to_html: function (template, view, partials, send_fun) {
+      var renderer = new Renderer();
+      if (send_fun) {
+        renderer.send = send_fun;
+      }
+      renderer.render(template, view || {}, partials);
+      if (!send_fun) {
+        return renderer.buffer.join("\n");
+      }
+    }
+  });
+}();
+
+
+//if (typeof module !== 'undefined' && module.exports) {
+    exports.name = Mustache.name;
+    exports.version = Mustache.version;
+
+    exports.to_html = function() {
+      return Mustache.to_html.apply(this, arguments);
+    };
+//} 
diff --git a/lib/share.js b/lib/share.js
new file mode 100644
index 0000000..66b30ed
--- /dev/null
+++ b/lib/share.js
@@ -0,0 +1,157 @@
+/**
+ * deprecated!
+ * all uses of generateHtml should be replaced
+ * by mustache.to_html().
+ *
+ */
+exports.generateHtml = function(format,_resArr,_key){
+    _key = _key || "key";
+    /**
+     * wenn Zeit ist kann hier mal der retType zerlegt werden
+     * um die html- tags autom. zusammenzubauen
+     */
+    var fArr = format.split(/[-_]+/),
+    noOfTags = fArr.length;
+    
+    var st = "", 
+    et = "", // start tag end tag 
+    mds = "<" + fArr[noOfTags-1] + ">",
+    mde = "</" + fArr[noOfTags-1] + ">",
+    md = "";
+    
+    for(var j =1; j < (noOfTags-1); ++j){
+	st = st + "<" + fArr[j] + ">";
+	et = "</" + fArr[j] + ">" + et;
+    }
+
+    for (var i = 0; i < _resArr.length; ++i){
+   	md = md + "<" + fArr[noOfTags-1] + ">" + 
+	    _resArr[i][_key] + 
+	    "</" + fArr[noOfTags-1] + ">"; 
+    }
+
+    return st + md +  et;
+};
+
+exports.defaultReplacement= function(task,defaults,query){
+
+    defaults = defaults || task.Defaults;
+    query    = query    || {};
+
+    if(defaults){
+	for(var i in defaults){
+	  
+	    var subs = new RegExp(i,'g');
+	    for(var j in task){
+		/**
+		 * diese properties werden von der 
+		 * Ersetzung ausgeschlossen
+		 */
+		if( (j != "Defaults") && 
+		    (j != "ErrorResponse") &&
+		    (j != "TaskName") &&
+		    (j != "DocPath") 
+		  ){
+		      /**
+		       * geht noch eine Ebene in die Tiefe
+		       * v.a. wegen PostProcessing 
+		       */
+		      if( typeof(task[j]) == "object"){ 
+			 
+			  for (var k in  task[j]){
+
+			      if(query[i]){
+				  task[j][k] = task[j][k].replace(subs,query[i]);
+			      }else{
+				  if(typeof task[j][k] == "string" ){
+				     
+				      task[j][k] = task[j][k].replace(subs,defaults[i]);				    
+				  }
+			      }
+			  }
+		      }
+		      if( typeof(task[j]) == "string"){  
+			
+			  if(query[i]){
+			      task[j] = task[j].replace(subs,query[i]);
+			  }else{
+			      task[j] = task[j].replace(subs,defaults[i]);
+			  }
+		      }
+		  }//!defaults
+	    }// for j in tasks
+	}// for in in defaults
+    }// have defaults
+    return task;
+};
+
+exports.test = "fffuuuu";
+
+var pad0 = function(n){
+    return n < 10 ? "0" + n : n;    
+};
+exports.pad0 = pad0;
+
+var vlDateString = function(){
+    var dt = new Date(),
+    Y = dt.getFullYear(),
+    M = pad0(dt.getMonth()+1),
+    D = pad0(dt.getDate()),
+    h = pad0(dt.getHours()),
+    m = pad0(dt.getMinutes());
+    return Y + '-' + M + '-' + D + " " + h+":" + m;
+};
+exports.vlDateString = vlDateString;
+
+var vlTimeString = function(){
+    var dt = new Date();
+    
+    return "" + dt.getTime();
+};
+exports.vlTimeString = vlTimeString;
+
+
+exports.indexOf = function(arr,obj) {
+  for (var i = 0; i < arr.length; i++) {
+    if (arr[i] == obj)
+      return i;
+  }
+  return -1;
+};
+
+
+/**
+ * http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric
+ */
+exports.isNumber = function(n) {
+    return !isNaN(parseFloat(n)) && isFinite(n);
+};
+
+exports.isArray = function(obj) {
+    if (obj.constructor.toString().indexOf("Array") == -1){
+	return false;    
+    }else{
+	return true;    
+    }
+    
+};
+
+
+exports.startHtml = { 
+    headers: {
+	"Content-type": "text/html"
+    }
+};
+
+exports.startJson = {
+    "headers": {
+        "Content-Type": "application/json"
+    }
+};
+
+exports.startCss = {
+    "headers": {
+        "Content-Type": "text/css"
+     }
+};
+ 
diff --git a/lists/table_of.js b/lists/table_of.js
new file mode 100644
index 0000000..9e708ea
--- /dev/null
+++ b/lists/table_of.js
@@ -0,0 +1,13 @@
+function(head, req) {
+
+    var share = require("lib/share"),
+    mustache  = require("lib/mustache"),
+    template  = this.templates.table,
+    Data      = [];
+    start(share.startHtml);
+    while(r = getRow()) {
+	Data.push(r.value);
+    }
+    send(mustache.to_html(template,{All:Data}));
+}
+
diff --git a/lists/up.js b/lists/up.js
index 3369808..069fe31 100644
--- a/lists/up.js
+++ b/lists/up.js
@@ -1,7 +1,7 @@
 function(head, req) {
 
-    var share       = require("lib/vaclab/share"),
-    global          = require("lib/vaclab/global"),
+    var share       = require("lib/share"),
+
     id              = req.query.id,
     doc             = [],
     con     = [], // calibrationObjectNames
@@ -19,9 +19,9 @@ function(head, req) {
     result,
     row,
     iksign ="",iik=-1,
-    rv,sstdn,istd,sstdo,caon,jao,ccoo,
-    globals         = global.globals;
-
+    rv,sstdn,istd,sstdo,caon,jao,ccoo;
+    
+    
     start(share.startJson);
 
     if(id){
diff --git a/templates/table.html b/templates/table.html
new file mode 100644
index 0000000..efd19e8
--- /dev/null
+++ b/templates/table.html
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<style>
+  .container {
+  display: table;
+  }
+  .row  {
+  display: table-row;
+  }
+  .c1, .c3, .c2, .c4 {
+  display: table-cell;
+  padding-right: 25px;
+  }
+  .c1 p, .c3 p, .c2 p, .c4 p{
+  margin: 1px 1px;
+  }
+</style>
+</head>
+<body>
+<div class="container">
+  {{#All}}
+  <div class="row">
+    <div class="c1">
+      <p>{{Type}}</p>
+    </div>
+    <div class="c2">
+      <p>{{Value}}</p>
+    </div>
+    <div class="c3">
+      <p>{{Unit}}</p>
+    </div>
+    <div class="c4">
+      <p>{{Comment}}</p>
+    </div>
+  </div>
+  {{/All}}
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/views/constants/map.js b/views/constants/map.js
new file mode 100644
index 0000000..868d05b
--- /dev/null
+++ b/views/constants/map.js
@@ -0,0 +1,90 @@
+function(doc) {
+    if(doc.CalibrationObject){
+	
+        var dc  = doc.CalibrationObject;
+        var dcn = dc.Name;
+        var dcc = dc.Constants;
+        var dcu = dc.Uncertainty;
+        var dcv = dc.Values;
+
+        if(dcc){
+            for (var i = 0; i < dcc.length; ++i){
+
+                emit(dcn+"_constants", dcc[i]);
+            }
+        }
+
+        if(dcv){
+            for (var i = 0; i < dcv.length; ++i){
+
+                emit(dcn+"_values", dcv[i]);
+            }
+        }
+
+        if(dcu){
+            for (var i = 0; i < dcu.length; ++i){
+
+                emit(dcn+"_uncertainty", dcu[i]);
+            }
+        }
+    }
+
+    if(doc.Constants){
+
+        var dcn = "constants";
+        var dc  = doc.Constants;
+        var dcc = dc.Constants;
+        var dcu = dc.Uncertainty;
+        var dcv = dc.Values;
+
+        if(dcc){
+            for (var i = 0; i < dcc.length; ++i){
+
+                emit(dcn+"_constants", dcc[i]);
+            }
+        }
+
+        if(dcv){
+            for (var i = 0; i < dcv.length; ++i){
+
+                emit(dcn+"_values", dcv[i]);
+            }
+        }
+
+        if(dcu){
+            for (var i = 0; i < dcu.length; ++i){
+
+                emit(dcn+"_uncertainty", dcu[i]);
+            }
+        }
+    }
+
+    if(doc.Standard){
+        var ds  = doc.Standard;
+        var dsn = ds.Name;
+        var dsc = ds.Constants;
+        var dsu = ds.Uncertainty;
+        var dsv = ds.Values;
+
+        if(dsc){
+            for (var i = 0; i < dsc.length; ++i){
+
+                emit(dsn+"_constants", dsc[i]);
+            }
+        }
+
+        if(dsv){
+            for (var i = 0; i < dcv.length; ++i){
+
+                emit(dsn+"_values", dsv[i]);
+            }
+        }
+
+        if(dsu){
+            for (var i = 0; i < dsu.length; ++i){
+
+                emit(dsn+"_uncertainty", dsu[i]);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/views/reduceStandard/map.js b/views/reduceStandard/map.js
new file mode 100644
index 0000000..98d13d6
--- /dev/null
+++ b/views/reduceStandard/map.js
@@ -0,0 +1,6 @@
+function(doc) {
+    if(doc.Calibration && 
+       doc.Calibration.Standard){
+        emit(doc.Calibration.Standard, null);
+    }
+}
\ No newline at end of file
diff --git a/views/reduceStandard/reduce.js b/views/reduceStandard/reduce.js
new file mode 100644
index 0000000..0ddea55
--- /dev/null
+++ b/views/reduceStandard/reduce.js
@@ -0,0 +1,3 @@
+function(k, v, c){
+    return null;
+}
\ No newline at end of file
diff --git a/views/reduceType/map.js b/views/reduceType/map.js
new file mode 100644
index 0000000..d5df742
--- /dev/null
+++ b/views/reduceType/map.js
@@ -0,0 +1,6 @@
+function(doc) {
+    if(doc.Calibration && 
+       doc.Calibration.Type){
+        emit(doc.Calibration.Type, null);
+    }
+}
\ No newline at end of file
diff --git a/views/reduceType/reduce.js b/views/reduceType/reduce.js
new file mode 100644
index 0000000..0ddea55
--- /dev/null
+++ b/views/reduceType/reduce.js
@@ -0,0 +1,3 @@
+function(k, v, c){
+    return null;
+}
\ No newline at end of file
diff --git a/views/reduceYear/map.js b/views/reduceYear/map.js
new file mode 100644
index 0000000..44562ab
--- /dev/null
+++ b/views/reduceYear/map.js
@@ -0,0 +1,6 @@
+function(doc) {
+    if(doc.Calibration &&
+       doc.Calibration.Year){
+        emit(doc.Calibration.Year, null);
+    }
+}
\ No newline at end of file
diff --git a/views/reduceYear/reduce.js b/views/reduceYear/reduce.js
new file mode 100644
index 0000000..0ddea55
--- /dev/null
+++ b/views/reduceYear/reduce.js
@@ -0,0 +1,3 @@
+function(k, v, c){
+    return null;
+}
\ No newline at end of file
diff --git a/views/sign-sign/map.js b/views/sign-sign/map.js
new file mode 100644
index 0000000..b6fbec1
--- /dev/null
+++ b/views/sign-sign/map.js
@@ -0,0 +1,6 @@
+function(doc) {
+    if(doc.Calibration && 
+       doc.Calibration.Sign){
+        emit(doc.Calibration.Sign, doc.Calibration.Sign);
+    }
+}
\ No newline at end of file
diff --git a/views/standard-sign/map.js b/views/standard-sign/map.js
new file mode 100644
index 0000000..23de902
--- /dev/null
+++ b/views/standard-sign/map.js
@@ -0,0 +1,7 @@
+function(doc) {
+    if(doc.Calibration &&
+       doc.Calibration.Standard &&
+       doc.Calibration.Sign){
+        emit(doc.Calibration.Standard, doc.Calibration.Sign);
+    }
+}
\ No newline at end of file
diff --git a/views/standard-year/map.js b/views/standard-year/map.js
new file mode 100644
index 0000000..8018fc3
--- /dev/null
+++ b/views/standard-year/map.js
@@ -0,0 +1,7 @@
+function(doc) {
+    if(doc.Calibration &&
+       doc.Calibration.Standard &&
+       doc.Calibration.Year){
+        emit(doc.Calibration.Standard, doc.Calibration.Year);
+    }
+}
diff --git a/views/standard_type-sign/map.js b/views/standard_type-sign/map.js
new file mode 100644
index 0000000..2f20e87
--- /dev/null
+++ b/views/standard_type-sign/map.js
@@ -0,0 +1,11 @@
+function(doc) {
+    if(doc.Calibration &&
+       doc.Calibration.Standard &&
+       doc.Calibration.Sign &&
+       doc.Calibration.Type){
+
+        emit(doc.Calibration.Standard + "_" + doc.Calibration.Type,
+             doc.Calibration.Sign);
+
+    }
+}
\ No newline at end of file
diff --git a/views/standard_year-sign/map.js b/views/standard_year-sign/map.js
new file mode 100644
index 0000000..be2781a
--- /dev/null
+++ b/views/standard_year-sign/map.js
@@ -0,0 +1,12 @@
+function(doc) {
+    if(doc.Calibration &&
+       doc.Calibration.Standard &&
+       doc.Calibration.Sign &&
+       doc.Calibration.Year){
+	
+        emit(doc.Calibration.Standard + "_" +
+             doc.Calibration.Year,
+             doc.Calibration.Sign);
+	
+    }
+}
\ No newline at end of file
diff --git a/views/standard_year-type/map.js b/views/standard_year-type/map.js
new file mode 100644
index 0000000..1d0a9a5
--- /dev/null
+++ b/views/standard_year-type/map.js
@@ -0,0 +1,11 @@
+function(doc) {
+    if(doc.Calibration &&
+       doc.Calibration.Standard &&
+       doc.Calibration.Sign){
+
+        emit(doc.Calibration.Standard + "_" +
+             doc.Calibration.Year,
+             doc.Calibration.Type);
+
+    }
+}
\ No newline at end of file
diff --git a/views/standard_year_type-sign/map.js b/views/standard_year_type-sign/map.js
new file mode 100644
index 0000000..44e76b6
--- /dev/null
+++ b/views/standard_year_type-sign/map.js
@@ -0,0 +1,14 @@
+function(doc) {
+    if(doc.Calibration &&
+       doc.Calibration.Standard &&
+       doc.Calibration.Sign &&
+       doc.Calibration.Type){
+
+        emit(doc.Calibration.Standard + "_" +
+             doc.Calibration.Year     + "_" +
+             doc.Calibration.Type,
+             doc.Calibration.Sign);
+
+
+    }
+}
\ No newline at end of file
diff --git a/views/standard_year_type_sign-doc/map.js b/views/standard_year_type_sign-doc/map.js
new file mode 100644
index 0000000..324d5a7
--- /dev/null
+++ b/views/standard_year_type_sign-doc/map.js
@@ -0,0 +1,14 @@
+function(doc) {
+    if(doc.Calibration &&
+       doc.Calibration.Standard &&
+       doc.Calibration.Sign &&
+       doc.Calibration.Type){
+
+        emit(doc.Calibration.Standard + "_" +
+             doc.Calibration.Year     + "_" +
+             doc.Calibration.Type     + "_" +
+             doc.Calibration.Sign,
+             doc);
+
+    }
+}
\ No newline at end of file
diff --git a/views/standard_year_type_sign/map.js b/views/standard_year_type_sign/map.js
new file mode 100644
index 0000000..ca00c4d
--- /dev/null
+++ b/views/standard_year_type_sign/map.js
@@ -0,0 +1,14 @@
+function(doc) {
+    if(doc.Calibration &&
+       doc.Calibration.Standard &&
+       doc.Calibration.Sign &&
+       doc.Calibration.Type){
+
+        emit(doc.Calibration.Standard + "_" +
+             doc.Calibration.Year     + "_" +
+             doc.Calibration.Type     + "_" +
+             doc.Calibration.Sign,
+             null);
+
+    }
+}
\ No newline at end of file
diff --git a/views/translations/map.js b/views/translations/map.js
new file mode 100644
index 0000000..8ca8c40
--- /dev/null
+++ b/views/translations/map.js
@@ -0,0 +1,11 @@
+function(doc) {
+    var crd  = require("views/lib/check-return_doc-parts");
+    
+    if(doc.Translations){
+        var _res       = crd.translations(doc);
+    }
+    
+    if(_res && _res._avail){
+        emit(_res.key, _res.value);
+    }
+}
\ No newline at end of file
diff --git a/views/type-sign/map.js b/views/type-sign/map.js
new file mode 100644
index 0000000..b02ee80
--- /dev/null
+++ b/views/type-sign/map.js
@@ -0,0 +1,9 @@
+function(doc) {
+    if(doc.Calibration &&
+       doc.Calibration.Type &&
+       doc.Calibration.Sign){
+
+        emit(doc.Calibration.Type, doc.Calibration.Sign);
+
+    }
+}
\ No newline at end of file
diff --git a/views/views.js b/views/views.js
deleted file mode 100644
index 61faf9b..0000000
--- a/views/views.js
+++ /dev/null
@@ -1,329 +0,0 @@
-/**
- * Diese view liefert das 'Grundmaterial' für die
- * für die update list (_up.js_)
- *
- * seit neuestem auch zur list _resolve_recipes_
- *
- * Es kann hier abgelesen werden, welche
- * 'Bausteine' (Dokumente) dem update
- * überhaupt zur Verfügung stehen
- */
-exports.calib = {
-    map:
-};//exports.calib
-
-
-exports.allCustomers = {
-    map:
-};
-
-exports.allToDo = {
-    map:
-};
-
-
-exports.servers = {
-    map:
-};
-
-exports.translations = {
-    map:function(doc) {
-        var crd  = require("views/lib/check-return_doc-parts");
-
-        if(doc.Translations){
-            var _res       = crd.translations(doc);
-        }
-
-        if(_res && _res._avail){
-            emit(_res.key, _res.value);
-        }
-    }
-};
-
-exports.reduceStandard = {
-    map:function(doc) {
-        if(doc.Calibration && 
-	   doc.Calibration.Standard){
-            emit(doc.Calibration.Standard, null);
-        }
-    },
-    reduce:function(k, v, c){
-        return null;
-    }
-};
-
-exports.reduceType = {
-    map:function(doc) {
-        if(doc.Calibration && 
-	   doc.Calibration.Type){
-            emit(doc.Calibration.Type, null);
-        }
-    },
-    reduce:function(k, v, c){
-        return null;
-    }
-};
-
-exports.reduceYear = {
-    map:function(doc) {
-        if(doc.Calibration &&
-	   doc.Calibration.Year){
-            emit(doc.Calibration.Year, null);
-        }
-    },
-    reduce:function(k, v, c){
-        return null;
-    }
-};
-
-exports['sign-sign'] = {
-    map:function(doc) {
-        if(doc.Calibration && 
-	   doc.Calibration.Sign){
-            emit(doc.Calibration.Sign, doc.Calibration.Sign);
-        }
-    }
-};
-
-exports['standard-sign'] = {
-    map:function(doc) {
-        if(doc.Calibration &&
-           doc.Calibration.Standard &&
-           doc.Calibration.Sign){
-            emit(doc.Calibration.Standard, doc.Calibration.Sign);
-	}
-    }
-};
-
-exports['standard-year'] = {
-    map:function(doc) {
-        if(doc.Calibration &&
-           doc.Calibration.Standard &&
-           doc.Calibration.Year){
-            emit(doc.Calibration.Standard, doc.Calibration.Year);
-	}
-    }
-};
-
-exports['type-sign'] = {
-    map:function(doc) {
-        if(doc.Calibration &&
-           doc.Calibration.Type &&
-           doc.Calibration.Sign){
-
-            emit(doc.Calibration.Type, doc.Calibration.Sign);
-
-        }
-    }
-};
-
-exports['year-sign'] = {
-    map:function(doc) {
-        if(doc.Calibration &&
-           doc.Calibration.Year &&
-           doc.Calibration.Sign){
-
-            emit(doc.Calibration.Year, doc.Calibration.Sign);
-
-        }
-    }
-};
-
-exports['standard_type-sign'] = {
-    map:function(doc) {
-        if(doc.Calibration &&
-           doc.Calibration.Standard &&
-           doc.Calibration.Sign &&
-           doc.Calibration.Type){
-
-            emit(doc.Calibration.Standard + "_" + doc.Calibration.Type,
-                 doc.Calibration.Sign);
-
-        }
-    }
-};
-
-
-exports['standard_year-sign'] = {
-    map:function(doc) {
-        if(doc.Calibration &&
-           doc.Calibration.Standard &&
-           doc.Calibration.Sign &&
-           doc.Calibration.Year){
-
-            emit(doc.Calibration.Standard + "_" +
-                 doc.Calibration.Year,
-                 doc.Calibration.Sign);
-
-        }
-    }
-};
-
-exports['standard_year-type'] = {
-    map:function(doc) {
-        if(doc.Calibration &&
-           doc.Calibration.Standard &&
-           doc.Calibration.Sign){
-
-            emit(doc.Calibration.Standard + "_" +
-                 doc.Calibration.Year,
-                 doc.Calibration.Type);
-
-        }
-    }
-};
-
-exports['standard_year_type-sign'] = {
-    map:function(doc) {
-        if(doc.Calibration &&
-           doc.Calibration.Standard &&
-           doc.Calibration.Sign &&
-           doc.Calibration.Type){
-
-            emit(doc.Calibration.Standard + "_" +
-                 doc.Calibration.Year     + "_" +
-                 doc.Calibration.Type,
-                 doc.Calibration.Sign);
-
-
-        }
-    }
-};
-
-
-exports['standard_year_type_sign'] = {
-    map:function(doc) {
-        if(doc.Calibration &&
-           doc.Calibration.Standard &&
-           doc.Calibration.Sign &&
-           doc.Calibration.Type){
-
-            emit(doc.Calibration.Standard + "_" +
-                 doc.Calibration.Year     + "_" +
-                 doc.Calibration.Type     + "_" +
-                 doc.Calibration.Sign,
-                 null);
-
-        }
-    }
-};
-
-exports['standard_year_type_sign-doc'] = {
-    map:function(doc) {
-        if(doc.Calibration &&
-           doc.Calibration.Standard &&
-           doc.Calibration.Sign &&
-           doc.Calibration.Type){
-
-            emit(doc.Calibration.Standard + "_" +
-                 doc.Calibration.Year     + "_" +
-                 doc.Calibration.Type     + "_" +
-                 doc.Calibration.Sign,
-                 doc);
-
-        }
-    }
-};
-
-
-exports.const_val_uncert = {
-    map:function(doc) {
-        if(doc.CalibrationObject){
-
-            var dc  = doc.CalibrationObject;
-            var dcn = dc.Name;
-            var dcc = dc.Constants;
-            var dcu = dc.Uncertainty;
-            var dcv = dc.Values;
-
-            if(dcc){
-
-                for (var i = 0; i < dcc.length; ++i){
-
-                    emit(dcn+"_constants", dcc[i]);
-                }
-            }
-
-            if(dcv){
-
-                for (var i = 0; i < dcv.length; ++i){
-
-                    emit(dcn+"_values", dcv[i]);
-                }
-            }
-
-            if(dcu){
-
-                for (var i = 0; i < dcu.length; ++i){
-
-                    emit(dcn+"_uncertainty", dcu[i]);
-                }
-            }
-        }
-
-        if(doc.Constants){
-
-            var dcn = "constants";
-            var dc  = doc.Constants;
-            var dcc = dc.Constants;
-            var dcu = dc.Uncertainty;
-            var dcv = dc.Values;
-
-            if(dcc){
-
-                for (var i = 0; i < dcc.length; ++i){
-
-                    emit(dcn+"_constants", dcc[i]);
-                }
-            }
-
-            if(dcv){
-
-                for (var i = 0; i < dcv.length; ++i){
-
-                    emit(dcn+"_values", dcv[i]);
-                }
-            }
-
-            if(dcu){
-
-                for (var i = 0; i < dcu.length; ++i){
-
-                    emit(dcn+"_uncertainty", dcu[i]);
-                }
-            }
-        }
-
-        if(doc.Standard){
-            var ds  = doc.Standard;
-            var dsn = ds.Name;
-            var dsc = ds.Constants;
-            var dsu = ds.Uncertainty;
-            var dsv = ds.Values;
-
-            if(dsc){
-
-                for (var i = 0; i < dsc.length; ++i){
-
-                    emit(dsn+"_constants", dsc[i]);
-                }
-            }
-
-            if(dsv){
-
-                for (var i = 0; i < dcv.length; ++i){
-
-                    emit(dsn+"_values", dsv[i]);
-                }
-            }
-
-            if(dsu){
-
-                for (var i = 0; i < dsu.length; ++i){
-
-                    emit(dsn+"_uncertainty", dsu[i]);
-                }
-            }
-        }
-    }
-};
diff --git a/views/year-sign/map.js b/views/year-sign/map.js
new file mode 100644
index 0000000..acd3592
--- /dev/null
+++ b/views/year-sign/map.js
@@ -0,0 +1,9 @@
+function(doc) {
+    if(doc.Calibration &&
+       doc.Calibration.Year &&
+       doc.Calibration.Sign){
+
+        emit(doc.Calibration.Year, doc.Calibration.Sign);
+
+    }
+}
\ No newline at end of file
-- 
GitLab