diff options
author | James Lal <james@lightsofapollo.com> | 2012-06-18 20:51:13 -0700 |
---|---|---|
committer | James Lal <james@lightsofapollo.com> | 2012-06-18 20:51:13 -0700 |
commit | a6c747412c0960331e4055eee97d8328ff88d584 (patch) | |
tree | c4a82365e592a2d1cfa46cd0f5f595dde6626ff8 /lib/caldav/caldav.js | |
download | jsCalDAV-a6c747412c0960331e4055eee97d8328ff88d584.tar.gz |
Initial hack
Diffstat (limited to 'lib/caldav/caldav.js')
-rw-r--r-- | lib/caldav/caldav.js | 101 |
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 +)); + |