aboutsummaryrefslogtreecommitdiffstats
path: root/lib/caldav/caldav.js
diff options
context:
space:
mode:
authorJames Lal <james@lightsofapollo.com>2012-06-18 20:51:13 -0700
committerJames Lal <james@lightsofapollo.com>2012-06-18 20:51:13 -0700
commita6c747412c0960331e4055eee97d8328ff88d584 (patch)
treec4a82365e592a2d1cfa46cd0f5f595dde6626ff8 /lib/caldav/caldav.js
downloadjsCalDAV-a6c747412c0960331e4055eee97d8328ff88d584.tar.gz
Initial hack
Diffstat (limited to 'lib/caldav/caldav.js')
-rw-r--r--lib/caldav/caldav.js101
1 files changed, 101 insertions, 0 deletions
diff --git a/lib/caldav/caldav.js b/lib/caldav/caldav.js
new file mode 100644
index 0000000..cf81358
--- /dev/null
+++ b/lib/caldav/caldav.js
@@ -0,0 +1,101 @@
+(function(global, module) {
+
+ /**
+ * Define a list of paths
+ * this will only be used in the browser.
+ */
+ var paths = {};
+
+
+ /**
+ * Exports object is a shim
+ * we use in the browser to
+ * create an object that will behave much
+ * like module.exports
+ */
+ function Exports(path) {
+ this.path = path;
+ }
+
+ Exports.prototype = {
+
+ /**
+ * Unified require between browser/node.
+ * Path is relative to this file so you
+ * will want to use it like this from any depth.
+ *
+ *
+ * var Leaf = ns.require('sub/leaf');
+ *
+ *
+ * @param {String} path path lookup relative to this file.
+ */
+ require: function exportRequire(path) {
+ if (typeof(window) === 'undefined') {
+ return require(require('path').join(__dirname, path));
+ } else {
+ return paths[path];
+ }
+ },
+
+ /**
+ * Maps exports to a file path.
+ */
+ set exports(val) {
+ return paths[this.path] = val;
+ },
+
+ get exports() {
+ return paths[this.path];
+ }
+ };
+
+ /**
+ * Module object constructor.
+ *
+ *
+ * var module = Module('sub/leaf');
+ * module.exports = function Leaf(){}
+ *
+ *
+ * @constructor
+ * @param {String} path file path.
+ */
+ function Module(path) {
+ return new Exports(path);
+ }
+
+ Module.require = Exports.prototype.require;
+ Module.exports = Module;
+ Module._paths = paths;
+
+
+ /**
+ * Reference self as exports
+ * which also happens to be the constructor
+ * so you can assign items to the namespace:
+ *
+ * //assign to Module.X
+ * //assume module.exports is Module
+ * module.exports.X = Foo; //Module.X === Foo;
+ * Module.exports('foo'); //creates module.exports object.
+ *
+ */
+ module.exports = Module;
+
+ /**
+ * In the browser assign
+ * to a global namespace
+ * obviously 'Module' would
+ * be whatever your global namespace is.
+ */
+ if (this.window)
+ window.CalDav = Module;
+
+}(
+ this,
+ (typeof(module) === 'undefined') ?
+ {} :
+ module
+));
+