Refactoring for build system.
authordsc <david.schoonover@gmail.com>
Sun, 5 Dec 2010 03:38:10 +0000 (19:38 -0800)
committerdsc <david.schoonover@gmail.com>
Sun, 5 Dec 2010 03:38:10 +0000 (19:38 -0800)
27 files changed:
.gitignore
bin/cjs.py [deleted file]
lib/cjs/deps.js [deleted file]
lib/cjs/dummy.js [deleted file]
lib/cjs/module.js [deleted file]
lib/cjs/require.js [deleted file]
lib/jquery.hotkeys.js
lib/jquery.hotkeys.min.js
lib/jquery.sparkline.js
lib/jquery.sparkline.min.js
src/Y/index.cjs
src/Y/type.cjs
src/ezl/index.cjs
src/ezl/layer.cjs
src/ezl/loop/eventloop.cjs
src/ezl/loop/fps.cjs
src/ezl/shape/line.cjs
src/ezl/util/index.cjs [new file with mode: 0644]
src/ezl/util/tree/index.cjs [new file with mode: 0644]
src/tanks/game.cjs
src/tanks/index.cjs
src/tanks/thing/player.cjs
src/tanks/thing/thing.cjs
src/tanks/ui/config.cjs
src/tanks/ui/main.cjs
tags.php
tanks.php

index ec39ced..080d845 100644 (file)
@@ -1,3 +1,4 @@
 *.md.html
 tmp/
 build/
