Add scripts to create myops-getqueryview:
[myops.git] / web / query / vendor / couchapp / _attachments / jquery.couch.app.js
diff --git a/web/query/vendor/couchapp/_attachments/jquery.couch.app.js b/web/query/vendor/couchapp/_attachments/jquery.couch.app.js
new file mode 100644 (file)
index 0000000..fc500a2
--- /dev/null
@@ -0,0 +1,235 @@
+// Licensed under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License.  You may obtain a copy
+// of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+// License for the specific language governing permissions and limitations under
+// the License.
+
+// Usage: The passed in function is called when the page is ready.
+// CouchApp passes in the app object, which takes care of linking to 
+// the proper database, and provides access to the CouchApp helpers.
+// $.couch.app(function(app) {
+//    app.db.view(...)
+//    ...
+// });
+
+(function($) {
+
+  function Design(db, name, code) {
+    this.doc_id = "_design/"+name;
+    if (code) {
+      this.code_path = this.doc_id + "/" + code;
+    } else {
+      this.code_path = this.doc_id;
+    }
+    this.view = function(view, opts) {
+      db.view(name+'/'+view, opts);
+    };
+    this.list = function(list, view, opts) {
+      db.list(name+'/'+list, view, opts);
+    };
+  }
+
+  function docForm() { alert("docForm has been moved to vendor/couchapp/lib/docForm.js, use app.require to load") };
+
+  function resolveModule(path, names, parents, current) {
+    parents = parents || [];
+    if (names.length === 0) {
+      if (typeof current != "string") {
+        throw ["error","invalid_require_path",
+          'Must require a JavaScript string, not: '+(typeof current)];
+      }
+      return [current, parents];
+    }
+    var n = names.shift();
+    if (n == '..') {
+      parents.pop();
+      var pp = parents.pop();
+      if (!pp) {
+        throw ["error", "invalid_require_path", path];
+      }
+      return resolveModule(path, names, parents, pp);
+    } else if (n == '.') {
+      var p = parents.pop();
+      if (!p) {
+        throw ["error", "invalid_require_path", path];
+      }
+      return resolveModule(path, names, parents, p);
+    } else {
+      parents = [];
+    }
+    if (!current[n]) {
+      throw ["error", "invalid_require_path", path];
+    }
+    parents.push(current);
+    return resolveModule(path, names, parents, current[n]);
+  }
+
+  function makeRequire(ddoc) {
+    var moduleCache = [];
+    function getCachedModule(name, parents) {
+      var key, i, len = moduleCache.length;
+      for (i=0;i<len;++i) {
+        key = moduleCache[i].key;
+        if (key[0] === name && key[1] === parents) {
+          return moduleCache[i].module;
+        }
+      }
+      return null;
+    }
+    function setCachedModule(name, parents, module) {
+      moduleCache.push({ key: [name, parents], module: module });
+    }
+    var require = function (name, parents) {
+      var cachedModule = getCachedModule(name, parents);
+      if (cachedModule !== null) {
+        return cachedModule;
+      }
+      var exports = {};
+      var resolved = resolveModule(name, name.split('/'), parents, ddoc);
+      var source = resolved[0]; 
+      parents = resolved[1];
+      var s = "var func = function (exports, require) { " + source + " };";
+      try {
+        eval(s);
+        func.apply(ddoc, [exports, function(name) {return require(name, parents)}]);
+      } catch(e) { 
+        throw ["error","compilation_error","Module require('"+name+"') raised error "+e.toSource()]; 
+      }
+      setCachedModule(name, parents, exports);
+      return exports;
+    }
+    return require;
+  };
+
+  function mockReq() {
+    var p = document.location.pathname.split('/'),
+      qs = document.location.search.replace(/^\?/,'').split('&'),
+      q = {};
+    qs.forEach(function(param) {
+      var ps = param.split('='),
+        k = decodeURIComponent(ps[0]),
+        v = decodeURIComponent(ps[1]);
+      if (["startkey", "endkey", "key"].indexOf(k) != -1) {
+        q[k] = JSON.parse(v);
+      } else {
+        q[k] = v;
+      }
+    });
+    p.shift();
+    return {
+      path : p,
+      query : q
+    };
+  };
+
+  $.couch.app = $.couch.app || function(appFun, opts) {
+    opts = opts || {};
+    var urlPrefix = (opts.urlPrefix || ""),
+      index = urlPrefix.split('/').length,
+      fragments = unescape(document.location.href).split('/'),
+      dbname = opts.db || fragments[index + 2],
+      dname = opts.design || fragments[index + 4];
+    $.couch.urlPrefix = urlPrefix;
+    var db = $.couch.db(dbname),
+      design = new Design(db, dname, opts.load_path);
+    var appExports = $.extend({
+      db : db,
+      design : design,
+      view : design.view,
+      list : design.list,
+      docForm : docForm, // deprecated
+      req : mockReq()
+    }, $.couch.app.app);
+    function handleDDoc(ddoc) {        
+      if (ddoc) {
+        appExports.ddoc = ddoc;
+        appExports.require = makeRequire(ddoc);
+      }
+      appFun.apply(appExports, [appExports]);
+    }
+    if (opts.ddoc) {
+      // allow the ddoc to be embedded in the html
+      // to avoid a second http request
+      $.couch.app.ddocs[design.doc_id] = opts.ddoc;
+    }
+    if ($.couch.app.ddocs[design.doc_id]) {
+      $(function() {handleDDoc($.couch.app.ddocs[design.doc_id])});
+    } else {
+      // only open 1 connection for this ddoc 
+      if ($.couch.app.ddoc_handlers[design.doc_id]) {
+        // we are already fetching, just wait
+        $.couch.app.ddoc_handlers[design.doc_id].push(handleDDoc);
+      } else {
+        $.couch.app.ddoc_handlers[design.doc_id] = [handleDDoc];
+        // use getDbProperty to bypass %2F encoding on _show/app
+        db.getDbProperty(design.code_path, {
+          success : function(doc) {
+            $.couch.app.ddocs[design.doc_id] = doc;
+            $.couch.app.ddoc_handlers[design.doc_id].forEach(function(h) {
+              $(function() {h(doc)});
+            });
+            $.couch.app.ddoc_handlers[design.doc_id] = null;
+          },
+          error : function() {
+            $.couch.app.ddoc_handlers[design.doc_id].forEach(function(h) {
+              $(function() {h()});
+            });
+            $.couch.app.ddoc_handlers[design.doc_id] = null;
+          }
+        });
+      }
+    }
+  };
+  $.couch.app.ddocs = {};
+  $.couch.app.ddoc_handlers = {};
+  // legacy support. $.CouchApp is deprecated, please use $.couch.app
+  $.CouchApp = $.couch.app;
+})(jQuery);
+
+// JavaScript 1.6 compatibility functions that are missing from IE7/IE8
+
+if (!Array.prototype.forEach)
+{
+    Array.prototype.forEach = function(fun /*, thisp*/)
+    {
+        var len = this.length >>> 0;
+        if (typeof fun != "function")
+            throw new TypeError();
+
+        var thisp = arguments[1];
+        for (var i = 0; i < len; i++)
+        {
+            if (i in this)
+                fun.call(thisp, this[i], i, this);
+        }
+    };
+}
+
+if (!Array.prototype.indexOf)
+{
+    Array.prototype.indexOf = function(elt)
+    {
+        var len = this.length >>> 0;
+
+        var from = Number(arguments[1]) || 0;
+        from = (from < 0)
+                ? Math.ceil(from)
+                : Math.floor(from);
+        if (from < 0)
+            from += len;
+
+        for (; from < len; from++)
+        {
+            if (from in this &&
+                this[from] === elt)
+                return from;
+        }
+        return -1;
+    };
+}