{"_id":"slicks","_rev":"27-de1a63fe9db3346061f72ffd9f94e905","name":"slicks","description":"An MVC framework for Javascript SPA.","dist-tags":{"latest":"1.3.8"},"versions":{"0.0.0":{"name":"slicks","version":"0.0.0","description":"An MVC framework for Javascript.","main":"dist/slicks.js","scripts":{"test":"make test"},"keywords":["mvc","model","collection","view","router","javascript","framework"],"repository":{"type":"git","url":"git://github.com/steveesamson/slicks.git"},"author":{"name":"Steve Samson","email":"stevee.samson@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/steveesamson/slicks/blob/master/MIT-License.txt"}],"bugs":{"url":"https://github.com/steveesamson/slicks/issues"},"dependencies":{"jquery":"~2.1.0"},"devDependencies":{"mocha":"~1.17.1","chai":"~1.9.0"},"_id":"slicks@0.0.0","dist":{"shasum":"15e989fb4ef207c6620d5a70a104e27740cf0ab4","tarball":"https://registry.npmjs.org/slicks/-/slicks-0.0.0.tgz","integrity":"sha512-wWZ3SaQN0zGZCFBbKkh6d8jtWR6ECHM/GVxcBXqIa1TziGBosXTkWicjwiT7aub9vyIZMqKjO1M4yWKBIT2t2A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID+/k7fPrhMHDVrBhF/U1p8AzjspCy5yC19XhtR3FybyAiEAlhXbyavlM2U1+FortmN54KfTFjxZcpPsDkb6WAR0aQU="}]},"_from":".","_npmVersion":"1.3.6","_npmUser":{"name":"steveesamson","email":"stevee.samson@gmail.com"},"maintainers":[{"name":"steveesamson","email":"stevee.samson@gmail.com"}]},"0.1.0":{"name":"slicks","version":"0.1.0","description":"An MVC framework for Javascript.","main":"dist/slicks.js","scripts":{"test":"make test"},"keywords":["mvc","model","collection","view","router","javascript","framework"],"repository":{"type":"git","url":"git://github.com/steveesamson/slicks.git"},"author":{"name":"Steve Samson","email":"stevee.samson@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/steveesamson/slicks/blob/master/MIT-License.txt"}],"bugs":{"url":"https://github.com/steveesamson/slicks/issues"},"dependencies":{"jquery":"~2.1.0"},"devDependencies":{"mocha":"~1.17.1","chai":"~1.9.0"},"_id":"slicks@0.1.0","dist":{"shasum":"35b6209ba90ce5ae95f799fce634b3402b775e61","tarball":"https://registry.npmjs.org/slicks/-/slicks-0.1.0.tgz","integrity":"sha512-l2NgyedJtkkaB06YvMezM9eGZCpf8hkNm1G5QA3PDCBpI5eCfIswm5bKZEORS1/0aHSb3lPCcqRCgk5FRQHdnw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHCxTNrcLVsist4seRiFLrpXO1soW4BKspshN0443vonAiAH3i1Jnxc7leHEdZs1FvcR7mltR1GEUgIrOytZwvpNDg=="}]},"_from":".","_npmVersion":"1.3.6","_npmUser":{"name":"steveesamson","email":"stevee.samson@gmail.com"},"maintainers":[{"name":"steveesamson","email":"stevee.samson@gmail.com"}]},"1.2.0":{"name":"slicks","version":"1.2.0","description":"An MVC framework for Javascript.","main":"dist/slicks.js","license":"MIT","scripts":{"test":"./node_modules/mocha/bin/mocha --ui tdd --recursive ./test/slicks.js"},"keywords":["mvc","model","collection","view","router","javascript","framework"],"repository":{"type":"git","url":"git://github.com/steveesamson/slicks.git"},"author":{"name":"Steve Samson","email":"stevee.samson@gmail.com"},"bugs":{"url":"https://github.com/steveesamson/slicks/issues"},"dependencies":{"hashids":"^1.0.1","seleto":"^1.1.0"},"devDependencies":{"atomus":"^2.0.0","chai":"^3.5.0","mocha":"^2.5.3"},"gitHead":"7124407bf5f57892dc7d588d2be8fae0ddef621c","homepage":"https://github.com/steveesamson/slicks#readme","_id":"slicks@1.2.0","_shasum":"2dbccb9c6eb6ecd347d574b0c390d764377f395a","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"steveesamson","email":"stevee.samson@gmail.com"},"dist":{"shasum":"2dbccb9c6eb6ecd347d574b0c390d764377f395a","tarball":"https://registry.npmjs.org/slicks/-/slicks-1.2.0.tgz","integrity":"sha512-UjdHuHi8x+TjqWjM7o5JH5s6yyaBOJAHKnzBzppSBB5Q0NxXqbDvS/ue9Bpr/FdSOD9j/o+7LBnEG9x1gehJIA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYTzTEE/4FxznLvXaLeXhzrK3jg3YCtSVy6RRMdBhB3wIgQYEGGzHS/dlQdFcVz+I+ZGD26uYZVjo6Nynnwrh6fMw="}]},"maintainers":[{"name":"steveesamson","email":"stevee.samson@gmail.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/slicks-1.2.0.tgz_1469031100543_0.6497181714512408"}},"1.2.1":{"name":"slicks","version":"1.2.1","description":"An MVC framework for Javascript.","main":"dist/slicks.js","license":"MIT","scripts":{"test":"./node_modules/mocha/bin/mocha --ui tdd --recursive ./test/slicks.js"},"keywords":["mvc","model","collection","view","router","javascript","framework"],"repository":{"type":"git","url":"git://github.com/steveesamson/slicks.git"},"author":{"name":"Steve Samson","email":"stevee.samson@gmail.com"},"bugs":{"url":"https://github.com/steveesamson/slicks/issues"},"devDependencies":{"atomus":"^2.0.0","chai":"^3.5.0","mocha":"^2.5.3"},"dependencies":{"slicks-utils":"^1.0.1"},"gitHead":"90d0c6237d8eae40e1640d752c9b63a09540d1e4","homepage":"https://github.com/steveesamson/slicks#readme","_id":"slicks@1.2.1","_shasum":"da4340cb5af5a2cf25dcd21d717c8e180ab8370b","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"steveesamson","email":"stevee.samson@gmail.com"},"dist":{"shasum":"da4340cb5af5a2cf25dcd21d717c8e180ab8370b","tarball":"https://registry.npmjs.org/slicks/-/slicks-1.2.1.tgz","integrity":"sha512-gKTJ3uDOh2pKZreisNQAvPDH47Qcn5CQLAOekHiCaNEFfUSwOY+rVToj4C1V3SJ/lEV39OqSLNlW7ePF7mgdag==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEhOnSkLNT4UUMYYz3rbb+0EYqV0foHw0sP88B6z7BRXAiBOSNx/6R3snN09gZBbFBzMvvqCw3dK0x+Ie0nDsCHQNA=="}]},"maintainers":[{"name":"steveesamson","email":"stevee.samson@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/slicks-1.2.1.tgz_1478351421221_0.9683229967486113"}},"1.2.2":{"name":"slicks","version":"1.2.2","description":"An MVC framework for Javascript.","main":"dist/slicks.js","license":"MIT","scripts":{"test":"./node_modules/mocha/bin/mocha --ui tdd --recursive ./test/slicks.js"},"keywords":["mvc","model","collection","view","router","javascript","framework"],"repository":{"type":"git","url":"git://github.com/steveesamson/slicks.git"},"author":{"name":"Steve Samson","email":"stevee.samson@gmail.com"},"bugs":{"url":"https://github.com/steveesamson/slicks/issues"},"devDependencies":{"atomus":"^2.0.0","chai":"^3.5.0","mocha":"^2.5.3"},"dependencies":{"shortid":"^2.2.6","slicks-utils":"^1.0.1"},"gitHead":"1add32dd5ef445340cd1d0cb65fbec756c246f53","homepage":"https://github.com/steveesamson/slicks#readme","_id":"slicks@1.2.2","_shasum":"b0a5a8615d5426c89f87dc21dc68ff9573bc20cf","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"steveesamson","email":"stevee.samson@gmail.com"},"dist":{"shasum":"b0a5a8615d5426c89f87dc21dc68ff9573bc20cf","tarball":"https://registry.npmjs.org/slicks/-/slicks-1.2.2.tgz","integrity":"sha512-j648mhGQFsc/28eDgZACsxwPxeSe5x78dLr4OifROlmZa/QCqVg1pbWUxNNn68yHFe/vpn194Y5k57MB2DnsUA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQChmYdwVy99MlLaIx9mrT2jlvwVSONVCXylyOJ5W9ryqQIhAJNtRdA9myuZwcip8j+2YWu44808iwvWfl60hEtZ6Hj7"}]},"maintainers":[{"name":"steveesamson","email":"stevee.samson@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/slicks-1.2.2.tgz_1478353165596_0.5254571121186018"}},"1.2.3":{"name":"slicks","version":"1.2.3","description":"An MVC framework for Javascript.","main":"dist/slicks.js","license":"MIT","scripts":{"test":"./node_modules/mocha/bin/mocha --ui tdd --recursive ./test/slicks.js"},"keywords":["mvc","model","collection","view","router","javascript","framework"],"repository":{"type":"git","url":"git://github.com/steveesamson/slicks.git"},"author":{"name":"Steve Samson","email":"stevee.samson@gmail.com"},"bugs":{"url":"https://github.com/steveesamson/slicks/issues"},"devDependencies":{"atomus":"^2.0.0","chai":"^3.5.0","mocha":"^2.5.3"},"dependencies":{"shortid":"^2.2.6","slicks-utils":"^1.0.1"},"gitHead":"f41e5ad62875a1b46721ea3f19c7a2d050a37eae","homepage":"https://github.com/steveesamson/slicks#readme","_id":"slicks@1.2.3","_shasum":"8578f4b60db9ff19398e1030cab9607b49691999","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"steveesamson","email":"stevee.samson@gmail.com"},"dist":{"shasum":"8578f4b60db9ff19398e1030cab9607b49691999","tarball":"https://registry.npmjs.org/slicks/-/slicks-1.2.3.tgz","integrity":"sha512-xGTUDAKDNnH+7/dqTcdGTt7QbaStYeM6OvvPz8NMkSp081ZIhUspxVsZQxbA1HnsRP2ZzGiL0gzWADnIF7uQYg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDO1nT+8ev+pOwHJIny+udjh4h6pDMxc6r8ermcQajQ2QIhAO7hlnknLjs2WeYJmmZE++NDk59eRaDmH4xkEhS0BS2l"}]},"maintainers":[{"name":"steveesamson","email":"stevee.samson@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/slicks-1.2.3.tgz_1483521636101_0.5132820787839592"}},"1.3.0":{"name":"slicks","version":"1.3.0","description":"An MVC framework for Javascript.","main":"dist/slicks.js","license":"MIT","scripts":{"test":"./node_modules/mocha/bin/mocha --ui tdd --recursive ./test/slicks.spec.js"},"keywords":["mvc","model","collection","view","router","javascript","framework"],"repository":{"type":"git","url":"git://github.com/steveesamson/slicks.git"},"author":{"name":"Steve Samson","email":"stevee.samson@gmail.com"},"bugs":{"url":"https://github.com/steveesamson/slicks/issues"},"devDependencies":{"atomus":"^2.0.0","chai":"^3.5.0","mocha":"^2.5.3","stud":"^1.1.0"},"gitHead":"5494ce5eae6130e94183eed608e32c7f283a9d79","homepage":"https://github.com/steveesamson/slicks#readme","_id":"slicks@1.3.0","_shasum":"91b338fa9bfb3fe6cd3bec6f1ee5f3e023ab8b64","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"steveesamson","email":"stevee.samson@gmail.com"},"dist":{"shasum":"91b338fa9bfb3fe6cd3bec6f1ee5f3e023ab8b64","tarball":"https://registry.npmjs.org/slicks/-/slicks-1.3.0.tgz","integrity":"sha512-4A+Hc7K31GXJ9c0sUjiqc6Xzp1NR58EAeiHPgH54GOLE64e79WcjzXqGJbgWgzRFzhGoq+7AJj22aUDYBo4EzQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVtzS6Tso7LoXDBTg8J4k0+2YSFmYYNRV6lnUUAnisVQIhALHNPB5KXdM5CwLDzhAZLM9lpSH3OfPqJfWF/8vGFPzr"}]},"maintainers":[{"name":"steveesamson","email":"stevee.samson@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/slicks-1.3.0.tgz_1483678356158_0.8623067343141884"}},"1.3.1":{"name":"slicks","version":"1.3.1","description":"An MVC framework for Javascript SPA.","main":"dist/slicks.js","license":"MIT","scripts":{"test":"./node_modules/mocha/bin/mocha --ui tdd --recursive ./test/slicks.spec.js"},"keywords":["mvc","model","collection","view","router","javascript","framework"],"repository":{"type":"git","url":"git://github.com/steveesamson/slicks.git"},"author":{"name":"Steve Samson","email":"stevee.samson@gmail.com"},"bugs":{"url":"https://github.com/steveesamson/slicks/issues"},"devDependencies":{"atomus":"^2.0.0","chai":"^3.5.0","mocha":"^2.5.3","stud":"^1.1.0"},"gitHead":"a38d856efa47e9987c2e1e1d76c9680a4a7e9766","homepage":"https://github.com/steveesamson/slicks#readme","_id":"slicks@1.3.1","_shasum":"4db0b54329313868e70f6b7becee9e3736b165b3","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"steveesamson","email":"stevee.samson@gmail.com"},"dist":{"shasum":"4db0b54329313868e70f6b7becee9e3736b165b3","tarball":"https://registry.npmjs.org/slicks/-/slicks-1.3.1.tgz","integrity":"sha512-IlX4QZmFuzgPZRxJc9YgY0nWN0OFIOuXx+OTbdnPSy0wskAbfygiwdDF/ZycGxarpFoY0EFMGtJFnuG7W7fK4A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICRsy04bjCF3YqSJjNkRLjBDsgGDXy9nJZLiqQv3+fPLAiAzhWRmsx1HdUGukJle/ysKXF1alAhTFSROGhIUHM0rvw=="}]},"maintainers":[{"name":"steveesamson","email":"stevee.samson@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slicks-1.3.1.tgz_1505172435787_0.2910093429964036"}},"1.3.2":{"name":"slicks","version":"1.3.2","description":"An MVC framework for Javascript SPA.","main":"dist/slicks.js","license":"MIT","scripts":{"test":"./node_modules/mocha/bin/mocha --ui tdd --recursive ./test/slicks.spec.js"},"keywords":["mvc","model","collection","view","router","javascript","framework"],"repository":{"type":"git","url":"git://github.com/steveesamson/slicks.git"},"author":{"name":"Steve Samson","email":"stevee.samson@gmail.com"},"bugs":{"url":"https://github.com/steveesamson/slicks/issues"},"devDependencies":{"atomus":"^2.0.0","chai":"^3.5.0","mocha":"^2.5.3","stud":"^1.1.0"},"gitHead":"99a6261c2b2f41552866f4f0fae2e6943382d7ec","homepage":"https://github.com/steveesamson/slicks#readme","_id":"slicks@1.3.2","_shasum":"83340ca39b3bb9150c5f87eb69a5a9aa02ab41e1","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"steveesamson","email":"stevee.samson@gmail.com"},"dist":{"shasum":"83340ca39b3bb9150c5f87eb69a5a9aa02ab41e1","tarball":"https://registry.npmjs.org/slicks/-/slicks-1.3.2.tgz","integrity":"sha512-yiY04HeulwjSkRlxF2uOiE20Mxv13PGAWW3cmMaBnwyoN/fXAWl30vZCg/Cjki/2ZOIRkK73gNvWmY1iAn9QvQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDcvg/r2d+YJ3SPtJjzlxCBGR9Qz2RdXhP9qYJ4ShvwbAIgf0WpnY+3plA75IWo/aSnemMqzx9SyVMuISYLUiohH8Q="}]},"maintainers":[{"name":"steveesamson","email":"stevee.samson@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slicks-1.3.2.tgz_1505201608035_0.5990394486580044"}},"1.3.3":{"name":"slicks","version":"1.3.3","description":"An MVC framework for Javascript SPA.","main":"dist/slicks.js","license":"MIT","scripts":{"test":"./node_modules/mocha/bin/mocha --ui tdd --recursive ./test/slicks.spec.js"},"keywords":["mvc","model","collection","view","router","javascript","framework"],"repository":{"type":"git","url":"git://github.com/steveesamson/slicks.git"},"author":{"name":"Steve Samson","email":"stevee.samson@gmail.com"},"bugs":{"url":"https://github.com/steveesamson/slicks/issues"},"devDependencies":{"atomus":"^2.0.0","chai":"^3.5.0","mocha":"^2.5.3","stud":"^1.1.0"},"gitHead":"bb7b4ba74ab6361df7813d0b887609dd65e6d629","homepage":"https://github.com/steveesamson/slicks#readme","_id":"slicks@1.3.3","_shasum":"54d53aa9eaaa416cfd04f0288d312f11780d6473","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"steveesamson","email":"stevee.samson@gmail.com"},"dist":{"shasum":"54d53aa9eaaa416cfd04f0288d312f11780d6473","tarball":"https://registry.npmjs.org/slicks/-/slicks-1.3.3.tgz","integrity":"sha512-rrBLEE8rP49iZuFS276qSt8IfVdJFjxXAvNEGsC/Et7h+4S7XwvA561mshf6NDzg0NmTA3r80Ols4zv6wY7dDw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGta1gWoWI9L2z3lYW4qGRABxaBYa1/p59HODI2bRptHAiBWqjfGknbI68R1TWXjfgn64iwtQgn+OrDHJuH3ecH+2Q=="}]},"maintainers":[{"name":"steveesamson","email":"stevee.samson@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slicks-1.3.3.tgz_1505225575689_0.5458352686837316"}},"1.3.4":{"name":"slicks","version":"1.3.4","description":"An MVC framework for Javascript SPA.","main":"dist/slicks.js","license":"MIT","scripts":{"test":"./node_modules/mocha/bin/mocha --ui tdd --recursive ./test/slicks.spec.js"},"keywords":["mvc","model","collection","view","router","javascript","framework"],"repository":{"type":"git","url":"git://github.com/steveesamson/slicks.git"},"author":{"name":"Steve Samson","email":"stevee.samson@gmail.com"},"bugs":{"url":"https://github.com/steveesamson/slicks/issues"},"devDependencies":{"atomus":"^2.0.0","chai":"^3.5.0","mocha":"^2.5.3","stud":"^1.1.0"},"gitHead":"960c457c76f5aa881fa18695681e47e0166b3d08","homepage":"https://github.com/steveesamson/slicks#readme","_id":"slicks@1.3.4","_shasum":"9eeef7ce639009d840201303616798f525ad9733","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"steveesamson","email":"stevee.samson@gmail.com"},"dist":{"shasum":"9eeef7ce639009d840201303616798f525ad9733","tarball":"https://registry.npmjs.org/slicks/-/slicks-1.3.4.tgz","integrity":"sha512-UxD5lrKMDBGg89OC/O9tK/vVOf4hqrKFlMey8d+RaHvbF0MtpCUrjyo6LAzgL/18BWc86B+H7HcqXhvcTX4viA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCm/NGaMO0DzVgoY7/NwvaVJu95UPcq0iNmYFRjZMLZMQIhALvjoRgfDWWSsqPRDOHq4/BrN2NrgjFA1sbHNWXa7fOv"}]},"maintainers":[{"name":"steveesamson","email":"stevee.samson@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slicks-1.3.4.tgz_1505229609602_0.734473877819255"}},"1.3.5":{"name":"slicks","version":"1.3.5","description":"An MVC framework for Javascript SPA.","main":"dist/slicks.js","license":"MIT","scripts":{"test":"./node_modules/mocha/bin/mocha --ui tdd --recursive ./test/slicks.spec.js"},"keywords":["mvc","model","collection","view","router","javascript","framework"],"repository":{"type":"git","url":"git://github.com/steveesamson/slicks.git"},"author":{"name":"Steve Samson","email":"stevee.samson@gmail.com"},"bugs":{"url":"https://github.com/steveesamson/slicks/issues"},"devDependencies":{"atomus":"^2.0.0","chai":"^3.5.0","mocha":"^2.5.3","stud":"^1.1.0"},"gitHead":"96b73dbad11ffdd54eccfe2affb59ddb1cedc816","homepage":"https://github.com/steveesamson/slicks#readme","_id":"slicks@1.3.5","_shasum":"c24d5e63f53103c81d24ae82bb81196408f4216f","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"steveesamson","email":"stevee.samson@gmail.com"},"dist":{"shasum":"c24d5e63f53103c81d24ae82bb81196408f4216f","tarball":"https://registry.npmjs.org/slicks/-/slicks-1.3.5.tgz","integrity":"sha512-27/S5aqk9uoSkQaB7T7pJrZ4ckA6E5blZRTi6t8N0Lr4ZgrtHvIa7WCk03tPEQGH+xN/zmbIyLfphsVcd3toUQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCODRgmiTgXNZ0rM+e3ptgvEk20e4X0Ko6ZssCA8Eo9mgIhANzU01kEWHRRnLtNe012mYRPbVWSAhm2FzQM8RXAbi3H"}]},"maintainers":[{"name":"steveesamson","email":"stevee.samson@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slicks-1.3.5.tgz_1505330141181_0.6375025936868042"}},"1.3.7":{"name":"slicks","version":"1.3.7","description":"An MVC framework for Javascript SPA.","main":"dist/slicks.js","license":"MIT","scripts":{"test":"./node_modules/mocha/bin/mocha --ui tdd --recursive ./test/slicks.spec.js"},"keywords":["mvc","model","collection","view","router","javascript","framework"],"repository":{"type":"git","url":"git://github.com/steveesamson/slicks.git"},"author":{"name":"Steve Samson","email":"stevee.samson@gmail.com"},"bugs":{"url":"https://github.com/steveesamson/slicks/issues"},"devDependencies":{"atomus":"^2.0.0","chai":"^3.5.0","mocha":"^2.5.3","stud":"^1.1.0"},"gitHead":"3fd858a9f276b15dc77cf9427a5a15479fe21813","homepage":"https://github.com/steveesamson/slicks#readme","_id":"slicks@1.3.7","_shasum":"568d10a4ee8093266f60f2f49ccfb77d629926d6","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"steveesamson","email":"stevee.samson@gmail.com"},"dist":{"shasum":"568d10a4ee8093266f60f2f49ccfb77d629926d6","tarball":"https://registry.npmjs.org/slicks/-/slicks-1.3.7.tgz","integrity":"sha512-9xc6sMMYZdd0oB/2K6HwE9tUO3dXtpK7etHptBpS+U6s0KiwT1ewvv5eCfm+Km/TeeUel19nK7UbW2/QYz8LJQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBtbzI3LNyCA9N+b03D2p/0WJfciBQY1w3ESE8sK4+M0AiAR0hI5P9bQ005eY7js7RClOqnwb+iDjn+2rvGHksPpMw=="}]},"maintainers":[{"name":"steveesamson","email":"stevee.samson@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slicks-1.3.7.tgz_1506023183894_0.7425419634673744"}},"1.3.8":{"name":"slicks","version":"1.3.8","description":"An MVC framework for Javascript SPA.","main":"dist/slicks.js","license":"MIT","scripts":{"test":"./node_modules/mocha/bin/mocha --ui tdd --recursive ./test/slicks.spec.js"},"keywords":["mvc","model","collection","view","router","javascript","framework"],"repository":{"type":"git","url":"git://github.com/steveesamson/slicks.git"},"author":{"name":"Steve Samson","email":"stevee.samson@gmail.com"},"bugs":{"url":"https://github.com/steveesamson/slicks/issues"},"devDependencies":{"atomus":"^2.0.0","chai":"^3.5.0","mocha":"^2.5.3","stud":"^1.1.0"},"gitHead":"f8bc91af2eae5052e880240ed6c34678d86fe697","homepage":"https://github.com/steveesamson/slicks#readme","_id":"slicks@1.3.8","_shasum":"2a98b587f64d684061ca44db730494b74bbac68a","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"steveesamson","email":"stevee.samson@gmail.com"},"dist":{"shasum":"2a98b587f64d684061ca44db730494b74bbac68a","tarball":"https://registry.npmjs.org/slicks/-/slicks-1.3.8.tgz","integrity":"sha512-GnOYUI2AGmHgL0PTDkuyoRV1T3Qrv46dWpAEWrJ0fF/7kVBkG4uRI9Swj28s4cfIC3/QBEXbYnx67Z2JOOse9Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICd7Uk0hURW5yZ9uvDLWZ549K7fhXd9xKtYSmUrLG0dxAiBCU9rvMBV9Txykrm4ZBFr2OZYs8GXoI2l6qUmw5G79kA=="}]},"maintainers":[{"name":"steveesamson","email":"stevee.samson@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slicks-1.3.8.tgz_1506514936969_0.36952935019508004"}}},"readme":"#Slicks\nSlicks is a simple javascript Client MVC framework for SPA. It uses **`seleto.js`, `stud.js`** for rendering pre-compiled templates.\n\n#### Installation\n```cli\n  npm install slicks\n```\n\n####  Test\n```cli\n    npm test\n```\n\n##Slicks Components\nSlicks has the following components:\n\n- **`Slicks Model`**\n-  **`Slicks Collection`**\n-  **`Slicks View`**\n-  **`Slicks Router`**\n### Slicks Model\nThis is basically data in our application. Slicks Model accepts the following arguments(they are optional too): \n\n- **`url:`** This is an HTTP endpoint where a resource could be fetched. This could be REST endpoints or plain action endpoints usually on a server somewhere e.g `/users`; it defaults to null when not given.\n\n- **`attributes:`** This represents the fields in our model; a javascript object which defaults to `{}` when not given.\n\n\n> **Slicks supports both AJAX and Socket.io for communicating with its HTTP endpoints. It also support REST endpoints out-of-the-box**\n\nModel communicates with the server or back-end-engine(BEE) and support REST out-of-the-box. For instance, urls for a model for the **`url`** `/users` would look like the following: \n\n- **`GET /users `**- This list all the users\n\n- **`GET /users/4`** - This returns the user identified by ID = 4.\n\n- **`POST /users`** - This post a submission to create a user\n\n- **`PUT /users/4`** - This updates the user identified by ID = 4.\n\n- **`DELETE /users/4`** - This deletes the user identified by ID = 4.\n\nCreating a Slicks Model is as simple as:\n```javascript\n/*url defaults to null, attributes defaults to {}*/\nvar model = Slicks.Model();\n\n/*attributes defaults to {}*/\nvar another = Slicks.Model('/users');\n\nvar yetAnother = Slicks.Model({name:'steve',age:20});\n\nvar yetYetAnother = Slicks.Model('/users',{name:'steve',age:20});\n```\n#### Slicks Model Exposed Interfaces\nThese are the exposed model functions:\n\n- **`save:`** This usually sends a POST or PUT request to a back-end-enging (BEE) endpoint. If the model has not been saved before, the request would be `POSTed` otherwise, it would be `PUTed`. This function triggers the *`created`* event for `POSTed` requests and triggers the *`change`* event for `PUTed` requests, which you can subscribe to **ONLY** if the model is not part of a collection. Otherwise, subscribe to the *`add`* event on the containing collection. `save` also triggers the `'change'` event.\n\n- **`destroy:`** This sends a DELETE request to back-end-enging (BEE) endpoint for deletion and removes the model from a collection if it belongs to one. It also triggers the *`destroy`* event, which you can subscribe to **ONLY** if the model is not part of a collection. Otherwise, subscribe to the *`remove`* event on the containing collection.\n\n- **`set:`** *set* assigns/modifies model attributes `e.g mod.set('name','Tom')`. *set* also could be passed a map, such as `mod.set({name:'Tom'})`.\n\n- **`change:`**  *change* works exactly like `set` except that it triggers the *`'change'`* event, which you can subscribe to; it passes the modified model as argument to any passed callback of your subscribed listener; see **Slicks Model Events**.\n\n- **`get:`** *get* obviously retrieves the appropriate model attribute by passing the attribute key `e.g mod.get('name')`. This also has flavours such as  **`mod.getInt() and mod.getFloat()`** for numeric values.\n\n- **`unset:`** *unset*, as the name implies removes attributes from the Slicks model; pass the attribute key as argument. This triggers a `change` event too.\n\t\t\n- **`reset:`** *reset* clears the model attributes to `{}`; the `url` is not affected by `reset`. It triggers `change` event on the model.\n\n- **`fetch:`** *fetch* allows Slicks Model to be used to send `GET` requests to all kinds of `urls`, even when the model was not initialized with such `urls` e.g\n```javascript\nvar model = Slicks.Model({});\n\n/*This is possible even when \nmodel has no url at initialization*/\nmodel.fetch('/user/roles',{userid:'ssamson'},function(error,roles){\n\t\n\tconsole.log(error, roles);\n\n});\n``` \n- **`post:`** *post* is like `fetch`(see **`fetch`**), except it rides on `POST`, e.g\n```javascript\nvar model = Slicks.Model({}),\n\n/*Some method somewhere*/\ncredentials = getCredentials();\n\n/*This is possible even when \nmodel has no url at initialization*/\nmodel.post('/user/login',credentials,function(error, result){\n\n\t\tconsole.log(error, result);\n});\n``` \n- **`populate: This is deprecated, use set instead`** *set* helps us modify and extend model attributes like such:\n```javascript\nvar model = Slicks.Model({name:'steve'});\n\nmodel.set({name:'Tom', age:13, address:'Unknown'});\n\n/*The name has changed and age and address were added*/\nconsole.log(model.toJSON());\n``` \n- **`toObject:`** *toObject* returns the model attributes as a map `e.g mod.toObject()`.\n\n- **`toJSON:`** *toJSON* returns the model attributes as a JSON string `e.g mod.toJSON()`.\n\n- **`params:`** *params* returns the model attributes as a hash which could be used as `query-string` to routes that may need information about the model before proceeding. The route can then retrieve the model from the `path` query, parse it to model, use it and then proceed. Check **`Slicks Router`**\n\n```javascript\nvar user = Slicks.Model('/users');\n\nuser.set({name:'steve',age:25,phone:'2348099887766'});\n\n/* No more need for password */\nconsole.log(user.params()); \n\n/* output: J1olw6wQAGd8fRDDqsK9w5wPwoZ4w7xHFyzCrcOvw5NMw5tUw53Cs8OHw4HDq8OOwoTDsSNGw7RzbgpKCMO4Vk93IsORw5FSZ8Ou, \nwhich represent the entire model graph.*/\n```\n\n- **`extend:`** *extend*, obviously allows us to modify/override or add to the exposed interfaces of Slicks Model, while `set` helps to extend/modify Slicks Model `attributes`, `extend` provides a way to override/add interfaces to the Slicks Model itself. See `sync` example below for how to use `extend`.\n\n- **`sync:`** *sync* is where communication with a Back-End-Engine,**`BEE`** or **`HTTP`** endpoint takes place; in fact, if there is any need to change where application data/communication go to, `sync` should be overridden, or in Slicks terms `extend`ed. The interface signature is **`sync = function(url, mtd, params, cb)`**; where `url` is endpoint URL, `mtd` is the HTTP method like `GET, POST, PUT, DELETE` and `cb` is a callback function which receives the endpoint response. Extending or overriding Slicks Model `sync` is as simple as:\n\n```javascript\nvar model = Slicks.Model('/users');\n\nmodel.extend({\n\n    sync: function (url, method, param, cb) {\n        /*Persist or remote somewhere here \n        and thereafter invoke the callback*/\n        cb && cb({'text':'Sync override called...','method':method});\n    }\n});\n\n/*Here you can then reliably post \nwith the the new sync - simple, huh!*/\nmodel.post('/users', {id: 'steve'}, function (error, result) {\n\n    if(!error){\n\t\t/*prints {'text':'Sync override called...','method':'post'} */\n\t\tconsole.log(result);\n     }\n});\n```   \n\n- **`on`:**  *on*  is the only way of subscribing to events on the model. You can even subscribe to custom events and trigger them appropriately as needed. There is an equivalent **`off`**, used to unsubscribed from a Slicks Model event or all Slicks Model events. When the event is not passed, it removes all event subscriptions from the model.  See  **`Slicks Model Events`** for more details. Note the issue of context when subscribing to Slicks Model events, it is very important. All you need to do to subscribe to a Slicks Model event or multiple events is to provide callback and/or context like so:\n\n```javascript\n/*Create a Slicks model*/\nvar model = Slicks.Model({email:'you@me.com'}),\n\n/*Create event listener*/\nlistener = function(changedModel){\n    console.log(changedModel.toJSON());\n};\n\n/*Subscribe to event on model. \n(model, last argument) here is the context, \nif omitted, then context will be null in the callback.*/\nmodel.on('change',listener, model);\n\n/*This triggers change event \nand listener will be called, context is null here*/\nmodel.change('email','me@you.com');\n```\nYou can equally listen for changes to each of the model attributes like so:\n\n```javascript\n    \n    model.on('name:change',function(){\n        /*Attribute name changed; do stuff */\n    });\n```\n-  **`fire:`** *fire* gives us the opportunity to trigger events on the model, even our custom events. For instance, the `set` interface does not trigger any event but we want to notify subscribers that the model has changed after `set`ing a model attribute. Let us see how we can do this:\n\n```javascript\nvar model = Slicks.Model('/users',{name:'steve',age:30});\n\n/*change attribute and trigger \nchange event, subscribers will be notified*/\n/* Yes, we can chain most of model methods*/\nmodel.set('age',25).fire('change');\n```\n#### Slicks Model Events\nSlicks Model events are intuitive and so easy to use. You can even use own custom events. The following events are available on Slicks Model; and can be subscribed to.\n\n- `created:` a model was created.\n- `change:` a model attribute changes.\n- `destroy:` a model was deleted.\nThese can be subscribed to like the following:\n\n```javascript\nvar jobs = Slicks.Model();\n\n  /*Override 'sync' interface of the model*/\n  jobs.extend({\n      sync: function (url, mtd, param, cb) {\n          cb({url:url, method:mtd});\n      }\n      \n  });\n  \n/*Yes, you can chain your subscriptions*/\njobs.on('change',function(changedModel){\n\n\tconsole.log('Modified: ' +changedModel.toJSON());\n})\n.on('destroy',function(destroyedModel){\n\n   console.log('Destroyed: ' + destroyedModel.toJSON());\n})\n.on('created',function(createdModel){\n\n\tconsole.log('Created: ' +createdModel.toJSON());\n});\n\n/*Trigger the events */\njobs.change('title','Developer').save(function(error, msg){\n\t/*Do stuff */\n}).destroy(function(error, msg){\n\t/*Do stuff */\n});\n```\n\n---\n### Slicks Collection\nSlicks Collection, in its simplest conception could be seen as an array or list of Slicks Models.\nSlicks Collection has one argument: `url`. \n\n**`url:`**This is the url of an HTTP/BEE `endpoint`(REST or plain actions endpoints), usually on a server somewhere e.g `'/user'`. Slicks Collection can be created like so:\n```javascript\nvar collection = Slicks.Collection('/users');\n```\n\n#### Slicks Collection Exposed Interfaces\nThese are the exposed Slicks Collection functions:\n\n- **`fetch:`** This does the initial retrieval of models from the store(depending on what your store is)usually sends a `GET` request to an `HTTP` endpoint for retrieval. This function triggers the *`reset`* event, which you can subscribe to for notification, especially in a view. See this in action:\n\n```javascript\nvar users = Slicks.Collection('/users'),\n\n   printUsers = function(){\n   \n       users.each(function(user){\n   \n           console.log(user.toJSON());\n       });\n   };\n\nusers.on('reset',printUsers).fetch();\n```\n\n- **`create:`** This creates a Slicks Model, based on the passed options, and save it, by sending a `POST` request to the `HTTP` endpoint; it thereafter, adds the created model to its list of models. This also triggers the *`add`* event, which can be subscribed to, especially in the view. Check this:\n```javascript\n\tvar users = Slicks.Collection('/users');\n\n\t/*Note that the passed in callback could be omitted*/\n\tusers.create({name:'tom peters',age:45},function(msg,status){\n\n\t\tconsole.log('Creation status: ', status);\n\t});\n```\n\n- **`add:`** *add* obviously add a Slicks Model to the collection but not necessarily to the store. **Note** that no event is raised here, however, if there are needs to notify the view, one can manually fire an `add` event on the collection.\n\n- **`reset:`** *reset* clears the collection's list of Slicks Models to `[]`; the length is also updated; the `url` is not affected by `reset`. It triggers `change` event on the collection.\n\n- **`remove:`** *remove* obviously removes model from the collection. It fires a *`remove`* event.\n\n- **`extend:`** *extend* helps us modify/extend the exposed functions of the Slicks Collection. Read Slicks Model *`extend`* interface for better understanding.\n\n- **`asArray:`** *asArray* returns all Slicks Models in a Slicks Collection as an array of Slicks Models.\n\n- **`get(Slicks Model ID):`** This can be used to retrieve a Slicks model from a collection, say if the model has a valid id.\n\n- **`emptyModel:`** This is a handy method to retrieve a model, based on the collection's `url`, so that thereafter, the model can participate in all events related to the collection. For instance, when such model is saved, it is added to the collection automatically.\n\n- **`sync:`** *sync*, like in `Slicks Model` is where communications to the back-end-engines, `BEE` or `HTTP` endpoints take place. The interface signature is **`sync = function(url, mtd, params, cb)`**; where `url` is endpoint URL, `mtd` is the HTTP method like `GET, POST, PUT, DELETE` and `cb` is a callback function which receives the endpoint response. By default, it sends request to HTTP endpoints for the `create` and `fetch` interfaces. `sync` can be overridden via the Slicks Collection's `extend` interface like so, note that this is the earlier example extended:\n\n```javascript\nvar users = Slicks.Collection('/users'),\n\n   printUsers = function(){\n\n       users.each(function(user){\n           console.log(user.toJSON());\n       });\n   };\n\n/*extend sync for mock purpose */   \nusers.extend({sync:function(url,mtd, params, cb){\n\n    switch(mtd){\n\t    /*This works for fetch interface*/\n        case 'get':\n            cb && cb([\n                {name:'steve',age:12},\n                {name:'sam',age:32},\n                {name:'tom',age:52},\n                {name:'rita',age:17}\n            ]);\n            break;\n        /*This works for create interface*/    \n        case 'post':\n\t        params.id = 34;\n\t        cb && cb(params);\n        break;\n    }\n}});\n\nvar user = {name:'Mary', age:10};\n/*Yes chaining is ok*/\nusers.on('reset',printUsers).fetch().create(user,function(error, msg){\n\n\tif(!error){\n\t       /*New user  creation status message*/\t\n\t\tconsole.log(msg);\n\t}\t\n});\n```\n- **`on:`** *on* is the only way of subscribing to events on Slicks Collection. You can even subscribe to custom events and trigger them appropriately as needed.  There is an equivalent **`off`**, used to unsubscribed to a collection's event or all collection's events. When the event is not passed, it removes all event subscriptions from the collection. Read **Slicks Model Events** please. Note the issue of context when subscribing to Slicks Collection's events is very important, check the following examples:\n```javascript\n\tvar users = Slicks.Collection('/users'),\n\t\n   printWithNoContext = function(){\n   \n\t   console.log('With No Context');\n\t   \n       /*context 'this' is null. */\n       users.each(function(user){\n       \n           console.log(user.toJSON());\n       });\n   },\n   printWithContext = function(){\n   \n\t   console.log('With Context');\n\t   \n\t   /*context 'this' is users*/\n       this.each(function(user){\n       \n           console.log(user.toJSON());\n       });\n   };\n\t\n\t/*Extend sync for this purpose, this \n\tonly extends this collection instance*/\n\tusers.extend({sync:function(url,mtd, params, cb){\n\t\n    switch(mtd){\n\t    /*This works for fetch interface*/\n        case 'get':\n            cb && cb([\n                {name:'steve',age:12},\n                {name:'sam',age:32},\n                {name:'tom',age:52},\n                {name:'rita',age:17}\n            ]);\n            break;\n    }\n}});\n\nusers.on('reset',printWithNoContext).on('reset',printWithContext, users).fetch();\n```\n\n-  **`fire:`** *fire* gives us the opportunity to trigger events on the collection, even our custom events.\n\n- **`each:`** Used to iterate over the models in the collection. Like in Arrays' forEach but with better performance. See the `code example above` for the use of Slicks Collection's `each` interface.\n\n---\n\n### Slicks View\nSlicks Views are a sensible way of managing pieces of user interface, UI in a self-contained manner. The view expects all view templates in either pre-compiled `stud.js` templates or inline text-based templates.\n\nFor instance, take a template for a list of users, the following shows the user item template and the compiled version for stud.js use.\n```html\n<!--userItem.html -->\n<tr>\n <td>\n  {name} - {age} <a href='#' class='del_button'>delete</a>\n </td>\n</tr>\n```\n\n```javascript\n\n/*Compiled userItem.js stud.js template*/\n(function(c){c.register(\"userItem.html\",function(x){var b = c.buffer('');b.append(\"<tr><td>\").append(x['name']).append(\" - \").append(x['age']).append(\" <a href='#' class='del_button'>delete</a></td></tr>\"); return b.toString();});}(stud));\n\n```\n#### These are the Slicks View exposed options\nSlicks View has several options, which make the it highly customizable to your heart desires. The following are the options available in the `Slicks View`:\n\n- **`events:`** *events* gives us the opportunity to bind events to the view declaratively. For instance given the following template:\n\n```html\n<!--userItem.html -->\n<tr>\n  <td>\n    {name} - {age} <a href='#' class='del_button'>delete</a>\n  </td>\n</tr>\n```\nA view can bind event to the anchor with `class='del_button'` like this:\n```javascript\n\n    var userModel = Slicks.Model('/user', {name:'tom', age:25}),\n        \n        userItemView = Slicks.View({\n             model:userModel,\n             /*This is the container where template gets rendered*/\n             host:'tbody',\n             /*Since it is inline, the preceeding @ is mandatory.*/\n             template:\"@<tr><td>{name} - {age} <a href='#' class='del_button'>delete</a></td></tr>\",\n             events: {\n                'click:.del_button': 'delete'\n            },\n            'delete': function (e) {\n               \n                e.preventDefault();\n                this.model.destroy();\n            }\n        });\n        userItemView.render();\n```\n> **View Templates must be wrapped in a single DOM, which forms the $el of the view**\n\n\nWe used **`click`** event in the sample above but we could have used any of `blur, focus, change, keyup, keypress etc`.\n\n- **`host:`** The *host* represents a DOM or any valid selector, which will be the container for the Slicks View i.e the view will be added to the `host`.\n\n- **`model:`** The *model* is  a Slicks Model which is optional if no model was needed; it must, however, be specified if the view must render the state of a model.\n\n- **`collection:`** The *collection* is mandatory when the view is a collection Slicks View. Collection views are such views like `table` , `dl`, `ol`  and  `ul`.\n\n- **`template:`** The *template* is usually the file name of the stud.js template from which the template was generated. For instance, a `stud.js` template named `'user_row.html'` automatically compiles to `'user_row.js'` and is registered as `'user_row.html'` while another template named `'core/base.html'` compiles to `'core/base.js'` and registered as `'core/base.html'`. *template* can also be the inline text-based template supplied directly to the view. This can be used when the view is not involving; something like a list item could use the inline template type. However, a more involving template will be better as a `stud.js` pre-compiled template file. \n\n> **Note** that  when inline `template` is used, it is usually preceeded with a `@` sign as seen in the earlier example.\n\n- **`remove:`** *remove* is usually called when the backing model for the view has been delete/destroyed. You will normally need not call this function unless you want a custom behaviour(the view listens to for the `destroy` event and remove the view appropriately).\n\n- **`hide:`** *hide* is used to hide the view for whatever reason. You can pass arguments like *`fadeOut and slideUp`* to this function to control its behaviour.\n\n- **`show:`** *show* is used to display the view if it was hidden for whatever reason. You can pass arguments like *`fadeIn, slideDown`* to this function to control its behaviour.\n\n- **`render:`** *render*, when called, will add the view to the DOM, displaying the state of its model. *render* should be overridden in view that display contents of collection for consistent rendering.\n\n- **`empty_before_render:`** *empty_before_render* is by default `true`; it determines whether/or not the view's `host`should be emptied before rendering should take place.\n\n- **`data:`** *data*, when called returns a JSON object  representing all the values of inputs on a form view.\n\n- **`reset:`** *reset* clear all the values on a view; useful, especially on form views.\n\n- **`extend:`** *extend* helps us modify/extend the options of the Slicks View. Read Slicks Model *`extend`* interface for better understanding.\n\n- **`isReactive:`** *isReactive* is a flag, true/false and applicable when real-time interactions are needed and views are expected to react to server or back-end-engine (BEE) messages. It is false by default.\n\n- **`onComets:`** *onComets* works with *isReactive=true*, by proxying all messages from the server or BEE. *onComets* can be overridden to trap the server messages for proper processing. By default it updates the model/collection backing the view so the view can re-render itself. Such operations like model creation, update and deletion are implemented for view. \n\n## Slicks View Lifecycle Events\n- **`beforeEvents:`** *beforeEvents* is called before any event is bound to the view and should be overridden appropriately when needed.\n\n- **`beforeRender:`** *beforeRender* allows you to do implement view setups. It is the first routine to run in the view before view rendering, hence, it is the best place to register your events. A simple use case is as follows:\n\n```javascript\n\nvar userItemView = Slicks.View({\n      model:userModel,\n      template:\"@<li>{name} - {age} <a href='#' class='del_button'>delete</a></li>\",\n      beforeRender:function()\n\t  {\n\t      this.model.on('change', this.render, this);\n\t      this.model.on('destroy', this.remove, this);\n\t      this.render();\n\t  },\n      events: {\n         'click:.del_button': 'delete'\n     },\n     'delete': function (e) {\n         e.preventDefault();\n         this.model.destroy();\n     }\n});\n```\n- **`afterRender:`** *afterRender* is called once after the view was render. \n\n- **`beforeDestroy`** *beforeDestroy* is called once before the view is removed from the DOM. This is the ideal place for clean ups.\n\n###Slicks Router\nSlick Router is a fork of [Pathjs](https://github.com/mtrpcic/pathjs), a wonderful piece of module for mapping routes, for deep-linking amongst pages and handling browsers history.\n \n#### These are the Slicks Router exposed interfaces\n- **`goBack:`** *goBack*  can be used to go to the previous view.\n\n- **`map:`**  This is where we assign a  request path to a handler routine.\n\n```javascript\nvar Router = Slicks.Router();\n/*:id is mandatory here, otherwise, \nthis route will never be matched.*/\nRouter.map('#/comments/:id').to(function () {\n   var commentId = this.params['id']\n   alert('Comments with ID: ' + commentId);\n});\n```\n- **`root:`** This specifies the default route in situation where no path is specified. See the listing below.\n\n- **`rescue:`**  It traps all requests that do not match any configured route. See listing  under usage.\n\n- **`dispatch:`** *dispatch* allows us navigate to another view by passing the **`path`** to the target view.\n\n- **`listen:`** *listen* is very important, in fact, if you forgot to tell Slicks Router to listen, none of your routes would function at all. See listings below..\n\nSlicks Router, in its simplest form,  allows you define your routes like so:\n```javascript\nvar Router = Slicks.Router();\n\n/*:id is mandatory here, otherwise, \nthis route will never be matched.*/\nRouter.map('#/comments/:id').to(function () {\n\n\tvar commentId = this.params['id'];\n\t\n   alert('Comments with ID: ' + commentId);\n});\n\n/*:id is optional here, so works \nfor both '#/users' and '#/users/4'*/\nRouter.map('#/users(/:id)').to(function () {\n\n   alert('Users');\n});\n\nRouter.map('#/users/register/:query').to(function () {\n\n/*this.query() is a JSON representing \nthe passed model to be registered.*/\n/*Check params under Slicks Model \nExposed Interfaces*/\n   alert('New user details: ' + JSON.stringify(this.query()));\n});\n\n/*Landing route when none is specified*/\nRouter.root(\"#/\");\n/*Notifications when \na non-existent route is called*/\nRouter.rescue(function () {\n\n    alert('404: Sorry, resource not found');\n});\n/*Call this last to start \nthe Router.IMPORTANT*/\nRouter.listen();\n    \n```\n## Simple Usage\nLet us assume a user management view. The users will have attributes like `name and age` for instance. Further, our users will be displayed in a table as shown below:\n\n```html\n    <!--1. user.html table stud.js template-->\n\t<table>\n      <thead>\n      \n         <tr>\n            <th>Name</th>\n            <th></th>\n        </tr>\n       </thead>\n       <tbody>\n       </tbody>\n       </table>\n```\nThe above compiles to `user.js`. The next thing is to write our row template(in `stud.js`), which will contain each user record. Let us think of a user table row, a simple `stud.js` template for it looks as shown:\n\n```html\n   <!--2. user_row.html row stud.js template-->\n   <tr>\n\t  <td>{name}</td>\n\t  <td>\n\t  <a href='#' class='details'>details</a>|<a href='#' class='remove'>delete</a>\n\t  </td>\n    </tr>\n```\n\n> **Note:** The above template must be compiled to javascript with `stud.js compiler`. The template above would be compiled into a `user_row.js` file and loaded in the head of your html file. Once that was done, the following Slick view will use the template like so:\nAlternatively, inline template could be used.\n\nNow let us tie everything together as shown below(I believe it is clear as it is heavy on comments):\n\n\n```javascript\n    var userCollection = Slicks.Collection('/user'),\n    \n       userTableView = Slicks.View({\n            collection:userCollection,\n            /*specify which DOM hosts \n            this view e.g body*/\n            host:'body',\n            /*See user.html in 1 above*/\n            template:'user',\n            beforeRender: function () {\n                /***\n                Collection Events e.g.\n\n                add:new model was added to collection,\n                remove:model was removed from collection,\n                reset:collection was refreshed,\n                change:one or more of the models in \n                the collection was modified\n\n                ***/\n                this.collection.on('add', this.addRow, this);\n                this.collection.on('reset', this.refresh, this);\n            },\n            afterRender: function () {\n                \n                this.collection.fetch();\n            },\n            refresh:function(){\n\n                /*Save reference to view*/\n                var self = this;\n                this.collection.each(function(user){\n                    self.addRow(user);\n                })\n            },\n            addRow: function (user) {\n                var rowView = this.userRow(user);\n                rowView.render();\n            },\n            userRow:function(user){\n\n           /*This creates a user  \n           row view, setting \n           its model to the passed \n           user model and returns it.*/\n                return Slicks.View({\n                       model:user,\n                       \n                      /*define host for user row, \n                      the tbody of the user table*/\n                      \n                      host: this.$el.find('tbody'),\n                      \n                      /*define the template file, \n                      here, 'user_row.html'  */\n                      template: 'user_row',\n                      \n                      /*View events to be bound to the view*/\n                      events: {\n                          'click:.details': 'showDetails',\n                          'click:.remove':'delete'\n                      },\n                      \n                      /*Handlers for view events*/\n                      showDetails: function (e) {\n                          e.preventDefault();\n                          console.log('Details: ' + this.model.toJSON());\n                      },\n                      'delete': function (e) {\n                          e.preventDefault();\n                          this.model.destroy();\n                      },\n                      /*View setup*/\n                      beforeRender: function () {\n                          this.model.on('change', this.render, this);\n                          this.model.on('destroy', this.remove, this);\n                      }\n                  });\n\n            }\n       });\n       \n       userTableView.render();\n\n       /*Defining application routes*/\n           var Router = Slicks.Router;\n           \n           Router.map('#/comments').to(function () {\n              alert(\"Comments!\");\n           });\n           Router.map('#/users').to(function () {\n             userTableView.start();\n           });\n            Router.root('#/users');\n           \n           /*When no route was matched*/\n           Router.rescue(function () {\n               alert(\n                   '404: Sorry, resource not found'\n               );\n           });\n           /*This is important. Without this, \n           routing will not work.*/\n           Router.listen();\n```\n\nThank you, this is the end for now.\n","maintainers":[{"name":"steveesamson","email":"stevee.samson@gmail.com"}],"time":{"modified":"2022-06-26T20:56:18.519Z","created":"2014-02-03T13:14:28.641Z","0.0.0":"2014-02-03T13:14:35.984Z","0.1.0":"2014-02-03T14:09:29.433Z","1.2.0":"2016-07-20T16:11:42.139Z","1.2.1":"2016-11-05T13:10:21.908Z","1.2.2":"2016-11-05T13:39:26.239Z","1.2.3":"2017-01-04T09:20:36.790Z","1.2.4":"2017-01-05T13:35:12.049Z","1.2.5":"2017-01-05T13:49:42.462Z","1.2.6":"2017-01-05T14:18:58.980Z","1.3.0":"2017-01-06T04:52:38.024Z","1.3.1":"2017-09-11T23:27:16.900Z","1.3.2":"2017-09-12T07:33:29.260Z","1.3.3":"2017-09-12T14:12:56.777Z","1.3.4":"2017-09-12T15:20:10.855Z","1.3.5":"2017-09-13T19:15:42.371Z","1.3.7":"2017-09-21T19:46:25.251Z","1.3.8":"2017-09-27T12:22:18.464Z"},"readmeFilename":"README.md","author":{"name":"Steve Samson","email":"stevee.samson@gmail.com"},"repository":{"type":"git","url":"git://github.com/steveesamson/slicks.git"},"homepage":"https://github.com/steveesamson/slicks#readme","keywords":["mvc","model","collection","view","router","javascript","framework"],"bugs":{"url":"https://github.com/steveesamson/slicks/issues"},"license":"MIT"}