+.commonjs
diff --git a/bin/cjs.py b/bin/cjs.py
deleted file mode 100755 (executable)
index 1bd5429..0000000
+++ /dev/null
@@ -1,434 +0,0 @@
-#!/usr/bin/env python
-# encoding: utf-8
-__author__    = 'David Schoonover <dsc@less.ly>'
-__date__      = '2010-11-24'
-__version__   = (0, 0, 1)
-
-__all__ = ('ResolutionError', 'Module', 'JSResolver',)
-
-
-import sys, re, jsond as json
-from itertools import chain, repeat
-from collections import defaultdict
-from subprocess import Popen, check_output, STDOUT, PIPE
-from glob import glob
-from pprint import pprint, pformat
-
-from bunch import *
-from path import path
-import pystache
-
-
-AT_REQUIRE_PAT   = re.compile(r'//@require\(\s*([\'"])(.*?)\1\s*\)')
-LINE_COMMENT_PAT = re.compile(r'(.*?)(//.*?)(?:\n|$)')
-PAIR_COMMENT_PAT = re.compile(r'(.*?)(/\*.*?\*/)')
-REQUIRE_PAT      = re.compile(r'\brequire\(\s*([\'"])(.*?)\1\s*\)')
-
-ROOT             = path(__file__).abspath().dirname().dirname()
-LIB              = ROOT/'lib/cjs'
-CWD              = path('.')
-BLANK            = path('')
-
-MODULE_TEMPLATE  = ''
-DUMMY_TEMPLATE   = ''
-DEPS_TEMPLATE    = ''
-
-try:
-    with (LIB/'module.js').open('rU') as f:
-        MODULE_TEMPLATE = f.read()
-    with (LIB/'dummy.js').open('rU') as f:
-        DUMMY_TEMPLATE = f.read()
-    with (LIB/'deps.js').open('rU') as f:
-        DEPS_TEMPLATE = f.read()
-except Exception as ex:
-    print
-    print 'Error reading template file!'
-    print '  ROOT={ROOT}, LIB={LIB}, module.js={}'.format(LIB/'module.js', **locals())
-    raise
-
-
-class ResolutionError(Exception): pass
-
-
-def trim(s='', *chars):
-    for chs in chars:
-        if chs and s.endswith(chs):
-            s = s[:-len(chs)]
-    return s
-
-def partition(it, sep):
-    """ Partitions an iterable at the first occurrence of sep, and return a 3-tuple
-        containing the list of items before the separator, the separator itself,
-        and after the seperator. If the separator is not found, return a 3-tuple of
-        (the exhausted iterable as a list, None, []).
-    """
-    before = []
-    it = iter(it)
-    for val in it:
-        if val == sep:
-            break
-        else:
-            before.append(val)
-    else:
-        return (before, None, [])
-    return (before, sep, list(it))
-
-
-
-def canonicalise(query, base=None):
-    """ query: A module ID (relative or absolute) or filepath
-        base: Optional. The referring module ID.
-    """
-    if isinstance(base, Module):
-        base = base.id
-    
-    query   = trim(query, '/index.cjs', '.cjs', '/index.js', '.js')
-    basedir = path(base or '').dirname()
-    # print "canonicalise(query={query}, basedir={basedir})".format(**locals())
-    
-    if query.startswith('.'):
-        id = ( basedir / query ).normpath()
-    else:
-        id = query
-    
-    if id.startswith('..'):
-        raise ResolutionError('Impossible to resolve {} from {}!'.format(query, base))
-    
-    # print "  -->", str(id)
-    return str(id)
-
-
-
-class Module(Bunch):
-    DEFAULTS = {
-        'id'           : '',   # Canonical Module ID
-        'file'         : None, # path
-        'name'         : '',   # Module Name
-        'uri'          : '',   # Module URI (TODO)
-        'text'         : None, # Unmodified module text
-        'contents'     : None, # Compiled module text
-        'outpath'      : None, # Build directory
-        '_requires'    : None,
-        '_at_requires' : None,
-    }
-    
-    
-    def __init__(self, id, file, uri=BLANK, out=None, compile=True):
-        self.update(Module.DEFAULTS)
-        
-        self.id   = id
-        self.file = path(file)
-        self.name = re.subn(r'\W', '', self.id.split('/').pop().capitalize())[0]
-        
-        if out:
-            out = path(out)
-            outpath = (out / self.id) + '.js'
-        else:
-            out = BLANK
-            outpath = self.file.replace('.cjs', '.js')
-        self.outpath = path(outpath)
-        self.uri = str(out/uri/self.id)+'.js'
-        
-        self.compile()
-        # print "new!", repr(self)
-    
-    def compile(self):
-        outdir = self.outpath.dirname()
-        if not outdir.exists():
-            outdir.makedirs()
-        
-        with self.outpath.open('w') as out:
-            out.write(self.contents)
-        
-        return self
-    
-    def read(self, attr='contents'):
-        if self['text'] is None:
-            with self.file.open('rU') as f:
-                txt = f.read()
-            self['text'] = txt
-            template = MODULE_TEMPLATE if self.file.endswith('.cjs') else DUMMY_TEMPLATE
-            self['contents'] = pystache.render(template,  self)
-        return self[attr]
-    
-    @property
-    def text(self):
-        return self.read('text')
-    
-    @property
-    def contents(self):
-        return self.read('contents')
-    
-    def findDirectives(self, text):
-        for areq in AT_REQUIRE_PAT.finditer(text):
-            yield canonicalise(areq.group(2), self)
-    
-    def findRequires(self, text):
-        text = LINE_COMMENT_PAT.subn(r'\1 ', text)[0]
-        text = PAIR_COMMENT_PAT.subn(r'\1 ', text)[0]
-        # print "  findRequires() -> %r" % line
-        for mreq in REQUIRE_PAT.finditer(text):
-            yield canonicalise(mreq.group(2), self)
-    
-    def calcRequires(self, attr):
-        if self._requires is None or self._at_requires is None:
-            self._at_requires = list(self.findDirectives(self.text))
-            self._requires    = list(self.findRequires(self.text))
-        return getattr(self, attr)
-    
-    @property
-    def atRequires(self):
-        return self.calcRequires('_at_requires')
-    
-    @property
-    def nonAtRequires(self):
-        return self.calcRequires('_requires')
-    
-    @property
-    def requires(self):
-        return self.calcRequires('_at_requires') + self._requires
-    
-    def __json_default__(self):
-        return dict( (k,self[k]) for k in 'id file name _requires _at_requires'.split(' ') )
-    
-    def __hash__(self):
-        return hash(self.id)
-    
-    def __cmp__(self, other):
-        return cmp(self.id, other.id)
-    
-    def __eq__(self, other):
-        return self.id == other.id
-    
-    def __str__(self):
-        return str(self.id)
-    
-    def __repr__(self):
-        return '{self.__class__.__name__}(id={self.id}, file={self.file!s})'.format(**locals())
-
-
-
-
-class CommonJS(object):
-    """ Compiles JS modules into browser-safe JS files. """
-    
-    repos   = []
-    modules = {} # id -> Module
-    _graph    = None # id -> set(dependants)
-    _at_graph = None # id -> set(dependants)
-    
-    def __init__(self, repos, out='build', save='build', deps_name=None, clean=True, **options):
-        self.modules  = {}
-        self.options  = options
-        self.deps_name = deps_name
-        self.repos    = set( path(path(p).abspath()+'/') for p in repos)
-        self.out      = None if out is '' else out
-        
-        if self.out is not None and clean:
-            out = path(self.out)
-            for f in out.glob('*'):
-                if f.isdir():
-                    f.rmtree()
-                elif f.isfile():
-                    f.remove()
-    
-    def register(self, id, file):
-        mod = self.modules[id] = Module(id=id, file=file, out=self.out)
-        return mod
-    
-    def lookup(self, query, base=None):
-        absquery = path(query).abspath()
-        id = canonicalise(query, base)
-        # print "lookup(query={query}, base={base}) -> id={id}".format(**locals())
-        
-        if id in self.modules:
-            return self.modules[id]
-        
-        for repo in self.repos:
-            if absquery.startswith(repo) and absquery.isfile():
-                id = canonicalise(absquery[len(repo):])
-                return self.register(id, absquery)
-            
-            p = (repo / id).abspath()
-            for f in (p+'.cjs', p/'index.cjs', p+'.js', p/'index.js'):
-                if f.isfile():
-                    return self.register(id, f)
-        
-        raise ResolutionError('Unable to find file for (query={query}, id={id}, base={base}) in repos={}!'.format(map(str, self.repos), **locals()))
-    
-    def __iter__(self):
-        for k, mod in self.modules.iteritems():
-            yield k, mod
-    
-    def reset(self):
-        self._graph = None
-        self._at_graph = None
-        return self
-    
-    def calcGraph(self, attr):
-        if self._graph is None:
-            graph   = self._graph    = defaultdict(set)
-            atgraph = self._at_graph = defaultdict(set)
-            for mod in self.modules.values():
-                for req in mod.nonAtRequires:
-                    graph[req].add(mod)
-                for req in mod.atRequires:
-                    atgraph[req].add(mod)
-        return getattr(self, attr)
-    
-    @property
-    def graph(self):
-        return self.calcGraph('_graph')
-    
-    @property
-    def atGraph(self):
-        return self.calcGraph('_at_graph')
-    
-    def tsort(self, graph):
-        p = Popen(['tsort'], stderr=sys.stderr, stdin=PIPE, stdout=PIPE)
-        deps = '\n'.join( '%s %s' % (id, dep.id) for (id, deps) in graph.iteritems() for dep in deps )
-        p.stdin.write(deps)
-        p.stdin.close()
-        if p.wait() != 0:
-            raise ResolutionError('Cannot resolve dependencies! Requirements must be acyclic!')
-        return p.stdout.read().strip().split('\n')
-    
-    @property
-    def dependencies(self):
-        atg = self.tsort(self.atGraph)
-        nog = self.tsort(self.graph)
-        atdeps = self.atGraph.keys()
-        
-        for dep in atg[:]:
-            if dep not in atdeps:
-                try: atg.remove(dep)
-                except ValueError: pass
-            else:
-                try: nog.remove(dep)
-                except ValueError: pass
-        
-        # print '\nAtKeys:\n', pformat(atdeps), '\n'
-        # print '\nAtDeps:\n', pformat(atg), '\n'
-        # print '\nNoKeys:\n', pformat(nog), '\n'
-        return atg+nog
-    
-    def dumpDependencies(self):
-        column = Popen(['column', '-s', '\t', '-t'], stderr=sys.stderr, stdin=PIPE, stdout=PIPE)
-        # for mod in sorted(self.modules.values(), key=lambda m: len(m.requires), reverse=True):
-        for mod in sorted(self.modules.values()):
-            column.stdin.write('%s\t->\t%r\n' % (mod, sorted(mod.requires)))
-        column.stdin.close()
-        if column.wait() != 0:
-            print >> sys.stderr, 'Some sort of error has occurred!'
-        return column.stdout.read()
-    
-    def genDepLoader(self):
-        with (path(self.out)/self.deps_name).open('w') as deps:
-            deps.write( pystache.render(DEPS_TEMPLATE, uris=json.dumps(self.uris)) )
-    
-    @property
-    def uris(self):
-        return [ self.modules[d].uri for d in self.dependencies ]
-    
-    @property
-    def scriptTags(self):
-        return '\n'.join( '<script src="{}" type="text/javascript"></script>'.format(uri) for uri in self.uris )
-    
-    def save(self, dir):
-        with (path(dir)/'.modules.json').open('w') as f:
-            json.dump({
-                'modules' : self.modules,
-                'ensure' : dict( (id, list(mod.id for mod in mods)) for id,mods in self.atGraph.iteritems() ),
-                'graph'  : dict( (id, list(mod.id for mod in mods)) for id,mods in self.graph.iteritems() ),
-            }, f, indent=4)
-        return self
-    
-    @staticmethod
-    def discover(files, repos, **options):
-        "Discover listed modules and their dependencies."
-        cjs = CommonJS(repos, **options)
-        
-        # print >> sys.stderr, '\n[ %s ]' % f
-        
-        queue = [ cjs.reset().lookup(f) for f in files ]
-        seen  = set()
-        while queue:
-            mod = queue.pop(0)
-            seen.add(mod)
-            # print mod, "requirements:", mod.requires
-            for query in mod.requires:
-                # print mod, "requires", query
-                req = cjs.lookup(query, mod)
-                if req not in seen:
-                    queue.append(req)
-        
-        if options.get('deps_name', None):
-            cjs.genDepLoader()
-        
-        if options.get('print_deps', None):
-            print >> sys.stderr, '\n[ %s ]' % f
-            print >> sys.stderr, 'All Dependencies:'
-            print >> sys.stderr, cjs.dumpDependencies()
-            print >> sys.stderr, ''
-            print >> sys.stderr, 'Resolution:'
-            print >> sys.stderr, '\n'.join(cjs.dependencies)
-        
-        if options.get('script_tags', None):
-            print cjs.scriptTags
-        
-        if options.get('state', None):
-            cjs.save(options['state'])
-        
-        return cjs
-
-
-
-
-
-
-def main():
-    from optparse import OptionParser
-    
-    parser = OptionParser(
-        usage   = 'usage: %prog [options] file[...] [-- [repo_path[...]]]',
-        description = 'Compiles CommonJS modules.',
-        version = '%prog'+" %i.%i.%i" % __version__)
-    parser.add_option("-p", "--repo-paths", default='',
-        help="Comma-seperated paths to search for unqualified modules. "
-             "If a path contains :, the portion afterward will be taken as the repo URL. [default: .]")
-    parser.add_option("-o", "--out", default='build',
-        help="Root directory to write compiled JS files. Specify '' to write to module's dir. [default: build]")
-    parser.add_option("-C", "--no-clean", dest='clean', default=True, action="store_false",
-        help="Do not clean the out-dir of compiled files. [default: False if -o, True otherwise]")
-    parser.add_option("--print-deps", default=False, action="store_true", 
-        help="Prints module dependencies after compiling. [default: %default]")
-    parser.add_option("-g", "--gen-deps-script", dest='deps_name', default=None,
-        help="Generates a JS script with the given name which doc-writes tags for this set of modules.")
-    parser.add_option("-s", "--script-tags", default=False, action="store_true",
-        help="Emits script-tags for this set of modules in dependency order. [default: %default]")
-    parser.add_option("-S", "--state", default='build',
-        help="Directory to save build state. [default: %default]")
-    
-    
-    (options, args) = parser.parse_args()
-    
-    if not args:
-        parser.error("You must specify at least one JS file to resolve!")
-    
-    (files, sep, repos) = partition(sys.argv, '--')
-    files = filter(lambda f: f in args, files)
-    repos = filter(lambda f: f in args, repos)
-    repos.extend( filter(None, options.repo_paths.split(',')) )
-    
-    # print 'files:', files, 'repos:', (repos or ['.'])
-    try:
-        cjs = CommonJS.discover(files=files, repos=repos or ['.'], **options.__dict__)
-    except ResolutionError as ex:
-        print >> sys.stderr, str(ex)
-        return 1
-    
-    return 0
-
-if __name__ == '__main__':
-    sys.exit(main())
-
diff --git a/lib/cjs/deps.js b/lib/cjs/deps.js
deleted file mode 100644 (file)
index 3735e59..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-{{{uris}}}.forEach(function(uri){
-    document.write('<scr'+'ipt src="'+uri+'" type="text/javascript"></scr'+'ipt>');
-});
diff --git a/lib/cjs/dummy.js b/lib/cjs/dummy.js
deleted file mode 100644 (file)
index 71c5a6b..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-require.install(
-// Module ID
-'{{{id}}}',
-
-// Module metadata
-{
-    'name'  : '{{{name}}}',
-    'id'    : '{{{id}}}',
-    'uri'   : '{{{uri}}}'
-},
-// Dummy module: setup does nothing
-function setup{{{name}}}(require, exports, module){});
-
-{{{text}}}
diff --git a/lib/cjs/module.js b/lib/cjs/module.js
deleted file mode 100644 (file)
index 167f51a..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-require.install(
-// Module ID
-'{{{id}}}',
-
-// Module metadata
-{
-    'name'  : '{{{name}}}',
-    'id'    : '{{{id}}}',
-    'uri'   : '{{{uri}}}'
-},
-
-// Module Setup function
-function setup{{{name}}}(require, exports, module){
-
-{{{text}}}
-
-});
\ No newline at end of file
diff --git a/lib/cjs/require.js b/lib/cjs/require.js
deleted file mode 100644 (file)
index 586ad3e..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-;require = (function(){
-
-var modules = require.modules = {}
-,   cache   = require.cache   = {};
-
-function require(id){
-    if ( cache.hasOwnProperty(id) )
-        return cache[id];
-    
-    if ( !modules.hasOwnProperty(id) )
-        throw new Error('No such module "'+id+'"!');
-    
-    var module  = modules[id]
-    ,   exports = module.exports = {};
-    
-    // TODO: load the module
-    // if (module.hasOwnProperty('load')) {
-    //     /* load needs to load the file synchronously using XHR
-    //        we should probably supply a lib function, like require.load().
-    //     */
-    //     module.load.call(exports, require, exports, module);
-    // }
-    
-    // setup the module
-    module.setup.call(exports, require, exports, module);
-    
-    return exports;
-};
-
-require.install = function(id, module, setup){
-    if ( !id )
-        throw new Error('No module ID specified: id='+id+'!');
-    
-    if ( modules.hasOwnProperty(id) )
-        throw new Error('Module "'+id+'" already exists!');
-    
-    if ( module instanceof Function ) {
-        setup = module;
-        module = { 'id':id };
-    }
-    
-    module.id = id;
-    module.setup = setup;
-    modules[id] = module;
-    
-    return module;
-};
-
-return require;
-})();
index 315014f..fbd71c7 100644 (file)
@@ -1,4 +1,3 @@
-//@require('jquery')
 /*
  * jQuery Hotkeys Plugin
  * Copyright 2010, John Resig
index 90a601f..6689e7a 100644 (file)
@@ -1,2 +1 @@
-//@require('jquery')
 (function(b){b.fn.__bind__=b.fn.bind;b.fn.__unbind__=b.fn.unbind;b.fn.__find__=b.fn.find;var a={version:"0.7.9",override:/keypress|keydown|keyup/g,triggersMap:{},specialKeys:{27:"esc",9:"tab",32:"space",13:"return",8:"backspace",145:"scroll",20:"capslock",144:"numlock",19:"pause",45:"insert",36:"home",46:"del",35:"end",33:"pageup",34:"pagedown",37:"left",38:"up",39:"right",40:"down",109:"-",112:"f1",113:"f2",114:"f3",115:"f4",116:"f5",117:"f6",118:"f7",119:"f8",120:"f9",121:"f10",122:"f11",123:"f12",191:"/"},shiftNums:{"`":"~","1":"!","2":"@","3":"#","4":"$","5":"%","6":"^","7":"&","8":"*","9":"(","0":")","-":"_","=":"+",";":":","'":'"',",":"<",".":">","/":"?","\\":"|"},newTrigger:function(e,d,f){var c={};c[e]={};c[e][d]={cb:f,disableInInput:false};return c}};a.specialKeys=b.extend(a.specialKeys,{96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9",106:"*",107:"+",109:"-",110:".",111:"/"});b.fn.find=function(c){this.query=c;return b.fn.__find__.apply(this,arguments)};b.fn.unbind=function(h,e,g){if(b.isFunction(e)){g=e;e=null}if(e&&typeof e==="string"){var f=((this.prevObject&&this.prevObject.query)||(this[0].id&&this[0].id)||this[0]).toString();var d=h.split(" ");for(var c=0;c<d.length;c++){delete a.triggersMap[f][d[c]][e]}}return this.__unbind__(h,g)};b.fn.bind=function(j,f,k){var h=j.match(a.override);if(b.isFunction(f)||!h){return this.__bind__(j,f,k)}else{var n=null,i=b.trim(j.replace(a.override,""));if(i){n=this.__bind__(i,f,k)}if(typeof f==="string"){f={combi:f}}if(f.combi){for(var m=0;m<h.length;m++){var d=h[m];var g=f.combi.toLowerCase(),e=a.newTrigger(d,g,k),l=((this.prevObject&&this.prevObject.query)||(this[0].id&&this[0].id)||this[0]).toString();e[d][g].disableInInput=f.disableInInput;if(!a.triggersMap[l]){a.triggersMap[l]=e}else{if(!a.triggersMap[l][d]){a.triggersMap[l][d]=e[d]}}var c=a.triggersMap[l][d][g];if(!c){a.triggersMap[l][d][g]=[e[d][g]]}else{if(c.constructor!==Array){a.triggersMap[l][d][g]=[c]}else{a.triggersMap[l][d][g][c.length]=e[d][g]}}this.each(function(){var o=b(this);if(o.attr("hkId")&&o.attr("hkId")!==l){l=o.attr("hkId")+";"+l}o.attr("hkId",l)});n=this.__bind__(h.join(" "),f,a.handler)}}return n}};a.findElement=function(c){if(!b(c).attr("hkId")){if(b.browser.opera||b.browser.safari){while(!b(c).attr("hkId")&&c.parentNode){c=c.parentNode}}}return c};a.handler=function(e){var o=a.findElement(e.currentTarget),i=b(o),d=i.attr("hkId");if(d){d=d.split(";");var g=e.which,q=e.type,p=a.specialKeys[g],n=!p&&String.fromCharCode(g).toLowerCase(),h=e.shiftKey,c=e.ctrlKey,m=e.altKey||e.originalEvent.altKey,f=null;for(var r=0;r<d.length;r++){if(a.triggersMap[d[r]][q]){f=a.triggersMap[d[r]][q];break}}if(f){var j;if(!h&&!c&&!m){j=f[p]||(n&&f[n])}else{var l="";if(m){l+="alt+"}if(c){l+="ctrl+"}if(h){l+="shift+"}j=f[l+p];if(!j){if(n){j=f[l+n]||f[l+a.shiftNums[n]]||(l==="shift+"&&f[a.shiftNums[n]])}}}if(j){var s=false;for(var r=0;r<j.length;r++){if(j[r].disableInInput){var k=b(e.target);if(i.is("input")||i.is("textarea")||i.is("select")||k.is("input")||k.is("textarea")||k.is("select")){return true}}s=s||j[r].cb.apply(this,[e])}return s}}}};window.hotkeys=a;return b})(jQuery);
\ No newline at end of file
index 06a630e..1c35b5f 100644 (file)
@@ -1,4 +1,3 @@
-//@require('jquery')
 /**
 *
 * jquery.sparkline.js
index 2868b2b..14056bb 100644 (file)
@@ -1,4 +1,3 @@
-//@require('jquery')
 /* jquery.sparkline 1.5.1 - http://omnipotent.net/jquery.sparkline/ */
 (function($){$.fn.simpledraw=function(width,height,use_existing){if(use_existing&&this[0].vcanvas)return this[0].vcanvas;if(width==undefined)width=$(this).innerWidth();if(height==undefined)height=$(this).innerHeight();if($.browser.hasCanvas){return new vcanvas_canvas(width,height,this);}else if($.browser.msie){return new vcanvas_vml(width,height,this);}else{return false;}};var pending=[];$.fn.sparkline=function(uservalues,options){var options=$.extend({type:'line',lineColor:'#00f',fillColor:'#cdf',defaultPixelsPerValue:3,width:'auto',height:'auto',composite:false},options?options:{});return this.each(function(){var render=function(){var values=(uservalues=='html'||uservalues==undefined)?$(this).text().split(','):uservalues;var width=options.width=='auto'?values.length*options.defaultPixelsPerValue:options.width;if(options.height=='auto'){if(!options.composite||!this.vcanvas){var tmp=document.createElement('span');tmp.innerHTML='a';$(this).html(tmp);height=$(tmp).innerHeight();$(tmp).remove();}}else{height=options.height;}
 $.fn.sparkline[options.type].call(this,values,options,width,height);}
index f15d71a..41ecf34 100644 (file)
@@ -1,8 +1,8 @@
 //  -*- mode: JavaScript; tab-width: 4; indent-tabs-mode: nil; -*-
 
-/// Import our external deps first ///
-//@require('lessly/future');
-//@require('functional/to-function');
+/// Ensure our external deps first ///
+//#ensure "future"
+//#ensure "functional/to-function"
 
 /// Set up core and utilities ///
 var core = require('Y/core')
@@ -51,9 +51,7 @@ op['curried'] =
         return Yop;
     }, {});
 
-// var yclass = require('Y/types/class');
-addNames('Class subclass instantiate fabricate YBase',
-    require('Y/class'));
+addNames('Class subclass instantiate fabricate YBase', require('Y/class'));
 
 
 /// Now start assembling the normal sub-modules ///
@@ -63,13 +61,6 @@ addNames('YObject',       require('Y/types/object'));
 addNames('YString',       require('Y/types/string'));
 addNames('YNumber range', require('Y/types/number'));
 
-// var ycollection = require('Y/types/collection')
-// ,   yarray      = require('Y/types/array')
-// ,   yobject     = require('Y/types/object')
-// ,   ystring     = require('Y/types/string')
-// ,   ynumber     = require('Y/types/number')
-// ;
-
 
 function addName(name){ Y[name] = this[name]; }
 function addNames(names, ns){ names.split(' ').forEach(addName, ns); }
index 83e40a4..9996392 100644 (file)
@@ -36,7 +36,7 @@ function type_of(obj){
         class2name[ toString.call(obj) ] || "object";
 }
 
-isArray.types = [];
+// isArray.types = [];
 function isArray(obj)    { return type_of(obj) === "array" /*|| obj instanceof Y.YArray*/ ; }
 function isFunction(obj) { return type_of(obj) === "function"; }
 function isString(obj)   { return type_of(obj) === "string"; }
index f1eefdc..2e52494 100644 (file)
@@ -1,6 +1,16 @@
 //  -*- mode: JavaScript; tab-width: 4; indent-tabs-mode: nil; -*-
-//@package ezl
-//@require jquery
-//@require lessly/future
-//@require Y
+//#ensure "future"
+//#ensure "functional/to-function"
+//#ensure "jquery"
+//#ensure "Y"
+var Y = require('Y').Y;
 
+Y.extend(exports, {
+    'Layer' : require('ezl/layer').Layer,
+    
+    'loc'   : require('ezl/loc'),
+    'loop'  : require('ezl/loop'),
+    'math'  : require('ezl/math'),
+    'shape' : require('ezl/shape'),
+    'util'  : require('ezl/util')
+});
index 063a740..1c5396c 100644 (file)
@@ -1,4 +1,4 @@
-//@require('jquery')
+//#ensure "jquery"
 
 var undefined
 ,   Y   = require('Y').Y
index 949deee..f363926 100644 (file)
@@ -1,3 +1,5 @@
+//#ensure "Y/modules/y.event"
+
 var Y = require('Y').Y
 ,   Emitter = require('Y/modules/y.event').Emitter
 
index 7729159..5bed958 100644 (file)
@@ -1,5 +1,5 @@
-//@require('jquery')
-//@require('jquery.sparkline.min')
+//#ensure "jquery"
+//#ensure "jquery.sparkline.min"
 var Y = require('Y').Y
 ,
 
index 63d3b02..b26598b 100644 (file)
@@ -1,4 +1,4 @@
-//@require('jquery')
+//#ensure "jquery"
 
 var Y = require('Y').Y
 ,   Shape = require('ezl/shape/shape').Shape
diff --git a/src/ezl/util/index.cjs b/src/ezl/util/index.cjs
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/src/ezl/util/tree/index.cjs b/src/ezl/util/tree/index.cjs
new file mode 100644 (file)
index 0000000..e69de29
index 3f9da2f..6a617ac 100644 (file)
@@ -1,5 +1,5 @@
-//@require('lessly/future')
-//@require('jquery')
+//#ensure "future"
+//#ensure "jquery"
 
 var Y         = require('Y').Y
 ,   Event     = require('Y/modules/y.event').Event
index b9ac483..651be7c 100644 (file)
@@ -1,5 +1,7 @@
-//@ require('tanks/globals')
-var Y = require('Y').Y;
+//#ensure "tanks/globals"
+var Y = require('Y').Y
+,   ezl = require('ezl')
+;
 
 require('tanks/globals');
 
index 7dd5775..d330055 100644 (file)
@@ -1,5 +1,5 @@
-//@require('jquery')
-//@require('jquery.hotkeys.min')
+//#ensure "jquery"
+//#ensure "jquery.hotkeys.min"
 
 var Y    = require('Y').Y
 ,   Tank = require('tanks/thing/tank').Tank
index d269d3f..7d4503b 100644 (file)
@@ -1,3 +1,5 @@
+//#ensure "evt/class"
+
 var Y           = require('Y').Y
 ,   Class       = require('evt/class').Class
 
index 0c443d7..0f544e3 100644 (file)
@@ -1,4 +1,4 @@
-//@require('jquery')
+//#ensure "jquery"
 
 
 // TODO
index acdff0f..6924f9c 100644 (file)
@@ -1,5 +1,5 @@
-//@require('jquery')
-//@require('jquery.hotkeys.min')
+//#ensure "jquery"
+//#ensure "jquery.hotkeys.min"
 
 var Y            = require('Y').Y
 ,   config       = require('tanks/config')
index f9e48c9..23fe854 100644 (file)
--- a/tags.php
+++ b/tags.php
@@ -1,51 +1,53 @@
-<script src="build/lessly/future.js" type="text/javascript"></script>
+<script src="build/future.js" type="text/javascript"></script>
 <script src="build/functional/to-function.js" type="text/javascript"></script>
-<script src="build/jquery.js" type="text/javascript"></script>
-<script src="build/jquery.sparkline.min.js" type="text/javascript"></script>
-<script src="build/jquery.hotkeys.min.js" type="text/javascript"></script>
 <script src="build/Y/type.js" type="text/javascript"></script>
 <script src="build/Y/core.js" type="text/javascript"></script>
 <script src="build/Y/y.js" type="text/javascript"></script>
 <script src="build/Y/types/function.js" type="text/javascript"></script>
 <script src="build/Y/op.js" type="text/javascript"></script>
-<script src="build/Y/class.js" type="text/javascript"></script>
 <script src="build/Y/utils.js" type="text/javascript"></script>
+<script src="build/Y/class.js" type="text/javascript"></script>
 <script src="build/Y/types/collection.js" type="text/javascript"></script>
-<script src="build/Y/types/object.js" type="text/javascript"></script>
-<script src="build/Y/types/number.js" type="text/javascript"></script>
 <script src="build/Y/types/string.js" type="text/javascript"></script>
 <script src="build/Y/types/array.js" type="text/javascript"></script>
+<script src="build/Y/types/object.js" type="text/javascript"></script>
+<script src="build/Y/types/number.js" type="text/javascript"></script>
 <script src="build/Y.js" type="text/javascript"></script>
-<script src="build/ezl/loop/cooldown.js" type="text/javascript"></script>
-<script src="build/tanks/globals.js" type="text/javascript"></script>
+<script src="build/jquery.js" type="text/javascript"></script>
+<script src="build/jquery.sparkline.min.js" type="text/javascript"></script>
 <script src="build/Y/modules/y.event.js" type="text/javascript"></script>
+<script src="build/ezl/util.js" type="text/javascript"></script>
+<script src="build/ezl/loop/fps.js" type="text/javascript"></script>
 <script src="build/ezl/math/vec.js" type="text/javascript"></script>
-<script src="build/ezl/math/rect.js" type="text/javascript"></script>
-<script src="build/tanks/config.js" type="text/javascript"></script>
+<script src="build/ezl/loop/cooldown.js" type="text/javascript"></script>
+<script src="build/ezl/loop/eventloop.js" type="text/javascript"></script>
 <script src="build/ezl/loc/loc.js" type="text/javascript"></script>
-<script src="build/ezl/loop/fps.js" type="text/javascript"></script>
-<script src="build/ezl/util/tree/quadtree.js" type="text/javascript"></script>
+<script src="build/ezl/math/rect.js" type="text/javascript"></script>
 <script src="build/ezl/math/line.js" type="text/javascript"></script>
-<script src="build/ezl/loop/eventloop.js" type="text/javascript"></script>
 <script src="build/ezl/loop.js" type="text/javascript"></script>
-<script src="build/tanks/ui/config.js" type="text/javascript"></script>
-<script src="build/evt/class.js" type="text/javascript"></script>
-<script src="build/tanks/map/pathmap.js" type="text/javascript"></script>
 <script src="build/ezl/math.js" type="text/javascript"></script>
 <script src="build/ezl/loc/boundingbox.js" type="text/javascript"></script>
 <script src="build/ezl/loc/square.js" type="text/javascript"></script>
 <script src="build/ezl/loc.js" type="text/javascript"></script>
-<script src="build/tanks/thing/thing.js" type="text/javascript"></script>
 <script src="build/ezl/layer.js" type="text/javascript"></script>
 <script src="build/ezl/shape/shape.js" type="text/javascript"></script>
-<script src="build/tanks/map/trajectory.js" type="text/javascript"></script>
 <script src="build/ezl/shape/line.js" type="text/javascript"></script>
+<script src="build/ezl/shape/polygon.js" type="text/javascript"></script>
 <script src="build/ezl/shape/circle.js" type="text/javascript"></script>
 <script src="build/ezl/shape/rect.js" type="text/javascript"></script>
-<script src="build/ezl/shape/polygon.js" type="text/javascript"></script>
 <script src="build/ezl/shape.js" type="text/javascript"></script>
-<script src="build/tanks/ui/grid.js" type="text/javascript"></script>
+<script src="build/ezl.js" type="text/javascript"></script>
+<script src="build/jquery.hotkeys.min.js" type="text/javascript"></script>
+<script src="build/tanks/globals.js" type="text/javascript"></script>
+<script src="build/evt/class.js" type="text/javascript"></script>
+<script src="build/tanks/config.js" type="text/javascript"></script>
+<script src="build/ezl/util/tree/quadtree.js" type="text/javascript"></script>
+<script src="build/tanks/ui/config.js" type="text/javascript"></script>
+<script src="build/tanks/map/pathmap.js" type="text/javascript"></script>
+<script src="build/tanks/thing/thing.js" type="text/javascript"></script>
+<script src="build/tanks/map/trajectory.js" type="text/javascript"></script>
 <script src="build/tanks/map/wall.js" type="text/javascript"></script>
+<script src="build/tanks/ui/grid.js" type="text/javascript"></script>
 <script src="build/tanks/thing/bullet.js" type="text/javascript"></script>
 <script src="build/tanks/thing/tank.js" type="text/javascript"></script>
 <script src="build/tanks/thing/player.js" type="text/javascript"></script>
index da77d84..3858af2 100644 (file)
--- a/tanks.php
+++ b/tanks.php
@@ -60,7 +60,7 @@ class Tanks {
         // "lib/uki/uki-more.dev.js",
         // "lib/uki/uki-theme/aristo.js",
         
-        "src/lessly/future.js",
+        "src/future.js",
         "lib/cjs/require.js",
         
         "src/Y/y.js.php",